This is an automated email from the git hooks/post-receive script. o c h o s i p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository xfce/xfce4-panel.
commit 120ed6d766b2ada4beda0d96e69a0e18f629e561 Author: Matias De lellis <[email protected]> Date: Thu Jul 4 23:38:56 2019 +0200 show-desktop: Toggle also when DND-ing (Bug #15654) When dragging a file to the show-desktop plugin's button the button will be activated and the desktop will be shown, enabling users to interactively copy items to the desktop in a single mouse-driven workflow. --- plugins/showdesktop/showdesktop.c | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/plugins/showdesktop/showdesktop.c b/plugins/showdesktop/showdesktop.c index 9f3b3de..00e02e2 100644 --- a/plugins/showdesktop/showdesktop.c +++ b/plugins/showdesktop/showdesktop.c @@ -29,6 +29,10 @@ +#define DRAG_ACTIVATE_TIMEOUT (500) + + + static void show_desktop_plugin_screen_changed (GtkWidget *widget, GdkScreen *previous_screen); static void show_desktop_plugin_construct (XfcePanelPlugin *panel_plugin); @@ -42,6 +46,16 @@ static gboolean show_desktop_plugin_button_release_event (GtkToggleButton ShowDesktopPlugin *plugin); static void show_desktop_plugin_showing_desktop_changed (WnckScreen *wnck_screen, ShowDesktopPlugin *plugin); +static void show_desktop_plugin_drag_leave (GtkWidget *widget, + GdkDragContext *context, + guint time, + ShowDesktopPlugin *plugin); +static gboolean show_desktop_plugin_drag_motion (GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + guint time, + ShowDesktopPlugin *plugin); @@ -58,6 +72,9 @@ struct _ShowDesktopPlugin GtkWidget *button; GtkWidget *icon; + /* Dnd timeout */ + guint drag_timeout; + /* the wnck screen */ WnckScreen *wnck_screen; }; @@ -105,6 +122,13 @@ show_desktop_plugin_init (ShowDesktopPlugin *plugin) xfce_panel_plugin_add_action_widget (XFCE_PANEL_PLUGIN (plugin), button); gtk_widget_show (button); + /* allow toggle the button when drag something.*/ + gtk_drag_dest_set (GTK_WIDGET (plugin->button), 0, NULL, 0, 0); + g_signal_connect (G_OBJECT (plugin->button), "drag_motion", + G_CALLBACK (show_desktop_plugin_drag_motion), plugin); + g_signal_connect (G_OBJECT (plugin->button), "drag_leave", + G_CALLBACK (show_desktop_plugin_drag_leave), plugin); + plugin->icon = gtk_image_new_from_icon_name ("user-desktop", GTK_ICON_SIZE_MENU); gtk_container_add (GTK_CONTAINER (button), plugin->icon); gtk_widget_show (plugin->icon); @@ -274,3 +298,57 @@ show_desktop_plugin_showing_desktop_changed (WnckScreen *wnck_screen, gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plugin->button), wnck_screen_get_showing_desktop (wnck_screen)); } + + + +static gboolean +show_desktop_plugin_drag_timeout (gpointer data) +{ + ShowDesktopPlugin *plugin = (ShowDesktopPlugin *) data; + + plugin->drag_timeout = 0; + + /* activate button to toggle show desktop */ + g_signal_emit_by_name (G_OBJECT (plugin->button), "clicked", plugin); + + return FALSE; +} + + + +static void +show_desktop_plugin_drag_leave (GtkWidget *widget, + GdkDragContext *context, + guint time, + ShowDesktopPlugin *plugin) +{ + if (plugin->drag_timeout != 0) + { + g_source_remove (plugin->drag_timeout); + plugin->drag_timeout = 0; + } + + gtk_drag_unhighlight (GTK_WIDGET (widget)); +} + + + +static gboolean +show_desktop_plugin_drag_motion (GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + guint time, + ShowDesktopPlugin *plugin) +{ + if (plugin->drag_timeout == 0) + plugin->drag_timeout = g_timeout_add (DRAG_ACTIVATE_TIMEOUT, + show_desktop_plugin_drag_timeout, + plugin); + + gtk_drag_highlight (GTK_WIDGET (widget)); + + gdk_drag_status (context, 0, time); + + return TRUE; +} -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
