[Xfce4-commits] <xfce4-taskbar-plugin:master> Minor fixes for the taskbar drag and drop issues, outstanding bugs still remain...

Gearoid Murphy noreply at xfce.org
Sat Oct 13 19:32:01 CEST 2012


Updating branch refs/heads/master
         to 5a2d92e7b19e23087e89f9e8a0eab14d2a991766 (commit)
       from 92e1f9b78c3c0a2832b5f2514b154ba2f4e86223 (commit)

commit 5a2d92e7b19e23087e89f9e8a0eab14d2a991766
Author: Gearoid Murphy <gearoid at murphy.com>
Date:   Sat Oct 13 17:18:37 2012 +0100

    Minor fixes for the taskbar drag and drop issues, outstanding bugs still remain...

 taskbar-widget.c |   42 ++++++++++++++++++++++++++----------------
 1 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/taskbar-widget.c b/taskbar-widget.c
index 61ae585..7ccf301 100644
--- a/taskbar-widget.c
+++ b/taskbar-widget.c
@@ -99,7 +99,10 @@ struct _XfceTaskBar
     /* classgroups of all the windows in the taskbar */
     GHashTable *groups;
 
-    /* size of the panel pluin */
+    /* flag to indicate in-progress drag */
+    gboolean dragactive ;
+
+    /* size of the panel plugin */
     gint size;
 
     /* orientation of the taskbar */
@@ -184,7 +187,6 @@ struct _XfceTaskBarGroup
     GSList        *wnodes;
     gchar         *window_class_name ;
     guint         unique_id ;
-    gboolean      dragactive ;
     gboolean      pinned ;
     gchar         *command ;
     guint         hover_timeout ;
@@ -243,6 +245,9 @@ static void         xfce_taskbar_group_button_add_window        (XfceTaskBarGrou
 static gboolean     xfce_taskbar_group_button_enter_event       (GtkWidget *button, GdkEvent *event, XfceTaskBarGroup *group);
 static gboolean     xfce_taskbar_group_button_leave_event       (GtkWidget *button, GdkEvent *event, XfceTaskBarGroup *group);
 
+static void xfce_taskbar_disable_group_enter_event(XfceTaskBar *taskbar);
+static void xfce_taskbar_enable_group_enter_event(XfceTaskBar *taskbar);
+
 static XfceTaskBarGroup* xfce_taskbar_group_button_new (const char *, XfceTaskBar *taskbar);
 
 // pinning functions
@@ -259,6 +264,7 @@ static gboolean hover_menu_enter(GtkWidget *widget, GdkEvent  *event, gpointer m
 static gboolean xfce_taskbar_hover_menu_timeout(gpointer menu_ptr);
 static gboolean xfce_taskbar_group_button_hover_timeout(gpointer group_ptr);
 static void    xfce_taskbar_activate_hover_menu(GtkWidget *widget, XfceTaskBarGroup *group, size_t mouse_button);
+static void    xfce_taskbar_disable_hover_menu_timeout(GtkWidget *menu_widget);
 
 // potential public functions
 static void xfce_taskbar_set_include_all_workspaces     (XfceTaskBar *taskbar, gboolean all_workspaces);
@@ -350,6 +356,7 @@ static void xfce_taskbar_init (XfceTaskBar *taskbar)
     
     //taskbar->groups = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
     taskbar->groups = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
+    taskbar->dragactive = FALSE ;
 }
 
 static void xfce_taskbar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
@@ -1794,7 +1801,7 @@ static void xfce_taskbar_button_drag_begin (GtkWidget *button, GdkDragContext *c
 {
     // Gruesomely hacky workaround for DnD crashes :(
     usleep(20000);
-    group->dragactive = TRUE ;
+    group->taskbar->dragactive = TRUE ;
     gtk_drag_set_icon_pixmap(context, gtk_widget_get_colormap(group->icon), gtk_widget_get_snapshot(group->icon, NULL), NULL, 0, 0);
 }
 
@@ -2212,12 +2219,13 @@ static GtkWidget * xfce_taskbar_group_button_menu_group_actions (XfceTaskBarGrou
     return menu;
 }
 
-static void xfce_taskbar_group_button_menu_destroy(GtkWidget *menu, XfceTaskBarGroup *group)
+static void xfce_taskbar_group_button_menu_destroy(GtkWidget *menu_widget, XfceTaskBarGroup *group)
 {
     panel_return_if_fail (XFCE_IS_taskbar (group->taskbar));
     panel_return_if_fail (GTK_IS_TOGGLE_BUTTON (group->button));
-    panel_return_if_fail (GTK_IS_WIDGET (menu));
-    gtk_widget_destroy (menu);
+    panel_return_if_fail (GTK_IS_WIDGET (menu_widget));
+    xfce_taskbar_disable_hover_menu_timeout(menu_widget);
+    gtk_widget_destroy (menu_widget);
     #ifdef GDK_WINDOWING_X11
     // Removes the wireframe associated with the currently selected window
     xfce_taskbar_wireframe_hide (group->taskbar);
@@ -2229,7 +2237,7 @@ static gboolean xfce_taskbar_group_button_press_event
 (GtkWidget *button, GdkEventButton *event, XfceTaskBarGroup *group)
 {
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (group->button), TRUE);
-    return TRUE ;
+    return FALSE ;
 }
 
 // This function handles all the logic for mouse button relase on the taskbar icons
@@ -2249,9 +2257,9 @@ static gboolean xfce_taskbar_group_button_release_event
         return FALSE;
 
     //Some hacky stuff for drag and drop
-    if(group->dragactive == TRUE)
+    if(group->taskbar->dragactive == TRUE)
     {
-        group->dragactive = FALSE ;
+        group->taskbar->dragactive = FALSE ;
         return FALSE ;
     }
     
@@ -2366,12 +2374,9 @@ static gboolean xfce_taskbar_hover_menu_timeout(gpointer menu_ptr)
     return FALSE ;
 }
 
-//Triggered when mouse focus enters the hover menu
-static gboolean hover_menu_enter(GtkWidget *widget, GdkEvent  *event, gpointer menu_ptr)
+//Disable any pending timeout associated with the menu widget
+static void xfce_taskbar_disable_hover_menu_timeout(GtkWidget *menu_widget)
 {
-    void *counter;
-    GtkWidget *menu_widget = (GtkWidget *)menu_ptr;
-    
     size_t timeout_id = (size_t)(g_object_get_data(G_OBJECT(menu_widget), "timeout_id"));
     if(timeout_id != 0)
     {
@@ -2379,7 +2384,13 @@ static gboolean hover_menu_enter(GtkWidget *widget, GdkEvent  *event, gpointer m
         timeout_id = 0 ;
         g_object_set_data(G_OBJECT(menu_widget), "timeout_id", (void *)timeout_id);
     }
-    
+}
+
+//Triggered when mouse focus enters the hover menu
+static gboolean hover_menu_enter(GtkWidget *widget, GdkEvent  *event, gpointer menu_ptr)
+{
+    GtkWidget *menu_widget = (GtkWidget *)menu_ptr;
+    xfce_taskbar_disable_hover_menu_timeout(menu_widget);
     return FALSE ;
 }
 
@@ -2595,7 +2606,6 @@ static XfceTaskBarGroup * xfce_taskbar_group_button_new (const char *group_name,
     
     
     //Prep the pinning data
-    group->dragactive = FALSE;
     group->pinned = FALSE;
     group->command = NULL ;
     


More information about the Xfce4-commits mailing list