From 96295ad8c58c1d1a1322e3c95ed92c87927aef42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 13 Mar 2017 14:33:06 +0800 Subject: [PATCH] wayland: Make beep requests go through the GdkDisplay This way we can add things like throttling. https://bugzilla.gnome.org/show_bug.cgi?id=778188 --- gdk/wayland/gdkdisplay-wayland.c | 19 ++++++++++++++++--- gdk/wayland/gdkprivate-wayland.h | 5 +++++ gdk/wayland/gdkwindow-wayland.c | 18 +++++++++--------- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index db1c1d3aa9..0cca86ca7c 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -660,10 +660,12 @@ gdk_wayland_display_get_default_screen (GdkDisplay *display) return GDK_WAYLAND_DISPLAY (display)->screen; } -static void -gdk_wayland_display_beep (GdkDisplay *display) +void +gdk_wayland_display_system_bell (GdkDisplay *display, + GdkWindow *window) { GdkWaylandDisplay *display_wayland; + struct gtk_surface1 *gtk_surface; g_return_if_fail (GDK_IS_DISPLAY (display)); @@ -672,7 +674,18 @@ gdk_wayland_display_beep (GdkDisplay *display) if (!display_wayland->gtk_shell) return; - gtk_shell1_system_bell (display_wayland->gtk_shell, NULL); + if (window) + gtk_surface = gdk_wayland_window_get_gtk_surface (window); + else + gtk_surface = NULL; + + gtk_shell1_system_bell (display_wayland->gtk_shell, gtk_surface); +} + +static void +gdk_wayland_display_beep (GdkDisplay *display) +{ + gdk_wayland_display_system_bell (display, NULL); } static void diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h index 8a8baa7679..96c1536710 100644 --- a/gdk/wayland/gdkprivate-wayland.h +++ b/gdk/wayland/gdkprivate-wayland.h @@ -83,6 +83,9 @@ void _gdk_wayland_display_get_maximal_cursor_size (GdkDisplay *display, gboolean _gdk_wayland_display_supports_cursor_alpha (GdkDisplay *display); gboolean _gdk_wayland_display_supports_cursor_color (GdkDisplay *display); +void gdk_wayland_display_system_bell (GdkDisplay *display, + GdkWindow *window); + struct wl_buffer *_gdk_wayland_cursor_get_buffer (GdkCursor *cursor, guint image_index, int *hotspot_x, @@ -271,6 +274,8 @@ EGLSurface gdk_wayland_window_get_egl_surface (GdkWindow *window, EGLSurface gdk_wayland_window_get_dummy_egl_surface (GdkWindow *window, EGLConfig config); +struct gtk_surface1 * gdk_wayland_window_get_gtk_surface (GdkWindow *window); + void gdk_wayland_seat_set_global_cursor (GdkSeat *seat, GdkCursor *cursor); diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index cefb53969b..dbaf7e08a1 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -936,15 +936,8 @@ gdk_wayland_window_sync (GdkWindow *window) static gboolean gdk_window_impl_wayland_beep (GdkWindow *window) { - GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); - GdkWaylandDisplay *display_wayland = - GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)); - - if (!display_wayland->gtk_shell) - return FALSE; - - gtk_shell1_system_bell (display_wayland->gtk_shell, - impl->display_server.gtk_surface); + gdk_wayland_display_system_bell (gdk_window_get_display (window), + window); return TRUE; } @@ -3822,6 +3815,13 @@ gdk_wayland_window_get_dummy_egl_surface (GdkWindow *window, return impl->dummy_egl_surface; } +struct gtk_surface1 * +gdk_wayland_window_get_gtk_surface (GdkWindow *window) +{ + g_return_val_if_fail (GDK_IS_WAYLAND_WINDOW (window), NULL); + + return GDK_WINDOW_IMPL_WAYLAND (window->impl)->display_server.gtk_surface; +} /** * gdk_wayland_window_set_use_custom_surface: