attempt to fix xwayland frac scale
Some checks failed
PikaOS Package Build & Release (Canary) (amd64-v3) / build (push) Has been cancelled
PikaOS Package Build Only (Canary) (amd64-v3) / build (push) Failing after 17s
PikaOS Package Build Only (amd64-v3) / build (push) Failing after 13s
PikaOS Package Build & Release (amd64-v3) / build (push) Failing after 13s

This commit is contained in:
Ward from fusion-voyager-3 2024-08-13 11:22:25 -04:00
parent b7d1e6bb91
commit a1d3a8b37d
101 changed files with 13900 additions and 3537 deletions

1
.github/build-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/build-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/release-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/release-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

37
.github/workflows/build-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

37
.github/workflows/build-nestv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

40
.github/workflows/release-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

40
.github/workflows/release-nestv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

View File

@ -1,49 +0,0 @@
name: PikaOS Package Release
on:
workflow_dispatch
jobs:
build:
runs-on: self-hosted
container:
image: ghcr.io/pikaos-linux/pika-package-container:latest
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Import GPG key
id: import_gpg
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update apt cache
run: apt update
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh
- name: Purge cache
uses: strrife/cloudflare-chunked-purge-action@master
env:
# Zone is required by both authentication methods
CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
PURGE_URLS: ${{ vars.PURGE_URLS }}

14
debian/.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
/*.debhelper.log
/*.substvars
/.debhelper/
/debhelper-build-stamp
/files
/gir1.2-mutter-*/
/libmutter-*-0/
/libmutter-*-dev/
/libmutter-test-*/
/mutter-*-tests/
/mutter-common-bin/
/mutter-common/
/mutter/
/tmp/

17
debian/README.Debian vendored Normal file
View File

@ -0,0 +1,17 @@
Mutter Compositor
===================
Mutter includes a compositor based on Clutter. Mutter by default adds
very simple effects using the compositor, such as a drop-shadow. The
compositor may be used by plugins to add more effects. GNOME Shell is
an example of one such plugin.
The compositor can be enabled on the fly by setting the gconf key
/apps/mutter/general/compositing_manager to true by using
gconf-editor or gconftool-2.
Before enabling the compositor, you need to make sure your X server
configuration has the composite extension, as well as DRI loaded and
enabled.
-- Gustavo Noronha Silva <kov@debian.org>, Sun, 26 Jul 2009 13:14:57 +0200

61
debian/README.Ubuntu vendored
View File

