X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fdisplay.cpp;h=1c7b639a06d8f993b72ef92fb19d9d211271ed5b;hb=91d461ab8ef19ba49423dbbbe9b467ffdf0d1584;hp=40112a35f9408760c5f6ab05ea286033403282b1;hpb=9ffb9f22faf7c540083e6df828500d54aabcbb56;p=libs%2Fgui.git diff --git a/source/graphics/display.cpp b/source/graphics/display.cpp index 40112a3..1c7b639 100644 --- a/source/graphics/display.cpp +++ b/source/graphics/display.cpp @@ -1,4 +1,5 @@ #include +#include #include "display.h" #include "display_private.h" #include "window.h" @@ -11,11 +12,15 @@ namespace Graphics { void Display::add_window(Window &wnd) { priv->windows[wnd.get_private().window] = &wnd; + wnd.signal_got_focus.connect(sigc::bind(sigc::mem_fun(this, &Display::window_got_focus), sigc::ref(wnd))); + wnd.signal_lost_focus.connect(sigc::mem_fun(this, &Display::window_lost_focus)); } void Display::remove_window(Window &wnd) { priv->windows.erase(wnd.get_private().window); + if(&wnd==focus_window) + focus_window = 0; } const VideoMode &Display::get_desktop_mode() const @@ -66,11 +71,28 @@ const VideoMode *Display::find_mode(unsigned width, unsigned height) const return find_mode(VideoMode(width, height)); } +void Display::window_got_focus(Window &w) +{ + focus_window = &w; +} + +void Display::window_lost_focus() +{ + focus_window = 0; +} + void Display::tick() { check_error(); + Window *old_focus = focus_window; + while(process_events()) ; + + if(old_focus && !focus_window) + signal_lost_focus.emit(); + else if(!old_focus && focus_window) + signal_got_focus.emit(); } } // namespace Graphics