diff options
Diffstat (limited to 'source/widgets/widget.c')
-rw-r--r-- | source/widgets/widget.c | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/source/widgets/widget.c b/source/widgets/widget.c index d74c541a..8866c070 100644 --- a/source/widgets/widget.c +++ b/source/widgets/widget.c @@ -34,8 +34,9 @@ /** Default padding. */ #define WIDGET_DEFAULT_PADDING 0 -void widget_init ( widget *widget, const char *name ) +void widget_init ( widget *widget, WidgetType type, const char *name ) { + widget->type = type; widget->name = g_strdup ( name ); widget->def_padding = (Padding){ { WIDGET_DEFAULT_PADDING, PW_PX, SOLID }, { WIDGET_DEFAULT_PADDING, PW_PX, SOLID }, { WIDGET_DEFAULT_PADDING, PW_PX, SOLID }, { WIDGET_DEFAULT_PADDING, PW_PX, SOLID } }; widget->def_border = (Padding){ { 0, PW_PX, SOLID }, { 0, PW_PX, SOLID }, { 0, PW_PX, SOLID }, { 0, PW_PX, SOLID } }; @@ -98,6 +99,14 @@ void widget_move ( widget *widget, short x, short y ) } } +WidgetType widget_type ( widget *widget ) +{ + if ( widget != NULL ) { + return widget->type; + } + return WIDGET_TYPE_UNKNOWN; +} + gboolean widget_enabled ( widget *widget ) { if ( widget != NULL ) { @@ -416,19 +425,41 @@ gboolean widget_need_redraw ( widget *wid ) } return FALSE; } -gboolean widget_clicked ( widget *wid, xcb_button_press_event_t *xbe ) + +widget *widget_find_mouse_target ( widget *wid, WidgetType type, gint *x, gint *y ) +{ + if ( !wid ) { + return NULL; + } + + if ( wid->find_mouse_target ) { + widget *target = wid->find_mouse_target ( wid, type, x, y ); + if ( target != NULL ) { + return target; + } + } + if ( wid->type == type ) { + return wid; + } + return NULL; +} + +gboolean widget_trigger_action ( widget *wid, guint action, gint x, gint y ) { - if ( wid && wid->clicked ) { - return wid->clicked ( wid, xbe, wid->clicked_cb_data ); + g_print ( "TRIGGER %p\n", wid ); + if ( wid && wid->trigger_action ) { + return wid->trigger_action ( wid, action, x, y, wid->trigger_action_cb_data ); } return FALSE; } -void widget_set_clicked_handler ( widget *wid, widget_clicked_cb cb, void *udata ) + +void widget_set_trigger_action_handler ( widget *wid, widget_trigger_action_cb cb, void * cb_data ) { - if ( wid ) { - wid->clicked = cb; - wid->clicked_cb_data = udata; + if ( wid->type == WIDGET_TYPE_SIDEBAR_MODI ) { + g_print ( "CUSTOM TRIGGER %p\n", wid ); } + wid->trigger_action = cb; + wid->trigger_action_cb_data = cb_data; } gboolean widget_motion_notify ( widget *wid, xcb_motion_notify_event_t *xme ) |