}
}
-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);
}
}
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)
it is created for. The size can be changed, but a Root should always be
rendered to fill the window in order to get coordinates mapped correctly.
*/
-class Root: public Panel, public sigc::trackable
+class Root: public Panel, public Graphics::EventSource, public sigc::trackable
{
public:
sigc::signal<std::string, int, int> signal_tooltip;
public:
Root(const Resources &, Graphics::Window &);
void tick();
+
+ virtual unsigned get_width() const { return geom.w; }
+ virtual unsigned get_height() const { return geom.h; }
+
private:
virtual const char *get_class() const { return "root"; }
void button_press_event(int, int, unsigned, unsigned);