wayland/idle-inhibit: Change to use GObject signals

Fixes: 388b534062 ("wayland: Implement idle inhibit protocol")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3219>
This commit is contained in:
Jonas Ådahl 2023-08-28 11:52:12 +02:00
parent 45abae7ebb
commit 170ba63dbf

View File

@ -37,7 +37,7 @@ struct _MetaWaylandIdleInhibitor
uint32_t cookie;
gulong is_obscured_changed_handler;
gboolean idle_inhibited;
struct wl_listener surface_destroy_listener;
gulong surface_destroy_handler_id;
GCancellable *cancellable;
};
@ -188,18 +188,20 @@ idle_inhibitor_destructor (struct wl_resource *resource)
uninhibit_completed,
NULL);
}
if (inhibitor->surface)
wl_list_remove (&inhibitor->surface_destroy_listener.link);
{
g_clear_signal_handler (&inhibitor->surface_destroy_handler_id,
inhibitor->surface);
}
g_free (inhibitor);
}
static void
inhibitor_surface_destroyed (struct wl_listener *listener,
void *data)
on_surface_destroyed (MetaWaylandSurface *surface,
MetaWaylandIdleInhibitor *inhibitor)
{
MetaWaylandIdleInhibitor *inhibitor = wl_container_of (listener,
inhibitor,
surface_destroy_listener);
inhibitor->surface = NULL;
}
@ -247,9 +249,10 @@ idle_inhibit_manager_create_inhibitor (struct wl_client *client,
inhibitor,
idle_inhibitor_destructor);
inhibitor->surface_destroy_listener.notify = inhibitor_surface_destroyed;
wl_resource_add_destroy_listener (surface->resource,
&inhibitor->surface_destroy_listener);
inhibitor->surface_destroy_handler_id =
g_signal_connect (surface, "destroy",
G_CALLBACK (on_surface_destroyed),
inhibitor);
}