]> Pileus Git - ~andy/gtk/commitdiff
gdk: Move window beeps into GdkWindowImpl
authorBenjamin Otte <otte@redhat.com>
Thu, 25 Nov 2010 11:28:08 +0000 (12:28 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 2 Dec 2010 19:21:05 +0000 (20:21 +0100)
One less magic function. Also refactored it to make it easier to
implement. It now returns TRUE if it beeped and FALSE if it failed to do
so. A default implementation exists that just returns FALSE for all the
backends that can't beep windows (read: everything but X11 with XKB -
and why on earth do keyboard libs implement beeping?)

gdk/gdkinternals.h
gdk/gdkwindow.c
gdk/gdkwindowimpl.c
gdk/gdkwindowimpl.h
gdk/quartz/gdkwindow-quartz.c
gdk/win32/gdkwindow-win32.c
gdk/x11/gdkwindow-x11.c

index 830e5d7a0384bcf64217116b36fdfcefcef6fe13..8aede53cce8ecacf6f8a218d650d6fc5f13f3378 100644 (file)
@@ -356,7 +356,6 @@ gulong   _gdk_windowing_window_get_next_serial  (GdkDisplay *display);
 void     _gdk_windowing_window_get_offsets      (GdkWindow  *window,
                                                 gint       *x_offset,
                                                 gint       *y_offset);
-void     _gdk_windowing_window_beep             (GdkWindow *window);
 
 
 void       _gdk_windowing_get_device_state   (GdkDisplay       *display,
index 9e84e2a2808b6d41c02a0cfa0b819561e18434c0..36d13f611ec4a2948be2f584dd357b98eca69246 100644 (file)
@@ -8065,10 +8065,14 @@ gdk_window_beep (GdkWindow *window)
   toplevel = get_event_toplevel (window);
   display = gdk_window_get_display (window);
 
-  if (toplevel && !gdk_window_is_offscreen (toplevel))
-    _gdk_windowing_window_beep (toplevel);
-  else
-    gdk_display_beep (display);
+  if (toplevel)
+    {
+      if (GDK_WINDOW_IMPL_CLASS (toplevel)->beep (window))
+        return;
+    }
+  
+  /* If windows fail to beep, we beep the display. */
+  gdk_display_beep (display);
 }
 
 /**
index 57aed0755277745ce94fb1c9bf4cc11015f43d97..ef81fcffd0fc1197897baf4d3df42e3f816ef29d 100644 (file)
 
 G_DEFINE_TYPE (GdkWindowImpl, gdk_window_impl, G_TYPE_OBJECT);
 
+static gboolean
+gdk_window_impl_beep (GdkWindow *window)
+{
+  /* FALSE means windows can't beep, so the display will be
+   * made to beep instead. */
+  return FALSE;
+}
 
 static void
-gdk_window_impl_class_init (GdkWindowImplClass *klass)
+gdk_window_impl_class_init (GdkWindowImplClass *impl_class)
 {
+  impl_class->beep = gdk_window_impl_beep;
 }
 
 static void
index dfcf3b4dc713c68220866cf7efe5e6c5891d202d..0332a31b71e69e34548acba6292034f793f84a01 100644 (file)
@@ -158,6 +158,9 @@ struct _GdkWindowImplClass
                                               cairo_surface_t *surface,
                                               gint             width,
                                               gint             height);
+
+  /* optional */
+  gboolean     (* beep)                 (GdkWindow       *window);
 };
 
 /* Interface Functions */
index 42117ac5575327809063d76deb714d4c8addeadb..40b9dbb8545394346e30e3409ad44be24b024cc2 100644 (file)
@@ -2919,14 +2919,6 @@ gdk_window_destroy_notify (GdkWindow *window)
   check_grab_destroy (window);
 }
 
-void 
-_gdk_windowing_window_beep (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  gdk_display_beep (_gdk_display);
-}
-
 void
 gdk_window_set_opacity (GdkWindow *window,
                        gdouble    opacity)
index ad291b24f47fdedce521918adfd0cec8b7e833af..bcbdca33a14d3028185f0b8507964fb3bfe56a42 100644 (file)
@@ -3121,12 +3121,6 @@ gdk_window_configure_finished (GdkWindow *window)
   g_return_if_fail (GDK_IS_WINDOW (window));
 }
 
-void
-_gdk_windowing_window_beep (GdkWindow *window)
-{
-  gdk_display_beep (_gdk_display);
-}
-
 void
 gdk_window_set_opacity (GdkWindow *window,
                        gdouble    opacity)
index d3c4a8ec2a42ad5c9abded848b8dc0523f783a2d..725f77a61bde5df668b97cd1ae3f65906a6ac7f4 100644 (file)
@@ -5350,24 +5350,25 @@ gdk_window_configure_finished (GdkWindow *window)
 #endif
 }
 
-void
-_gdk_windowing_window_beep (GdkWindow *window)
+static gboolean
+gdk_x11_window_beep (GdkWindow *window)
 {
   GdkDisplay *display;
 
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
   display = GDK_WINDOW_DISPLAY (window);
 
 #ifdef HAVE_XKB
   if (GDK_DISPLAY_X11 (display)->use_xkb)
-    XkbBell (GDK_DISPLAY_XDISPLAY (display),
-            GDK_WINDOW_XID (window),
-            0,
-            None);
-  else
+    {
+      XkbBell (GDK_DISPLAY_XDISPLAY (display),
+               GDK_WINDOW_XID (window),
+               0,
+               None);
+      return TRUE;
+    }
 #endif
-    gdk_display_beep (display);
+
+  return FALSE;
 }
 
 /**
@@ -5591,5 +5592,6 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
   impl_class->resize_cairo_surface = gdk_window_x11_resize_cairo_surface;
   impl_class->get_shape = gdk_x11_window_get_shape;
   impl_class->get_input_shape = gdk_x11_window_get_input_shape;
+  impl_class->beep = gdk_x11_window_beep;
 }