diff options
author | Po Lu <luangruo@yahoo.com> | 2022-02-02 15:33:48 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-02-02 15:33:48 +0800 |
commit | fded822c80b386a3983315f78d664f1c6b7fa865 (patch) | |
tree | 486be6ddfebe357d5683267a232efb58c1439bc9 /src/xwidget.c | |
parent | e7047b4aba0fa5f3a511cb0688158400f02b1485 (diff) | |
download | emacs-fded822c80b386a3983315f78d664f1c6b7fa865.tar.gz |
Send button events before setting xwidget passive grab
* src/xwidget.c (xwidget_button_1): Send button event before
any grab processing.
Diffstat (limited to 'src/xwidget.c')
-rw-r--r-- | src/xwidget.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index 85535a35b13..9b08d47a8e8 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -1178,6 +1178,25 @@ xwidget_button_1 (struct xwidget_view *view, if (!target) target = model->widget_osr; + xg_event = gdk_event_new (down_p ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE); + + xg_event->any.window = gtk_widget_get_window (target); + g_object_ref (xg_event->any.window); /* The window will be unrefed + later by gdk_event_free. */ + + xg_event->button.x = x; + xg_event->button.x_root = x; + xg_event->button.y = y; + xg_event->button.y_root = y; + xg_event->button.button = button; + xg_event->button.state = modifier_state; + xg_event->button.time = time; + xg_event->button.device = find_suitable_pointer (view->frame); + + gtk_main_do_event (xg_event); + gdk_event_free (xg_event); + + if (down_p && !view->passive_grab) { view->passive_grab = target; @@ -1254,24 +1273,6 @@ xwidget_button_1 (struct xwidget_view *view, view->passive_grab = NULL; } } - - xg_event = gdk_event_new (down_p ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE); - - xg_event->any.window = gtk_widget_get_window (target); - g_object_ref (xg_event->any.window); /* The window will be unrefed - later by gdk_event_free. */ - - xg_event->button.x = x; - xg_event->button.x_root = x; - xg_event->button.y = y; - xg_event->button.y_root = y; - xg_event->button.button = button; - xg_event->button.state = modifier_state; - xg_event->button.time = time; - xg_event->button.device = find_suitable_pointer (view->frame); - - gtk_main_do_event (xg_event); - gdk_event_free (xg_event); } void |