]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/root.cpp
Derive Root from Graphics::EventSource
[libs/gltk.git] / source / root.cpp
index 9fc48e00aac234aecca5f3e6e1ac1e5b0b7c09db..c7a2657005426ecc0f20eff1de7c9f8cb18a0e86 100644 (file)
@@ -79,21 +79,31 @@ void Root::tick()
        }
 }
 
-void Root::button_press_event(int x, int y, unsigned btn, unsigned)
+void Root::button_press_event(int x, int y, unsigned btn, unsigned mod)
 {
        if(visible)
        {
+               Widget *old_focus=pointer_focus;
+
                translate_coords(x, y);
                button_press(x, y, btn);
+
+               if(!pointer_focus && !old_focus)
+                       signal_button_press.emit(x, geom.h-1-y, btn, mod);
        }
 }
 
-void Root::button_release_event(int x, int y, unsigned btn, unsigned)
+void Root::button_release_event(int x, int y, unsigned btn, unsigned mod)
 {
        if(visible)
        {
+               Widget *old_focus=pointer_focus;
+
                translate_coords(x, y);
                button_release(x, y, btn);
+
+               if(!pointer_focus && !old_focus)
+                       signal_button_release.emit(x, geom.h-1-y, btn, mod);
        }
 }
 
@@ -116,19 +126,36 @@ void Root::pointer_motion_event(int x, int y)
                                lbl_tooltip->set_visible(false);
                        tooltip_target=0;
                }
+
+               if(!pointer_focus)
+                       signal_pointer_motion.emit(x, geom.h-1-y);
        }
 }
 
 void Root::key_press_event(unsigned key, unsigned mod, wchar_t ch)
 {
        if(visible)
+       {
+               Widget *old_focus=input_focus;
+
                key_press(Input::key_from_sys(key), mod, ch);
+
+               if(!input_focus && !old_focus)
+                       signal_key_press.emit(key, mod, ch);
+       }
 }
 
 void Root::key_release_event(unsigned key, unsigned mod)
 {
        if(visible)
+       {
+               Widget *old_focus=input_focus;
+
                key_release(Input::key_from_sys(key), mod);
+
+               if(!input_focus && !old_focus)
+                       signal_key_release.emit(key, mod);
+       }
 }
 
 void Root::translate_coords(int &x, int &y)