[mutter] bell: Let the X11 caller deal with the X11 fallback



commit 417cb2b213f8aed41865cd64fc9248667f5e2b2a
Author: Jonas Ådahl <jadahl gmail com>
Date:   Mon Mar 7 12:46:18 2016 +0800

    bell: Let the X11 caller deal with the X11 fallback
    
    To support invoking the system bell on Wayland we shouldn't have paths
    that fallback to X11. Let the X11 caller deal with the absence of
    libcanberra, and change API to not take any X events.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=763284

 src/core/bell.c  |   25 +++++--------------------
 src/core/bell.h  |   13 ++++++-------
 src/x11/events.c |   27 +++++++++++++++++++++++++--
 3 files changed, 36 insertions(+), 29 deletions(-)
---
diff --git a/src/core/bell.c b/src/core/bell.c
index cf7a0f8..4ac30dc 100644
--- a/src/core/bell.c
+++ b/src/core/bell.c
@@ -203,33 +203,18 @@ bell_audible_notify (MetaDisplay *display,
   return FALSE;
 }
 
-void
+gboolean
 meta_bell_notify (MetaDisplay *display,
-                 XkbAnyEvent *xkb_ev)
+                  MetaWindow  *window)
 {
-  MetaWindow *window;
-  XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev;
-
-  window = meta_display_lookup_x_window (display, xkb_bell_event->window);
-  if (!window && display->focus_window && display->focus_window->frame)
-    window = display->focus_window;
-
   /* flash something */
   if (meta_prefs_get_visual_bell ())
     bell_visual_notify (display, window);
 
   if (meta_prefs_bell_is_audible ())
-    {
-      if (!bell_audible_notify (display, window))
-        {
-          /* Force a classic bell if the libcanberra bell failed. */
-          XkbForceDeviceBell (display->xdisplay,
-                              xkb_bell_event->device,
-                              xkb_bell_event->bell_class,
-                              xkb_bell_event->bell_id,
-                              xkb_bell_event->percent);
-        }
-    }
+    return bell_audible_notify (display, window);
+
+  return TRUE;
 }
 
 void
diff --git a/src/core/bell.h b/src/core/bell.h
index 6b8ed1e..2e9cd39 100644
--- a/src/core/bell.h
+++ b/src/core/bell.h
@@ -25,15 +25,14 @@
 /**
  * meta_bell_notify:
  * @display: The display the bell event came in on
- * @xkb_ev: The bell event we just received
+ * @window: The window the bell event was received on
  *
- * Gives the user some kind of visual bell; in fact, this is our response
- * to any kind of bell request, but we set it up so that we only get
- * notified about visual bells, and X deals with audible ones.
- *
- * If the configure script found we had no XKB, this does not exist.
+ * Gives the user some kind of aural or visual feedback, such as a bell sound
+ * or flash. What type of feedback is invoked depends on the configuration.
+ * If the aural feedback could not be invoked, FALSE is returned.
  */
-void meta_bell_notify (MetaDisplay *display, XkbAnyEvent *xkb_ev);
+gboolean meta_bell_notify (MetaDisplay *display,
+                           MetaWindow  *window);
 
 /**
  * meta_bell_set_audible:
diff --git a/src/x11/events.c b/src/x11/events.c
index 3270f81..6bead5a 100644
--- a/src/x11/events.c
+++ b/src/x11/events.c
@@ -1162,6 +1162,30 @@ process_selection_clear (MetaDisplay   *display,
   return TRUE;
 }
 
+static void
+notify_bell (MetaDisplay *display,
+             XkbAnyEvent *xkb_ev)
+{
+  XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev;
+  MetaWindow *window;
+
+  window = meta_display_lookup_x_window (display, xkb_bell_event->window);
+  if (!window && display->focus_window && display->focus_window->frame)
+    window = display->focus_window;
+
+  display->last_bell_time = xkb_ev->time;
+  if (!meta_bell_notify (display, window) &&
+      meta_prefs_bell_is_audible ())
+    {
+      /* Force a classic bell if the libcanberra bell failed. */
+      XkbForceDeviceBell (display->xdisplay,
+                          xkb_bell_event->device,
+                          xkb_bell_event->bell_class,
+                          xkb_bell_event->bell_id,
+                          xkb_bell_event->percent);
+    }
+}
+
 static gboolean
 handle_other_xevent (MetaDisplay *display,
                      XEvent      *event)
@@ -1618,8 +1642,7 @@ handle_other_xevent (MetaDisplay *display,
               if (XSERVER_TIME_IS_BEFORE(display->last_bell_time,
                                          xkb_ev->time - 100))
                 {
-                  display->last_bell_time = xkb_ev->time;
-                  meta_bell_notify (display, xkb_ev);
+                  notify_bell (display, xkb_ev);
                 }
               break;
             default:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]