commit e9062a564c490cbf486cb03096fd97e551a733a5 Author: Ward Date: Thu Feb 23 22:01:49 2023 +0200 first commit diff --git a/gnome-shell-43.0/debian/README.Ubuntu b/gnome-shell-43.0/debian/README.Ubuntu new file mode 100644 index 0000000..8c24832 --- /dev/null +++ b/gnome-shell-43.0/debian/README.Ubuntu @@ -0,0 +1,61 @@ +# Reporting Shell theme changes to Yaru. + +Our default theme is Yaru, it means that any changes, especially breaking changes (meaning, changes that can't be done +without a theme update) needs to be coordinated between the gnome-shell updates and Yaru. Probably with a **Breaks:** stenza +in `debian/control` + +## What should be reported? + +The upstream GNOME Shell `data/theme/` directory is used as a basis for our Yaru GNOME Shell theme so any change made upstream needs to be reflected in our derivative version. Most of the sass files are under the `gnome-shell-sass/` subdirectory. + +Note that Yaru has its own `meson.build` file. Changes there shouldn't be in general reported apart if new assets are installed. +It should be a simple assessment in general if you need to do anything on the build system side. + +## Structure + +Ensure you cloned the Yaru repository via `git clone https://github.com/ubuntu/yaru`. The shell theme is under `gnome-shell`. +It contains two subdirectories: + * `upstream/` is the latest upstream sass source we based on. This is the reference. + * `src` is the Yaru theme, which is `upstream/` + the yaru modifications. + +Basically diffing `upstream` and `src` provides you the difference between the default GNOME Shell theme and our Yaru Shell theme. + +## Reporting changes + +### Checking what to report + +Note: you should do that either recursively, or directly on each file that was modified for the new GNOME Shell release. +Basically, you can run: `diff -r yaru/gnome-shell/upstream new-gnome-shell-version/data/theme | lsdiff` to get the list between +latest upstream snapshot in Yaru and current upstream changes. + +The easiest way is a 3-way merge diff and manually reporting what makes sense. I personally used `meld` for this and run: +``` +$ meld yaru/gnome-shell/upstream/ new-gnome-shell-version/data/theme/ yaru/gnome-shell/src/ +``` + +Note: as diff, meld can infer the filename (only repeat it once) as long as you point to the correct directory. + +You will see a window with 3 columns: + * New changes are visible between the first two columns (diff between old upstream and new upstream). You report them, +as you may see it fit (clicking meld arrow or manually) on the third column. + * Second to third column diff is consequently the new additional delta you are introducing, if needed. It should be most +of the time be null (no diff) or minimal once you are done. + +Commit all those changes, don't forget the svg assets. + +### Taking a new upstream snapshot + +Once done, snapshot the new GNOME Shell upstream directory we based our changes on for the next Shell update involving a new 3 way merge: +``` +$ rm -r yaru/gnome-shell/upstream/ +$ cp -a new-gnome-shell-version/data/theme/ yaru/gnome-shell/upstream/ +``` + +### Changing package coordination + +Once again, if the changes are breaking, updates the **Breaks:** or other fields between **gnome-shell** and +**yaru-theme-gnome-shell** to ensure people are getting both updates simultaneously. + +### Submitting + +Commit that, and submit a MP against https://github.com/ubuntu/yaru. diff --git a/gnome-shell-43.0/debian/changelog b/gnome-shell-43.0/debian/changelog new file mode 100644 index 0000000..f480346 --- /dev/null +++ b/gnome-shell-43.0/debian/changelog @@ -0,0 +1,11 @@ +gnome-shell-vrr (43.0-99pika5) kinetic; urgency=medium + + * Fix gschema. + + -- Ward Nakchbandi Fri, 07 Oct 2022 23:26:00 +0300 + +gnome-shell-vrr (43.0-99pika4) kinetic; urgency=medium + + * Initial Release. + + -- Ward Nakchbandi Fri, 07 Oct 2022 23:26:00 +0300 diff --git a/gnome-shell-43.0/debian/clean b/gnome-shell-43.0/debian/clean new file mode 100644 index 0000000..3d6866b --- /dev/null +++ b/gnome-shell-43.0/debian/clean @@ -0,0 +1 @@ +debian/home/ diff --git a/gnome-shell-43.0/debian/control b/gnome-shell-43.0/debian/control new file mode 100644 index 0000000..7042950 --- /dev/null +++ b/gnome-shell-43.0/debian/control @@ -0,0 +1,196 @@ +# This file is autogenerated. DO NOT EDIT! +# +# Modifications should be made to debian/control.in instead. +# This file is regenerated automatically in the clean target. +# This file is autogenerated. DO NOT EDIT! +# +# Modifications should be made to debian/control.in instead. +# This file is regenerated automatically in the clean target. +# This file is autogenerated. DO NOT EDIT! +# +# Modifications should be made to debian/control.in instead. +# This file is regenerated automatically in the clean target. +Source: gnome-shell-vrr +Section: gnome +Priority: optional +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian GNOME Maintainers +Uploaders: Jeremy Bicha +Build-Depends: appstream, + asciidoc-base, + bash-completion, + dbus , + debhelper-compat (= 13), + dh-sequence-gir, + dh-sequence-gnome, + gjs, + gir1.2-accountsservice-1.0 , + gir1.2-gdm-1.0 (>= 3.18.2) , + gir1.2-geoclue-2.0 , + gir1.2-gnomedesktop-3.0 (>= 3.35.90) , + gir1.2-gweather-4.0 (>= 4.1) , + gir1.2-rsvg-2.0 , + gir1.2-upowerglib-1.0 , + gnome-control-center-dev (>= 1:3.4), + gnome-pkg-tools (>= 0.11), + gnome-settings-daemon-common (>= 40~) , + gobject-introspection (>= 1.49.1), + gsettings-desktop-schemas-dev (>= 42~beta), + gtk-doc-tools, + libasound2-dev, + libatk-bridge2.0-dev, + libecal2.0-dev (>= 3.45), + libedataserver1.2-dev (>= 3.45), + libgcr-3-dev (>= 3.7.5), + libgirepository1.0-dev (>= 1.29.15), + libgjs-dev (>= 1.73.1), + libgl1-mesa-dri , + libglib2.0-dev (>= 2.57.2), + libgnome-autoar-0-dev, + libgnome-bluetooth-3.0-dev (>= 3.9.0) [linux-any], + libgnome-desktop-3-dev (>= 3.35.90), + libgnome-menu-3-dev, + libgstreamer1.0-dev (>= 0.11.92), + libgstreamer-plugins-base1.0-dev, + libgtk-3-bin, + libgtk-3-dev (>= 3.21.6), + libgtk-4-dev, + libibus-1.0-dev (>= 1.5.22-2ubuntu2~), + libjson-glib-dev, + libnm-dev (>= 1.10.4) [linux-any], + libpipewire-0.3-dev (>= 0.3.10) [linux-any], + libpolkit-agent-1-dev (>= 0.100), + libpulse-dev (>= 13), + libsecret-1-dev, + libstartup-notification0-dev (>= 0.11), + libsystemd-dev [linux-any], + libx11-dev, + libxfixes-dev, + libxml2-dev, + mesa-common-dev, + meson (>= 0.58.0), + mutter-vrr, + pkg-config (>= 0.22), + sassc, + systemd [linux-any], + xauth , + xvfb , + xwayland +Rules-Requires-Root: no +Standards-Version: 4.6.1 +Homepage: https://wiki.gnome.org/Projects/GnomeShell +XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git +XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell +Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git -b ubuntu/master +Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell/tree/ubuntu/master + +Package: gnome-shell-vrr +Architecture: linux-any +Depends: gir1.2-accountsservice-1.0, + gir1.2-adw-1, + gir1.2-atk-1.0, + gir1.2-atspi-2.0 (>= 2.36), + gir1.2-gcr-3 (>= 3.7.5), + gir1.2-gdesktopenums-3.0 (>= 3.12), + gir1.2-gdkpixbuf-2.0, + gir1.2-gdm-1.0 (>= 3.18.2), + gir1.2-geoclue-2.0, + gir1.2-glib-2.0 (>= 1.56.0), + gir1.2-gnomebluetooth-3.0 (>= 3.12.0) [linux-any], + gir1.2-gnomedesktop-3.0 (>= 3.35.90), + gir1.2-graphene-1.0 (>= 1.10.2), + gir1.2-gstreamer-1.0, + gir1.2-gtk-3.0 (>= 3.16), + gir1.2-gtk-4.0, + gir1.2-gweather-4.0 (>= 4.1), + gir1.2-freedesktop, + gir1.2-ibus-1.0 (>= 1.5.22-2ubuntu2~), + gir1.2-nm-1.0 [linux-any], + gir1.2-nma-1.0 [linux-any], + gir1.2-pango-1.0, + gir1.2-polkit-1.0, + gir1.2-rsvg-2.0, + gir1.2-soup-3.0, + gir1.2-upowerglib-1.0 (>= 0.99), + gir1.2-webkit2-4.1, + mutter-vrr, + gnome-settings-daemon (>= 40~), + gnome-shell-common-vrr (= ${source:Version}), + gsettings-desktop-schemas (>= 42~beta), + gstreamer1.0-pipewire (>= 0.3.10) [linux-any], + libglib2.0-bin (>= 2.53.0), + python3, + ubuntu-wallpapers, + ${gir:Depends}, + ${misc:Depends}, + ${shlibs:Depends} +Recommends: bolt (>= 0.3), + evolution-data-server (>= 3.45), + gdm3 (>= 3.10.0.1-3~), + gkbd-capplet, + gnome-control-center (>= 1:42), + gnome-remote-desktop, + gnome-menus, + gnome-user-docs, + ibus, + iio-sensor-proxy, + power-profiles-daemon, + switcheroo-control, + ubuntu-session | gnome-session, + xserver-xorg-legacy, + unzip +Suggests: gir1.2-malcontent-0 (>= 0.6.0) [linux-any], + gir1.2-telepathyglib-0.12, + gir1.2-telepathylogger-0.2 (>= 0.8.0), + gnome-backgrounds (>= 3.13.90), + gnome-shell-extension-prefs, + chrome-gnome-shell, +Breaks: gnome-shell-extension-appindicator (<< 36), + gnome-shell-extension-autohidetopbar (<< 20180511-2~), + gnome-shell-extension-caffeine (<< 0~git20171229-3~), + gnome-shell-extension-dash-to-panel (<< 43), + gnome-shell-extension-dashtodock (<< 70), + gnome-shell-extension-desktop-icons (<< 21.04), + gnome-shell-extension-desktop-icons-ng (<< 0.16.0~), + gnome-shell-extension-multi-monitors (<< 0.00~git20171014.1.df5d6e4-1.1~), + gnome-shell-extension-pixelsaver (<< 1.10+git20161217-49f47bf-1.1~), + gnome-shell-extension-taskbar (<< 57.0-2.1~), + gnome-shell-extension-top-icons-plus (<< 27-3~), + gnome-shell-extension-workspaces-to-dock (<< 54~), + gnome-shell-extensions (<< 40.0~), + gnome-shell-pomodoro (<< 0.13.4-2.1~), +Provides: notification-daemon, + polkit-1-auth-agent +Description: graphical shell for the GNOME desktop + The GNOME Shell provides core interface functions like switching + windows, launching applications or see your notifications. It takes + advantage of the capabilities of modern graphics hardware and + introduces innovative user interface concepts to provide a + delightful and easy to use experience. GNOME Shell is the defining + technology of the GNOME 3 user experience. + +Package: gnome-shell-common-vrr +Architecture: all +Depends: ${misc:Depends} +Breaks: gnome-shell-vrr (<< 3.36.1-6~) +Replaces: gnome-shell-vrr (<< 3.36.1-6~) +Description: common files for the GNOME graphical shell + This package contains translations and data files for the GNOME shell. + +Package: gnome-shell-extension-prefs-vrr +Architecture: linux-any +Depends: gir1.2-adw-1, + gir1.2-gtk-4.0, + gjs (>= 1.73.1), + gnome-shell-vrr (= ${binary:Version}), + gnome-shell-common-vrr (= ${source:Version}), + ${gir:Depends}, + ${misc:Depends}, + ${shlibs:Depends} +Provides: gnome-extensions-app +Recommends: chrome-gnome-shell +Breaks: gnome-shell-vrr (<< 3.36.0-2) +Replaces: gnome-shell-vrr (<< 3.36.0-2) +Description: tool to enable / disable GNOME Shell extensions + This package contains a tool which users who use Shell extensions can use to + toggle them on and off, and access their preferences. diff --git a/gnome-shell-43.0/debian/control.in b/gnome-shell-43.0/debian/control.in new file mode 100644 index 0000000..232b0bc --- /dev/null +++ b/gnome-shell-43.0/debian/control.in @@ -0,0 +1,192 @@ +# This file is autogenerated. DO NOT EDIT! +# +# Modifications should be made to debian/control.in instead. +# This file is regenerated automatically in the clean target. +# This file is autogenerated. DO NOT EDIT! +# +# Modifications should be made to debian/control.in instead. +# This file is regenerated automatically in the clean target. +Source: gnome-shell-vrr +Section: gnome +Priority: optional +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian GNOME Maintainers +Uploaders: Jeremy Bicha +Build-Depends: appstream, + asciidoc-base, + bash-completion, + dbus , + debhelper-compat (= 13), + dh-sequence-gir, + dh-sequence-gnome, + gjs, + gir1.2-accountsservice-1.0 , + gir1.2-gdm-1.0 (>= 3.18.2) , + gir1.2-geoclue-2.0 , + gir1.2-gnomedesktop-3.0 (>= 3.35.90) , + gir1.2-gweather-4.0 (>= 4.1) , + gir1.2-rsvg-2.0 , + gir1.2-upowerglib-1.0 , + gnome-control-center-dev (>= 1:3.4), + gnome-pkg-tools (>= 0.11), + gnome-settings-daemon-common (>= 40~) , + gobject-introspection (>= 1.49.1), + gsettings-desktop-schemas-dev (>= 42~beta), + gtk-doc-tools, + libasound2-dev, + libatk-bridge2.0-dev, + libecal2.0-dev (>= 3.45), + libedataserver1.2-dev (>= 3.45), + libgcr-3-dev (>= 3.7.5), + libgirepository1.0-dev (>= 1.29.15), + libgjs-dev (>= 1.73.1), + libgl1-mesa-dri , + libglib2.0-dev (>= 2.57.2), + libgnome-autoar-0-dev, + libgnome-bluetooth-3.0-dev (>= 3.9.0) [linux-any], + libgnome-desktop-3-dev (>= 3.35.90), + libgnome-menu-3-dev, + libgstreamer1.0-dev (>= 0.11.92), + libgstreamer-plugins-base1.0-dev, + libgtk-3-bin, + libgtk-3-dev (>= 3.21.6), + libgtk-4-dev, + libibus-1.0-dev (>= 1.5.22-2ubuntu2~), + libjson-glib-dev, + libnm-dev (>= 1.10.4) [linux-any], + libpipewire-0.3-dev (>= 0.3.10) [linux-any], + libpolkit-agent-1-dev (>= 0.100), + libpulse-dev (>= 13), + libsecret-1-dev, + libstartup-notification0-dev (>= 0.11), + libsystemd-dev [linux-any], + libx11-dev, + libxfixes-dev, + libxml2-dev, + mesa-common-dev, + meson (>= 0.58.0), + mutter-vrr, + pkg-config (>= 0.22), + sassc, + systemd [linux-any], + xauth , + xvfb , + xwayland +Rules-Requires-Root: no +Standards-Version: 4.6.1 +Homepage: https://wiki.gnome.org/Projects/GnomeShell +XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git +XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell +Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git -b ubuntu/master +Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell/tree/ubuntu/master + +Package: gnome-shell-vrr +Architecture: linux-any +Depends: gir1.2-accountsservice-1.0, + gir1.2-adw-1, + gir1.2-atk-1.0, + gir1.2-atspi-2.0 (>= 2.36), + gir1.2-gcr-3 (>= 3.7.5), + gir1.2-gdesktopenums-3.0 (>= 3.12), + gir1.2-gdkpixbuf-2.0, + gir1.2-gdm-1.0 (>= 3.18.2), + gir1.2-geoclue-2.0, + gir1.2-glib-2.0 (>= 1.56.0), + gir1.2-gnomebluetooth-3.0 (>= 3.12.0) [linux-any], + gir1.2-gnomedesktop-3.0 (>= 3.35.90), + gir1.2-graphene-1.0 (>= 1.10.2), + gir1.2-gstreamer-1.0, + gir1.2-gtk-3.0 (>= 3.16), + gir1.2-gtk-4.0, + gir1.2-gweather-4.0 (>= 4.1), + gir1.2-freedesktop, + gir1.2-ibus-1.0 (>= 1.5.22-2ubuntu2~), + gir1.2-nm-1.0 [linux-any], + gir1.2-nma-1.0 [linux-any], + gir1.2-pango-1.0, + gir1.2-polkit-1.0, + gir1.2-rsvg-2.0, + gir1.2-soup-3.0, + gir1.2-upowerglib-1.0 (>= 0.99), + gir1.2-webkit2-4.1, + mutter-vrr, + gnome-settings-daemon (>= 40~), + gnome-shell-common-vrr (= ${source:Version}), + gsettings-desktop-schemas (>= 42~beta), + gstreamer1.0-pipewire (>= 0.3.10) [linux-any], + libglib2.0-bin (>= 2.53.0), + python3, + ubuntu-wallpapers, + ${gir:Depends}, + ${misc:Depends}, + ${shlibs:Depends} +Recommends: bolt (>= 0.3), + evolution-data-server (>= 3.45), + gdm3 (>= 3.10.0.1-3~), + gkbd-capplet, + gnome-control-center (>= 1:42), + gnome-remote-desktop, + gnome-menus, + gnome-user-docs, + ibus, + iio-sensor-proxy, + power-profiles-daemon, + switcheroo-control, + ubuntu-session | gnome-session, + xserver-xorg-legacy, + unzip +Suggests: gir1.2-malcontent-0 (>= 0.6.0) [linux-any], + gir1.2-telepathyglib-0.12, + gir1.2-telepathylogger-0.2 (>= 0.8.0), + gnome-backgrounds (>= 3.13.90), + gnome-shell-extension-prefs, + chrome-gnome-shell, +Breaks: gnome-shell-extension-appindicator (<< 36), + gnome-shell-extension-autohidetopbar (<< 20180511-2~), + gnome-shell-extension-caffeine (<< 0~git20171229-3~), + gnome-shell-extension-dash-to-panel (<< 43), + gnome-shell-extension-dashtodock (<< 70), + gnome-shell-extension-desktop-icons (<< 21.04), + gnome-shell-extension-desktop-icons-ng (<< 0.16.0~), + gnome-shell-extension-multi-monitors (<< 0.00~git20171014.1.df5d6e4-1.1~), + gnome-shell-extension-pixelsaver (<< 1.10+git20161217-49f47bf-1.1~), + gnome-shell-extension-taskbar (<< 57.0-2.1~), + gnome-shell-extension-top-icons-plus (<< 27-3~), + gnome-shell-extension-workspaces-to-dock (<< 54~), + gnome-shell-extensions (<< 40.0~), + gnome-shell-pomodoro (<< 0.13.4-2.1~), +Provides: notification-daemon, + polkit-1-auth-agent +Description: graphical shell for the GNOME desktop + The GNOME Shell provides core interface functions like switching + windows, launching applications or see your notifications. It takes + advantage of the capabilities of modern graphics hardware and + introduces innovative user interface concepts to provide a + delightful and easy to use experience. GNOME Shell is the defining + technology of the GNOME 3 user experience. + +Package: gnome-shell-common-vrr +Architecture: all +Depends: ${misc:Depends} +Breaks: gnome-shell-vrr (<< 3.36.1-6~) +Replaces: gnome-shell-vrr (<< 3.36.1-6~) +Description: common files for the GNOME graphical shell + This package contains translations and data files for the GNOME shell. + +Package: gnome-shell-extension-prefs-vrr +Architecture: linux-any +Depends: gir1.2-adw-1, + gir1.2-gtk-4.0, + gjs (>= 1.73.1), + gnome-shell-vrr (= ${binary:Version}), + gnome-shell-common-vrr (= ${source:Version}), + ${gir:Depends}, + ${misc:Depends}, + ${shlibs:Depends} +Provides: gnome-extensions-app +Recommends: chrome-gnome-shell +Breaks: gnome-shell-vrr (<< 3.36.0-2) +Replaces: gnome-shell-vrr (<< 3.36.0-2) +Description: tool to enable / disable GNOME Shell extensions + This package contains a tool which users who use Shell extensions can use to + toggle them on and off, and access their preferences. diff --git a/gnome-shell-43.0/debian/copyright b/gnome-shell-43.0/debian/copyright new file mode 100644 index 0000000..ffa4838 --- /dev/null +++ b/gnome-shell-43.0/debian/copyright @@ -0,0 +1,52 @@ +This package was debianized by Sebastien Bacher on +Wed, 01 Jul 2009 23:29:31 +0200. + +It was downloaded from https://download.gnome.org/sources/gnome-shell/ + +Upstream Authors: + + Colin Walters + Dan Winship + Marina Zhurakhinskaya + Owen Taylor + William Jon McCann + +Files: src/* + js/* +Copyright: © 2000 Helix Code, Inc. + © 2000,2001 Eazel, Inc. + © 2001 George Lebl + © 2002 Sun Microsystems Inc. + © 2004-2005 James M. Cape + © 2006-2008 Red Hat, Inc. + © 2007 Ryan Lortie + © 2008 Intel Corp. +License: GPL-2+ (/usr/share/common-licenses/GPL-2) + +Files: src/gdmuser/* +Copyright: © 2007-2008 William Jon McCann + © 2004-2005 James M. Cape +License: LGPL-2+ (/usr/share/common-licenses/LGPL-2) + +Files: src/tray/* +Copyright: © 2002 Anders Carlsson + © 2003-2006 Vincent Untz + © 2008 Red Hat, Inc. + +Files: src/big/* +Copyright: © 2005-2008 Red Hat, Inc. + © 2008-2009 litl, LLC + +Files: src/st/* +Copyright: © 2008 OpenedHand + © 2009 Intel Corporation. + © 2003-2004 Dodji Seketeli +License: LGPL-2.1 (/usr/share/common-licenses/LGPL-2.1) + +The Debian packaging is: + + Copyright © 2009 Sebastien Bacher + Copyright © 2009 Collabora Ltd. + +and is licensed under the GPL version 3, +see `/usr/share/common-licenses/GPL-3'. diff --git a/gnome-shell-43.0/debian/extras/gnome-shell-vrr b/gnome-shell-43.0/debian/extras/gnome-shell-vrr new file mode 100755 index 0000000..1acf1e5 --- /dev/null +++ b/gnome-shell-43.0/debian/extras/gnome-shell-vrr @@ -0,0 +1 @@ +GSETTINGS_SCHEMA_DIR="/opt/mutter-vrr/share/glib-2.0/schemas:$GSETTINGS_SCHEMA_DIR" LD_LIBRARY_PATH="/opt/mutter-vrr/lib/x86_64-linux-gnu:/opt/mutter-vrr/lib/x86_64-linux-gnu/mutter-11:/opt/mutter-vrr/lib/x86_64-linux-gnu/mutter-11/plugins:$LD_LIBRARY_PATH" PATH="/opt/mutter-vrr/bin:$PATH" /opt/mutter-vrr/bin/gnome-shell $@ diff --git a/gnome-shell-43.0/debian/extras/gnome-vrr.Shell.desktop b/gnome-shell-43.0/debian/extras/gnome-vrr.Shell.desktop new file mode 100644 index 0000000..0463aab --- /dev/null +++ b/gnome-shell-43.0/debian/extras/gnome-vrr.Shell.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Application +Name=GNOME VRR Shell +Comment=Window management and application launching +Exec=/usr/bin/gnome-shell-vrr +Categories=GNOME;GTK;Core; +OnlyShowIn=GNOME; +NoDisplay=true +X-GNOME-Autostart-Phase=DisplayServer +X-GNOME-Provides=panel;windowmanager; +X-GNOME-Autostart-Notify=true +X-GNOME-AutoRestart=false +X-GNOME-HiddenUnderSystemd=true +X-Ubuntu-Gettext-Domain=gnome-shell diff --git a/gnome-shell-43.0/debian/gbp.conf b/gnome-shell-43.0/debian/gbp.conf new file mode 100644 index 0000000..84d067c --- /dev/null +++ b/gnome-shell-43.0/debian/gbp.conf @@ -0,0 +1,18 @@ +[DEFAULT] +pristine-tar = True +debian-branch=ubuntu/master +debian-tag=ubuntu/%(version)s +upstream-branch = upstream/latest + +[buildpackage] +sign-tags = True + +[dch] +multimaint-merge = True + +[import-orig] +postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit +upstream-vcs-tag = %(version%~%.)s + +[pq] +patch-numbers = False diff --git a/gnome-shell-43.0/debian/gnome-shell-common-vrr.install b/gnome-shell-43.0/debian/gnome-shell-common-vrr.install new file mode 100644 index 0000000..db63ef1 --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-common-vrr.install @@ -0,0 +1,7 @@ +opt/mutter-vrr/lib/systemd/user +opt/mutter-vrr/share/dbus-1/interfaces +opt/mutter-vrr/share/glib-2.0 +opt/mutter-vrr/share/gnome-control-center +opt/mutter-vrr/share/gnome-shell +opt/mutter-vrr/share/icons/hicolor/*/apps/* +opt/mutter-vrr/share/locale diff --git a/gnome-shell-43.0/debian/gnome-shell-common-vrr.postinst b/gnome-shell-43.0/debian/gnome-shell-common-vrr.postinst new file mode 100755 index 0000000..3a47d80 --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-common-vrr.postinst @@ -0,0 +1,2 @@ +glib-compile-schemas /opt/mutter-vrr/share/glib-2.0/schemas/ + diff --git a/gnome-shell-43.0/debian/gnome-shell-common-vrr.postrm b/gnome-shell-43.0/debian/gnome-shell-common-vrr.postrm new file mode 100755 index 0000000..3a47d80 --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-common-vrr.postrm @@ -0,0 +1,2 @@ +glib-compile-schemas /opt/mutter-vrr/share/glib-2.0/schemas/ + diff --git a/gnome-shell-43.0/debian/gnome-shell-extension-prefs-vrr.install b/gnome-shell-43.0/debian/gnome-shell-extension-prefs-vrr.install new file mode 100644 index 0000000..0441f3f --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-extension-prefs-vrr.install @@ -0,0 +1,4 @@ +opt/mutter-vrr/bin/gnome-extensions-app +opt/mutter-vrr/bin/gnome-shell-extension-prefs +opt/mutter-vrr/share/applications/org.gnome.Extensions.desktop +opt/mutter-vrr/share/metainfo/org.gnome.Extensions.metainfo.xml diff --git a/gnome-shell-43.0/debian/gnome-shell-vrr.bug-control b/gnome-shell-43.0/debian/gnome-shell-vrr.bug-control new file mode 100644 index 0000000..95bc8ac --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-vrr.bug-control @@ -0,0 +1,2 @@ +report-with: gnome-session gnome-settings-daemon libgjs0g libmutter-11-0 +package-status: libegl-vendor libglx-vendor libgl1-mesa-dri diff --git a/gnome-shell-43.0/debian/gnome-shell-vrr.docs b/gnome-shell-43.0/debian/gnome-shell-vrr.docs new file mode 100644 index 0000000..8913f46 --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-vrr.docs @@ -0,0 +1,2 @@ +NEWS +README.md diff --git a/gnome-shell-43.0/debian/gnome-shell-vrr.gsettings-override b/gnome-shell-43.0/debian/gnome-shell-vrr.gsettings-override new file mode 100644 index 0000000..1c01609 --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-vrr.gsettings-override @@ -0,0 +1,2 @@ +[org.gnome.shell] +favorite-apps=[ 'firefox-esr.desktop', 'org.gnome.Evolution.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ] diff --git a/gnome-shell-43.0/debian/gnome-shell-vrr.install b/gnome-shell-43.0/debian/gnome-shell-vrr.install new file mode 100644 index 0000000..d6e96ca --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-vrr.install @@ -0,0 +1,14 @@ +opt/mutter-vrr/bin/gnome-extensions +opt/mutter-vrr/bin/gnome-shell +opt/mutter-vrr/bin/gnome-shell-extension-tool +opt/mutter-vrr/bin/gnome-shell-perf-tool +opt/mutter-vrr/lib/gnome-shell +opt/mutter-vrr/libexec +opt/mutter-vrr/share/applications/evolution-calendar.desktop +opt/mutter-vrr/share/applications/org.gnome.Shell*.desktop +opt/mutter-vrr/share/bash-completion/completions/gnome-extensions +opt/mutter-vrr/share/dbus-1/services +opt/mutter-vrr/share/man +opt/mutter-vrr/share/xdg-desktop-portal +debian/extras/gnome-shell-vrr usr/bin/ +debian/extras/gnome-vrr.Shell.desktop usr/share/applications diff --git a/gnome-shell-43.0/debian/gnome-shell-vrr.lintian-overrides b/gnome-shell-43.0/debian/gnome-shell-vrr.lintian-overrides new file mode 100644 index 0000000..4dba1ee --- /dev/null +++ b/gnome-shell-43.0/debian/gnome-shell-vrr.lintian-overrides @@ -0,0 +1,16 @@ +# These RUNPATHs are needed to find mutter's private clutter fork +gnome-shell: custom-library-search-path opt/mutter-vrr/bin/gnome-shell RUNPATH opt/mutter-vrr/lib/*/mutter-*/ +gnome-shell: custom-library-search-path opt/mutter-vrr/lib/gnome-shell/*.so RUNPATH opt/mutter-vrr/lib/*/mutter-*/ + +# This is just a launcher for a desktop-required component (evolution) +gnome-shell: desktop-command-not-in-package opt/mutter-vrr/share/applications/evolution-calendar.desktop evolution + +# gnome-shell ships some desktop files only to provide metadata and icons to some apps +gnome-shell: desktop-command-not-in-package opt/mutter-vrr/share/applications/org.gnome.Shell.Extensions.desktop false +gnome-shell: desktop-command-not-in-package opt/mutter-vrr/share/applications/org.gnome.Shell.PortalHelper.desktop gapplication + +# This is a NoDisplay=true desktop file, so there's no need for it +gnome-shell: desktop-entry-lacks-main-category opt/mutter-vrr/share/applications/org.gnome.Shell.desktop + +# Conceptually a program, only built as a shared library for technical reasons +gnome-shell: exit-in-shared-library opt/mutter-vrr/lib/gnome-shell/libgnome-shell.so diff --git a/gnome-shell-43.0/debian/patches/Revert-build-Port-to-gcr4.patch b/gnome-shell-43.0/debian/patches/Revert-build-Port-to-gcr4.patch new file mode 100644 index 0000000..aebdd89 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/Revert-build-Port-to-gcr4.patch @@ -0,0 +1,105 @@ +From: Jeremy Bicha +Date: Sun, 21 Aug 2022 10:30:55 -0400 +Subject: Revert "build: Port to gcr4" + +This reverts commit 5c935af7d3b3a3c9feb4e0d9ea214b6d25a7a2e7. +--- + js/ui/environment.js | 2 +- + meson.build | 4 ++-- + src/meson.build | 2 +- + src/shell-keyring-prompt.c | 6 +++--- + src/shell-secure-text-buffer.c | 2 +- + 5 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/js/ui/environment.js b/js/ui/environment.js +index 4853a83..83df7bc 100644 +--- a/js/ui/environment.js ++++ b/js/ui/environment.js +@@ -8,7 +8,7 @@ imports.gi.versions.Atk = '1.0'; + imports.gi.versions.Atspi = '2.0'; + imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION; + imports.gi.versions.Cogl = Config.LIBMUTTER_API_VERSION; +-imports.gi.versions.Gcr = '4'; ++imports.gi.versions.Gcr = '3'; + imports.gi.versions.Gdk = '3.0'; + imports.gi.versions.Gdm = '1.0'; + imports.gi.versions.Geoclue = '2.0'; +diff --git a/meson.build b/meson.build +index f071c2c..d7cb0ce 100644 +--- a/meson.build ++++ b/meson.build +@@ -20,7 +20,7 @@ libmutter_test_pc = 'libmutter-test-' + mutter_api_version + + ecal_req = '>= 3.33.1' + eds_req = '>= 3.33.1' +-gcr_req = '>= 3.90.0' ++gcr_req = '>= 3.7.5' + gio_req = '>= 2.56.0' + gi_req = '>= 1.49.1' + gjs_req = '>= 1.73.1' +@@ -71,7 +71,7 @@ endif + atk_bridge_dep = dependency('atk-bridge-2.0') + ecal_dep = dependency('libecal-2.0', version: ecal_req) + eds_dep = dependency('libedataserver-1.2', version: eds_req) +-gcr_dep = dependency('gcr-4', version: gcr_req) ++gcr_dep = dependency('gcr-base-3', version: gcr_req) + gdk_x11_dep = dependency('gdk-x11-3.0') + gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0') + gi_dep = dependency('gobject-introspection-1.0', version: gi_req) +diff --git a/src/meson.build b/src/meson.build +index fc7f8bf..e9ad569 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -215,7 +215,7 @@ libshell_dep = declare_dependency(link_with: libshell) + libshell_gir_includes = [ + 'Clutter-@0@'.format(mutter_api_version), + 'Meta-@0@'.format(mutter_api_version), +- 'Gcr-4', ++ 'Gcr-3', + 'PolkitAgent-1.0' + ] + +diff --git a/src/shell-keyring-prompt.c b/src/shell-keyring-prompt.c +index bb03279..83c6746 100644 +--- a/src/shell-keyring-prompt.c ++++ b/src/shell-keyring-prompt.c +@@ -26,7 +26,7 @@ + #include "shell-secure-text-buffer.h" + + #define GCR_API_SUBJECT_TO_CHANGE +-#include ++#include + + #include + +@@ -91,7 +91,7 @@ enum { + + static GParamSpec *props[N_PROPS] = { NULL, }; + +-static void shell_keyring_prompt_iface (GcrPromptInterface *iface); ++static void shell_keyring_prompt_iface (GcrPromptIface *iface); + + G_DEFINE_TYPE_WITH_CODE (ShellKeyringPrompt, shell_keyring_prompt, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GCR_TYPE_PROMPT, shell_keyring_prompt_iface); +@@ -531,7 +531,7 @@ shell_keyring_prompt_close (GcrPrompt *prompt) + } + + static void +-shell_keyring_prompt_iface (GcrPromptInterface *iface) ++shell_keyring_prompt_iface (GcrPromptIface *iface) + { + iface->prompt_password_async = shell_keyring_prompt_password_async; + iface->prompt_password_finish = shell_keyring_prompt_password_finish; +diff --git a/src/shell-secure-text-buffer.c b/src/shell-secure-text-buffer.c +index 8271410..03af451 100644 +--- a/src/shell-secure-text-buffer.c ++++ b/src/shell-secure-text-buffer.c +@@ -26,7 +26,7 @@ + #include "shell-secure-text-buffer.h" + + #define GCR_API_SUBJECT_TO_CHANGE +-#include ++#include + + #include + diff --git a/gnome-shell-43.0/debian/patches/Revert-st-Apply-css-foreground-color-to-text-as-a-PangoAt.patch b/gnome-shell-43.0/debian/patches/Revert-st-Apply-css-foreground-color-to-text-as-a-PangoAt.patch new file mode 100644 index 0000000..d801d77 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/Revert-st-Apply-css-foreground-color-to-text-as-a-PangoAt.patch @@ -0,0 +1,95 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Fri, 1 Apr 2022 02:41:07 +0200 +Subject: Revert "st: Apply css foreground color to text as a PangoAttribute" + +Using the pango foreground color implies that such part will have a +color set at pango level and so that cogl will use this value as a +color override (as per cogl_pango_renderer_set_color_for_part()). + +This is fine for most labels, but in case the clutter-text has the +selected text color set, it is simply ignored, because the overridden +color is always preferred. + +Also the reason for this commit, was not to apply colors on top of +colored fonts, but this won't happen anymore now because mutter's commit +aa136f45 ensures that no color will be applied to glyphs that are +already colored. + +So to me it looks that's just safer to revert it, instead of adding +different logic to handle the selected-text-color case. + +This reverts commit 66c4b1a8b607600f193b34e6a9f8c85f76c2ac2c. + +Origin: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2260 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1878998 +--- + src/st/st-entry.c | 2 ++ + src/st/st-private.c | 32 ++++++++++++++++++++++++++------ + 2 files changed, 28 insertions(+), 6 deletions(-) + +diff --git a/src/st/st-entry.c b/src/st/st-entry.c +index 64f85fd..d45ce95 100644 +--- a/src/st/st-entry.c ++++ b/src/st/st-entry.c +@@ -1095,6 +1095,8 @@ st_entry_init (StEntry *entry) + g_signal_connect (priv->entry, "notify::line-alignment", + G_CALLBACK (invalidate_shadow_pipeline), entry); + ++ g_signal_connect_swapped (priv->entry, "notify::editable", ++ G_CALLBACK (st_widget_style_changed), entry); + + priv->spacing = 6.0f; + +diff --git a/src/st/st-private.c b/src/st/st-private.c +index bb98151..1b70c5e 100644 +--- a/src/st/st-private.c ++++ b/src/st/st-private.c +@@ -115,22 +115,42 @@ _st_set_text_from_style (ClutterText *text, + StTextDecoration decoration; + PangoAttrList *attribs = NULL; + const PangoFontDescription *font; +- PangoAttribute *foreground; + StTextAlign align; + gdouble spacing; + gchar *font_features; ++ gboolean foreground_color_set; + + font = st_theme_node_get_font (theme_node); + clutter_text_set_font_description (text, (PangoFontDescription *) font); + + attribs = pango_attr_list_new (); + ++ foreground_color_set = FALSE; + st_theme_node_get_foreground_color (theme_node, &color); +- clutter_text_set_cursor_color (text, &color); +- foreground = pango_attr_foreground_new (color.red * 255, +- color.green * 255, +- color.blue * 255); +- pango_attr_list_insert (attribs, foreground); ++ ++ if (clutter_text_get_editable (text)) ++ { ++ ClutterColor selected_color; ++ ++ if (st_theme_node_lookup_color (theme_node, "selected-color", ++ TRUE, &selected_color) && ++ !clutter_color_equal (&selected_color, &color)) ++ { ++ clutter_text_set_color (text, &color); ++ clutter_text_set_cursor_color (text, &color); ++ foreground_color_set = TRUE; ++ } ++ } ++ ++ if (!foreground_color_set) ++ { ++ PangoAttribute *foreground; ++ clutter_text_set_cursor_color (text, &color); ++ foreground = pango_attr_foreground_new (color.red * 255, ++ color.green * 255, ++ color.blue * 255); ++ pango_attr_list_insert (attribs, foreground); ++ } + + if (color.alpha != 255) + { diff --git a/gnome-shell-43.0/debian/patches/bluetooth-Show-the-Bluetooth-switch-in-more-cases.patch b/gnome-shell-43.0/debian/patches/bluetooth-Show-the-Bluetooth-switch-in-more-cases.patch new file mode 100644 index 0000000..3a004a3 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/bluetooth-Show-the-Bluetooth-switch-in-more-cases.patch @@ -0,0 +1,62 @@ +From: Bastien Nocera +Date: Thu, 15 Sep 2022 18:03:22 +0200 +Subject: bluetooth: Show the Bluetooth switch in more cases + +In older versions of GNOME, when a menu was used for Bluetooth devices, +we tried to avoid showing the Bluetooth menu to folks who didn't use +Bluetooth. + +This kept causing problems as the menu would disappear if no +devices were setup and the platform "airplane mode" removed the +Bluetooth device from the USB bus, making it impossible to detect +whether a Bluetooth device existed, compared to a user unplugging a +removable Bluetooth device. + +Closes: #5749 +Part-of: +(cherry picked from commit 57aa91e2b3f129ff12c6f87146096708e9ac2867) +--- + js/ui/status/bluetooth.js | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js +index d4de597..f5ed177 100644 +--- a/js/ui/status/bluetooth.js ++++ b/js/ui/status/bluetooth.js +@@ -64,7 +64,10 @@ const BtClient = GObject.registerClass({ + g_interface_info: rfkillManagerInfo, + }); + this._proxy.connect('g-properties-changed', (p, properties) => { +- if ('BluetoothHardwareAirplaneMode' in properties.unpack()) ++ const changedProperties = properties.unpack(); ++ if ('BluetoothHardwareAirplaneMode' in changedProperties) ++ this.notify('available'); ++ else if ('BluetoothHasAirplaneMode' in changedProperties) + this.notify('available'); + }); + this._proxy.init_async(GLib.PRIORITY_DEFAULT, null) +@@ -79,21 +82,19 @@ const BtClient = GObject.registerClass({ + this._connectDeviceNotify(deviceStore.get_item(i)); + + this._client.connect('device-removed', (c, path) => { +- this._syncHadSetupDevices(); + this._deviceNotifyConnected.delete(path); + this.emit('devices-changed'); + }); + this._client.connect('device-added', (c, device) => { +- this._syncHadSetupDevices(); + this._connectDeviceNotify(device); + this.emit('devices-changed'); + }); + } + + get available() { +- // If there were set up devices, assume there is an adapter +- // that can be powered on as long as we're not hard blocked +- return this._hadSetupDevices ++ // If we have an rfkill switch, make sure it's not a hardware ++ // one as we can't get out of it in software ++ return this._proxy.BluetoothHasAirplaneMode + ? !this._proxy.BluetoothHardwareAirplaneMode + : this.active; + } diff --git a/gnome-shell-43.0/debian/patches/config-Assume-screen-recording-is-always-available.patch b/gnome-shell-43.0/debian/patches/config-Assume-screen-recording-is-always-available.patch new file mode 100644 index 0000000..0e76f7b --- /dev/null +++ b/gnome-shell-43.0/debian/patches/config-Assume-screen-recording-is-always-available.patch @@ -0,0 +1,27 @@ +From: Daniel van Vugt +Date: Wed, 12 Oct 2022 14:47:19 +0800 +Subject: config: Assume screen recording is always available + +Which is safer than calling gst_init_check() as it may deadlock when it +spawns client `gst-plugin-scanner` which then tries to connect back to +us (for some plugins like gstvaapi). + +Fixes: https://launchpad.net/bugs/1988488 +--- + js/misc/config.js.in | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/js/misc/config.js.in b/js/misc/config.js.in +index 7fc0e63..5092c1e 100644 +--- a/js/misc/config.js.in ++++ b/js/misc/config.js.in +@@ -21,8 +21,4 @@ var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@' + + var HAVE_BLUETOOTH = pkg.checkSymbol('GnomeBluetooth', '3.0', + 'Client.default_adapter_state') +-var HAVE_RECORDER = +- pkg.checkSymbol('Gst', '1.0') && +- imports.gi.Gst.init_check(null) && +- imports.gi.Gst.ElementFactory.find('pipewiresrc') && +- imports.gi.Gst.ElementFactory.find('filesrc'); ++var HAVE_RECORDER = true; diff --git a/gnome-shell-43.0/debian/patches/debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch b/gnome-shell-43.0/debian/patches/debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch new file mode 100644 index 0000000..9759e4b --- /dev/null +++ b/gnome-shell-43.0/debian/patches/debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch @@ -0,0 +1,32 @@ +From: Simon McVittie +Date: Sun, 12 Sep 2021 10:41:54 +0100 +Subject: gnome-shell-extension-prefs: Give Debian-specific advice + +We package gnome-extensions-app in the same binary package as +gnome-shell-extension-prefs, so there's never a need to download it from +Flathub. + +Forwarded: not-needed, Debian-specific +Signed-off-by: Simon McVittie +--- + src/gnome-shell-extension-prefs | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/gnome-shell-extension-prefs b/src/gnome-shell-extension-prefs +index 303b196..a59ffed 100755 +--- a/src/gnome-shell-extension-prefs ++++ b/src/gnome-shell-extension-prefs +@@ -13,10 +13,10 @@ openPrefs() { + } + + cat >&2 < +Date: Tue, 1 Mar 2022 11:57:20 +0100 +Subject: gmd/util: Only start fingerprint service synchronously when it's + default + +On ShellUserVerifier construction we used to start fprintd in a sync +fashion all the times, however in case the daemon had startup failures +or was hanging for whatever reason (like due to devices probing, given +that fprintd synchronously wait for them all to be initialized) we used +to just fail, leaving gdm or the lockscreen inusable. + +While this could be prevented with a try/catch statement, there's no +much point to wait for fprintd if that's not the default authentication +service, and so: + - If we use gdm-fingerprint as default auth method, use a sync call to + initialize it and in case of failures, just continue with fallback + authentication mechanism (password) + + - Otherwise, asynchronously initialize fprintd and continue with the + ShellUserVerifier without fingerprint support until we got a reply. + In case the service fails to deliver us a result, we don't give up + but we will try doing that at each authentication via + _checkForFingerprintReader(). + In case all works properly, as per the previous commit, once the + initialization is done, we'll start the fingerprint PAM gdm service. + +Fixes #5168 + +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1962566 +Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5168 +Origin: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2267 +--- + js/gdm/util.js | 128 +++++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 101 insertions(+), 27 deletions(-) + +diff --git a/js/gdm/util.js b/js/gdm/util.js +index 43647e7..7a335c1 100644 +--- a/js/gdm/util.js ++++ b/js/gdm/util.js +@@ -44,6 +44,7 @@ var DISABLE_USER_LIST_KEY = 'disable-user-list'; + + // Give user 48ms to read each character of a PAM message + var USER_READ_TIME = 48; ++const FINGERPRINT_SERVICE_PROXY_TIMEOUT = 5000; + const FINGERPRINT_ERROR_TIMEOUT_WAIT = 15; + + var MessageType = { +@@ -148,16 +149,49 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + this._preemptingService = null; + + this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); +- this._settings.connect('changed', +- this._updateDefaultService.bind(this)); +- this._updateDefaultService(); ++ this._settings.connect('changed', () => this._updateDefaultServiceWithFallback()); ++ ++ this._fingerprintReaderType = FingerprintReaderType.NONE; ++ if (this._settings.get_boolean(FINGERPRINT_AUTHENTICATION_KEY)) { ++ const fprintManager = new FprintManagerProxy(Gio.DBus.system, ++ 'net.reactivated.Fprint', ++ '/net/reactivated/Fprint/Manager', ++ null, ++ null, ++ Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES | ++ Gio.DBusProxyFlags.DO_NOT_AUTO_START_AT_CONSTRUCTION | ++ Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS); ++ ++ // Do not wait too much for fprintd to reply, as in case it hangs ++ // we should fail early without having the shell to misbehave because ++ fprintManager.set_default_timeout(FINGERPRINT_SERVICE_PROXY_TIMEOUT); + +- this._fprintManager = new FprintManagerProxy(Gio.DBus.system, +- 'net.reactivated.Fprint', +- '/net/reactivated/Fprint/Manager', +- null, +- null, +- Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES); ++ this._updateDefaultService(); ++ ++ if (!this._defaultService) { ++ // Fingerprint is the default one, we must wait for it! ++ try { ++ const [devicePath] = fprintManager.GetDefaultDeviceSync(); ++ this._fprintManager = fprintManager; ++ ++ const fprintDeviceProxy = new FprintDeviceProxy(Gio.DBus.system, ++ 'net.reactivated.Fprint', devicePath, null, null, ++ Gio.DBusProxyFlags.NOT_CONNECT_SIGNALS); ++ this._setFingerprintReaderType(fprintDeviceProxy['scan-type']); ++ } catch (e) { ++ logError(e, 'Failed to initialize fprintd service'); ++ } finally { ++ this._updateDefaultServiceWithFallback(); ++ } ++ } else { ++ // Ensure fingerprint service starts, but do not wait for it ++ this._updateFingerprintReaderType(fprintManager, null).then( ++ () => (this._fprintManager = fprintManager)).catch( ++ e => logError(e, 'Failed to initialize fprintd service')); ++ } ++ } else { ++ this._updateDefaultServiceWithFallback(); ++ } + this._smartcardManager = SmartcardManager.getSmartcardManager(); + + // We check for smartcards right away, since an inserted smartcard +@@ -176,6 +210,7 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + this.reauthenticating = false; + + this._failCounter = 0; ++ this._startedServices = new Set(); + this._unavailableServices = new Set(); + + this._credentialManagers = {}; +@@ -251,6 +286,7 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + + this._clearUserVerifier(); + this._clearMessageQueue(); ++ this._startedServices.clear(); + } + + destroy() { +@@ -374,27 +410,52 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + } + + async _checkForFingerprintReader() { +- this._fingerprintReaderType = FingerprintReaderType.NONE; +- +- if (!this._settings.get_boolean(FINGERPRINT_AUTHENTICATION_KEY) || +- this._fprintManager == null) { +- this._updateDefaultService(); ++ if (!this._fprintManager) { ++ this._updateDefaultServiceWithFallback(); + return; + } + ++ if (this._fingerprintReaderType !== FingerprintReaderType.NONE) ++ return; ++ ++ await this._updateFingerprintReaderType(this._fprintManager, this._cancellable); ++ } ++ ++ async _updateFingerprintReaderType(fprintManager, cancellable) { + try { +- const [device] = await this._fprintManager.GetDefaultDeviceAsync( +- Gio.DBusCallFlags.NONE, this._cancellable); +- const fprintDeviceProxy = new FprintDeviceProxy(Gio.DBus.system, +- 'net.reactivated.Fprint', +- device); +- const fprintDeviceType = fprintDeviceProxy['scan-type']; ++ // Wrappers don't support null cancellable, so let's cheat about it ++ const [devicePath] = await fprintManager.GetDefaultDeviceAsync( ++ cancellable ? cancellable : Gio.DBusCallFlags.NONE); ++ const fprintDeviceProxy = await new Promise((resolve, reject) => { ++ const proxy = new FprintDeviceProxy(Gio.DBus.system, ++ 'net.reactivated.Fprint', devicePath, (_, error) => { ++ if (error) ++ reject(error); ++ else ++ resolve(proxy); ++ }, cancellable, Gio.DBusProxyFlags.NOT_CONNECT_SIGNALS); ++ }); ++ this._setFingerprintReaderType(fprintDeviceProxy['scan-type']); ++ this._updateDefaultServiceWithFallback(); ++ ++ if (this._userVerifier && ++ !this._startedServices.has(FINGERPRINT_SERVICE_NAME)) { ++ if (!this._hold?.isAcquired()) ++ this._hold = new Batch.Hold(); ++ await this._maybeStartFingerprintVerification(); ++ } ++ } catch (e) { ++ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ logError(e); ++ } ++ } + +- this._fingerprintReaderType = fprintDeviceType === 'swipe' +- ? FingerprintReaderType.SWIPE +- : FingerprintReaderType.PRESS; +- this._updateDefaultService(); +- } catch (e) {} ++ _setFingerprintReaderType(fprintDeviceType) { ++ this._fingerprintReaderType = ++ FingerprintReaderType[fprintDeviceType.toUpperCase()]; ++ ++ if (this._fingerprintReaderType === undefined) ++ throw new Error(`Unexpected fingerprint device type '${fprintDeviceType}'`); + } + + _onCredentialManagerAuthenticated(credentialManager, _token) { +@@ -495,6 +556,7 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + 'problem', this._onProblem.bind(this), + 'info-query', this._onInfoQuery.bind(this), + 'secret-info-query', this._onSecretInfoQuery.bind(this), ++ 'conversation-started', this._onConversationStarted.bind(this), + 'conversation-stopped', this._onConversationStopped.bind(this), + 'service-unavailable', this._onServiceUnavailable.bind(this), + 'reset', this._onReset.bind(this), +@@ -538,6 +600,10 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + this._defaultService = SMARTCARD_SERVICE_NAME; + else if (this._fingerprintReaderType !== FingerprintReaderType.NONE) + this._defaultService = FINGERPRINT_SERVICE_NAME; ++ } ++ ++ _updateDefaultServiceWithFallback() { ++ this._updateDefaultService(); + + if (!this._defaultService) { + log("no authentication service is enabled, using password authentication"); +@@ -576,11 +642,14 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + + _beginVerification() { + this._startService(this._getForegroundService()); ++ this._maybeStartFingerprintVerification(); ++ } + ++ async _maybeStartFingerprintVerification() { + if (this._userName && + this._fingerprintReaderType !== FingerprintReaderType.NONE && + !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME)) +- this._startService(FINGERPRINT_SERVICE_NAME); ++ await this._startService(FINGERPRINT_SERVICE_NAME); + } + + _onChoiceListQuery(client, serviceName, promptMessage, list) { +@@ -673,8 +742,9 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + _onReset() { + // Clear previous attempts to authenticate + this._failCounter = 0; ++ this._startedServices.clear(); + this._unavailableServices.clear(); +- this._updateDefaultService(); ++ this._updateDefaultServiceWithFallback(); + + this.emit('reset'); + } +@@ -755,6 +825,10 @@ var ShellUserVerifier = class extends Signals.EventEmitter { + this._queueMessage(serviceName, errorMessage, MessageType.ERROR); + } + ++ _onConversationStarted(client, serviceName) { ++ this._startedServices.add(serviceName); ++ } ++ + _onConversationStopped(client, serviceName) { + // If the login failed with the preauthenticated oVirt credentials + // then discard the credentials and revert to default authentication diff --git a/gnome-shell-43.0/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch b/gnome-shell-43.0/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch new file mode 100644 index 0000000..cf413b8 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch @@ -0,0 +1,237 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Tue, 24 Oct 2017 02:15:13 +0200 +Subject: global: make possible to set debug-flags dynamically + +Adding {set,get}_debug_flags functions to the shell global object to +make possible to set this easily from looking class, making it easier +for developers and users to debug without having to restart the shell +with environment variables. + +Debug flags in main are updated when the "debug-flags" property is +changed. I'm keeping this as a string-list so that it's easier to update. + +https://bugzilla.gnome.org/show_bug.cgi?id=789377 + +Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=789377 +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/6 +--- + src/main.c | 60 ++++++++++++++++++++++++++++++++++++++++++------------ + src/shell-global.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ + src/shell-global.h | 3 +++ + 3 files changed, 101 insertions(+), 13 deletions(-) + +diff --git a/src/main.c b/src/main.c +index ac20be2..726afe9 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -276,14 +276,14 @@ shell_a11y_init (void) + } + + static void +-shell_init_debug (const char *debug_env) ++shell_update_debug (const char *debug_string) + { + static const GDebugKey keys[] = { + { "backtrace-warnings", SHELL_DEBUG_BACKTRACE_WARNINGS }, + { "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS }, + }; + +- _shell_debug = g_parse_debug_string (debug_env, keys, ++ _shell_debug = g_parse_debug_string (debug_string, keys, + G_N_ELEMENTS (keys)); + } + +@@ -385,6 +385,42 @@ dump_gjs_stack_on_signal (int signo) + _tracked_signals[signo] = TRUE; + } + ++static void ++reset_signal_handler_to_default (int signo) ++{ ++ signal (signo, SIG_DFL); ++ _tracked_signals[signo] = FALSE; ++} ++ ++static void ++setup_debug_signal_listners (void) ++{ ++ dump_gjs_stack_on_signal (SIGABRT); ++ dump_gjs_stack_on_signal (SIGFPE); ++ dump_gjs_stack_on_signal (SIGIOT); ++ dump_gjs_stack_on_signal (SIGTRAP); ++ ++ if ((_shell_debug & SHELL_DEBUG_BACKTRACE_SEGFAULTS)) ++ { ++ dump_gjs_stack_on_signal (SIGBUS); ++ dump_gjs_stack_on_signal (SIGSEGV); ++ } ++ else ++ { ++ reset_signal_handler_to_default (SIGBUS); ++ reset_signal_handler_to_default (SIGSEGV); ++ } ++} ++ ++static void ++global_notify_debug_flags (GObject *gobject, ++ GParamSpec *pspec, ++ gpointer data) ++{ ++ shell_update_debug (shell_global_get_debug_flags (shell_global_get ())); ++ setup_debug_signal_listners (); ++} ++ + static gboolean + list_modes (const char *option_name, + const char *value, +@@ -506,6 +542,7 @@ main (int argc, char **argv) + { + g_autoptr (MetaContext) context = NULL; + GError *error = NULL; ++ const char *debug_flags; + int ecode = EXIT_SUCCESS; + + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); +@@ -543,7 +580,8 @@ main (int argc, char **argv) + g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE); + g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE); + +- shell_init_debug (g_getenv ("SHELL_DEBUG")); ++ debug_flags = g_getenv ("SHELL_DEBUG"); ++ shell_update_debug (debug_flags); + + shell_dbus_init (meta_context_is_replacing (context)); + shell_a11y_init (); +@@ -557,18 +595,14 @@ main (int argc, char **argv) + if (session_mode == NULL) + session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user"; + +- _shell_global_init ("session-mode", session_mode, NULL); ++ _shell_global_init ("session-mode", session_mode, ++ "debug-flags", debug_flags, ++ NULL); + +- dump_gjs_stack_on_signal (SIGABRT); +- dump_gjs_stack_on_signal (SIGFPE); +- dump_gjs_stack_on_signal (SIGIOT); +- dump_gjs_stack_on_signal (SIGTRAP); ++ g_signal_connect (shell_global_get (), "notify::debug-flags", ++ G_CALLBACK (global_notify_debug_flags), NULL); + +- if ((_shell_debug & SHELL_DEBUG_BACKTRACE_SEGFAULTS)) +- { +- dump_gjs_stack_on_signal (SIGBUS); +- dump_gjs_stack_on_signal (SIGSEGV); +- } ++ setup_debug_signal_listners (); + + shell_profiler_init (); + +diff --git a/src/shell-global.c b/src/shell-global.c +index 0ccdb10..1676208 100644 +--- a/src/shell-global.c ++++ b/src/shell-global.c +@@ -59,6 +59,7 @@ struct _ShellGlobal { + Display *xdisplay; + + char *session_mode; ++ char *debug_flags; + + XserverRegion input_region; + +@@ -109,6 +110,7 @@ enum { + PROP_FRAME_TIMESTAMPS, + PROP_FRAME_FINISH_TIMESTAMP, + PROP_SWITCHEROO_CONTROL, ++ PROP_DEBUG_FLAGS, + + N_PROPS + }; +@@ -234,6 +236,9 @@ shell_global_set_property(GObject *object, + } + } + break; ++ case PROP_DEBUG_FLAGS: ++ shell_global_set_debug_flags (global, g_value_get_string (value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -316,6 +321,8 @@ shell_global_get_property(GObject *object, + break; + case PROP_SWITCHEROO_CONTROL: + g_value_set_object (value, global->switcheroo_control); ++ case PROP_DEBUG_FLAGS: ++ g_value_set_string (value, global->debug_flags); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +@@ -641,6 +648,13 @@ shell_global_class_init (ShellGlobalClass *klass) + G_TYPE_DBUS_PROXY, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + ++ props[PROP_DEBUG_FLAGS] = ++ g_param_spec_string ("debug-flags", ++ "Debug Flags", ++ "The debugging flags", ++ NULL, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ + g_object_class_install_properties (gobject_class, N_PROPS, props); + } + +@@ -1858,3 +1872,40 @@ _shell_global_locate_pointer (ShellGlobal *global) + { + g_signal_emit (global, shell_global_signals[LOCATE_POINTER], 0); + } ++ ++/** ++ * shell_global_get_debug_flags: ++ * @global: a #ShellGlobal ++ * ++ * Returns: (transfer none): The current debug flags ++ */ ++const gchar * ++shell_global_get_debug_flags (ShellGlobal *global) ++{ ++ g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL); ++ ++ return global->debug_flags; ++} ++ ++/** ++ * shell_global_set_debug_flags: ++ * @global: a #ShellGlobal ++ * @debug_flags: (nullable): A string for debugging flags ++ * ++ * Updates the debugging flags at runtime as the one set using the SHELL_DEBUG ++ * environment variables. Currently we support 'backtrace-warnings' and ++ * 'backtrace-segfaults' keys. ++ */ ++void ++shell_global_set_debug_flags (ShellGlobal *global, ++ const char *debug_flags) ++{ ++ g_return_if_fail (SHELL_IS_GLOBAL (global)); ++ ++ if (g_strcmp0 (global->debug_flags, debug_flags) != 0) ++ { ++ g_free (global->debug_flags); ++ global->debug_flags = g_strdup (debug_flags); ++ g_object_notify (G_OBJECT (global), "debug-flags"); ++ } ++} +diff --git a/src/shell-global.h b/src/shell-global.h +index 8d8238c..04c59d1 100644 +--- a/src/shell-global.h ++++ b/src/shell-global.h +@@ -88,6 +88,9 @@ void shell_global_set_persistent_state (ShellGlobal *global, + GVariant * shell_global_get_persistent_state (ShellGlobal *global, + const char *property_type, + const char *property_name); ++const char * shell_global_get_debug_flags (ShellGlobal *global); ++void shell_global_set_debug_flags (ShellGlobal *global, ++ const char *debug_flags); + + G_END_DECLS + diff --git a/gnome-shell-43.0/debian/patches/inhibitShortcutsDialog-Don-t-override-resource.patch b/gnome-shell-43.0/debian/patches/inhibitShortcutsDialog-Don-t-override-resource.patch new file mode 100644 index 0000000..8d264ba --- /dev/null +++ b/gnome-shell-43.0/debian/patches/inhibitShortcutsDialog-Don-t-override-resource.patch @@ -0,0 +1,69 @@ +From: =?utf-8?q?Florian_M=C3=BCllner?= +Date: Thu, 6 Oct 2022 14:30:20 +0200 +Subject: inhibitShortcutsDialog: Don't override resource + +PermissionStore's Set() method takes a complete permission +table, so when setting an app's permission, we are implicitly +removing all previously set entries for other apps. + +Switch to the SetPermission() method which sets the permission +for a single app. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5937 + +Part-of: +(cherry picked from commit 8590e3350145b3c652d3977d72fe0da7f1d8885c) +--- + .../org.freedesktop.impl.portal.PermissionStore.xml | 7 +++++++ + js/ui/inhibitShortcutsDialog.js | 12 ++++-------- + 2 files changed, 11 insertions(+), 8 deletions(-) + +diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml +index 75fbc46..55d3fc3 100644 +--- a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml ++++ b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml +@@ -13,6 +13,13 @@ + + + ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/js/ui/inhibitShortcutsDialog.js b/js/ui/inhibitShortcutsDialog.js +index f37c1f6..b6f1330 100644 +--- a/js/ui/inhibitShortcutsDialog.js ++++ b/js/ui/inhibitShortcutsDialog.js +@@ -1,5 +1,5 @@ + /* exported InhibitShortcutsDialog */ +-const { Clutter, Gio, GLib, GObject, Gtk, Meta, Pango, Shell, St } = imports.gi; ++const {Clutter, Gio, GObject, Gtk, Meta, Pango, Shell, St} = imports.gi; + + const Dialog = imports.ui.dialog; + const ModalDialog = imports.ui.modalDialog; +@@ -57,16 +57,12 @@ var InhibitShortcutsDialog = GObject.registerClass({ + if (!this._shouldUsePermStore() || this._permStore == null) + return; + +- let permissions = {}; +- permissions[this._app.get_id()] = [grant]; +- let data = GLib.Variant.new('av', {}); +- + try { +- await this._permStore.SetAsync(APP_PERMISSIONS_TABLE, ++ await this._permStore.SetPermissionAsync(APP_PERMISSIONS_TABLE, + true, + APP_PERMISSIONS_ID, +- permissions, +- data); ++ this._app.get_id(), ++ [grant]); + } catch (error) { + log(error.message); + } diff --git a/gnome-shell-43.0/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch b/gnome-shell-43.0/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch new file mode 100644 index 0000000..77652d2 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch @@ -0,0 +1,172 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Wed, 27 Mar 2019 16:14:39 +0100 +Subject: magnifier: Scale the sprite to match the current monitor scaling + +Compute the sprite texture scale (unfortunately using a workaround, based on +mutter cursor size preferences, tying to figure out the closest texture integer +scaling), and use this value to compute the scaling that should be applied to +the sprite in order to match the current monitor scaling. + +Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/475 +Applied-Upstream: no +Forwarded: yes +--- + js/ui/layout.js | 24 ++++++++++++++++++++---- + js/ui/magnifier.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 73 insertions(+), 6 deletions(-) + +diff --git a/js/ui/layout.js b/js/ui/layout.js +index 9393d04..0b11d24 100644 +--- a/js/ui/layout.js ++++ b/js/ui/layout.js +@@ -951,22 +951,38 @@ var LayoutManager = GObject.registerClass({ + return ws.get_work_area_for_monitor(monitorIndex); + } + ++ _findIndexForRect(x, y, width, height) { ++ let rect = new Meta.Rectangle({ ++ x: Math.floor(x), ++ y: Math.floor(y), ++ width: Math.ceil(x + width) - Math.floor(x), ++ height: Math.ceil(y + height) - Math.floor(y) ++ }); ++ return global.display.get_monitor_index_for_rect(rect); ++ } ++ + // This call guarantees that we return some monitor to simplify usage of it + // In practice all tracked actors should be visible on some monitor anyway + findIndexForActor(actor) { + let [x, y] = actor.get_transformed_position(); + let [w, h] = actor.get_transformed_size(); +- let rect = new Meta.Rectangle({ x, y, width: w, height: h }); +- return global.display.get_monitor_index_for_rect(rect); ++ return this._findIndexForRect(x, y, w, h); + } + +- findMonitorForActor(actor) { +- let index = this.findIndexForActor(actor); ++ _findMonitorForIndex(index) { + if (index >= 0 && index < this.monitors.length) + return this.monitors[index]; + return null; + } + ++ findMonitorForActor(actor) { ++ return this._findMonitorForIndex(this.findIndexForActor(actor)); ++ } ++ ++ findMonitorForPoint(x, y) { ++ return this._findMonitorForIndex(this._findIndexForRect(x, y, 1, 1)); ++ } ++ + _queueUpdateRegions() { + if (!this._updateRegionIdle) { + this._updateRegionIdle = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, +diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js +index f4012de..f8d235f 100644 +--- a/js/ui/magnifier.js ++++ b/js/ui/magnifier.js +@@ -46,6 +46,8 @@ var MouseSpriteContent = GObject.registerClass({ + }, class MouseSpriteContent extends GObject.Object { + _init() { + super._init(); ++ this._scale = 1.0; ++ this._monitorScale = 1.0; + this._texture = null; + } + +@@ -53,7 +55,10 @@ var MouseSpriteContent = GObject.registerClass({ + if (!this._texture) + return [false, 0, 0]; + +- return [true, this._texture.get_width(), this._texture.get_height()]; ++ let width = this._texture.get_width() / this._scale; ++ let height = this._texture.get_height() / this._scale; ++ ++ return [true, width, height]; + } + + vfunc_paint_content(actor, node, _paintContext) { +@@ -70,6 +75,29 @@ var MouseSpriteContent = GObject.registerClass({ + textureNode.add_rectangle(actor.get_content_box()); + } + ++ _textureScale() { ++ if (!this._texture) ++ return 1; ++ ++ /* This is a workaround to guess the sprite scale; while it works file ++ * in normal scenarios, it's not guaranteed to work in all the cases, ++ * and so we should actually add an API to mutter that will allow us ++ * to know the real spirte texture scaling in order to adapt it to the ++ * wanted one. */ ++ let avgSize = (this._texture.get_width() + this._texture.get_height()) / 2; ++ return Math.max (1, Math.floor (avgSize / Meta.prefs_get_cursor_size() + .1)); ++ } ++ ++ _recomputeScale() { ++ let scale = this._textureScale() / this._monitorScale; ++ ++ if (this._scale != scale) { ++ this._scale = scale; ++ return true; ++ } ++ return false; ++ } ++ + get texture() { + return this._texture; + } +@@ -84,7 +112,19 @@ var MouseSpriteContent = GObject.registerClass({ + + if (!oldTexture || !coglTexture || + oldTexture.get_width() != coglTexture.get_width() || +- oldTexture.get_height() != coglTexture.get_height()) ++ oldTexture.get_height() != coglTexture.get_height()) { ++ this._recomputeScale(); ++ this.invalidate_size(); ++ } ++ } ++ ++ get scale() { ++ return this._scale; ++ } ++ ++ set monitorScale(monitorScale) { ++ this._monitorScale = monitorScale; ++ if (this._recomputeScale()) + this.invalidate_size(); + } + }); +@@ -113,6 +153,8 @@ var Magnifier = class Magnifier extends Signals.EventEmitter { + this._settingsInit(aZoomRegion); + aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse); + ++ this._updateContentScale(); ++ + St.Settings.get().connect('notify::magnifier-active', () => { + this.setActive(St.Settings.get().magnifier_active); + }); +@@ -120,6 +162,13 @@ var Magnifier = class Magnifier extends Signals.EventEmitter { + this.setActive(St.Settings.get().magnifier_active); + } + ++ _updateContentScale() { ++ let monitor = Main.layoutManager.findMonitorForPoint(this.xMouse, ++ this.yMouse); ++ this._mouseSprite.content.monitorScale = monitor ? ++ monitor.geometry_scale : 1; ++ } ++ + /** + * showSystemCursor: + * Show the system mouse pointer. +@@ -256,6 +305,8 @@ var Magnifier = class Magnifier extends Signals.EventEmitter { + this.xMouse = xMouse; + this.yMouse = yMouse; + ++ this._updateContentScale(); ++ + let sysMouseOverAny = false; + this._zoomRegions.forEach(zoomRegion => { + if (zoomRegion.scrollToMousePos()) diff --git a/gnome-shell-43.0/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch b/gnome-shell-43.0/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch new file mode 100644 index 0000000..629d6b9 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch @@ -0,0 +1,47 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Thu, 2 Aug 2018 16:17:39 +0200 +Subject: main: add `backtrace-crashes-all` and `backtrace-all` + +These are just convenient aliases to not to have to list all the types, +as having more granularity is cool, but it might also cause some annoyance. + +https://bugzilla.gnome.org/show_bug.cgi?id=789377 + +Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=789377 +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/6 +--- + src/main.c | 7 +++++++ + src/shell-global.c | 2 ++ + 2 files changed, 9 insertions(+) + +diff --git a/src/main.c b/src/main.c +index 047ea87..6604fde 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -50,6 +50,13 @@ static const GDebugKey SHELL_DEBUG_KEYS[] = { + { "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS }, + { "backtrace-aborts", SHELL_DEBUG_BACKTRACE_ABORTS }, + { "backtrace-math-errors", SHELL_DEBUG_BACKTRACE_FPE }, ++ { "backtrace-crashes-all", SHELL_DEBUG_BACKTRACE_SEGFAULTS | ++ SHELL_DEBUG_BACKTRACE_ABORTS | ++ SHELL_DEBUG_BACKTRACE_FPE }, ++ { "backtrace-all", SHELL_DEBUG_BACKTRACE_WARNINGS | ++ SHELL_DEBUG_BACKTRACE_SEGFAULTS | ++ SHELL_DEBUG_BACKTRACE_ABORTS | ++ SHELL_DEBUG_BACKTRACE_FPE }, + }; + static int _default_debug_flags = SHELL_DEBUG_BACKTRACE_ABORTS | + SHELL_DEBUG_BACKTRACE_FPE; +diff --git a/src/shell-global.c b/src/shell-global.c +index 60b84e6..1f5ec82 100644 +--- a/src/shell-global.c ++++ b/src/shell-global.c +@@ -1898,6 +1898,8 @@ shell_global_get_debug_flags (ShellGlobal *global) + * - 'backtrace-segfaults' + * - 'backtrace-aborts' + * - 'backtrace-math-errors' ++ * - 'backtrace-crashes-all' ++ * - 'backtrace-all' + * - 'all' + */ + void diff --git a/gnome-shell-43.0/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch b/gnome-shell-43.0/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch new file mode 100644 index 0000000..4e02e7d --- /dev/null +++ b/gnome-shell-43.0/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch @@ -0,0 +1,169 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Tue, 24 Oct 2017 03:20:34 +0200 +Subject: main: increase the granularity of backtraces in SHELL_DEBUG + +Add support for multiple debug-keys for getting the backtraces, +allowing more control using both SHELL_DEBUG and/or set_debug_flags + +https://bugzilla.gnome.org/show_bug.cgi?id=789377 + +Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=789377 +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/6 +--- + src/main.c | 76 +++++++++++++++++++++++++++++++++++++++++------------- + src/shell-global.c | 10 ++++--- + 2 files changed, 65 insertions(+), 21 deletions(-) + +diff --git a/src/main.c b/src/main.c +index 726afe9..047ea87 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -34,16 +34,26 @@ extern GType gnome_shell_plugin_get_type (void); + static gboolean is_gdm_mode = FALSE; + static char *session_mode = NULL; + static int caught_signal = 0; ++static gboolean _tracked_signals[NSIG] = { 0 }; + + #define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 + #define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 + + enum { +- SHELL_DEBUG_BACKTRACE_WARNINGS = 1, +- SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2, ++ SHELL_DEBUG_BACKTRACE_WARNINGS = (1 << 0), ++ SHELL_DEBUG_BACKTRACE_SEGFAULTS = (1 << 1), ++ SHELL_DEBUG_BACKTRACE_ABORTS = (1 << 2), ++ SHELL_DEBUG_BACKTRACE_FPE = (1 << 3), + }; +-static int _shell_debug; +-static gboolean _tracked_signals[NSIG] = { 0 }; ++static const GDebugKey SHELL_DEBUG_KEYS[] = { ++ { "backtrace-warnings", SHELL_DEBUG_BACKTRACE_WARNINGS }, ++ { "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS }, ++ { "backtrace-aborts", SHELL_DEBUG_BACKTRACE_ABORTS }, ++ { "backtrace-math-errors", SHELL_DEBUG_BACKTRACE_FPE }, ++}; ++static int _default_debug_flags = SHELL_DEBUG_BACKTRACE_ABORTS | ++ SHELL_DEBUG_BACKTRACE_FPE; ++static int _shell_debug = 0; + + static void + shell_dbus_acquire_name (GDBusProxy *bus, +@@ -278,13 +288,23 @@ shell_a11y_init (void) + static void + shell_update_debug (const char *debug_string) + { +- static const GDebugKey keys[] = { +- { "backtrace-warnings", SHELL_DEBUG_BACKTRACE_WARNINGS }, +- { "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS }, +- }; ++ _shell_debug = g_parse_debug_string (debug_string, SHELL_DEBUG_KEYS, ++ G_N_ELEMENTS (SHELL_DEBUG_KEYS)); ++} ++ ++static char * ++debug_flags_to_string (void) ++{ ++ gsize i, j; ++ const char *enabled_flags[G_N_ELEMENTS (SHELL_DEBUG_KEYS) + 1] = { 0 }; ++ ++ for (i = 0, j = 0; i < G_N_ELEMENTS (SHELL_DEBUG_KEYS); ++i) ++ { ++ if ((_shell_debug & SHELL_DEBUG_KEYS[i].value)) ++ enabled_flags[j++] = SHELL_DEBUG_KEYS[i].key; ++ } + +- _shell_debug = g_parse_debug_string (debug_string, keys, +- G_N_ELEMENTS (keys)); ++ return g_strjoinv (":", (char**) enabled_flags); + } + + static GLogWriterOutput +@@ -395,10 +415,23 @@ reset_signal_handler_to_default (int signo) + static void + setup_debug_signal_listners (void) + { +- dump_gjs_stack_on_signal (SIGABRT); +- dump_gjs_stack_on_signal (SIGFPE); +- dump_gjs_stack_on_signal (SIGIOT); +- dump_gjs_stack_on_signal (SIGTRAP); ++ if ((_shell_debug & SHELL_DEBUG_BACKTRACE_ABORTS)) ++ { ++ dump_gjs_stack_on_signal (SIGABRT); ++ dump_gjs_stack_on_signal (SIGIOT); ++ dump_gjs_stack_on_signal (SIGTRAP); ++ } ++ else ++ { ++ reset_signal_handler_to_default (SIGABRT); ++ reset_signal_handler_to_default (SIGIOT); ++ reset_signal_handler_to_default (SIGTRAP); ++ } ++ ++ if ((_shell_debug & SHELL_DEBUG_BACKTRACE_FPE)) ++ dump_gjs_stack_on_signal (SIGFPE); ++ else ++ reset_signal_handler_to_default (SIGFPE); + + if ((_shell_debug & SHELL_DEBUG_BACKTRACE_SEGFAULTS)) + { +@@ -541,8 +574,9 @@ int + main (int argc, char **argv) + { + g_autoptr (MetaContext) context = NULL; ++ g_autofree char *debug_flags_string = NULL; + GError *error = NULL; +- const char *debug_flags; ++ const char *shell_debug; + int ecode = EXIT_SUCCESS; + + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); +@@ -580,8 +614,14 @@ main (int argc, char **argv) + g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE); + g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE); + +- debug_flags = g_getenv ("SHELL_DEBUG"); +- shell_update_debug (debug_flags); ++ shell_debug = g_getenv ("SHELL_DEBUG"); ++ ++ if (shell_debug) ++ shell_update_debug (shell_debug); ++ else ++ _shell_debug = _default_debug_flags; ++ ++ debug_flags_string = debug_flags_to_string (); + + shell_dbus_init (meta_context_is_replacing (context)); + shell_a11y_init (); +@@ -596,7 +636,7 @@ main (int argc, char **argv) + session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user"; + + _shell_global_init ("session-mode", session_mode, +- "debug-flags", debug_flags, ++ "debug-flags", debug_flags_string, + NULL); + + g_signal_connect (shell_global_get (), "notify::debug-flags", +diff --git a/src/shell-global.c b/src/shell-global.c +index 1676208..60b84e6 100644 +--- a/src/shell-global.c ++++ b/src/shell-global.c +@@ -1890,11 +1890,15 @@ shell_global_get_debug_flags (ShellGlobal *global) + /** + * shell_global_set_debug_flags: + * @global: a #ShellGlobal +- * @debug_flags: (nullable): A string for debugging flags ++ * @debug_flags: (nullable): A comma-separated string of debugging flags + * + * Updates the debugging flags at runtime as the one set using the SHELL_DEBUG +- * environment variables. Currently we support 'backtrace-warnings' and +- * 'backtrace-segfaults' keys. ++ * environment variables. Currently we support these keys: ++ * - 'backtrace-warnings' ++ * - 'backtrace-segfaults' ++ * - 'backtrace-aborts' ++ * - 'backtrace-math-errors' ++ * - 'all' + */ + void + shell_global_set_debug_flags (ShellGlobal *global, diff --git a/gnome-shell-43.0/debian/patches/main-show-an-error-message-on-gnome-shell-crash.patch b/gnome-shell-43.0/debian/patches/main-show-an-error-message-on-gnome-shell-crash.patch new file mode 100644 index 0000000..c1eeee2 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/main-show-an-error-message-on-gnome-shell-crash.patch @@ -0,0 +1,30 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Thu, 2 Aug 2018 15:59:20 +0200 +Subject: main: show an error message on gnome-shell crash + +When we call the crash signal handler, write on log the reason of the +crash, also to make easier to parse the logs later on, and being able +to understand if a stacktrace is coming from a crash or a different +gjs error. + +https://bugzilla.gnome.org/show_bug.cgi?id=789377 + +Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=789377 +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/6 +--- + src/main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/main.c b/src/main.c +index 29275cd..ac20be2 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -346,6 +346,8 @@ dump_gjs_stack_on_signal_handler (int signo) + struct sigaction sa = { .sa_handler = dump_gjs_stack_alarm_sigaction }; + gsize i; + ++ g_printerr ("GNOME Shell crashed with signal %d\n", signo); ++ + /* Ignore all the signals starting this point, a part the one we'll raise + * (which is implicitly ignored here through SA_RESETHAND), this is needed + * not to get this handler being called by other signals that we were diff --git a/gnome-shell-43.0/debian/patches/series b/gnome-shell-43.0/debian/patches/series new file mode 100644 index 0000000..562569e --- /dev/null +++ b/gnome-shell-43.0/debian/patches/series @@ -0,0 +1,31 @@ +gdm-util-Only-start-fingerprint-service-synchronously-whe.patch +debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch +Revert-build-Port-to-gcr4.patch +ubuntu/desktop_detect.patch +ubuntu/lightdm-user-switching.patch +ubuntu/lock_on_suspend.patch +ubuntu/background_login.patch +ubuntu/gdm_alternatives.patch +main-show-an-error-message-on-gnome-shell-crash.patch +global-make-possible-to-set-debug-flags-dynamically.patch +main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch +main-add-backtrace-crashes-all-and-backtrace-all.patch +sessionMode-add-support-for-debugFlags-parameter.patch +magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch +ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch +ubuntu/resolve_alternate_theme_path.patch +ubuntu/secure_mode_extension.patch +ubuntu/keep-ubuntu-logo-bright-lp1867133-v1.patch +ubuntu/configure_login_screen.patch +ubuntu/layout-Try-to-allocate-before-getting-size-of-tracke.patch +Revert-st-Apply-css-foreground-color-to-text-as-a-PangoAt.patch +ubuntu/main-Avoid-meta-finalize.patch +ubuntu/sessionMode-Add-support-for-configuring-an-icons-resource.patch +ubuntu/main-Support-loading-multiple-Yaru-theme-variants.patch +ubuntu/Revert-dash-Use-pin-instead-of-favorites.patch +ubuntu/darkMode-Add-support-to-Yaru-theme-color-variants.patch +config-Assume-screen-recording-is-always-available.patch +status-Use-fixed-sorting-of-input-sources-on-empty-MRU.patch +bluetooth-Show-the-Bluetooth-switch-in-more-cases.patch +status-volume-Include-origin-in-device-names.patch +inhibitShortcutsDialog-Don-t-override-resource.patch diff --git a/gnome-shell-43.0/debian/patches/sessionMode-add-support-for-debugFlags-parameter.patch b/gnome-shell-43.0/debian/patches/sessionMode-add-support-for-debugFlags-parameter.patch new file mode 100644 index 0000000..8439d86 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/sessionMode-add-support-for-debugFlags-parameter.patch @@ -0,0 +1,46 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Thu, 2 Aug 2018 16:05:13 +0200 +Subject: sessionMode: add support for `debugFlags` parameter + +A session can now define `debugFlags` from a json file, still leaving priority +to the environment variable. + +https://bugzilla.gnome.org/show_bug.cgi?id=789377 + +Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=789377 +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/6 +--- + js/ui/main.js | 7 +++++++ + js/ui/sessionMode.js | 1 + + 2 files changed, 8 insertions(+) + +diff --git a/js/ui/main.js b/js/ui/main.js +index 2d8804a..fc5ae80 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -139,6 +139,13 @@ function _sessionUpdated() { + _remoteAccessInhibited = true; + } + } ++ ++ if (!GLib.getenv('SHELL_DEBUG')) { ++ if (typeof sessionMode.debugFlags === 'string') ++ global.set_debug_flags(sessionMode.debugFlags); ++ else if (Array.isArray(sessionMode.debugFlags)) ++ global.set_debug_flags(sessionMode.debugFlags.join(':')) ++ } + } + + /** +diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js +index 4284366..053e678 100644 +--- a/js/ui/sessionMode.js ++++ b/js/ui/sessionMode.js +@@ -29,6 +29,7 @@ const _modes = { + showWelcomeDialog: false, + allowSettings: false, + allowScreencast: false, ++ debugFlags: [], + enabledExtensions: [], + hasRunDialog: false, + hasWorkspaces: false, diff --git a/gnome-shell-43.0/debian/patches/status-Use-fixed-sorting-of-input-sources-on-empty-MRU.patch b/gnome-shell-43.0/debian/patches/status-Use-fixed-sorting-of-input-sources-on-empty-MRU.patch new file mode 100644 index 0000000..1a88861 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/status-Use-fixed-sorting-of-input-sources-on-empty-MRU.patch @@ -0,0 +1,34 @@ +From: Carlos Garnacho +Date: Wed, 14 Sep 2022 20:20:14 +0200 +Subject: status: Use fixed sorting of input sources on empty MRU + +When updating the MRU sources if there was no prior MRU, we want +to go with the unmodified list of sources in visibility order. + +However iterating over object properties happens in an undetermined +order, so the initial MRU list ends up picking a value at random. + +In order to prefer the sources list in the same order than they +appear in the menu if there was no prior MRU, order the keys +when accessing it and building the initial list of sources. + +Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5873 +Part-of: +(cherry picked from commit 13c9fd2a668e137b9e2569dcdedb0a25b95ae9aa) +--- + js/ui/status/keyboard.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js +index 76a42f6..65b3962 100644 +--- a/js/ui/status/keyboard.js ++++ b/js/ui/status/keyboard.js +@@ -492,7 +492,7 @@ var InputSourceManager = class extends Signals.EventEmitter { + + _updateMruSources() { + let sourcesList = []; +- for (let i in this._inputSources) ++ for (let i of Object.keys(this._inputSources).sort((a, b) => a - b)) + sourcesList.push(this._inputSources[i]); + + this._keyboardManager.setUserLayouts(sourcesList.map(x => x.xkbId)); diff --git a/gnome-shell-43.0/debian/patches/status-volume-Include-origin-in-device-names.patch b/gnome-shell-43.0/debian/patches/status-volume-Include-origin-in-device-names.patch new file mode 100644 index 0000000..1745946 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/status-volume-Include-origin-in-device-names.patch @@ -0,0 +1,35 @@ +From: =?utf-8?q?Florian_M=C3=BCllner?= +Date: Mon, 3 Oct 2022 18:30:13 +0200 +Subject: status/volume: Include origin in device names + +The description alone may not be descriptive enough, so include +the origin (if available) to disambiguate the name. + +This is consistent with the Sound Settings panel. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5829 + +Part-of: +(cherry picked from commit 0ce2bc343b024142dddfe6e6bb57b51bfa407df9) +--- + js/ui/status/volume.js | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js +index 71a91cb..bd49cc3 100644 +--- a/js/ui/status/volume.js ++++ b/js/ui/status/volume.js +@@ -113,8 +113,11 @@ const StreamSlider = GObject.registerClass({ + if (!device) + return; + +- const item = new PopupMenu.PopupImageMenuItem( +- device.get_description(), device.get_gicon()); ++ const {description, origin} = device; ++ const name = origin ++ ? `${description} – ${origin}` ++ : description; ++ const item = new PopupMenu.PopupImageMenuItem(name, device.get_gicon()); + item.connect('activate', () => this._activateDevice(device)); + + this._deviceSection.addMenuItem(item); diff --git a/gnome-shell-43.0/debian/patches/ubuntu/Revert-dash-Use-pin-instead-of-favorites.patch b/gnome-shell-43.0/debian/patches/ubuntu/Revert-dash-Use-pin-instead-of-favorites.patch new file mode 100644 index 0000000..f647def --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/Revert-dash-Use-pin-instead-of-favorites.patch @@ -0,0 +1,90 @@ +From: Gunnar Hjalmarsson +Date: Mon, 11 Apr 2022 21:10:37 +0200 +Subject: Revert "dash: Use pin instead of favorites" + +This effectively reverts this commit when using the ubuntu session: +https://gitlab.gnome.org/GNOME/gnome-shell/-/commit/a67877f5 + +We do that as a temporary measure in Ubuntu 22.04 in order to address +a translation issue. The issue was reported by Mitsuya Shibata: + +* https://github.com/micheleg/dash-to-dock/issues/1697 + +* https://lists.ubuntu.com/archives/ubuntu-translators/2022-April/007829.html + +In short: By using the old labels for those menu items, we can make use +of existing gnome-shell translations in Launchpad both for gnome-shell +and ubuntu-dock. Thanks Jeremy Bicha for the idea! + +So even if it technically introduces new translatable strings very late, +it does not break the UIF spirit. + +Forwarded: not-needed +--- + js/ui/appFavorites.js | 12 ++++++++++-- + js/ui/appMenu.js | 5 +++-- + js/ui/dash.js | 3 +-- + 3 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js +index d8a3018..b4460bb 100644 +--- a/js/ui/appFavorites.js ++++ b/js/ui/appFavorites.js +@@ -163,7 +163,11 @@ class AppFavorites extends Signals.EventEmitter { + + let app = Shell.AppSystem.get_default().lookup_app(appId); + +- let msg = _('%s has been pinned to the dash.').format(app.get_name()); ++ let msg; ++ if (imports.misc.desktop.is('ubuntu')) ++ msg = _('%s has been added to your favorites.').format(app.get_name()); ++ else ++ msg = _('%s has been pinned to the dash.').format(app.get_name()); + Main.overview.setMessage(msg, { + forFeedback: true, + undoCallback: () => this._removeFavorite(appId), +@@ -196,7 +200,11 @@ class AppFavorites extends Signals.EventEmitter { + if (!this._removeFavorite(appId)) + return; + +- let msg = _('%s has been unpinned from the dash.').format(app.get_name()); ++ let msg; ++ if (imports.misc.desktop.is('ubuntu')) ++ msg = _('%s has been removed from your favorites.').format(app.get_name()); ++ else ++ msg = _('%s has been unpinned from the dash.').format(app.get_name()); + Main.overview.setMessage(msg, { + forFeedback: true, + undoCallback: () => this._addFavorite(appId, pos), +diff --git a/js/ui/appMenu.js b/js/ui/appMenu.js +index 010fdb3..e96043b 100644 +--- a/js/ui/appMenu.js ++++ b/js/ui/appMenu.js +@@ -153,9 +153,10 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu { + return; + + const { id } = this._app; ++ const isUbuntu = imports.misc.desktop.is('ubuntu'); + this._toggleFavoriteItem.label.text = this._appFavorites.isFavorite(id) +- ? _('Unpin') +- : _('Pin to Dash'); ++ ? (isUbuntu ? _('Remove from Favorites') : _('Unpin')) ++ : (isUbuntu ? _('Add to Favorites') : _('Pin to Dash')); + } + + _updateGpuItem() { +diff --git a/js/ui/dash.js b/js/ui/dash.js +index a40377c..3ff2219 100644 +--- a/js/ui/dash.js ++++ b/js/ui/dash.js +@@ -244,9 +244,8 @@ class ShowAppsIcon extends DashItemContainer { + this.toggleButton.set_hover(canRemove); + if (this._iconActor) + this._iconActor.set_hover(canRemove); +- + if (canRemove) +- this.setLabelText(_('Unpin')); ++ this.setLabelText(imports.misc.desktop.is('ubuntu') ? _('Remove from Favorites') : _('Unpin')); + else + this.setLabelText(_("Show Applications")); + } diff --git a/gnome-shell-43.0/debian/patches/ubuntu/background_login.patch b/gnome-shell-43.0/debian/patches/ubuntu/background_login.patch new file mode 100644 index 0000000..a40d897 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/background_login.patch @@ -0,0 +1,39 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Tue, 10 Sep 2019 13:13:14 +0100 +Subject: js/ui/background.js: Match theme login screen color + +This way the login animation will appear to expand over the login +screen (system background) instead of suddenly replacing it. + +Original author: Didier Roche +Original author: Daniel van Vugt +Author: Marco Trevisan + +Last-Update: 2022-08-30 +Forwarded: not-needed +--- + js/ui/background.js | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/js/ui/background.js b/js/ui/background.js +index 829ffb4..8701941 100644 +--- a/js/ui/background.js ++++ b/js/ui/background.js +@@ -530,7 +530,16 @@ var SystemBackground = GObject.registerClass({ + _init() { + if (_systemBackground == null) { + _systemBackground = new Meta.Background({ meta_display: global.display }); +- _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR); ++ ++ let backgroundColor = DEFAULT_BACKGROUND_COLOR; ++ if (imports.misc.desktop.is("ubuntu")) { ++ const dummyBgActor = new imports.gi.St.Widget({ name: 'lockDialogGroup' }); ++ Main.uiGroup.add_actor(dummyBgActor); ++ backgroundColor = dummyBgActor.get_theme_node().get_background_color(); ++ dummyBgActor.destroy(); ++ } ++ ++ _systemBackground.set_color(backgroundColor); + } + + super._init({ diff --git a/gnome-shell-43.0/debian/patches/ubuntu/configure_login_screen.patch b/gnome-shell-43.0/debian/patches/ubuntu/configure_login_screen.patch new file mode 100644 index 0000000..86d1417 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/configure_login_screen.patch @@ -0,0 +1,199 @@ +From: Ubuntu Developers +Date: Thu, 11 Mar 2021 10:12:06 +0200 +Subject: Allow configuring login screen background + +Configuring login screen backgound and properties is a recurring request +especially on corporate environment. +Allows to override the default embedded style in the theme with specific +gsettings keys. +Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/680 +Bug: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1918613 +Origin: ubuntu +--- + data/com.ubuntu.login-screen.gschema.xml.in | 70 +++++++++++++++++++++++++++++ + data/meson.build | 8 +++- + js/ui/background.js | 4 ++ + js/ui/screenShield.js | 37 +++++++++++++++ + 4 files changed, 118 insertions(+), 1 deletion(-) + create mode 100644 data/com.ubuntu.login-screen.gschema.xml.in + +diff --git a/data/com.ubuntu.login-screen.gschema.xml.in b/data/com.ubuntu.login-screen.gschema.xml.in +new file mode 100644 +index 0000000..ee8b3a2 +--- /dev/null ++++ b/data/com.ubuntu.login-screen.gschema.xml.in +@@ -0,0 +1,70 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ '' ++ ++ Sets the background image for the login screen. ++ ++ ++ URI to use for the background image. Note that the backend only ++ supports local (file://) URIs. ++ It overrides the value defined in the default style sheet. ++ ++ ++ ++ '' ++ ++ The background-color property sets the background color. ++ ++ ++ The background-color property sets the background color to use when ++ the background picture URI is missing or when it doesn't cover the whole background. ++ It overrides the value defined in the default style sheet. ++ ++ ++ ++ 'default' ++ ++ The background-repeat property sets if/how the background image will be repeated. ++ ++ ++ The background-repeat property sets if/how a background image will be repeated. ++ By default, a background-image is repeated both vertically and horizontally. ++ ++ It overrides the value defined in the default style sheet. ++ ++ ++ ++ 'default' ++ ++ The background-size property specifies the size of the background image. ++ ++ ++ The background-size property specifies the size of the background images. ++ ++ There are three keywords you can use with this property: ++ auto: The background image is displayed in its original size; ++ cover: Resize the background image to cover the entire container, even if it has to stretch the image or cut a little bit off one of the edges; ++ contain: Resize the background image to make sure the image is fully visible. ++ ++ It overrides the value defined in the default style sheet. ++ ++ ++ ++ +diff --git a/data/meson.build b/data/meson.build +index 30d4917..22d6665 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -95,6 +95,12 @@ schema = configure_file( + configuration: schemaconf, + install_dir: schemadir + ) ++schema_ubuntu_login = configure_file( ++ input: 'com.ubuntu.login-screen.gschema.xml.in', ++ output: 'com.ubuntu.login-screen.gschema.xml', ++ configuration: schemaconf, ++ install_dir: schemadir ++) + install_data('00_org.gnome.shell.gschema.override', install_dir: schemadir) + + overrides_migration_conf = configuration_data() +@@ -132,7 +138,7 @@ endif + + # for unit tests - gnome.compile_schemas() only looks in srcdir + custom_target('compile-schemas', +- input: schema, ++ input: [schema, chema_ubuntu_login], + output: 'gschemas.compiled', + command: [find_program('glib-compile-schemas'), meson.current_build_dir()], + build_by_default: true) +diff --git a/js/ui/background.js b/js/ui/background.js +index 8701941..c055fcf 100644 +--- a/js/ui/background.js ++++ b/js/ui/background.js +@@ -533,7 +533,11 @@ var SystemBackground = GObject.registerClass({ + + let backgroundColor = DEFAULT_BACKGROUND_COLOR; + if (imports.misc.desktop.is("ubuntu")) { ++ const loginSettings = new Gio.Settings({ schema_id: 'com.ubuntu.login-screen' }); ++ const bgColor = loginSettings.get_string('background-color'); + const dummyBgActor = new imports.gi.St.Widget({ name: 'lockDialogGroup' }); ++ if (bgColor) ++ dummyBgActor.set_style(`background-color: ${bgColor};`); + Main.uiGroup.add_actor(dummyBgActor); + backgroundColor = dummyBgActor.get_theme_node().get_background_color(); + dummyBgActor.destroy(); +diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js +index 1cc5cb7..7a6867f 100644 +--- a/js/ui/screenShield.js ++++ b/js/ui/screenShield.js +@@ -29,6 +29,12 @@ const DISABLE_LOCK_KEY = 'disable-lock-screen'; + + const LOCKED_STATE_STR = 'screenShield.locked'; + ++const LOGIN_SCREEN_SCHEMA = 'com.ubuntu.login-screen'; ++const LOGIN_SCREEN_BACKGROUND_COLOR_KEY = 'background-color'; ++const LOGIN_SCREEN_BACKGROUND_PICTURE_URI_KEY = 'background-picture-uri'; ++const LOGIN_SCREEN_BACKGROUND_REPEAT_KEY = 'background-repeat'; ++const LOGIN_SCREEN_BACKGROUND_SIZE_KEY = 'background-size'; ++ + // ScreenShield animation time + // - STANDARD_FADE_TIME is used when the session goes idle + // - MANUAL_FADE_TIME is used for lowering the shield when asked by the user, +@@ -116,6 +122,16 @@ var ScreenShield = class extends Signals.EventEmitter { + this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); + this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this)); + ++ this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); ++ [ ++ LOGIN_SCREEN_BACKGROUND_COLOR_KEY, ++ LOGIN_SCREEN_BACKGROUND_PICTURE_URI_KEY, ++ LOGIN_SCREEN_BACKGROUND_REPEAT_KEY, ++ LOGIN_SCREEN_BACKGROUND_SIZE_KEY, ++ ].forEach(schema => this._loginScreenSettings.connect(`changed::${schema}`, ++ () => this._refreshBackground())); ++ this._refreshBackground(); ++ + this._isModal = false; + this._isGreeter = false; + this._isActive = false; +@@ -216,6 +232,27 @@ var ScreenShield = class extends Signals.EventEmitter { + return this._isModal; + } + ++ _refreshBackground() { ++ const inlineStyle = []; ++ ++ const getSetting = s => this._loginScreenSettings.get_string(s); ++ const backgroundColor = getSetting(LOGIN_SCREEN_BACKGROUND_COLOR_KEY); ++ const backgroundPictureUri = getSetting(LOGIN_SCREEN_BACKGROUND_PICTURE_URI_KEY); ++ const backgroundRepeat = getSetting(LOGIN_SCREEN_BACKGROUND_REPEAT_KEY); ++ const backgroundSize = getSetting(LOGIN_SCREEN_BACKGROUND_SIZE_KEY); ++ ++ if (backgroundColor) ++ inlineStyle.push(`background-color: ${backgroundColor}`); ++ if (backgroundPictureUri) ++ inlineStyle.push(`background-image: url("${backgroundPictureUri}")`); ++ if (backgroundRepeat !== 'default') ++ inlineStyle.push(`background-repeat: ${backgroundRepeat}`); ++ if (backgroundSize !== 'default') ++ inlineStyle.push(`background-size: ${backgroundSize}`); ++ ++ this._lockDialogGroup.set_style(inlineStyle.join('; ')); ++ } ++ + async _syncInhibitor() { + const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY) || + this._settings.get_boolean(SUSPEND_LOCK_ENABLED_KEY); diff --git a/gnome-shell-43.0/debian/patches/ubuntu/darkMode-Add-support-to-Yaru-theme-color-variants.patch b/gnome-shell-43.0/debian/patches/ubuntu/darkMode-Add-support-to-Yaru-theme-color-variants.patch new file mode 100644 index 0000000..57a5ffc --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/darkMode-Add-support-to-Yaru-theme-color-variants.patch @@ -0,0 +1,81 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Wed, 24 Aug 2022 19:15:36 +0200 +Subject: darkMode: Add support to Yaru theme color variants + +Support switching to dark mode when using the Yaru theme color accents. +--- + js/ui/status/darkMode.js | 43 +++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 41 insertions(+), 2 deletions(-) + +diff --git a/js/ui/status/darkMode.js b/js/ui/status/darkMode.js +index d1ec2bd..ea0dc6a 100644 +--- a/js/ui/status/darkMode.js ++++ b/js/ui/status/darkMode.js +@@ -1,5 +1,5 @@ + /* exported Indicator */ +-const {Gio, GObject} = imports.gi; ++const {Gio, GObject, St} = imports.gi; + + const Main = imports.ui.main; + const {QuickToggle, SystemIndicator} = imports.ui.quickSettings; +@@ -18,6 +18,9 @@ class DarkModeToggle extends QuickToggle { + this._changedId = this._settings.connect('changed::color-scheme', + () => this._sync()); + ++ St.Settings.get().connect('notify::gtk-theme', () => this._sync()); ++ St.Settings.get().connect('notify::gtk-theme-variant', () => this._sync()); ++ + this.connectObject( + 'destroy', () => this._settings.run_dispose(), + 'clicked', () => this._toggleMode(), +@@ -27,13 +30,49 @@ class DarkModeToggle extends QuickToggle { + + _toggleMode() { + Main.layoutManager.screenTransition.run(); ++ const preferDark = !this.checked; ++ const {gtkTheme, gtkThemeVariant} = St.Settings.get(); ++ const themeVariant = gtkThemeVariant?.toLowerCase(); + this._settings.set_string('color-scheme', + this.checked ? 'default' : 'prefer-dark'); ++ ++ if (gtkTheme === 'Yaru') ++ this._setYaruSettings(themeVariant, preferDark); ++ } ++ ++ _setYaruSettings(themeVariant, preferDark) { ++ const currentlyDark = themeVariant === 'dark' || themeVariant?.endsWith('-dark'); ++ if (currentlyDark) ++ themeVariant = themeVariant.slice(0, -'-dark'.length); ++ ++ if (currentlyDark !== preferDark) { ++ const newTheme = `Yaru${ ++ themeVariant ? `-${themeVariant}` : ''}${ ++ preferDark ? '-dark' : ''}`; ++ ++ this._settings.set_string('gtk-theme', newTheme); ++ this._settings.set_string('icon-theme', newTheme); ++ } ++ ++ const schemaSource = Gio.SettingsSchemaSource.get_default(); ++ const geditSchema = schemaSource.lookup('org.gnome.gedit.preferences.editor', true); ++ ++ if (geditSchema) { ++ const geditSettings = Gio.Settings.new_full(geditSchema, null, null); ++ const geditScheme = geditSettings.get_user_value('scheme')?.unpack(); ++ ++ if (geditScheme?.startsWith('Yaru') && ++ geditScheme.endsWith('-dark') !== preferDark) ++ geditSettings.set_string('scheme', `Yaru${preferDark ? '-dark' : ''}`); ++ } + } + + _sync() { + const colorScheme = this._settings.get_string('color-scheme'); +- const checked = colorScheme === 'prefer-dark'; ++ const {gtkTheme, gtkThemeVariant} = St.Settings.get(); ++ let checked = colorScheme === 'prefer-dark'; ++ if (gtkTheme === 'Yaru' && !gtkThemeVariant?.endsWith('dark')) ++ checked = false; + if (this.checked !== checked) + this.set({checked}); + } diff --git a/gnome-shell-43.0/debian/patches/ubuntu/desktop_detect.patch b/gnome-shell-43.0/debian/patches/ubuntu/desktop_detect.patch new file mode 100644 index 0000000..872324f --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/desktop_detect.patch @@ -0,0 +1,66 @@ +From: Ubuntu Developers +Date: Wed, 20 Jun 2018 19:22:06 +0200 +Subject: Add an helper to detect current desktop + +We will differentiate some behavior depending on current desktop. Add an +helper to centralize the current desktop detection. +Forwarded: not-needed +Origin: ubuntu +=================================================================== +--- + js/js-resources.gresource.xml | 1 + + js/misc/desktop.js | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+) + create mode 100644 js/misc/desktop.js + +diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml +index 76b5f95..5babd0f 100644 +--- a/js/js-resources.gresource.xml ++++ b/js/js-resources.gresource.xml +@@ -13,6 +13,7 @@ + + misc/config.js + misc/extensionUtils.js ++ misc/desktop.js + misc/fileUtils.js + misc/dbusUtils.js + misc/gnomeSession.js +diff --git a/js/misc/desktop.js b/js/misc/desktop.js +new file mode 100644 +index 0000000..8bdca57 +--- /dev/null ++++ b/js/misc/desktop.js +@@ -0,0 +1,33 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const GLib = imports.gi.GLib; ++ ++// current desktop doesn't change unless we restart the shell or control ++// the env variable. It's safe to cache matching result ++const _currentDesktopsMatches = new Map(); ++ ++// is: ++// @name: desktop string you want to assert if it matches the current desktop env ++// ++// The function examples XDG_CURRENT_DESKTOP and return if the current desktop ++// is part of that desktop string. ++// ++// Return value: if the environment isn't set or doesn't match, return False ++// otherwise, return True. ++function is(name) { ++ if (!_currentDesktopsMatches.size) { ++ const desktopsEnv = GLib.getenv('XDG_CURRENT_DESKTOP'); ++ if (!desktopsEnv) { ++ _currentDesktopsMatches.set(name, false); ++ return false; ++ } ++ ++ const desktops = desktopsEnv.split(':'); ++ desktops.forEach(d => _currentDesktopsMatches.set(d, true)); ++ ++ if (!_currentDesktopsMatches.size) ++ _currentDesktopsMatches.set(name, _currentDesktopsMatches.has(name)); ++ } ++ ++ return !!_currentDesktopsMatches.get(name); ++} diff --git a/gnome-shell-43.0/debian/patches/ubuntu/gdm_alternatives.patch b/gnome-shell-43.0/debian/patches/ubuntu/gdm_alternatives.patch new file mode 100644 index 0000000..2ba4823 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/gdm_alternatives.patch @@ -0,0 +1,42 @@ +From: Jeremy Soller +Date: Wed, 20 Jun 2018 19:22:06 +0200 +Subject: Add support for GDM theme alternatives + +GNOME vanilla and systemd76 derivative ships their own GDM theme. + +This allows to provide alternative gresource file for gdm3 that must contain +a `gdm3.css` stylesheet that will be applied. + +Bug: https://bugzilla.gnome.org/show_bug.cgi?id=787454 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1715722 +Last-Update: 2017-09-08 +--- + data/gnome-shell-theme.gresource.xml | 1 + + js/ui/sessionMode.js | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/data/gnome-shell-theme.gresource.xml b/data/gnome-shell-theme.gresource.xml +index 24b3be8..2632e5d 100644 +--- a/data/gnome-shell-theme.gresource.xml ++++ b/data/gnome-shell-theme.gresource.xml +@@ -9,6 +9,7 @@ + checkbox-off-focused.svg + checkbox-off-light.svg + checkbox-off.svg ++ gnome-shell.css + gnome-shell.css + gnome-shell-high-contrast.css + gnome-shell-start.svg +diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js +index b38bcdf..4284366 100644 +--- a/js/ui/sessionMode.js ++++ b/js/ui/sessionMode.js +@@ -50,6 +50,8 @@ const _modes = { + + 'gdm': { + hasNotifications: true, ++ stylesheetName: 'gdm.css', ++ themeResourceName: 'gdm-theme.gresource', + isGreeter: true, + isPrimary: true, + unlockDialog: imports.gdm.loginDialog.LoginDialog, diff --git a/gnome-shell-43.0/debian/patches/ubuntu/keep-ubuntu-logo-bright-lp1867133-v1.patch b/gnome-shell-43.0/debian/patches/ubuntu/keep-ubuntu-logo-bright-lp1867133-v1.patch new file mode 100644 index 0000000..3732a23 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/keep-ubuntu-logo-bright-lp1867133-v1.patch @@ -0,0 +1,36 @@ +From: Daniel van Vugt +Date: Thu, 2 Apr 2020 17:16:27 +0800 +Subject: Keep the Ubuntu logo at full brightness during startup animation + +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1867133 +Forwarded: not-needed +Last-Update: 2020-03-18 +--- + js/gdm/loginDialog.js | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js +index 6071936..196fab5 100644 +--- a/js/gdm/loginDialog.js ++++ b/js/gdm/loginDialog.js +@@ -1260,7 +1260,11 @@ var LoginDialog = GObject.registerClass({ + { sortGroup: CtrlAltTab.SortGroup.MIDDLE }); + this.activate(); + +- this.opacity = 0; ++ // Clutter doesn't yet fully support invisible parents with forced ++ // visible children and will make everything invisible (flicker) on ++ // the first frame if we start at 0. So we start at 1 instead... ++ this.opacity = 1; ++ this._logoBin.set_opacity_override(255); + + this._grab = Main.pushModal(global.stage, { actionMode: Shell.ActionMode.LOGIN_SCREEN }); + +@@ -1268,6 +1272,7 @@ var LoginDialog = GObject.registerClass({ + opacity: 255, + duration: 1000, + mode: Clutter.AnimationMode.EASE_IN_QUAD, ++ onComplete: () => { this._logoBin.set_opacity_override(-1); }, + }); + + return true; diff --git a/gnome-shell-43.0/debian/patches/ubuntu/layout-Try-to-allocate-before-getting-size-of-tracke.patch b/gnome-shell-43.0/debian/patches/ubuntu/layout-Try-to-allocate-before-getting-size-of-tracke.patch new file mode 100644 index 0000000..eeae620 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/layout-Try-to-allocate-before-getting-size-of-tracke.patch @@ -0,0 +1,34 @@ +From: Daniel van Vugt +Date: Wed, 31 Mar 2021 17:59:09 +0800 +Subject: layout: Try to allocate before getting size of tracked actors + +Because we're about to `get_transformed_{position,size}` of each, +which will return NaNs if not yet allocated. Those NaNs were finding +their way into the workspace strut definitions on startup and not +getting corrected until after the startup animation completed. This +meant any extensions depending on the `workareas-changed` signal were +getting an incorrect workarea (the whole workspace) and so were +rendered out of place during the login animation. Now they're not. + +Author: Daniel van Vugt +Origin: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1785 +Bug-Ubuntu: https://launchpad.net/bugs/1917939, https://launchpad.net/bugs/1919979 +Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/-/issues/1627 +Forwarded: yes +Last-Update: 2021-04-07 +--- + js/ui/layout.js | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/js/ui/layout.js b/js/ui/layout.js +index 0b11d24..42c7a36 100644 +--- a/js/ui/layout.js ++++ b/js/ui/layout.js +@@ -1026,6 +1026,7 @@ var LayoutManager = GObject.registerClass({ + if (!(actorData.affectsInputRegion && wantsInputRegion) && !actorData.affectsStruts) + continue; + ++ actorData.actor.get_allocation_box(); + let [x, y] = actorData.actor.get_transformed_position(); + let [w, h] = actorData.actor.get_transformed_size(); + x = Math.round(x); diff --git a/gnome-shell-43.0/debian/patches/ubuntu/lightdm-user-switching.patch b/gnome-shell-43.0/debian/patches/ubuntu/lightdm-user-switching.patch new file mode 100644 index 0000000..86125ec --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/lightdm-user-switching.patch @@ -0,0 +1,93 @@ +From: Tim Lunn +Date: Tue, 9 Oct 2012 11:18:28 +0200 +Subject: [PATCH] userMenu: allow user switching when using lightdm + +When running lightdm and gnome-shell, its currently not possible to +switch users via the usermenu. This commit adds a dbus call to +switch to the lightdm greeter. + +https://bugzilla.gnome.org/show_bug.cgi?id=685794 +--- + js/misc/systemActions.js | 47 ++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 40 insertions(+), 7 deletions(-) + +diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js +index c57afe5..e4b301f 100644 +--- a/js/misc/systemActions.js ++++ b/js/misc/systemActions.js +@@ -224,6 +224,34 @@ const SystemActions = GObject.registerClass({ + return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName; + } + ++ _lightdmLoginSession() { ++ try { ++ let seat = GLib.getenv("XDG_SEAT_PATH"); ++ let result = Gio.DBus.system.call_sync('org.freedesktop.DisplayManager', ++ seat, ++ 'org.freedesktop.DisplayManager.Seat', ++ 'SwitchToGreeter', null, null, ++ Gio.DBusCallFlags.NONE, ++ -1, null); ++ return result; ++ } catch(e) { ++ return false; ++ } ++ } ++ ++ _sensorProxyAppeared() { ++ this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH, ++ (proxy, error) => { ++ if (error) { ++ log(error.message); ++ return; ++ } ++ this._sensorProxy.connect('g-properties-changed', ++ () => { this._updateOrientationLock(); }); ++ this._updateOrientationLock(); ++ }); ++ } ++ + _updateOrientationLock() { + const available = this._monitorManager.get_panel_orientation_managed(); + +@@ -325,7 +353,7 @@ const SystemActions = GObject.registerClass({ + _updateLockScreen() { + let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; + let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY); +- this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen && LoginManager.canLock(); ++ this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen; + this.notify('can-lock-screen'); + } + +@@ -413,20 +441,25 @@ const SystemActions = GObject.registerClass({ + if (!this._actions.get(LOCK_SCREEN_ACTION_ID).available) + throw new Error('The lock-screen action is not available!'); + +- Main.screenShield.lock(true); ++ if (Main.screenShield) ++ Main.screenShield.lock(true); ++ else ++ this._lightdmLoginSession(); + } + + activateSwitchUser() { + if (!this._actions.get(SWITCH_USER_ACTION_ID).available) + throw new Error('The switch-user action is not available!'); + +- if (Main.screenShield) ++ if (Main.screenShield) { + Main.screenShield.lock(false); + +- Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, () => { +- Gdm.goto_login_session_sync(null); +- return false; +- }); ++ Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, () => { ++ Gdm.goto_login_session_sync(null); ++ return false; ++ }); ++ } else ++ this._lightdmLoginSession(); + } + + activateLogout() { diff --git a/gnome-shell-43.0/debian/patches/ubuntu/lock_on_suspend.patch b/gnome-shell-43.0/debian/patches/ubuntu/lock_on_suspend.patch new file mode 100644 index 0000000..6a701b7 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/lock_on_suspend.patch @@ -0,0 +1,48 @@ +From: Tim Lunn +Date: Wed, 20 Jun 2018 19:22:06 +0200 +Subject: add support for the ubuntu lock on suspend option + +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1063110 +--- + js/ui/screenShield.js | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js +index 325fbff..1cc5cb7 100644 +--- a/js/ui/screenShield.js ++++ b/js/ui/screenShield.js +@@ -22,6 +22,7 @@ const { adjustAnimationTime } = imports.ui.environment; + const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver'; + const LOCK_ENABLED_KEY = 'lock-enabled'; + const LOCK_DELAY_KEY = 'lock-delay'; ++const SUSPEND_LOCK_ENABLED_KEY = 'ubuntu-lock-on-suspend'; + + const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown'; + const DISABLE_LOCK_KEY = 'disable-lock-screen'; +@@ -110,6 +111,7 @@ var ScreenShield = class extends Signals.EventEmitter { + + this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA }); + this._settings.connect(`changed::${LOCK_ENABLED_KEY}`, this._syncInhibitor.bind(this)); ++ this._settings.connect(`changed::${SUSPEND_LOCK_ENABLED_KEY}`, this._syncInhibitor.bind(this)); + + this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); + this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this)); +@@ -215,7 +217,8 @@ var ScreenShield = class extends Signals.EventEmitter { + } + + async _syncInhibitor() { +- const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY); ++ const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY) || ++ this._settings.get_boolean(SUSPEND_LOCK_ENABLED_KEY); + const lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY); + const inhibit = !!this._loginSession && this._loginSession.Active && + !this._isActive && lockEnabled && !lockLocked && +@@ -246,7 +249,7 @@ var ScreenShield = class extends Signals.EventEmitter { + + _prepareForSleep(loginManager, aboutToSuspend) { + if (aboutToSuspend) { +- if (this._settings.get_boolean(LOCK_ENABLED_KEY)) ++ if (this._settings.get_boolean(SUSPEND_LOCK_ENABLED_KEY)) + this.lock(true); + } else { + this._wakeUpScreen(); diff --git a/gnome-shell-43.0/debian/patches/ubuntu/main-Avoid-meta-finalize.patch b/gnome-shell-43.0/debian/patches/ubuntu/main-Avoid-meta-finalize.patch new file mode 100644 index 0000000..bd4728c --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/main-Avoid-meta-finalize.patch @@ -0,0 +1,70 @@ +From: Daniel van Vugt +Date: Tue, 5 Oct 2021 04:39:09 +0200 +Subject: main: Avoid meta and gjs finalization + +This is a workaround to maintain a clean environment for gnome-shell +and particularly JavaScript/GJS to shutdown without crashing. + +The main cause of shutdown crashes is _shell_global_destroy_gjs_context +needing Clutter/Cogl resources to clean up, when those resources have +already been destroyed by meta_finalize in meta_run. So by never calling +meta_finalize via meta_run, we can simply avoid all those ordering +conflicts that cause so many crashes. + +https://launchpad.net/bugs/1936826 verified fixed +https://launchpad.net/bugs/1942031 verified fixed +https://launchpad.net/bugs/1942121 verified fixed +https://launchpad.net/bugs/1943406 expected fixed +https://launchpad.net/bugs/1944054 expected fixed +https://launchpad.net/bugs/1945010 expected fixed +https://launchpad.net/bugs/1945116 expected fixed +https://launchpad.net/bugs/1944388 expected fixed +https://launchpad.net/bugs/1964458 expected fixed + +Proper fixes will eventually come upstream when these are finished or +replaced by something else: + +https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1759 +https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/648 + +Given that, and upstream's usual preference for proper permanent fixes, +this will not be forwarded. + +Bug-Ubuntu: https://launchpad.net/bugs/1936826, + https://launchpad.net/bugs/1942031, + https://launchpad.net/bugs/1942121, + https://launchpad.net/bugs/1943406, + https://launchpad.net/bugs/1944054, + https://launchpad.net/bugs/1945010, + https://launchpad.net/bugs/1945116, + https://launchpad.net/bugs/1944388, + https://launchpad.net/bugs/1964458 +Forwarded: no +Last-Update: 2022-03-25 +--- + src/main.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/src/main.c b/src/main.c +index 6604fde..77b035c 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -668,11 +668,17 @@ main (int argc, char **argv) + ecode = EXIT_FAILURE; + } + +- meta_context_destroy (g_steal_pointer (&context)); ++ // FIXME: We're leaking context here, but that's to prevent LP: #1936826 ++ g_steal_pointer (&context); + + shell_profiler_shutdown (); + + g_debug ("Doing final cleanup"); ++ ++ // Workaround live session crashes by leaking JS contexts (LP: #1964458) ++ if (g_strcmp0 (shell_global_get_session_mode (shell_global_get ()), "ubiquity") == 0) ++ return ecode; ++ + _shell_global_destroy_gjs_context (shell_global_get ()); + g_object_unref (shell_global_get ()); + diff --git a/gnome-shell-43.0/debian/patches/ubuntu/main-Support-loading-multiple-Yaru-theme-variants.patch b/gnome-shell-43.0/debian/patches/ubuntu/main-Support-loading-multiple-Yaru-theme-variants.patch new file mode 100644 index 0000000..b4c78a9 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/main-Support-loading-multiple-Yaru-theme-variants.patch @@ -0,0 +1,352 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Fri, 25 Feb 2022 01:07:12 +0100 +Subject: main: Support loading multiple Yaru theme variants + +Yaru can provide multiple variants, we can support using more theme +variants in GNOME shell as it happens on Gtk apps. + +So, make StSettings to compute the main theme and the chosen variant, +and we use those to pick the correct .css file. + +We don't make difference between dark/light themes here, as we assume +that the shell theme will always be dark or light. + +Forwarded: not-needed +--- + data/meson.build | 8 +- + data/org.gnome.shell.ubuntu.gschema.xml.in | 17 +++++ + js/ui/main.js | 42 +++++++++++ + src/st/meson.build | 1 + + src/st/st-settings.c | 114 +++++++++++++++++++++++++++++ + 5 files changed, 181 insertions(+), 1 deletion(-) + create mode 100644 data/org.gnome.shell.ubuntu.gschema.xml.in + +diff --git a/data/meson.build b/data/meson.build +index 22d6665..e16d108 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -95,6 +95,12 @@ schema = configure_file( + configuration: schemaconf, + install_dir: schemadir + ) ++schema_ubuntu = configure_file( ++ input: 'org.gnome.shell.ubuntu.gschema.xml.in', ++ output: 'org.gnome.shell.ubuntu.gschema.xml', ++ configuration: schemaconf, ++ install_dir: schemadir ++) + schema_ubuntu_login = configure_file( + input: 'com.ubuntu.login-screen.gschema.xml.in', + output: 'com.ubuntu.login-screen.gschema.xml', +@@ -138,7 +144,7 @@ endif + + # for unit tests - gnome.compile_schemas() only looks in srcdir + custom_target('compile-schemas', +- input: [schema, chema_ubuntu_login], ++ input: [schema, schema_ubuntu, schema_ubuntu_login], + output: 'gschemas.compiled', + command: [find_program('glib-compile-schemas'), meson.current_build_dir()], + build_by_default: true) +diff --git a/data/org.gnome.shell.ubuntu.gschema.xml.in b/data/org.gnome.shell.ubuntu.gschema.xml.in +new file mode 100644 +index 0000000..6f9cc62 +--- /dev/null ++++ b/data/org.gnome.shell.ubuntu.gschema.xml.in +@@ -0,0 +1,17 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 'default' ++ Color scheme ++ ++ The preferred color scheme for the shell user interface. Valid values are “default”, “prefer-dark”, “prefer-light”. ++ ++ ++ ++ +diff --git a/js/ui/main.js b/js/ui/main.js +index 33f62be..60969fd 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -186,6 +186,9 @@ function start() { + sessionMode.connect('updated', _sessionUpdated); + + St.Settings.get().connect('notify::high-contrast', _loadDefaultStylesheet); ++ St.Settings.get().connect('notify::gtk-theme', _loadDefaultStylesheet); ++ St.Settings.get().connect('notify::gtk-theme-variant', _loadDefaultStylesheet); ++ St.Settings.get().connect('notify::shell-color-scheme', _loadDefaultStylesheet); + + // Initialize ParentalControlsManager before the UI + ParentalControlsManager.getDefault(); +@@ -423,6 +426,38 @@ function _getStylesheet(name) { + return null; + } + ++function _getYaruStyleSheet(themeVariant) { ++ const { shellColorScheme: colorScheme } = St.Settings.get(); ++ const baseThemeName = sessionMode.stylesheetName.split(".css").at(0); ++ const isDark = themeVariant === 'dark' || themeVariant?.endsWith('-dark'); ++ let colorSchemeVariant; ++ ++ if (isDark && colorScheme == 'prefer-light') { ++ colorSchemeVariant = themeVariant.split('-').slice(0, -1).join('-'); ++ } else if (!isDark && colorScheme == 'prefer-dark' ) { ++ colorSchemeVariant = themeVariant ? `${themeVariant}-dark` : 'dark'; ++ } ++ ++ if (colorSchemeVariant !== undefined) { ++ if (colorSchemeVariant.length) ++ colorSchemeVariant = `-${colorSchemeVariant}`; ++ const stylesheet = _getStylesheet(`${baseThemeName}${colorSchemeVariant}.css`); ++ if (stylesheet) ++ return stylesheet; ++ } ++ ++ if (!themeVariant) ++ return null; ++ ++ const stylesheet = _getStylesheet(`${baseThemeName}-${themeVariant}.css`); ++ ++ // Try to use the dark theme if a dark variant is selected ++ if (!stylesheet && isDark) ++ return _getStylesheet(`${baseThemeName}-dark.css`); ++ ++ return stylesheet; ++} ++ + function _getDefaultStylesheet() { + let stylesheet = null; + let name = sessionMode.stylesheetName; +@@ -431,6 +466,13 @@ function _getDefaultStylesheet() { + if (St.Settings.get().high_contrast) + stylesheet = _getStylesheet(name.replace('.css', '-high-contrast.css')); + ++ if (stylesheet == null) { ++ const settings = St.Settings.get(); ++ ++ if (settings.gtkTheme === 'Yaru') ++ stylesheet = _getYaruStyleSheet(settings.gtkThemeVariant?.toLowerCase()); ++ } ++ + if (stylesheet == null) + stylesheet = _getStylesheet(sessionMode.stylesheetName); + +diff --git a/src/st/meson.build b/src/st/meson.build +index 717aa05..03a5978 100644 +--- a/src/st/meson.build ++++ b/src/st/meson.build +@@ -202,6 +202,7 @@ if get_option('tests') + ) + + test('CSS styling support', test_theme, ++ env: ['GSETTINGS_SCHEMA_DIR=' + meson.project_build_root() / 'data' ], + workdir: meson.current_source_dir() + ) + endif +diff --git a/src/st/st-settings.c b/src/st/st-settings.c +index 04bf68f..a5f584d 100644 +--- a/src/st/st-settings.c ++++ b/src/st/st-settings.c +@@ -33,6 +33,7 @@ + #define KEY_FONT_NAME "font-name" + #define KEY_HIGH_CONTRAST "high-contrast" + #define KEY_GTK_ICON_THEME "icon-theme" ++#define KEY_GTK_THEME "gtk-theme" + #define KEY_MAGNIFIER_ACTIVE "screen-magnifier-enabled" + #define KEY_DISABLE_SHOW_PASSWORD "disable-show-password" + +@@ -43,7 +44,10 @@ enum { + PROP_DRAG_THRESHOLD, + PROP_FONT_NAME, + PROP_HIGH_CONTRAST, ++ PROP_GTK_THEME, ++ PROP_GTK_THEME_VARIANT, + PROP_GTK_ICON_THEME, ++ PROP_SHELL_COLOR_SCHEME, + PROP_MAGNIFIER_ACTIVE, + PROP_SLOW_DOWN_FACTOR, + PROP_DISABLE_SHOW_PASSWORD, +@@ -60,10 +64,13 @@ struct _StSettings + GSettings *a11y_applications_settings; + GSettings *a11y_interface_settings; + GSettings *lockdown_settings; ++ GSettings *ubuntu_settings; + + gchar *font_name; + gboolean high_contrast; + gchar *gtk_icon_theme; ++ gchar *gtk_theme; ++ gchar *gtk_theme_variant; + int inhibit_animations_count; + gboolean enable_animations; + gboolean primary_paste; +@@ -133,7 +140,10 @@ st_settings_finalize (GObject *object) + g_object_unref (settings->a11y_applications_settings); + g_object_unref (settings->a11y_interface_settings); + g_object_unref (settings->lockdown_settings); ++ g_object_unref (settings->ubuntu_settings); + g_free (settings->font_name); ++ g_free (settings->gtk_theme); ++ g_free (settings->gtk_theme_variant); + g_free (settings->gtk_icon_theme); + + G_OBJECT_CLASS (st_settings_parent_class)->finalize (object); +@@ -185,6 +195,16 @@ st_settings_get_property (GObject *object, + case PROP_GTK_ICON_THEME: + g_value_set_string (value, settings->gtk_icon_theme); + break; ++ case PROP_GTK_THEME: ++ g_value_set_string (value, settings->gtk_theme); ++ break; ++ case PROP_GTK_THEME_VARIANT: ++ g_value_set_string (value, settings->gtk_theme_variant); ++ break; ++ case PROP_SHELL_COLOR_SCHEME: ++ g_value_take_string (value, ++ g_settings_get_string (settings->ubuntu_settings, "color-scheme")); ++ break; + case PROP_MAGNIFIER_ACTIVE: + g_value_set_boolean (value, settings->magnifier_active); + break; +@@ -275,6 +295,39 @@ st_settings_class_init (StSettingsClass *klass) + "", + ST_PARAM_READABLE); + ++ /** ++ * StSettings:gtk-theme: ++ * ++ * The current GTK theme ++ */ ++ props[PROP_GTK_THEME] = g_param_spec_string ("gtk-theme", ++ "GTK Theme", ++ "GTK Theme", ++ "", ++ ST_PARAM_READABLE); ++ ++ /** ++ * StSettings:gtk-theme-variant: ++ * ++ * The current GTK theme ++ */ ++ props[PROP_GTK_THEME_VARIANT] = g_param_spec_string ("gtk-theme-variant", ++ "GTK Theme Variant", ++ "GTK Theme Variant", ++ "", ++ ST_PARAM_READABLE); ++ ++ /** ++ * StSettings:shell-color-scheme: ++ * ++ * The current GTK theme ++ */ ++ props[PROP_SHELL_COLOR_SCHEME] = g_param_spec_string ("shell-color-scheme", ++ "Shell Color Scheme", ++ "Shell Color Scheme", ++ "default", ++ ST_PARAM_READABLE); ++ + /** + * StSettings:magnifier-active: + * +@@ -311,6 +364,45 @@ st_settings_class_init (StSettingsClass *klass) + g_object_class_install_properties (object_class, N_PROPS, props); + } + ++static void ++update_theme_settings (StSettings *settings) ++{ ++ g_auto(GStrv) parts = NULL; ++ g_autofree char *theme = NULL; ++ g_autofree char *variant = NULL; ++ ++ theme = g_settings_get_string (settings->interface_settings, KEY_GTK_THEME); ++ parts = g_strsplit (theme, "-", 2); ++ ++ switch (g_strv_length (parts)) ++ { ++ case 2: ++ variant = g_strdup (parts[1]); ++ /* fallthrough */ ++ case 1: ++ theme = g_strdup (parts[0]); ++ break; ++ } ++ ++ if (g_strcmp0 (settings->gtk_theme, theme) != 0) ++ { ++ g_free (settings->gtk_theme); ++ settings->gtk_theme = g_steal_pointer (&theme); ++ ++ g_object_notify_by_pspec (G_OBJECT (settings), ++ props[PROP_GTK_THEME]); ++ } ++ ++ if (g_strcmp0 (settings->gtk_theme_variant, variant) != 0) ++ { ++ g_free (settings->gtk_theme_variant); ++ settings->gtk_theme_variant = g_steal_pointer (&variant); ++ ++ g_object_notify_by_pspec (G_OBJECT (settings), ++ props[PROP_GTK_THEME_VARIANT]); ++ } ++} ++ + static void + on_interface_settings_changed (GSettings *g_settings, + const gchar *key, +@@ -332,6 +424,10 @@ on_interface_settings_changed (GSettings *g_settings, + settings->font_name = g_settings_get_string (g_settings, key); + g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_FONT_NAME]); + } ++ else if (g_str_equal (key, KEY_GTK_THEME)) ++ { ++ update_theme_settings (settings); ++ } + else if (g_str_equal (key, KEY_GTK_ICON_THEME)) + { + g_free (settings->gtk_icon_theme); +@@ -341,6 +437,18 @@ on_interface_settings_changed (GSettings *g_settings, + } + } + ++static void ++on_ubuntu_settings_changed (GSettings *g_settings, ++ const gchar *key, ++ StSettings *settings) ++{ ++ if (g_str_equal (key, "color-scheme")) ++ { ++ g_object_notify_by_pspec (G_OBJECT (settings), ++ props[PROP_SHELL_COLOR_SCHEME]); ++ } ++} ++ + static void + on_mouse_settings_changed (GSettings *g_settings, + const gchar *key, +@@ -398,6 +506,10 @@ st_settings_init (StSettings *settings) + g_signal_connect (settings->interface_settings, "changed", + G_CALLBACK (on_interface_settings_changed), settings); + ++ settings->ubuntu_settings = g_settings_new ("org.gnome.shell.ubuntu"); ++ g_signal_connect (settings->ubuntu_settings, "changed", ++ G_CALLBACK (on_ubuntu_settings_changed), settings); ++ + settings->mouse_settings = g_settings_new ("org.gnome.desktop.peripherals.mouse"); + g_signal_connect (settings->mouse_settings, "changed", + G_CALLBACK (on_mouse_settings_changed), settings); +@@ -414,6 +526,8 @@ st_settings_init (StSettings *settings) + g_signal_connect (settings->lockdown_settings, "changed", + G_CALLBACK (on_lockdown_settings_changed), settings); + ++ update_theme_settings (settings); ++ + settings->enable_animations = g_settings_get_boolean (settings->interface_settings, + KEY_ENABLE_ANIMATIONS); + settings->primary_paste = g_settings_get_boolean (settings->interface_settings, diff --git a/gnome-shell-43.0/debian/patches/ubuntu/resolve_alternate_theme_path.patch b/gnome-shell-43.0/debian/patches/ubuntu/resolve_alternate_theme_path.patch new file mode 100644 index 0000000..8a9f8a7 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/resolve_alternate_theme_path.patch @@ -0,0 +1,50 @@ +From: Didier Roche +Date: Tue, 22 Oct 2019 11:22:06 +0200 +Subject: Resolve real path name for theme file + + We are using alternative theme paths. Some of them are symlinks like + gdm3.css. It points to a different directory and we need to ensure + assets are loaded from the real theme path then (assets path are + relative to it). + Resolve them symlinks to ensure we use the original file itself when + loading the stylesheet. +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1798747 +Forwarded: Not-needed (upstream doesn't support officially theming) +--- + js/ui/main.js | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/js/ui/main.js b/js/ui/main.js +index fc5ae80..3bb9b8f 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -393,6 +393,14 @@ async function _handleLockScreenWarning() { + } + } + ++function _realpath(path) { ++ try { ++ while (GLib.file_test(path, GLib.FileTest.IS_SYMLINK)) ++ path = GLib.file_read_link(path); ++ } catch (e) { } ++ return path; ++} ++ + function _getStylesheet(name) { + let stylesheet; + +@@ -403,12 +411,12 @@ function _getStylesheet(name) { + let dataDirs = GLib.get_system_data_dirs(); + for (let i = 0; i < dataDirs.length; i++) { + let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'theme', name]); +- stylesheet = Gio.file_new_for_path(path); ++ stylesheet = Gio.file_new_for_path(_realpath(path)); + if (stylesheet.query_exists(null)) + return stylesheet; + } + +- stylesheet = Gio.File.new_for_path(`${global.datadir}/theme/${name}`); ++ stylesheet = Gio.File.new_for_path(_realpath(`${global.datadir}/theme/${name}`)); + if (stylesheet.query_exists(null)) + return stylesheet; + diff --git a/gnome-shell-43.0/debian/patches/ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch b/gnome-shell-43.0/debian/patches/ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch new file mode 100644 index 0000000..24ce151 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch @@ -0,0 +1,163 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Thu, 23 Aug 2018 20:00:57 +0200 +Subject: search: call XUbuntuCancel method on providers when no data is + needed + +Add XUbuntuCancel method to search providers and call it when a search provider +is still doing operations. +Ignore the result when the method does not exist or is cancelled. + +This will allow to stop operations on providers. + +Fixes LP: #1756826 + +Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/issues/183 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/bionic/+source/gnome-shell/+bug/1756826 +Forwarded: not-needed +--- + .../org.gnome.ShellSearchProvider.xml | 6 ++++ + .../org.gnome.ShellSearchProvider2.xml | 6 ++++ + js/ui/remoteSearch.js | 12 ++++++++ + js/ui/search.js | 33 ++++++++++++++++++++++ + 4 files changed, 57 insertions(+) + +diff --git a/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml b/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml +index 78ad305..393cb01 100644 +--- a/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml ++++ b/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml +@@ -69,5 +69,11 @@ + + + ++ ++ ++ + + +diff --git a/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml b/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml +index 9502340..8141bc0 100644 +--- a/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml ++++ b/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml +@@ -83,5 +83,11 @@ + + + ++ ++ ++ + + +diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js +index 87ee384..74f9c38 100644 +--- a/js/ui/remoteSearch.js ++++ b/js/ui/remoteSearch.js +@@ -26,6 +26,7 @@ const SearchProviderIface = ` + + + ++ + + `; + +@@ -54,6 +55,7 @@ const SearchProvider2Iface = ` + + + ++ + + `; + +@@ -301,6 +303,16 @@ var RemoteSearchProvider = class { + return resultMetas; + } + ++ async XUbuntuCancel(cancellable) { ++ try { ++ await this.proxy.XUbuntuCancelAsync(cancellable); ++ } catch (error) { ++ if (!error.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD) && ++ !error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ log(`Received error from D-Bus search provider ${this.id} during XUbuntuCancel: ${error}`); ++ } ++ } ++ + activateResult(id) { + this.proxy.ActivateResultAsync(id).catch(logError); + } +diff --git a/js/ui/search.js b/js/ui/search.js +index 71870a0..fc668fb 100644 +--- a/js/ui/search.js ++++ b/js/ui/search.js +@@ -218,7 +218,9 @@ var SearchResultsBase = GObject.registerClass({ + this._cancellable.cancel(); + this._cancellable.reset(); + ++ this.provider.resultsMetasInProgress = true; + const metas = await this.provider.getResultMetas(metasNeeded, this._cancellable); ++ this.provider.resultsMetasInProgress = this._cancellable.is_cancelled(); + + if (this._cancellable.is_cancelled()) { + if (metas.length > 0) +@@ -588,6 +590,10 @@ var SearchResultsView = GObject.registerClass({ + + this._searchTimeoutId = 0; + this._cancellable = new Gio.Cancellable(); ++ this._searchCancelCancellable = new Gio.Cancellable(); ++ const cancellableCancelledId = this._cancellable.connect(() => ++ this._cancelSearchProviderRequest()); ++ this.connect('destroy', () => this._cancellable.disconnect(cancellableCancelledId)); + + this._registerProvider(new AppDisplay.AppSearchProvider()); + +@@ -636,11 +642,31 @@ var SearchResultsView = GObject.registerClass({ + } + } + ++ _cancelSearchProviderRequest() { ++ if (this._terms.length !== 0 || this._searchCancelTimeoutId) ++ return; ++ ++ this._searchCancelTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => { ++ Promise.all(this._providers.map(async provider => { ++ if (provider.isRemoteProvider && ++ (provider.searchInProgress || provider.resultsMetasInProgress)) { ++ await provider.XUbuntuCancel(this._searchCancelCancellable); ++ provider.searchInProgress = false; ++ provider.resultsMetasInProgress = false; ++ } ++ })).catch(logError); ++ ++ delete this._searchCancelTimeoutId; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ + _reset() { + this._terms = []; + this._results = {}; + this._clearDisplay(); + this._clearSearchTimeout(); ++ this._cancelSearchProviderRequest(); + this._defaultResult = null; + this._startingSearch = false; + +@@ -712,6 +738,13 @@ var SearchResultsView = GObject.registerClass({ + if (this._terms.length > 0) + isSubSearch = searchString.indexOf(previousSearchString) == 0; + ++ this._searchCancelCancellable.cancel(); ++ this._searchCancelCancellable.reset(); ++ if (this._searchCancelTimeoutId) { ++ GLib.source_remove(this._searchCancelTimeoutId); ++ delete this._searchCancelTimeoutId; ++ } ++ + this._terms = terms; + this._isSubSearch = isSubSearch; + this._updateSearchProgress(); diff --git a/gnome-shell-43.0/debian/patches/ubuntu/secure_mode_extension.patch b/gnome-shell-43.0/debian/patches/ubuntu/secure_mode_extension.patch new file mode 100644 index 0000000..b750534 --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/secure_mode_extension.patch @@ -0,0 +1,89 @@ +From: Ubuntu Developers +Date: Wed, 20 Jun 2018 19:22:06 +0200 +Subject: Don't allow ubuntu mode extension to update + +Ensure that no update is proposed or loaded if sideloaded (always +prefer system version) on the ubuntu session. +We want to ensure that the default code running is going through +our QA and security team process than being loaded from a 3rd +party website. +Also, that will enable us to upload newer versions on GNOME +extension website while still letting older ubuntu release versions +running expected extension version. +Origin: ubuntu +Forwarded: https://bugzilla.gnome.org/show_bug.cgi?id=789852 +--- + js/ui/extensionDownloader.js | 11 +++++++++++ + js/ui/extensionSystem.js | 9 +++++++++ + 2 files changed, 20 insertions(+) + +diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js +index 94ba8fa..54b1105 100644 +--- a/js/ui/extensionDownloader.js ++++ b/js/ui/extensionDownloader.js +@@ -4,6 +4,7 @@ + const { Clutter, Gio, GLib, GObject, Soup } = imports.gi; + + const Config = imports.misc.config; ++const Desktop = imports.misc.desktop; + const Dialog = imports.ui.dialog; + const ExtensionUtils = imports.misc.extensionUtils; + const FileUtils = imports.misc.fileUtils; +@@ -32,6 +33,13 @@ async function installExtension(uuid, invocation) { + shell_version: Config.PACKAGE_VERSION, + }; + ++ if (Desktop.is('ubuntu') && Main.extensionManager.isModeExtension(uuid)) { ++ const msg = _("This is an extension enabled by your current mode, you can't install manually any update in that session."); ++ Main.notifyError(_("Can't install “%s”:").format(uuid), msg); ++ invocation.return_dbus_error('org.gnome.Shell.ExtensionError', msg); ++ return; ++ } ++ + const message = Soup.Message.new_from_encoded_form('GET', + REPOSITORY_URL_INFO, + Soup.form_encode_hash(params)); +@@ -161,6 +169,9 @@ async function checkForUpdates() { + return; + if (extension.hasUpdate) + return; ++ // don't updates out of repository mode extension ++ if (Desktop.is("ubuntu") && Main.extensionManager.isModeExtension(uuid)) ++ return; + metadatas[uuid] = { + version: extension.metadata.version, + }; +diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js +index c21cc7c..db47088 100644 +--- a/js/ui/extensionSystem.js ++++ b/js/ui/extensionSystem.js +@@ -4,6 +4,7 @@ + const { GLib, Gio, GObject, Shell, St } = imports.gi; + const Signals = imports.misc.signals; + ++const Desktop = imports.misc.desktop; + const ExtensionDownloader = imports.ui.extensionDownloader; + const ExtensionUtils = imports.misc.extensionUtils; + const FileUtils = imports.misc.fileUtils; +@@ -434,6 +435,10 @@ var ExtensionManager = class extends Signals.EventEmitter { + this.loadExtension(newExtension); + } + ++ isModeExtension(uuid) { ++ return this._getModeExtensions().indexOf(uuid) !== -1; ++ } ++ + _callExtensionInit(uuid) { + if (!this._extensionSupportsSessionMode(uuid)) + return false; +@@ -624,6 +629,10 @@ var ExtensionManager = class extends Signals.EventEmitter { + let type = dir.has_prefix(perUserDir) + ? ExtensionType.PER_USER + : ExtensionType.SYSTEM; ++ if (Desktop.is("ubuntu") && this.isModeExtension(uuid) && type === ExtensionType.PER_USER) { ++ log(`Found user extension ${uuid}, but not loading from ${dir.get_path()} directory as part of session mode.`); ++ return; ++ } + try { + extension = this.createExtensionObject(uuid, dir, type); + } catch (e) { diff --git a/gnome-shell-43.0/debian/patches/ubuntu/sessionMode-Add-support-for-configuring-an-icons-resource.patch b/gnome-shell-43.0/debian/patches/ubuntu/sessionMode-Add-support-for-configuring-an-icons-resource.patch new file mode 100644 index 0000000..9b4f4ad --- /dev/null +++ b/gnome-shell-43.0/debian/patches/ubuntu/sessionMode-Add-support-for-configuring-an-icons-resource.patch @@ -0,0 +1,38 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Thu, 24 Feb 2022 04:22:32 +0100 +Subject: sessionMode: Add support for configuring an icons resource name + +Similar to what we did (and upstreamed) for the theme, in this case +however there's very likely no interest from upstream for this. + +Forwarded: not-needed +--- + js/ui/main.js | 2 +- + js/ui/sessionMode.js | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/js/ui/main.js b/js/ui/main.js +index 3bb9b8f..33f62be 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -480,7 +480,7 @@ function reloadThemeResource() { + + /** @private */ + function _loadIcons() { +- _iconResource = Gio.Resource.load(`${global.datadir}/gnome-shell-icons.gresource`); ++ _iconResource = Gio.Resource.load(`${global.datadir}/${sessionMode.iconsResourceName}`); + _iconResource._register(); + } + +diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js +index 053e678..bfcdf26 100644 +--- a/js/ui/sessionMode.js ++++ b/js/ui/sessionMode.js +@@ -24,6 +24,7 @@ const _modes = { + parentMode: null, + stylesheetName: 'gnome-shell.css', + themeResourceName: 'gnome-shell-theme.gresource', ++ iconsResourceName: 'gnome-shell-icons.gresource', + hasOverview: false, + showCalendarEvents: false, + showWelcomeDialog: false, diff --git a/gnome-shell-43.0/debian/rules b/gnome-shell-43.0/debian/rules new file mode 100755 index 0000000..6b7cb50 --- /dev/null +++ b/gnome-shell-43.0/debian/rules @@ -0,0 +1,39 @@ +#!/usr/bin/make -f + +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 -Wl,-z,defs + + +%: + dh $@ --with bash_completion + +CONFFLAGS = + +ifeq ($(DEB_HOST_ARCH_OS),linux) +CONFFLAGS += \ + -Dnetworkmanager=true \ + -Dsoup2=false \ + -Dsystemd=true +endif + +CONFFLAGS += -Dtests=false + +override_dh_auto_configure: + GSETTINGS_SCHEMA_DIR=/opt/mutter-vrr/share/glib-2.0/schemas/:$(GSETTINGS_SCHEMA_DIR) PKG_CONFIG_PATH=/opt/mutter-vrr/lib/x86_64-linux-gnu/pkgconfig:$(PKG_CONFIG_PATH) LD_LIBRARY_PATH=/opt/mutter-vrr/lib/x86_64-linux-gnu:/opt/mutter-vrr/lib/x86_64-linux-gnu/mutter-11:/opt/mutter-vrr/lib/x86_64-linux-gnu/mutter-11/plugins:$(LD_LIBRARY_PATH) PATH=/opt/mutter-vrr/bin:$(PATH) dh_auto_configure -- \ + --prefix=/opt/mutter-vrr \ + --libdir=lib \ + -Dextensions-tool:bash_completion=enabled \ + $(CONFFLAGS) + +override_dh_install: + dh_install + rm -r debian/tmp/etc/xdg/autostart/gnome-shell-overrides-migration.desktop + +override_dh_makeshlibs: + echo "dh_makeshlibs disabled!" + +override_dh_shlibdeps: + echo "dh_shlibdeps disabled!" + +override_dh_auto_test: + echo "dh_auto_test disabled!" diff --git a/gnome-shell-43.0/debian/source/format b/gnome-shell-43.0/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/gnome-shell-43.0/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/gnome-shell-43.0/debian/source/lintian-overrides b/gnome-shell-43.0/debian/source/lintian-overrides new file mode 100644 index 0000000..e69de29 diff --git a/gnome-shell-43.0/debian/source_gnome-shell.py b/gnome-shell-43.0/debian/source_gnome-shell.py new file mode 100644 index 0000000..9e0bcf7 --- /dev/null +++ b/gnome-shell-43.0/debian/source_gnome-shell.py @@ -0,0 +1,45 @@ +from apport.hookutils import * +import os + +def is_process_running(proc): + ''' + Determine if process has a registered process id + ''' + log = command_output(['pidof', proc]) + if not log or log[:5] == "Error" or len(log)<1: + return False + return True + +def add_info(report): + attach_related_packages(report, ['mutter-common']) + + attach_gsettings_package(report, 'gnome-shell-common') + attach_gsettings_package(report, 'gsettings-desktop-schemas') + attach_gsettings_package(report, 'mutter-common') + attach_gsettings_schema(report, 'org.gnome.settings-daemon.plugins.color') + attach_gsettings_schema(report, 'org.gnome.settings-daemon.peripherals.touchscreen') + + try: + monitors = os.path.join(os.environ['XDG_CONFIG_HOME'], 'monitors.xml') + except KeyError: + monitors = os.path.expanduser('~/.config/monitors.xml') + + attach_file_if_exists(report, monitors, 'monitors.xml') + + result = '' + + dm_list = apport.hookutils.command_output(['sh', '-c', + 'apt-cache search \"display manager\" | cut -d \' \' -f1 | grep -E \"dm$|^gdm3?\\b\"']) + + for line in dm_list.split('\n'): + if (is_process_running(line)): + result = line + break + + report['DisplayManager'] = result + + if command_available('journalctl') and os.path.exists('/run/systemd/system'): + report['ShellJournal'] = command_output(['journalctl', + '/usr/bin/gnome-shell', + '-b', '-o', 'short-monotonic', + '--lines', '3000']) diff --git a/gnome-shell-43.0/debian/upstream/metadata b/gnome-shell-43.0/debian/upstream/metadata new file mode 100644 index 0000000..cb2e2d4 --- /dev/null +++ b/gnome-shell-43.0/debian/upstream/metadata @@ -0,0 +1,5 @@ +Bug-Database: https://gitlab.gnome.org/GNOME/gnome-shell/issues/ +Bug-Submit: https://gitlab.gnome.org/GNOME/gnome-shell/issues/new +Name: GNOME Shell +Repository: https://gitlab.gnome.org/gnome/gnome-shell.git +Repository-Browse: https://gitlab.gnome.org/GNOME/gnome-shell/ diff --git a/gnome-shell-43.0/debian/watch b/gnome-shell-43.0/debian/watch new file mode 100644 index 0000000..64675b4 --- /dev/null +++ b/gnome-shell-43.0/debian/watch @@ -0,0 +1,4 @@ +version=4 +opts="searchmode=plain, uversionmangle=s/\.(alpha|beta|rc)/~$1/, downloadurlmangle=s|cache.json||" \ +https://download.gnome.org/sources/@PACKAGE@/cache.json \ + [\d.]+/@PACKAGE@-([\d.]+)@ARCHIVE_EXT@ diff --git a/orig.source.txt b/orig.source.txt new file mode 100644 index 0000000..f763dec --- /dev/null +++ b/orig.source.txt @@ -0,0 +1,3 @@ +# gnome-shell_43.0.orig.tar.xz has been renamed to gnome-shell-vrr_43.0.orig.tar.xz but the contents are the same +gnome-shell-vrr_43.0.orig.tar.xz +#https://gitlab.gnome.org/GNOME/gnome-shell