File 898359-fix-clutter-modal-dialog-integration-with-screenshield.patch of Package gnome-shell.1952

Index: gnome-shell-3.10.4/js/ui/endSessionDialog.js
===================================================================
--- gnome-shell-3.10.4.orig/js/ui/endSessionDialog.js
+++ gnome-shell-3.10.4/js/ui/endSessionDialog.js
@@ -206,7 +206,8 @@ const EndSessionDialog = new Lang.Class(
 
     _init: function() {
         this.parent({ styleClass: 'end-session-dialog',
-                      destroyOnClose: false });
+                      destroyOnClose: false,
+                      keybindingMode: Shell.KeyBindingMode.NONE });
 
         this._loginManager = LoginManager.getLoginManager();
         this._userManager = AccountsService.UserManager.get_default();
Index: gnome-shell-3.10.4/js/ui/modalDialog.js
===================================================================
--- gnome-shell-3.10.4.orig/js/ui/modalDialog.js
+++ gnome-shell-3.10.4/js/ui/modalDialog.js
@@ -118,9 +118,38 @@ const ModalDialog = new Lang.Class({
         this._savedKeyFocus = null;
 
         this._workSpinner = null;
+
+        // Update dialog visibility according to session mode change
+        this._sessionUpdatedID = Main.sessionMode.connect('updated', Lang.bind(this, function(){
+            // TODO: The following "visible" property change leaves a solid
+            // black block at the top-left corner
+            //
+            // this._group.visible = Main.sessionMode.hasWindows;
+
+            // The following code change actor z-position manually to get desired visibility.
+            // TODO Improve efficiency by skipping intermediate session changes.
+
+            // DO NOT manage login screen.
+            //
+            // TODO: "Main.uiGroup.raise_top(this._group);" doesn't work with login screen.
+            if (Main.sessionMode.isGreeter){
+                return;
+            }
+
+            if (Main.sessionMode.hasWindows)
+                Main.uiGroup.raise_top(this._group);
+            else
+                Main.uiGroup.set_child_below_sibling(this._group,
+                                                     Main.layoutManager.screenShieldGroup);
+        }));
     },
 
     destroy: function() {
+        if( this._sessionUpdatedID ){
+            Main.sessionMode.disconnect(this._sessionUpdatedID);
+            this._sessionUpdatedID = null;
+        }
+
         this._group.destroy();
     },
 
openSUSE Build Service is sponsored by