Hello community,

here is the log from the commit of package gnome-shell.14892 for 
openSUSE:Leap:15.2:Update checked in at 2020-11-07 06:25:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2:Update/gnome-shell.14892 (Old)
 and      /work/SRC/openSUSE:Leap:15.2:Update/.gnome-shell.14892.new.11331 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-shell.14892"

Sat Nov  7 06:25:49 2020 rev:1 rq:845845 version:3.34.5

Changes:
--------
New Changes file:

--- /dev/null   2020-10-22 01:51:33.322291705 +0200
+++ 
/work/SRC/openSUSE:Leap:15.2:Update/.gnome-shell.14892.new.11331/gnome-shell.changes
        2020-11-07 06:25:51.362265365 +0100
@@ -0,0 +1,6922 @@
+-------------------------------------------------------------------
+Fri Oct 23 01:44:34 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Add gnome-shell-CVE-2020-17489.patch: reset auth prompt on vt
+  switch before fade in in loginDialog 
+  (bsc#1175155 glgo#GNOME/gnome-shell!1377 CVE-2020-17489).
+
+-------------------------------------------------------------------
+Mon Oct 12 09:24:09 UTC 2020 - QK ZHU <qk...@suse.com>
+
+- Add gnome-shell-jscSLE16518-update-subprojects-libgvc.patch:
+  Update libgvc to revision 7a621180. This update is necessary to 
+  add support for recent UCM related changes in ALSA and PulseAudio
+  (jsc#SLE-16518, glgo#GNOME/gnome-shell!1444).
+
+-------------------------------------------------------------------
+Thu Sep 10 01:58:30 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Move branding image file to branding-SLE package
+  (jsc#SLE-11720 bsc#1176304).
+  + Update gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch
+  + Remove sle-background.png
+
+
+-------------------------------------------------------------------
+Fri Sep  4 02:14:45 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Add gnome-shell-executable-path-not-absolute.patch: Fix ExecStart
+  is not absolute path. ExecStart can use related path in high
+  systemd version. The current systemd version in SLE-15-SP2
+  should use absolute path (bsc#1176051).
+
+-------------------------------------------------------------------
+Mon Jul 13 02:04:52 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Update gnome-shell.spec: Replace is_opensuse with sle_version
+  (jsc#SLE-11720).
+
+-------------------------------------------------------------------
+Thu Jul  9 07:17:11 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Add gnome-shell-network-agent-not-pop-up.patch: Fix network agent
+  doesn't pop up (bsc#1171822).
+
+-------------------------------------------------------------------
+Thu Jun 11 02:28:45 UTC 2020 - QK ZHU <qk...@suse.com>
+
+- Add gnome-shell-disable-screensaver-user-switch-when-remote.patch: 
+  This patch will set the button invisible when the user's can_switch
+  is false (e.g. when the session is remote) or user-switch-enabled is
+  disabled (bsc#1167276 glgo#GNOME/gnome-shell!1215).
+
+-------------------------------------------------------------------
+Wed Jun  3 02:11:21 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Update gnome-shell-private-connection.patch: Remove JS error in
+  messages log when NetworkManager is not installed (bsc#1172424).
+
+-------------------------------------------------------------------
+Wed Apr 22 01:44:59 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Add gnome-shell-Get-resource-scale-by-get_resource_scale.patch:
+  To remove 'Getting invalid resource scale property' warnings in
+  the log(bsc#1169845 glgo#GNOME/gnome-shell!1206).
+
+-------------------------------------------------------------------
+Thu Apr  9 06:32:48 UTC 2020 - Xiaoguang Wang <xiaoguang.w...@suse.com>
+
+- Update gnome-shell-disable-ibus-when-not-installed.patch: Remove
+  error in journal log(bsc#1169029).
+
+-------------------------------------------------------------------
+Wed Apr 01 11:06:59 UTC 2020 - bjorn....@gmail.com
+
+- Update to version 3.34.5:
+  + Leave overview when locking the screen.
+  + Avoid IO on the main thread.
+  + Fix OSK layout fallback for unsupported variants.
+  + Fix high-contrast/symbolic icon mix-up.
+  + Misc. bug fixes and cleanups.
+  + Updated translations.
+- Switch to using explicit released tag in _service.
+
+-------------------------------------------------------------------
+Mon Mar  9 07:56:45 UTC 2020 - QK ZHU <qk...@suse.com>
+
+- Drop gnome-shell-Avoid-loginDialog-grab-focus-when-locked.patch:
+  This patch will steal the mouse focus of the gdm greeter, drop
+  it to be aligned with upstream, let the first/only user entry of
+  gdm to be selected by default, and the bug the patch fixed can not
+  be reproduced in GNOME3.34 (bsc#1164856).
+- Rebase gs-fate318433-prevent-same-account-multi-logins.patch and
+  gnome-shell-domain.patch.
+
+-------------------------------------------------------------------
+Thu Feb 27 16:52:09 UTC 2020 - dims...@opensuse.org
+
+- Update to version 3.34.4+4:
+  * shell: fix typo in comment
+  * global: force fsync() to worker thread when saving state
+  * overview: Hide the overview on session mode hasOverview changes
+  * closeDialog: Make dialog inactive while fading out
+
+-------------------------------------------------------------------
+Sun Feb 16 17:08:29 UTC 2020 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 3.34.4:
+  + Switch screen-recorder back to VP8.
+  + Updated translations.
+
+-------------------------------------------------------------------
+Sun Jan 05 14:37:40 UTC 2020 - bjorn....@gmail.com
+
+- Update to version 3.34.3+0:
+  * Bump verion to 3.34.3
+
+-------------------------------------------------------------------
+Mon Dec 30 10:08:06 UTC 2019 - Frederic Crozat <fcro...@suse.com>
+
+- Update BuildRequires for latest release of gnome-desktop-3
+  to get systemd scope support for launched applications.
+- Update BuildRequires to mutter libraries >= 3.34.0 and 
+  gsettings-desktop-schemas >= 3.33.1.
+
+-------------------------------------------------------------------
+Fri Dec 27 09:05:56 UTC 2019 - dims...@opensuse.org
+
+- Update to version 3.34.2+2:
+  * polkitAgent: Only set key focus to password entry after opening dialog
+
+-------------------------------------------------------------------
+Tue Dec 24 11:30:30 UTC 2019 - dims...@opensuse.org
+
+- Update to version 3.34.2+1:
+  * keyboard: Stop accessing deprecated actor property
+
+-------------------------------------------------------------------
+Fri Dec 13 06:30:17 UTC 2019 - dead_mo...@opensuse.org
+
+- Update to version 3.34.2+0:
+  * popupMenu: Close when a system modal pops up
+  * switcherPopup: Dismiss when a system modal dialog opens
+  * weather: Only require auto-location authorization if sandboxed
+  * util: Place spawned processes into a systemd scope
+  * shell-global: Place launched applications into a systemd scope
+  * Update Malay translation
+  * closeDialog: Fix scale of dialog for x11 clients in Wayland sessions
+  * switcherPopup: Fix scrollable check
+  * calendar-server: Use correct timezone for all-day events
+  * theme: Add light styling to message buttons
+  * Update Chinese (Taiwan) translation
+  * appIcon: Draw running dot above the overview icon
+  * texture-cache: Remove also scaled keys from the cache
+  * data: Enable clean session shutdown after gnome-shell failure
+  * extensionSystem: Create a file to flag that extensions are being loaded
+  * extensions-tool: Fix removing from settings list
+  * introspect: Fix whitelist check
+  * theme: Add :active styling to message-close and media control buttons
+  * theme: Add message close button styling
+  * theme: Darken hovered message-media-control button
+  * magnifier: Use new cursor tracker API to keep wayland focus while hidden
+  * magnifier: Use own showSystemCursor() instead of set_pointer_visible()
+  * Update Brazilian Portuguese translation
+  * polkitAgent: Use dialog as confirmation when the user has no password
+  * polkitAgent: Update user name on user changes
+  * polkitAgent: Fix a typo of a signal name
+  * appDisplay: Add a timeout when switching pages during DnD
+  * appDisplay: Add threshold after overshoot page switches
+  * appDisplay: Simplify event blocking while folder is opened
+  * appDisplay: Ensure we don't recreate existing AppIcons for folders
+  * appDisplay: Add missing .actor
+  * keyboard: Try harder to find a matching layout
+  * screenShield: Replace child properties
+  * switcherPopup: Fix last commit
+  * switcherPopup: Improve modifier-less keybinding navigation
+  * switcherPopup: Use roundtrip time when the popup is modifier-less
+  * appDisplay: Don't crash if app is missing categories
+  * panel: Update window section items on title changes
+  * power: Handle "100% but charging" case
+  * closeDialog: Fix dialog size when using geometry scaling
+  * appIcon: Remove drag monitor on destroy
+  * folderView: Reset schemas before removing the folder
+  * baseAppView: Destroy icon when removing
+  * allView: Rename variable
+  * allView, frequentView: Only create icons when necessary
+  * polkitAgent: Fix spinner
+  * Increase .calendar-today visibility
+  * appMenu: Hide stopped spinner actor
+  * animation: Add parameter for hiding stopped Spinner actor
+  * animation: Turn Spinner animate parameter into Params option
+
+-------------------------------------------------------------------
+Thu Nov 21 15:58:13 UTC 2019 - Frederic Crozat <fcro...@suse.com>
+
+- Update gnome-shell-domain.patch to fix syntax errors.
+
+-------------------------------------------------------------------
++++ 6725 more lines (skipped)
++++ between /dev/null
++++ and 
/work/SRC/openSUSE:Leap:15.2:Update/.gnome-shell.14892.new.11331/gnome-shell.changes

New:
----
  _service
  _servicedata
  aboutMenu.js
  endSession-dialog-update-time-label-every-sec.patch
  gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch
  gnome-shell-3.34.5.obscpio
  gnome-shell-864872-unlock-by-mouse-motion.patch
  gnome-shell-CVE-2020-17489.patch
  gnome-shell-Get-resource-scale-by-get_resource_scale.patch
  gnome-shell-disable-ibus-when-not-installed.patch
  gnome-shell-disable-screensaver-user-switch-when-remote.patch
  gnome-shell-domain.patch
  gnome-shell-executable-path-not-absolute.patch
  gnome-shell-fate324570-Make-GDM-background-image-configurable.patch
  gnome-shell-gdm-login-applet.patch
  gnome-shell-jscSLE16518-update-subprojects-libgvc.patch
  gnome-shell-jscSLE9267-Remove-sessionList-of-endSessionDialog.patch
  gnome-shell-lock-bg-on-primary.patch
  gnome-shell-network-agent-not-pop-up.patch
  gnome-shell-private-connection.patch
  gnome-shell-screen-disappear.patch
  gnome-shell.changes
  gnome-shell.obsinfo
  gnome-shell.spec
  gs-fate318433-prevent-same-account-multi-logins.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-shell.spec ++++++
#
# spec file for package gnome-shell
#
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global __requires_exclude typelib\\(Meta\\)

Name:           gnome-shell
Version:        3.34.5
Release:        0
Summary:        GNOME Shell
License:        GPL-2.0-or-later
Group:          System/GUI/GNOME
URL:            https://wiki.gnome.org/Projects/GnomeShell
Source:         %{name}-%{version}.tar.xz
# SOURCE-FEATURE-SLE aboutMenu fate#314545 dli...@suse.com -- Add an applet on 
login UI to display suse icon, product name, hostname.
Source1:        aboutMenu.js

# PATCH-FIX-UPSTREAM gnome-shell-private-connection.patch bnc#751211 bgo#646187 
dims...@opensuse.org -- create private connections if the user is not authorized
Patch1:         gnome-shell-private-connection.patch
# PATCH-FIX-OPENSUSE gnome-shell-disable-ibus-when-not-installed.patch 
bsc#987360 qz...@suse.com -- disable ibus start when outof Chinese, Japanese, 
Korean area
Patch2:         gnome-shell-disable-ibus-when-not-installed.patch
# PATCH-FEATURE-OPENSUSE 
gnome-shell-fate324570-Make-GDM-background-image-configurable.patch 
fate#324570, glgo#GNOME/gnome-shell#680 qk...@suse.com -- make GDM background 
image configurable
Patch4:         
gnome-shell-fate324570-Make-GDM-background-image-configurable.patch
# PATCH-FEATURE-OPENSUSE 
gnome-shell-jscSLE9267-Remove-sessionList-of-endSessionDialog.patch 
jsc#SLE-9267 qk...@suse.com -- Remove sessionList of endSessionDialog
Patch5:         
gnome-shell-jscSLE9267-Remove-sessionList-of-endSessionDialog.patch
# PATCH-FIX-UPSTREAM gnome-shell-Get-resource-scale-by-get_resource_scale.patch 
bsc#1169845 glgo#GNOME/gnome-shell!1206 xw...@suse.com -- Get resource scale by 
get_resource_scale
Patch6:         gnome-shell-Get-resource-scale-by-get_resource_scale.patch
# PATCH-FIX-UPSTREAM 
gnome-shell-disable-screensaver-user-switch-when-remote.patch bsc#1167276 
glgo#GNOME/gnome-shell!1215 qk...@suse.com -- Set Switch User Button invisible 
when session is Remote
Patch7:         gnome-shell-disable-screensaver-user-switch-when-remote.patch
# PATCH-FIX-UPSTREAM gnome-shell-network-agent-not-pop-up.patch bsc#1171822 
xw...@suse.com -- Fix network agent doesn't pop up
Patch8:         gnome-shell-network-agent-not-pop-up.patch
# PATCH-FIX-OPENSUSE gnome-shell-executable-path-not-absolute.patch bsc#1176051 
xw...@suse.com --  Fix ExecStart is not absolute path
Patch9:         gnome-shell-executable-path-not-absolute.patch
# PATCH-FIX-UPSTREAM gnome-shell-jscSLE16518-update-subprojects-libgvc.patch 
jsc#SLE-16518 glgo#GNOME/gnome-shell!1444 qk...@suse.com -- Update libgvc to 
revision 7a621180
Patch10:        gnome-shell-jscSLE16518-update-subprojects-libgvc.patch
# PATCH-FIX-UPSTREAM gnome-shell-CVE-2020-17489.patch bsc#1175155 
glgo#GNOME/gnome-shell!1377 xw...@suse.com -- Reset auth prompt on vt switch 
before fade in
Patch11:        gnome-shell-CVE-2020-17489.patch

## NOTE: Keep SLE-only patches at bottom (starting on 1000).
# PATCH-FEATURE-SLE gnome-shell-gdm-login-applet.patch fate#314545 
dli...@suse.com -- Add an applet on login UI to display suse icon, product 
name, hostname.
Patch1001:      gnome-shell-gdm-login-applet.patch
# PATCH-FEATURE-SLE gnome-shell-domain.patch fate#307773 dli...@suse.com -- 
Active Directory Integration
Patch1002:      gnome-shell-domain.patch
# PATCH-FIX-SLE gnome-shell-screen-disappear.patch bnc#870217 dli...@suse.com 
-- screen disapper.
Patch1003:      gnome-shell-screen-disappear.patch
# PATCH-FIX-SLE endSession-dialog-update-time-label-every-sec.patch bnc#886132 
cxi...@suse.com -- update time label every second in end session dialog
Patch1004:      endSession-dialog-update-time-label-every-sec.patch
# PATCH-FEATURE-SLE gnome-shell-864872-unlock-by-mouse-motion.patch bnc#864872 
dli...@suse.com -- 10px mouse motion to lift screen shield.
Patch1005:      gnome-shell-864872-unlock-by-mouse-motion.patch
# PATCH-FIX-SLE gnome-shell-lock-bg-on-primay.patch bnc#894050 dli...@suse.com 
-- display background of lock dialog on the primary screen.
Patch1006:      gnome-shell-lock-bg-on-primary.patch
# PATCH-FIX-SLE gs-fate318433-prevent-same-account-multi-logins.patch 
fate#318433 cxi...@suse.com -- prevent multiple simultaneous login.
Patch1007:      gs-fate318433-prevent-same-account-multi-logins.patch
# PATCH-FEATURE-SLE gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch 
xw...@suse.com -- Add SUSE logo on lock screen for GNOME theme.
Patch1008:      gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch

# needed for directory ownership
BuildRequires:  asciidoc
BuildRequires:  dbus-1
BuildRequires:  docbook-xsl-stylesheets
BuildRequires:  fdupes
BuildRequires:  gcc-c++
BuildRequires:  gtk-doc
BuildRequires:  meson >= 0.47.0
BuildRequires:  pkgconfig
BuildRequires:  sassc
BuildRequires:  translation-update-upstream
BuildRequires:  xsltproc
BuildRequires:  pkgconfig(atk-bridge-2.0)
BuildRequires:  pkgconfig(gcr-base-3) >= 3.7.5
BuildRequires:  pkgconfig(gdk-pixbuf-2.0)
BuildRequires:  pkgconfig(gdk-x11-3.0)
BuildRequires:  pkgconfig(gio-2.0) >= 2.56.0
BuildRequires:  pkgconfig(gio-unix-2.0) >= 2.56.0
BuildRequires:  pkgconfig(gjs-1.0) >= 1.57.3
BuildRequires:  pkgconfig(gnome-autoar-0)
BuildRequires:  pkgconfig(gnome-bluetooth-1.0) >= 3.9.0
BuildRequires:  pkgconfig(gnome-desktop-3.0) >= 3.34.2
BuildRequires:  pkgconfig(gnome-keybindings)
BuildRequires:  pkgconfig(gobject-2.0)
BuildRequires:  pkgconfig(gobject-introspection-1.0) >= 1.49.1
BuildRequires:  pkgconfig(gsettings-desktop-schemas) >= 3.33.1
BuildRequires:  pkgconfig(gstreamer-1.0) >= 0.11.92
BuildRequires:  pkgconfig(gstreamer-base-1.0)
BuildRequires:  pkgconfig(gtk+-3.0) >= 3.15.0
BuildRequires:  pkgconfig(ibus-1.0) >= 1.5.2
BuildRequires:  pkgconfig(json-glib-1.0) >= 0.13.2
BuildRequires:  pkgconfig(libcanberra)
BuildRequires:  pkgconfig(libcanberra-gtk3)
BuildRequires:  pkgconfig(libcroco-0.6) >= 0.6.8
BuildRequires:  pkgconfig(libecal-2.0) >= 3.33.1
BuildRequires:  pkgconfig(libedataserver-1.2) >= 3.17.2
BuildRequires:  pkgconfig(libgnome-menu-3.0) >= 3.5.3
BuildRequires:  pkgconfig(libmutter-5) >= 3.34.0
BuildRequires:  pkgconfig(libnm) >= 1.10.4
BuildRequires:  pkgconfig(libpulse) >= 2.0
BuildRequires:  pkgconfig(libpulse-mainloop-glib)
BuildRequires:  pkgconfig(libsecret-1) >= 0.18
BuildRequires:  pkgconfig(libsoup-2.4)
BuildRequires:  pkgconfig(libstartup-notification-1.0) >= 0.11
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(libxml-2.0)
BuildRequires:  pkgconfig(mutter-clutter-5) >= 3.34.0
BuildRequires:  pkgconfig(mutter-cogl-5) >= 3.34.0
BuildRequires:  pkgconfig(mutter-cogl-pango-5) >= 3.34.0
BuildRequires:  pkgconfig(polkit-agent-1) >= 0.100
BuildRequires:  pkgconfig(x11)
BuildRequires:  python(abi) >= 3
Requires:       gdk-pixbuf-loader-rsvg
# "System settings" menu item
Requires:       gnome-control-center
Requires:       gnome-session
# For a GSettings schema and power system icon
Requires:       gnome-settings-daemon
# "High Contrast" in accessibility status icon
Requires:       gnome-themes-accessibility
Requires:       gsettings-desktop-schemas
# Due to now private typelib(Meta)
Requires:       mutter
Requires:       typelib(Rsvg)
Recommends:     %{name}-calendar
## Finally, dependencies for session services that are needed for system icons 
and the user menu
# bluetooth system icon
# (lowered to recommends due to bsc#1067603, some setups without bluetooth 
might want to avoid this dependency)
Recommends:     gnome-bluetooth
# The dateTime applet in the panel launches gnome-clocks upon user request
Recommends:     gnome-clocks
# gnome-shell implements the dbus interface org.freedesktop.Notifications 
directly
Provides:       dbus(org.freedesktop.Notifications)
# gnome-shell-browser-plugin dropped in 3.31.4
Obsoletes:      gnome-shell-browser-plugin <= %{version}

%description
The GNOME Shell redefines user interactions with the GNOME desktop. In
particular, it offers new paradigms for launching applications, accessing
documents, and organizing open windows in GNOME.

%package devel
Summary:        Development files for GNOME Shell
Group:          Development/Libraries/GNOME
Requires:       %{name} = %{version}

%description devel
The GNOME Shell redefines user interactions with the GNOME desktop. In
particular, it offers new paradigms for launching applications, accessing
documents, and organizing open windows in GNOME.

%package calendar
Summary:        Evolution Calendar support for GNOME Shell
Group:          System/GUI/GNOME
Requires:       %{name} = %{version}
# The clock / calendar applet in the panel requires e-d-s (bnc#795793).
Requires:       evolution-data-server
Supplements:    packageand(%{name}:evolution-data-server)

%description calendar
This package adds support for Evolution Calendar, such as appointments
into GNOME Shell calendar.

%lang_package

%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1

translation-update-upstream

%if 0%{?sle_version}
%patch1001 -p1
%patch1002 -p1
%patch1003 -p1
%patch1004 -p1
%patch1005 -p1
%patch1006 -p1
%patch1007 -p1
%patch1008 -p1
%endif

%if 0%{?sle_version}
cp %{SOURCE1} js/ui/
%endif

%build
%meson \
        --libexecdir=%{_libexecdir}/%{name} \
        -Dgtk_doc=true \
        -Dman=true \
        -Dnetworkmanager=true \
        -Dsystemd=true \
        %{nil}
%meson_build

%install
%meson_install
# This is the directory where extensions get installed
install -d %{buildroot}%{_datadir}/gnome-shell/extensions
# This is the directory where search providers get installed
install -d %{buildroot}%{_datadir}/gnome-shell/search-providers
%find_lang %{name} %{?no_lang_C}
# Work around race, as reported in bnc#844891 & bgo#709313.
install -d %{buildroot}%{_datadir}/gnome-shell/modes
%fdupes %{buildroot}%{_prefix}

%files
%license COPYING
%doc README.md NEWS
%{_bindir}/gnome-shell
%{_bindir}/gnome-extensions
%{_bindir}/gnome-shell-extension-prefs
%dir %{_libdir}/gnome-shell
%dir %{_libexecdir}/gnome-shell
%exclude %{_libexecdir}/gnome-shell/gnome-shell-calendar-server
%{_libexecdir}/gnome-shell/gnome-shell-hotplug-sniffer
%{_libexecdir}/gnome-shell/gnome-shell-perf-helper
%{_libexecdir}/gnome-shell/gnome-shell-portal-helper
%{_libdir}/gnome-shell/Gvc-1.0.typelib
%{_libdir}/gnome-shell/Shell-0.1.typelib
#%%{_libdir}/gnome-shell/ShellMenu-0.1.typelib
%{_libdir}/gnome-shell/St-1.0.typelib
%{_libdir}/gnome-shell/libgnome-shell-menu.so
%{_libdir}/gnome-shell/libgnome-shell.so
%{_libdir}/gnome-shell/libgvc.so
%{_libdir}/gnome-shell/libst-1.0.so
%dir %{_datadir}/GConf
%dir %{_datadir}/GConf/gsettings
%{_datadir}/GConf/gsettings/gnome-shell-overrides.convert
%{_datadir}/applications/org.gnome.Shell.desktop
%{_datadir}/applications/gnome-shell-extension-prefs.desktop
%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Extensions.xml
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Introspect.xml
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.PadOsd.xml
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screencast.xml
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screenshot.xml
%{_datadir}/dbus-1/interfaces/org.gnome.ShellSearchProvider.xml
%{_datadir}/dbus-1/interfaces/org.gnome.ShellSearchProvider2.xml
%{_datadir}/dbus-1/services/org.gnome.Shell.HotplugSniffer.service
%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service
%{_datadir}/glib-2.0/schemas/org.gnome.shell.gschema.xml
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml
# Own these dirs for extensions, search-providers and work around a race 
condition
%dir %{_datadir}/gnome-shell/extensions
%dir %{_datadir}/gnome-shell/search-providers
%dir %{_datadir}/gnome-shell/modes
%{_datadir}/gnome-shell/gnome-shell-dbus-interfaces.gresource
%{_datadir}/gnome-shell/gnome-shell-theme.gresource
%{_datadir}/gnome-shell/gnome-shell-osk-layouts.gresource
%{_datadir}/gnome-shell/perf-background.xml
%{_mandir}/man?/gnome-shell.?%{ext_man}
%{_mandir}/man?/gnome-extensions.?%{ext_man}
%dir %{_datadir}/xdg-desktop-portal
%dir %{_datadir}/xdg-desktop-portal/portals
%{_datadir}/xdg-desktop-portal/portals/gnome-shell.portal
%{_userunitdir}/gnome-shell-wayland.target
%{_userunitdir}/gnome-shell-x11.target
%{_userunitdir}/gnome-shell-wayland.service
%{_userunitdir}/gnome-shell-x11.service
%{_userunitdir}/gnome-shell-disable-extensions.service
%{_sysconfdir}/xdg/autostart/gnome-shell-overrides-migration.desktop
%{_libexecdir}/gnome-shell/gnome-shell-overrides-migration.sh
%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.gschema.override

%files devel
%doc HACKING.md
%doc %{_datadir}/gtk-doc/html
%{_bindir}/gnome-shell-extension-tool
%{_bindir}/gnome-shell-perf-tool
%{_datadir}/gnome-shell/*.gir

%files calendar
%{_datadir}/applications/evolution-calendar.desktop
%{_libexecdir}/gnome-shell/gnome-shell-calendar-server
%{_datadir}/dbus-1/services/org.gnome.Shell.CalendarServer.service

%files lang -f %{name}.lang

%changelog
++++++ _service ++++++
<services>
  <service name="obs_scm" mode="disabled" >
    <param name="url">https://gitlab.gnome.org/GNOME/gnome-shell.git</param>
    <param name="scm">git</param>
    <param name="revision">refs/tags/3.34.5</param>
    <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
    <param name="versionrewrite-pattern">(.*)\+0</param>
    <param name="versionrewrite-replacement">\1</param>
    <param name="changesgenerate">enable</param>
  </service>
  <service name="tar" mode="buildtime"/>
  <service name="recompress" mode="buildtime">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service name="set_version" mode="disabled" />
</services>

++++++ _servicedata ++++++
<servicedata>
<service name="tar_scm">
                <param 
name="url">https://gitlab.gnome.org/GNOME/gnome-shell.git</param>
              <param 
name="changesrevision">c38196dd850609de2f458dc7e4705efc871a5549</param></service></servicedata>++++++
 aboutMenu.js ++++++
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const DBus = imports.gi.DBus;

const PanelMenu = imports.ui.panelMenu;

const HostnameIface = '<node> \
<interface name="org.freedesktop.DBus.Properties"> \
    <method name="Get"> \
        <arg type="s" direction="in" /> \
        <arg type="s" direction="in" /> \
        <arg type="v" direction="out" /> \
    </method> \
</interface> \
</node>';
const HostnameProxy = Gio.DBusProxy.makeProxyWrapper(HostnameIface);

var AboutMenuButton = new Lang.Class({
    Name: 'AboutMenuButton',
    Extends: PanelMenu.Button,
    _init: function() {
        this._hostname = null;
        this._updateHostnameId = 0;
        this._ticket = 1;

        let hbox;
        let vbox;
        let menuAlignment = 0.25;

        if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
            menuAlignment = 1.0 - menuAlignment;
        this.parent(menuAlignment, 'About Me');

        this.about_hbox = new St.BoxLayout({ style_class: 
'panel-status-menu-box' });
        this.hostname_label = new St.Label({y_align: 
Clutter.ActorAlign.CENTER});
        this.about_hbox.add_child(this.hostname_label);

        this.actor.add_child(this.about_hbox);
        hbox = new St.BoxLayout({ name: 'aboutArea' });
        this.menu.box.add_child(hbox);

        vbox = new St.BoxLayout({vertical: true});
        hbox.add(vbox);

        ///// Section: read '/etc/os-release' to get pretty name
        //
        // Note: previously this is defaulted to 'SUSE Linux Enterprise', now
        // let's use a "safer" option.
        let sysinfo_text = 'SUSE Linux';
        try {
            let success, contents, tag;
            let _os_release = Gio.File.new_for_path('/etc/os-release');
            [success, contents, tag] = _os_release.load_contents(null);

            let osReleaseContentStr = contents.toString();
            let prettyNameReg = /^PRETTY_NAME="(.+)"/;
            let match = null;
            for (let line of osReleaseContentStr.split('\n')) {
                match = prettyNameReg.exec(line);
                if (match) {
                    sysinfo_text = match[1];
                }
            }
        }
        catch (e) {
            // NOTE soft fail, 'sysinfo_text' is the default
            warn('ERROR: fail to read /etc/os-release');
        }

        this._sysinfo = new St.Label({ text: sysinfo_text, can_focus: true });
        vbox.add(this._sysinfo);
        this.actor.hide();

        this._updateHostnameId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
                                                  this._ticket,
                                                  Lang.bind(this, function() {
                                                      if (this._ticket < 60*60)
                                                          this._ticket *= 2;
                                                      this._updateHostnameId = 
0;
                                                      this._updateHostname();
                                                      return false;
                                                  }));

        return;
    },

    _updateHostname: function(){
        let hostname_text = get_hostname();

        if ((this._hostname == null) || (this._hostname != hostname_text)) {
            this._ticket = 1;
            this._hostname = hostname_text;
            this.hostname_label.set_text(this._hostname);
            this.actor.show();
        }
        this._updateHostnameId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT,
                                                  this._ticket,
                                                  Lang.bind(this, function() {
                                                      if (this._ticket < 60*60)
                                                          this._ticket *= 2;
                                                      this._updateHostnameId = 
0;
                                                      this._updateHostname();
                                                      return false;
                                                  }));
    },

    _destroy: function() {
        this._ticket = 1;
        if (this._updateHostnameId) {
            GLib.source_remove (this._updateHostnameId);
            this._updateHostnameId = 0;
        }
    },

});

function get_hostname() {
    let hostnameProxy = HostnameProxy(Gio.DBus.system,
                                     'org.freedesktop.hostname1',
                                     '/org/freedesktop/hostname1',
                                     null, null);

    try {
        let name = hostnameProxy.GetSync('org.freedesktop.hostname1', 
'Hostname');
        return name[0].get_string()[0];

    } catch(e) {
        return 'localhost';
    }
}
++++++ endSession-dialog-update-time-label-every-sec.patch ++++++
Index: gnome-shell-3.24.2/js/ui/endSessionDialog.js
===================================================================
--- gnome-shell-3.24.2.orig/js/ui/endSessionDialog.js
+++ gnome-shell-3.24.2/js/ui/endSessionDialog.js
@@ -426,8 +426,10 @@ const EndSessionDialog = new Lang.Class(
 
         let description;
         let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
-                                                  this._secondsLeft,
-                                                  10);
+                                                          this._secondsLeft,
+                                                          // larger than any 
normal value
+                                                          1000000);
+
 
         if (this._user.is_loaded) {
             let realName = this._user.get_real_name();
++++++ gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch ++++++
Index: gnome-shell-3.34.5/js/ui/unlockDialog.js
===================================================================
--- gnome-shell-3.34.5.orig/js/ui/unlockDialog.js
+++ gnome-shell-3.34.5/js/ui/unlockDialog.js
@@ -23,6 +23,10 @@ var UnlockDialog = GObject.registerClass
             visible: false,
         });
 
+        let path = '/usr/share/gnome-shell/theme/SLE-background.png';
+        if (GLib.file_test(path, GLib.FileTest.EXISTS))
+            this.style = 'background: url(' + path + ')';
+
         this.add_constraint(new Layout.MonitorConstraint({ primary: true }));
         parentActor.add_child(this);
 
++++++ gnome-shell-864872-unlock-by-mouse-motion.patch ++++++
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 7b154f2..ff7315d 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -431,6 +431,8 @@ var ScreenShield = class {
         this.actor = Main.layoutManager.screenShieldGroup;
 
         this._lockScreenState = MessageTray.State.HIDDEN;
+        this._last_x = -1;
+        this._last_y = -1;
         this._lockScreenGroup = new St.Widget({
             x_expand: true,
             y_expand: true,
@@ -441,6 +443,8 @@ var ScreenShield = class {
         });
         this._lockScreenGroup.connect('key-press-event',
                                       this._onLockScreenKeyPress.bind(this));
+        this._lockScreenGroup.connect('motion-event',
+                                      this._onLockScreenMotion.bind(this));
         this._lockScreenGroup.connect('scroll-event',
                                       this._onLockScreenScroll.bind(this));
         Main.ctrlAltTabManager.addGroup(this._lockScreenGroup, _("Lock"), 
'changes-prevent-symbolic');
@@ -720,6 +724,25 @@ var ScreenShield = class {
         return Clutter.EVENT_STOP;
     }
 
+    _onLockScreenMotion(actor, event) {
+        if (this._lockScreenState != MessageTray.State.SHOWN)
+            return false;
+        let [X, Y] = event.get_coords();
+
+        if (this._last_x == -1)
+            this._last_x = X;
+        if (this._last_y == -1)
+            this._last_y = Y;
+
+        let min_distance = 10
+        let distance = Math.max(Math.abs(this._last_x - X),
+                                Math.abs(this._last_y - Y));
+
+        if (distance >= min_distance)
+            this._liftShield(true, 0);
+        return true;
+    }
+
     _onLockScreenScroll(actor, event) {
         if (this._lockScreenState != MessageTray.State.SHOWN)
             return Clutter.EVENT_PROPAGATE;
@@ -1036,6 +1059,8 @@ var ScreenShield = class {
             return;
 
         this._ensureLockScreen();
+        this._last_x = -1;
+        this._last_y = -1;
         this._lockDialogGroup.scale_x = 1;
         this._lockDialogGroup.scale_y = 1;
 
++++++ gnome-shell-CVE-2020-17489.patch ++++++
>From 13137aad9db52223e8b62cecbd3456f4a7f66f04 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstr...@redhat.com>
Date: Mon, 27 Jul 2020 10:58:49 -0400
Subject: [PATCH] loginDialog: Reset auth prompt on vt switch before fade in

At the moment, if a user switches to the login screen vt,
the login screen fades in whatever was on screen prior, and
then does a reset.

It makes more sense to reset first, so we fade in what the
user is going to interact with instead of what they interacted
with before.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2997
---
 js/gdm/loginDialog.js | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

Index: gnome-shell-3.34.5/js/gdm/loginDialog.js
===================================================================
--- gnome-shell-3.34.5.orig/js/gdm/loginDialog.js
+++ gnome-shell-3.34.5/js/gdm/loginDialog.js
@@ -921,16 +921,15 @@ var LoginDialog = GObject.registerClass(
         if (this.opacity == 255 && this._authPrompt.verificationStatus == 
AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
             return;
 
+        if (this._authPrompt.verificationStatus !== 
AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
+            this._authPrompt.reset();
+
         this._bindOpacity();
         this.ease({
             opacity: 255,
             duration: _FADE_ANIMATION_TIME,
             mode: Clutter.AnimationMode.EASE_OUT_QUAD,
-            onComplete: () => {
-                if (this._authPrompt.verificationStatus != 
AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
-                    this._authPrompt.reset();
-                this._unbindOpacity();
-            }
+            onComplete: () => this._unbindOpacity(),
         });
     }
 
++++++ gnome-shell-Get-resource-scale-by-get_resource_scale.patch ++++++
>From be12c71534199a1a1fd0a334d046ddb85c6f165e Mon Sep 17 00:00:00 2001
From: Xiaoguang Wang <xw...@suse.com>
Date: Tue, 21 Apr 2020 16:17:09 +0800
Subject: [PATCH] loginDialog: Get resource scale by get_resource_scale

To shut up 'Getting invalid resource scale property' warnings in the log.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1206
---
 js/gdm/loginDialog.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Index: gnome-shell-3.34.5/js/gdm/loginDialog.js
===================================================================
--- gnome-shell-3.34.5.orig/js/gdm/loginDialog.js
+++ gnome-shell-3.34.5/js/gdm/loginDialog.js
@@ -775,12 +775,13 @@ var LoginDialog = GObject.registerClass(
             return;
 
         this._logoBin.destroy_all_children();
-        if (this._logoFile && this._logoBin.resource_scale > 0) {
+        const [valid, resourceScale] = this._logoBin.get_resource_scale();
+        if (this._logoFile && valid) {
             let scaleFactor = 
St.ThemeContext.get_for_stage(global.stage).scale_factor;
             
this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
                                                                        -1, 
_LOGO_ICON_HEIGHT,
                                                                        
scaleFactor,
-                                                                       
this._logoBin.resource_scale));
+                                                                       
resourceScale));
         }
     }
 
++++++ gnome-shell-disable-ibus-when-not-installed.patch ++++++
>From 29dfda2d2f77d14e27cc27cbba1e41ec0363cf83 Mon Sep 17 00:00:00 2001
From: Xiaoguang Wang <xw...@suse.com>
Date: Thu, 9 Apr 2020 11:16:56 +0800
Subject: [PATCH] Disable ibus when out of CJK

---
 js/misc/ibusManager.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
index e43f88c..9d16f09 100644
--- a/js/misc/ibusManager.js
+++ b/js/misc/ibusManager.js
@@ -31,6 +31,10 @@ function getIBusManager() {
 
 var IBusManager = class {
     constructor() {
+        let daemon = Gio.File.new_for_path('/usr/bin/ibus-daemon');
+        if (!daemon.query_exists(null))
+            return;
+
         IBus.init();
 
         // This is the longest we'll keep the keyboard frozen until an input
@@ -59,6 +63,10 @@ var IBusManager = class {
     }
 
     _spawn(extraArgs = []) {
+        let daemon = Gio.File.new_for_path('/usr/bin/ibus-daemon');
+        if (!daemon.query_exists(null))
+            return;
+
         try {
             let cmdLine = ['ibus-daemon', '--panel', 'disable', ...extraArgs];
             Gio.Subprocess.new(cmdLine, Gio.SubprocessFlags.NONE);
-- 
2.26.0

++++++ gnome-shell-disable-screensaver-user-switch-when-remote.patch ++++++
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index f0b266e..f01b804 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -50,7 +50,7 @@ var UnlockDialog = GObject.registerClass({
         this.allowCancel = false;
 
         let screenSaverSettings = new Gio.Settings({ schema_id: 
'org.gnome.desktop.screensaver' });
-        if (screenSaverSettings.get_boolean('user-switch-enabled')) {
+        if (screenSaverSettings.get_boolean('user-switch-enabled') && 
this._userManager.can_switch()) {
             let otherUserLabel = new St.Label({ text: _("Log in as another 
user"),
                                                 style_class: 
'login-dialog-not-listed-label' });
             this._otherUserButton = new St.Button({ style_class: 
'login-dialog-not-listed-button',
++++++ gnome-shell-domain.patch ++++++
diff --git a/js/gdm/domain.js b/js/gdm/domain.js
new file mode 100644
index 0000000..2452696
--- /dev/null
+++ b/js/gdm/domain.js
@@ -0,0 +1,243 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/*
+ * Copyright 2011 Red Hat, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+const Atk = imports.gi.Atk;
+const Clutter = imports.gi.Clutter;
+const Gdm = imports.gi.Gdm;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Gtk = imports.gi.Gtk;
+const Lang = imports.lang;
+const Mainloop = imports.mainloop;
+const Signals = imports.signals;
+const St = imports.gi.St;
+
+const Main = imports.ui.main;
+const PopupMenu = imports.ui.popupMenu;
+
+const DomainLoadStatus = {
+    INIT : 0,
+    SEPARATOR : 1,
+    OWN_DOMAIN : 2,
+    TRUSTED_DOMAINS : 3,
+    DONE : 4,
+    ERR : 5
+};
+
+var DomainMenuButton = new Lang.Class({
+    Name: 'DomainMenuButton',
+
+    _init: function () {
+        this._separator = null;
+        this.domain_enabled = false;
+        this._domains = new Array();
+        this._load_config();
+    },
+
+
+    _domainsPush: function(domain) {
+        let valid_content = domain.replace(/\s+/g, '');
+
+        if (valid_content.length > 0) {
+            if (this._domains.indexOf(valid_content) == -1)
+                this._domains.push (valid_content);
+        }
+    },
+
+    _generate: function() {
+        let gearIcon = new St.Icon({ icon_name: 'samba-window',
+                                  icon_size: 24
+                                 });
+        this._button = new St.Button({ style_class: 
'login-dialog-session-list-button', //FIXME
+                                       reactive: true,
+                                       track_hover: true,
+                                       can_focus: true,
+                                       accessible_name: _("Choose Domain"),
+                                       accessible_role: Atk.Role.MENU,
+                                       child: gearIcon });
+
+        gearIcon.show();
+        this.actor = new St.Bin({ child: this._button });
+
+        this._menu = new PopupMenu.PopupMenu(this._button, 0, St.Side.TOP);
+        Main.uiGroup.add_actor(this._menu.actor);
+        this._menu.actor.hide();
+
+        this._menu.connect('open-state-changed',
+                           Lang.bind(this, function(menu, isOpen) {
+                                if (isOpen)
+                                    
this._button.add_style_pseudo_class('active');
+                                else
+                                    
this._button.remove_style_pseudo_class('active');
+                           }));
+
+        this._manager = new PopupMenu.PopupMenuManager({ actor: this._button 
});
+        this._manager.addMenu(this._menu);
+
+        this._button.connect('clicked', Lang.bind(this, function() {
+            this._menu.toggle();
+        }));
+
+        this._populate();
+    },
+
+    _load_config: function() {
+        let keyfile = new GLib.KeyFile();
+        let path = "/etc/gdm/custom.conf";
+        let domain_group = "domains";
+
+    //? Why must use 'try'
+        try {
+            keyfile.load_from_file(path, GLib.KeyFileFlags.NONE);
+        } catch(e) {
+        }
+
+        if (!keyfile.has_group(domain_group)) {
+            return;
+    }
+
+        this.domain_enabled = keyfile.get_boolean(domain_group, 'Enable');
+        if (this.domain_enabled) {
+            let content = keyfile.get_string(domain_group, 'Domains');
+        let domains = content.split(';');
+        for (let i = 0; i < domains.length; i++) {
+        this._domainsPush(domains[i]);
+        }
+        this._generate();
+    }
+    },
+
+    _readStdout: function(data) {
+        this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null, 
Lang.bind(this, function(stream, result) {
+            let [line, len] = this._dataStdout.read_line_finish_utf8(result);
+
+            if (line == null) {
+                // end of file
+                this._stdout.close(null);
+        this.loadDomains(data, null);
+                return;
+            }
+
+        data.push(line);
+            this._readStdout(data);
+        }));
+    },
+
+    loadCommand: function(argv) {
+        try {
+            let data = new Array();
+            let [success, pid, stdin, stdout, stderr] = 
GLib.spawn_async_with_pipes(null,
+                    argv,
+                    null,
+                    GLib.SpawnFlags.SEARCH_PATH | 
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
+                    null);
+            this._stdout = new Gio.UnixInputStream({ fd: stdout, close_fd: 
true });
+            GLib.close(stdin);
+            GLib.close(stderr);
+            this._dataStdout = new Gio.DataInputStream({ base_stream: 
this._stdout });
+            this._readStdout(data);
+        } catch (e) {
+            this.loadDomains(null, e);
+    }
+    },
+
+    loadDomains: function(data, err) {
+    /*FIXME: reload every 5 minutes? */
+    /*TODO: load the setting file */
+        switch (this._status) {
+            case DomainLoadStatus.INIT:
+                this._status = DomainLoadStatus.SEPARATOR;
+                this.loadCommand(["wbinfo", "--separator"]);
+                break;
+            case DomainLoadStatus.SEPARATOR:
+                if (data) {
+                    this._separator = data[0];
+                    this._status = DomainLoadStatus.OWN_DOMAIN;
+                    this.loadCommand(["wbinfo", "--own-domain"]);
+                } else {
+                    this._status = DomainLoadStatus.ERR;
+                    this._menu.removeAll();
+                    item = new PopupMenu.PopupMenuItem(_("Cannot receive 
'separator'"));
+                    item.setSensitive(false);
+                    this._menu.addMenuItem(item);
+                }
+                break;
+            case DomainLoadStatus.OWN_DOMAIN:
+                if (data) {
+                    for (let i = 0; i < data.length; i++) {
+                        this._domainsPush(data[i]);
+                    }
+                }
+                this._status = DomainLoadStatus.TRUSTED_DOMAINS;
+                this.loadCommand(["wbinfo", "--trusted-domains"]);
+                break;
+            case DomainLoadStatus.TRUSTED_DOMAINS:
+                if (data) {
+                    for (let i = 0; i < data.length; i++) {
+                        this._domainsPush(data[i]);
+                    }
+                }
+                this._status = DomainLoadStatus.DONE;
+                this._menu.removeAll();
+                for (let i = 0; i < this._domains.length; i++) {
+                    item = new PopupMenu.PopupMenuItem(this._domains[i]);
+                        this._menu.addMenuItem(item);
+                        item.connect('activate', Lang.bind(this, 
function(item) {
+                        //?? Why it does not work
+                        //this.setActiveDomain(this._domains[i]);
+                        this.setActiveDomain(item.label.text);
+                    }));
+                }
+                break;
+    }
+    },
+
+    _populate: function() {
+        //TODO Recent domains?
+        item = new PopupMenu.PopupMenuItem(_("loading the wbinfos..."));
+        item.setSensitive(false);
+        this._menu.addMenuItem(item);
+        this._status = DomainLoadStatus.INIT;
+        this.loadDomains(null, null);
+    },
+
+    setActiveDomain: function(domain) {
+        this._activeDomain = domain;
+        //this.emit('domain-activated', this._activeDomain);
+        this.emit('domain-activated');
+    },
+
+    getActiveDomain: function(domain) {
+        return this._activeDomain;
+    },
+
+    getQuestionMessage: function() {
+        return _("User for ") + this._activeDomain;
+    },
+
+    getHintMessage: function() {
+        return _("Contact dliang to get help");
+    },
+
+    getDomainUser: function(user) {
+        return this._activeDomain + this._separator + user;
+    }
+});
+Signals.addSignalMethods(DomainMenuButton.prototype);
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index c3f90dc..9546921 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -22,6 +22,7 @@ const { AccountsService, Atk, Clutter, Gdm, Gio,
 const Signals = imports.signals;
 
 const AuthPrompt = imports.gdm.authPrompt;
+const Domain = imports.gdm.domain;
 const Batch = imports.gdm.batch;
 const BoxPointer = imports.ui.boxpointer;
 const CtrlAltTab = imports.ui.ctrlAltTab;
@@ -437,6 +438,14 @@ var LoginDialog = GObject.registerClass({
         this._authPrompt.hide();
         this.add_child(this._authPrompt.actor);
 
+        this._userLayout = new St.BoxLayout({ vertical: false,
+                        x_expand: true
+                       });
+        this._userSelectionBox.add(this._userLayout,
+                                   { expand: true,
+                                     x_align: St.Align.START,
+                                     x_fill: true });
+
         // translators: this message is shown below the user list on the
         // login screen. It can be activated to reveal an entry for
         // manually entering the username.
@@ -454,10 +463,24 @@ var LoginDialog = GObject.registerClass({
 
         this._notListedButton.hide();
 
-        this._userSelectionBox.add(this._notListedButton,
+        this._userLayout.add(this._notListedButton,
+                                   { expand: false});
+
+        // we add domain menu button
+        this._domainMenuButton = new Domain.DomainMenuButton();
+        if (this._domainMenuButton.domain_enabled) {
+            this._domainMenuButton.actor.hide();
+
+            this._domainMenuButton.connect('domain-activated',
+                                  Lang.bind(this, function(list) {
+                        
this._hideUserListAskForDomainUsernameAndBeginVerification();
+                                            }));
+            this._userLayout.add(this._domainMenuButton.actor,
                                    { expand: false,
-                                     x_align: St.Align.START,
+                                     x_align: St.Align.END,
                                      x_fill: true });
+        }
+        // domain end
 
         this._bannerView = new St.ScrollView({ style_class: 
'login-dialog-banner-view',
                                                opacity: 0,
@@ -942,6 +965,37 @@ var LoginDialog = GObject.registerClass({
             });
     }
 
+    _askForDomainUsernameAndBeginVerification(domain) {
+        this._authPrompt.setPasswordChar('');
+        
this._authPrompt.setQuestion(this._domainMenuButton.getQuestionMessage());
+
+        //FIXME: I sugguest to add this info for customer to contact their 
account manager
+        this._authPrompt.setMessage(this._domainMenuButton.getHintMessage(), 
GdmUtil.MessageType.HINT);
+
+        let realmManager = new Realmd.Manager();
+        let realmSignalId = realmManager.connect('login-format-changed',
+                                                 Lang.bind(this, 
this._showRealmLoginHint));
+        this._showRealmLoginHint(realmManager.loginFormat);
+
+        let nextSignalId = this._authPrompt.connect('next',
+                                                    Lang.bind(this, function() 
{
+                                                        
this._authPrompt.disconnect(nextSignalId);
+                                                        
this._authPrompt.updateSensitivity(false);
+                                                        let answer = 
this._authPrompt.getAnswer();
+                            let domain_answer = 
this._domainMenuButton.getDomainUser(answer);
+                                                        this._user = 
this._userManager.get_user(domain_answer);
+                                                        
this._authPrompt.clear();
+                                                        
this._authPrompt.startSpinning();
+                                                        
this._authPrompt.begin({ userName: domain_answer});
+                                                        
this._updateCancelButton();
+
+                                                        
realmManager.disconnect(realmSignalId)
+                                                        realmManager.release();
+                                                    }));
+        this._updateCancelButton();
+        this._showPrompt();
+    }
+
     _startSession(serviceName) {
         this._bindOpacity();
         this.ease({
@@ -1099,6 +1153,11 @@ var LoginDialog = GObject.registerClass({
         this._askForUsernameAndBeginVerification();
     }
 
+    _hideUserListAskForDomainUsernameAndBeginVerification() {
+        this._hideUserList();
+        this._askForDomainUsernameAndBeginVerification();
+    }
+
     _hideUserListAndBeginVerification() {
         this._hideUserList();
         this._authPrompt.begin();
@@ -1111,6 +1170,9 @@ var LoginDialog = GObject.registerClass({
         this._sessionMenuButton.close();
         this._setUserListExpanded(true);
         this._notListedButton.show();
+        if (this._domainMenuButton.domain_enabled)
+            this._domainMenuButton.actor.show();
+        this._userLayout.show();
         this._userList.actor.grab_key_focus();
     }
 
diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml
index b5348dd..7d48828 100644
--- a/js/js-resources.gresource.xml
+++ b/js/js-resources.gresource.xml
@@ -2,6 +2,7 @@
 <gresources>
   <gresource prefix="/org/gnome/shell">
     <file>gdm/authPrompt.js</file>
+    <file>gdm/domain.js</file>
     <file>gdm/batch.js</file>
     <file>gdm/fingerprint.js</file>
     <file>gdm/loginDialog.js</file>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 33be57b..29bbd3c 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,6 +7,7 @@ data/org.gnome.shell.gschema.xml.in
 data/org.gnome.Shell.PortalHelper.desktop.in.in
 js/extensionPrefs/main.js
 js/gdm/authPrompt.js
+js/gdm/domain.js
 js/gdm/loginDialog.js
 js/gdm/util.js
 js/misc/systemActions.js
-- 
2.25.1

++++++ gnome-shell-executable-path-not-absolute.patch ++++++
diff --git a/data/gnome-shell-disable-extensions.service 
b/data/gnome-shell-disable-extensions.service.in
similarity index 85%
rename from data/gnome-shell-disable-extensions.service
rename to data/gnome-shell-disable-extensions.service.in
index de91167..49236a6 100644
--- a/data/gnome-shell-disable-extensions.service
+++ b/data/gnome-shell-disable-extensions.service.in
@@ -11,5 +11,5 @@ ConditionPathExists=%t/gnome-shell-disable-extensions
 [Service]
 Type=simple
 # Disable extensions
-ExecStart=gsettings set org.gnome.shell disable-user-extensions true
+ExecStart=@bindir@/gsettings set org.gnome.shell disable-user-extensions true
 Restart=no
diff --git a/data/meson.build b/data/meson.build
index 88a6176..9955f1c 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -114,9 +114,14 @@ if have_systemd
     install_dir: systemduserunitdir
   )
 
+  configure_file(
+    input: 'gnome-shell-disable-extensions.service.in',
+    output: 'gnome-shell-disable-extensions.service',
+    configuration: unitconf,
+    install_dir: systemduserunitdir
+  )
   units = files('gnome-shell-x11.target',
-                'gnome-shell-wayland.target',
-                'gnome-shell-disable-extensions.service')
+                'gnome-shell-wayland.target')
 
   install_data(units, install_dir: systemduserunitdir)
 endif
++++++ gnome-shell-fate324570-Make-GDM-background-image-configurable.patch 
++++++
>From 7ec0b20a9c8c62f34203e1e93b64764f3fbd20d7 Mon Sep 17 00:00:00 2001
From: Chingkai <chuching...@gmail.com>
Date: Fri, 19 Oct 2018 13:25:35 +0800
Subject: [PATCH] screenShield: Make login and lock screen background
 configurable

Add a background for lockDialogGroup to make login/lock background
configurable. The default behavior will be retained to what it is
currently, you can change the wallpaper via schema keys.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/680
---
 js/ui/screenShield.js | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 3f45b8a..6c09a5d 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -27,6 +27,8 @@ const LOCK_DELAY_KEY = 'lock-delay';
 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
 const DISABLE_LOCK_KEY = 'disable-lock-screen';
 
+const LOCKDIALOG_BACKGROUND_SCHEMA = 'org.gnome.desktop.background.lockdialog';
+
 const LOCKED_STATE_STR = 'screenShield.locked';
 // fraction of screen height the arrow must reach before completing
 // the slide up automatically
@@ -493,6 +495,16 @@ var ScreenShield = class {
                                                 pivot_point: new 
Clutter.Point({ x: 0.5, y: 0.5 }),
                                                 name: 'lockDialogGroup' });
 
+        // Add background for this._lockDialogGroup
+        this._bgLockDialogGroup = new Clutter.Actor();
+
+        this._lockDialogGroup.add_actor(this._bgLockDialogGroup);
+        this._bgLockDialogGroup.lower_bottom();
+        this._bgManagersLockDialogGroup = [];
+
+        this._updateBgLockDialogGroup();
+        Main.layoutManager.connect('monitors-changed', 
this._updateBgLockDialogGroup.bind(this));
+
         this.actor.add_actor(this._lockDialogGroup);
         this.actor.add_actor(this._lockScreenGroup);
 
@@ -586,6 +598,35 @@ var ScreenShield = class {
         this._syncInhibitor();
     }
 
+    _createBgLockDialogGroup(monitorIndex) {
+        let monitor = Main.layoutManager.monitors[monitorIndex];
+        let widget = new St.Widget({ style_class: 'screen-shield-background',
+                                     x: monitor.x,
+                                     y: monitor.y,
+                                     width: monitor.width,
+                                     height: monitor.height });
+
+        let bgManager = new Background.BackgroundManager({ container: widget,
+                                                           monitorIndex: 
monitorIndex,
+                                                           controlPosition: 
false,
+                                                           settingsSchema: 
LOCKDIALOG_BACKGROUND_SCHEMA });
+
+        this._bgManagersLockDialogGroup.push(bgManager);
+
+        this._bgLockDialogGroup.add_child(widget);
+    }
+
+    _updateBgLockDialogGroup() {
+        for (let i = 0; i < this._bgManagersLockDialogGroup.length; i++)
+            this._bgManagersLockDialogGroup[i].destroy();
+
+        this._bgManagersLockDialogGroup = [];
+        this._bgLockDialogGroup.destroy_all_children();
+
+        for (let i = 0; i < Main.layoutManager.monitors.length; i++)
+            this._createBgLockDialogGroup(i);
+    }
+
     _createBackground(monitorIndex) {
         let monitor = Main.layoutManager.monitors[monitorIndex];
         let widget = new St.Widget({ style_class: 'screen-shield-background',
-- 
2.16.4

++++++ gnome-shell-gdm-login-applet.patch ++++++
diff -urpN gnome-shell-3.33.91.orig/js/js-resources.gresource.xml 
gnome-shell-3.33.91/js/js-resources.gresource.xml
--- gnome-shell-3.33.91.orig/js/js-resources.gresource.xml      2019-08-21 
15:00:39.000000000 -0500
+++ gnome-shell-3.33.91/js/js-resources.gresource.xml   2019-09-04 
10:15:21.233934725 -0500
@@ -32,6 +32,7 @@
     <file>perf/core.js</file>
     <file>perf/hwtest.js</file>
 
+    <file>ui/aboutMenu.js</file>
     <file>ui/accessDialog.js</file>
     <file>ui/altTab.js</file>
     <file>ui/animation.js</file>
diff -urpN gnome-shell-3.33.91.orig/js/ui/aboutMenu.js 
gnome-shell-3.33.91/js/ui/aboutMenu.js
--- gnome-shell-3.33.91.orig/js/ui/aboutMenu.js 1969-12-31 18:00:00.000000000 
-0600
+++ gnome-shell-3.33.91/js/ui/aboutMenu.js      2019-09-04 10:15:40.562037171 
-0500
@@ -0,0 +1,150 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+const GLib = imports.gi.GLib;
+const Gio = imports.gi.Gio;
+const Lang = imports.lang;
+const Clutter = imports.gi.Clutter;
+const St = imports.gi.St;
+const DBus = imports.gi.DBus;
+
+const PanelMenu = imports.ui.panelMenu;
+
+const AboutMenuButton = new Lang.Class({
+    Name: 'AboutMenuButton',
+    Extends: PanelMenu.Button,
+    _init() {
+        this._hostname = null;
+        this._updateHostnameId = 0;
+        this._ticket = 1;
+
+        let hbox;
+        let vbox;
+        let menuAlignment = 0.25;
+
+        if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
+            menuAlignment = 1.0 - menuAlignment;
+        this.parent(menuAlignment, 'About Me');
+
+        this.about_hbox = new St.BoxLayout({ style_class: 
'panel-status-menu-box' });
+        this.hostname_label = new St.Label({y_align: 
Clutter.ActorAlign.CENTER});
+        this.about_hbox.add_child(this.hostname_label);
+
+        this.actor.add_child(this.about_hbox);
+        hbox = new St.BoxLayout({ name: 'aboutArea' });
+        this.menu.box.add_child(hbox);
+
+        vbox = new St.BoxLayout({vertical: true});
+        hbox.add(vbox);
+
+        ///// Section: read '/etc/os-release' to get pretty name
+        //
+        // Note: previously this is defaulted to 'SUSE Linux Enterprise', now
+        // let's use a "safer" option.
+        let sysinfo_text = 'SUSE Linux';
+        try {
+            let success, contents, tag;
+            let _os_release = Gio.File.new_for_path('/etc/os-release');
+            [success, contents, tag] = _os_release.load_contents(null);
+
+            let osReleaseContentStr = contents.toString();
+            let prettyNameReg = /^PRETTY_NAME="(.+)"/;
+            let match = null;
+            for (let line of osReleaseContentStr.split('\n')) {
+                match = prettyNameReg.exec(line);
+                if (match) {
+                    sysinfo_text = match[1];
+                }
+            }
+        }
+        catch (e) {
+            // NOTE soft fail, 'sysinfo_text' is the default
+            warn('ERROR: fail to read /etc/os-release');
+        }
+
+        this._sysinfo = new St.Label({ text: sysinfo_text, can_focus: true });
+        vbox.add(this._sysinfo);
+        this.actor.hide();
+
+        this._updateHostnameId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
+                                                  this._ticket,
+                                                  Lang.bind(this, function() {
+                                                      if (this._ticket < 60*60)
+                                                          this._ticket *= 2;
+                                                      this._updateHostnameId = 
0;
+                                                      this._updateHostname();
+                                                      return false;
+                                                  }));
+
+        return;
+    },
+
+    _updateHostname(){
+        let hostname_text = get_hostname();
+
+        if ((this._hostname == null) || (this._hostname != hostname_text)) {
+            this._ticket = 1;
+            this._hostname = hostname_text;
+            this.hostname_label.set_text(this._hostname);
+            this.actor.show();
+        }
+        this._updateHostnameId = 
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT,
+                                                  this._ticket,
+                                                  Lang.bind(this, function() {
+                                                      if (this._ticket < 60*60)
+                                                          this._ticket *= 2;
+                                                      this._updateHostnameId = 
0;
+                                                      this._updateHostname();
+                                                      return false;
+                                                  }));
+    },
+
+    _destroy() {
+        this._ticket = 1;
+        if (this._updateHostnameId) {
+            GLib.source_remove (this._updateHostnameId);
+            this._updateHostnameId = 0;
+        }
+    },
+
+});
+
+function get_hostname() {
+    let hostname;
+    let interface_name = [GLib.Variant.new_string('org.freedesktop.hostname1'),
+            GLib.Variant.new_string('Hostname')];
+
+    let call = {
+        bus_name: 'org.freedesktop.hostname1',
+        object_path: '/org/freedesktop/hostname1',
+        interface_name: 'org.freedesktop.DBus.Properties',
+        method_name: 'Get',
+        parameters: GLib.Variant.new_tuple(interface_name, 2),
+        reply_type: null,
+        flags: Gio.DBusCallFlags.NONE,
+        timeout_msec: -1,
+        cancellable: null,
+    };
+
+    try {
+        let dbusConnection = Gio.bus_get_sync(DBus.BusType.SYSTEM, null);
+
+        let message = dbusConnection.call_sync(
+            call.bus_name,
+            call.object_path,
+            call.interface_name,
+            call.method_name,
+            call.parameters,
+            call.reply_type,
+            call.flags,
+            call.timeout_msec,
+            call.cancellable
+        );
+
+        hostname = message.get_child_value(0).get_variant().get_string()[0];
+
+    } catch(e) {
+        hostname = 'localhost';
+    }
+
+    return hostname;
+}
diff -urpN gnome-shell-3.33.91.orig/js/ui/panel.js 
gnome-shell-3.33.91/js/ui/panel.js
--- gnome-shell-3.33.91.orig/js/ui/panel.js     2019-08-21 15:00:39.000000000 
-0500
+++ gnome-shell-3.33.91/js/ui/panel.js  2019-09-04 10:15:40.562037171 -0500
@@ -769,6 +769,7 @@ class AggregateMenu extends PanelMenu.Bu
 });
 
 const PANEL_ITEM_IMPLEMENTATIONS = {
+    'aboutMenu': imports.ui.aboutMenu.AboutMenuButton,
     'activities': ActivitiesButton,
     'aggregateMenu': AggregateMenu,
     'appMenu': AppMenuButton,
diff -urpN gnome-shell-3.33.91.orig/js/ui/sessionMode.js 
gnome-shell-3.33.91/js/ui/sessionMode.js
--- gnome-shell-3.33.91.orig/js/ui/sessionMode.js       2019-08-21 
15:00:39.000000000 -0500
+++ gnome-shell-3.33.91/js/ui/sessionMode.js    2019-09-04 10:18:12.262841288 
-0500
@@ -33,7 +33,7 @@ const _modes = {
         unlockDialog: null,
         components: [],
         panel: {
-            left: [],
+            left: ['aboutMenu'],
             center: [],
             right: []
         },
++++++ gnome-shell-jscSLE16518-update-subprojects-libgvc.patch ++++++
++++ 604 lines (skipped)

++++++ gnome-shell-jscSLE9267-Remove-sessionList-of-endSessionDialog.patch 
++++++
diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js
index f51eb7b..5abad41 100644
--- a/js/ui/endSessionDialog.js
+++ b/js/ui/endSessionDialog.js
@@ -327,11 +327,11 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
         this._inhibitorSection.add_actor(this._applicationList);
 
         this._sessionHeader = new St.Label({ style_class: 
'end-session-dialog-list-header',
-                                             text: _("Other users are logged 
in.") });
+                                             text: _("Other users are logged 
in. You can list these users by 'who' command.") });
         this._sessionList = new St.BoxLayout({ style_class: 
'end-session-dialog-session-list',
                                                vertical: true });
         this._inhibitorSection.add_actor(this._sessionHeader);
-        this._inhibitorSection.add_actor(this._sessionList);
+        //this._inhibitorSection.add_actor(this._sessionList); Hide 
_sessionList for jsc#SLE-9267
 
         this._dbusImpl = 
Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this);
         this._dbusImpl.export(Gio.DBus.session, 
'/org/gnome/SessionManager/EndSessionDialog');
++++++ gnome-shell-lock-bg-on-primary.patch ++++++
diff -urp gnome-shell-3.33.91.orig/js/ui/screenShield.js 
gnome-shell-3.33.91/js/ui/screenShield.js
--- gnome-shell-3.33.91.orig/js/ui/screenShield.js      2019-09-04 
14:04:13.523059437 -0500
+++ gnome-shell-3.33.91/js/ui/screenShield.js   2019-09-04 14:20:01.448084179 
-0500
@@ -492,7 +492,7 @@ var ScreenShield = class {
                                                 y_expand: true,
                                                 reactive: true,
                                                 pivot_point: new 
Clutter.Point({ x: 0.5, y: 0.5 }),
-                                                name: 'lockDialogGroup' });
+                                                name: 'lockDialogGroupReal' });
 
         // Add background for this._lockDialogGroup
         this._bgLockDialogGroup = new Clutter.Actor();
@@ -505,6 +505,28 @@ var ScreenShield = class {
         Main.layoutManager.connect('monitors-changed', 
this._updateBgLockDialogGroup.bind(this));
 
         this.actor.add_actor(this._lockDialogGroup);
+
+        let primaryBackground = new St.Widget({ x_expand: true,
+                                                y_expand: true,
+                                                reactive: true,
+                                                pivot_point: new 
Clutter.Point({ x: 0.5, y: 0.5 }),
+                                                name: 'lockDialogGroup' });
+        primaryBackground.add_constraint(new Layout.MonitorConstraint({ 
primary: true }));
++        this.actor.insert_child_below(primaryBackground, null);
+
+        for (let i = 0; i < Main.layoutManager.monitors.length; i++) {
+            if (Main.layoutManager.monitors [i].index == 
Main.layoutManager.primaryMonitor.index)
+                continue;
+
+            let group = new St.Widget({ x_expand: true,
+                                        y_expand: true,
+                                        reactive: true,
+                                        pivot_point: new Clutter.Point({ x: 
0.5, y: 0.5 }),
+                                        name: 'lockDialogGroup' });
+            group.add_constraint(new Layout.MonitorConstraint({ index: i }));
+            this.actor.insert_child_below(group, null);
+        }
+
         this.actor.add_actor(this._lockScreenGroup);
 
         this._presence = new GnomeSession.Presence((proxy, error) => {
++++++ gnome-shell-network-agent-not-pop-up.patch ++++++
diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
index 7af6214..b93f2c9 100644
--- a/js/ui/components/networkAgent.js
+++ b/js/ui/components/networkAgent.js
@@ -628,6 +628,20 @@ var NetworkAgent = class {
         this._native.connect('cancel-request', this._cancelRequest.bind(this));
 
         this._initialized = false;
+
+        NM.Client.new_async(null, this._clientGot.bind(this));
+    }
+
+    _clientGot(obj, result) {
+        this._client = NM.Client.new_finish(result);
+        this._client.connect('notify::nm-running', 
this._initNative.bind(this));
+        this._initNative();
+    }
+
+    _initNative() {
+        if (!this._client.nm_running || this._initialized)
+            return;
+
         this._native.init_async(GLib.PRIORITY_DEFAULT, null, (o, res) => {
             try {
                 this._native.init_finish(res);
++++++ gnome-shell-private-connection.patch ++++++
>From 342795440012a216d4abb9cfb04d2c3bd0fe8f4d Mon Sep 17 00:00:00 2001
From: Giovanni Campagna <gcampa...@src.gnome.org>
Date: Thu, 31 Mar 2011 15:56:13 +0200
Subject: [PATCH] NetworkMenu: create private connections if the user is not 
authorized

Check polkit setting at startup and add, if needed, the "permissions"
setting to the connections we create, so that polkit authentication is
never needed. The connection is thus only available to other users
if the system administrator decides so.

https://bugzilla.gnome.org/show_bug.cgi?id=646187
---
 js/ui/status/network.js | 38 ++++++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)

Index: gnome-shell-3.34.5/js/ui/status/network.js
===================================================================
--- gnome-shell-3.34.5.orig/js/ui/status/network.js
+++ gnome-shell-3.34.5/js/ui/status/network.js
@@ -1,6 +1,6 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported NMApplet */
-const { Clutter, Gio, GLib, GObject, NM, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, NM, St, Polkit } = imports.gi;
 const Signals = imports.signals;
 
 const Animation = imports.ui.animation;
@@ -326,6 +326,11 @@ var NMConnectionDevice = class NMConnect
 
     _autoConnect() {
         let connection = new NM.SimpleConnection();
+        if (this._privateConnections) {
+            let connectionSetting = new NM.SettingConnection();
+            connectionSetting.add_permission('user', GLib.get_user_name(), 
null);
+            connection.add_setting(connectionSetting);
+        }   
         this._client.add_and_activate_connection_async(connection, 
this._device, null, null, null);
     }
 
@@ -462,10 +467,11 @@ var NMConnectionDevice = class NMConnect
 };
 
 var NMDeviceWired = class extends NMConnectionDevice {
-    constructor(client, device) {
+    constructor(client, device, privateConnections) {
         super(client, device);
 
         this.item.menu.addSettingsAction(_("Wired Settings"), 
'gnome-network-panel.desktop');
+        this._privateConnections = privateConnections;
     }
 
     get category() {
@@ -682,11 +688,12 @@ var NMWirelessDialogItem = GObject.regis
 
 var NMWirelessDialog = GObject.registerClass(
 class NMWirelessDialog extends ModalDialog.ModalDialog {
-    _init(client, device) {
+    _init(client, device, privateConnections) {
         super._init({ styleClass: 'nm-dialog' });
 
         this._client = client;
         this._device = device;
+        this._privateConnections = privateConnections;
 
         this._wirelessEnabledChangedId = 
this._client.connect('notify::wireless-enabled',
                                                               
this._syncView.bind(this));
@@ -917,6 +924,11 @@ class NMWirelessDialog extends ModalDial
                             this._device.get_path(), 
accessPoints[0].get_path()]);
             } else {
                 let connection = new NM.SimpleConnection();
+                if (this._privateConnections) {
+                    let connectionSetting = new NM.SettingConnection();
+                    connectionSetting.add_permission('user', 
GLib.get_user_name(), null);
+                    connection.add_setting(connectionSetting);
+                }
                 this._client.add_and_activate_connection_async(connection, 
this._device, accessPoints[0].get_path(), null, null);
             }
         }
@@ -1153,9 +1165,10 @@ class NMWirelessDialog extends ModalDial
 });
 
 var NMDeviceWireless = class {
-    constructor(client, device) {
+    constructor(client, device, privateConnections) {
         this._client = client;
         this._device = device;
+        this._privateConnections = privateConnections;
 
         this._description = '';
 
@@ -1241,7 +1254,7 @@ var NMDeviceWireless = class {
     }
 
     _showDialog() {
-        this._dialog = new NMWirelessDialog(this._client, this._device);
+        this._dialog = new NMWirelessDialog(this._client, this._device, 
this._privateConnections);
         this._dialog.connect('closed', this._dialogClosed.bind(this));
         this._dialog.open();
     }
@@ -1616,6 +1629,24 @@ var NMApplet = class extends PanelMenu.S
 
     _clientGot(obj, result) {
         this._client = NM.Client.new_finish(result);
+        
+        // Check if newly created connections should be private or not
+        this._privateConnections = true;
+        let authority = Polkit.Authority.get_sync(null);
+        let credential = new Gio.Credentials();
+        let subject = new Polkit.UnixProcess({ pid: credential.get_unix_pid(), 
uid: credential.get_unix_user() });
+        let authResult;
+        try {
+            authResult = authority.check_authorization_sync(subject,
+                                                            
'org.freedesktop.NetworkManager.settings.modify.system',
+                                                            null /* details */,
+                                                            
Polkit.CheckAuthorizationFlags.NONE,
+                                                            null /* 
cancellable */);
+        } catch (e) {
+            log('NetworkManager is not installed');
+        }  
+        if (authResult)
+            this._privateConnections = !authResult.get_is_authorized();
 
         this._activeConnections = [];
         this._connections = [];
@@ -1736,7 +1767,7 @@ var NMApplet = class extends PanelMenu.S
 
         let wrapperClass = this._dtypes[device.get_device_type()];
         if (wrapperClass) {
-            let wrapper = new wrapperClass(this._client, device);
+            let wrapper = new wrapperClass(this._client, device, 
this._privateConnections);
             device._delegate = wrapper;
             this._addDeviceWrapper(wrapper);
 
++++++ gnome-shell-screen-disappear.patch ++++++
Index: gnome-shell-3.24.2/js/gdm/authPrompt.js
===================================================================
--- gnome-shell-3.24.2.orig/js/gdm/authPrompt.js
+++ gnome-shell-3.24.2/js/gdm/authPrompt.js
@@ -458,8 +458,10 @@ const AuthPrompt = new Lang.Class({
         this.setUser(null);
         this.stopSpinning();
 
-        if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED)
+        if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED) {
+            this._userVerifier.cancel();
             this.emit('failed');
+        }
 
         let beginRequestType;
 
++++++ gnome-shell.obsinfo ++++++
name: gnome-shell
version: 3.34.5
mtime: 1585610927
commit: c38196dd850609de2f458dc7e4705efc871a5549

++++++ gs-fate318433-prevent-same-account-multi-logins.patch ++++++
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 3704645..216ee40 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -25,7 +25,9 @@ var AuthPromptStatus = {
     NOT_VERIFYING: 0,
     VERIFYING: 1,
     VERIFICATION_FAILED: 2,
-    VERIFICATION_SUCCEEDED: 3
+    VERIFICATION_SUCCEEDED: 3,
+    // NOTE fate#318433 extra state to track multi-login situation
+    VERIFIED_BUT_FORBIDDEN: 4
 };
 
 var BeginRequestType = {
@@ -244,7 +246,12 @@ var AuthPrompt = class {
     }
 
     _onVerificationComplete() {
+        // NOTE update the spinning icon
         this.setActorInDefaultButtonWell(null);
+
+        if (this.verificationStatus === 
AuthPromptStatus.VERIFIED_BUT_FORBIDDEN) {
+            return;
+        }
         this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
         this.cancelButton.reactive = false;
     }
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 9546921..1301047 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -917,6 +917,8 @@ var LoginDialog = GObject.registerClass({
                 this._authPrompt.updateSensitivity(false);
                 let answer = this._authPrompt.getAnswer();
                 this._user = this._userManager.get_user(answer);
+                this._userLoginForbidden =
+                    this._user.is_x_logged_in_remotely();
                 this._authPrompt.clear();
                 this._authPrompt.startSpinning();
                 this._authPrompt.begin({ userName: answer });
@@ -984,6 +986,8 @@ var LoginDialog = GObject.registerClass({
                                                         let answer = 
this._authPrompt.getAnswer();
                             let domain_answer = 
this._domainMenuButton.getDomainUser(answer);
                                                         this._user = 
this._userManager.get_user(domain_answer);
+                                                        
this._userLoginForbidden =
+                                                            
this._user.is_x_logged_in_remotely();
                                                         
this._authPrompt.clear();
                                                         
this._authPrompt.startSpinning();
                                                         
this._authPrompt.begin({ userName: domain_answer});
@@ -1010,6 +1014,28 @@ var LoginDialog = GObject.registerClass({
     }
 
     _onSessionOpened(client, serviceName) {
+        if ( this._userLoginForbidden ) {
+            this._authPrompt.setMessage(
+                _('Sorry, you have to log out a previous session first. 
Multiple logins are not supported.'),
+                GdmUtil.MessageType.ERROR);
+            // TODO: The following logic relies on the unverified fact that
+            // `AuthPrompt::_onVerificationComplete` seems to always run after
+            // current handler. This might root from the interaction between
+            // greeter and verifier, both are external programs.
+            this._authPrompt.verificationStatus = 
AuthPrompt.AuthPromptStatus.VERIFIED_BUT_FORBIDDEN;
+
+            // NOTE: Failed Attempts as references
+            //
+            // NOTE: reset is too heavy, it skips the error prompt all together
+            // this._authPrompt.reset();
+            //
+            // NOTE: Diconnect at this stage is not working
+            //
+            // 
this._authPrompt._userVerifier.disconnect(this._authPrompt._userVerifierCompleteId);
+
+            return;
+        }
+
         this._authPrompt.finish(() => this._startSession(serviceName));
     }
 
@@ -1189,6 +1215,7 @@ var LoginDialog = GObject.registerClass({
 
     _onUserListActivated(activatedItem) {
         this._user = activatedItem.user;
+        this._userLoginForbidden = this._user.is_x_logged_in_remotely();
 
         this._updateCancelButton();
 
-- 
2.25.1


Reply via email to