[gnome-panel] menu: setup drag and drop for applications menu items
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] menu: setup drag and drop for applications menu items
- Date: Wed, 31 Jan 2018 21:19:42 +0000 (UTC)
commit 982953527533f4f434f214c01e27353ac9ee61a1
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Wed Jan 31 00:00:27 2018 +0200
menu: setup drag and drop for applications menu items
Now Applications menu should have same functionality as old menu
bar object.
modules/menu/gp-menu.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
---
diff --git a/modules/menu/gp-menu.c b/modules/menu/gp-menu.c
index 7b8eaf7..5ba8131 100644
--- a/modules/menu/gp-menu.c
+++ b/modules/menu/gp-menu.c
@@ -35,6 +35,7 @@ struct _GpMenu
guint load_id;
+ gulong locked_down_id;
gulong menu_icon_size_id;
};
@@ -105,6 +106,33 @@ append_directory (GtkMenuShell *shell,
}
static void
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ GDesktopAppInfo *app_info)
+{
+ const gchar *filename;
+ gchar *uris[2];
+
+ filename = g_desktop_app_info_get_filename (app_info);
+ if (filename == NULL)
+ return;
+
+ uris[0] = g_filename_to_uri (filename, NULL, NULL);
+ uris[1] = NULL;
+
+ gtk_selection_data_set_uris (selection_data, uris);
+ g_free (uris[0]);
+}
+
+static const GtkTargetEntry drag_targets[] =
+ {
+ { (gchar *) "text/uri-list", 0, 0 }
+ };
+
+static void
append_entry (GtkMenuShell *shell,
GMenuTreeIter *iter,
GpMenu *menu)
@@ -155,6 +183,22 @@ append_entry (GtkMenuShell *shell,
G_BINDING_SYNC_CREATE);
}
+ if (!gp_applet_get_locked_down (menu->applet))
+ {
+ gtk_drag_source_set (item, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
+ drag_targets, G_N_ELEMENTS (drag_targets),
+ GDK_ACTION_COPY);
+
+ if (icon != NULL)
+ gtk_drag_source_set_icon_gicon (item, icon);
+
+ g_signal_connect_data (item, "drag-data-get",
+ G_CALLBACK (drag_data_get_cb),
+ g_object_ref (info),
+ (GClosureNotify) g_object_unref,
+ 0);
+ }
+
g_signal_connect (item, "activate", G_CALLBACK (activate_cb), info);
}
@@ -272,6 +316,14 @@ menu_tree_changed_cb (GMenuTree *tree,
}
static void
+locked_down_cb (GpApplet *applet,
+ GParamSpec *pspec,
+ GpMenu *menu)
+{
+ menu_tree_changed_cb (menu->tree, menu);
+}
+
+static void
menu_icon_size_cb (GpApplet *applet,
GParamSpec *pspec,
GpMenu *menu)
@@ -295,6 +347,9 @@ gp_menu_constructed (GObject *object)
g_signal_connect (menu->tree, "changed",
G_CALLBACK (menu_tree_changed_cb), menu);
+ menu->locked_down_id = g_signal_connect (menu->applet, "notify::locked-down",
+ G_CALLBACK (locked_down_cb), menu);
+
menu->menu_icon_size_id = g_signal_connect (menu->applet,
"notify::menu-icon-size",
G_CALLBACK (menu_icon_size_cb),
@@ -318,6 +373,12 @@ gp_menu_dispose (GObject *object)
menu->load_id = 0;
}
+ if (menu->locked_down_id != 0)
+ {
+ g_signal_handler_disconnect (menu->applet, menu->locked_down_id);
+ menu->locked_down_id = 0;
+ }
+
if (menu->menu_icon_size_id != 0)
{
g_signal_handler_disconnect (menu->applet, menu->menu_icon_size_id);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]