Install structuring for ping-pong protocol
diff --git a/src/compositor.c b/src/compositor.c
index 9b7badf..4c59da6 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1557,8 +1557,12 @@
{
struct weston_input_device *wd = (struct weston_input_device *) device;
struct weston_compositor *compositor = wd->compositor;
+ struct weston_surface *focus = (struct weston_surface *) device->pointer_focus;
+ uint32_t serial = wl_display_next_serial(compositor->wl_display);
if (state) {
+ if (compositor->ping_handler && focus)
+ compositor->ping_handler(focus, serial);
weston_compositor_idle_inhibit(compositor);
if (device->button_count == 0) {
device->grab_button = button;
@@ -1587,6 +1591,11 @@
{
struct weston_input_device *wd = (struct weston_input_device *) device;
struct weston_compositor *compositor = wd->compositor;
+ struct weston_surface *focus = (struct weston_surface *) device->pointer_focus;
+ uint32_t serial = wl_display_next_serial(compositor->wl_display);
+
+ if (compositor->ping_handler && focus)
+ compositor->ping_handler(focus, serial);
weston_compositor_activity(compositor);
@@ -1640,9 +1649,14 @@
{
struct weston_input_device *wd = (struct weston_input_device *) device;
struct weston_compositor *compositor = wd->compositor;
+ struct weston_surface *focus = (struct weston_surface *) device->pointer_focus;
+ uint32_t serial = wl_display_next_serial(compositor->wl_display);
uint32_t *k, *end;
if (state) {
+ if (compositor->ping_handler && focus)
+ compositor->ping_handler(focus, serial);
+
weston_compositor_idle_inhibit(compositor);
device->grab_key = key;
device->grab_time = time;
@@ -2435,6 +2449,8 @@
screenshooter_create(ec);
+ ec->ping_handler = NULL;
+
wl_data_device_manager_init(ec->wl_display);
glActiveTexture(GL_TEXTURE0);