@ -1,61 +0,0 @@
# 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/<path_to_modified_file_in_new_version> new-gnome-shell-version/data/theme/<path_to_modified_file_in_new_version> yaru/gnome-shell/src/<path_to_modified_file_in_new_version>
```
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.

5600
debian/changelog vendored

File diff suppressed because it is too large Load Diff

1
debian/clean vendored
View File

@ -1 +0,0 @@
debian/home/

441
debian/control vendored
View File

@ -1,186 +1,301 @@
# 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
Section: gnome
Source: mutter
Section: x11
Priority: optional
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: Jeremy Bícha <jbicha@ubuntu.com>, Marco Trevisan (Treviño) <marco@ubuntu.com>
Build-Depends: appstream,
asciidoc-base,
bash-completion,
dbus-daemon <!nocheck>,
debhelper-compat (= 13),
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: Jeremy Bícha <jbicha@ubuntu.com>
Build-Depends: debhelper-compat (= 13),
dh-exec,
dh-sequence-gir,
dh-sequence-gnome,
gjs,
gir1.2-accountsservice-1.0 <!nocheck>,
gir1.2-gdm-1.0 <!nocheck>,
gir1.2-geoclue-2.0 <!nocheck>,
gir1.2-gnomebg-4.0 <!nocheck>,
gir1.2-gnomedesktop-4.0 <!nocheck>,
gir1.2-gweather-4.0 (>= 4.1) <!nocheck>,
gir1.2-nma4-1.0 [linux-any] <!nocheck>,
gir1.2-rsvg-2.0 <!nocheck>,
gir1.2-upowerglib-1.0 <!nocheck>,
gnome-control-center-dev,
at-spi2-core <!nocheck>,
adwaita-icon-theme <!nocheck>,
dbus-daemon <!nocheck>,
dmz-cursor-theme <!nocheck>,
gir1.2-atk-1.0-dev,
gir1.2-cairo-1.0-dev,
gir1.2-gdesktopenums-3.0-dev,
gir1.2-gio-2.0-dev,
gir1.2-gl-1.0-dev,
gir1.2-gobject-2.0-dev,
gir1.2-graphene-1.0-dev,
gir1.2-pango-1.0-dev,
gir1.2-pangocairo-1.0-dev,
gir1.2-xfixes-4.0-dev,
gir1.2-xlib-2.0-dev,
gnome-control-center-data,
gnome-pkg-tools,
gnome-settings-daemon-common (>= 40~) <!nocheck>,
gobject-introspection,
gsettings-desktop-schemas-dev (>= 42~beta),
gnome-settings-daemon-common <!nocheck>,
gnome-settings-daemon-dev,
gobject-introspection (>= 1.80),
gsettings-desktop-schemas-dev (>= 40~alpha),
gtk-doc-tools,
libasound2-dev,
libatk-bridge2.0-dev,
libecal2.0-dev (>= 3.45),
libedataserver1.2-dev (>= 3.45),
libgcr-3-dev,
libgirepository1.0-dev,
libgjs-dev (>= 1.73.1),
libgl1-mesa-dri <!nocheck>,
libglib2.0-dev,
libgnome-autoar-0-dev,
libgnome-bluetooth-3.0-dev (>= 3.9.0) [linux-any],
libgnome-desktop-4-dev (>= 40),
libgnome-menu-3-dev,
libgstreamer1.0-dev,
libgstreamer-plugins-base1.0-dev,
libei-dev (>= 1.0.901),
libeis-dev (>= 1.0.901),
libcairo2-dev,
libcanberra-gtk3-dev,
libcolord-dev,
libdisplay-info-dev,
libdrm-dev (>= 2.4.118),
libegl1-mesa-dev,
libfribidi-dev,
libgbm-dev (>= 21.3),
libgdk-pixbuf-2.0-dev,
libgl-dev,
libgles-dev,
libglib2.0-dev (>= 2.76),
libgnome-desktop-4-dev,
libgraphene-1.0-dev,
libgtk-3-dev <!nocheck>,
libgtk-4-dev,
libibus-1.0-dev (>= 1.5.22-2ubuntu2~),
libgudev-1.0-dev,
libice-dev,
libinput-dev (>= 1.19.0),
libjson-glib-dev,
libmutter-13-dev (>= 45.0),
mutter-13-tests (>= 45.0) <!nocheck>,
libnm-dev [linux-any],
libpipewire-0.3-dev (>= 0.3.10) [linux-any],
libpolkit-agent-1-dev,
libpulse-dev (>= 13),
libsecret-1-dev,
liblcms2-dev,
libnvidia-egl-wayland-dev,
libpam0g-dev,
libpango1.0-dev,
libpipewire-0.3-dev (>= 0.3.33),
libpixman-1-dev (>= 0.42),
libsm-dev,
libstartup-notification0-dev,
libsystemd-dev [linux-any],
libsysprof-6-dev [!i386],
libsysprof-capture-4-dev (>= 3.40.1),
libsystemd-dev,
libwacom-dev,
libwayland-dev (>= 1.22),
libxau-dev,
libx11-dev,
libx11-xcb-dev,
libxcb-randr0-dev,
libxcb-res0-dev,
libxcomposite-dev,
libxcursor-dev,
libxdamage-dev,
libxext-dev,
libxfixes-dev,
libxml2-dev,
mesa-common-dev,
meson (>= 0.58.0),
mutter (>= 45.0) <!nocheck>,
pkg-config,
sassc,
systemd [linux-any],
libxi-dev,
libxinerama-dev,
libxkbcommon-dev,
libxkbcommon-x11-dev,
libxkbfile-dev,
libxrandr-dev,
libxrender-dev,
libxt-dev,
meson (>= 0.60),
pkgconf,
python3-dbus <!nocheck>,
python3-dbusmock,
sysprof [!hurd-i386 !i386],
systemd-dev,
wayland-protocols (>= 1.33),
xauth <!nocheck>,
xvfb <!nocheck>,
xwayland <!nocheck>
xcvt:native,
xkb-data,
xvfb,
xwayland (>= 2:23.1.0),
zenity
Rules-Requires-Root: no
Standards-Version: 4.6.2
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
Homepage: https://mutter.gnome.org/
Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git
Vcs-Browser: https://salsa.debian.org/gnome-team/mutter
Package: gnome-shell
Package: mutter
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,
gir1.2-gdesktopenums-3.0,
gir1.2-gdkpixbuf-2.0,
gir1.2-gdm-1.0,
gir1.2-geoclue-2.0,
gir1.2-glib-2.0,
gir1.2-gnomebg-4.0,
gir1.2-gnomebluetooth-3.0 (>= 42.3) [linux-any],
gir1.2-gnomedesktop-4.0 (>= 40),
gir1.2-graphene-1.0 (>= 1.10.2),
gir1.2-gstreamer-1.0,
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-mutter-13 (>= 45.0),
gir1.2-nm-1.0 [linux-any],
gir1.2-nma4-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,
gir1.2-webkit-6.0,
gnome-settings-daemon (>= 40~),
gnome-shell-common (= ${source:Version}),
gsettings-desktop-schemas (>= 42~beta),
gstreamer1.0-pipewire (>= 0.3.10) [linux-any],
libglib2.0-bin,
Depends: adwaita-icon-theme,
gnome-settings-daemon-common,
gsettings-desktop-schemas (>= 40~alpha),
mutter-common (>= ${source:Version}),
zenity,
${misc:Depends},
${shlibs:Depends}
Provides: x-window-manager
Suggests: gnome-control-center,
xdg-user-dirs
Description: Example window manager using GNOME's window manager library
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the mutter executable. It can be used as a
standalone window manager, but is primarily intended for debugging.
Package: mutter-14-tests
Architecture: linux-any
Depends: at-spi2-core,
dbus-daemon,
dmz-cursor-theme,
libmutter-14-0 (= ${binary:Version}),
libmutter-test-14 (= ${binary:Version}),
mutter (= ${binary:Version}),
python3,
ubuntu-wallpapers,
${gir:Depends},
python3-dbus,
python3-dbusmock,
xauth,
xvfb,
xwayland (>= 2:23.1.0),
${misc:Depends},
${shlibs:Depends}
Recommends: bolt,
evolution-data-server (>= 3.45),
gdm3,
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,
gnome-backgrounds (>= 3.13.90),
gnome-shell-extension-prefs,
chrome-gnome-shell,
Breaks: gnome-shell-extension-appindicator (<< 50),
gnome-shell-extension-dash-to-panel (<< 55),
gnome-shell-extension-dashtodock (<< 79),
gnome-shell-extension-desktop-icons (<< 21.04),
gnome-shell-extension-desktop-icons-ng (<< 46+really47.0.2-2),
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~),
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.
Description: Tests for GNOME's window manager library
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains test programs, designed to be run as part of a
regression testsuite.
Package: gnome-shell-common
Architecture: all
Depends: ${misc:Depends}
Recommends: yaru-theme-gnome-shell (>= 23.10.0~)
Breaks: gnome-shell (<< 3.36.1-6~)
Replaces: gnome-shell (<< 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
Package: gir1.2-mutter-14
Section: introspection
Architecture: linux-any
Depends: gir1.2-adw-1,
gir1.2-gtk-4.0,
gjs (>= 1.73.1),
gnome-shell (= ${binary:Version}),
gnome-shell-common (= ${source:Version}),
Multi-Arch: same
Depends: libmutter-14-0 (= ${binary:Version}),
${gir:Depends},
${misc:Depends},
${shlibs:Depends}
Provides: gnome-extensions-app
Recommends: chrome-gnome-shell
Breaks: gnome-shell (<< 3.36.0-2)
Replaces: gnome-shell (<< 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.
Provides: ${gir:Provides}
Description: GObject introspection data for Mutter
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the GObject introspection data which may be
used to generate dynamic bindings.
Package: libmutter-14-0
Section: libs
Architecture: linux-any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Depends: adwaita-icon-theme,
gsettings-desktop-schemas (>= 40~alpha),
mutter-common (>= ${source:Version}),
mutter-common-bin (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
Breaks: gnome-shell (<< 46.0),
xwayland (<< 2:23.1.0),
Description: window manager library from the Mutter window manager
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the window manager shared library, used by mutter
itself, and gnome-shell.
Package: libmutter-14-dev
Section: libdevel
Architecture: linux-any
Multi-Arch: same
Depends: gir1.2-mutter-14 (= ${binary:Version}),
gsettings-desktop-schemas-dev (>= 40~alpha),
libatk1.0-dev,
libcairo2-dev,
libdrm-dev (>= 2.4.118),
libegl1-mesa-dev,
libgbm-dev (>= 21.3),
libgdk-pixbuf-2.0-dev,
libgles-dev,
libglib2.0-dev (>= 2.76),
libgraphene-1.0-dev,
libinput-dev (>= 1.19),
libmutter-14-0 (= ${binary:Version}),
libpango1.0-dev,
libwayland-dev (>= 1.22),
libx11-dev,
libxcomposite-dev,
libxdamage-dev,
libxext-dev,
libxfixes-dev,
libxi-dev,
libxrandr-dev,
${gir:Depends},
${misc:Depends}
Provides: ${gir:Provides}
Description: Development files for the Mutter window manager
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the development files.
Package: libmutter-test-14
Section: libs
Architecture: linux-any
Depends: libmutter-14-0 (= ${binary:Version}),
mutter (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
Provides: gir1.2-metatest-14
Description: Test helper library for GNOME's window manager library
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
This package contains a private library used by the automated tests for
mutter and gnome-shell. It should not be used by non-GNOME packages.
Package: mutter-common
Section: misc
Architecture: all
Multi-Arch: foreign
Depends: ${misc:Depends}
Breaks: magpie-common (<< 0.9.3-0ubuntu8~)
Replaces: magpie-common (<< 0.9.3-0ubuntu8~)
Description: shared files for the Mutter window manager
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the shared files.
Package: mutter-common-bin
Section: misc
Architecture: linux-any
Depends: ${misc:Depends},
${shlibs:Depends}
Breaks: mutter (<< 44~)
Replaces: mutter (<< 44~)
Description: shared programs for the Mutter window manager
Mutter is a Wayland display server and X11 window manager and
compositor library. It contains functionality related to, among other
things, window management, window compositing, focus tracking, workspace
management, keybindings and monitor configuration.
.
Internally it uses a fork of Cogl, a hardware acceleration abstraction
library used to simplify usage of OpenGL pipelines, as well as a fork
of Clutter, a scene graph and user interface toolkit.
.
This package contains the program files which are used for the libraries
and others.

182
debian/control.in vendored
View File

@ -1,182 +0,0 @@
Source: gnome-shell
Section: gnome
Priority: optional
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: @GNOME_TEAM@
Build-Depends: appstream,
asciidoc-base,
bash-completion,
dbus-daemon <!nocheck>,
debhelper-compat (= 13),
dh-sequence-gir,
dh-sequence-gnome,
gjs,
gir1.2-accountsservice-1.0 <!nocheck>,
gir1.2-gdm-1.0 <!nocheck>,
gir1.2-geoclue-2.0 <!nocheck>,
gir1.2-gnomebg-4.0 <!nocheck>,
gir1.2-gnomedesktop-4.0 <!nocheck>,
gir1.2-gweather-4.0 (>= 4.1) <!nocheck>,
gir1.2-nma4-1.0 [linux-any] <!nocheck>,
gir1.2-rsvg-2.0 <!nocheck>,
gir1.2-upowerglib-1.0 <!nocheck>,
gnome-control-center-dev,
gnome-pkg-tools,
gnome-settings-daemon-common (>= 40~) <!nocheck>,
gobject-introspection,
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,
libgirepository1.0-dev,
libgjs-dev (>= 1.73.1),
libgl1-mesa-dri <!nocheck>,
libglib2.0-dev,
libgnome-autoar-0-dev,
libgnome-bluetooth-3.0-dev (>= 3.9.0) [linux-any],
libgnome-desktop-4-dev (>= 40),
libgnome-menu-3-dev,
libgstreamer1.0-dev,
libgstreamer-plugins-base1.0-dev,
libgtk-4-dev,
libibus-1.0-dev (>= 1.5.22-2ubuntu2~),
libjson-glib-dev,
libmutter-13-dev (>= 45.0),
mutter-13-tests (>= 45.0) <!nocheck>,
libnm-dev [linux-any],
libpipewire-0.3-dev (>= 0.3.10) [linux-any],
libpolkit-agent-1-dev,
libpulse-dev (>= 13),
libsecret-1-dev,
libstartup-notification0-dev,
libsystemd-dev [linux-any],
libx11-dev,
libxfixes-dev,
libxml2-dev,
mesa-common-dev,
meson (>= 0.58.0),
mutter (>= 45.0) <!nocheck>,
pkg-config,
sassc,
systemd [linux-any],
xauth <!nocheck>,
xvfb <!nocheck>,
xwayland <!nocheck>
Rules-Requires-Root: no
Standards-Version: 4.6.2
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
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,
gir1.2-gdesktopenums-3.0,
gir1.2-gdkpixbuf-2.0,
gir1.2-gdm-1.0,
gir1.2-geoclue-2.0,
gir1.2-glib-2.0,
gir1.2-gnomebg-4.0,
gir1.2-gnomebluetooth-3.0 (>= 42.3) [linux-any],
gir1.2-gnomedesktop-4.0 (>= 40),
gir1.2-graphene-1.0 (>= 1.10.2),
gir1.2-gstreamer-1.0,
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-mutter-13 (>= 45.0),
gir1.2-nm-1.0 [linux-any],
gir1.2-nma4-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,
gir1.2-webkit-6.0,
gnome-settings-daemon (>= 40~),
gnome-shell-common (= ${source:Version}),
gsettings-desktop-schemas (>= 42~beta),
gstreamer1.0-pipewire (>= 0.3.10) [linux-any],
libglib2.0-bin,
python3,
ubuntu-wallpapers,
${gir:Depends},
${misc:Depends},
${shlibs:Depends}
Recommends: bolt,
evolution-data-server (>= 3.45),
gdm3,
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,
gnome-backgrounds (>= 3.13.90),
gnome-shell-extension-prefs,
chrome-gnome-shell,
Breaks: gnome-shell-extension-appindicator (<< 50),
gnome-shell-extension-dash-to-panel (<< 55),
gnome-shell-extension-dashtodock (<< 79),
gnome-shell-extension-desktop-icons (<< 21.04),
gnome-shell-extension-desktop-icons-ng (<< 46+really47.0.2-2),
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~),
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
Architecture: all
Depends: ${misc:Depends}
Recommends: yaru-theme-gnome-shell (>= 23.10.0~)
Breaks: gnome-shell (<< 3.36.1-6~)
Replaces: gnome-shell (<< 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
Architecture: linux-any
Depends: gir1.2-adw-1,
gir1.2-gtk-4.0,
gjs (>= 1.73.1),
gnome-shell (= ${binary:Version}),
gnome-shell-common (= ${source:Version}),
${gir:Depends},
${misc:Depends},
${shlibs:Depends}
Provides: gnome-extensions-app
Recommends: chrome-gnome-shell
Breaks: gnome-shell (<< 3.36.0-2)
Replaces: gnome-shell (<< 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.

349
debian/copyright vendored
View File

@ -1,52 +1,319 @@
This package was debianized by Sebastien Bacher <seb128@ubuntu.com> on
Wed, 01 Jul 2009 23:29:31 +0200.
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://download.gnome.org/sources/mutter/
Upstream-Name: mutter
It was downloaded from https://download.gnome.org/sources/gnome-shell/
Files:
*
Copyright:
2004-2006 Adam Weinberger
2001 Anders Carlsson
2007-2018 Ask Hjorth Larsen
2012 Bastian Winkler
1999-2005 Brian Paul
2005-2021 Canonical Ltd.
2021 Christian Rauch
2011-2014 Collabora Ltd
1997-2000 Dan Pascu and Alfredo Kojima
1987 Digital Equipment Corporation
2018-2020 DisplayLink (UK) Ltd.
2001 Dominik Vogt
2000-2001 Eazel, Inc.
2004-2006 Elijah Newren
2013-2015 Emmanuele Bassi
2018-2020 Endless, Inc.
2020 Endless Foundation
2014 Endless Mobile
1999-2000 Erik Walthinsen
1999-2020 Free Software Foundation, Inc.
2008-2016 GNOME i18n Project for Vietnamese
1995-2000 GTK+ Team
2002 Garrett LeSage
2002 Gaute Lindkvist
2020 Georges Basile Stavracas Neto
2001-2008 Havoc Pennington
2001-2008 Havoc Pennington, Red Hat, Inc., and others
2016 Hyungwon Hwang
2007-2008 Iain Holmes
2008-2010 Igalia, S.L.
2010-2012 Inclusive Design Research Centre, OCAD University
2007-2017 Intel Corporation
2002 James M. Cape
2011 Joe Hansen
2014 Jonas Ådahl
2020 Jonas Dreßler
2002 Jorn Baayen
1995-1997 Josh MacDonald
2004 Kakilik Project
2003-2013 Keith Packard
2002 Keld simonsen
2008 Kenneth Nielsen
2002 Kjartan Maraas
2008-2011 Kristian Høgsberg
2006 Lasse Bang Mikkelsen
2004-2005 Martin Willemoes Hansen
2008 Matthew Allum
2001 Matthias Clasen
2010 Milan Bouchet-Valat
2003-2006 Miloslav Trmac
2011 NVIDIA Corporation
2002 Ole Laursen
2005-2007 Olivier Fourdan
2006-2008 OpenedHand Ltd
1995-1997 Peter Mattis
2001-2022 Red Hat Inc
2014 Rico Tzschichholz
2003-2004 Rob Adams
2011 Robert Bosch Car Multimedia GmbH
2018-2021 Robert Mader
2004-2008 Rodney Dawes
2005-2011 Rosetta Contributors
2002 Ross Burton
2009 Sander Dijkhuis
2004 Scott James Remnant
2020 Sebastian Wick
2019 Sergio Costas
2003-2006 Sharif FarsiWeb, Inc.
1991-2000 Silicon Graphics Inc
2018-2020 Simon McVittie
2002 Simos Xenitellis
1995-1997 Spencer Kimball
2001-2003 Sun Microsystems Inc
2002-2006 The GNOME Foundation
2007 The GNOME Project
1986-1998 The Open Group
2008-2009 Thomas Thurman
1998 Tim Janik
2008 Tungsten Graphics Inc
2002 Tuomas Kuosmanen
1995-1997 Ulrich Drepper
2007 William Jon McCann
1988 Wyse Technology, Inc.
1994 X Consortium
2001 Ximian, Inc.
2001 fvwm2 team
2002-2020 the mutter authors
2003 Åsmund Skjæveland.
(unspecified) Croatiann team
License: GPL-2+ and GPL-3+ and LGPL-2+ and LGPL-2.1+ and Expat and NTP-BSD-variant and SGI-B-2.0
Upstream Authors:
Files:
cogl/cogl/cogl-point-in-poly.c
Copyright:
1970-2003 Wm. Randolph Franklin
2011 Intel Corporation
License: WRF-BSD-variant
Colin Walters
Dan Winship
Marina Zhurakhinskaya
Owen Taylor
William Jon McCann
Files:
src/tests/share/icc/vx239-calibrated.icc
Copyright: none
License: free-of-known-restrictions
This profile is free of known copyright restrictions
Files: src/*
js/*
Copyright: © 2000 Helix Code, Inc.
© 2000,2001 Eazel, Inc.
© 2001 George Lebl
© 2002 Sun Microsystems Inc.
© 2004-2005 James M. Cape <jcape@ignore-your.tv>
© 2006-2008 Red Hat, Inc.
© 2007 Ryan Lortie
© 2008 Intel Corp.
License: GPL-2+ (/usr/share/common-licenses/GPL-2)
Files:
src/x11/mutter-Xatomtype.h
Copyright:
1987-1998 The Open Group
1987 Digital Equipment Corporation
License: DEC-BSD-variant and OpenGroup-BSD-variant
Files: src/gdmuser/*
Copyright: © 2007-2008 William Jon McCann <mccann@jhu.edu>
© 2004-2005 James M. Cape <jcape@ignore-your.tv>
License: LGPL-2+ (/usr/share/common-licenses/LGPL-2)
Files:
src/x11/xprops.c
Copyright:
1987-1998 The Open Group
1987 Digital Equipment Corporation
1998 Wyse Technology Inc
2001 Havoc Pennington
2002 Red Hat Inc
License: DEC-BSD-variant and OpenGroup-BSD-variant and GPL-2+
Files: src/tray/*
Copyright: © 2002 Anders Carlsson <andersca@gnu.org>
© 2003-2006 Vincent Untz
© 2008 Red Hat, Inc.
License: GPL-2+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Comment:
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in
/usr/share/common-licenses/GPL-2.
Files: src/big/*
Copyright: © 2005-2008 Red Hat, Inc.
© 2008-2009 litl, LLC
License: GPL-3+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Comment:
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in
/usr/share/common-licenses/GPL-3.
Files: src/st/*
Copyright: © 2008 OpenedHand
© 2009 Intel Corporation.
© 2003-2004 Dodji Seketeli
License: LGPL-2.1 (/usr/share/common-licenses/LGPL-2.1)
License: LGPL-2+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
Comment:
On Debian systems, the complete text of the GNU Library General
Public License version 2 can be found in
/usr/share/common-licenses/LGPL-2, and the complete text of the
GNU Lesser General Public License version 2.1 can be found in
/usr/share/common-licenses/LGPL-2.1.
The Debian packaging is:
License: LGPL-2.1+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
Comment:
On Debian systems, the complete text of the
GNU Lesser General Public License version 2.1 can be found in
/usr/share/common-licenses/LGPL-2.1.
Copyright © 2009 Sebastien Bacher <seb128@ubuntu.com>
Copyright © 2009 Collabora Ltd.
License: Expat
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
and is licensed under the GPL version 3,
see `/usr/share/common-licenses/GPL-3'.
License: NTP-BSD-variant
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation, and
that the name of the copyright holders not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. The copyright holders make no representations
about the suitability of this software for any purpose. It is provided "as
is" without express or implied warranty.
.
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
License: WRF-BSD-variant
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
.
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimers.
2. Redistributions in binary form must reproduce the above
copyright notice in the documentation and/or other materials
provided with the distribution.
3. The name of W. Randolph Franklin may not be used to endorse or
promote products derived from this Software without specific
prior written permission.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
License: OpenGroup-BSD-variant
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.
.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.
Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.
License: DEC-BSD-variant
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
.
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
License: SGI-B-2.0
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
.
The above copyright notice including the dates of first publication and
either this permission notice or a reference to
http://oss.sgi.com/projects/FreeB/
shall be included in all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
.
Except as contained in this notice, the name of Silicon Graphics, Inc.
shall not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization from
Silicon Graphics, Inc.

