Updating branch refs/heads/master to 82300bf7907d846be579383cc9855daf4ddfae70 (commit) from 3d44306b86b5942887e4c1650d3cc21e102bf944 (commit)
commit 82300bf7907d846be579383cc9855daf4ddfae70 Author: Gearoid Murphy <gear...@murphy.com> Date: Sun Oct 14 15:50:17 2012 +0100 Minor mouse click behavioural tweak. taskbar-widget.c | 75 +++++++++++++++++++++++++++-------------------------- 1 files changed, 38 insertions(+), 37 deletions(-) diff --git a/taskbar-widget.c b/taskbar-widget.c index 2cecb52..e4d671d 100644 --- a/taskbar-widget.c +++ b/taskbar-widget.c @@ -2251,6 +2251,7 @@ static gboolean xfce_taskbar_group_button_press_event } // This function handles all the logic for mouse button relase on the taskbar icons +// It's a witches brew of shimmies and hacks static gboolean xfce_taskbar_group_button_release_event (GtkWidget *button, GdkEventButton *event, XfceTaskBarGroup *group) { @@ -2272,26 +2273,6 @@ static gboolean xfce_taskbar_group_button_release_event return FALSE ; } - //Check if there's a hover menu active, if so, disable it - GList *attached = gtk_menu_get_for_attach_widget(group->button); - guint list_length = g_list_length(attached); - size_t menu_source = 0 ; - panel_assert (list_length <= 1 && "There should only be at most one menu attached to the icon!"); - if(list_length == 1) - { - GtkMenu *menu = attached->data; - gint time_diff = (gtk_get_current_event_time() - group->hover_visible_timestamp); - menu_source = (size_t)(g_object_get_data(G_OBJECT(menu), "menu-source")); - //We don't want to dismiss the menu if the user generates a - //request for it very shortly after it has appeared - if(event->button == LEFTMOUSE && time_diff < HOVER_DISPLAY_COOLOFF) - { - return TRUE ; - } - - gtk_widget_destroy (GTK_WIDGET(menu)); - } - //Middle mouse click on the taskbar icon launchs the icon if(event->button == MIDMOUSE) { @@ -2299,27 +2280,47 @@ static gboolean xfce_taskbar_group_button_release_event return TRUE ; } - - if (event->button == LEFTMOUSE || event->button == RIGHTMOUSE) + //Get the number of visible windows for the group icon + //If there's only a single window visible, set active_child + //otherwise active_child will be NULL, regardless of multiple + //active windows + GSList *li; + XfceTaskBarWNode *child, *active_child=0x0 ; + int visible_count=0x0 ; + for (li = group->wnodes; li != NULL; li = li->next) { - GSList *li; - XfceTaskBarWNode *child, *active_child=0x0 ; - int visible_count=0x0 ; - for (li = group->wnodes; li != NULL; li = li->next) + child = li->data; + if(child->visible) { - child = li->data; - if(child->visible) + visible_count += 1 ; + if(active_child == 0x0 && visible_count == 1) + active_child = child ; + else { - visible_count += 1 ; - if(active_child == 0x0 && visible_count == 1) - active_child = child ; - else - { - active_child = 0x0 ; - } + active_child = 0x0 ; } } - + } + + //Check if there's a hover menu active, if so, dismiss it, but only if it's outside the cooloff period + //If possible, detect menu_source to reflect the mouse button which invoked the hover menu + //This is used to re-activate the hover menu when a different mouse button is used + size_t menu_source = 0 ; + if(g_list_length(gtk_menu_get_for_attach_widget(group->button)) == 1) + { + GtkMenu *menu = (gtk_menu_get_for_attach_widget(group->button))->data; + gint time_diff = (gtk_get_current_event_time() - group->hover_visible_timestamp); + menu_source = (size_t)(g_object_get_data(G_OBJECT(menu), "menu-source")); + //We don't want to dismiss the menu if the user generates a request for it very shortly after it has appeared + if(active_child == 0x0 && event->button == LEFTMOUSE && time_diff < HOVER_DISPLAY_COOLOFF) + { + return TRUE ; + } + gtk_widget_destroy (GTK_WIDGET(menu)); + } + + if (event->button == LEFTMOUSE || event->button == RIGHTMOUSE) + { // If a single instance of a class window is visible to the taskbar, // activate that instance instead of showing the associated group menus, // when a left mouse click falls on the icon @@ -2329,7 +2330,7 @@ static gboolean xfce_taskbar_group_button_release_event return TRUE ; } - //2nd click of same button dismisses the menu + //2nd click of same mouse button means we don't generate a new menu if(menu_source == event->button) { return TRUE ; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits