diff options
| author | Po Lu | 2022-01-28 11:08:20 +0800 |
|---|---|---|
| committer | Po Lu | 2022-01-28 11:08:20 +0800 |
| commit | 2f0d67b047d6d84d51dd388fe19d46e1d2b72f9c (patch) | |
| tree | 2e9f7c1e7e198c4da54441bb2dc9af67910de6d1 /src | |
| parent | bc404cd8ea911917f56661d16a96c4da15a3ffbe (diff) | |
| download | emacs-2f0d67b047d6d84d51dd388fe19d46e1d2b72f9c.tar.gz emacs-2f0d67b047d6d84d51dd388fe19d46e1d2b72f9c.zip | |
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'.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 25 | ||||
| -rw-r--r-- | src/xwidget.h | 1 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index c5f4c0ee944..2080f109cdd 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -1139,6 +1139,23 @@ run_file_chooser_cb (WebKitWebView *webview, | |||
| 1139 | #ifdef HAVE_X_WINDOWS | 1139 | #ifdef HAVE_X_WINDOWS |
| 1140 | 1140 | ||
| 1141 | static void | 1141 | static void |
| 1142 | xv_drag_begin_cb (GtkWidget *widget, | ||
| 1143 | GdkDragContext *context, | ||
| 1144 | gpointer user_data) | ||
| 1145 | { | ||
| 1146 | struct xwidget_view *view = user_data; | ||
| 1147 | |||
| 1148 | if (view->passive_grab) | ||
| 1149 | { | ||
| 1150 | g_signal_handler_disconnect (view->passive_grab, | ||
| 1151 | view->passive_grab_destruction_signal); | ||
| 1152 | g_signal_handler_disconnect (view->passive_grab, | ||
| 1153 | view->passive_grab_drag_signal); | ||
| 1154 | view->passive_grab = NULL; | ||
| 1155 | } | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | static void | ||
| 1142 | xwidget_button_1 (struct xwidget_view *view, | 1159 | xwidget_button_1 (struct xwidget_view *view, |
| 1143 | bool down_p, int x, int y, int button, | 1160 | bool down_p, int x, int y, int button, |
| 1144 | int modifier_state, Time time) | 1161 | int modifier_state, Time time) |
| @@ -1170,6 +1187,10 @@ xwidget_button_1 (struct xwidget_view *view, | |||
| 1170 | = g_signal_connect (G_OBJECT (view->passive_grab), | 1187 | = g_signal_connect (G_OBJECT (view->passive_grab), |
| 1171 | "destroy", G_CALLBACK (gtk_widget_destroyed), | 1188 | "destroy", G_CALLBACK (gtk_widget_destroyed), |
| 1172 | &view->passive_grab); | 1189 | &view->passive_grab); |
| 1190 | view->passive_grab_drag_signal | ||
| 1191 | = g_signal_connect (G_OBJECT (view->passive_grab), | ||
| 1192 | "drag-begin", G_CALLBACK (xv_drag_begin_cb), | ||
| 1193 | view); | ||
| 1173 | } | 1194 | } |
| 1174 | else | 1195 | else |
| 1175 | { | 1196 | { |
| @@ -1230,6 +1251,8 @@ xwidget_button_1 (struct xwidget_view *view, | |||
| 1230 | { | 1251 | { |
| 1231 | g_signal_handler_disconnect (view->passive_grab, | 1252 | g_signal_handler_disconnect (view->passive_grab, |
| 1232 | view->passive_grab_destruction_signal); | 1253 | view->passive_grab_destruction_signal); |
| 1254 | g_signal_handler_disconnect (view->passive_grab, | ||
| 1255 | view->passive_grab_drag_signal); | ||
| 1233 | view->passive_grab = NULL; | 1256 | view->passive_grab = NULL; |
| 1234 | } | 1257 | } |
| 1235 | } | 1258 | } |
| @@ -3205,6 +3228,8 @@ DEFUN ("delete-xwidget-view", | |||
| 3205 | { | 3228 | { |
| 3206 | g_signal_handler_disconnect (xv->passive_grab, | 3229 | g_signal_handler_disconnect (xv->passive_grab, |
| 3207 | xv->passive_grab_destruction_signal); | 3230 | xv->passive_grab_destruction_signal); |
| 3231 | g_signal_handler_disconnect (xv->passive_grab, | ||
| 3232 | xv->passive_grab_drag_signal); | ||
| 3208 | xv->passive_grab = NULL; | 3233 | xv->passive_grab = NULL; |
| 3209 | } | 3234 | } |
| 3210 | 3235 | ||
diff --git a/src/xwidget.h b/src/xwidget.h index 79dee37695d..8b47a0b9046 100644 --- a/src/xwidget.h +++ b/src/xwidget.h | |||
| @@ -122,6 +122,7 @@ struct xwidget_view | |||
| 122 | GdkWindow *last_crossing_window; | 122 | GdkWindow *last_crossing_window; |
| 123 | GtkWidget *passive_grab; | 123 | GtkWidget *passive_grab; |
| 124 | guint passive_grab_destruction_signal; | 124 | guint passive_grab_destruction_signal; |
| 125 | guint passive_grab_drag_signal; | ||
| 125 | #else | 126 | #else |
| 126 | struct pgtk_display_info *dpyinfo; | 127 | struct pgtk_display_info *dpyinfo; |
| 127 | GtkWidget *widget; | 128 | GtkWidget *widget; |