mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-12 21:40:19 +00:00
wayland: Pass most recent button press serial to set_popup_surface
This commit is contained in:
parent
9cc64579c2
commit
fc713dffb3
@ -37,8 +37,6 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
typedef struct _GdkWaylandDeviceData GdkWaylandDeviceData;
|
|
||||||
|
|
||||||
typedef struct _DataOffer DataOffer;
|
typedef struct _DataOffer DataOffer;
|
||||||
|
|
||||||
typedef struct _GdkWaylandSelectionOffer GdkWaylandSelectionOffer;
|
typedef struct _GdkWaylandSelectionOffer GdkWaylandSelectionOffer;
|
||||||
@ -65,6 +63,7 @@ struct _GdkWaylandDeviceData
|
|||||||
double surface_x, surface_y;
|
double surface_x, surface_y;
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
uint32_t enter_serial;
|
uint32_t enter_serial;
|
||||||
|
uint32_t button_press_serial;
|
||||||
GdkWindow *pointer_grab_window;
|
GdkWindow *pointer_grab_window;
|
||||||
uint32_t pointer_grab_time;
|
uint32_t pointer_grab_time;
|
||||||
guint32 repeat_timer;
|
guint32 repeat_timer;
|
||||||
@ -696,6 +695,8 @@ pointer_handle_button (void *data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
device->time = time;
|
device->time = time;
|
||||||
|
if (state)
|
||||||
|
device->button_press_serial = serial;
|
||||||
|
|
||||||
event = gdk_event_new (state ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
event = gdk_event_new (state ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||||
event->button.window = g_object_ref (device->pointer_focus);
|
event->button.window = g_object_ref (device->pointer_focus);
|
||||||
@ -1351,6 +1352,12 @@ _gdk_wayland_device_manager_new (GdkDisplay *display)
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
_gdk_wayland_device_get_button_press_serial(GdkWaylandDeviceData *device)
|
||||||
|
{
|
||||||
|
return device->button_press_serial;
|
||||||
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
gdk_wayland_device_get_selection_type_atoms (GdkDevice *gdk_device,
|
gdk_wayland_device_get_selection_type_atoms (GdkDevice *gdk_device,
|
||||||
GdkAtom **atoms_out)
|
GdkAtom **atoms_out)
|
||||||
|
@ -138,7 +138,10 @@ void _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device
|
|||||||
void _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *device_manager,
|
void _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *device_manager,
|
||||||
guint32 id);
|
guint32 id);
|
||||||
|
|
||||||
|
typedef struct _GdkWaylandDeviceData GdkWaylandDeviceData;
|
||||||
|
|
||||||
GdkKeymap *_gdk_wayland_device_get_keymap (GdkDevice *device);
|
GdkKeymap *_gdk_wayland_device_get_keymap (GdkDevice *device);
|
||||||
|
uint32_t _gdk_wayland_device_get_button_press_serial(GdkWaylandDeviceData *device);
|
||||||
|
|
||||||
void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event);
|
void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event);
|
||||||
GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display);
|
GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display);
|
||||||
|
@ -563,8 +563,6 @@ gdk_wayland_window_map (GdkWindow *window)
|
|||||||
{
|
{
|
||||||
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
||||||
GdkWindowImplWayland *parent;
|
GdkWindowImplWayland *parent;
|
||||||
GdkWaylandDisplay *wayland_display =
|
|
||||||
GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
|
|
||||||
GdkWindow *transient_for;
|
GdkWindow *transient_for;
|
||||||
|
|
||||||
if (!impl->mapped && !impl->use_custom_surface)
|
if (!impl->mapped && !impl->use_custom_surface)
|
||||||
@ -591,6 +589,7 @@ gdk_wayland_window_map (GdkWindow *window)
|
|||||||
{
|
{
|
||||||
struct wl_seat *grab_input_seat = NULL;
|
struct wl_seat *grab_input_seat = NULL;
|
||||||
GdkWindowImplWayland *tmp_impl;
|
GdkWindowImplWayland *tmp_impl;
|
||||||
|
GdkWaylandDeviceData *device;
|
||||||
|
|
||||||
parent = GDK_WINDOW_IMPL_WAYLAND (transient_for->impl);
|
parent = GDK_WINDOW_IMPL_WAYLAND (transient_for->impl);
|
||||||
|
|
||||||
@ -616,10 +615,10 @@ gdk_wayland_window_map (GdkWindow *window)
|
|||||||
impl->hint == GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU ||
|
impl->hint == GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU ||
|
||||||
impl->hint == GDK_WINDOW_TYPE_HINT_COMBO))
|
impl->hint == GDK_WINDOW_TYPE_HINT_COMBO))
|
||||||
{
|
{
|
||||||
|
device = wl_seat_get_user_data(grab_input_seat);
|
||||||
wl_shell_surface_set_popup (impl->shell_surface,
|
wl_shell_surface_set_popup (impl->shell_surface,
|
||||||
grab_input_seat,
|
grab_input_seat,
|
||||||
_gdk_wayland_display_get_serial (wayland_display),
|
_gdk_wayland_device_get_button_press_serial(device),
|
||||||
parent->surface,
|
parent->surface,
|
||||||
window->x, window->y, 0);
|
window->x, window->y, 0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user