Vultraz

Untitled

Jul 16th, 2016
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 3.87 KB | None | 0 0
  1.  src/events.cpp      | 28 ++++++++++++++++++++--------
  2.  src/events.hpp      |  6 +++++-
  3.  src/preferences.cpp |  2 ++
  4.  3 files changed, 27 insertions(+), 9 deletions(-)
  5.  
  6. diff --git a/src/events.cpp b/src/events.cpp
  7. index 18469eb..6a76303 100644
  8. --- a/src/events.cpp
  9. +++ b/src/events.cpp
  10. @@ -94,8 +94,8 @@ void context::cycle_focus()
  11.         return;
  12.     }
  13.  
  14. -   handler_list::const_iterator current = focused_handler;
  15. -   handler_list::const_iterator last = focused_handler;
  16. +   handler_list::iterator current = focused_handler;
  17. +   handler_list::iterator last = focused_handler;
  18.  
  19.     if (last != handlers.begin()) {
  20.         --last;
  21. @@ -124,12 +124,16 @@ void context::cycle_focus()
  22.  
  23.  void context::set_focus(const sdl_handler* ptr)
  24.  {
  25. -   const handler_list::const_iterator i = std::find(handlers.begin(),handlers.end(),ptr);
  26. +   const handler_list::iterator i = std::find(handlers.begin(),handlers.end(),ptr);
  27.     if(i != handlers.end() && (*i)->requires_event_focus()) {
  28.         focused_handler = i;
  29.     }
  30.  }
  31.  
  32. +context::~context() {
  33. +   std::cerr << "context destructor called. handlers size is " << handlers.size() << std::endl;
  34. +}
  35. +
  36.  //this object stores all the event handlers. It is a stack of event 'contexts'.
  37.  //a new event context is created when e.g. a modal dialog is opened, and then
  38.  //closed when that dialog is closed. Each context contains a list of the handlers
  39. @@ -177,12 +181,14 @@ sdl_handler::sdl_handler(const bool auto_join) :
  40.  
  41.  sdl_handler::~sdl_handler()
  42.  {
  43. -   if (has_joined_)
  44. +   std::cerr << "sdl_handler destructor called" << std::endl;
  45. +   if (has_joined_) {
  46.         leave();
  47. +   }
  48.  
  49. -   if (has_joined_global_)
  50. +   if (has_joined_global_) {
  51.         leave_global();
  52. -
  53. +   }
  54.  }
  55.  
  56.  void sdl_handler::join() {
  57. @@ -262,6 +268,10 @@ void sdl_handler::join_global()
  58.  
  59.  void sdl_handler::leave_global()
  60.  {
  61. +   //std::cerr << "leave global called" << std::endl;
  62. +
  63. +   //std::cerr << "handlers size is " << event_contexts.back().handlers.size() << std::endl;
  64. +
  65.     sdl_handler_vector members = handler_members();
  66.     if(!members.empty()) {
  67.         for(sdl_handler_vector::iterator i = members.begin(); i != members.end(); ++i) {
  68. @@ -269,7 +279,9 @@ void sdl_handler::leave_global()
  69.         }
  70.     }
  71.  
  72. -   global_context.remove_handler(this);
  73. +   //if(!global_context.handlers.empty()) {
  74. +       global_context.remove_handler(this);
  75. +   //}
  76.  
  77.     has_joined_global_ = false;
  78.  }
  79. @@ -291,7 +303,7 @@ bool has_focus(const sdl_handler* hand, const SDL_Event* event)
  80.         return true;
  81.     }
  82.  
  83. -   const handler_list::const_iterator foc = event_contexts.back().focused_handler;
  84. +   const handler_list::iterator foc = event_contexts.back().focused_handler;
  85.     auto& handlers = event_contexts.back().handlers;
  86.  
  87.     // If no-one has focus at the moment, this handler obviously wants
  88. diff --git a/src/events.hpp b/src/events.hpp
  89. index ca0da54..3e370c0 100644
  90. --- a/src/events.hpp
  91. +++ b/src/events.hpp
  92. @@ -19,6 +19,7 @@
  93.  #include <SDL_version.h>
  94.  #include <vector>
  95.  #include <list>
  96. +#include <iostream>
  97.  
  98.  //our user-defined double-click event type
  99.  #define DOUBLE_CLICK_EVENT SDL_USEREVENT
  100. @@ -42,17 +43,20 @@ struct context
  101.         handlers(),
  102.         focused_handler(handlers.end())
  103.     {
  104. +       std::cerr << "constructing context" << std::endl;
  105.     }
  106.  
  107.     context(const context&) = delete;
  108.  
  109. +   ~context();
  110. +
  111.     void add_handler(sdl_handler* ptr);
  112.     bool remove_handler(sdl_handler* ptr);
  113.     void cycle_focus();
  114.     void set_focus(const sdl_handler* ptr);
  115.  
  116.     handler_list handlers;
  117. -   handler_list::const_iterator focused_handler;
  118. +   handler_list::iterator focused_handler;
  119.  };
  120.  
  121.  //any classes that derive from this class will automatically
  122. diff --git a/src/preferences.cpp b/src/preferences.cpp
  123. index a213600..6b86ef7 100644
  124. --- a/src/preferences.cpp
  125. +++ b/src/preferences.cpp
  126. @@ -93,6 +93,8 @@ base_manager::base_manager()
  127.  
  128.  base_manager::~base_manager()
  129.  {
  130. +   event_handler_.leave_global();
  131. +
  132.     try {
  133.         if (no_preferences_save) return;
Advertisement
Add Comment
Please, Sign In to add comment