From f38b91c46bf7a915e2984524d72a8eb97afceba5 Mon Sep 17 00:00:00 2001 From: Juan Pablo Ugarte Date: Thu, 17 Apr 2014 00:51:11 -0300 Subject: Fixed cursor glitch while moving the poiner across multiple placeholders. The glitch was because we where updating the cursor on motion event only so when the pointer enters a new placeholder the cursor is set back to default and then changed again when the motion notify is finally triggered. --- gladeui/glade-placeholder.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'gladeui') diff --git a/gladeui/glade-placeholder.c b/gladeui/glade-placeholder.c index 6db4f1ab..40a4cb0f 100644 --- a/gladeui/glade-placeholder.c +++ b/gladeui/glade-placeholder.c @@ -353,22 +353,30 @@ glade_placeholder_draw (GtkWidget *widget, cairo_t *cr) return FALSE; } -static gboolean -glade_placeholder_motion_notify_event (GtkWidget *widget, GdkEventMotion *event) +static void +glade_placeholder_update_cursor (GladePlaceholder *placeholder, GdkWindow *win) { - GladePointerMode pointer_mode; - GladeProject *project; - - g_return_val_if_fail (GLADE_IS_PLACEHOLDER (widget), FALSE); - - project = glade_placeholder_get_project (GLADE_PLACEHOLDER (widget)); - pointer_mode = glade_project_get_pointer_mode (project); + GladeProject *project = glade_placeholder_get_project (placeholder); + GladePointerMode pointer_mode = glade_project_get_pointer_mode (project); if (pointer_mode == GLADE_POINTER_SELECT) - glade_cursor_set (project, event->window, GLADE_CURSOR_SELECTOR); + glade_cursor_set (project, win, GLADE_CURSOR_SELECTOR); else if (pointer_mode == GLADE_POINTER_ADD_WIDGET) - glade_cursor_set (project, event->window, GLADE_CURSOR_ADD_WIDGET); + glade_cursor_set (project, win, GLADE_CURSOR_ADD_WIDGET); +} +static gboolean +glade_placeholder_enter_notify_event (GtkWidget *widget, + GdkEventCrossing *event) +{ + glade_placeholder_update_cursor (GLADE_PLACEHOLDER (widget), event->window); + return FALSE; +} + +static gboolean +glade_placeholder_motion_notify_event (GtkWidget *widget, GdkEventMotion *event) +{ + glade_placeholder_update_cursor (GLADE_PLACEHOLDER (widget), event->window); return FALSE; } @@ -537,6 +545,7 @@ glade_placeholder_class_init (GladePlaceholderClass *klass) widget_class->unmap = glade_placeholder_unmap; widget_class->size_allocate = glade_placeholder_size_allocate; widget_class->draw = glade_placeholder_draw; + widget_class->enter_notify_event = glade_placeholder_enter_notify_event; widget_class->motion_notify_event = glade_placeholder_motion_notify_event; widget_class->button_press_event = glade_placeholder_button_press; widget_class->popup_menu = glade_placeholder_popup_menu; -- cgit v1.2.1