mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 06:04:10 +00:00
bell: Clean up the bell code
Fix some old comments and rework it so that it's based on MetaWindow, not the XKB event structs.
This commit is contained in:
parent
277df44cfb
commit
6b8dda0d00
112
src/core/bell.c
112
src/core/bell.c
@ -70,10 +70,8 @@
|
|||||||
* If the configure script found we had no XKB, this does not exist.
|
* If the configure script found we had no XKB, this does not exist.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
bell_flash_fullscreen (MetaDisplay *display,
|
bell_flash_fullscreen (MetaDisplay *display)
|
||||||
XkbAnyEvent *xkb_ev)
|
|
||||||
{
|
{
|
||||||
g_assert (xkb_ev->xkb_type == XkbBellNotify);
|
|
||||||
meta_compositor_flash_screen (display->compositor, display->screen);
|
meta_compositor_flash_screen (display->compositor, display->screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,30 +136,17 @@ bell_flash_window_frame (MetaWindow *window)
|
|||||||
* @display: The display the bell event came in on
|
* @display: The display the bell event came in on
|
||||||
* @xkb_ev: The bell event we just received
|
* @xkb_ev: The bell event we just received
|
||||||
*
|
*
|
||||||
* Flashes the frame of the focussed window. If there is no focussed window,
|
* Flashes the frame of the focused window. If there is no focused window,
|
||||||
* flashes the screen.
|
* flashes the screen.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
bell_flash_frame (MetaDisplay *display,
|
bell_flash_frame (MetaDisplay *display,
|
||||||
XkbAnyEvent *xkb_ev)
|
MetaWindow *window)
|
||||||
{
|
{
|
||||||
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent *) xkb_ev;
|
|
||||||
MetaWindow *window;
|
|
||||||
|
|
||||||
g_assert (xkb_ev->xkb_type == XkbBellNotify);
|
|
||||||
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
|
|
||||||
if (!window && (display->focus_window))
|
|
||||||
{
|
|
||||||
window = display->focus_window;
|
|
||||||
}
|
|
||||||
if (window && window->frame)
|
if (window && window->frame)
|
||||||
{
|
bell_flash_window_frame (window);
|
||||||
bell_flash_window_frame (window);
|
else
|
||||||
}
|
bell_flash_fullscreen (display);
|
||||||
else /* revert to fullscreen flash if there's no focussed window */
|
|
||||||
{
|
|
||||||
bell_flash_fullscreen (display, xkb_ev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -171,69 +156,73 @@ bell_flash_frame (MetaDisplay *display,
|
|||||||
*
|
*
|
||||||
* Gives the user some kind of visual bell substitute, in response to a
|
* Gives the user some kind of visual bell substitute, in response to a
|
||||||
* bell event. What this is depends on the "visual bell type" pref.
|
* bell event. What this is depends on the "visual bell type" pref.
|
||||||
*
|
|
||||||
* If the configure script found we had no XKB, this does not exist.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bug: This should be merged with meta_bell_notify().
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
bell_visual_notify (MetaDisplay *display,
|
bell_visual_notify (MetaDisplay *display,
|
||||||
XkbAnyEvent *xkb_ev)
|
MetaWindow *window)
|
||||||
{
|
{
|
||||||
switch (meta_prefs_get_visual_bell_type ())
|
switch (meta_prefs_get_visual_bell_type ())
|
||||||
{
|
{
|
||||||
case G_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH:
|
case G_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH:
|
||||||
bell_flash_fullscreen (display, xkb_ev);
|
bell_flash_fullscreen (display);
|
||||||
break;
|
break;
|
||||||
case G_DESKTOP_VISUAL_BELL_FRAME_FLASH:
|
case G_DESKTOP_VISUAL_BELL_FRAME_FLASH:
|
||||||
bell_flash_frame (display, xkb_ev); /* does nothing yet */
|
bell_flash_frame (display, window);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
bell_audible_notify (MetaDisplay *display,
|
||||||
|
MetaWindow *window)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LIBCANBERRA
|
||||||
|
ca_proplist *p;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
ca_proplist_create (&p);
|
||||||
|
ca_proplist_sets (p, CA_PROP_EVENT_ID, "bell-window-system");
|
||||||
|
ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event"));
|
||||||
|
ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent");
|
||||||
|
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
ca_proplist_sets (p, CA_PROP_WINDOW_NAME, window->title);
|
||||||
|
ca_proplist_setf (p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long)window->xwindow);
|
||||||
|
ca_proplist_sets (p, CA_PROP_APPLICATION_NAME, window->res_name);
|
||||||
|
ca_proplist_setf (p, CA_PROP_APPLICATION_PROCESS_ID, "%d", window->net_wm_pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
res = ca_context_play_full (ca_gtk_context_get (), 1, p, NULL, NULL);
|
||||||
|
|
||||||
|
ca_proplist_destroy (p);
|
||||||
|
|
||||||
|
return res == CA_SUCCESS || res == CA_ERROR_DISABLED;
|
||||||
|
#endif /* HAVE_LIBCANBERRA */
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_bell_notify (MetaDisplay *display,
|
meta_bell_notify (MetaDisplay *display,
|
||||||
XkbAnyEvent *xkb_ev)
|
XkbAnyEvent *xkb_ev)
|
||||||
{
|
{
|
||||||
|
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 */
|
/* flash something */
|
||||||
if (meta_prefs_get_visual_bell ())
|
if (meta_prefs_get_visual_bell ())
|
||||||
bell_visual_notify (display, xkb_ev);
|
bell_visual_notify (display, window);
|
||||||
|
|
||||||
#ifdef HAVE_LIBCANBERRA
|
|
||||||
if (meta_prefs_bell_is_audible ())
|
if (meta_prefs_bell_is_audible ())
|
||||||
{
|
{
|
||||||
ca_proplist *p;
|
if (!bell_audible_notify (display, window))
|
||||||
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev;
|
|
||||||
MetaWindow *window;
|
|
||||||
int res;
|
|
||||||
|
|
||||||
ca_proplist_create (&p);
|
|
||||||
ca_proplist_sets (p, CA_PROP_EVENT_ID, "bell-window-system");
|
|
||||||
ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event"));
|
|
||||||
ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent");
|
|
||||||
|
|
||||||
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
|
|
||||||
if (!window && (display->focus_window) && (display->focus_window->frame))
|
|
||||||
window = display->focus_window;
|
|
||||||
|
|
||||||
if (window)
|
|
||||||
{
|
{
|
||||||
ca_proplist_sets (p, CA_PROP_WINDOW_NAME, window->title);
|
/* Force a classic bell if the libcanberra bell failed. */
|
||||||
ca_proplist_setf (p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long)window->xwindow);
|
|
||||||
ca_proplist_sets (p, CA_PROP_APPLICATION_NAME, window->res_name);
|
|
||||||
ca_proplist_setf (p, CA_PROP_APPLICATION_PROCESS_ID, "%d", window->net_wm_pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* First, we try to play a real sound ... */
|
|
||||||
res = ca_context_play_full (ca_gtk_context_get (), 1, p, NULL, NULL);
|
|
||||||
|
|
||||||
ca_proplist_destroy (p);
|
|
||||||
|
|
||||||
if (res != CA_SUCCESS && res != CA_ERROR_DISABLED)
|
|
||||||
{
|
|
||||||
/* ...and in case that failed we use the classic X11 bell. */
|
|
||||||
XkbForceDeviceBell (display->xdisplay,
|
XkbForceDeviceBell (display->xdisplay,
|
||||||
xkb_bell_event->device,
|
xkb_bell_event->device,
|
||||||
xkb_bell_event->bell_class,
|
xkb_bell_event->bell_class,
|
||||||
@ -241,7 +230,6 @@ meta_bell_notify (MetaDisplay *display,
|
|||||||
xkb_bell_event->percent);
|
xkb_bell_event->percent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LIBCANBERRA */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user