Accepting request 423056 from GNOME:Factory

1

OBS-URL: https://build.opensuse.org/request/show/423056
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/mutter?expand=0&rev=93
This commit is contained in:
Dominique Leuenberger 2016-08-28 10:17:27 +00:00 committed by Git OBS Bridge
commit 285cb09861
5 changed files with 432 additions and 1 deletions

107
mutter-bell.patch Normal file
View File

@ -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 @@
</_description>
</key>
+ <key name="audible-bell-force-through-server" type="b">
+ <default>false</default>
+ <_summary>Force the System Bell through the X server only.</_summary>
+ <_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.
+ </_description>
+ </key>
+
<child name="keybindings" schema="org.gnome.mutter.keybindings"/>
</schema>

View File

@ -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

View File

@ -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()

View File

@ -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 \

View File

@ -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;