#include <cmath>
+#include <sigc++/bind.h>
#include "display.h"
#include "display_private.h"
#include "window.h"
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
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