[gnome-panel/wip/muktupavels/lock-screen-applet: 2/3] menu: create lock-screen applet from drag



commit 1160238f9af57f5b7f2f932d86ec8a4e722df15c
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Thu Apr 16 18:11:21 2020 +0300

    menu: create lock-screen applet from drag

 modules/menu/gp-lock-logout.c | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/modules/menu/gp-lock-logout.c b/modules/menu/gp-lock-logout.c
index f1624c026..f73c67b73 100644
--- a/modules/menu/gp-lock-logout.c
+++ b/modules/menu/gp-lock-logout.c
@@ -730,6 +730,34 @@ create_menu_item (GpLockLogout *lock_logout,
   return item;
 }
 
+static void
+setup_drag_source (GpLockLogout *self,
+                   GtkWidget    *item,
+                   const char   *icon_name,
+                   const char   *iid)
+{
+  static const GtkTargetEntry drag_targets[] =
+    {
+      { (gchar *) "application/x-panel-applet-iid", 0, 0 }
+    };
+
+  if (self->locked_down)
+    return;
+
+  gtk_drag_source_set (item, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
+                       drag_targets, G_N_ELEMENTS (drag_targets),
+                       GDK_ACTION_COPY);
+
+  if (icon_name != NULL)
+    gtk_drag_source_set_icon_name (item, icon_name);
+
+  g_signal_connect_data (item, "drag-data-get",
+                         G_CALLBACK (drag_data_get_cb),
+                         g_strdup (iid),
+                         (GClosureNotify) free_drag_id,
+                         0);
+}
+
 static void
 gp_lock_logout_constructed (GObject *object)
 {
@@ -1000,12 +1028,17 @@ gp_lock_logout_append_to_menu (GpLockLogout *lock_logout,
     {
       label = _("Lock Screen");
       tooltip = _("Protect your computer from unauthorized use");
-      drag_id = "ACTION:lock:NEW";
+      drag_id = "org.gnome.gnome-panel.action-button::lock-screen";
 
       lock_screen = create_menu_item (lock_logout,
                                       "system-lock-screen",
                                       label, tooltip,
-                                      drag_id);
+                                      NULL);
+
+      setup_drag_source (lock_logout,
+                         lock_screen,
+                         "system-lock-screen",
+                         drag_id);
 
       g_signal_connect (lock_screen, "activate",
                         G_CALLBACK (lock_screen_activate_cb),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]