3
debian/gbp.conf vendored
View File

@ -1,7 +1,6 @@
[DEFAULT]
pristine-tar = True
debian-branch = ubuntu/mantic
debian-tag=ubuntu/%(version)s
debian-branch = debian/latest
upstream-branch = upstream/latest
[buildpackage]

3
debian/gir1.2-mutter-14.install vendored Normal file
View File

@ -0,0 +1,3 @@
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/C*.typelib
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/Meta-${env:MUTTER_API_VERSION}.typelib
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/Mtk-${env:MUTTER_API_VERSION}.typelib

View File

@ -1,4 +0,0 @@
Name: gdm-theme.gresource
Link: /usr/share/gnome-shell/gdm-theme.gresource
Alternative: /usr/share/gnome-shell/gnome-shell-theme.gresource
Priority: 10

View File

@ -1 +0,0 @@
usr/share/gnome-shell/modes

View File

@ -1,9 +0,0 @@
debian/source_gnome-shell.py /usr/share/apport/package-hooks
usr/lib/systemd/user
usr/share/dbus-1/interfaces
usr/share/glib-2.0
usr/share/gnome-control-center
usr/share/gnome-shell
usr/share/icons/hicolor/*/apps/*
usr/share/locale
debian/ubuntu-session-mods/ubuntu.json usr/share/gnome-shell/modes/

View File

@ -1,4 +0,0 @@
usr/bin/gnome-extensions-app
usr/bin/gnome-shell-extension-prefs
usr/share/applications/org.gnome.Extensions.desktop
usr/share/metainfo/org.gnome.Extensions.metainfo.xml

View File

@ -1,2 +0,0 @@
report-with: gnome-session gnome-settings-daemon libgjs0g libmutter-11-0
package-status: libegl-vendor libglx-vendor libgl1-mesa-dri

View File

@ -1,2 +0,0 @@
NEWS
README.md

View File

@ -1,2 +0,0 @@
[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' ]

View File

@ -1,11 +0,0 @@
usr/bin/gnome-extensions
usr/bin/gnome-shell
usr/bin/gnome-shell-extension-tool
usr/bin/gnome-shell-test-tool
usr/lib/gnome-shell
usr/libexec
usr/share/applications/org.gnome.Shell*.desktop
usr/share/bash-completion/completions/gnome-extensions
usr/share/dbus-1/services
usr/share/man
usr/share/xdg-desktop-portal

View File

@ -1,14 +0,0 @@
# These RUNPATHs are needed to find mutter's private clutter fork
gnome-shell: custom-library-search-path RUNPATH /usr/lib/*/mutter-* [usr/bin/gnome-shell]
gnome-shell: custom-library-search-path RUNPATH /usr/lib/*/mutter-* [usr/lib/gnome-shell/*.so]
# gnome-shell ships some desktop files only to provide metadata and icons to some apps
gnome-shell: desktop-command-not-in-package false [usr/share/applications/org.gnome.Shell.Extensions.desktop]
gnome-shell: desktop-command-not-in-package gapplication [usr/share/applications/org.gnome.Shell.PortalHelper.desktop]
# This is a NoDisplay=true desktop file, so there's no need for it
gnome-shell: desktop-entry-lacks-main-category [usr/share/applications/org.gnome.Shell.desktop]
# Conceptually a program, only built as a shared library for technical reasons
gnome-shell: exit-in-shared-library [usr/lib/gnome-shell/libgnome-shell.so]

View File

@ -1 +0,0 @@
rm_conffile /etc/xdg/autostart/gnome-shell-overrides-migration.desktop 44.3-5~

View File

@ -1,18 +0,0 @@
#!/bin/sh
set -e
case "$1" in
configure)
# trigger an update notification that recommends a reboot
# (used by unattended-upgrades etc.)
touch /var/run/reboot-required || true
# same thing for the older update-notifier interface
if [ -x /usr/share/update-notifier/notify-reboot-required ]; then
/usr/share/update-notifier/notify-reboot-required || true
fi
;;
esac
#DEBHELPER#

1
debian/libmutter-14-0.bug-control vendored Normal file
View File

@ -0,0 +1 @@
package-status: libegl-vendor libglx-vendor libgl1-mesa-dri

2
debian/libmutter-14-0.install vendored Normal file
View File

@ -0,0 +1,2 @@
usr/lib/${DEB_HOST_MULTIARCH}/libmutter-${env:MUTTER_API_VERSION}.so.*
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/*.so.*

2710
debian/libmutter-14-0.symbols vendored Normal file

File diff suppressed because it is too large Load Diff

12
debian/libmutter-14-dev.install vendored Normal file
View File

@ -0,0 +1,12 @@
usr/include/mutter-${env:MUTTER_API_VERSION}/clutter
usr/include/mutter-${env:MUTTER_API_VERSION}/cogl
usr/include/mutter-${env:MUTTER_API_VERSION}/meta
usr/include/mutter-${env:MUTTER_API_VERSION}/mtk
usr/lib/${DEB_HOST_MULTIARCH}/libmutter-${env:MUTTER_API_VERSION}.so
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/*.so
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/*.gir
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libmutter-${env:MUTTER_API_VERSION}.pc
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/mutter-clutter-${env:MUTTER_API_VERSION}.pc
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/mutter-cogl-${env:MUTTER_API_VERSION}.pc
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/mutter-cogl-pango-${env:MUTTER_API_VERSION}.pc
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/mutter-mtk-${env:MUTTER_API_VERSION}.pc

4
debian/libmutter-test-14.install vendored Normal file
View File

@ -0,0 +1,4 @@
usr/include/mutter-${env:MUTTER_API_VERSION}/meta-test
usr/lib/${DEB_HOST_MULTIARCH}/libmutter-test-${env:MUTTER_API_VERSION}.so
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libmutter-test-${env:MUTTER_API_VERSION}.pc
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/MetaTest-${env:MUTTER_API_VERSION}.typelib

61
debian/libmutter-test-14.symbols vendored Normal file
View File

@ -0,0 +1,61 @@
libmutter-test-14.so libmutter-test-14 #MINVER#
* Build-Depends-Package: libmutter-14-dev
meta_async_waiter_destroy@Base 41.0
meta_async_waiter_new@Base 41.0
meta_async_waiter_process_x11_event@Base 41.0
meta_async_waiter_set_and_wait@Base 41.0
meta_backend_test_add_test_device@Base 41.0
meta_backend_test_get_gpu@Base 41.0
meta_backend_test_get_type@Base 41.0
meta_backend_test_remove_device@Base 41.0
meta_backend_test_set_is_lid_closed@Base 41.0
meta_check_monitor_configuration@Base 42~beta
meta_check_monitor_scales@Base 42~beta
meta_context_test_get_type@Base 41.0
meta_context_test_run_tests@Base 41.0
meta_context_test_wait_for_x11_display@Base 41.0
meta_create_monitor_test_setup@Base 42~beta
meta_create_test_context@Base 41.0
meta_create_test_monitor@Base 42~beta
meta_crtc_test_disable_gamma_lut@Base 43~rc
meta_crtc_test_get_type@Base 41.0
meta_find_window_from_title@Base 42~beta
meta_flush_input@Base 44~beta
meta_init_monitor_test_setup@Base 42~beta
meta_monitor_manager_test_emulate_hotplug@Base 41.0
meta_monitor_manager_test_get_tiled_monitor_count@Base 41.0
meta_monitor_manager_test_get_type@Base 41.0
meta_monitor_manager_test_read_current@Base 41.0
meta_monitor_manager_test_set_handles_transforms@Base 41.0
meta_monitor_manager_test_set_layout_mode@Base 44~rc
meta_orientation_to_string@Base 42~beta
meta_output_test_get_type@Base 41.0
meta_read_file@Base 42~beta
meta_ref_test_determine_ref_test_flag@Base 42~beta
meta_ref_test_verify_view@Base 42~beta
meta_sensors_proxy_mock_get@Base 41.0
meta_sensors_proxy_mock_set_orientation@Base 41.0
meta_sensors_proxy_mock_set_property@Base 41.0
meta_set_custom_monitor_config@Base 42~beta
meta_set_custom_monitor_config_full@Base 42~beta
meta_set_custom_monitor_system_config@Base 42~beta
meta_test_client_destroy@Base 41.0
meta_test_client_do@Base 41.0
meta_test_client_dov@Base 42~beta
meta_test_client_error_quark@Base 41.0
meta_test_client_find_window@Base 41.0
meta_test_client_get_id@Base 41.0
meta_test_client_new@Base 41.0
meta_test_client_quit@Base 41.0
meta_test_client_run@Base 44~beta
meta_test_client_wait@Base 41.0
meta_test_client_wait_for_window_shown@Base 41.0
meta_test_get_gpu@Base 42~beta
meta_test_monitor_destroy@Base 44~beta
meta_test_monitor_get_type@Base 44~beta
meta_test_monitor_new@Base 44~beta
meta_test_shell_get_type@Base 44.3-4~
meta_wait_for_monitors_changed@Base 46~beta
meta_wait_for_orientation@Base 42~beta
meta_wait_for_paint@Base 42~beta
meta_wait_for_possible_orientation_change@Base 42~beta

4
debian/mutter-14-tests.install vendored Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/dh-exec
usr/libexec/installed-tests/mutter-${MUTTER_API_VERSION}
usr/share/installed-tests/mutter-${MUTTER_API_VERSION}
usr/share/mutter-${MUTTER_API_VERSION}/tests

2
debian/mutter-common-bin.install vendored Normal file
View File

@ -0,0 +1,2 @@
usr/libexec/mutter-restart-helper
usr/libexec/mutter-x11-frames

7
debian/mutter-common.install vendored Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/dh-exec
${env:deb_udevdir}/rules.d/*-mutter.rules
usr/share/GConf
usr/share/glib-2.0
usr/share/gnome-control-center
usr/share/locale
usr/share/man

1
debian/mutter.docs vendored Normal file
View File

@ -0,0 +1 @@
NEWS

2
debian/mutter.install vendored Normal file
View File

@ -0,0 +1,2 @@
usr/bin
usr/lib/${DEB_HOST_MULTIARCH}/mutter-${env:MUTTER_API_VERSION}/plugins

16
debian/mutter.postinst vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
set -e
action="$1"
if [ "$action" = configure ]; then
# register the alternatives of x-window-manager manually
# because dh_installwm doesn't register manpage as slave yet.
update-alternatives --install /usr/bin/x-window-manager \
x-window-manager /usr/bin/mutter 60 \
--slave /usr/share/man/man1/x-window-manager.1.gz \
x-window-manager.1.gz /usr/share/man/man1/mutter.1.gz
fi
#DEBHELPER#

12
debian/mutter.prerm vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
set -e
action="$1"
if [ "$action" = remove ]; then
update-alternatives --remove x-window-manager \
/usr/bin/mutter
fi
#DEBHELPER#

118
debian/rules vendored
View File

@ -1,63 +1,91 @@
#!/usr/bin/make -f
DEB_BUILD_OPTIONS=nocheck
include /usr/share/dpkg/default.mk
built_binaries := $(shell dh_listpackages)
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 -Wl,-z,defs
export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1
export DPKG_GENSYMBOLS_CHECK_LEVEL = 4
# Following upstream method to compute the API version
MUTTER_MAJOR_VERSION = $(shell echo $(DEB_VERSION_UPSTREAM) | sed 's/[~.].*//')
MUTTER_API_VERSION = $(shell echo $$(( $(MUTTER_MAJOR_VERSION) - 32 )) )
MUTTER_SONAME = 0
export MUTTER_API_VERSION
export MUTTER_SONAME
%:
dh $@ --with bash_completion
dh $@
CONFFLAGS =
CONFFLAGS = \
-Dauto_features=enabled \
-Degl_device=true \
-Dremote_desktop=true \
-Dwayland_eglstream=true
export deb_udevdir = $(shell pkg-config --variable=udevdir udev | sed s,^/,,)
ifeq ($(DEB_HOST_ARCH_OS),linux)
CONFFLAGS += \
-Dnetworkmanager=true \
-Dsystemd=true
ifneq ($(filter i386,$(DEB_HOST_ARCH)),)
CONFFLAGS +=-Dprofiler=false
endif
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
CONFFLAGS += -Dtests=true
else
CONFFLAGS += -Dtests=false
ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
CONFFLAGS += --cross-file=$(DEB_HOST_GNU_TYPE)-gobject-introspection.ini
endif
override_dh_gnome_clean:
override_dh_auto_configure:
dh_auto_configure -- \
--libdir=/usr/lib \
-Dextensions-tool:bash_completion=enabled \
$(CONFFLAGS)
# Use meson test directly as it allows us to use the timeout multiplier
BUILDDIR=$(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)
TEST_COMMAND_BASE=env \
GIO_USE_VFS=local \
GIO_USE_VOLUME_MONITOR=unix \
GVFS_DISABLE_FUSE=1 \
dbus-run-session -- xvfb-run -s '+iglx -noreset' -a \
dh_auto_test -- -C $(BUILDDIR) --no-rebuild --verbose --timeout-multiplier 6 \
--no-stdsplit --print-errorlogs
TEST_COMMAND=$(TEST_COMMAND_BASE) --no-suite flaky
TEST_COMMAND_FLAKY=env DEB_ALLOW_FLAKY_TESTS=1 $(TEST_COMMAND_BASE) --suite flaky
# Ignore test failures on official architectures
# because it is believed that significant debian-installer/tasksel issues
# occur if task-gnome-desktop is not installable.
#
# We suspect that GNOME Shell might not work on mips64el and s390x.
# See gnome-settings-daemon where a simple mutter session fails there.
#
# But GNOME Shell is apparently usable on Ubuntu's riscv64:
# https://discourse.ubuntu.com/t/33807
#
# Please keep this list in sync with debian/tests/installed-tests
override_dh_auto_test:
ifeq (,$(filter mips64el riscv64 s390x,$(DEB_HOST_ARCH)))
$(TEST_COMMAND)
-$(TEST_COMMAND_FLAKY) --logbase flaky-tests
else
-$(TEST_COMMAND)
-$(TEST_COMMAND_FLAKY) --logbase flaky-tests
endif
# debhelper >= 13.4 makes all of /usr/libexec executable, which is not
# quite right for installed-tests
override_dh_fixperms:
dh_fixperms -Xusr/libexec/installed-tests
ifneq ($(filter %-tests,$(built_binaries)),)
chmod --recursive --changes a+rX,u+w,og-w debian/*-tests/usr/libexec/installed-tests
endif
override_dh_girepository:
dh_girepository /usr/lib/$(DEB_HOST_MULTIARCH)/mutter-$(MUTTER_API_VERSION)
override_dh_makeshlibs:
dh_makeshlibs -X/usr/lib/gnome-shell/
dh_makeshlibs -V
override_dh_shlibdeps:
# gnome-shell uses mutters private mutter-clutter-1.0.so etc.
dh_shlibdeps -l"usr/lib/$(DEB_HOST_MULTIARCH)/mutter"
# Upstream test timeouts assume an otherwise unloaded system, but that
# isn't necessarily the case for a porterbox or multiple parallel builds.
# Keep the timeout reasonably short for architectures where interactive
# debugging is more likely, but extend it a lot on architectures that might
# be very slow or using qemu for buildds.
ifneq ($(filter amd64 i386,$(DEB_HOST_ARCH_CPU)),)
test_timeout_multiplier = 3
else
test_timeout_multiplier = 20
endif
meson_test_options = --timeout-multiplier $(test_timeout_multiplier)
ifneq ($(filter mips%,$(DEB_HOST_ARCH_CPU)),)
# gnome-shell on mips(64)el works on a real GPU (in practice usually an
# AMD GPU), but crashes when using llvmpipe or softpipe, which is all that
# is available on the buildds, so we only run the unit tests at build time
# and skip the tests that would run the whole Shell. See discussion in
# https://salsa.debian.org/gnome-team/gnome-shell/-/merge_requests/71
meson_test_options += --no-suite shell
endif
override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
env XDG_CACHE_HOME="$(shell mktemp -d -t cache-XXXXXXXX)" \
dbus-run-session xvfb-run -a dh_auto_test -- $(meson_test_options)
endif
dh_shlibdeps -Llibmutter-$(MUTTER_API_VERSION)-$(MUTTER_SONAME) \
-l/usr/lib/$(DEB_HOST_MULTIARCH)/mutter-$(MUTTER_API_VERSION)

3
debian/salsa-ci.yml vendored
View File

@ -2,6 +2,3 @@
include:
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
variables:
RELEASE: 'experimental'

1
debian/shlibs.local vendored
View File

@ -1 +0,0 @@
libgnome-bluetooth-applet 0 gnome-bluetooth (>= 3.0.0)

View File

@ -1 +1 @@
3.0 (native)
3.0 (quilt)

View File

@ -0,0 +1,2 @@
# We export this in debian/rules
dh-exec-subst-unknown-variable MUTTER_API_VERSION [debian/mutter-14-tests.install:*]

View File

@ -1,45 +0,0 @@
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'])

9
debian/tests/build vendored Normal file
View File

@ -0,0 +1,9 @@
#!/bin/sh
set -e
echo "debian/rules override_dh_auto_configure "
debian/rules override_dh_auto_configure
echo "debian/rules override_dh_auto_build"
debian/rules override_dh_auto_build

17
debian/tests/control vendored Normal file
View File

@ -0,0 +1,17 @@
Tests: build
Depends: @builddeps@
Restrictions: allow-stderr
Tests: libmutter-14-dev
Depends: build-essential,
dbus-daemon,
libmutter-14-dev,
xauth,
xvfb
Restrictions: allow-stderr superficial
Tests: installed-tests
Classes: desktop
Depends: gnome-desktop-testing,
mutter-14-tests
Restrictions: allow-stderr skippable

35
debian/tests/installed-tests vendored Executable file
View File

@ -0,0 +1,35 @@
#!/bin/sh
set -eu
namespace=mutter-14/
if [ -z "${HOME-}" ] || ! [ -w "${HOME}" ]; then
export HOME="${AUTOPKGTEST_TMP}"
fi
cd "$AUTOPKGTEST_TMP"
if [ -z "$(ginsttest-runner -l "$namespace")" ]; then
echo "Error: no installed-tests found matching $namespace" >&2
exit 1
fi
e=0
ginsttest-runner \
--log-directory "$AUTOPKGTEST_ARTIFACTS" \
--tap \
"$namespace" || e="$?"
if [ "$e" -ne 0 ]; then
arch="$(dpkg --print-architecture)"
case "$arch" in
# Please keep this list in sync with debian/rules
(mips64el|riscv64|s390x)
echo "# Ignoring test failure on $arch"
exit 77
;;
esac
exit "$e"
fi

41
debian/tests/libmutter-14-dev vendored Executable file
View File

@ -0,0 +1,41 @@
#!/bin/sh
# autopkgtest check: Build and run a program against libmutter, to verify
# that the headers and pkg-config file are installed correctly
# (C) 2012 Canonical Ltd.
# (C) 2018-2019 Simon McVittie
# Authors: Martin Pitt, Simon McVittie
set -eux
WORKDIR=$(mktemp -d)
export HOME="$WORKDIR"
export XDG_RUNTIME_DIR="$WORKDIR"
cleanup () {
rm -fr "$WORKDIR"
}
trap cleanup 0 INT QUIT ABRT PIPE TERM
cd "$WORKDIR"
if [ -n "${DEB_HOST_GNU_TYPE:-}" ]; then
CROSS_COMPILE="$DEB_HOST_GNU_TYPE-"
else
CROSS_COMPILE=
fi
cat <<'EOF' > trivial.c
#include <meta/util.h>
int main(void)
{
g_assert_false(meta_is_wayland_compositor());
return 0;
}
EOF
# Deliberately word-splitting pkg-config's output:
# shellcheck disable=SC2046
"${CROSS_COMPILE}gcc" -o trivial trivial.c $("${CROSS_COMPILE}pkg-config" --cflags --libs libmutter-14)
echo "build: OK"
[ -x trivial ]
xvfb-run -a dbus-run-session -- ./trivial
echo "run: OK"

View File

@ -1,14 +0,0 @@
{
"parentMode": "user",
"stylesheetName": "Yaru/gnome-shell.css",
"colorScheme": "prefer-light",
"themeResourceName": "theme/Yaru/gnome-shell-theme.gresource",
"iconsResourceName": "theme/Yaru/gnome-shell-icons.gresource",
"debugFlags": ["backtrace-crashes-all"],
"enabledExtensions": [
"ubuntu-dock@ubuntu.com",
"ubuntu-appindicators@ubuntu.com",
"ding@rastersoft.com",
"tiling-assistant@ubuntu.com"
]
}

View File

@ -1,5 +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/
---
Bug-Database: https://gitlab.gnome.org/GNOME/mutter/-/issues
Bug-Submit: https://gitlab.gnome.org/GNOME/mutter/-/issues/new
Repository: https://gitlab.gnome.org/GNOME/mutter.git
Repository-Browse: https://gitlab.gnome.org/GNOME/mutter

2
debian/watch vendored
View File

@ -1,4 +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.]+\.?(?:beta|rc)?[\d.]*)@ARCHIVE_EXT@
[\d.]+/@PACKAGE@-([\d.]+)@ARCHIVE_EXT@

22
main.sh
View File

@ -1,19 +1,25 @@
DEBIAN_FRONTEND=noninteractive
#! /bin/bash
apt-mark hold pbuilder
apt install gnome-pkg-tools -y
set -e
VERSION="46.4"
source ./pika-build-config.sh
echo "$PIKA_BUILD_ARCH" > pika-build-arch
# Clone Upstream
git clone https://gitlab.gnome.org/GNOME/gnome-shell -b 45.0 gnome-shell
cp -rvf ./debian ./gnome-shell
cd ./gnome-shell
for i in $(cat ../patches/series) ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || bash -c "echo "Applying Patch $i Failed!" && exit 2"; done
git clone --depth=1 https://gitlab.gnome.org/GNOME/mutter -b "$VERSION"
cp -rvf ./debian ./mutter
cd ./mutter
for i in $(cat ../patches/series) ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || echo "Applying Patch $i Failed!"; done
# Get build deps
apt-get build-dep ./ -y
# Build package
LOGNAME=root dh_make --createorig -y -l -p gnome-shell_45.1
LOGNAME=root dh_make --createorig -y -l -p mutter_"$VERSION" || echo "dh-make: Ignoring Last Error"
dpkg-buildpackage --no-sign
# Move the debs to output

View File

@ -1 +0,0 @@
https://gitlab.gnome.org/GNOME/gnome-shell

View File

@ -1,24 +0,0 @@
From: =?utf-8?q?Jeremy_B=C3=ADcha?= <jeremy.bicha@canonical.com>
Date: Fri, 1 Sep 2023 11:29:45 -0400
Subject: Revert "keyboard: Spawn "tecla" to show keyboard map"
Tecla is not ready yet:
https://gitlab.gnome.org/GNOME/tecla/-/issues/7
This reverts commit 04aaa4b67bffbfe6d472e7f25c8e892f43151ed2.
---
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 8d98e16..106f1e8 100644
--- a/js/ui/status/keyboard.js
+++ b/js/ui/status/keyboard.js
@@ -1103,6 +1103,6 @@ class InputSourceIndicator extends PanelMenu.Button {
if (xkbVariant.length > 0)
description = `${description}\t${xkbVariant}`;
- Util.spawn(['tecla', description]);
+ Util.spawn(['gkbd-keyboard-display', '-l', description]);
}
});

View File

@ -1,95 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 0de195e..ba49101 100644
--- a/src/st/st-entry.c
+++ b/src/st/st-entry.c
@@ -1101,6 +1101,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)
{

View File

@ -1,107 +0,0 @@
From: Jeremy Bicha <jeremy.bicha@canonical.com>
Date: Sun, 21 Aug 2022 10:30:55 -0400
Subject: Revert "build: Port to gcr4"
This reverts commit 5c935af7d3b3a3c9feb4e0d9ea214b6d25a7a2e7.
Forwarded: not-needed
---
js/misc/dependencies.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/misc/dependencies.js b/js/misc/dependencies.js
index c61753e..7a827bc 100644
--- a/js/misc/dependencies.js
+++ b/js/misc/dependencies.js
@@ -7,7 +7,7 @@ import gi from 'gi';
import 'gi://AccountsService?version=1.0';
import 'gi://Atk?version=1.0';
import 'gi://Atspi?version=2.0';
-import 'gi://Gcr?version=4';
+import 'gi://Gcr?version=3';
import 'gi://Gdk?version=4.0';
import 'gi://Gdm?version=1.0';
import 'gi://Geoclue?version=2.0';
diff --git a/meson.build b/meson.build
index 70ba711..8e1f1f4 100644
--- a/meson.build
+++ b/meson.build
@@ -21,7 +21,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'
@@ -74,7 +74,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 070312b..6a9b266 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -217,7 +217,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',
'GdkPixbuf-2.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 <gcr/gcr.h>
+#include <gcr/gcr-base.h>
#include <glib/gi18n.h>
@@ -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 <gcr/gcr.h>
+#include <gcr/gcr-base.h>
#include <string.h>

View File

@ -1,22 +0,0 @@
From: Jeremy Bicha <jeremy.bicha@canonical.com>
Date: Fri, 17 Feb 2023 15:35:20 -0500
Subject: Revert "tests: Fail on warnings too"
This reverts commit 207b9bb3c0a582b830218fd1b6e8760684adbc48.
---
tests/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/meson.build b/tests/meson.build
index a22a0d9..59070c3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -56,7 +56,7 @@ libgvc_path = fs.parent(libgvc.get_variable('libgvc').full_path())
background_file = files(join_paths('data', 'background.png'))
shell_testenv = environment()
-shell_testenv.set('G_DEBUG', 'fatal-warnings')
+shell_testenv.set('G_DEBUG', 'fatal-criticals')
shell_testenv.set('G_MESSAGES_DEBUG', 'GNOME Shell')
shell_testenv.set('GNOME_SHELL_DATADIR', data_builddir)
shell_testenv.set('GNOME_SHELL_BUILDDIR', src_builddir)

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
From: Simon McVittie <smcv@debian.org>
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 <smcv@debian.org>
---
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 <<EOT
-gnome-shell-extension-prefs is deprecated
+The gnome-shell-extension-prefs program is deprecated.
-Install https://flathub.org/apps/details/org.gnome.Extensions for extension
-management, or use the gnome-extensions command line tool.
+Run gnome-extensions-app (from the gnome-shell-extension-prefs package)
+for extension management, or use the gnome-extensions command line tool.
Extensions can use the ExtensionUtils.openPrefs() method.
EOT

View File

@ -0,0 +1,22 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Fri, 18 Feb 2022 01:16:20 +0100
Subject: meson: Do not mark CI test tools as required
This way we can mark them as nocheck without build issues.
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index e29c500..c72be33 100644
--- a/meson.build
+++ b/meson.build
@@ -422,7 +422,7 @@ if have_tests
add_test_setup('plain')
- xvfb = find_program('xvfb-run')
+ xvfb = find_program('xvfb-run', required: false)
xvfb_args = [
'-a',
'-s',

View File

@ -0,0 +1,26 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Thu, 20 May 2021 02:42:12 +0200
Subject: tests: Do not run screencast tests
They require to have a full running pipewire (that requires a system
dbus daemon) so, we can't easily get one up and running while building.
So let's disable this for now
---
src/tests/native-headless.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/tests/native-headless.c b/src/tests/native-headless.c
index 39393fc..b54469b 100644
--- a/src/tests/native-headless.c
+++ b/src/tests/native-headless.c
@@ -27,7 +27,8 @@ static void
init_tests (MetaContext *context)
{
init_virtual_monitor_tests (context);
- init_screen_cast_tests ();
+ // init_screen_cast_tests ();
+ (void) init_screen_cast_tests;
init_bezier_tests ();
}

View File

@ -1,249 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Tue, 1 Mar 2022 11:57:20 +0100
Subject: gdm/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 | 129 +++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 102 insertions(+), 27 deletions(-)
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 89ad544..3697ecd 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -43,6 +43,7 @@ export const DISABLE_USER_LIST_KEY = 'disable-user-list';
// Give user 48ms to read each character of a PAM message
const USER_READ_TIME = 48;
+const FINGERPRINT_SERVICE_PROXY_TIMEOUT = 5000;
const FINGERPRINT_ERROR_TIMEOUT_WAIT = 15;
/**
@@ -108,16 +109,50 @@ export class ShellUserVerifier 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._fprintManager = new FprintManagerProxy(Gio.DBus.system,
- 'net.reactivated.Fprint',
- '/net/reactivated/Fprint/Manager',
- null,
- null,
- Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES);
+ 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._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
@@ -136,6 +171,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this.reauthenticating = false;
this._failCounter = 0;
+ this._startedServices = new Set();
this._unavailableServices = new Set();
this._credentialManagers = {};
@@ -225,6 +261,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this._clearUserVerifier();
this._clearMessageQueue();
+ this._startedServices.clear();
}
destroy() {
@@ -345,27 +382,52 @@ export class ShellUserVerifier 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) {
@@ -466,6 +528,7 @@ export class ShellUserVerifier 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),
@@ -519,6 +582,10 @@ export class ShellUserVerifier 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');
@@ -557,11 +624,14 @@ export class ShellUserVerifier 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) {
@@ -654,8 +724,9 @@ export class ShellUserVerifier 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');
}
@@ -736,6 +807,10 @@ export class ShellUserVerifier 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

View File

@ -1,249 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 | 61 +++++++++++++++++++++++++++++++++++++++++-------------
src/shell-global.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++
src/shell-global.h | 4 ++++
3 files changed, 103 insertions(+), 14 deletions(-)
diff --git a/src/main.c b/src/main.c
index dca5f64..aa2f4dc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -374,14 +374,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));
}
@@ -483,6 +483,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,
@@ -614,6 +650,7 @@ main (int argc, char **argv)
g_autoptr (GFile) automation_script = NULL;
g_autofree char *cwd = NULL;
GError *error = NULL;
+ const char *debug_flags;
int ecode = EXIT_SUCCESS;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -649,17 +686,6 @@ main (int argc, char **argv)
g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE);
g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE);
- 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);
- }
-
if (script_path)
automation_script = g_file_new_for_commandline_arg_and_cwd (script_path, cwd);
@@ -668,10 +694,16 @@ main (int argc, char **argv)
* resolve internal modules.
*/
_shell_global_init ("session-mode", session_mode,
+ "debug-flags", debug_flags,
"force-animations", force_animations,
"automation-script", automation_script,
NULL);
+ g_signal_connect (shell_global_get (), "notify::debug-flags",
+ G_CALLBACK (global_notify_debug_flags), NULL);
+
+ setup_debug_signal_listners ();
+
/* Setup Meta _after_ the Shell global to avoid GjsContext
* iterating on the main loop once Meta starts adding events
*/
@@ -681,7 +713,8 @@ main (int argc, char **argv)
return EXIT_FAILURE;
}
- 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 ();
diff --git a/src/shell-global.c b/src/shell-global.c
index 66b2f57..2a6e7fd 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -62,6 +62,7 @@ struct _ShellGlobal {
Display *xdisplay;
char *session_mode;
+ char *debug_flags;
XserverRegion input_region;
@@ -123,6 +124,7 @@ enum {
PROP_SWITCHEROO_CONTROL,
PROP_FORCE_ANIMATIONS,
PROP_AUTOMATION_SCRIPT,
+ PROP_DEBUG_FLAGS,
N_PROPS
};
@@ -255,6 +257,9 @@ shell_global_set_property(GObject *object,
case PROP_AUTOMATION_SCRIPT:
g_set_object (&global->automation_script, g_value_get_object (value));
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;
@@ -347,6 +352,9 @@ shell_global_get_property(GObject *object,
case PROP_AUTOMATION_SCRIPT:
g_value_set_object (value, global->automation_script);
break;
+ case PROP_DEBUG_FLAGS:
+ g_value_set_string (value, global->debug_flags);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -704,6 +712,13 @@ shell_global_class_init (ShellGlobalClass *klass)
G_TYPE_FILE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | 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);
}
@@ -2004,3 +2019,40 @@ shell_global_get_app_usage (ShellGlobal *global)
global->app_usage = g_object_new (SHELL_TYPE_APP_USAGE, NULL);
return global->app_usage;
}
+
+/**
+ * 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 8399330..683f75a 100644
--- a/src/shell-global.h
+++ b/src/shell-global.h
@@ -99,6 +99,10 @@ ShellAppSystem * shell_global_get_app_system (ShellGlobal *global);
ShellAppUsage * shell_global_get_app_usage (ShellGlobal *global);
+const char * shell_global_get_debug_flags (ShellGlobal *global);
+void shell_global_set_debug_flags (ShellGlobal *global,
+ const char *debug_flags);
+
G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */

