Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- src/events.cpp | 28 ++++++++++++++++++++--------
- src/events.hpp | 6 +++++-
- src/preferences.cpp | 2 ++
- 3 files changed, 27 insertions(+), 9 deletions(-)
- diff --git a/src/events.cpp b/src/events.cpp
- index 18469eb..6a76303 100644
- --- a/src/events.cpp
- +++ b/src/events.cpp
- @@ -94,8 +94,8 @@ void context::cycle_focus()
- return;
- }
- - handler_list::const_iterator current = focused_handler;
- - handler_list::const_iterator last = focused_handler;
- + handler_list::iterator current = focused_handler;
- + handler_list::iterator last = focused_handler;
- if (last != handlers.begin()) {
- --last;
- @@ -124,12 +124,16 @@ void context::cycle_focus()
- void context::set_focus(const sdl_handler* ptr)
- {
- - const handler_list::const_iterator i = std::find(handlers.begin(),handlers.end(),ptr);
- + const handler_list::iterator i = std::find(handlers.begin(),handlers.end(),ptr);
- if(i != handlers.end() && (*i)->requires_event_focus()) {
- focused_handler = i;
- }
- }
- +context::~context() {
- + std::cerr << "context destructor called. handlers size is " << handlers.size() << std::endl;
- +}
- +
- //this object stores all the event handlers. It is a stack of event 'contexts'.
- //a new event context is created when e.g. a modal dialog is opened, and then
- //closed when that dialog is closed. Each context contains a list of the handlers
- @@ -177,12 +181,14 @@ sdl_handler::sdl_handler(const bool auto_join) :
- sdl_handler::~sdl_handler()
- {
- - if (has_joined_)
- + std::cerr << "sdl_handler destructor called" << std::endl;
- + if (has_joined_) {
- leave();
- + }
- - if (has_joined_global_)
- + if (has_joined_global_) {
- leave_global();
- -
- + }
- }
- void sdl_handler::join() {
- @@ -262,6 +268,10 @@ void sdl_handler::join_global()
- void sdl_handler::leave_global()
- {
- + //std::cerr << "leave global called" << std::endl;
- +
- + //std::cerr << "handlers size is " << event_contexts.back().handlers.size() << std::endl;
- +
- sdl_handler_vector members = handler_members();
- if(!members.empty()) {
- for(sdl_handler_vector::iterator i = members.begin(); i != members.end(); ++i) {
- @@ -269,7 +279,9 @@ void sdl_handler::leave_global()
- }
- }
- - global_context.remove_handler(this);
- + //if(!global_context.handlers.empty()) {
- + global_context.remove_handler(this);
- + //}
- has_joined_global_ = false;
- }
- @@ -291,7 +303,7 @@ bool has_focus(const sdl_handler* hand, const SDL_Event* event)
- return true;
- }
- - const handler_list::const_iterator foc = event_contexts.back().focused_handler;
- + const handler_list::iterator foc = event_contexts.back().focused_handler;
- auto& handlers = event_contexts.back().handlers;
- // If no-one has focus at the moment, this handler obviously wants
- diff --git a/src/events.hpp b/src/events.hpp
- index ca0da54..3e370c0 100644
- --- a/src/events.hpp
- +++ b/src/events.hpp
- @@ -19,6 +19,7 @@
- #include <SDL_version.h>
- #include <vector>
- #include <list>
- +#include <iostream>
- //our user-defined double-click event type
- #define DOUBLE_CLICK_EVENT SDL_USEREVENT
- @@ -42,17 +43,20 @@ struct context
- handlers(),
- focused_handler(handlers.end())
- {
- + std::cerr << "constructing context" << std::endl;
- }
- context(const context&) = delete;
- + ~context();
- +
- void add_handler(sdl_handler* ptr);
- bool remove_handler(sdl_handler* ptr);
- void cycle_focus();
- void set_focus(const sdl_handler* ptr);
- handler_list handlers;
- - handler_list::const_iterator focused_handler;
- + handler_list::iterator focused_handler;
- };
- //any classes that derive from this class will automatically
- diff --git a/src/preferences.cpp b/src/preferences.cpp
- index a213600..6b86ef7 100644
- --- a/src/preferences.cpp
- +++ b/src/preferences.cpp
- @@ -93,6 +93,8 @@ base_manager::base_manager()
- base_manager::~base_manager()
- {
- + event_handler_.leave_global();
- +
- try {
- if (no_preferences_save) return;
Advertisement
Add Comment
Please, Sign In to add comment