diff -r d51e334c1439 -r 29f5cd5f5367 ui/gtk/toolkit.c --- a/ui/gtk/toolkit.c Sat Oct 10 15:29:31 2015 +0200 +++ b/ui/gtk/toolkit.c Sun Nov 29 17:22:15 2015 +0100 @@ -29,6 +29,7 @@ #include #include #include +#include #include "toolkit.h" #include "toolbar.h" @@ -171,3 +172,56 @@ UiObject *ui_get_active_window() { return active_window; } + + +/* -------------------- common widget functions -------------------- */ + +static gboolean widget_button_pressed( + GtkWidget *widget, + GdkEvent *event, + gpointer userdata) +{ + UiEventData *eventdata = userdata; + + UiMouseEvent me; + me.x = (int)event->button.x; + me.y = (int)event->button.y; + + int exec = 0; + if(event->button.type == GDK_BUTTON_PRESS) { + exec = 1; + me.type = UI_PRESS; + } else if(event->button.type == GDK_2BUTTON_PRESS) { + exec = 1; + me.type = UI_PRESS2; + } + + if(exec) { + UiEvent e; + e.obj = eventdata->obj; + e.window = eventdata->obj->window; + e.document = eventdata->obj->ctx->document; + e.eventdata = &me; + e.intval = 0; + eventdata->callback(&e, eventdata->userdata); + } + return true; +} + +void ui_mouse_handler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) { + gtk_widget_set_events(widget, GDK_BUTTON_PRESS_MASK); + if(f) { + UiEventData *event = malloc(sizeof(UiEventData)); + event->obj = obj; + event->callback = f; + event->userdata = u; + + g_signal_connect(G_OBJECT(widget), + "button-press-event", + G_CALLBACK(widget_button_pressed), + event); + } else { + // TODO: warning + } +} +