emacs-diffs
[Top][All Lists]
Advanced

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

master 2f0d67b047: Clear xwidget passive grab whenever a drag begins


From: Po Lu
Subject: master 2f0d67b047: Clear xwidget passive grab whenever a drag begins
Date: Thu, 27 Jan 2022 22:09:54 -0500 (EST)

branch: master
commit 2f0d67b047d6d84d51dd388fe19d46e1d2b72f9c
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Clear xwidget passive grab whenever a drag begins
    
    * src/xwidget.c (xv_drag_begin_cb): New function.
    (xwidget_view_from_window): Attach said function to grab widget
    when a grab starts.
    * src/xwidget.h (struct xwidget_view): New field
    `passive_grab_drag_signal'.
---
 src/xwidget.c | 25 +++++++++++++++++++++++++
 src/xwidget.h |  1 +
 2 files changed, 26 insertions(+)

diff --git a/src/xwidget.c b/src/xwidget.c
index c5f4c0ee94..2080f109cd 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1138,6 +1138,23 @@ run_file_chooser_cb (WebKitWebView *webview,
 
 #ifdef HAVE_X_WINDOWS
 
+static void
+xv_drag_begin_cb (GtkWidget *widget,
+                 GdkDragContext *context,
+                 gpointer user_data)
+{
+  struct xwidget_view *view = user_data;
+
+  if (view->passive_grab)
+    {
+      g_signal_handler_disconnect (view->passive_grab,
+                                  view->passive_grab_destruction_signal);
+      g_signal_handler_disconnect (view->passive_grab,
+                                  view->passive_grab_drag_signal);
+      view->passive_grab = NULL;
+    }
+}
+
 static void
 xwidget_button_1 (struct xwidget_view *view,
                  bool down_p, int x, int y, int button,
@@ -1170,6 +1187,10 @@ xwidget_button_1 (struct xwidget_view *view,
        = g_signal_connect (G_OBJECT (view->passive_grab),
                            "destroy", G_CALLBACK (gtk_widget_destroyed),
                            &view->passive_grab);
+      view->passive_grab_drag_signal
+       = g_signal_connect (G_OBJECT (view->passive_grab),
+                           "drag-begin", G_CALLBACK (xv_drag_begin_cb),
+                           view);
     }
   else
     {
@@ -1230,6 +1251,8 @@ xwidget_button_1 (struct xwidget_view *view,
        {
          g_signal_handler_disconnect (view->passive_grab,
                                       view->passive_grab_destruction_signal);
+         g_signal_handler_disconnect (view->passive_grab,
+                                      view->passive_grab_drag_signal);
          view->passive_grab = NULL;
        }
     }
@@ -3205,6 +3228,8 @@ DEFUN ("delete-xwidget-view",
     {
       g_signal_handler_disconnect (xv->passive_grab,
                                   xv->passive_grab_destruction_signal);
+      g_signal_handler_disconnect (xv->passive_grab,
+                                  xv->passive_grab_drag_signal);
       xv->passive_grab = NULL;
     }
 
diff --git a/src/xwidget.h b/src/xwidget.h
index 79dee37695..8b47a0b904 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -122,6 +122,7 @@ struct xwidget_view
   GdkWindow *last_crossing_window;
   GtkWidget *passive_grab;
   guint passive_grab_destruction_signal;
+  guint passive_grab_drag_signal;
 #else
   struct pgtk_display_info *dpyinfo;
   GtkWidget *widget;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]