diff --git a/mutter-bell.patch b/mutter-bell.patch new file mode 100644 index 0000000..882e4d5 --- /dev/null +++ b/mutter-bell.patch @@ -0,0 +1,107 @@ +Index: mutter-3.20.0/src/meta/prefs.h +=================================================================== +--- mutter-3.20.0.orig/src/meta/prefs.h ++++ mutter-3.20.0/src/meta/prefs.h +@@ -89,6 +89,7 @@ typedef enum + META_PREF_WORKSPACE_NAMES, + META_PREF_VISUAL_BELL, + META_PREF_AUDIBLE_BELL, ++ META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER, + META_PREF_VISUAL_BELL_TYPE, + META_PREF_GNOME_ACCESSIBILITY, + META_PREF_GNOME_ANIMATIONS, +@@ -399,6 +400,7 @@ MetaKeyBindingAction meta_prefs_get_keyb + + gboolean meta_prefs_get_visual_bell (void); + gboolean meta_prefs_bell_is_audible (void); ++gboolean meta_prefs_bell_force_through_server (void); + GDesktopVisualBellType meta_prefs_get_visual_bell_type (void); + + #endif +Index: mutter-3.20.0/src/core/prefs.c +=================================================================== +--- mutter-3.20.0.orig/src/core/prefs.c ++++ mutter-3.20.0/src/core/prefs.c +@@ -93,6 +93,7 @@ static gboolean auto_raise_delay = 500; + static gboolean focus_change_on_pointer_rest = FALSE; + static gboolean bell_is_visible = FALSE; + static gboolean bell_is_audible = TRUE; ++static gboolean bell_force_through_server = FALSE; + static gboolean gnome_accessibility = FALSE; + static gboolean gnome_animations = TRUE; + static char *cursor_theme = NULL; +@@ -353,6 +354,13 @@ static MetaBoolPreference preferences_bo + &bell_is_audible, /* FIXME: change the name: it's confusing */ + }, + { ++ { "audible-bell-force-through-server", ++ SCHEMA_MUTTER, ++ META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER, ++ }, ++ &bell_force_through_server, ++ }, ++ { + { KEY_GNOME_ACCESSIBILITY, + SCHEMA_INTERFACE, + META_PREF_GNOME_ACCESSIBILITY, +@@ -1813,6 +1821,9 @@ meta_preference_to_string (MetaPreferenc + case META_PREF_AUDIBLE_BELL: + return "AUDIBLE_BELL"; + ++ case META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER: ++ return "AUDIBLE_BELL_FORCE_THROUGH_SERVER"; ++ + case META_PREF_VISUAL_BELL_TYPE: + return "VISUAL_BELL_TYPE"; + +@@ -2077,6 +2088,12 @@ meta_prefs_bell_is_audible (void) + return bell_is_audible; + } + ++gboolean ++meta_prefs_bell_force_through_server (void) ++{ ++ return bell_force_through_server; ++} ++ + GDesktopVisualBellType + meta_prefs_get_visual_bell_type (void) + { +Index: mutter-3.20.0/src/core/bell.c +=================================================================== +--- mutter-3.20.0.orig/src/core/bell.c ++++ mutter-3.20.0/src/core/bell.c +@@ -220,6 +220,12 @@ meta_bell_notify (MetaDisplay *display, + if (meta_prefs_get_visual_bell ()) + bell_visual_notify (display, window); + ++ if (meta_prefs_bell_force_through_server ()) ++ { ++ XkbForceBell (display->xdisplay, 100); ++ return TRUE; ++ } ++ + if (meta_prefs_bell_is_audible ()) + return bell_audible_notify (display, window); + +Index: mutter-3.20.0/data/org.gnome.mutter.gschema.xml.in +=================================================================== +--- mutter-3.20.0.orig/data/org.gnome.mutter.gschema.xml.in ++++ mutter-3.20.0/data/org.gnome.mutter.gschema.xml.in +@@ -102,6 +102,16 @@ + + + ++ ++ false ++ <_summary>Force the System Bell through the X server only. ++ <_description> ++ Force the System Bell through the X server only for systems that ++ do not want to go through the sound card - for example that don't ++ have speakers. ++ ++ ++ + + + diff --git a/mutter-bsc984738-grab-display.patch b/mutter-bsc984738-grab-display.patch new file mode 100644 index 0000000..2b052c1 --- /dev/null +++ b/mutter-bsc984738-grab-display.patch @@ -0,0 +1,195 @@ +diff --git a/src/core/display-private.h b/src/core/display-private.h +index 531c6f7..aaa90ec 100644 +--- a/src/core/display-private.h ++++ b/src/core/display-private.h +@@ -174,6 +174,8 @@ struct _MetaDisplay + GHashTable *stamps; + GHashTable *wayland_windows; + ++ int server_grab_count; ++ + /* serials of leave/unmap events that may + * correspond to an enter event we should + * ignore +@@ -322,6 +324,8 @@ struct _MetaDisplayClass + gboolean meta_display_open (void); + void meta_display_close (MetaDisplay *display, + guint32 timestamp); ++void meta_display_grab (MetaDisplay *display); ++void meta_display_ungrab (MetaDisplay *display); + + void meta_display_unmanage_windows_for_screen (MetaDisplay *display, + MetaScreen *screen, +diff --git a/src/core/display.c b/src/core/display.c +index 4c7a00e..87e3307 100644 +--- a/src/core/display.c ++++ b/src/core/display.c +@@ -585,6 +585,7 @@ meta_display_open (void) + display->focus_serial = 0; + display->server_focus_window = None; + display->server_focus_serial = 0; ++ display->server_grab_count = 0; + + display->mouse_mode = TRUE; /* Only relevant for mouse or sloppy focus */ + display->allow_terminal_deactivation = TRUE; /* Only relevant for when a +@@ -1130,6 +1131,50 @@ meta_display_close (MetaDisplay *display, + meta_quit (META_EXIT_SUCCESS); + } + ++/* Grab/ungrab routines taken from fvwm. ++ * Calling this function will cause X to ignore all other clients until ++ * you ungrab. This may not be quite as bad as it sounds, yet there is ++ * agreement that avoiding server grabs except when they are clearly needed ++ * is a good thing. ++ * ++ * If you do use such grabs, please clearly explain the necessity for their ++ * usage in a comment. Try to keep their scope extremely limited. In ++ * particular, try to avoid emitting any signals or notifications while ++ * a grab is active (if the signal receiver tries to block on an X request ++ * from another client at this point, you will have a deadlock). ++ */ ++void ++meta_display_grab (MetaDisplay *display) ++{ ++ if (display->server_grab_count == 0) ++ { ++ XGrabServer (display->xdisplay); ++ } ++ display->server_grab_count += 1; ++ meta_verbose ("Grabbing display, grab count now %d\n", ++ display->server_grab_count); ++} ++ ++void ++meta_display_ungrab (MetaDisplay *display) ++{ ++ if (display->server_grab_count == 0) ++ meta_bug ("Ungrabbed non-grabbed server\n"); ++ ++ display->server_grab_count -= 1; ++ if (display->server_grab_count == 0) ++ { ++ /* FIXME we want to purge all pending "queued" stuff ++ * at this point, such as window hide/show ++ */ ++ XUngrabServer (display->xdisplay); ++ XFlush (display->xdisplay); ++ } ++ ++ meta_verbose ("Ungrabbing display, grab count now %d\n", ++ display->server_grab_count); ++} ++ + /** + * meta_display_for_x_display: + * @xdisplay: An X display +@@ -1516,7 +1561,7 @@ request_xserver_input_focus_change (MetaDisplay *display, + * we know which is which by making two requests that the server will + * process at the same time. + */ +- XGrabServer (display->xdisplay); ++ meta_display_grab (display); + + serial = XNextRequest (display->xdisplay); + +@@ -1529,8 +1574,7 @@ request_xserver_input_focus_change (MetaDisplay *display, + display->atom__MUTTER_FOCUS_SET, + XA_STRING, 8, PropModeAppend, NULL, 0); + +- XUngrabServer (display->xdisplay); +- XFlush (display->xdisplay); ++ meta_display_ungrab (display); + + meta_display_update_focus_window (display, + meta_window, +diff --git a/src/core/keybindings.c b/src/core/keybindings.c +index ed34aea..a989200 100644 +--- a/src/core/keybindings.c ++++ b/src/core/keybindings.c +@@ -979,6 +979,9 @@ meta_display_grab_window_buttons (MetaDisplay *display, + { + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + /* Grab Alt + button1 for moving window. + * Grab Alt + button2 for resizing window. + * Grab Alt + button3 for popping up window menu. +@@ -1015,6 +1018,9 @@ meta_display_ungrab_window_buttons (MetaDisplay *display, + { + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + if (keys->window_grab_modifiers == 0) + return; + +@@ -1041,6 +1047,9 @@ meta_display_grab_focus_window_button (MetaDisplay *display, + { + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + /* Grab button 1 for activating unfocused windows */ + meta_verbose ("Grabbing unfocused window buttons for %s\n", window->desc); + +@@ -1080,6 +1089,9 @@ meta_display_ungrab_focus_window_button (MetaDisplay *display, + { + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + meta_verbose ("Ungrabbing unfocused window buttons for %s\n", window->desc); + + if (!window->have_focus_click_grab) +@@ -1309,6 +1321,9 @@ meta_window_grab_keys (MetaWindow *window) + MetaDisplay *display = window->display; + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + if (window->all_keys_grabbed) + return; + +@@ -1348,6 +1363,9 @@ meta_window_ungrab_keys (MetaWindow *window) + MetaDisplay *display = window->display; + MetaKeyBindingManager *keys = &display->key_binding_manager; + ++ if (display->server_grab_count > 0) ++ return; ++ + if (window->grab_on_frame && + window->frame != NULL) + change_window_keygrabs (keys, window->frame->xwindow, FALSE); +diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c +index 3d47f0d..5ea1213 100644 +--- a/src/x11/window-x11.c ++++ b/src/x11/window-x11.c +@@ -507,6 +507,8 @@ meta_window_x11_manage (MetaWindow *window) + + meta_icon_cache_init (&priv->icon_cache); + ++ meta_display_grab (display); ++ + meta_display_register_x_window (display, &window->xwindow, window); + + /* assign the window to its group, or create a new group if needed */ +@@ -565,6 +567,13 @@ meta_window_x11_manage (MetaWindow *window) + + meta_window_x11_update_shape_region (window); + meta_window_x11_update_input_region (window); ++ ++ meta_display_ungrab (display); ++ ++ /* Perform operations prevented by grab */ ++ if (window->frame) ++ meta_display_grab_window_buttons (display, window->frame->xwindow); ++ meta_window_grab_keys (window); + } + + static void diff --git a/mutter.changes b/mutter.changes index 4bd1e67..4e86e79 100644 --- a/mutter.changes +++ b/mutter.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sat Jul 30 03:45:15 CEST 2016 - hpj@suse.com + +- Add mutter-bsc984738-grab-display.patch (bsc#984738, bgo#769387). + ------------------------------------------------------------------- Wed Jun 29 09:14:06 UTC 2016 - zaitor@opensuse.org @@ -31,6 +36,12 @@ Wed May 11 08:03:31 UTC 2016 - zaitor@opensuse.org - Conditionally apply translations-update-upstream BuildRequires and macro for non-openSUSE only. +------------------------------------------------------------------- +Mon May 2 10:57:13 CEST 2016 - fcrozat@suse.com + +- Drop mutter-grab-display.patch, it has been fixed by upstream + differently. + ------------------------------------------------------------------- Wed Apr 13 17:48:40 UTC 2016 - zaitor@opensuse.org @@ -42,6 +53,14 @@ Wed Apr 13 17:48:40 UTC 2016 - zaitor@opensuse.org + Misc. bug fixes and cleanups: bgo#762828, bgo#764807. + Updated translations. +------------------------------------------------------------------- +Wed Apr 13 06:46:07 UTC 2016 - idonmez@suse.com + +- Update to GNOME 3.20 Fate#318572 +- Remove upstream patches: mutter-bnc879109-no-monitors-crash.patch +- Refresh mutter-grab-display.patch, mutter-bell.patch, + relax-some-constraints-on-CSD-windows-in-sle-classic.patch + ------------------------------------------------------------------- Wed Mar 23 08:14:33 UTC 2016 - dimstar@opensuse.org @@ -596,6 +615,11 @@ Wed Aug 20 07:50:33 UTC 2014 - dimstar@opensuse.org pkgconfig(xkbcommon), pkgconfig(xkbcommon-x11) and pkgconfig(xcb-randr) BuildRequires: new dependencies. +------------------------------------------------------------------- +Thu Aug 14 08:35:16 UTC 2014 - idonmez@suse.com + +- Update mutter-bell.patch so it works on all cases (bnc#889218) + ------------------------------------------------------------------- Wed Jul 23 16:13:10 UTC 2014 - dimstar@opensuse.org @@ -653,6 +677,27 @@ Sat Jul 12 19:01:40 UTC 2014 - dimstar@opensuse.org - Add BuildRequires for session startup support using systemd: + pkgconfig(libdrm) and pkgconfig(libsystemd). +------------------------------------------------------------------- +Wed Jul 9 11:53:15 UTC 2014 - cxiong@suse.com + +- Add relax-some-constraints-on-CSD-windows-in-sle-classic.patch: + CSD (Client Side Decoration) windows have invisible box wrapping + around them, which leads to some positioning issues as in this + bug report. Relax some constraints on window positioning for CSD + windows s.t. they can be placed at the very top of the monitor. + This fix works nicely for "sle-classic" as there is no top bar + any more, and is NOT applied in other GNOME sessions for reasons + stated in bgo#719772 (bnc#883491). + +------------------------------------------------------------------- +Sat May 31 13:05:37 CDT 2014 - federico@suse.com + +- Add mutter-bnc879109-no-monitors-crash.patch: + Fixes a crash in Mutter when there are no usable monitors, such + as when a laptop is booted with the lid closed while on a docking + station, with the intent of plugging an external monitor later + (bnc#879109). + ------------------------------------------------------------------- Sat May 17 10:33:34 UTC 2014 - zaitor@opensuse.org @@ -663,6 +708,17 @@ Sat May 17 10:33:34 UTC 2014 - zaitor@opensuse.org + Misc. bugs fixed: bgo#728423, bgo#729732. + Updated translations. +------------------------------------------------------------------- +Wed May 7 18:54:54 CEST 2014 - sbrabec@suse.cz + +- Added support for gnome-patch-translation (2 strings). + +------------------------------------------------------------------- +Sun Apr 27 23:49:47 UTC 2014 - dliang@suse.com + +- Update mutter-grab-display.patch to fix (bnc#873763) + remove the duplicated trap-pop. + ------------------------------------------------------------------- Wed Apr 16 06:59:50 UTC 2014 - dimstar@opensuse.org @@ -678,6 +734,13 @@ Sat Apr 5 13:32:23 UTC 2014 - dimstar@opensuse.org package (in order to not conflict between mutter and mutter-wayland). +------------------------------------------------------------------- +Fri Mar 28 08:40:54 UTC 2014 - dliang@suse.com + +- Add mutter-grab-display.patch (bnc#870285) + The oracle installer cannot display correctly. + The bug was introduced in 3.10.4 and is now fixed in upstream. + ------------------------------------------------------------------- Wed Mar 26 19:10:09 UTC 2014 - zaitor@opensuse.org @@ -789,6 +852,18 @@ Thu Feb 20 11:59:14 UTC 2014 - zaitor@opensuse.org + Bugs fixed: bgo#720630, bgo#723468, bgo#724258, bgo#724364. + Updated translations. +------------------------------------------------------------------- +Fri Feb 14 11:03:34 UTC 2014 - fcrozat@suse.com + +- Update mutter-bell.patch: correctly get gsetting from the right + schema [FATE#316042] + +------------------------------------------------------------------- +Wed Feb 5 08:44:05 UTC 2014 - idonmez@suse.com + +- Add mutter-bell.patch to make audible bell work out of the box. + Implements FATE#316042 + ------------------------------------------------------------------- Sat Jan 18 12:22:59 UTC 2014 - zaitor@opensuse.org @@ -1737,7 +1812,7 @@ Sun Feb 13 16:53:09 CET 2011 - vuntz@opensuse.org Fri Feb 11 12:31:50 UTC 2011 - fcrozat@novell.com - Update to version 2.91.6: - + Add meta_screen_override_window_layout() to let a plugin set + + Add meta_screen_override_window_layout() to let a plugin set the workspace layout + Add a 'size-changed' signal to MetaWindowActor + Add meta_window_actor_is_destroyed() diff --git a/mutter.spec b/mutter.spec index b417b55..b6d39fb 100644 --- a/mutter.spec +++ b/mutter.spec @@ -30,6 +30,12 @@ License: GPL-2.0+ Group: System/GUI/GNOME Url: http://www.gnome.org Source: http://download.gnome.org/sources/mutter/3.20/%{name}-%{version}.tar.xz +# PATCH-FEATURE-SLE mutter-bell.patch FATE#316042 bnc#889218 idonmez@suse.com -- make audible bell work out of the box. +Patch1: mutter-bell.patch +# PATCH-FIX-SLE relax-some-constraints-on-CSD-windows-in-sle-classic.patch bnc#883491 cxiong@suse.com -- Relax some constraints on window positioning for CSD windows s.t. they can be placed at the very top of the monitor. +Patch2: relax-some-constraints-on-CSD-windows-in-sle-classic.patch +# PATCH-FIX-UPSTREAM mutter-bsc984738-grab-display.patch bsc#984738 bgo#769387 hpj@suse.com -- Revert a upstream commit to avoid X11 race condition that results in wrong dialog sizes. +Patch3: mutter-bsc984738-grab-display.patch BuildRequires: fdupes BuildRequires: gobject-introspection-devel >= 0.9.5 BuildRequires: intltool @@ -140,7 +146,10 @@ to develop applications that require these. %setup -q %if !0%{?is_opensuse} translation-update-upstream +%patch1 -p1 +%patch2 -p1 %endif +%patch3 -p1 %build %configure \ diff --git a/relax-some-constraints-on-CSD-windows-in-sle-classic.patch b/relax-some-constraints-on-CSD-windows-in-sle-classic.patch new file mode 100644 index 0000000..dea3124 --- /dev/null +++ b/relax-some-constraints-on-CSD-windows-in-sle-classic.patch @@ -0,0 +1,45 @@ +Index: mutter-3.20.0/src/core/constraints.c +=================================================================== +--- mutter-3.20.0.orig/src/core/constraints.c ++++ mutter-3.20.0/src/core/constraints.c +@@ -1241,6 +1241,12 @@ constrain_to_single_monitor (MetaWindow + } + + static gboolean ++constraint_is_sle_classic(void){ ++ char * session_mode = (char *) g_getenv ("GNOME_SHELL_SESSION_MODE"); ++ return g_strcmp0("sle-classic", session_mode) == 0; ++} ++ ++static gboolean + constrain_fully_onscreen (MetaWindow *window, + ConstraintInfo *info, + ConstraintPriority priority, +@@ -1256,6 +1262,11 @@ constrain_fully_onscreen (MetaWindow + if (window->type == META_WINDOW_DESKTOP || + window->type == META_WINDOW_DOCK || + window->fullscreen || ++ /* in SLE Classic, there is no top bar and to avoid issues like ++ * bnc#883491, remove some constraints on CSD windows, which tends to have ++ * invisible wrapper box. Do the same for "constrain_titlebar_visible". ++ */ ++ (constraint_is_sle_classic() && !window->decorated) || + !window->require_fully_onscreen || + info->is_user_action) + return TRUE; +@@ -1292,10 +1303,11 @@ constrain_titlebar_visible (MetaWindow + * is only meant for normal windows (e.g. we don't want docks to be shoved + * "onscreen" by their own strut). + */ +- if (window->type == META_WINDOW_DESKTOP || +- window->type == META_WINDOW_DOCK || +- window->fullscreen || +- !window->require_titlebar_visible || ++ if (window->type == META_WINDOW_DESKTOP || ++ window->type == META_WINDOW_DOCK || ++ window->fullscreen || ++ (constraint_is_sle_classic() && !window->decorated) || ++ !window->require_titlebar_visible || + unconstrained_user_action) + return TRUE; +