diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-05-21 13:25:38 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-05-21 13:25:38 -0400 |
commit | 8e20c1fac2fcc42fbb411aae2b4e1ce2fc236e1f (patch) | |
tree | 8be5096f208bd1b61bd13a125422347d471b79d6 | |
parent | 9711c2ad4510c7ef29fd65bb8d7922c8af12722e (diff) | |
download | gtk+-8e20c1fac2fcc42fbb411aae2b4e1ce2fc236e1f.tar.gz |
Revert "wayland: Add support for xdg-output"
This reverts commit 1f64689c3191af4c986c2ba9bad166fb3b6cad54.
This was leading to blurry output, and needs more work.
See https://gitlab.gnome.org/GNOME/gtk/issues/1901
-rw-r--r-- | gdk/wayland/Makefile.am | 2 | ||||
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.c | 7 | ||||
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.h | 2 | ||||
-rw-r--r-- | gdk/wayland/gdkmonitor-wayland.h | 9 | ||||
-rw-r--r-- | gdk/wayland/gdkprivate-wayland.h | 2 | ||||
-rw-r--r-- | gdk/wayland/gdkscreen-wayland.c | 190 | ||||
-rw-r--r-- | gdk/wayland/meson.build | 1 |
7 files changed, 37 insertions, 176 deletions
diff --git a/gdk/wayland/Makefile.am b/gdk/wayland/Makefile.am index c7e31beb7c..956e5c92f5 100644 --- a/gdk/wayland/Makefile.am +++ b/gdk/wayland/Makefile.am @@ -33,8 +33,6 @@ BUILT_SOURCES = \ gtk-primary-selection-protocol.c \ tablet-unstable-v2-client-protocol.h \ tablet-unstable-v2-protocol.c \ - xdg-output-unstable-v1-protocol.c \ - xdg-output-unstable-v1-client-protocol.h \ keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h \ keyboard-shortcuts-inhibit-unstable-v1-protocol.c \ server-decoration-client-protocol.h \ diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 4668557cea..d35dddf329 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -513,13 +513,6 @@ gdk_registry_handle_global (void *data, &server_decoration_listener, display_wayland); } - else if (strcmp(interface, "zxdg_output_manager_v1") == 0) - { - display_wayland->xdg_output_manager = - wl_registry_bind (registry, id, &zxdg_output_manager_v1_interface, 1); - _gdk_wayland_screen_init_xdg_output (display_wayland->screen); - _gdk_wayland_display_async_roundtrip (display_wayland); - } g_hash_table_insert (display_wayland->known_globals, GUINT_TO_POINTER (id), g_strdup (interface)); diff --git a/gdk/wayland/gdkdisplay-wayland.h b/gdk/wayland/gdkdisplay-wayland.h index fb935a6dba..d8b4a8d7d1 100644 --- a/gdk/wayland/gdkdisplay-wayland.h +++ b/gdk/wayland/gdkdisplay-wayland.h @@ -34,7 +34,6 @@ #include <gdk/wayland/xdg-foreign-unstable-v1-client-protocol.h> #include <gdk/wayland/keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h> #include <gdk/wayland/server-decoration-client-protocol.h> -#include <gdk/wayland/xdg-output-unstable-v1-client-protocol.h> #include <glib.h> #include <gdk/gdkkeys.h> @@ -94,7 +93,6 @@ struct _GdkWaylandDisplay struct zxdg_importer_v1 *xdg_importer; struct zwp_keyboard_shortcuts_inhibit_manager_v1 *keyboard_shortcuts_inhibit; struct org_kde_kwin_server_decoration_manager *server_decoration_manager; - struct zxdg_output_manager_v1 *xdg_output_manager; GList *async_roundtrips; diff --git a/gdk/wayland/gdkmonitor-wayland.h b/gdk/wayland/gdkmonitor-wayland.h index 593ab1d85c..581908c513 100644 --- a/gdk/wayland/gdkmonitor-wayland.h +++ b/gdk/wayland/gdkmonitor-wayland.h @@ -30,15 +30,6 @@ struct _GdkWaylandMonitor { guint32 version; struct wl_output *output; gboolean added; - - struct zxdg_output_v1 *xdg_output; - /* Size and position, can be either from wl_output or xdg_output */ - int32_t x; - int32_t y; - int32_t width; - int32_t height; - gboolean wl_output_done; - gboolean xdg_output_done; }; struct _GdkWaylandMonitorClass { diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h index 49db8d5f19..860e72c260 100644 --- a/gdk/wayland/gdkprivate-wayland.h +++ b/gdk/wayland/gdkprivate-wayland.h @@ -227,8 +227,6 @@ struct wl_output *_gdk_wayland_screen_get_wl_output (GdkScreen *screen, void _gdk_wayland_screen_set_has_gtk_shell (GdkScreen *screen); -void _gdk_wayland_screen_init_xdg_output (GdkScreen *screen); - void _gdk_wayland_window_set_grab_seat (GdkWindow *window, GdkSeat *seat); diff --git a/gdk/wayland/gdkscreen-wayland.c b/gdk/wayland/gdkscreen-wayland.c index 2457ecea2a..5935bc697e 100644 --- a/gdk/wayland/gdkscreen-wayland.c +++ b/gdk/wayland/gdkscreen-wayland.c @@ -1422,117 +1422,6 @@ transform_to_string (int transform) #endif -static gboolean -screen_has_xdg_output_support (GdkScreen *screen) -{ - GdkDisplay *display = gdk_screen_get_display (screen); - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); - - return (display_wayland->xdg_output_manager != NULL); -} - -static gboolean -monitor_has_xdg_output (GdkWaylandMonitor *monitor) -{ - return (monitor->xdg_output != NULL); -} - -static gboolean -should_update_monitor (GdkWaylandMonitor *monitor) -{ - return (GDK_MONITOR (monitor)->geometry.width != 0 && - monitor->version < OUTPUT_VERSION_WITH_DONE); -} - -static void -apply_monitor_change (GdkWaylandMonitor *monitor) -{ - GdkDisplay *display = GDK_MONITOR (monitor)->display; - GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (gdk_display_get_default_screen (display)); - - GDK_NOTE (MISC, - g_message ("monitor %d changed position %d %d, size %d %d", - monitor->id, - monitor->x, monitor->y, - monitor->width, monitor->height)); - - gdk_monitor_set_position (GDK_MONITOR (monitor), monitor->x, monitor->y); - gdk_monitor_set_size (GDK_MONITOR (monitor), monitor->width, monitor->height); - monitor->wl_output_done = FALSE; - monitor->xdg_output_done = FALSE; - - g_signal_emit_by_name (screen_wayland, "monitors-changed"); - update_screen_size (screen_wayland); -} - -static void -xdg_output_handle_logical_position (void *data, - struct zxdg_output_v1 *xdg_output, - int32_t x, - int32_t y) -{ - GdkWaylandMonitor *monitor = (GdkWaylandMonitor *) data; - - GDK_NOTE (MISC, - g_message ("handle logical position xdg-output %d, position %d %d", - monitor->id, x, y)); - monitor->x = x; - monitor->y = y; -} - -static void -xdg_output_handle_logical_size (void *data, - struct zxdg_output_v1 *xdg_output, - int32_t width, - int32_t height) -{ - GdkWaylandMonitor *monitor = (GdkWaylandMonitor *) data; - - GDK_NOTE (MISC, - g_message ("handle logical size xdg-output %d, size %d %d", - monitor->id, width, height)); - monitor->width = width; - monitor->height = height; -} - -static void -xdg_output_handle_done (void *data, - struct zxdg_output_v1 *xdg_output) -{ - GdkWaylandMonitor *monitor = (GdkWaylandMonitor *) data; - - GDK_NOTE (MISC, - g_message ("handle done xdg-output %d", monitor->id)); - - monitor->xdg_output_done = TRUE; - if (monitor->wl_output_done) - apply_monitor_change (monitor); -} - -static const struct zxdg_output_v1_listener xdg_output_listener = { - xdg_output_handle_logical_position, - xdg_output_handle_logical_size, - xdg_output_handle_done, -}; - -static void -gdk_wayland_screen_get_xdg_output (GdkWaylandMonitor *monitor) -{ - GdkDisplay *display = GDK_MONITOR (monitor)->display; - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); - - GDK_NOTE (MISC, - g_message ("get xdg-output for monitor %d", monitor->id)); - - monitor->xdg_output = - zxdg_output_manager_v1_get_xdg_output (display_wayland->xdg_output_manager, - monitor->output); - - zxdg_output_v1_add_listener (monitor->xdg_output, - &xdg_output_listener, - monitor); -} - static void output_handle_geometry (void *data, struct wl_output *wl_output, @@ -1551,15 +1440,19 @@ output_handle_geometry (void *data, g_message ("handle geometry output %d, position %d %d, phys. size %d %d, subpixel layout %s, manufacturer %s, model %s, transform %s", monitor->id, x, y, physical_width, physical_height, subpixel_to_string (subpixel), make, model, transform_to_string (transform))); - monitor->x = x; - monitor->y = y; + gdk_monitor_set_position (GDK_MONITOR (monitor), x, y); gdk_monitor_set_physical_size (GDK_MONITOR (monitor), physical_width, physical_height); gdk_monitor_set_subpixel_layout (GDK_MONITOR (monitor), subpixel); gdk_monitor_set_manufacturer (GDK_MONITOR (monitor), make); gdk_monitor_set_model (GDK_MONITOR (monitor), model); - if (should_update_monitor (monitor) || !monitor_has_xdg_output (monitor)) - apply_monitor_change (monitor); + if (GDK_MONITOR (monitor)->geometry.width != 0 && monitor->version < OUTPUT_VERSION_WITH_DONE) + { + GdkDisplay *display = GDK_MONITOR (monitor)->display; + GdkWaylandScreen *screen = GDK_WAYLAND_SCREEN (gdk_display_get_default_screen (display)); + g_signal_emit_by_name (screen, "monitors-changed"); + update_screen_size (screen); + } } static void @@ -1567,14 +1460,21 @@ output_handle_done (void *data, struct wl_output *wl_output) { GdkWaylandMonitor *monitor = (GdkWaylandMonitor *)data; + GdkDisplay *display = gdk_monitor_get_display (GDK_MONITOR (monitor)); + GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (gdk_display_get_default_screen (display)); GDK_NOTE (MISC, g_message ("handle done output %d", monitor->id)); - monitor->wl_output_done = TRUE; + if (!monitor->added) + { + monitor->added = TRUE; + g_ptr_array_add (GDK_WAYLAND_DISPLAY (display)->monitors, monitor); + gdk_display_monitor_added (display, GDK_MONITOR (monitor)); + } - if (!monitor_has_xdg_output (monitor) || monitor->xdg_output_done) - apply_monitor_change (monitor); + g_signal_emit_by_name (screen_wayland, "monitors-changed"); + update_screen_size (screen_wayland); } static void @@ -1591,9 +1491,6 @@ output_handle_scale (void *data, GDK_NOTE (MISC, g_message ("handle scale output %d, scale %d", monitor->id, scale)); - if (monitor_has_xdg_output (monitor)) - return; - gdk_monitor_get_geometry (GDK_MONITOR (monitor), &previous_geometry); previous_scale = gdk_monitor_get_scale_factor (GDK_MONITOR (monitor)); @@ -1601,11 +1498,13 @@ output_handle_scale (void *data, height = previous_geometry.height * previous_scale; gdk_monitor_set_scale_factor (GDK_MONITOR (monitor), scale); - monitor->width = width / scale; - monitor->height = height / scale; + gdk_monitor_set_size (GDK_MONITOR (monitor), width / scale, height / scale); - if (should_update_monitor (monitor)) - apply_monitor_change (monitor); + if (GDK_MONITOR (monitor)->geometry.width != 0 && monitor->version < OUTPUT_VERSION_WITH_DONE) + { + GdkScreen *screen = gdk_display_get_default_screen (GDK_MONITOR (monitor)->display); + g_signal_emit_by_name (screen, "monitors-changed"); + } } static void @@ -1627,12 +1526,15 @@ output_handle_mode (void *data, return; scale = gdk_monitor_get_scale_factor (GDK_MONITOR (monitor)); - monitor->width = width / scale; - monitor->height = height / scale; + gdk_monitor_set_size (GDK_MONITOR (monitor), width / scale, height / scale); gdk_monitor_set_refresh_rate (GDK_MONITOR (monitor), refresh); - if (should_update_monitor (monitor) || !monitor_has_xdg_output (monitor)) - apply_monitor_change (monitor); + if (width != 0 && monitor->version < OUTPUT_VERSION_WITH_DONE) + { + GdkScreen *screen = gdk_display_get_default_screen (GDK_MONITOR (monitor)->display); + g_signal_emit_by_name (screen, "monitors-changed"); + update_screen_size (GDK_WAYLAND_SCREEN (screen)); + } } static const struct wl_output_listener output_listener = @@ -1660,16 +1562,13 @@ _gdk_wayland_screen_add_output (GdkScreen *screen, monitor->output = output; monitor->version = version; - g_ptr_array_add (GDK_WAYLAND_DISPLAY (display)->monitors, monitor); - gdk_display_monitor_added (display, GDK_MONITOR (monitor)); - wl_output_add_listener (output, &output_listener, monitor); - - GDK_NOTE (MISC, - g_message ("xdg_output_manager %p", - GDK_WAYLAND_DISPLAY (display)->xdg_output_manager)); + if (monitor->version < OUTPUT_VERSION_WITH_DONE) + { + g_ptr_array_add (GDK_WAYLAND_DISPLAY (display)->monitors, monitor); + gdk_display_monitor_added (display, GDK_MONITOR (monitor)); + } - if (screen_has_xdg_output_support (screen)) - gdk_wayland_screen_get_xdg_output (monitor); + wl_output_add_listener (output, &output_listener, monitor); } struct wl_output * @@ -1767,18 +1666,3 @@ _gdk_wayland_screen_get_output_scale (GdkScreen *screen, return 0; } - -void -_gdk_wayland_screen_init_xdg_output (GdkScreen *screen) -{ - GdkDisplay *display = gdk_screen_get_display (screen); - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); - int i; - - GDK_NOTE (MISC, - g_message ("init xdg-output support, %d monitor(s) already present", - display_wayland->monitors->len)); - - for (i = 0; i < display_wayland->monitors->len; i++) - gdk_wayland_screen_get_xdg_output (display_wayland->monitors->pdata[i]); -} diff --git a/gdk/wayland/meson.build b/gdk/wayland/meson.build index 8f6b7faf31..559e02ba3d 100644 --- a/gdk/wayland/meson.build +++ b/gdk/wayland/meson.build @@ -55,7 +55,6 @@ proto_sources = [ ['tablet', 'unstable', 'v2', ], ['keyboard-shortcuts-inhibit', 'unstable', 'v1', ], ['server-decoration', 'private' ], - ['xdg-output', 'unstable', 'v1', ], ] gdk_wayland_gen_headers = [] |