View File

@ -1,44 +0,0 @@
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
Date: Tue, 3 Oct 2023 15:00:45 +0800
Subject: layout: Destroy panel barrier on shutdown
It was being leaked, which is detected on mutter shutdown.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3011
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2975>
(cherry picked from commit 4e2dddd18ef27da768f8b0fc2c8e243a3b207f21)
Origin: upstream, after 45.0
---
js/ui/layout.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 06ed440..95e34f2 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -243,6 +243,7 @@ export const LayoutManager = GObject.registerClass({
}
this._destroyHotCorners();
+ this._destroyPanelBarrier();
this.uiGroup.destroy();
});
@@ -575,11 +576,15 @@ export const LayoutManager = GObject.registerClass({
});
}
- _updatePanelBarrier() {
+ _destroyPanelBarrier() {
if (this._rightPanelBarrier) {
this._rightPanelBarrier.destroy();
this._rightPanelBarrier = null;
}
+ }
+
+ _updatePanelBarrier() {
+ this._destroyPanelBarrier();
if (!this.primaryMonitor)
return;

View File

@ -1,172 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 3ba9b96..4d5cd5a 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -981,22 +981,38 @@ export const LayoutManager = GObject.registerClass({
return ws.get_work_area_for_monitor(monitorIndex);
}
+ _findIndexForRect(x, y, width, height) {
+ const rect = new Mtk.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();
- const rect = new Mtk.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) {
const laters = global.compositor.get_laters();
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index ab8150b..13da38f 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -51,6 +51,8 @@ const MouseSpriteContent = GObject.registerClass({
}, class MouseSpriteContent extends GObject.Object {
_init() {
super._init();
+ this._scale = 1.0;
+ this._monitorScale = 1.0;
this._texture = null;
}
@@ -58,7 +60,10 @@ const 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) {
@@ -75,6 +80,29 @@ const 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;
}
@@ -89,7 +117,19 @@ const 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();
}
});
@@ -121,6 +161,8 @@ export 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);
});
@@ -128,6 +170,13 @@ export 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.
@@ -269,6 +318,8 @@ export class Magnifier extends Signals.EventEmitter {
this.xMouse = xMouse;
this.yMouse = yMouse;
+ this._updateContentScale();
+
let sysMouseOverAny = false;
this._zoomRegions.forEach(zoomRegion => {
if (zoomRegion.scrollToMousePos())

View File

@ -1,47 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 619136a..0aa224b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -59,6 +59,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 08952b8..e60b574 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -2045,6 +2045,8 @@ shell_global_get_debug_flags (ShellGlobal *global)
* - 'backtrace-segfaults'
* - 'backtrace-aborts'
* - 'backtrace-math-errors'
+ * - 'backtrace-crashes-all'
+ * - 'backtrace-all'
* - 'all'
*/
void

View File

@ -1,169 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 aa2f4dc..619136a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,16 +43,26 @@ static char *session_mode = NULL;
static int caught_signal = 0;
static gboolean force_animations = FALSE;
static char *script_path = NULL;
+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,
@@ -376,13 +386,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
@@ -493,10 +513,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))
{
@@ -649,8 +682,9 @@ main (int argc, char **argv)
g_autoptr (MetaContext) context = NULL;
g_autoptr (GFile) automation_script = NULL;
g_autofree char *cwd = 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);
@@ -694,7 +728,7 @@ main (int argc, char **argv)
* resolve internal modules.
*/
_shell_global_init ("session-mode", session_mode,
- "debug-flags", debug_flags,
+ "debug-flags", debug_flags_string,
"force-animations", force_animations,
"automation-script", automation_script,
NULL);
@@ -713,8 +747,14 @@ main (int argc, char **argv)
return EXIT_FAILURE;
}
- 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 ();
diff --git a/src/shell-global.c b/src/shell-global.c
index 2a6e7fd..08952b8 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -2037,11 +2037,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,

