mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
wayland: Make monitor removal work
The global_removal argument is the _name_ of the object. We were comparing it to the _object id_ of the object. To fix this, store the name at the time the object is bound.
This commit is contained in:
parent
ca09a600c3
commit
28c865b4e2
@ -113,7 +113,7 @@ gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id
|
||||
} else if (strcmp(interface, "wl_output") == 0) {
|
||||
output =
|
||||
wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, 1);
|
||||
_gdk_wayland_screen_add_output(display_wayland->screen, output);
|
||||
_gdk_wayland_screen_add_output(display_wayland->screen, id, output);
|
||||
/* We need to roundtrip until we've received the modes and
|
||||
* geometry events for the output, which gives us the physical
|
||||
* properties and available modes on the output. */
|
||||
@ -142,6 +142,8 @@ gdk_registry_handle_global_remove(void *data,
|
||||
|
||||
/* We don't know what this item is - try as an output */
|
||||
_gdk_wayland_screen_remove_output_by_id (display_wayland->screen, id);
|
||||
|
||||
/* FIXME: the object needs to be destroyed here, we're leaking */
|
||||
}
|
||||
|
||||
static const struct wl_registry_listener registry_listener = {
|
||||
|
@ -151,7 +151,8 @@ GdkWindow *_gdk_wayland_screen_create_root_window (GdkScreen *screen,
|
||||
int height);
|
||||
|
||||
GdkScreen *_gdk_wayland_screen_new (GdkDisplay *display);
|
||||
void _gdk_wayland_screen_add_output (GdkScreen *scren,
|
||||
void _gdk_wayland_screen_add_output (GdkScreen *screen,
|
||||
guint32 id,
|
||||
struct wl_output *output);
|
||||
void _gdk_wayland_screen_remove_output_by_id (GdkScreen *screen,
|
||||
guint32 id);
|
||||
|
@ -80,6 +80,7 @@ struct _GdkWaylandScreenClass
|
||||
struct _GdkWaylandMonitor
|
||||
{
|
||||
GdkWaylandScreen *screen;
|
||||
guint32 id;
|
||||
struct wl_output *output;
|
||||
GdkRectangle geometry;
|
||||
int width_mm;
|
||||
@ -935,12 +936,14 @@ static const struct wl_output_listener output_listener =
|
||||
};
|
||||
|
||||
void
|
||||
_gdk_wayland_screen_add_output (GdkScreen *screen,
|
||||
_gdk_wayland_screen_add_output (GdkScreen *screen,
|
||||
guint32 id,
|
||||
struct wl_output *output)
|
||||
{
|
||||
GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (screen);
|
||||
GdkWaylandMonitor *monitor = g_new0(GdkWaylandMonitor, 1);
|
||||
|
||||
monitor->id = id;
|
||||
monitor->output = output;
|
||||
monitor->screen = screen_wayland;
|
||||
g_ptr_array_add(screen_wayland->monitors, monitor);
|
||||
@ -959,7 +962,7 @@ _gdk_wayland_screen_remove_output_by_id (GdkScreen *screen,
|
||||
{
|
||||
GdkWaylandMonitor *monitor = screen_wayland->monitors->pdata[i];
|
||||
|
||||
if (wl_proxy_get_id ((struct wl_proxy *)monitor->output) == id)
|
||||
if (monitor->id == id)
|
||||
{
|
||||
g_ptr_array_remove (screen_wayland->monitors, monitor);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user