summaryrefslogtreecommitdiff
path: root/gnome-classic-wayland.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnome-classic-wayland.patch')
-rw-r--r--gnome-classic-wayland.patch158
1 files changed, 158 insertions, 0 deletions
diff --git a/gnome-classic-wayland.patch b/gnome-classic-wayland.patch
new file mode 100644
index 0000000..38af9ca
--- /dev/null
+++ b/gnome-classic-wayland.patch
@@ -0,0 +1,158 @@
+From 1692d4a91d95fecd5642b0c92bc2c5b0dbcb4184 Mon Sep 17 00:00:00 2001
+From: Neal Gompa <ngompa@fedoraproject.org>
+Date: Fri, 29 Oct 2021 09:37:33 -0400
+Subject: [PATCH] classic: Install the session for Wayland and ship override
+ sessions
+
+The regular GNOME session ships with three options:
+
+* GNOME
+* GNOME on Wayland (available when GDM starts in X11)
+* GNOME on Xorg (available when GDM starts in Wayland)
+
+The main GNOME session is set up so it works to match how GDM starts,
+so GNOME is on Wayland if GDM is (or GNOME is on X11 if GDM is).
+
+For GNOME Classic, we are missing this setup, so port this behavior
+over from the GNOME session setup.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/195>
+---
+ data/gnome-classic-wayland.desktop.in | 8 ++++++
+ data/gnome-classic-xorg.desktop.in | 8 ++++++
+ data/meson.build | 40 +++++++++++++++++++++------
+ meson.build | 5 ++++
+ meson/session-post-install.py | 20 ++++++++++++++
+ 5 files changed, 72 insertions(+), 9 deletions(-)
+ create mode 100644 data/gnome-classic-wayland.desktop.in
+ create mode 100644 data/gnome-classic-xorg.desktop.in
+ create mode 100755 meson/session-post-install.py
+
+diff --git a/data/gnome-classic-wayland.desktop.in b/data/gnome-classic-wayland.desktop.in
+new file mode 100644
+index 00000000..7287c689
+--- /dev/null
++++ b/data/gnome-classic-wayland.desktop.in
+@@ -0,0 +1,8 @@
++[Desktop Entry]
++Name=GNOME Classic on Wayland
++Comment=This session logs you into GNOME Classic
++Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
++TryExec=gnome-session
++Type=Application
++DesktopNames=GNOME-Classic;GNOME;
++X-GDM-SessionRegisters=true
+diff --git a/data/gnome-classic-xorg.desktop.in b/data/gnome-classic-xorg.desktop.in
+new file mode 100644
+index 00000000..5fb338a1
+--- /dev/null
++++ b/data/gnome-classic-xorg.desktop.in
+@@ -0,0 +1,8 @@
++[Desktop Entry]
++Name=GNOME Classic on Xorg
++Comment=This session logs you into GNOME Classic
++Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
++TryExec=gnome-session
++Type=Application
++DesktopNames=GNOME-Classic;GNOME;
++X-GDM-SessionRegisters=true
+diff --git a/data/meson.build b/data/meson.build
+index 27f42872..47fe798e 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -1,12 +1,34 @@
+-session_desktop = 'gnome-classic.desktop'
+-i18n.merge_file('',
+- input: session_desktop + '.in',
+- output: session_desktop,
+- po_dir: '../po',
+- install: true,
+- install_dir: xsessiondir,
+- type: 'desktop'
+-)
++session_desktop_base = 'gnome-classic'
++
++session_desktops = [
++ session_desktop_base,
++ session_desktop_base + '-xorg',
++ session_desktop_base + '-wayland',
++]
++
++foreach name: session_desktops
++ session_desktop = name + '.desktop'
++ if name.endswith('-xorg')
++ session_instdir = xsessiondir
++ elif name.endswith('-wayland')
++ session_instdir = wlsessiondir
++ else
++ # FIXME: The same target can not be copied into two directories.
++ # There is a workaround in meson/session-post-install.py until proper
++ # solution arises:
++ # https://github.com/mesonbuild/meson/issues/2416
++ session_instdir = xsessiondir
++ #session_instdir = [ xesssiondir, wlsessiondir ]
++ endif
++ i18n.merge_file('',
++ input: session_desktop + '.in',
++ output: session_desktop,
++ po_dir: '../po',
++ install: true,
++ install_dir: session_instdir,
++ type: 'desktop'
++ )
++endforeach
+
+ classic_uuids = []
+ foreach e : classic_extensions
+diff --git a/meson.build b/meson.build
+index dda3ddac..ea8a859d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -20,6 +20,7 @@ themedir = join_paths(shelldir, 'theme')
+ schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
+ sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
+ xsessiondir = join_paths(datadir, 'xsessions')
++wlsessiondir = join_paths(datadir, 'wayland-sessions')
+
+ ver_arr = meson.project_version().split('.')
+ shell_version = ver_arr[0]
+@@ -90,6 +91,10 @@ endforeach
+
+ if classic_mode_enabled
+ subdir('data')
++ meson.add_install_script(
++ 'meson/session-post-install.py',
++ join_paths(get_option('prefix'), datadir)
++ )
+ endif
+
+ subdir('extensions')
+diff --git a/meson/session-post-install.py b/meson/session-post-install.py
+new file mode 100755
+index 00000000..36abe5e4
+--- /dev/null
++++ b/meson/session-post-install.py
+@@ -0,0 +1,20 @@
++#!/usr/bin/env python3
++
++import os
++import shutil
++import sys
++
++if os.environ.get('DESTDIR'):
++ install_root = os.environ.get('DESTDIR') + os.path.abspath(sys.argv[1])
++else:
++ install_root = sys.argv[1]
++
++# FIXME: Meson is unable to copy a generated target file:
++# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
++dst_dir = os.path.join(install_root, 'wayland-sessions')
++if not os.path.exists(dst_dir):
++ os.makedirs(dst_dir)
++
++src = os.path.join(install_root, 'xsessions', 'gnome-classic.desktop')
++dst = os.path.join(dst_dir, 'gnome-classic.desktop')
++shutil.copyfile(src, dst)
+--
+2.33.1
+