View File

@ -1,30 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 dec0efa..dca5f64 100644
--- a/src/main.c
+++ b/src/main.c
@@ -444,6 +444,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

View File

@ -1,74 +0,0 @@
From: "robert.mader@collabora.com" <robert.mader@collabora.com>
Date: Wed, 27 Sep 2023 01:10:45 +0200
Subject: overview: Handle unredirection in OverviewShown state machine
Under certain unknown circumstances currently not every
`disable_unredirect_for_display()` gets matched with an
`enable_unredirect_for_display()` when closing the overview.
As we only want to not disable unredirection when hidden and we nowadays
have a state machine that ensures we transition to and from one state to
another only once, handle unredirection en-/disablement as part of the
state transition.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2970>
(cherry picked from commit a94fcee9616ef52d0f1d6453515a104d69c6cb92)
Origin: upstream, after 45.0
---
js/ui/overview.js | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 66a83cf..2b173a5 100644
--- a/js/ui/overview.js
+++ b/js/ui/overview.js
@@ -305,6 +305,11 @@ export class Overview extends Signals.EventEmitter {
`${this._shownState} to ${state}`);
}
+ if (this._shownState === OverviewShownState.HIDDEN)
+ Meta.disable_unredirect_for_display(global.display);
+ else if (state === OverviewShownState.HIDDEN)
+ Meta.enable_unredirect_for_display(global.display);
+
this._shownState = state;
this.emit(OVERVIEW_SHOWN_TRANSITIONS[state].signal);
}
@@ -411,8 +416,6 @@ export class Overview extends Signals.EventEmitter {
_gestureUpdate(tracker, progress) {
if (!this._shown) {
- Meta.disable_unredirect_for_display(global.display);
-
this._shown = true;
this._visible = true;
this._visibleTarget = true;
@@ -567,8 +570,6 @@ export class Overview extends Signals.EventEmitter {
this._visibleTarget = true;
this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC;
- Meta.disable_unredirect_for_display(global.display);
-
Main.layoutManager.overviewGroup.set_child_above_sibling(
this._coverPane, null);
this._coverPane.show();
@@ -636,9 +637,6 @@ export class Overview extends Signals.EventEmitter {
}
_hideDone() {
- // Re-enable unredirection
- Meta.enable_unredirect_for_display(global.display);
-
this._coverPane.hide();
this._visible = false;
@@ -688,8 +686,6 @@ export class Overview extends Signals.EventEmitter {
// the animation because of a race in the xserver where the grab
// fails when requested very early during startup.
- Meta.disable_unredirect_for_display(global.display);
-
this._changeShownState(OverviewShownState.SHOWING);
this._overview.runStartupAnimation(() => {

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
--- gnome-shell-45.0.orig/js/ui/panel.js
+++ gnome-shell-45.0/js/ui/panel.js
@@ -551,7 +551,6 @@ class QuickSettings extends PanelMenu.Bu
this._powerProfiles = new PowerProfileStatus.Indicator();
this._rfkill = new RFKillStatus.Indicator();
this._autoRotate = new AutoRotateStatus.Indicator();
- this._unsafeMode = new UnsafeModeIndicator();
this._backgroundApps = new BackgroundAppsStatus.Indicator();
// add privacy-related indicators before any external indicators
@@ -575,7 +574,6 @@ class QuickSettings extends PanelMenu.Bu
this._indicators.add_child(this._rfkill);
this._indicators.add_child(this._autoRotate);
this._indicators.add_child(this._volumeOutput);
- this._indicators.add_child(this._unsafeMode);
this._indicators.add_child(this._system);
// add our quick settings items before any external ones
@@ -603,7 +601,6 @@ class QuickSettings extends PanelMenu.Bu
this._addItemsBefore(this._backlight.quickSettingsItems, sibling);
this._addItemsBefore(this._rfkill.quickSettingsItems, sibling);
this._addItemsBefore(this._autoRotate.quickSettingsItems, sibling);
- this._addItemsBefore(this._unsafeMode.quickSettingsItems, sibling);
// append background apps
this._backgroundApps.quickSettingsItems.forEach(

View File

@ -1,30 +1,11 @@
debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch
debian/Revert-build-Port-to-gcr4.patch
debian/Revert-tests-Fail-on-warnings-too.patch
Revert-keyboard-Spawn-tecla-to-show-keyboard-map.patch
gdm-util-Only-start-fingerprint-service-synchronously-whe.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/sessionMode-Add-support-for-configuring-an-icons-resource.patch
ubuntu/main-Support-loading-multiple-Yaru-theme-variants.patch
ubuntu/darkMode-Add-support-to-Yaru-theme-color-variants.patch
ubuntu/shell-global-util-Do-not-move-snap-apps-to-gnome-apps-sco.patch
overview-Handle-unredirection-in-OverviewShown-state-mach.patch
layout-Destroy-panel-barrier-on-shutdown.patch
remove-dbus-restrictions-with-pika-gnome-session.patch
workarounds/tests-Mark-view-verification-tests-as-incomplete-in-big-e.patch
debian/meson-Do-not-mark-CI-test-tools-as-required.patch
debian/tests-Do-not-run-screencast-tests.patch
debian/Support-Dynamic-triple-double-buffering.patch
workarounds/tests-skip-monitor-width-size-check-as-it-may-lead-to-une.patch
workarounds/tests-Skip-thread-priority-test.patch
workarounds/Mark-several-additional-tests-as-flaky.patch
workarounds/kms-crtc-Increase-default-deadline-evasion-to-1000-micros.patch
workarounds/place-Always-center-initial-setup.patch
workarounds/cogl-tests-Avoid-converting-16bpc-float-16bpc.patch
pika/xwayland-scaling-support.patch

View File

@ -1,46 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 6240b12..b3fff22 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -136,6 +136,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(':'))
+ }
}
/** @returns {void} */
diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
index e27f4fa..45320ea 100644
--- a/js/ui/sessionMode.js
+++ b/js/ui/sessionMode.js
@@ -32,6 +32,7 @@ const _modes = {
showWelcomeDialog: false,
allowSettings: false,
allowScreencast: false,
+ debugFlags: [],
enabledExtensions: [],
hasRunDialog: false,
hasWorkspaces: false,

View File

@ -1,50 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 <didrocks@ubuntu.com>
Original author: Daniel van Vugt <daniel.van.vugt@canonical.com>
Author: Marco Trevisan <marco.trevisan@canonical.com>
Last-Update: 2022-08-30
Forwarded: not-needed
---
js/ui/background.js | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/js/ui/background.js b/js/ui/background.js
index 8301330..cef7c87 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -101,8 +101,10 @@ import GObject from 'gi://GObject';
import GnomeBG from 'gi://GnomeBG';
import GnomeDesktop from 'gi://GnomeDesktop';
import Meta from 'gi://Meta';
+import St from 'gi://St';
import * as Signals from '../misc/signals.js';
+import * as Desktop from '../misc/desktop.js';
import * as LoginManager from '../misc/loginManager.js';
import * as Main from './main.js';
import * as Params from '../misc/params.js';
@@ -538,7 +540,16 @@ export const 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 (Desktop.is('ubuntu')) {
+ const dummyBgActor = new 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({

View File

@ -1,211 +0,0 @@
From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
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 | 42 +++++++++++++++++
4 files changed, 123 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="@GETTEXT_PACKAGE@">
+ <enum id="com.ubuntu.login-screen.BackgroundRepeat">
+ <value value="1" nick="default"/>
+ <value value="2" nick="repeat"/>
+ <value value="3" nick="repeat-x"/>
+ <value value="4" nick="repeat-y"/>
+ <value value="5" nick="no-repeat"/>
+ <value value="6" nick="space"/>
+ <value value="7" nick="round"/>
+ </enum>
+ <enum id="com.ubuntu.login-screen.BackgroundSize">
+ <value value="1" nick="default"/>
+ <value value="2" nick="auto"/>
+ <value value="3" nick="cover"/>
+ <value value="4" nick="contain"/>
+ </enum>
+ <schema id="com.ubuntu.login-screen" path="/com/ubuntu/login-screen/">
+ <key name="background-picture-uri" type="s">
+ <default>''</default>
+ <summary>
+ Sets the background image for the login screen.
+ </summary>
+ <description>
+ 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.
+ </description>
+ </key>
+ <key name="background-color" type="s">
+ <default>''</default>
+ <summary>
+ The background-color property sets the background color.
+ </summary>
+ <description>
+ 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.
+ </description>
+ </key>
+ <key name="background-repeat" enum="com.ubuntu.login-screen.BackgroundRepeat">
+ <default>'default'</default>
+ <summary>
+ The background-repeat property sets if/how the background image will be repeated.
+ </summary>
+ <description>
+ 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.
+ </description>
+ </key>
+ <key name="background-size" enum="com.ubuntu.login-screen.BackgroundSize">
+ <default>'default'</default>
+ <summary>
+ The background-size property specifies the size of the background image.
+ </summary>
+ <description>
+ 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.
+ </description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/meson.build b/data/meson.build
index a31efcc..07d6d4a 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -97,6 +97,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)
if have_systemd
@@ -125,7 +131,7 @@ endif
# for unit tests - gnome.compile_schemas() only looks in srcdir
custom_target('compile-schemas',
- input: schema,
+ input: [schema, schema_ubuntu_login],
output: 'gschemas.compiled',
command: [find_program('glib-compile-schemas'), data_builddir],
build_by_default: true)
diff --git a/js/ui/background.js b/js/ui/background.js
index cef7c87..0da99da 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -543,7 +543,11 @@ export const SystemBackground = GObject.registerClass({
let backgroundColor = DEFAULT_BACKGROUND_COLOR;
if (Desktop.is('ubuntu')) {
+ const loginSettings = new Gio.Settings({schema_id: 'com.ubuntu.login-screen'});
+ const bgColor = loginSettings.get_string('background-color');
const dummyBgActor = new 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 993e436..c27f44b 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -33,6 +33,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 @@ export class ScreenShield 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,31 @@ export class ScreenShield 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 && !backgroundColor.includes('rgba'))
+ 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}`);
+
+ const lockDialogGroupStyle = inlineStyle.join('; ') || null;
+ this._lockDialogGroup.set_style(lockDialogGroupStyle);
+ this._dialog?.set_style(lockDialogGroupStyle ? `
+ background-image: none;
+ background-color: transparent;` : null);
+ }
+
async _syncInhibitor() {
const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY) ||
this._settings.get_boolean(SUSPEND_LOCK_ENABLED_KEY);
@@ -433,6 +474,7 @@ export class ScreenShield extends Signals.EventEmitter {
}
this._dialog = new constructor(this._lockDialogGroup);
+ this._refreshBackground();
let time = global.get_current_time();
if (!this._dialog.open(time)) {

View File

@ -1,81 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 | 42 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/js/ui/status/darkMode.js b/js/ui/status/darkMode.js
index 4e68a74..321a88b 100644
--- a/js/ui/status/darkMode.js
+++ b/js/ui/status/darkMode.js
@@ -1,5 +1,6 @@
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
+import St from 'gi://St';
import * as Main from '../main.js';
@@ -19,6 +20,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(),
@@ -28,13 +32,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});
}

View File

@ -1,65 +0,0 @@
From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
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 ee4b763..a69c004 100644
--- a/js/js-resources.gresource.xml
+++ b/js/js-resources.gresource.xml
@@ -17,6 +17,7 @@
<file>misc/animationUtils.js</file>
<file>misc/config.js</file>
<file>misc/extensionUtils.js</file>
+ <file>misc/desktop.js</file>
<file>misc/fileUtils.js</file>
<file>misc/dateUtils.js</file>
<file>misc/dbusUtils.js</file>
diff --git a/js/misc/desktop.js b/js/misc/desktop.js
new file mode 100644
index 0000000..05044c1
--- /dev/null
+++ b/js/misc/desktop.js
@@ -0,0 +1,33 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+import GLib from '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.
+export 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);
+}

View File

@ -1,42 +0,0 @@
From: Jeremy Soller <jeremy@system76.com>
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 8a4948e..5fbb672 100644
--- a/data/gnome-shell-theme.gresource.xml
+++ b/data/gnome-shell-theme.gresource.xml
@@ -9,6 +9,7 @@
<file>checkbox-off-focused.svg</file>
<file>checkbox-off-light.svg</file>
<file>checkbox-off.svg</file>
+ <file alias="gdm.css">gnome-shell-dark.css</file>
<file>gnome-shell-dark.css</file>
<file>gnome-shell-light.css</file>
<file>gnome-shell-high-contrast.css</file>
diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
index 8e30a66..e27f4fa 100644
--- a/js/ui/sessionMode.js
+++ b/js/ui/sessionMode.js
@@ -53,6 +53,8 @@ const _modes = {
'gdm': {
hasNotifications: true,
+ stylesheetName: 'gdm.css',
+ themeResourceName: 'gdm-theme.gresource',
isGreeter: true,
isPrimary: true,
unlockDialog: LoginDialog,

View File

@ -1,36 +0,0 @@
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
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 a3e4372..104fb93 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -1272,7 +1272,11 @@ export const 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});
@@ -1280,6 +1284,7 @@ export const LoginDialog = GObject.registerClass({
opacity: 255,
duration: 1000,
mode: Clutter.AnimationMode.EASE_IN_QUAD,
+ onComplete: () => { this._logoBin.set_opacity_override(-1); },
});
return true;

View File

@ -1,34 +0,0 @@
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
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 <daniel.van.vugt@canonical.com>
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 4d5cd5a..06ed440 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -1058,6 +1058,7 @@ export const 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);

View File

@ -1,93 +0,0 @@
From: Tim Lunn <tim@feathertop.org>
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 efb875b..75a7016 100644
--- a/js/misc/systemActions.js
+++ b/js/misc/systemActions.js
@@ -231,6 +231,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();
@@ -332,7 +360,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');
}
@@ -420,20 +448,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() {

View File

@ -1,48 +0,0 @@
From: Tim Lunn <tim@feathertop.org>
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 f8c59fa..993e436 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -26,6 +26,7 @@ import {adjustAnimationTime} from '../misc/animationUtils.js';
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 @@ export class ScreenShield 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 @@ export class ScreenShield 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 @@ export class ScreenShield 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();

View File

@ -1,345 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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/st-settings.c | 120 +++++++++++++++++++++++++++++
4 files changed, 186 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 07d6d4a..3274af2 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -97,6 +97,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',
@@ -131,7 +137,7 @@ endif
# for unit tests - gnome.compile_schemas() only looks in srcdir
custom_target('compile-schemas',
- input: [schema, schema_ubuntu_login],
+ input: [schema, schema_ubuntu, schema_ubuntu_login],
output: 'gschemas.compiled',
command: [find_program('glib-compile-schemas'), data_builddir],
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="@GETTEXT_PACKAGE@">
+ <enum id="org.gnome.shell.ubuntu.GDesktopColorScheme">
+ <value value="1" nick="default"/>
+ <value value="2" nick="prefer-dark"/>
+ <value value="3" nick="prefer-light"/>
+ </enum>
+ <schema id="org.gnome.shell.ubuntu" path="/org/gnome/shell/ubuntu/">
+ <key name="color-scheme" enum="org.gnome.shell.ubuntu.GDesktopColorScheme">
+ <default>'default'</default>
+ <summary>Color scheme</summary>
+ <description>
+ The preferred color scheme for the shell user interface. Valid values are “default”, “prefer-dark”, “prefer-light”.
+ </description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/js/ui/main.js b/js/ui/main.js
index e5921eb..2c6c580 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -163,6 +163,9 @@ export async function start() {
St.Settings.get().connect('notify::high-contrast', _loadDefaultStylesheet);
St.Settings.get().connect('notify::color-scheme', _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();
@@ -434,6 +437,38 @@ export function getStyleVariant() {
}
}
+function _getYaruStyleSheet(themeVariant) {
+ const styleVariant = getStyleVariant() || 'light';
+ const baseThemeName = sessionMode.stylesheetName.split(".css").at(0);
+ const isDark = themeVariant === 'dark' || themeVariant?.endsWith('-dark');
+ let colorSchemeVariant;
+
+ if (isDark && styleVariant === 'light') {
+ colorSchemeVariant = themeVariant.split('-').slice(0, -1).join('-');
+ } else if (!isDark && styleVariant == '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;
@@ -442,6 +477,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(name.replace('.css', `-${getStyleVariant()}.css`));
diff --git a/src/st/st-settings.c b/src/st/st-settings.c
index 790ec64..de6db1b 100644
--- a/src/st/st-settings.c
+++ b/src/st/st-settings.c
@@ -35,6 +35,8 @@
#define KEY_COLOR_SCHEME "color-scheme"
#define KEY_HIGH_CONTRAST "high-contrast"
#define KEY_GTK_ICON_THEME "icon-theme"
+#define KEY_GTK_THEME "gtk-theme"
+#define KEY_COLOR_SCHEME "color-scheme"
#define KEY_MAGNIFIER_ACTIVE "screen-magnifier-enabled"
#define KEY_DISABLE_SHOW_PASSWORD "disable-show-password"
@@ -46,7 +48,10 @@ enum {
PROP_FONT_NAME,
PROP_COLOR_SCHEME,
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,
@@ -63,10 +68,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;
@@ -137,7 +145,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);
@@ -189,6 +200,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, KEY_COLOR_SCHEME));
+ break;
case PROP_COLOR_SCHEME:
g_value_set_enum (value, settings->color_scheme);
break;
@@ -294,6 +315,39 @@ st_settings_class_init (StSettingsClass *klass)
ST_SYSTEM_COLOR_SCHEME_DEFAULT,
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:
*
@@ -330,6 +384,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,
@@ -351,6 +444,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);
@@ -364,6 +461,23 @@ on_interface_settings_changed (GSettings *g_settings,
g_object_notify_by_pspec (G_OBJECT (settings),
props[PROP_COLOR_SCHEME]);
}
+ else if (g_str_equal (key, KEY_COLOR_SCHEME))
+ {
+ g_object_notify_by_pspec (G_OBJECT (settings),
+ props[PROP_SHELL_COLOR_SCHEME]);
+ }
+}
+
+static void
+on_ubuntu_settings_changed (GSettings *g_settings,
+ const gchar *key,
+ StSettings *settings)
+{
+ if (g_str_equal (key, KEY_COLOR_SCHEME))
+ {
+ g_object_notify_by_pspec (G_OBJECT (settings),
+ props[PROP_SHELL_COLOR_SCHEME]);
+ }
}
static void
@@ -423,6 +537,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);
@@ -439,6 +557,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,

View File

@ -1,50 +0,0 @@
From: Didier Roche <didrocks@ubuntu.com>
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 b3fff22..8c0664a 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -385,6 +385,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;
@@ -395,12 +403,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;

View File

@ -1,163 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 @@
<method name="ActivateResult">
<arg type="s" name="identifier" direction="in" />
</method>
+
+ <!--
+ XUbuntuCancel:
+ Cancel the current search operation
+ -->
+ <method name="XUbuntuCancel" />
</interface>
</node>
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 @@
<arg type="as" name="terms" direction="in" />
<arg type="u" name="timestamp" direction="in" />
</method>
+
+ <!--
+ XUbuntuCancel:
+ Cancel the current search operation
+ -->
+ <method name="XUbuntuCancel" />
</interface>
</node>
diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js
index 6bd282b..4804bdd 100644
--- a/js/ui/remoteSearch.js
+++ b/js/ui/remoteSearch.js
@@ -29,6 +29,7 @@ const SearchProviderIface = `
<method name="ActivateResult">
<arg type="s" direction="in" />
</method>
+<method name="XUbuntuCancel" />
</interface>
</node>`;
@@ -57,6 +58,7 @@ const SearchProvider2Iface = `
<arg type="as" direction="in" />
<arg type="u" direction="in" />
</method>
+<method name="XUbuntuCancel" />
</interface>
</node>`;
@@ -307,6 +309,16 @@ class RemoteSearchProvider {
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 b938b03..4e68bd7 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -224,7 +224,9 @@ const 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)
@@ -602,6 +604,10 @@ export const 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());
@@ -650,11 +656,31 @@ export const 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;
@@ -726,6 +752,13 @@ export const 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();

View File

@ -1,89 +0,0 @@
From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
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 eb17579..eb2d12d 100644
--- a/js/ui/extensionDownloader.js
+++ b/js/ui/extensionDownloader.js
@@ -7,6 +7,7 @@ import GObject from 'gi://GObject';
import Soup from 'gi://Soup';
import * as Config from '../misc/config.js';
+import * as Desktop from '../misc/desktop.js';
import * as Dialog from './dialog.js';
import * as ExtensionUtils from '../misc/extensionUtils.js';
import * as FileUtils from '../misc/fileUtils.js';
@@ -35,6 +36,13 @@ export 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 cant 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));
@@ -194,6 +202,9 @@ export 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 21b3b19..25260ec 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -8,6 +8,7 @@ import Shell from 'gi://Shell';
import * as Signals from '../misc/signals.js';
import * as Config from '../misc/config.js';
+import * as Desktop from '../misc/desktop.js';
import * as ExtensionDownloader from './extensionDownloader.js';
import {ExtensionState, ExtensionType} from '../misc/extensionUtils.js';
import * as FileUtils from '../misc/fileUtils.js';
@@ -502,6 +503,10 @@ export class ExtensionManager extends Signals.EventEmitter {
await this.loadExtension(newExtension);
}
+ isModeExtension(uuid) {
+ return this._getModeExtensions().indexOf(uuid) !== -1;
+ }
+
async _callExtensionInit(uuid) {
if (!this._extensionSupportsSessionMode(uuid))
return false;
@@ -709,6 +714,10 @@ export class ExtensionManager 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 (error) {

View File

@ -1,38 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
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 8c0664a..e5921eb 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -547,7 +547,7 @@ export 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 45320ea..a34cf90 100644
--- a/js/ui/sessionMode.js
+++ b/js/ui/sessionMode.js
@@ -27,6 +27,7 @@ const _modes = {
stylesheetName: 'gnome-shell.css',
colorScheme: 'prefer-dark',
themeResourceName: 'gnome-shell-theme.gresource',
+ iconsResourceName: 'gnome-shell-icons.gresource',
hasOverview: false,
showCalendarEvents: false,
showWelcomeDialog: false,

View File

@ -1,75 +0,0 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Mon, 27 Mar 2023 21:02:02 +0200
Subject: shell-global, util: Do not move snap apps to gnome-apps scope
Snap applications already have their own scope so we must not move them.
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/2011806
---
js/misc/util.js | 20 ++++++++++++++++++--
src/shell-global.c | 7 +++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/js/misc/util.js b/js/misc/util.js
index 0201fd1..22d9a5a 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -119,6 +119,20 @@ export function spawnApp(argv) {
*/
export function trySpawn(argv) {
let success_, pid;
+ let path = argv[0];
+
+ if (!path?.includes('/')) {
+ path = GLib.find_program_in_path(argv[0]);
+ if (!path) {
+ throw new GLib.SpawnError({
+ code: GLib.SpawnError.NOENT,
+ message: _('Command not found'),
+ });
+ }
+
+ argv = [path, ...argv.slice(1)];
+ }
+
try {
[success_, pid] = GLib.spawn_async(
null, argv, null,
@@ -150,8 +164,10 @@ export function trySpawn(argv) {
}
}
- // Async call, we don't need the reply though
- GnomeDesktop.start_systemd_scope(argv[0], pid, null, null, null, () => {});
+ if (!path?.includes('/snap/bin') && !argv?.join(' ').includes('snap run')) {
+ // Async call, we don't need the reply though
+ GnomeDesktop.start_systemd_scope(argv[0], pid, null, null, null, () => {});
+ }
// Dummy child watch; we don't want to double-fork internally
// because then we lose the parent-child relationship, which
diff --git a/src/shell-global.c b/src/shell-global.c
index e60b574..a0c3d5c 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -1501,6 +1501,7 @@ shell_global_app_launched_cb (GAppLaunchContext *context,
{
gint32 pid;
const gchar *app_name;
+ const gchar *command_line;
if (!g_variant_lookup (platform_data, "pid", "i", &pid))
return;
@@ -1514,6 +1515,12 @@ shell_global_app_launched_cb (GAppLaunchContext *context,
if (app_name == NULL)
app_name = g_app_info_get_executable (info);
+ command_line = g_app_info_get_commandline (info);
+ if (command_line &&
+ (strstr (command_line, "/snap/bin") ||
+ strstr (command_line, "snap run")))
+ return;
+
/* Start async request; we don't care about the result */
gnome_start_systemd_scope (app_name,
pid,

View File

@ -0,0 +1,155 @@
From: Simon McVittie <smcv@debian.org>
Date: Wed, 13 Dec 2023 10:34:02 +0000
Subject: Mark several additional tests as flaky
Most of these have never been reliable on Debian buildds, especially
on ARM, so having them fail is not a regression. They usually succeed
after a few retries, but that's time-consuming and unsuitable to be a
QA gate.
Signed-off-by: Simon McVittie <smcv@debian.org>
Forwarded: no
---
src/tests/clutter/conform/gesture.c | 24 ++++++++++++++++++++++++
src/tests/clutter/conform/grab.c | 6 ++++++
src/tests/meson.build | 31 ++++++++++++++++++++++++++++---
3 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/src/tests/clutter/conform/gesture.c b/src/tests/clutter/conform/gesture.c
index 7d259f6..e732c1d 100644
--- a/src/tests/clutter/conform/gesture.c
+++ b/src/tests/clutter/conform/gesture.c
@@ -135,6 +135,12 @@ gesture_state_machine_move_to_waiting (void)
ClutterGesture *gesture = CLUTTER_GESTURE (g_object_new (TEST_TYPE_GESTURE, NULL));
gboolean was_updated;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+ return;
+ }
+
virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
now_us = g_get_monotonic_time ();
@@ -196,6 +202,12 @@ gesture_state_machine_move_to_cancelled_while_possible (void)
gboolean was_updated;
ClutterGestureState gesture_state_change;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+ return;
+ }
+
virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
now_us = g_get_monotonic_time ();
@@ -244,6 +256,12 @@ gesture_state_machine_move_to_cancelled_on_sequence_cancel (void)
gboolean was_updated;
ClutterGestureState gesture_state_change;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+ return;
+ }
+
virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
now_us = g_get_monotonic_time ();
@@ -302,6 +320,12 @@ gesture_multiple_mouse_buttons (void)
ClutterGesture *gesture = CLUTTER_GESTURE (g_object_new (TEST_TYPE_GESTURE, NULL));
gboolean was_updated;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+ return;
+ }
+
virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
now_us = g_get_monotonic_time ();
diff --git a/src/tests/clutter/conform/grab.c b/src/tests/clutter/conform/grab.c
index c62eea6..4ba11f4 100644
--- a/src/tests/clutter/conform/grab.c
+++ b/src/tests/clutter/conform/grab.c
@@ -620,6 +620,12 @@ grab_input_only (void)
ClutterSeat *seat;
g_autoptr (ClutterVirtualInputDevice) pointer = NULL;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3205");
+ return;
+ }
+
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
diff --git a/src/tests/meson.build b/src/tests/meson.build
index b98cfd4..a972096 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -389,6 +389,7 @@ if have_native_tests
'name': 'input-capture',
'suite': 'backends/native',
'sources': [ 'input-capture-tests.c' ],
+ 'flaky': true,
},
{
'name': 'thread',
@@ -680,8 +681,14 @@ if have_native_tests
test_depends = [ default_plugin ] + test_case.get('depends', [])
+ extra_suites = []
+
+ if test_case.get('flaky', false)
+ extra_suites += 'flaky'
+ endif
+
test(test_case['name'], test_executable,
- suite: ['core', 'mutter/' + test_case['suite']],
+ suite: ['core', 'mutter/' + test_case['suite']] + extra_suites,
env: test_env,
depends: test_depends,
is_parallel: false,
@@ -735,8 +742,26 @@ stacking_tests = [
]
foreach stacking_test: stacking_tests
+ extra_suites = []
+ flaky = false
+
+ if {
+ 'closed-transient-only-take-focus-parents': true,
+ # https://gitlab.gnome.org/GNOME/mutter/-/issues/3050
+ 'fullscreen-maximize': true,
+ 'minimized': true,
+ # https://gitlab.gnome.org/GNOME/mutter/-/issues/2509, https://bugs.debian.org/1050022
+ 'restore-size': true,
+ # https://gitlab.gnome.org/GNOME/mutter/-/issues/3051
+ 'unfullscreen-strut-change': true,
+ 'unmaximize-new-size': true,
+ }.get(stacking_test, false)
+ extra_suites += 'flaky'
+ flaky = true
+ endif
+
test(stacking_test, test_runner,
- suite: ['core', 'mutter/stacking'],
+ suite: ['core', 'mutter/stacking'] + extra_suites,
env: test_env,
args: [
files('stacking' / stacking_test + '.metatest'),
@@ -745,7 +770,7 @@ foreach stacking_test: stacking_tests
timeout: 60,
)
- if have_installed_tests
+ if have_installed_tests and not flaky
installed_tests_cdata = configuration_data()
installed_tests_cdata.set('apiversion', libmutter_api_version)
installed_tests_cdata.set('libexecdir', libexecdir)

View File

@ -0,0 +1,73 @@
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
Date: Thu, 25 Jul 2024 18:17:13 +0800
Subject: cogl/tests: Avoid converting 16bpc -> float -> 16bpc
Instead just assign 16bpc -> 16bpc
This avoids variations in CPU and GL driver behaviour when using
floats as intermediate values.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3582
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3903>
(cherry picked from commit 5360c58fe50080f4532efee46149c016acf558b2)
---
.../cogl/conform/test-offscreen-texture-formats.c | 33 +++++++++++-----------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/tests/cogl/conform/test-offscreen-texture-formats.c b/src/tests/cogl/conform/test-offscreen-texture-formats.c
index 8706ec3..170f447 100644
--- a/src/tests/cogl/conform/test-offscreen-texture-formats.c
+++ b/src/tests/cogl/conform/test-offscreen-texture-formats.c
@@ -61,35 +61,36 @@ test_offscreen_texture_formats_store_rgba16161616 (void)
const uint16_t rgba16_green = 61133;
const uint16_t rgba16_blue = 2;
const uint16_t rgba16_alpha = 1111;
- float red;
- float green;
- float blue;
- float alpha;
int i;
-
- red = (rgba16_red / (float) ((1 << 16) - 1));
- green = (rgba16_green / (float) ((1 << 16) - 1));
- blue = (rgba16_blue / (float) ((1 << 16) - 1));
- alpha = (rgba16_alpha / (float) ((1 << 16) - 1));
+ uint16_t tex_data[16];
g_assert_cmpint (rgb8_to_rgb16 (rgb16_to_rgb8 (rgba16_red)), !=, rgba16_red);
g_assert_cmpint (rgb8_to_rgb16 (rgb16_to_rgb8 (rgba16_green)), !=, rgba16_green);
g_assert_cmpint (rgb8_to_rgb16 (rgb16_to_rgb8 (rgba16_blue)), !=, rgba16_blue);
g_assert_cmpint (rgb8_to_rgb16 (rgb16_to_rgb8 (rgba16_alpha)), !=, rgba16_alpha);
+ for (i = 0; i < 4; i++)
+ {
+ uint16_t *pixel_data = (uint16_t *) &tex_data [i * 4];
+
+ pixel_data[0] = rgba16_red;
+ pixel_data[1] = rgba16_green;
+ pixel_data[2] = rgba16_blue;
+ pixel_data[3] = rgba16_alpha;
+ }
+
/* Allocate 2x2 to ensure we avoid any fast paths. */
- tex = cogl_texture_2d_new_with_format (test_ctx,
- 2, 2,
- COGL_PIXEL_FORMAT_RGBA_16161616_PRE);
+ tex = cogl_texture_2d_new_from_data (test_ctx,
+ 2, 2,
+ COGL_PIXEL_FORMAT_RGBA_16161616_PRE,
+ 16,
+ (const uint8_t *) tex_data,
+ NULL);
offscreen = cogl_offscreen_new_with_texture (tex);
cogl_framebuffer_allocate (COGL_FRAMEBUFFER (offscreen), &error);
g_assert_no_error (error);
- cogl_framebuffer_clear4f (COGL_FRAMEBUFFER (offscreen),
- COGL_BUFFER_BIT_COLOR,
- red, green, blue, alpha);
-
cogl_framebuffer_read_pixels (COGL_FRAMEBUFFER (offscreen), 0, 0, 2, 2,
COGL_PIXEL_FORMAT_RG_1616,
(uint8_t *) &readback);

View File

@ -0,0 +1,29 @@
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
Date: Tue, 7 Nov 2023 16:30:01 +0200
Subject: kms/crtc: Increase default deadline evasion to 1000 microseconds
This seems to be enough to fix cursor stutter on X1 Carbon 10 (OLED)
where the display is 90Hz and the touchpad ~145Hz.
Origin: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3373
Bug: https://gitlab.gnome.org/GNOME/mutter/-/issues/3146
Bug-Ubuntu: https://bugs.launchpad.net/bugs/2040977
Forwarded: yes
Last-Update: 2024-03-10
---
src/backends/native/meta-kms-crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
index a087208..8fcb2d9 100644
--- a/src/backends/native/meta-kms-crtc.c
+++ b/src/backends/native/meta-kms-crtc.c
@@ -28,7 +28,7 @@
#include "backends/native/meta-kms-update-private.h"
#include "backends/native/meta-kms-utils.h"
-#define DEADLINE_EVASION_US 800
+#define DEADLINE_EVASION_US 1000
#define DEADLINE_EVASION_WITH_KMS_TOPIC_US 1000
#define MINIMUM_REFRESH_RATE 30.f

View File

@ -0,0 +1,26 @@
From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 2 Dec 2022 22:49:41 +0100
Subject: place: Always center initial-setup
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell-extension-tiling-assistant/+bug/2011611
Origin: https://src.fedoraproject.org/rpms/mutter/blob/main/f/0001-place-Always-center-initial-setup-fedora-welcome.patch
Forwarded: not-needed
---
src/core/place.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/core/place.c b/src/core/place.c
index 23eb68e..ffe93b6 100644
--- a/src/core/place.c
+++ b/src/core/place.c
@@ -381,6 +381,10 @@ window_place_centered (MetaWindow *window)
type = window->type;
+ if (G_UNLIKELY (g_strcmp0 (meta_window_get_wm_class (window),
+ "org.gnome.InitialSetup") == 0))
+ return TRUE;
+
return (type == META_WINDOW_DIALOG ||
type == META_WINDOW_MODAL_DIALOG ||
type == META_WINDOW_SPLASHSCREEN ||

View File

@ -0,0 +1,48 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Tue, 15 Jun 2021 20:38:01 +0200
Subject: tests: Mark view-verification tests as incomplete in big-endian
archs
Saved pixmaps are invalid in big-endian architectures, so let's disable
the tests for now, checking only the basic metadata but not comparing
the contents.
Bug: https://gitlab.gnome.org/GNOME/mutter/-/issues/1850
Applied-upstream: no, this is a workaround
---
src/tests/meta-ref-test.c | 5 +++++
src/tests/ref-test-sanity.c | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/src/tests/meta-ref-test.c b/src/tests/meta-ref-test.c
index a074a46..e385594 100644
--- a/src/tests/meta-ref-test.c
+++ b/src/tests/meta-ref-test.c
@@ -522,6 +522,11 @@ meta_ref_test_verify_view (ClutterStageView *view,
g_assert_cmpint (ref_status, ==, CAIRO_STATUS_SUCCESS);
ensure_expected_format (&ref_image);
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ g_test_incomplete ("View comparison is not supported by this architecture");
+ return;
+#endif
+
if (!compare_images (ref_image, view_image, &gl_fuzz,
&diff_stat))
{
diff --git a/src/tests/ref-test-sanity.c b/src/tests/ref-test-sanity.c
index 12a07bb..eb69967 100644
--- a/src/tests/ref-test-sanity.c
+++ b/src/tests/ref-test-sanity.c
@@ -108,6 +108,11 @@ meta_test_ref_test_sanity (void)
clutter_actor_set_background_color (actor2, &CLUTTER_COLOR_INIT (52, 101, 164, 255));
clutter_actor_add_child (stage, actor2);
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ g_test_incomplete ("View comparison is not supported by this architecture");
+ return;
+#endif
+
g_test_expect_message ("libmutter-test",
G_LOG_LEVEL_CRITICAL,
"Pixel difference exceeds limits*");

View File

@ -0,0 +1,35 @@
From: =?utf-8?q?Jeremy_B=C3=ADcha?= <jeremy.bicha@canonical.com>
Date: Mon, 21 Aug 2023 11:45:48 -0400
Subject: tests: Skip thread priority test
This test added to 45 fails on Ubuntu's armhf builders
https://launchpad.net/ubuntu/+source/mutter/45~beta.1-0ubuntu1/+latestbuild/armhf
and on Debian's i386
https://buildd.debian.org/status/logs.php?pkg=mutter&arch=i386
Architecture defines are at
https://wiki.debian.org/ArchitectureSpecificsMemo
---
src/tests/native-thread.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/tests/native-thread.c b/src/tests/native-thread.c
index abe944b..178379f 100644
--- a/src/tests/native-thread.c
+++ b/src/tests/native-thread.c
@@ -1156,6 +1156,12 @@ assert_realtime (MetaThreadImpl *thread_impl,
g_variant_new ("(t)", gettid ()));
g_variant_get (ret, "(u)", &priority);
+
+#if defined __arm__ || defined __i386__
+ g_test_incomplete ("Modifying thread priority is not supported by this architecture");
+ return NULL;
+#endif
+
g_assert_cmpint (priority, ==, 20);
return NULL;

View File

@ -0,0 +1,29 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Mon, 14 Mar 2022 02:14:06 +0100
Subject: tests: skip monitor width size check as it may lead to unexpected
failure
This seems to be broken only on autopkg-tests.
Forwarded: not-needed
Applied-upstream: no, see also https://bugs.debian.org/1050023
---
src/tests/stacking/unmaximize-new-size.metatest | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/tests/stacking/unmaximize-new-size.metatest b/src/tests/stacking/unmaximize-new-size.metatest
index b25922a..07ea1d6 100644
--- a/src/tests/stacking/unmaximize-new-size.metatest
+++ b/src/tests/stacking/unmaximize-new-size.metatest
@@ -11,11 +11,9 @@ assert_size w/1 500 400
maximize w/1
wait_reconfigure
-assert_size w/1 MONITOR_WIDTH MONITOR_HEIGHT
resize w/1 300 500
wait_reconfigure
-assert_size w/1 MONITOR_WIDTH MONITOR_HEIGHT
unmaximize w/1
wait_reconfigure

Some files were not shown because too many files have changed in this diff Show More