[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