diff --git a/.github/workflows/wolfi.yml b/.github/workflows/wolfi.yml new file mode 100644 index 0000000..d76eb4f --- /dev/null +++ b/.github/workflows/wolfi.yml @@ -0,0 +1,58 @@ +name: Build and Upload Wolfi Packages +on: + schedule: + - cron: '50 5,17 * * *' # 5:50 AM and 5:50 PM UTC every day + pull_request: + merge_group: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + +jobs: + upload-wolfi-packages: + name: Build and upload Wolfi packages + runs-on: ubuntu-22.04 + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false + steps: + # Checkout push-to-registry action GitHub repository + - name: Checkout Push to Registry action + uses: actions/checkout@v4 + + - name: Generate package list + run: | + cd wolfi + # Copy package resources to workdir + RESOURCES=$(ls -d */) + for resource in $RESOURCES; do + cp -r $resource/* . + done + # Create package list + APK_LIST=$(find *.yaml -type 'f' | tr '\n' ',') + echo "APK_LIST=$APK_LIST" >> $GITHUB_ENV + + # Build APKs with melange + - name: Build APKs + id: melange + uses: chainguard-dev/actions/melange-build@main + with: + archs: aarch64,x86_64 + empty-workspace: false + multi-config: ${{ env.APK_LIST }} + sign-with-temporary-key: true + workdir: ./wolfi + + # Upload packages + - name: 'Upload built packages archive to Github Artifacts' + uses: actions/upload-artifact@v4 + with: + name: wolfi-packages + path: ./packages + retention-days: 1 # Low ttl since this is just an intermediary used once + if-no-files-found: error diff --git a/akmods/framework-laptop/framework-laptop-kmod-common.spec b/akmods/framework-laptop/framework-laptop-kmod-common.spec new file mode 100644 index 0000000..0083f57 --- /dev/null +++ b/akmods/framework-laptop/framework-laptop-kmod-common.spec @@ -0,0 +1,27 @@ +%global real_name framework-laptop + +Name: %{real_name}-kmod-common +Version: {{{ git_dir_version }}} +Release: 1%{?dist} +Summary: Kernel module to expose more Framework Laptop stuff +License: GPLv2 +URL: https://github.com/KyleGospo/framework-laptop-kmod +BuildArch: noarch + +Source: %{url}/archive/refs/heads/main.tar.gz + +Requires: %{real_name}-kmod = %{?epoch:%{epoch}:}%{version} +Provides: %{real_name}-kmod-common = %{?epoch:%{epoch}:}%{version} + +%description +A kernel module that exposes the Framework Laptop (13, 16)'s battery charge limit and LEDs to userspace. + +%prep +%autosetup -p1 -n %{real_name}-kmod-main + +%files +%license LICENSE +%doc README.md + +%changelog +{{{ git_dir_changelog }}} diff --git a/akmods/framework-laptop/framework-laptop-kmod.spec b/akmods/framework-laptop/framework-laptop-kmod.spec new file mode 100644 index 0000000..aa656d6 --- /dev/null +++ b/akmods/framework-laptop/framework-laptop-kmod.spec @@ -0,0 +1,53 @@ +# Build only the akmod package and no kernel module packages: +%define buildforkernels akmod +%global real_name framework-laptop +%global modname framework_laptop + +%global debug_package %{nil} + +Name: %{real_name}-kmod +Version: {{{ git_dir_version }}} +Release: 1%{?dist} +Summary: Kernel module to expose more Framework Laptop stuff +License: GPLv2 +URL: https://github.com/KyleGospo/framework-laptop-kmod + +Source: %{url}/archive/refs/heads/main.tar.gz + +# Get the needed BuildRequires (in parts depending on what we build for): +BuildRequires: kmodtool + +# kmodtool does its magic here +%{expand:%(kmodtool --target %{_target_cpu} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} 2>/dev/null) } + +%description +A kernel module that exposes the Framework Laptop (13, 16)'s battery charge limit and LEDs to userspace. + +%prep +# Error out if there was something wrong with kmodtool: +%{?kmodtool_check} +# Print kmodtool output for debugging purposes: +kmodtool --target %{_target_cpu} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} 2>/dev/null + +%autosetup -p1 -n %{real_name}-kmod-main + +for kernel_version in %{?kernel_versions} ; do + mkdir -p _kmod_build_${kernel_version%%___*} + cp -a %{modname}.c Makefile _kmod_build_${kernel_version%%___*}/ +done + +%build +for kernel_version in %{?kernel_versions} ; do + make V=1 %{?_smp_mflags} -C ${kernel_version##*___} M=${PWD}/_kmod_build_${kernel_version%%___*} VERSION=v%{version} modules +done + +%install +for kernel_version in %{?kernel_versions}; do + mkdir -p %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + install -D -m 755 _kmod_build_${kernel_version%%___*}/%{modname}.ko %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + chmod a+x %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/%{modname}.ko +done +%{?akmod_install} + +%changelog +{{{ git_dir_changelog }}} diff --git a/staging/gnome-settings-daemon/353.patch b/staging/gnome-settings-daemon/353.patch new file mode 100644 index 0000000..4475144 --- /dev/null +++ b/staging/gnome-settings-daemon/353.patch @@ -0,0 +1,208 @@ +From 325ea8da548bac876d7c707b616e1bb4190305f8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Wed, 13 Dec 2023 17:31:07 +0100 +Subject: [PATCH] xsettings: Get UI scaling factor from dedicated D-Bus API + +Instead of getting the UI scaling factor from the display configuration +API, get it from a new X11 properties API exposed by mutter. +--- + plugins/xsettings/gsd-xsettings-manager.c | 140 ++++++++-------------- + 1 file changed, 53 insertions(+), 87 deletions(-) + +diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c +index f8ec6ebc..8a8f069f 100644 +--- a/plugins/xsettings/gsd-xsettings-manager.c ++++ b/plugins/xsettings/gsd-xsettings-manager.c +@@ -609,81 +609,47 @@ get_dpi_from_gsettings (GsdXSettingsManager *manager) + return dpi * factor; + } + +-static gboolean +-get_legacy_ui_scale (GVariantIter *properties, +- int *scale) +-{ +- const char *key; +- GVariant *value; +- +- *scale = 0; +- +- while (g_variant_iter_loop (properties, "{&sv}", &key, &value)) { +- if (!g_str_equal (key, "legacy-ui-scaling-factor")) +- continue; +- +- *scale = g_variant_get_int32 (value); +- break; +- } +- +- if (*scale < 1) { +- g_warning ("Failed to get current UI legacy scaling factor"); +- *scale = 1; +- return FALSE; +- } +- +- return TRUE; +-} +- +-#define MODE_FORMAT "(siiddada{sv})" +-#define MODES_FORMAT "a" MODE_FORMAT +- +-#define MONITOR_SPEC_FORMAT "(ssss)" +-#define MONITOR_FORMAT "(" MONITOR_SPEC_FORMAT MODES_FORMAT "a{sv})" +-#define MONITORS_FORMAT "a" MONITOR_FORMAT +- +-#define LOGICAL_MONITOR_FORMAT "(iiduba" MONITOR_SPEC_FORMAT "a{sv})" +-#define LOGICAL_MONITORS_FORMAT "a" LOGICAL_MONITOR_FORMAT +- +-#define CURRENT_STATE_FORMAT "(u" MONITORS_FORMAT LOGICAL_MONITORS_FORMAT "a{sv})" +- + static int + get_window_scale (GsdXSettingsManager *manager) + { + g_autoptr(GError) error = NULL; +- g_autoptr(GVariant) current_state = NULL; ++ g_autoptr(GVariant) res = NULL; ++ g_autoptr(GVariant) ui_scaling_factor_variant = NULL; + g_autoptr(GVariantIter) properties = NULL; +- int scale = 1; +- +- current_state = +- g_dbus_connection_call_sync (manager->dbus_connection, +- "org.gnome.Mutter.DisplayConfig", +- "/org/gnome/Mutter/DisplayConfig", +- "org.gnome.Mutter.DisplayConfig", +- "GetCurrentState", +- NULL, +- NULL, +- G_DBUS_CALL_FLAGS_NO_AUTO_START, +- -1, +- NULL, +- &error); +- if (!current_state) { +- g_warning ("Failed to get current display configuration state: %s", +- error->message); ++ int ui_scaling_factor = 1; ++ ++ res = g_dbus_connection_call_sync (manager->dbus_connection, ++ "org.gnome.Mutter.X11", ++ "/org/gnome/Mutter/X11", ++ "org.freedesktop.DBus.Properties", ++ "Get", ++ g_variant_new ("(ss)", ++ "org.gnome.Mutter.X11", ++ "UiScalingFactor"), ++ NULL, ++ G_DBUS_CALL_FLAGS_NO_AUTO_START, ++ -1, ++ NULL, ++ &error); ++ if (!res) { ++ if (g_error_matches (error, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_NAME_HAS_NO_OWNER)) { ++ /* Mutter X11 interface is not yet on the bus, this is expected ++ * while starting up, it'll appear on the bus right away. ++ */ ++ } else { ++ g_warning ("Failed to get current UI scaling factor: %s", ++ error->message); ++ } ++ + return 1; + } + +- g_variant_get (current_state, +- CURRENT_STATE_FORMAT, +- NULL, +- NULL, +- NULL, +- &properties); +- +- if (!get_legacy_ui_scale (properties, &scale)) +- g_warning ("Failed to get current UI legacy scaling factor"); ++ g_variant_get (res, "(v)", &ui_scaling_factor_variant); ++ g_variant_get (ui_scaling_factor_variant, "i", &ui_scaling_factor); + +- return scale; ++ return ui_scaling_factor; + } + + typedef struct { +@@ -1120,33 +1086,33 @@ setup_xsettings_managers (GsdXSettingsManager *manager) + } + + static void +-monitors_changed (GsdXSettingsManager *manager) ++ui_scaling_factor_changed (GsdXSettingsManager *manager) + { + update_xft_settings (manager); + queue_notify (manager); + } + + static void +-on_monitors_changed (GDBusConnection *connection, +- const gchar *sender_name, +- const gchar *object_path, +- const gchar *interface_name, +- const gchar *signal_name, +- GVariant *parameters, +- gpointer data) ++on_mutter_x11_properties_changed (GDBusConnection *connection, ++ const gchar *sender_name, ++ const gchar *object_path, ++ const gchar *interface_name, ++ const gchar *signal_name, ++ GVariant *parameters, ++ gpointer data) + { + GsdXSettingsManager *manager = data; +- monitors_changed (manager); ++ ui_scaling_factor_changed (manager); + } + + static void +-on_display_config_name_appeared_handler (GDBusConnection *connection, +- const gchar *name, +- const gchar *name_owner, +- gpointer data) ++on_mutter_x11_name_appeared_handler (GDBusConnection *connection, ++ const gchar *name, ++ const gchar *name_owner, ++ gpointer data) + { + GsdXSettingsManager *manager = data; +- monitors_changed (manager); ++ ui_scaling_factor_changed (manager); + } + + static void +@@ -1422,20 +1388,20 @@ gsd_xsettings_manager_start (GsdXSettingsManager *manager, + + manager->monitors_changed_id = + g_dbus_connection_signal_subscribe (manager->dbus_connection, +- "org.gnome.Mutter.DisplayConfig", +- "org.gnome.Mutter.DisplayConfig", +- "MonitorsChanged", +- "/org/gnome/Mutter/DisplayConfig", ++ "org.gnome.Mutter.X11", ++ "org.freedesktop.DBus.Properties", ++ "PropertiesChanged", ++ "/org/gnome/Mutter/X11", + NULL, + G_DBUS_SIGNAL_FLAGS_NONE, +- on_monitors_changed, ++ on_mutter_x11_properties_changed, + manager, + NULL); + manager->display_config_watch_id = + g_bus_watch_name_on_connection (manager->dbus_connection, +- "org.gnome.Mutter.DisplayConfig", ++ "org.gnome.Mutter.X11", + G_BUS_NAME_WATCHER_FLAGS_NONE, +- on_display_config_name_appeared_handler, ++ on_mutter_x11_name_appeared_handler, + NULL, + manager, + NULL); +-- +GitLab + diff --git a/staging/gnome-settings-daemon/gnome-settings-daemon.spec b/staging/gnome-settings-daemon/gnome-settings-daemon.spec new file mode 100644 index 0000000..6d35ed8 --- /dev/null +++ b/staging/gnome-settings-daemon/gnome-settings-daemon.spec @@ -0,0 +1,206 @@ +%global glib2_version 2.58 +%global colord_version 1.4.5 +%global geocode_glib_version 3.26.3 +%global gnome_desktop_version 3.37.1 +%global gsettings_desktop_schemas_version 46~beta +%global gtk3_version 3.15.3 +%global geoclue_version 2.3.1 + +%ifnarch s390 s390x +%global wacom_unit org.gnome.SettingsDaemon.Wacom.service +%else +%global wacom_unit %{nil} +%endif +%global systemd_units org.gnome.SettingsDaemon.A11ySettings.service org.gnome.SettingsDaemon.Color.service org.gnome.SettingsDaemon.Datetime.service org.gnome.SettingsDaemon.Housekeeping.service org.gnome.SettingsDaemon.Keyboard.service org.gnome.SettingsDaemon.MediaKeys.service org.gnome.SettingsDaemon.Power.service org.gnome.SettingsDaemon.PrintNotifications.service org.gnome.SettingsDaemon.Rfkill.service org.gnome.SettingsDaemon.ScreensaverProxy.service org.gnome.SettingsDaemon.Sharing.service org.gnome.SettingsDaemon.Smartcard.service org.gnome.SettingsDaemon.Sound.service org.gnome.SettingsDaemon.UsbProtection.service org.gnome.SettingsDaemon.Wwan.service org.gnome.SettingsDaemon.XSettings.service %%{wacom_unit} + +%global gnome_major_version 46 +%global gnome_version %{gnome_major_version}.0 + +%global tarball_version %%(echo %{gnome_version} | tr '~' '.') +%global major_version %%(echo %{gnome_version} | cut -f 1 -d '~' | cut -f 1 -d '.') + +Name: gnome-settings-daemon +Version: %{gnome_version} +Release: %autorelease.xscaling.{{{ git_dir_version }}} +Summary: The daemon sharing settings from GNOME to GTK+/KDE applications + +License: GPL-2.0-or-later AND LGPL-2.1-or-later +URL: https://gitlab.gnome.org/GNOME/gnome-settings-daemon +Source0: https://download.gnome.org/sources/%{name}/%{gnome_major_version}/%{name}-%{tarball_version}.tar.xz + +# https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/353 +Patch0: 353.patch + +BuildRequires: gcc +BuildRequires: gettext +BuildRequires: meson >= 0.49.0 +BuildRequires: perl-interpreter +BuildRequires: systemd-rpm-macros +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(colord) >= %{colord_version} +BuildRequires: pkgconfig(cups) +BuildRequires: pkgconfig(fontconfig) +BuildRequires: pkgconfig(gck-2) +BuildRequires: pkgconfig(gcr-4) +BuildRequires: pkgconfig(geoclue-2.0) >= %{geoclue_version} +BuildRequires: pkgconfig(geocode-glib-2.0) >= %{geocode_glib_version} +BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version} +BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} +BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} +BuildRequires: pkgconfig(gudev-1.0) +BuildRequires: pkgconfig(gweather4) +BuildRequires: pkgconfig(lcms2) >= 2.2 +BuildRequires: pkgconfig(libcanberra-gtk3) +BuildRequires: pkgconfig(libgeoclue-2.0) +BuildRequires: pkgconfig(libnm) +BuildRequires: pkgconfig(libnotify) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libpulse-mainloop-glib) +BuildRequires: pkgconfig(librsvg-2.0) +BuildRequires: pkgconfig(mm-glib) +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(polkit-gobject-1) +BuildRequires: pkgconfig(upower-glib) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xi) +BuildRequires: pkgconfig(wayland-client) +%ifnarch s390 s390x +BuildRequires: pkgconfig(libwacom) >= 0.7 +%endif + +Requires: colord >= %{colord_version} +Requires: iio-sensor-proxy +Requires: geoclue2 >= %{geoclue_version} +Requires: geocode-glib2%{?_isa} >= %{geocode_glib_version} +Requires: glib2%{?_isa} >= %{glib2_version} +Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version} +Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} +Requires: gtk3%{?_isa} >= %{gtk3_version} +Requires: libgweather4%{?_isa} + +%description +A daemon to share settings from GNOME to other applications. It also +handles global keybindings, as well as a number of desktop-wide settings. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%prep +%autosetup -p1 -n %{name}-%{tarball_version} + +%build +%meson +%meson_build + +%install +%meson_install + +%find_lang %{name} --with-gnome + +%post +%systemd_user_post %{systemd_units} + +%preun +%systemd_user_preun %{systemd_units} + +%files -f %{name}.lang +%license COPYING COPYING.LIB +%doc AUTHORS NEWS README + +# list daemons explicitly, so we notice if one goes missing +# some of these don't have a separate gschema +%{_libexecdir}/gsd-datetime +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Datetime.desktop + +%{_libexecdir}/gsd-housekeeping +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Housekeeping.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml + +%{_libexecdir}/gsd-keyboard +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Keyboard.desktop + +%{_libexecdir}/gsd-media-keys +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.MediaKeys.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.media-keys.gschema.xml + +%{_libexecdir}/gsd-backlight-helper +%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.power.policy +%{_libexecdir}/gsd-power +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Power.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.power.gschema.xml + +%{_libexecdir}/gsd-print-notifications +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.PrintNotifications.desktop +%{_libexecdir}/gsd-printer + +%{_libexecdir}/gsd-rfkill +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Rfkill.desktop + +%{_libexecdir}/gsd-screensaver-proxy +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.ScreensaverProxy.desktop + +%{_libexecdir}/gsd-smartcard +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Smartcard.desktop + +%{_libexecdir}/gsd-sound +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Sound.desktop + +%{_libexecdir}/gsd-usb-protection +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.UsbProtection.desktop + +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.peripherals.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.peripherals.wacom.gschema.xml +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Wacom.desktop + +%ifnarch s390 s390x +%{_libexecdir}/gsd-wacom +%{_libexecdir}/gsd-wacom-oled-helper +%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.wacom.policy +%endif + +%{_libexecdir}/gsd-xsettings +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.XSettings.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.xsettings.gschema.xml + +%{_libexecdir}/gsd-a11y-settings +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.A11ySettings.desktop + +%{_libexecdir}/gsd-color +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Color.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.color.gschema.xml + +%{_libexecdir}/gsd-sharing +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Sharing.desktop +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.sharing.gschema.xml + +%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Wwan.desktop +%{_libexecdir}/gsd-wwan +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.wwan.gschema.xml + +%dir %{_libdir}/gnome-settings-daemon-%{gnome_major_version} +%{_libdir}/gnome-settings-daemon-%{gnome_major_version}/libgsd.so + +%{_sysconfdir}/xdg/Xwayland-session.d/00-xrdb +%{_userunitdir}/gnome-session-x11-services-ready.target.wants/ +%{_userunitdir}/gnome-session-x11-services.target.wants/ +%{lua: for service in string.gmatch(rpm.expand('%{systemd_units}'), "[^%s]+") do print(rpm.expand('%{_userunitdir}/')..service..'\n') end} +%{_userunitdir}/*.target +%{_udevrulesdir}/61-gnome-settings-daemon-rfkill.rules +%{_datadir}/gnome-settings-daemon/ +%{_datadir}/GConf/gsettings/gnome-settings-daemon.convert + +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.enums.xml +%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.gschema.xml + +%files devel +%{_includedir}/gnome-settings-daemon-%{gnome_major_version} +%{_libdir}/pkgconfig/gnome-settings-daemon.pc + +%changelog +%autochangelog diff --git a/staging/gnome-shell/0001-gdm-Work-around-failing-fingerprint-auth.patch b/staging/gnome-shell/0001-gdm-Work-around-failing-fingerprint-auth.patch new file mode 100644 index 0000000..2baa7b6 --- /dev/null +++ b/staging/gnome-shell/0001-gdm-Work-around-failing-fingerprint-auth.patch @@ -0,0 +1,67 @@ +From ff73f820b1398e5d60b8984b0003db46ad70b8ec Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Wed, 28 Apr 2021 16:50:03 +0200 +Subject: [PATCH] gdm: Work around failing fingerprint auth + +On Fedora we have the problem that fingerprint auth fails immediately if +the PAM configuration has not been updated and no prints are enrolled. + +So, consider a verification failure within one second to be a service +failure instead. +--- + js/gdm/util.js | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/js/gdm/util.js b/js/gdm/util.js +index 97df6d687e..371953cb25 100644 +--- a/js/gdm/util.js ++++ b/js/gdm/util.js +@@ -109,6 +109,7 @@ export class ShellUserVerifier extends Signals.EventEmitter { + this._defaultService = null; + this._preemptingService = null; + this._fingerprintReaderType = FingerprintReaderType.NONE; ++ this._fprintStartTime = -1; + + this._messageQueue = []; + this._messageQueueTimeoutId = 0; +@@ -669,6 +670,10 @@ export class ShellUserVerifier extends Signals.EventEmitter { + this._hold.acquire(); + try { + this._activeServices.add(serviceName); ++ ++ if (serviceName == FINGERPRINT_SERVICE_NAME) ++ this._fprintStartTime = GLib.get_monotonic_time(); ++ + if (this._userName) { + await this._userVerifier.call_begin_verification_for_user( + serviceName, this._userName, this._cancellable); +@@ -763,6 +768,7 @@ export class ShellUserVerifier extends Signals.EventEmitter { + const cancellable = this._cancellable; + this._fingerprintFailedId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, + FINGERPRINT_ERROR_TIMEOUT_WAIT, () => { ++ log("Generating _verificationFailed!"); + this._fingerprintFailedId = 0; + if (!cancellable.is_cancelled()) + this._verificationFailed(serviceName, false); +@@ -829,6 +835,18 @@ export class ShellUserVerifier extends Signals.EventEmitter { + if (serviceName === FINGERPRINT_SERVICE_NAME) { + if (this._fingerprintFailedId) + GLib.source_remove(this._fingerprintFailedId); ++ ++ // On Fedora we have the problem that fingerprint auth fails ++ // immediately if the PAM configuration has not been updated and no ++ // prints are enrolled. ++ // So, consider a verification failure within one second to be a service ++ // failure instead. ++ if (this._fprintStartTime > GLib.get_monotonic_time() - GLib.USEC_PER_SEC) { ++ log("Fingerprint service failed almost immediately, considering it unavailable."); ++ log("Please fix your configuration by running: authselect select --force sssd with-fingerprint with-silent-lastlog"); ++ this._onServiceUnavailable(this._client, serviceName, null); ++ return; ++ } + } + + // For Not Listed / enterprise logins, immediately reset +-- +2.43.2 + diff --git a/staging/gnome-shell/3193.patch b/staging/gnome-shell/3193.patch new file mode 100644 index 0000000..d4dd536 --- /dev/null +++ b/staging/gnome-shell/3193.patch @@ -0,0 +1,98 @@ +From c8c05c4a142f3de9c17a9ca83692dda364abccc8 Mon Sep 17 00:00:00 2001 +From: Jan200101 +Date: Thu, 15 Feb 2024 16:05:40 +0100 +Subject: [PATCH] shell-app: Improve discrete GPU detection + +--- + .../net.hadess.SwitcherooControl.xml | 3 +- + src/shell-app.c | 60 +++++++++++++++++++ + 2 files changed, 62 insertions(+), 1 deletion(-) + +diff --git a/data/dbus-interfaces/net.hadess.SwitcherooControl.xml b/data/dbus-interfaces/net.hadess.SwitcherooControl.xml +index e52bc1a0d25..59a889654f4 100644 +--- a/data/dbus-interfaces/net.hadess.SwitcherooControl.xml ++++ b/data/dbus-interfaces/net.hadess.SwitcherooControl.xml +@@ -38,7 +38,8 @@ + will contain a user-facing name for the GPU, the "Environment" (as) key will + contain an array of even number of strings, each being an environment + variable to set to use the GPU, followed by its value, the "Default" (b) key +- will tag the default (usually integrated) GPU. ++ will tag the default GPU, the "Discrete" (b) key tags if the GPU is a ++ dedicated component. + --> + + +diff --git a/src/shell-app.c b/src/shell-app.c +index 371bc6cf762..39f220ba954 100644 +--- a/src/shell-app.c ++++ b/src/shell-app.c +@@ -1300,6 +1300,66 @@ apply_discrete_gpu_env (GAppLaunchContext *context, + } + + num_children = g_variant_n_children (variant); ++ ++ // Check if the Default GPU is Discrete ++ for (i = 0; i < num_children; i++) ++ { ++ g_autoptr(GVariant) gpu = NULL; ++ g_autoptr(GVariant) env = NULL; ++ g_autoptr(GVariant) default_variant = NULL; ++ g_autoptr(GVariant) discrete_variant = NULL; ++ g_autofree const char **env_s = NULL; ++ ++ gpu = g_variant_get_child_value (variant, i); ++ if (!gpu || ++ !g_variant_is_of_type (gpu, G_VARIANT_TYPE ("a{s*}"))) ++ continue; ++ ++ /* Skip over non-default GPUs */ ++ default_variant = g_variant_lookup_value (gpu, "Default", NULL); ++ if (!default_variant || !g_variant_get_boolean (default_variant)) ++ continue; ++ ++ /* break out if default GPU is not discrete */ ++ discrete_variant = g_variant_lookup_value (gpu, "Discrete", NULL); ++ if (!discrete_variant || !g_variant_get_boolean (discrete_variant)) ++ break; ++ ++ // Default GPU is discrete, no need to do anything ++ return; ++ } ++ ++ // Find the first Discrete GPU ++ for (i = 0; i < num_children; i++) ++ { ++ g_autoptr(GVariant) gpu = NULL; ++ g_autoptr(GVariant) env = NULL; ++ g_autoptr(GVariant) discrete_variant = NULL; ++ g_autofree const char **env_s = NULL; ++ guint j; ++ ++ gpu = g_variant_get_child_value (variant, i); ++ if (!gpu || ++ !g_variant_is_of_type (gpu, G_VARIANT_TYPE ("a{s*}"))) ++ continue; ++ ++ /* Skip over non-discrete GPUs */ ++ discrete_variant = g_variant_lookup_value (gpu, "Discrete", NULL); ++ if (!discrete_variant || !g_variant_get_boolean (discrete_variant)) ++ continue; ++ ++ env = g_variant_lookup_value (gpu, "Environment", NULL); ++ if (!env) ++ continue; ++ ++ env_s = g_variant_get_strv (env, NULL); ++ for (j = 0; env_s[j] != NULL; j = j + 2) ++ g_app_launch_context_setenv (context, env_s[j], env_s[j+1]); ++ return; ++ } ++ ++ // fallback to old behavior ++ // find the first non-Default GPU + for (i = 0; i < num_children; i++) + { + g_autoptr(GVariant) gpu = NULL; +-- +GitLab + diff --git a/staging/gnome-shell/changelog b/staging/gnome-shell/changelog new file mode 100644 index 0000000..260698e --- /dev/null +++ b/staging/gnome-shell/changelog @@ -0,0 +1,1484 @@ +* Sat Mar 25 2023 Adam Williamson - 44.0-4 +- Backport MR #2725 - *another* fix for screenshot notifications + +* Fri Mar 24 2023 Adam Williamson - 44.0-3 +- Backport a fix for screenshot notifications + +* Sun Mar 19 2023 Florian Müllner - 44.0-2 +- Fix timed logout + Resolves: #2177853 + +* Sun Mar 19 2023 Florian Müllner - 44.0-1 +- Update to 44.0 + +* Tue Mar 14 2023 Dominik Mierzejewski - 44~rc-2 +- Recommend gnome-bluetooth instead of requiring it + Resolves rhbz#2172653 + +* Mon Mar 06 2023 Florian Müllner - 44~rc-1 +- Update to 44.rc + +* Sun Mar 05 2023 Ray Strode - 44~beta-3 +- Fix slowdown in at shutdown + Resolves: #2174753 + +* Mon Feb 20 2023 Adam Williamson - 44~beta-2 +- Rebuild without changes for Bodhi reasons + +* Tue Feb 14 2023 Florian Müllner - 44~beta-1 +- Update to 44.beta + +* Thu Jan 19 2023 Fedora Release Engineering - 43.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Nov 21 2022 Adam Williamson - 43.1-4 +- Backport MR #2548 to fix keyboard shortcut inhibiting + +* Thu Nov 17 2022 Jonas Ådahl - 43.1-3 +- Backport missing screencast if gstreamer1-vaapi is installed + +* Wed Nov 16 2022 Adam Williamson - 43.1-2 +- Backport MR #2534 to fix layout switching in password entries + +* Fri Nov 04 2022 Florian Müllner - 43.1-1 +- Update to 43.1 + +* Tue Oct 11 2022 Adam Williamson - 43.0-3 +- Backport MR2508 to fix OSK space entry (#2131837) + +* Thu Sep 22 2022 Kalev Lember - 43.0-2 +- Backport MR2487 and MR2495 to fix input sources sorting (#2121110) + +* Sat Sep 17 2022 Florian Müllner - 43.0-1 +- Update to 43.0 + +* Thu Sep 15 2022 Kalev Lember - 43~rc-3 +- Backport a fix for initial setup session input sources sorting (#2121110) + +* Tue Sep 06 2022 Kalev Lember - 43~rc-2 +- Backport upstream fix to fix boot options (#2124043) + +* Sun Sep 04 2022 Florian Müllner - 43~rc-1 +- Update to 43.rc + +* Fri Sep 02 2022 Kalev Lember - 43~beta-3 +- Add missing dep on gcr + +* Thu Aug 11 2022 Kalev Lember - 43~beta-2 +- Bump minimum required gjs version + +* Wed Aug 10 2022 Florian Müllner - 43~beta-1 +- Update to 43.beta + +* Thu Jul 21 2022 Fedora Release Engineering - 43~alpha-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Milan Crha - 43~alpha-2 +- Rebuilt for evolution-data-server soname version bump +- Add patch to port to gcr4 + +* Sun Jul 10 2022 Florian Müllner - 43~alpha-1 +- Update to 43.alpha + +* Sat May 28 2022 Florian Müllner - 42.2-1 +- Update to 42.2 + +* Fri May 06 2022 Florian Müllner - 42.1-1 +- Update to 42.1 + +* Mon Apr 18 2022 Florian Müllner - 42.0-3 +- Fix monitor config switches with p (#2073406) +- Fix stuck cover pane after startup animation (#2063156) + +* Tue Mar 15 2022 Adam Williamson - 42.0-2 +- Backport MR #2242 to fix new user default folder creation (#2064473) + +* Sun Mar 13 2022 Florian Müllner - 42.0-1 +- Update to 42.0 + +* Wed Mar 09 2022 Adam Williamson - 42~rc-2 +- Backport MR #2238 to fix crashes on first login + +* Mon Mar 07 2022 Florian Müllner - 42~rc-1 +- Update to 42.rc + +* Tue Mar 01 2022 Adam Williamson - 42~beta-4 +- Update the MR #2185 backport + +* Tue Mar 01 2022 Adam Williamson - 42~beta-3 +- Backport MR #2185 to fix some styling issues at lower resolutions + +* Wed Feb 16 2022 David King - 42~beta-2 +- Update some dependency versions + +* Tue Feb 15 2022 Florian Müllner - 42~beta-1 +- Update to 42.beta + +* Thu Jan 20 2022 Fedora Release Engineering - 42~alpha-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jan 14 2022 David King - 42~alpha-2 +- Fix gweather4 dependency + +* Fri Jan 14 2022 David King - 42~alpha-1 +- Update to 42.alpha +- Use pkgconfig for BuildRequires + +* Fri Oct 29 2021 Adam Williamson - 41.0-8 +- Backport MR #2011 to further fix unexpected scrolling (#2017192) + +* Wed Oct 27 2021 Ray Strode - 41.0-7 +- Use correct patch for fixing unlock screen confusion + +* Tue Oct 26 2021 Jonas Ådahl - 41.0-6 +- Work around crashy tear down + +* Tue Oct 26 2021 Ray Strode - 41.0-5 +- Fix unlock screen confusion when hitting escape too much + +* Tue Oct 12 2021 Ray Strode - 41.0-4 +- Fix StPasswordEntry crash + Resolves: #2009637 + +* Thu Oct 07 2021 Adam Williamson - 41.0-3 +- Backport MR #1983 to fix wrong OSD icons (#2011872) + +* Tue Oct 05 2021 Kalev Lember - 41.0-2 +- Backport upstream patch to fix scrolling to incorrect positions + +* Sun Sep 19 2021 Florian Müllner - 41.0-1 +- Update to 41.0 + +* Tue Sep 14 2021 Ray Strode - 41~rc.1-2 +- Drop extra capabilities from gnome-shell. They're optional and they break shutdown from the login screen with new glibs. + Resolves: #1996998 + +* Tue Sep 07 2021 Florian Müllner - 41~rc.1-1 +- Update to 41.rc.1 + +* Sun Sep 05 2021 Florian Müllner - 41~rc-1 +- Update to 41.rc + +* Wed Aug 18 2021 Florian Müllner - 41~beta-1 +- Update to 41.beta + +* Thu Jul 22 2021 Fedora Release Engineering - 40.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 12 2021 Florian Müllner - 40.3-1 +- Update to 40.3 + +* Thu Jun 10 2021 Florian Müllner - 40.2-1 +- Update to 40.2 + +* Thu May 13 2021 Florian Müllner - 40.1-1 +- Update to 40.1 + +* Fri Apr 30 2021 Kalev Lember - 40.0-6 +- Move gnome-tour dep here from gnome-initial-setup (#1955179) + +* Wed Apr 28 2021 Benjamin Berg - 40.0-5 +- Update fix for password auth after background service failure + Related: #1942443 + +* Fri Apr 23 2021 Benjamin Berg - 40.0-4 +- Fix password auth after secondary service failure + Related: #1942443 + +* Tue Apr 13 2021 Adam Williamson - 40.0-3 +- Fix scrolling between workspaces/app grid pages with PgUp/PgDn + +* Tue Apr 13 2021 Ray Strode - 40.0-2 +- Fix timed login when user list is disabled + Resolves: #1940618 + +* Sat Mar 20 2021 Florian Müllner - 40.0-1 +- Update to 40.0 + +* Mon Mar 15 2021 Florian Müllner - 40.0~rc-1 +- Update to 40.rc + +* Thu Mar 11 2021 Kalev Lember - 40.0~beta-4.20210304git7a57528bd +- Recommend gnome-session-xsession rather than hard-require it + +* Mon Mar 08 2021 Florian Müllner - 40.0~beta-3.20210304git40.7a57528bd +- Fix crash after launching apps via drag-and-drop + +* Thu Mar 04 2021 Florian Müllner - 40.0~beta-2.20210304git40.7a57528bd +- Build snapshot of current upstream + +* Tue Feb 23 2021 Florian Müllner - 40.0~beta-1 +- Update to 40.beta + +* Mon Feb 22 2021 Kalev Lember - 40.0~alpha.1.1-9.20210212git829a096ba +- Add missing requires on gstreamer1-plugins-good and xdg-user-dirs-gtk (#1931342) + +* Sun Feb 14 2021 Florian Müllner - 40.0~alpha.1.1-8.20210212git829a096ba +- Only open app picker on left-click/touch + +* Sun Feb 14 2021 Florian Müllner - 40.0~alpha.1.1-7.20210212git829a096ba +- Don't open app picker when clicking minimap + +* Fri Feb 12 2021 Florian Müllner - 40.0~alpha.1.1-6.20210212git829a096ba +- Update snapshot to current upstream +- Allow opening app picker by clicking overview background + +* Fri Feb 12 2021 Milan Crha - 40.0~alpha.1.1-5.20210202git9ce666ac1 +- Rebuilt for evolution-data-server soname version bump + +* Tue Feb 02 2021 Florian Müllner - 40.0~alpha.1.1-4.20210202git9ce666ac1 +- Build snapshot of current upstream + +* Tue Jan 26 2021 Fedora Release Engineering - 40.0~alpha.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jan 19 2021 Kalev Lember - 40.0~alpha.1.1-2 +- Require libgweather >= 40~alpha for new application_id property + +* Mon Jan 18 2021 Florian Müllner - 40.alpha.1.1-1 +- Update to 40.alpha.1.1 + +* Fri Jan 15 2021 Florian Müllner - 40.alpha.1-1 +- Update to 40.alpha.1 + +* Wed Dec 02 2020 Florian Müllner - 40.alpha-1 +- Update to 40.alpha + +* Tue Oct 13 2020 Florian Müllner - 3.38.1-2 +- Fix crash on size change (non-)transitions + +* Mon Oct 05 2020 Florian Müllner - 3.38.1-1 +- Update to 3.38.1 + +* Tue Sep 29 2020 David King - 3.38.0-2 +- Better specify xdg-desktop-portal-gtk dependency (#1882894) + +* Mon Sep 14 2020 Florian Müllner - 3.38.0-1 +- Update to 3.38.0 + +* Thu Sep 10 2020 Kalev Lember - 3.37.92-5 +- Set minimum gnome-settings-daemon version for Screencast proxy changes + +* Wed Sep 09 2020 Kalev Lember - 3.37.92-4 +- Add missing pipewire-gstreamer dependency for screen recorder + +* Sun Sep 06 2020 Florian Müllner - 3.37.92-1 +- Update to 3.37.92 + +* Wed Sep 02 2020 Florian Müllner - 3.37.91-3 +- Add missing pipewire dependency for screen recorder + +* Wed Aug 26 2020 Kalev Lember - 3.37.91-2 +- Add PolicyKit-authentication-agent virtual provides + +* Mon Aug 24 2020 Florian Müllner - 3.37.91-1 +- Update to 3.37.91 + +* Sun Aug 23 2020 Kalev Lember - 3.37.90-2 +- Backport a fix for launching apps under X11 (#1870234) + +* Fri Aug 14 2020 Florian Müllner - 3.37.90-1 +- Update to 3.37.90 + +* Sat Aug 01 2020 Fedora Release Engineering - 3.37.3-4 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 3.37.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Milan Crha - 3.37.3-2 +- Rebuilt for evolution-data-server soname version bump + +* Tue Jul 07 2020 Florian Müllner - 3.37.3-1 +- Update to 3.37.3 + +* Fri Jul 03 2020 Milan Crha - 3.37.2-2 +- Rebuilt for evolution-data-server soname version bump + +* Wed Jun 03 2020 Florian Müllner - 3.37.2-1 +- Update to 3.37.2 + +* Wed May 20 2020 Stephen Gallagher - 3.37.1-3 +- Fix crashes when locking the screen while certain extensions are active +- Resolves: rhbz#1817082 + +* Mon May 04 2020 Adam Williamson - 3.37.1-2 +- Fix panel to show input methods (MR #1235) + +* Thu Apr 30 2020 Florian Müllner - 3.36.1-2 +- Backport fixup for spring animation fix + +* Tue Mar 31 2020 Florian Müllner - 3.36.1-1 +- Update to 3.36.1 +- Remove gnome-extensions-app subpackage (will move to a separate .spec) + +* Wed Mar 25 2020 Ray Strode - 3.36.0-4 +- Clear environment on logout + Fixes log in to Xorg right after log out from wayland + Resolves: #1815487 + +* Wed Mar 11 2020 Adam Williamson - 3.36.0-3 +- Backport fix for input method preedit issue (MR #1084) + +* Tue Mar 10 2020 Adam Williamson - 3.36.0-2 +- Backport fix for ibus failing to start automatically (MR #1080) + +* Sat Mar 07 2020 Florian Müllner - 3.36.0-1 +- Update to 3.36.0 + +* Sun Mar 01 2020 Florian Müllner - 3.35.92-1 +- Update to 3.35.92 + +* Tue Feb 18 2020 Florian Müllner - 3.35.91-1 +- Update to 3.35.91 + +* Fri Feb 07 2020 Kalev Lember - 3.35.90-2 +- Adjust the favorites patch to include the apps we install by default + +* Thu Feb 06 2020 Florian Müllner - 3.35.90-1 +- Update to 3.35.90 + +* Tue Jan 28 2020 Fedora Release Engineering - 3.35.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 16 2020 Kalev Lember - 3.35.3-2 +- Rebuilt for libgnome-desktop soname bump + +* Sun Jan 05 2020 Florian Müllner - 3.35.3-2 +- Update to 3.35.3 + +* Wed Dec 11 2019 Florian Müllner - 3.35.2-1 +- Udpate to 3.35.2 + +* Sat Oct 12 2019 Florian Müllner - 3.35.1-1 +- Update to 3.35.1 + +* Sat Oct 12 2019 Adam Williamson - 3.34.1-2 +- Backport MR #754 to fix #1749433 + +* Wed Oct 09 2019 Florian Müllner - 3.34.1-1 +- Update to 3.34.1 + +* Tue Sep 24 2019 Debarshi Ray - 3.34.0-3 +- Stop NOTIFY_SOCKET from leaking into the GNOME environment + +* Fri Sep 20 2019 Florian Müllner - 3.34.0-2 +- Fix disappearing icons in frequent view + +* Mon Sep 09 2019 Florian Müllner - 3.34.0-1 +- Update to 3.34.0 + +* Thu Sep 05 2019 Kalev Lember - 3.33.92-1 +- Update to 3.33.92 + +* Mon Aug 26 2019 Kalev Lember - 3.33.91-1 +- Update to 3.33.91 + +* Fri Aug 23 2019 Adam Williamson - 3.33.90-2 +- Revert commit that causes #1740897 (overview type-to-search bug) + Resolves: #1740897 + +* Sat Aug 10 2019 Florian Müllner - 3.33.90-1 +- Update to 3.33.90 + +* Thu Jul 25 2019 Fedora Release Engineering - 3.33.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Jul 20 2019 Florian Müllner - 3.33.4-1 +- Update to 3.33.4 + +* Mon Jun 24 2019 Florian Mülllner - 3.33.3-1 +- Update to 3.33.3 + +* Wed May 22 2019 Florian Müllner - 3.33.2-1 +- Update to 3.33.2 + +* Wed May 22 2019 Kalev Lember - 3.33.1-2 +- Rebuild for libecal-2.0 + +* Tue May 14 2019 Florian Müllner - 3.33.1-1 +- Update to 3.33.1 + +* Wed Apr 17 2019 Florian Müllner - 3.32.1-1 +- Update to 3.32.1 + +* Wed Apr 17 2019 Adam Williamson - 3.32.0-3 +- Backport MR #463 and MR #494 to fix a couple of bugs + Resolves: #1696270 + Resolves: #1690429 + +* Sat Mar 23 2019 Phil Wyett - 3.32.0-2 +- Update source URL +- Add gcc BuildRequires +- Update versions required for gjs and mutter + +* Tue Mar 12 2019 Florian Müllner - 3.32.0-1 +- Update to 3.32.0 + +* Tue Mar 05 2019 Florian Müllner - 3.31.92-1 +- Update to 3.31.92 + +* Thu Feb 21 2019 Florian Müllner - 3.31.91-1 +- Update to 3.31.91 + +* Mon Feb 11 2019 Adam Williamson - 3.31.90-2 +- Backport MR #402 to fix missing logo on login screen + +* Thu Feb 07 2019 Florian Müllner - 3.31.90-1 +- Update to 3.31.90 + +* Thu Jan 31 2019 Fedora Release Engineering - 3.31.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jan 10 2019 Florian Müllner - 3.31.4-1 +- Update to 3.31.4 + +* Fri Dec 14 2018 Adam Williamson - 3.31.2-3 +- Backport several bugfix commits from current git master + +* Fri Nov 30 2018 Adam Williamson - 3.31.2-2 +- Backport PR #293 to fix 'empty input method indicator' bug + +* Wed Nov 14 2018 Florian Müllner - 3.31.2-1 +- Update to 3.31.2 + +* Mon Nov 12 2018 Mohan Boddu - 3.30.1-3 +- Rebuilt for evolution-data-server soname bump + +* Tue Oct 23 2018 Jonas Ådahl - 3.30.1-2 +- Backport keyboard layout change fixes (rhbz#1637418) + +* Mon Oct 08 2018 Florian Müllner - 3.30.1-1 +- Update to 3.30.1 + +* Thu Sep 27 2018 Hans de Goede - 3.30.0-9 +- Add downstream patches implementing the "Boot Options" menu from: + https://wiki.gnome.org/Design/OS/BootOptions + +* Sat Sep 22 2018 Adam Williamson - 3.30.0-8 +- Backport fix for IBus type issue (GGO MR #228) + +* Wed Sep 19 2018 Adam Williamson - 3.30.0-7 +- Replace dnd fix from -5 with upstream version (GGO MR #209) +- Fix a window destroy crash which can occur with new gjs (GGO #539) +- Fix a window menu issue on multi-monitor systems (GGO MR #227) +- Fix hover and active states for some buttons (GGO #523) + +* Wed Sep 19 2018 Adam Williamson - 3.30.0-6 +- Fix missing key description in ssh key unlock prompt (GGO #574) + +* Wed Sep 19 2018 Ray Strode - 3.30.0-5 +- Fix lock up when dropping icon on dash + Resolves: #1630134 + +* Tue Sep 18 2018 Adam Williamson - 3.30.0-4 +- Fix connecting to wifi from user menu (RHBZ #1628263) + +* Sat Sep 15 2018 Adam Williamson - 3.30.0-3 +- Backport fix for GGO #140 from upstream master + +* Thu Sep 13 2018 Kalev Lember - 3.30.0-2 +- Require xdg-desktop-portal-gtk + +* Tue Sep 04 2018 Florian Müllner - 3.30.0-1 +- Update to 3.30.0 + +* Wed Aug 29 2018 Florian Müllner - 3.29.92-1 +- Update to 3.29.92 + +* Mon Aug 20 2018 Florian Müllner - 3.29.91-1 +- Update to 3.29.91 + +* Thu Aug 09 2018 Debarshi Ray - 3.29.90-2 +- Remove telepathy-logger and telepathy-glib runtime dependencies + +* Wed Aug 01 2018 Florian Müllner - 3.29.90-1 +- Update to 3.29.90 + +* Wed Jul 18 2018 Florian Müllner - 3.29.4-1 +- Update to 3.29.4 + +* Fri Jul 13 2018 Fedora Release Engineering - 3.29.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 24 2018 Florian Müllner - 3.29.2-1 +- Update to 3.29.2 + +* Wed May 09 2018 Florian Müllner - 3.29.1-3 +- Fix automatic connection to wireless networks without stored secrets + +* Sun Apr 29 2018 Adam Williamson - 3.29.1-2 +- Backport fix for password entry modifier key issues (#1569211) + +* Wed Apr 25 2018 Florian Müllner - 3.29.1-1 +- Update to 3.29.1 + +* Tue Apr 24 2018 Ray Strode - 3.28.1-2 +- pull polkit cancel lock up from upstream + Resolves: #1568213 + +* Fri Apr 13 2018 Florian Müllner - 3.28.1-1 +- Update to 3.28.1 + +* Mon Mar 12 2018 Florian Müllner - 3.28.0-1 +- Update to 3.28.0 + +* Mon Mar 05 2018 Florian Müllner - 3.27.92-1 +- Update to 3.27.92 + +* Thu Feb 22 2018 Lubomir Rintel - 3.27.91-2 +- Replace libnm-gtk with libnma + +* Wed Feb 21 2018 Florian Müllner - 3.27.91-1 +- Update to 3.27.91 + +* Wed Feb 07 2018 Kalev Lember - 3.27.1-5 +- Rebuilt for evolution-data-server soname bump + +* Mon Jan 22 2018 Adam Williamson - 3.27.1-4 +- Backport fix for crasher bug BGO #788931 (#1469129) + +* Tue Dec 19 2017 Kalev Lember - 3.27.1-3 +- Explicitly require libnm-gtk (#1509496) + +* Wed Nov 08 2017 Milan Crha - 3.27.1-2 +- Rebuild for newer libical + +* Tue Oct 17 2017 Florian Müllner - 3.27.1-1 +- Update to 3.27.1 + +* Wed Oct 04 2017 Florian Müllner - 3.26.1-1 +- Update to 3.26.1 + +* Thu Sep 21 2017 Florian Müllner - 3.26.0-2 +- Fix crash on fast status icon remapping + +* Tue Sep 12 2017 Florian Müllner - 3.26.0-1 +- Update to 3.26.0 + +* Tue Aug 22 2017 Florian Müllner - 3.25.91-1 +- Update to 3.25.91 + +* Fri Aug 11 2017 Kevin Fenzi - 3.25.90-2 +- Rebuild with older working rpm + +* Thu Aug 10 2017 Florian Müllner - 3.25.90-1 +- Update to 3.25.90 + +* Wed Aug 02 2017 Fedora Release Engineering - 3.25.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 3.25.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jul 20 2017 Florian Müllner - 3.25.4-1 +- Update to 3.25.4 + +* Wed Jun 21 2017 Florian Müllner - 3.25.3-1 +- Update to 3.25.3 + +* Thu May 25 2017 Florian Müllner - 3.25.2-1 +- Update to 3.25.2 + +* Thu Apr 27 2017 Florian Müllner - 3.25.1-1 +- Update to 3.25.1 + +* Tue Apr 11 2017 Florian Müllner - 3.24.1-1 +- Update to 3.24.1 + +* Mon Mar 20 2017 Florian Müllner - 3.24.0-1 +- Update to 3.24.0 + +* Thu Mar 16 2017 Igor Gnatenko - 3.23.92-2 +- Fix wrong runtime requirements + +* Tue Mar 14 2017 Florian Müllner - 3.23.92-1 +- Update to 3.23.92 + +* Wed Mar 01 2017 Florian Müllner - 3.23.91-1 +- Update to 3.23.91 + +* Thu Feb 16 2017 Florian Müllner - 3.23.90-1 +- Update to 3.23.90 + +* Tue Feb 14 2017 Richard Hughes - 3.23.3-1 +- Update to 3.23.3 + +* Fri Feb 10 2017 Fedora Release Engineering - 3.23.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 19 2016 Miro Hrončok - 3.23.2-3 +- Rebuild for Python 3.6 + +* Tue Dec 6 2016 Rui Matos - 3.23.2-2 +- Tighten mutter version dependency for plugin API changes + Resolves: #1401886 + +* Wed Nov 23 2016 Florian Müllner - 3.23.2-1 +- Update to 3.23.2 + +* Sun Oct 30 2016 Florian Müllner - 3.23.1-1 +- Update to 3.23.1 + +* Fri Oct 21 2016 Bastien Nocera - 3.22.1-2 +- Add patches to allow launching on discrete GPU when available + +* Tue Oct 11 2016 Florian Müllner - 3.22.1 +- Update to 3.22.1 + +* Mon Sep 19 2016 Florian Müllner - 3.22.0 +- Update to 3.22.0 + +* Tue Sep 13 2016 Florian Müllner - 3.21.92 +- Update to 3.21.92 + +* Fri Sep 09 2016 Kalev Lember - 3.21.91-2 +- Drop libgsystem dependency + +* Tue Aug 30 2016 Florian Müllner - 3.21.91 +- Update to 3.21.91 + +* Sat Aug 20 2016 Florian Müllner - 3.21.90.1-1 +- Update to 3.21.90.1 + (Fixes a corrupt .desktop file that made it from the build directory into + the 3.21.90 tarball) + +* Fri Aug 19 2016 Florian Müllner - 3.21.90-1 +- Update to 3.21.90 + +* Wed Jul 20 2016 Florian Müllner - 3.21.4-1 +- Update to 3.21.4 + +* Mon Jul 18 2016 Milan Crha - 3.21.3-2 +- Rebuild for newer evolution-data-server + +* Tue Jun 21 2016 Florian Müllner - 3.21.3-1 +- Update to 3.21.3 + +* Tue Jun 21 2016 Milan Crha - 3.21.2-2 +- Rebuild for newer evolution-data-server + +* Thu May 26 2016 Florian Müllner - 3.21.2-1 +- Update to 3.21.2 + +* Fri Apr 29 2016 Florian Müllner - 3.21.1-1 +- Update to 3.21.1 + +* Fri Apr 15 2016 David Tardon - 3.20.1-2 +- rebuild for ICU 57.1 + +* Wed Apr 13 2016 Florian Müllner - 3.20.1-1 +- Update to 3.20.1 + +* Tue Mar 22 2016 Florian Müllner - 3.20.0-1 +- Update to 3.20.0 + +* Wed Mar 16 2016 Florian Müllner - 3.19.92-1 +- Update to 3.19.92 + +* Thu Mar 03 2016 Florian Müllner - 3.19.91-1 +- Update to 3.19.91 + +* Fri Feb 19 2016 Florian Müllner - 3.19.90-1 +- Update to 3.19.90 + +* Tue Feb 16 2016 Milan Crha - 3.19.4-3 +- Rebuild for newer evolution-data-server + +* Wed Feb 03 2016 Fedora Release Engineering - 3.19.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 21 2016 Florian Müllner - 3.19.4-1 +- Update to 3.19.4 + +* Mon Jan 18 2016 David Tardon - 3.19.3-2 +- rebuild for libical 2.0.0 + +* Thu Dec 17 2015 Florian Müllner - 3.19.3-1 +- Update to 3.19.3 + +* Tue Dec 01 2015 Kalev Lember - 3.19.2-2 +- Bump gsettings-desktop-schemas dep to 3.19.2 + +* Wed Nov 25 2015 Florian Müllner - 3.19.2-1 +- Update to 3.19.2 + +* Tue Nov 10 2015 Ray Strode 3.19.1-3.20151110 +- Update to git snapshot + +* Sun Nov 01 2015 Kalev Lember - 3.19.1-2 +- Fix gnome-shell crashing in gdm mode (#1276833) + +* Thu Oct 29 2015 Florian Müllner - 3.19.1-1 +- Update to 3.19.1 + +* Thu Oct 15 2015 Florian Müllner - 3.18.1-1 +- Update to 3.18.1 + +* Mon Sep 21 2015 Florian Müllner - 3.18.0-1 +- Update to 3.18.0 + +* Wed Sep 16 2015 Florian Müllner - 3.17.92-1 +- Update to 3.17.92 + +* Thu Sep 03 2015 Florian Müllner - 3.17.91-1 +- Update to 3.17.91 + +* Thu Aug 20 2015 Florian Müllner - 3.17.90-1 +- Update to 3.17.90 + +* Wed Aug 19 2015 Kalev Lember - 3.17.4-2 +- Create empty directories for extensions and search providers +- Move desktop file validation to %%check section +- Use make_install macro + +* Thu Jul 23 2015 Florian Müllner - 3.17.4-1 +- Update to 3.17.4 + +* Wed Jul 22 2015 Milan Crha - 3.17.3-3 +- Rebuild for newer evolution-data-server + +* Sat Jul 04 2015 Kalev Lember - 3.17.3-2 +- Require gobject-introspection 1.45.3 + +* Thu Jul 02 2015 Florian Müllner - 3.17.3-1 +- Update to 3.17.3 + +* Wed Jun 17 2015 Fedora Release Engineering - 3.17.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 27 2015 Florian Müllner - 3.17.2-1 +- Update to 3.17.2 + +* Thu Apr 30 2015 Florian Müllner - 3.17.1-1 +- Update to 3.17.1 + +* Tue Apr 28 2015 Milan Crha - 3.16.1-2 +- Rebuild for newer evolution-data-server + +* Tue Apr 14 2015 Florian Müllner - 3.16.1-1 +- Update to 3.16.1 + +* Mon Mar 23 2015 Florian Müllner - 3.16.0-1 +- Update to 3.16.0 + +* Tue Mar 17 2015 Kalev Lember - 3.15.92-2 +- Update minimum dep versions +- Use license macro for the COPYING file + +* Tue Mar 17 2015 Florian Müllner - 3.15.92-1 +- Update to 3.15.92 + +* Tue Mar 17 2015 Ray Strode 3.15.91-2 +- Drop dep on NetworkManager-config-connectivity-fedora + It's already required by fedora-release-workstation + +* Wed Mar 04 2015 Florian Müllner - 3.15.91-1 +- Update to 3.15.91 + +* Fri Feb 20 2015 Florian Müllner - 3.15.90-1 +- Update to 3.15.90 + +* Tue Feb 17 2015 Milan Crha - 3.15.4-2 +- Rebuild against newer evolution-data-server + +* Wed Jan 21 2015 Florian Müllner - 3.15.4-1 +- Update to 3.15.4 + +* Fri Dec 19 2014 Florian Müllner - 3.15.3-1 +- Update to 3.15.3 + +* Thu Nov 27 2014 Florian Müllner - 3.15.2-1 +- Update to 3.15.2 + +* Thu Oct 30 2014 Florian Müllner - 3.15.1-1 +- Update to 3.15.1 + +* Tue Oct 14 2014 Florian Müllner - 3.14.1-1 +- Update to 3.14.1 + +* Tue Sep 23 2014 Kalev Lember - 3.14.0-2 +- Drop unused gnome-menus dependency + +* Mon Sep 22 2014 Florian Müllner - 3.14.0-1 +- Update to 3.14.0 + +* Wed Sep 17 2014 Florian Müllner - 3.13.92-1 +- Update to 3.13.92 + +* Wed Sep 03 2014 Florian Müllner - 3.13.91-1 +- Update to 3.13.91 + +* Wed Aug 20 2014 Florian Müllner - 3.13.90-1 +- Update to 3.13.90 + +* Sat Aug 16 2014 Fedora Release Engineering - 3.13.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jul 31 2014 Milan Crha - 3.13.4-3 +- Rebuild against newer evolution-data-server + +* Mon Jul 28 2014 Adel Gadllah - 3.13.4-2 +- Require NetworkManager-config-connectivity-fedora + +* Wed Jul 23 2014 Florian Müllner - 3.13.4-1 +- Update to 3.13.4 + +* Tue Jul 22 2014 Kalev Lember - 3.13.3-2 +- Rebuilt for gobject-introspection 1.41.4 + +* Fri Jun 27 2014 Florian Müllner - 3.13.3-1 +- New gobject-introspection has been built, drop the last patch again + +* Wed Jun 25 2014 Florian Müllner - 3.13.3-1 +- Revert annotation updates until we get a new gobject-introspection build + +* Wed Jun 25 2014 Florian Müllner - 3.13.3-1 +- Update to 3.13.3 + +* Sat Jun 07 2014 Fedora Release Engineering - 3.13.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 27 2014 Florian Müllner - 3.13.2-1 +- Update to 3.13.2 + +* Thu May 01 2014 Kalev Lember - 3.13.1-2 +- Pull in libgsystem + +* Wed Apr 30 2014 Florian Müllner - 3.13.1-1 +- Update to 3.13.1 + +* Tue Apr 15 2014 Florian Müllner - 3.12.1-1 +- Update to 3.12.1 + +* Sat Apr 05 2014 Kalev Lember - 3.12.0-2 +- Update dep versions + +* Tue Mar 25 2014 Florian Müllner - 3.12.0-1 +- Update to 3.12.0 + +* Wed Mar 19 2014 Florian Müllner - 3.11.92-1 +- Update to 3.11.92 + +* Wed Mar 12 2014 Adam Williamson - 3.11.91-2 +- update to final revision of background bug fix from upstream (BGO #722149) + +* Thu Mar 06 2014 Florian Müllner - 3.11.91-1 +- Update to 3.11.91 + +* Mon Mar 03 2014 Adam Williamson - 3.11.90-5 +- backport fixes to fix drag-and-drop workspace creation (BGO #724686) + +* Wed Feb 26 2014 Adam Williamson - 3.11.90-4 +- backport a couple of bugfixes from BGO for things that annoy me + +* Sat Feb 22 2014 Florian Müllner - 3.11.90-3 +- Add dependency on gnome-control-center - several panels are referenced + by a number of menu items + +* Thu Feb 20 2014 Kalev Lember - 3.11.90-2 +- Rebuilt for cogl soname bump + +* Thu Feb 20 2014 Florian Müllner - 3.11.90-1 +- Update to 3.11.90 + +* Mon Feb 10 2014 Peter Hutterer - 3.11.5-3 +- Rebuild for libevdev soname bump + +* Wed Feb 05 2014 Adam Williamson - 3.11.5-2 +- build against new gjs (and hence mozjs24) + +* Wed Feb 05 2014 Richard Hughes - 3.11.5-1 +- Update to 3.11.5 + +* Mon Feb 03 2014 Milan Crha - 3.11.4-2 +- Rebuild against newer evolution-data-server + +* Thu Jan 16 2014 Florian Müllner - 3.11.4-1 +- Update to 3.11.4 + +* Tue Jan 14 2014 Milan Crha - 3.11.3-2 +- Rebuild against newer evolution-data-server + +* Fri Dec 20 2013 Florian Müllner - 3.11.3-1 +- Update to 3.11.3 + +* Thu Nov 21 2013 Milan Crha - 3.11.2-3 +- Rebuild for new libical (RH bug #1023020) + +* Tue Nov 19 2013 Milan Crha - 3.11.2-2 +- Rebuild against newer evolution-data-server + +* Wed Nov 13 2013 Florian Müllner - 3.11.2-1 +- Update to 3.11.2 + +* Wed Oct 30 2013 Florian Müllner - 3.11.1-1 +- Update to 3.11.1 + +* Fri Oct 25 2013 Florian Müllner - 3.10.1-2 +- Rebuild for new e-d-s + +* Tue Oct 15 2013 Florian Müllner - 3.10.1-1 +- Update to 3.10.1 + +* Wed Sep 25 2013 Kalev Lember - 3.10.0.1-1 +- Update to 3.10.0.1 + +* Tue Sep 24 2013 Florian Müllner - 3.10.0-1 +- Update to 3.10.0 + +* Wed Sep 18 2013 Matthias Clasen - 3.9.92-3 +- Build against mutter-wayland + +* Tue Sep 17 2013 Florian Müllner - 3.9.92-1 +- Update to 3.9.92 + +* Tue Sep 03 2013 Florian Müllner - 3.9.91-1 +- Update to 3.9.91 + +* Thu Aug 22 2013 Florian Müllner - 3.9.90-1 +- Update to 3.9.90 + +* Mon Aug 19 2013 Adam Williamson - 3.9.5-3 +- Rebuild for new e-d-s + +* Sat Aug 10 2013 Kalev Lember - 3.9.5-2 +- Drop the bluez revert patch as we now have new enough gnome-bluetooth + +* Tue Jul 30 2013 Florian Müllner - 3.9.5 +- Update to 3.9.5 + +* Mon Jul 29 2013 Adam Williamson - 3.9.4-2 +- rebuild against updated evolution-data-server + +* Wed Jul 10 2013 Florian Müllner - 3.9.4-1 +- Update to 3.9.4 + +* Wed Jul 10 2013 Milan Crha - 3.9.3-3 +- Rebuild against newer evolution-data-server + +* Wed Jul 10 2013 Kalev Lember - 3.9.3-2 +- Add a downstream patch to revert back to bluez 4 + +* Tue Jun 18 2013 Florian Müllner - 3.9.3-1 +- Update to 3.9.3 + +* Tue May 28 2013 Florian Müllner - 3.9.2-1 +- Update to 3.9.2 + +* Sat May 25 2013 Rex Dieter 3.9.1-3 +- rebuild (libical) + +* Wed May 01 2013 Kalev Lember - 3.9.1-2 +- Add missing telepathy-logger runtime dep +- Depend on gnome-session-xsession so that it gets pulled in for + typical GNOME installs + +* Wed May 01 2013 Florian Müllner - 3.9.1-1 +- Update to 3.9.1 + +* Tue Apr 16 2013 Florian Müllner - 3.8.1-1 +- Update to 3.8.1 + +* Thu Mar 28 2013 Adel Gadllah - 3.8.0.1-2 +- Ship the perf tool + +* Wed Mar 27 2013 Ray Strode - 3.8.0.1-1 +- Update to 3.8.0.1 + +* Tue Mar 26 2013 Florian Müllner - 3.8.0-1 +- Update to 3.8.0 + +* Tue Mar 19 2013 Florian Müllner - 3.7.92-1 +- Update to 3.7.92 + +* Tue Mar 05 2013 Florian Müllner - 3.7.91-1 +- Update to 3.7.91 + +* Wed Feb 20 2013 Florian Müllner - 3.7.90-1 +- Update to 3.7.90 + +* Wed Feb 06 2013 Kalev Lember - 3.7.5-2 +- Rebuilt for libgcr soname bump + +* Wed Feb 06 2013 Florian Müllner - 3.7.5-1 +- Update to 3.7.5 + +* Fri Jan 25 2013 Peter Robinson 3.7.4.1-2 +- Rebuild for new cogl + +* Thu Jan 17 2013 Florian Müllner - 3.7.4.1-1 +- Update to 3.7.4.1 + +* Tue Jan 15 2013 Florian Müllner - 3.7.4-1 +- Update to 3.7.4 + +* Wed Jan 09 2013 Richard Hughes - 3.7.3.1-1 +- Update to 3.7.3.1 + +* Tue Dec 18 2012 Florian Müllner 3.7.3-1 +- Update to 3.7.3 + +* Mon Dec 17 2012 Adam Jackson 3.7.2-3 +- Also don't mangle rpath on power + +* Mon Dec 10 2012 Adam Jackson 3.7.2-2 +- Disable bluetooth on power + +* Mon Nov 19 2012 Florian Müllner - 3.7.2-1 +- Update to 3.7.2 + +* Tue Nov 13 2012 Dan Horák - 3.7.1-2 +- don't Require: gnome-bluetooth on s390(x) + +* Fri Nov 09 2012 Kalev Lember - 3.7.1-1 +- Update to 3.7.1 + +* Wed Oct 31 2012 Brian Pepple - 3.6.1-5 +- Rebuild against latest telepathy-logger + +* Thu Oct 25 2012 Milan Crha - 3.6.1-4 +- Rebuild against newer evolution-data-server + +* Sat Oct 20 2012 Dan Horák - 3.6.1-3 +- explicit BR: control-center as it isn't brought in indirectly on s390(x) + +* Thu Oct 18 2012 Florian Müllner - 3.6.1-2 +- Remove avoid-redhat-menus patch + + The standard way of supporting a desktop-specific menu layout is + to set XDG_MENU_PREFIX (which we made gnome-session do now). + +* Mon Oct 15 2012 Florian Müllner - 3.6.1-1 +- Update to 3.6.1 + +* Tue Sep 25 2012 Florian Müllner - 3.6.0-1 +- Update to 3.6.0 + +* Wed Sep 19 2012 Florian Müllner - 3.5.92-1 +- Update to 3.5.92 + +* Tue Sep 11 2012 Florian Müllner - 3.5.91-1 +- Update dependencies + +* Tue Sep 04 2012 Richard Hughes - 3.5.91-1 +- Update to 3.5.91 + +* Tue Aug 28 2012 Matthias Clasen - 3.5.90-3 +- Rebuild against new cogl/clutter + +* Mon Aug 27 2012 Debarshi Ray - 3.5.90-2 +- Rebuild for new libcamel and synchronize gnome-bluetooth Requires with + BuildRequires. + +* Wed Aug 22 2012 Richard Hughes - 3.5.90-1 +- Update to 3.5.90 + +* Tue Aug 14 2012 Debarshi Ray - 3.5.5-2 +- Add Requires: gnome-bluetooth >= 3.5.5 + +* Mon Aug 13 2012 Debarshi Ray - 3.5.5-1 +- Update to 3.5.5 + +* Fri Jul 27 2012 Fedora Release Engineering - 3.5.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sat Jul 21 2012 Kalev Lember - 3.5.4-4 +- Tighten runtime requires + +* Thu Jul 19 2012 Matthias Clasen - 3.5.4-3 +- Add a gdm-libs dependency + +* Wed Jul 18 2012 Colin Walters - 3.5.4-2 +- Bump release + +* Wed Jul 18 2012 Ray Strode 3.5.4-1 +- Update to 3.5.4 + +* Tue Jun 26 2012 Matthias Clasen - 3.5.3-2 +- Rebuild against new e-d-s + +* Tue Jun 26 2012 Matthias Clasen - 3.5.3-1 +- Update to 3.5.3 + +* Thu Jun 07 2012 Richard Hughes - 3.5.2-2 +- Remove upstreamed patch + +* Thu Jun 07 2012 Richard Hughes - 3.5.2-1 +- Update to 3.5.2 + +* Mon May 28 2012 Peter Robinson - 3.4.1-6 +- Cherry pick F17 changes, bump build for new evo soname + +* Wed May 16 2012 Owen Taylor - 3.4.1-5 +- New version of unmount notification + +* Tue May 15 2012 Owen Taylor - 3.4.1-4 +- Add a patch to display a notification until it's safe to remove a drive (#819492) + +* Fri Apr 20 2012 Owen Taylor - 3.4.1-3 +- Add a patch from upstream to avoid a crash when Evolution is not installed (#814401) + +* Wed Apr 18 2012 Kalev Lember - 3.4.1-2 +- Silence glib-compile-schemas scriplets + +* Wed Apr 18 2012 Kalev Lember - 3.4.1-1 +- Update to 3.4.1 + +* Thu Apr 5 2012 Owen Taylor - 3.4.0-2 +- Change gnome-shell-favourite-apps-firefox.patch to also patch the JS code + to handle the transition from mozilla-firefox.desktop to firefox.desktop. + (#808894, reported by Jonathan Kamens) + +* Tue Mar 27 2012 Richard Hughes - 3.4.0-1 +- Update to 3.4.0 + +* Wed Mar 21 2012 Matthias Clasen - 3.3.92-1 +- Update to 3.3.92 + +* Sat Mar 10 2012 Matthias Clasen - 3.3.90-2 +- Rebuild for new cogl + +* Sat Feb 25 2012 Matthias Clasen - 3.3.90-1 +- Update to 3.3.90 + +* Thu Feb 9 2012 Matthias Clasen - 3.3.5-2 +- Depend on accountsservice-libs (#755112) + +* Tue Feb 7 2012 Matthias Clasen - 3.3.5-1 +- Update to 3.3.5 + +* Fri Jan 20 2012 Matthias Clasen - 3.3.4-1 +- Update to 3.3.4 + +* Thu Jan 19 2012 Matthias Clasen - 3.3.3-2 +- Rebuild for new cogl + +* Thu Jan 5 2012 Matthias Clasen - 3.3.3-1 +- Update to 3.3.3 + +* Sun Nov 27 2011 Peter Robinson - 3.3.2-2 +- Rebuild for new clutter and e-d-s + +* Wed Nov 23 2011 Matthias Clasen - 3.3.2-1 +- Update to 3.3.2 + +* Wed Nov 09 2011 Kalev Lember - 3.2.1-6 +- Adapt to firefox desktop file name change in F17 + +* Thu Nov 03 2011 Adam Jackson 3.2.1-5 +- Build with -Wno-error=disabled-declarations for the moment + +* Wed Nov 02 2011 Brian Pepple - 3.2.1-4 +- Rebuld against tp-logger. + +* Sun Oct 30 2011 Bruno Wolff III - 3.2.1-3 +- Rebuild for new evolution-data-server + +* Wed Oct 26 2011 Fedora Release Engineering - 3.2.1-2 +- Rebuilt for glibc bug#747377 + +* Wed Oct 19 2011 Matthias Clasen - 3.2.1-1 +- Update to 3.2.1 + +* Wed Sep 28 2011 Ray Strode 3.2.0-2 +- rebuild + +* Mon Sep 26 2011 Owen Taylor - 3.2.0-1 +- Update to 3.2.0 + +* Tue Sep 20 2011 Matthias Clasen - 3.1.92-1 +- Update to 3.1.92 + +* Fri Sep 16 2011 Kalev Lember - 3.1.91.1-2 +- Tighten dependencies by specifying the required arch (#739130) + +* Wed Sep 14 2011 Owen Taylor - 3.1.91.1-1 +- Update to 3.1.91.1 (adds browser plugin) + Update Requires + +* Thu Sep 08 2011 Dan Horák - 3.1.91-3 +- workaround a chrpath issue on s390(x) + +* Wed Sep 07 2011 Kalev Lember - 3.1.91-2 +- Replace Epiphany with Firefox in the default favourite apps + +* Wed Sep 7 2011 Matthias Clasen - 3.1.91-1 +- Update to 3.1.91 + +* Thu Sep 1 2011 Matthias Clasen - 3.1.90.1-2 +- Require caribou + +* Wed Aug 31 2011 Matthias Clasen - 3.1.90.1-1 +- Update to 3.1.90.1 + +* Wed Aug 31 2011 Adam Williamson - 3.1.4-3.gite7b9933 +- rebuild against e-d-s + +* Fri Aug 19 2011 Matthias Clasen - 3.1.4-2.gite7b9933 +- git snapshot that builds against gnome-menus 3.1.5 + +* Thu Aug 18 2011 Matthew Barnes - 3.1.5-1 +- Rebuild against newer eds libraries. + +* Wed Jul 27 2011 Matthias Clasen - 3.1.4-1 +- Update to 3.1.4 + +* Wed Jul 27 2011 Matthias Clasen - 3.1.3-4 +- Rebuild + +* Tue Jul 26 2011 Matthias Clasen - 3.1.3-3 +- Add necessary requires + +* Mon Jul 25 2011 Matthias Clasen - 3.1.3-2 +- Rebuild + +* Tue Jul 5 2011 Peter Robinson - 3.1.3-1 +- Upstream 3.1.3 dev release + +* Mon Jun 27 2011 Adam Williamson - 3.0.2-4 +- add fixes from f15 branch (gjs dep and rpath) + +* Wed Jun 22 2011 Owen Taylor - 3.0.2-3 +- Add a patch from upstream to avoid g_file_get_contents() + +* Fri Jun 17 2011 Tomas Bzatek - 3.0.2-2 +- Rebuilt for new gtk3 and gnome-desktop3 + +* Wed May 25 2011 Owen Taylor - 3.0.2-1 +- Update to 3.0.2 + +* Tue May 10 2011 Dan Williams - 3.0.1-4 +- Fix initial connections to WPA Enterprise access points (#699014) +- Fix initial connections to mobile broadband networks + +* Thu Apr 28 2011 Dan Horák - 3.0.1-3 +- no bluetooth on s390(x) + +* Wed Apr 27 2011 Owen Taylor - 3.0.1-2 +- Add a patch from upstream to fix duplicate applications in application display + +* Mon Apr 25 2011 Owen Taylor - 3.0.1-1 +- Update to 3.0.1 + +* Mon Apr 11 2011 Colin Walters - 3.0.0.2-2 +- We want to use the GNOME menus which has the designed categories, + not the legacy redhat-menus. + +* Fri Apr 08 2011 Nils Philippsen - 3.0.0.2-1 +- Update to 3.0.0.2 (fixes missing import that was preventing extensions from + loading.) +- Update source URL + +* Tue Apr 5 2011 Owen Taylor - 3.0.0.1-1 +- Update to 3.0.0.1 (fixes bug where network menu could leave + Clutter event handling stuck.) + +* Mon Apr 4 2011 Owen Taylor - 3.0.0-1 +- Update to 3.0.0 + +* Tue Mar 29 2011 Brian Pepple - 2.91.93-3 +- Bump + +* Tue Mar 29 2011 Brian Pepple - 2.91.93-2 +- Rebuild for new tp-logger + +* Mon Mar 28 2011 Owen Taylor - 2.91.93-1 +- Update to 2.91.93. + +* Fri Mar 25 2011 Ray Strode 2.91.92-3 +- Adjustments for More nm-client api changes. +- Fix VPN indicator + +* Thu Mar 24 2011 Christopher Aillon - 2.91.92-2 +- Make activating vpn connections work from the shell indicator + +* Wed Mar 23 2011 Matthias Clasen - 2.91.92-1 +- Update to 2.91.92 + +* Wed Mar 16 2011 Michel Salim - 2.91.91-2 +- Fix alt-tab behavior on when primary display is not leftmost (# 683932) + +* Tue Mar 8 2011 Owen Taylor - 2.91.91-1 +- Update to 2.91.91 + +* Tue Feb 22 2011 Matthias Clasen - 2.91.90-2 +- Require upower and polkit at runtime + +* Tue Feb 22 2011 Matthias Clasen - 2.91.90-1 +- Update to 2.91.90 + +* Thu Feb 10 2011 Matthias Clasen - 2.91.6-6 +- Rebuild against newer gtk + +* Tue Feb 08 2011 Fedora Release Engineering - 2.91.6-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Feb 3 2011 Bill Nottingham - 2.91.6-4 +- buildrequire gnome-bluetooth to fix bluetooth status icon (#674874) + +* Wed Feb 2 2011 Matthias Clasen - 2.91.6-3 +- Rebuild against newer gtk + +* Tue Feb 1 2011 Owen Taylor - 2.91.6-2 +- Build-requires evolution-data-server-devel + +* Tue Feb 1 2011 Owen Taylor - 2.91.6-1 +- Update to 2.91.6 + +* Thu Jan 13 2011 Mattihas Clasen - 2.91.5-3 +- Drop desktop-effects dependency + +* Wed Jan 12 2011 Colin Walters - 2.91.5-2 +- BR latest g-i, handles flags as arguments better + +* Tue Jan 11 2011 Matthias Clasen - 2.91.5-1 +- Update to 2.91.5 + +* Sat Jan 8 2011 Matthias Clasen - 2.91.4-1 +- Update to 2.91.4 +- Rebuild against new gtk + +* Fri Dec 3 2010 Matthias Clasen - 2.91.3-2 +- Rebuild aginst new gtk + +* Mon Nov 29 2010 Owen Taylor - 2.91.2-1 +- Update to 2.91.3 + +* Thu Nov 18 2010 Owen Taylor - 2.91.2-3 +- Add another memory-management crasher fix from upstream + +* Mon Nov 15 2010 Owen Taylor - 2.91.2-2 +- Add a patch from upstream fixing a memory-management crasher + +* Tue Nov 9 2010 Owen Taylor - 2.91.2-1 +- Update to 2.91.2 + +* Mon Nov 1 2010 Owen Taylor - 2.91.1-1 +- Update to 2.91.1 +- Add libcroco-devel to BuildRequires, apparently it was getting + pulled in indirectly before +- Add libcanberra-devel and pulseaudio-libs-devel BuildRequires + +* Mon Oct 4 2010 Owen Taylor - 2.91.0-1 +- Update to 2.91.0 +- Remove patch to disable VBlank syncing + +* Thu Aug 12 2010 Colin Walters - 2.31.5-7 +- Add patch to disable vblank syncing + +* Tue Jul 13 2010 Colin Walters - 2.31.5-5 +- Run glib-compile-schemas + +* Tue Jul 13 2010 Colin Walters - 2.31.5-4 +- Bless stuff in files section + +* Tue Jul 13 2010 Colin Walters - 2.31.5-3 +- Axe gnome-desktop-devel + +* Tue Jul 13 2010 Adel Gadllah - 2.31.5-2 +- BuildRequire gnome-desktop3-devel, gtk3 + +* Mon Jul 12 2010 Colin Walters - 2.31.5-1 +- New upstream version +- Drop rpath goop, shouldn't be necessary any more + +* Fri Jun 25 2010 Colin Walters - 2.31.2-3 +- Drop gir-repository-devel build dependency + +* Fri May 28 2010 Adam Miller - 2.31.2-2 +- Added new version requirements for dependencies based on upstream releases +- Added new file listings for gnome-shell-clock-preferences binary and .desktop +- Added gnome-shell man page file listing + +* Wed May 26 2010 Adam Miller - 2.31.2-1 +- New upstream release + +* Fri Mar 26 2010 Colin Walters - 2.29.1-3 +- Specify V=1 for build, readd smp_mflags since parallel is fixed upstream + +* Thu Mar 25 2010 Adam Miller - 2.29.1-2 +- Bumped for new version of mutter and clutter +- Added version requirement to gjs-devel because of dependency of build + +* Wed Mar 24 2010 Adam Miller - 2.29.1-1 +- Update to latest version 2.29.1 + +* Sun Feb 21 2010 Bastien Nocera 2.28.1-0.2.20100128git +- Require json-glib +- Rebuild for new clutter with json split out +- Fix deprecation in COGL + +* Thu Jan 28 2010 Adam Miller - 2.28.1-0.1.20100128git +- New git snapshot +- Fixed Version for alphatag use + +* Fri Jan 15 2010 Adam Miller - 2.28.0.20101015git-1 +- Added dependency on a git build of gobject-introspect to solve some breakage +- Also went ahead and made a new git tarball + +* Tue Jan 12 2010 Adam Miller - 2.28.0.20100112git-1 +- New git snapshot + +* Mon Dec 07 2009 Adam Miller - 2.28.0.20091206git-5 +- Added libtool, glib-gettext for the libtoolize dep of git snapshot + +* Mon Dec 07 2009 Adam Miller - 2.28.0.20091206git-4 +- Added gnome-common needed by autogen.sh in git snapshot build + +* Sun Dec 06 2009 Adam Miller - 2.28.0.20091206git-3 +- Added the autotools needed to build the git snapshot to the build requires + +* Sun Dec 06 2009 Adam Miller - 2.28.0.20091206git-2 +- Fixed the setup naming issue with the git snapshot directory naming + +* Sun Dec 06 2009 Adam Miller - 2.28.0.20091206git-1 +- Update to git snapshot on 20091206 + +* Wed Oct 7 2009 Owen Taylor - 2.28.0-2 +- Update to 2.28.0 + +* Tue Sep 15 2009 Owen Taylor - 2.27.3-1 +- Update to 2.27.3 + +* Fri Sep 4 2009 Owen Taylor - 2.27.2-2 +- Test for gobject-introspection version should be >= not > + +* Fri Sep 4 2009 Owen Taylor - 2.27.2-1 +- Update to 2.27.2 +- Add an explicit dep on gobject-introspection 0.6.5 which is required + for the new version + +* Sat Aug 29 2009 Owen Taylor - 2.27.1-4 +- Fix GConf %%preun script to properly be for package removal + +* Fri Aug 28 2009 Owen Taylor - 2.27.1-3 +- Replace libgnomeui with gnome-desktop in BuildRequires + +* Fri Aug 28 2009 Owen Taylor - 2.27.1-2 +- BuildRequire intltool +- Add find_lang + +* Fri Aug 28 2009 Owen Taylor - 2.27.1-1 +- Update to 2.27.1 +- Update Requires, add desktop-effects + +* Wed Aug 12 2009 Owen Taylor - 2.27.0-4 +- Add an explicit dependency on GConf2 for pre/post + +* Tue Aug 11 2009 Owen Taylor - 2.27.0-3 +- Add missing BuildRequires on gir-repository-devel + +* Tue Aug 11 2009 Owen Taylor - 2.27.0-2 +- Temporarily use a non-parallel-build until gnome-shell is fixed + +* Mon Aug 10 2009 Owen Taylor - 2.27.0-1 +- Initial version + diff --git a/staging/gnome-shell/gitignore b/staging/gnome-shell/gitignore new file mode 100644 index 0000000..45e7102 --- /dev/null +++ b/staging/gnome-shell/gitignore @@ -0,0 +1,227 @@ +gnome-shell-2.31.5.tar.bz2 +/gnome-shell-2.91.0.tar.bz2 +/gnome-shell-2.91.1.tar.bz2 +/gnome-shell-2.91.2.tar.bz2 +/gnome-shell-2.91.3.tar.bz2 +/gnome-shell-2.91.4.tar.bz2 +/gnome-shell-2.91.5.tar.bz2 +/gnome-shell-2.91.6.tar.bz2 +/gnome-shell-2.91.90.tar.bz2 +/gnome-shell-2.91.91.tar.bz2 +/gnome-shell-2.91.92.tar.bz2 +/gnome-shell-2.91.93.tar.bz2 +/gnome-shell-3.0.0.tar.bz2 +/gnome-shell-3.0.0.1.tar.bz2 +/gnome-shell-3.0.0.2.tar.bz2 +/gnome-shell-3.0.1.tar.bz2 +/gnome-shell-3.0.2.tar.bz2 +/gnome-shell-3.1.3.tar.bz2 +/gnome-shell-3.1.4.tar.xz +/gnome-shell-3.1.4-gite7b9933.tar.bz2 +/gnome-shell-3.1.90.1.tar.xz +/gnome-shell-3.1.91.tar.xz +/gnome-shell-3.1.91.1.tar.xz +/gnome-shell-3.1.92.tar.xz +/gnome-shell-3.2.0.tar.xz +/gnome-shell-3.2.1.tar.xz +/gnome-shell-3.3.2.tar.xz +/gnome-shell-3.3.3.tar.xz +/gnome-shell-3.3.4.tar.xz +/gnome-shell-3.3.5.tar.xz +/gnome-shell-3.3.90.tar.xz +/gnome-shell-3.3.92.tar.xz +/gnome-shell-3.4.0.tar.xz +/gnome-shell-3.4.1.tar.xz +/gnome-shell-3.5.2.tar.xz +/gnome-shell-3.5.3.tar.xz +/gnome-shell-3.5.4.tar.xz +/gnome-shell-3.5.5.tar.xz +/gnome-shell-3.5.90.tar.xz +/gnome-shell-3.5.91.tar.xz +/gnome-shell-3.5.92.tar.xz +/gnome-shell-3.6.0.tar.xz +/gnome-shell-3.6.1.tar.xz +/gnome-shell-3.7.1.tar.xz +/gnome-shell-3.7.2.tar.xz +/gnome-shell-3.7.3.tar.xz +/gnome-shell-3.7.3.1.tar.xz +/gnome-shell-3.7.4.tar.xz +/gnome-shell-3.7.4.1.tar.xz +/gnome-shell-3.7.5.tar.xz +/gnome-shell-3.7.90.tar.xz +/gnome-shell-3.7.91.tar.xz +/gnome-shell-3.7.92.tar.xz +/gnome-shell-3.8.0.tar.xz +/gnome-shell-3.8.0.1.tar.xz +/gnome-shell-3.8.1.tar.xz +/gnome-shell-3.9.1.tar.xz +/gnome-shell-3.9.2.tar.xz +/gnome-shell-3.9.3.tar.xz +/gnome-shell-3.9.4.tar.xz +/gnome-shell-3.9.5.tar.xz +/gnome-shell-3.9.90.tar.xz +/gnome-shell-3.9.91.tar.xz +/gnome-shell-3.9.92.tar.xz +/gnome-shell-3.10.0.tar.xz +/gnome-shell-3.10.0.1.tar.xz +/gnome-shell-3.10.1.tar.xz +/gnome-shell-3.11.1.tar.xz +/gnome-shell-3.11.2.tar.xz +/gnome-shell-3.11.3.tar.xz +/gnome-shell-3.11.4.tar.xz +/gnome-shell-3.11.5.tar.xz +/gnome-shell-3.11.90.tar.xz +/gnome-shell-3.11.91.tar.xz +/gnome-shell-3.11.92.tar.xz +/gnome-shell-3.12.0.tar.xz +/gnome-shell-3.12.1.tar.xz +/gnome-shell-3.13.1.tar.xz +/gnome-shell-3.13.2.tar.xz +/gnome-shell-3.13.3.tar.xz +/gnome-shell-3.13.4.tar.xz +/gnome-shell-3.13.90.tar.xz +/gnome-shell-3.13.91.tar.xz +/gnome-shell-3.13.92.tar.xz +/gnome-shell-3.14.0.tar.xz +/gnome-shell-3.14.1.tar.xz +/gnome-shell-3.15.1.tar.xz +/gnome-shell-3.15.2.tar.xz +/gnome-shell-3.15.3.tar.xz +/gnome-shell-3.15.4.tar.xz +/gnome-shell-3.15.90.tar.xz +/gnome-shell-3.15.91.tar.xz +/gnome-shell-3.15.92.tar.xz +/gnome-shell-3.16.0.tar.xz +/gnome-shell-3.16.1.tar.xz +/gnome-shell-3.17.1.tar.xz +/gnome-shell-3.17.2.tar.xz +/gnome-shell-3.17.3.tar.xz +/gnome-shell-3.17.4.tar.xz +/gnome-shell-3.17.90.tar.xz +/gnome-shell-3.17.91.tar.xz +/gnome-shell-3.17.92.tar.xz +/gnome-shell-3.18.0.tar.xz +/gnome-shell-3.18.1.tar.xz +/gnome-shell-3.19.1.tar.xz +/gnome-shell-3.19.2.tar.xz +/gnome-shell-3.19.3.tar.xz +/gnome-shell-3.19.4.tar.xz +/gnome-shell-3.19.90.tar.xz +/gnome-shell-3.19.91.tar.xz +/gnome-shell-3.19.92.tar.xz +/gnome-shell-3.20.0.tar.xz +/gnome-shell-3.20.1.tar.xz +/gnome-shell-3.21.1.tar.xz +/gnome-shell-3.21.2.tar.xz +/gnome-shell-3.21.3.tar.xz +/gnome-shell-3.21.4.tar.xz +/gnome-shell-3.21.90.tar.xz +/gnome-shell-3.21.90.1.tar.xz +/gnome-shell-3.21.91.tar.xz +/gnome-shell-3.21.92.tar.xz +/gnome-shell-3.22.0.tar.xz +/gnome-shell-3.22.1.tar.xz +/gnome-shell-3.23.1.tar.xz +/gnome-shell-3.23.2.tar.xz +/gnome-shell-3.23.3.tar.xz +/gnome-shell-3.23.90.tar.xz +/gnome-shell-3.23.91.tar.xz +/gnome-shell-3.23.92.tar.xz +/gnome-shell-3.24.0.tar.xz +/gnome-shell-3.24.1.tar.xz +/gnome-shell-3.25.1.tar.xz +/gnome-shell-3.25.2.tar.xz +/gnome-shell-3.25.3.tar.xz +/gnome-shell-3.25.4.tar.xz +/gnome-shell-3.25.90.tar.xz +/gnome-shell-3.25.91.tar.xz +/gnome-shell-3.26.0.tar.xz +/gnome-shell-3.26.1.tar.xz +/gnome-shell-3.27.1.tar.xz +/gnome-shell-3.27.91.tar.xz +/gnome-shell-3.27.92.tar.xz +/gnome-shell-3.28.0.tar.xz +/gnome-shell-3.28.1.tar.xz +/gnome-shell-3.29.1.tar.xz +/gnome-shell-3.29.2.tar.xz +/gnome-shell-3.29.4.tar.xz +/gnome-shell-3.29.90.tar.xz +/gnome-shell-3.29.91.tar.xz +/gnome-shell-3.29.92.tar.xz +/gnome-shell-3.30.0.tar.xz +/gnome-shell-3.30.1.tar.xz +/gnome-shell-3.31.2.tar.xz +/gnome-shell-3.31.4.tar.xz +/gnome-shell-3.31.90.tar.xz +/gnome-shell-3.31.91.tar.xz +/gnome-shell-3.31.92.tar.xz +/gnome-shell-3.32.0.tar.xz +/gnome-shell-3.32.1.tar.xz +/gnome-shell-3.33.1.tar.xz +/gnome-shell-3.33.2.tar.xz +/gnome-shell-3.33.3.tar.xz +/gnome-shell-3.33.4.tar.xz +/gnome-shell-3.33.90.tar.xz +/gnome-shell-3.33.91.tar.xz +/gnome-shell-3.33.92.tar.xz +/gnome-shell-3.34.0.tar.xz +/gnome-shell-3.34.1.tar.xz +/gnome-shell-3.35.1.tar.xz +/gnome-shell-3.35.2.tar.xz +/gnome-shell-3.35.3.tar.xz +/gnome-shell-3.35.90.tar.xz +/gnome-shell-3.35.91.tar.xz +/gnome-shell-3.35.92.tar.xz +/gnome-shell-3.36.0.tar.xz +/gnome-shell-3.36.1.tar.xz +/gnome-shell-3.37.1.tar.xz +/gnome-shell-3.37.2.tar.xz +/gnome-shell-3.37.3.tar.xz +/gnome-shell-3.37.90.tar.xz +/gnome-shell-3.37.91.tar.xz +/gnome-shell-3.37.92.tar.xz +/gnome-shell-3.38.0.tar.xz +/gnome-shell-3.38.1.tar.xz +/gnome-shell-40.alpha.tar.xz +/gnome-shell-40.alpha.1.tar.xz +/gnome-shell-40.alpha.1.1.tar.xz +/gnome-shell-40.alpha.1.1-94-g9ce666ac1.tar.xz +/gnome-shell-40.alpha.1.1-228-g829a096ba.tar.xz +/gnome-shell-40.beta.tar.xz +/gnome-shell-40.beta-79-g7a57528bd.tar.xz +/gnome-shell-40.rc.tar.xz +/gnome-shell-40.0.tar.xz +/gnome-shell-40.1.tar.xz +/gnome-shell-40.2.tar.xz +/gnome-shell-40.3.tar.xz +/gnome-shell-41.beta.tar.xz +/gnome-shell-41.rc.tar.xz +/gnome-shell-41.rc.1.tar.xz +/gnome-shell-41.0.tar.xz +/gnome-shell-42.alpha.tar.xz +/gnome-shell-42.beta.tar.xz +/gnome-shell-42.rc.tar.xz +/gnome-shell-42.0.tar.xz +/gnome-shell-42.1.tar.xz +/gnome-shell-42.2.tar.xz +/gnome-shell-43.alpha.tar.xz +/gnome-shell-43.beta.tar.xz +/gnome-shell-43.rc.tar.xz +/gnome-shell-43.0.tar.xz +/gnome-shell-43.1.tar.xz +/gnome-shell-44.beta.tar.xz +/gnome-shell-44.rc.tar.xz +/gnome-shell-44.0.tar.xz +/gnome-shell-44.1.tar.xz +/gnome-shell-44.2.tar.xz +/gnome-shell-45.alpha.tar.xz +/gnome-shell-45.beta.tar.xz +/gnome-shell-45.beta.1.tar.xz +/gnome-shell-45.rc.tar.xz +/gnome-shell-45.0.tar.xz +/gnome-shell-45.1.tar.xz +/gnome-shell-45.2.tar.xz +/gnome-shell-46.alpha.tar.xz +/gnome-shell-46.beta.tar.xz +/gnome-shell-46.rc.tar.xz +/gnome-shell-46.0.tar.xz diff --git a/staging/gnome-shell/gnome-shell-favourite-apps-firefox.patch b/staging/gnome-shell/gnome-shell-favourite-apps-firefox.patch new file mode 100644 index 0000000..326f827 --- /dev/null +++ b/staging/gnome-shell/gnome-shell-favourite-apps-firefox.patch @@ -0,0 +1,38 @@ +From 551b8979483e127471c726fd1db1d52e063a7d81 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 17 Sep 2014 07:11:12 +0200 +Subject: [PATCH] Replace Web with Firefox in default favorites + +--- + data/org.gnome.shell.gschema.xml.in | 2 +- + js/ui/appFavorites.js | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in +index f4fa86d013..86b4bf85ee 100644 +--- a/data/org.gnome.shell.gschema.xml.in ++++ b/data/org.gnome.shell.gschema.xml.in +@@ -50,7 +50,7 @@ + + + +- [ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop'] ++ [ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop'] + List of desktop file IDs for favorite applications + + The applications corresponding to these identifiers +diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js +index 576df3800d..1f55a3c881 100644 +--- a/js/ui/appFavorites.js ++++ b/js/ui/appFavorites.js +@@ -51,6 +51,7 @@ const RENAMED_DESKTOP_IDS = { + 'gnotski.desktop': 'org.gnome.Klotski.desktop', + 'gtali.desktop': 'org.gnome.Tali.desktop', + 'iagno.desktop': 'org.gnome.Reversi.desktop', ++ 'firefox.desktop': 'org.mozilla.firefox.desktop', + 'nautilus.desktop': 'org.gnome.Nautilus.desktop', + 'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop', + 'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop', +-- +2.43.0 + diff --git a/staging/gnome-shell/gnome-shell.spec b/staging/gnome-shell/gnome-shell.spec new file mode 100644 index 0000000..f56b870 --- /dev/null +++ b/staging/gnome-shell/gnome-shell.spec @@ -0,0 +1,243 @@ +%global tarball_version %%(echo %{version} | tr '~' '.') +%global major_version 46 +%global minor_version 1 + +Name: gnome-shell +Version: %{major_version}.%{minor_version} +Release: %autorelease.switcheroo.{{{ git_dir_version }}} +Summary: Window management and application launching for GNOME + +License: GPL-2.0-or-later +URL: https://wiki.gnome.org/Projects/GnomeShell +Source0: https://download.gnome.org/sources/gnome-shell/%{major_version}/%{name}-%{tarball_version}.tar.xz + +# Replace Epiphany with Firefox in the default favourite apps list +Patch: gnome-shell-favourite-apps-firefox.patch + +# No portal helper if WebKitGTK is not installed +Patch: optional-portal-helper.patch + +# Some users might have a broken PAM config, so we really need this +# downstream patch to stop trying on configuration errors. +Patch: 0001-gdm-Work-around-failing-fingerprint-auth.patch + +# shell-app: improve discrete GPU detectio +# https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3193 +Patch: 3193.patch + +%define eds_version 3.45.1 +%define gnome_desktop_version 44.0-7 +%define glib2_version 2.56.0 +%define gobject_introspection_version 1.49.1 +%define gjs_version 1.73.1 +%define gtk4_version 4.0.0 +%define adwaita_version 1.0.0 +%define mutter_version 46.0 +%define polkit_version 0.100 +%define gsettings_desktop_schemas_version 46~beta +%define ibus_version 1.5.2 +%define gnome_bluetooth_version 1:42.3 +%define gstreamer_version 1.4.5 +%define pipewire_version 0.3.0 +%define gnome_settings_daemon_version 3.37.1 + +BuildRequires: bash-completion +BuildRequires: gcc +BuildRequires: meson +BuildRequires: git +BuildRequires: pkgconfig(ibus-1.0) >= %{ibus_version} +BuildRequires: desktop-file-utils +BuildRequires: pkgconfig(libedataserver-1.2) >= %{eds_version} +BuildRequires: pkgconfig(gcr-4) +BuildRequires: pkgconfig(gjs-1.0) >= %{gjs_version} +BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gnome-autoar-0) +BuildRequires: pkgconfig(gnome-desktop-4) >= %{gnome_desktop_version} +BuildRequires: pkgconfig(gobject-introspection-1.0) >= %{gobject_introspection_version} +BuildRequires: mesa-libGL-devel +BuildRequires: mesa-libEGL-devel +BuildRequires: pkgconfig(libnm) +BuildRequires: pkgconfig(polkit-agent-1) >= %{polkit_version} +BuildRequires: pkgconfig(libstartup-notification-1.0) +BuildRequires: pkgconfig(libsystemd) +# for screencast recorder functionality +BuildRequires: pkgconfig(gstreamer-base-1.0) >= %{gstreamer_version} +BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_version} +BuildRequires: pkgconfig(gtk4) >= %{gtk4_version} +BuildRequires: gettext >= 0.19.6 +BuildRequires: python3 + +# for barriers +BuildRequires: libXfixes-devel >= 5.0 +# used in unused BigThemeImage +BuildRequires: librsvg2-devel +BuildRequires: mutter-devel >= %{mutter_version} +BuildRequires: pkgconfig(libpulse) +%ifnarch s390 s390x ppc ppc64 ppc64p7 +BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version} +%endif +# Bootstrap requirements +BuildRequires: gtk-doc +%ifnarch s390 s390x +Recommends: gnome-bluetooth%{?_isa} >= %{gnome_bluetooth_version} +%endif +Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version} +%if 0%{?rhel} != 7 +# Disabled on RHEL 7 to allow logging into KDE session by default +Recommends: gnome-session-xsession +%endif +Requires: gcr%{?_isa} +Requires: gobject-introspection%{?_isa} >= %{gobject_introspection_version} +Requires: gjs%{?_isa} >= %{gjs_version} +Requires: gtk4%{?_isa} >= %{gtk4_version} +Requires: libadwaita%{_isa} >= %{adwaita_version} +Requires: libnma-gtk4%{?_isa} +# needed for loading SVG's via gdk-pixbuf +Requires: librsvg2%{?_isa} +Requires: mutter%{?_isa} >= %{mutter_version} +Requires: upower%{?_isa} +Requires: polkit%{?_isa} >= %{polkit_version} +Requires: gnome-desktop4%{?_isa} >= %{gnome_desktop_version} +Requires: glib2%{?_isa} >= %{glib2_version} +Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} +Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version} +Requires: gstreamer1%{?_isa} >= %{gstreamer_version} +# needed for screen recorder +Requires: gstreamer1-plugins-good%{?_isa} +Requires: pipewire-gstreamer%{?_isa} +Requires: xdg-user-dirs-gtk +# needed for schemas +Requires: at-spi2-atk%{?_isa} +# needed for on-screen keyboard +Requires: ibus%{?_isa} >= %{ibus_version} +# needed for "show keyboard layout" +Requires: tecla +# needed for the user menu +Requires: accountsservice-libs%{?_isa} +Requires: gdm-libs%{?_isa} +# needed for settings items in menus +Requires: gnome-control-center +# needed by some utilities +Requires: python3%{_isa} +# needed for the dual-GPU launch menu +Requires: switcheroo-control +# needed for clocks/weather integration +Requires: geoclue2-libs%{?_isa} +Requires: libgweather4%{?_isa} +# for gnome-extensions CLI tool +Requires: gettext +# needed for thunderbolt support +Recommends: bolt%{?_isa} +# Needed for launching flatpak apps etc +# 1.8.0 is needed for source type support in the screencast portal. +Requires: xdg-desktop-portal-gtk >= 1.8.0 +Requires: xdg-desktop-portal-gnome +# needed by the welcome dialog +Recommends: gnome-tour + +%if !0%{?rhel} +# needed for captive portal helper +Recommends: webkitgtk6.0%{?_isa} +%endif + +# https://github.com/containers/composefs/pull/229#issuecomment-1838735764 +%if 0%{?rhel} >= 10 +ExcludeArch: %{ix86} +%endif + +Provides: desktop-notification-daemon = %{version}-%{release} +Provides: PolicyKit-authentication-agent = %{version}-%{release} +Provides: bundled(gvc) +Provides: bundled(libcroco) = 0.6.13 + +%if 0%{?rhel} +# In Fedora, fedora-obsolete-packages obsoletes caribou +Obsoletes: caribou < 0.4.21-10 +Obsoletes: caribou-antler < 0.4.21-10 +Obsoletes: caribou-devel < 0.4.21-10 +Obsoletes: caribou-gtk2-module < 0.4.21-10 +Obsoletes: caribou-gtk3-module < 0.4.21-10 +Obsoletes: python-caribou < 0.4.21-10 +Obsoletes: python2-caribou < 0.4.21-10 +Obsoletes: python3-caribou < 0.4.21-10 +%endif + +# https://bugzilla.redhat.com/show_bug.cgi?id=1740897 +Conflicts: gnome-shell-extension-background-logo < 3.34.0 + +%description +GNOME Shell provides core user interface functions for the GNOME 3 desktop, +like switching to windows and launching applications. GNOME Shell takes +advantage of the capabilities of modern graphics hardware and introduces +innovative user interface concepts to provide a visually attractive and +easy to use experience. + +%prep +%autosetup -S git -n %{name}-%{tarball_version} + +%build +%meson -Dextensions_app=false +%meson_build + +%install +%meson_install + +# Create empty directories where other packages can drop extensions +mkdir -p %{buildroot}%{_datadir}/gnome-shell/extensions +mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers + +%find_lang %{name} + +%check +desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.Extensions.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop + +%files -f %{name}.lang +%license COPYING +%doc NEWS README.md +%{_bindir}/gnome-shell +%{_bindir}/gnome-extensions +%{_bindir}/gnome-shell-extension-prefs +%{_bindir}/gnome-shell-extension-tool +%{_bindir}/gnome-shell-test-tool +%{_datadir}/glib-2.0/schemas/*.xml +%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.gschema.override +%{_datadir}/applications/org.gnome.Shell.Extensions.desktop +%{_datadir}/applications/org.gnome.Shell.desktop +%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop +%{_datadir}/bash-completion/completions/gnome-extensions +%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-launchers.xml +%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-screenshots.xml +%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml +%{_datadir}/gnome-shell/ +%{_datadir}/dbus-1/services/org.gnome.ScreenSaver.service +%{_datadir}/dbus-1/services/org.gnome.Shell.CalendarServer.service +%{_datadir}/dbus-1/services/org.gnome.Shell.Extensions.service +%{_datadir}/dbus-1/services/org.gnome.Shell.HotplugSniffer.service +%{_datadir}/dbus-1/services/org.gnome.Shell.Notifications.service +%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service +%{_datadir}/dbus-1/services/org.gnome.Shell.Screencast.service +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Extensions.xml +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Introspect.xml +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.PadOsd.xml +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screencast.xml +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screenshot.xml +%{_datadir}/dbus-1/interfaces/org.gnome.ShellSearchProvider.xml +%{_datadir}/dbus-1/interfaces/org.gnome.ShellSearchProvider2.xml +%{_datadir}/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg +%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg +%{_userunitdir}/org.gnome.Shell-disable-extensions.service +%{_userunitdir}/org.gnome.Shell.target +%{_userunitdir}/org.gnome.Shell@wayland.service +%{_userunitdir}/org.gnome.Shell@x11.service +%{_libdir}/gnome-shell/ +%{_libexecdir}/gnome-shell-calendar-server +%{_libexecdir}/gnome-shell-perf-helper +%{_libexecdir}/gnome-shell-hotplug-sniffer +%{_libexecdir}/gnome-shell-portal-helper +%{_mandir}/man1/gnome-extensions.1* +%{_mandir}/man1/gnome-shell.1* + +%changelog +%autochangelog diff --git a/staging/gnome-shell/optional-portal-helper.patch b/staging/gnome-shell/optional-portal-helper.patch new file mode 100644 index 0000000..901b0d0 --- /dev/null +++ b/staging/gnome-shell/optional-portal-helper.patch @@ -0,0 +1,47 @@ +diff --git a/js/portalHelper/main.js b/js/portalHelper/main.js +index 7000089fa..d9a768a3f 100644 +--- a/js/portalHelper/main.js ++++ b/js/portalHelper/main.js +@@ -3,7 +3,13 @@ import Gio from 'gi://Gio'; + import GLib from 'gi://GLib'; + import GObject from 'gi://GObject'; + import Gtk from 'gi://Gtk?version=4.0'; +-import WebKit from 'gi://WebKit?version=6.0'; ++ ++let WebKit; ++try { ++ WebKit = (await import('gi://WebKit?version=6.0')).default; ++} catch { ++ WebKit = null; ++} + + import * as Gettext from 'gettext'; + import {programInvocationName, programArgs} from 'system'; +@@ -365,5 +371,9 @@ class WebPortalHelper extends Adw.Application { + Gettext.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALEDIR); + Gettext.textdomain(Config.GETTEXT_PACKAGE); + +-const app = new WebPortalHelper(); +-await app.runAsync([programInvocationName, ...programArgs]); ++if (WebKit) { ++ const app = new WebPortalHelper(); ++ await app.runAsync([programInvocationName, ...programArgs]); ++} else { ++ log('WebKit typelib is not installed, captive portal helper will be disabled'); ++} +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index 322d7d91a..afca42e31 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -2147,7 +2147,9 @@ class Indicator extends SystemIndicator { + await this._portalHelperProxy.init_async( + GLib.PRIORITY_DEFAULT, null); + } catch (e) { +- console.error(`Error launching the portal helper: ${e.message}`); ++ // Timeout is expected if WebKit is unavailable ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.TIMED_OUT)) ++ console.error(`Error launching the portal helper: ${e.message}`); + } + } + + diff --git a/staging/kf6-kio/0001-Give-the-kuriikwsfiltereng_private-a-VERSION-and-SOV.patch b/staging/kf6-kio/0001-Give-the-kuriikwsfiltereng_private-a-VERSION-and-SOV.patch new file mode 100644 index 0000000..6f1529a --- /dev/null +++ b/staging/kf6-kio/0001-Give-the-kuriikwsfiltereng_private-a-VERSION-and-SOV.patch @@ -0,0 +1,30 @@ +From 0cc287336b32e601e70b26d60d9335abde538a18 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Mon, 16 Oct 2023 17:57:16 -0700 +Subject: [PATCH] Give the kuriikwsfiltereng_private a VERSION and SOVERSION + (#26) + +Signed-off-by: Adam Williamson +--- + src/urifilters/ikws/CMakeLists.txt | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/urifilters/ikws/CMakeLists.txt b/src/urifilters/ikws/CMakeLists.txt +index 7d42584c3..393588993 100644 +--- a/src/urifilters/ikws/CMakeLists.txt ++++ b/src/urifilters/ikws/CMakeLists.txt +@@ -1,6 +1,11 @@ + add_subdirectory(searchproviders) + + add_library(kuriikwsfiltereng_private kuriikwsfiltereng.cpp searchprovider.cpp searchproviderregistry.cpp) ++set_target_properties(kuriikwsfiltereng_private PROPERTIES ++ VERSION ${KIO_VERSION} ++ SOVERSION ${KIO_SOVERSION} ++ EXPORT_NAME kuriikwsfiltereng_private ++) + generate_export_header(kuriikwsfiltereng_private) # We need this to be a shared lib, because otherwise we have duplicate Q_GLOBAL_STATICs + target_link_libraries(kuriikwsfiltereng_private PUBLIC KF6::KIOGui) + install(TARGETS kuriikwsfiltereng_private ${KF_INSTALL_TARGETS_DEFAULT_ARGS}) +-- +2.41.0 + diff --git a/staging/kf6-kio/1556.patch b/staging/kf6-kio/1556.patch new file mode 100644 index 0000000..4aa62d9 --- /dev/null +++ b/staging/kf6-kio/1556.patch @@ -0,0 +1,57 @@ +From 73e8c790f08dba536a5cf4e56c9dd4f3a68d16cd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Dr=C3=B6gehoff?= +Date: Thu, 15 Feb 2024 14:38:21 +0100 +Subject: [PATCH] Improve discrete GPU detection using switcheroo-control + +--- + src/gui/gpudetection.cpp | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/src/gui/gpudetection.cpp b/src/gui/gpudetection.cpp +index 5c4e1c60ac..492e3654da 100644 +--- a/src/gui/gpudetection.cpp ++++ b/src/gui/gpudetection.cpp +@@ -62,6 +62,40 @@ static bool checkGpuWithSwitcheroo() + QList gpus; + arg >> gpus; + ++ if (gpus.length() < 2) { ++ // Skip checking for Default or Discrete GPUs when 1 or no GPU is available ++ return false; ++ } ++ ++ // Check if the Default GPU is Discrete ++ for (const auto &gpu : gpus) { ++ bool defaultGpu = qvariant_cast(gpu[QStringLiteral("Default")]); ++ if (defaultGpu) { ++ bool discreteGpu = qvariant_cast(gpu.value(QStringLiteral("Discrete"), false)); ++ if (discreteGpu) { ++ // If the default GPU is Discret there is no need to apply the env vars ++ s_gpuCheck = GpuCheck::Present; ++ return true; ++ } ++ break; ++ } ++ } ++ ++ // Find the first Discrete GPU ++ for (const auto &gpu : gpus) { ++ bool discreteGpu = qvariant_cast(gpu.value(QStringLiteral("Discrete"), false)); ++ if (!discreteGpu) { ++ s_gpuCheck = GpuCheck::Present; ++ QStringList envList = qvariant_cast(gpu[QStringLiteral("Environment")]); ++ for (int i = 0; i + 1 < envList.size(); i += 2) { ++ s_gpuEnv.insert(envList[i], envList[i + 1]); ++ } ++ return true; ++ } ++ } ++ ++ // fallback to old behavior ++ // find the first non-Default GPU + for (const auto &gpu : gpus) { + bool defaultGpu = qvariant_cast(gpu[QStringLiteral("Default")]); + if (!defaultGpu) { +-- +GitLab + diff --git a/staging/kf6-kio/6e7775d315f389df0a440ed62b842ce83dc9a27e.patch b/staging/kf6-kio/6e7775d315f389df0a440ed62b842ce83dc9a27e.patch new file mode 100644 index 0000000..2c9b594 --- /dev/null +++ b/staging/kf6-kio/6e7775d315f389df0a440ed62b842ce83dc9a27e.patch @@ -0,0 +1,34 @@ +From 6e7775d315f389df0a440ed62b842ce83dc9a27e Mon Sep 17 00:00:00 2001 +From: Nicolas Fella +Date: Fri, 1 Mar 2024 22:16:07 +0100 +Subject: [PATCH] [kterminallauncherjob] Inherit default process environment + from parent + +Before Qt 6.3, an empty (default constructed) QProcessEnvironment caused +QProcess to incorrectly inherit the environment variables from the parent +process. This was fixed in qtbase 5fc9c02a695. + +CommandLauncherJob was adjusted for this in 916984940f64e07db9b4d152be9f2a87dda0cfb4, +however here we are overriding its default env with our own default-constructed one + +BUG: 482107 +--- + src/gui/kterminallauncherjob.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gui/kterminallauncherjob.cpp b/src/gui/kterminallauncherjob.cpp +index c4e83fb11b..edd99327bd 100644 +--- a/src/gui/kterminallauncherjob.cpp ++++ b/src/gui/kterminallauncherjob.cpp +@@ -22,7 +22,7 @@ public: + QString m_fullCommand; // "xterm -e ls" + QString m_desktopName; + QByteArray m_startupId; +- QProcessEnvironment m_environment; ++ QProcessEnvironment m_environment{QProcessEnvironment::InheritFromParent}; + }; + + KTerminalLauncherJob::KTerminalLauncherJob(const QString &command, QObject *parent) +-- +GitLab + diff --git a/staging/kf6-kio/kf6-kio.spec b/staging/kf6-kio/kf6-kio.spec new file mode 100644 index 0000000..ecf59ac --- /dev/null +++ b/staging/kf6-kio/kf6-kio.spec @@ -0,0 +1,297 @@ +%global framework kio + +%global stable_kf6 stable +%global majmin_ver_kf6 6.1 + +Name: kf6-%{framework} +Version: %{majmin_ver_kf6}.0 +Release: 2%{?dist}.switcheroo.{{{ git_dir_version }}} +Summary: KDE Frameworks 6 Tier 3 solution for filesystem abstraction + +License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT +URL: https://invent.kde.org/frameworks/%{framework} + +Source0: https://download.kde.org/%{stable_kf6}/frameworks/%{majmin_ver_kf6}/%{framework}-%{version}.tar.xz + +# https://invent.kde.org/frameworks/kio/-/issues/26 +# I'm not sending this upstream because I'm not sure it's really +# exactly what upstream will want, but it solves the practical +# issue for us for now +Patch0: 0001-Give-the-kuriikwsfiltereng_private-a-VERSION-and-SOV.patch + +%if 0%{?flatpak} +# Disable the help: and ghelp: protocol for Flatpak builds, to avoid depending +# on the docbook stack. +Patch101: kio-no-help-protocol.patch +%endif + +# https://invent.kde.org/frameworks/kio/-/merge_requests/1556 +Patch201: 1556.patch + +BuildRequires: extra-cmake-modules >= %{version} +BuildRequires: gcc-c++ +BuildRequires: kf6-rpm-macros +BuildRequires: cmake +BuildRequires: cmake(KF6Archive) +BuildRequires: cmake(KF6Crash) +BuildRequires: cmake(KF6Solid) +BuildRequires: switcheroo-control +BuildRequires: cmake(KF6ColorScheme) +BuildRequires: cmake(KF6Config) +BuildRequires: cmake(KF6CoreAddons) +BuildRequires: cmake(KF6DBusAddons) +BuildRequires: cmake(KF6DocTools) +BuildRequires: cmake(KF6GuiAddons) +BuildRequires: cmake(KF6I18n) +BuildRequires: cmake(KF6Service) +BuildRequires: qt6-qtbase-private-devel +BuildRequires: cmake(KF6Bookmarks) +BuildRequires: cmake(KF6Completion) +BuildRequires: cmake(KF6ConfigWidgets) +BuildRequires: cmake(KF6IconThemes) +BuildRequires: cmake(KF6ItemViews) +BuildRequires: cmake(KF6JobWidgets) +BuildRequires: cmake(KF6WindowSystem) +BuildRequires: cmake(KF6Notifications) +BuildRequires: cmake(KF6Wallet) +BuildRequires: cmake(KF6WidgetsAddons) +BuildRequires: cmake(KF6XmlGui) + +BuildRequires: libacl-devel +%if !0%{?flatpak} +BuildRequires: libxml2-devel +BuildRequires: libxslt-devel +%endif +BuildRequires: pkgconfig(blkid) +BuildRequires: pkgconfig(mount) +BuildRequires: pkgconfig(xkbcommon) +BuildRequires: zlib-devel + +BuildRequires: qt6-qtbase-devel +BuildRequires: cmake(Qt6UiPlugin) +BuildRequires: cmake(Qt6Qml) + +BuildRequires: cmake(KF6KDED) +BuildRequires: cmake(Qt6Core5Compat) + +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-widgets%{?_isa} = %{version}-%{release} +Requires: %{name}-file-widgets%{?_isa} = %{version}-%{release} +Requires: %{name}-gui%{?_isa} = %{version}-%{release} + +Requires: kf6-kded + +%description +KDE Frameworks 6 Tier 3 solution for filesystem abstraction + +%package devel +Summary: Development files for %{name} +Requires: %{name} = %{version}-%{release} +Requires: kf6-kbookmarks-devel +Requires: cmake(KF6Completion) +Requires: cmake(KF6Config) +Requires: cmake(KF6CoreAddons) +Requires: cmake(KF6ItemViews) +Requires: cmake(KF6JobWidgets) +Requires: cmake(KF6Service) +Requires: cmake(KF6Solid) +Requires: cmake(KF6XmlGui) +Requires: cmake(KF6WindowSystem) +Requires: qt6-qtbase-devel +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package doc +Summary: Documentation files for %{name} +Requires: %{name}-core = %{version}-%{release} +BuildArch: noarch +%description doc +Documentation for %{name}. + +%package core +Summary: Core components of the KIO Framework +%{?kf6_kinit_requires} +Requires: %{name}-core-libs%{?_isa} = %{version}-%{release} +Requires: %{name}-doc = %{version}-%{release} +Requires: kf6-filesystem +Recommends: switcheroo-control +%description core +KIOCore library provides core non-GUI components for working with KIO. + +%package core-libs +Summary: Runtime libraries for KIO Core +Requires: %{name}-core%{?_isa} = %{version}-%{release} +%description core-libs +%{summary}. + +%package widgets +Summary: Widgets for KIO Framework +## org.kde.klauncher6 service referenced from : widgets/krun.cpp +## included here for completeness, even those -core already has a dependency. +%{?kf6_kinit_requires} +Requires: %{name}-core%{?_isa} = %{version}-%{release} +%description widgets +KIOWidgets contains classes that provide generic job control, progress +reporting, etc. + +%package widgets-libs +Summary: Runtime libraries for KIO Widgets library +Requires: %{name}-widgets%{?_isa} = %{version}-%{release} +%description widgets-libs +%{summary}. + +%package file-widgets +Summary: Widgets for file-handling for KIO Framework +Requires: %{name}-widgets%{?_isa} = %{version}-%{release} +%description file-widgets +The KIOFileWidgets library provides the file selection dialog and +its components. + +%package gui +Summary: Gui components for the KIO Framework +Requires: %{name}-core%{?_isa} = %{version}-%{release} +%description gui +%{summary}. + +%package qch-doc +Summary: Developer Documentation files for %{name} +BuildArch: noarch +%description qch-doc +Developer Documentation files for %{name} for use with KDevelop or QtCreator. + + +%prep +%autosetup -n %{framework}-%{version} -p1 + + +%build +%cmake_kf6 +%cmake_build + + +%install +%cmake_install +%find_lang %{name} --all-name --with-man --with-html + +%files +%license LICENSES/*.txt +%doc README.md + +%files core +%{_kf6_libexecdir}/kioexec +%{_kf6_libexecdir}/kiod6 +%{_kf6_libexecdir}/kioworker +%{_kf6_bindir}/ktelnetservice6 +%{_kf6_bindir}/ktrash6 +%{_kf6_plugindir}/kio/ +%{_kf6_plugindir}/kded/ +%{_kf6_plugindir}/kiod/ +%{_kf6_datadir}/kf6/searchproviders/*.desktop +%{_kf6_datadir}/applications/*.desktop +%{_datadir}/dbus-1/services/org.kde.*.service +%{_kf6_datadir}/qlogging-categories6/*categories + +%files core-libs +%{_kf6_libdir}/libKF6KIOCore.so.* + +%files doc -f %{name}.lang + +%files gui +%{_kf6_libdir}/libKF6KIOGui.so.* + +%files widgets +%dir %{_kf6_plugindir}/urifilters/ +%{_kf6_plugindir}/urifilters/*.so +%{_kf6_libdir}/libkuriikwsfiltereng_private.so.* + +%files widgets-libs +%{_kf6_libdir}/libKF6KIOWidgets.so.* + +%files file-widgets +%{_kf6_libdir}/libKF6KIOFileWidgets.so.* + +%files devel +%{_kf6_includedir}/* +%{_kf6_libdir}/*.so +%{_kf6_libdir}/cmake/KF6KIO/ +%{_kf6_datadir}/kdevappwizard/templates/kioworker6.tar.bz2 +%{_kf6_qtplugindir}/designer/kio6widgets.so +%{_qt6_docdir}/*.tags + +%files qch-doc +%{_qt6_docdir}/*.qch + +%changelog +* Thu Apr 18 2024 Jan Grulich - 6.1.0-2 +- Rebuild (qt6) + +* Wed Apr 10 2024 Marc Deop i Argemí - 6.1.0-1 +- 6.1.0 + +* Thu Apr 04 2024 Jan Grulich - 6.0.0-7 +- Re-enable docs + +* Thu Apr 04 2024 Jan Grulich - 6.0.0-6 +- Rebuild (qt6) + +* Fri Mar 15 2024 Marie Loise Nolden - 6.0.0-5 +- add 6e7775d315f389df0a440ed62b842ce83dc9a27e.patch +[kterminallauncherjob] Inherit default process environment from parent + +* Mon Mar 11 2024 Yaakov Selkowitz - 6.0.0-4 +- Soften switcheroo-control dependency + +* Sat Mar 09 2024 Marie Loise Nolden - 6.0.0-3 +- add missing BuildArch: noarch to -doc package + +* Sat Mar 2 2024 Marie Loise Nolden - 6.0.0-2 +- move qt designer plugin to -devel + +* Wed Feb 21 2024 Marc Deop i Argemí - 6.0.0-1 +- 6.0.0 + +* Fri Feb 16 2024 Jan Grulich - 5.249.0-2 +- Rebuild (qt6) + +* Wed Jan 31 2024 Marc Deop i Argemí - 5.249.0-1 +- 5.249.0 + +* Thu Jan 25 2024 Fedora Release Engineering - 5.248.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 5.248.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jan 10 2024 Marc Deop i Argemí - 5.248.0-1 +- 5.248.0 + +* Tue Jan 09 2024 Marie Loise Nolden - 5.247.0-2 +- add doc package for KF6 API + +* Wed Dec 20 2023 Marc Deop i Argemí - 5.247.0-1 +- 5.247.0 + +* Sat Dec 02 2023 Justin Zobel - 5.246.0-1 +- Update to 5.246.0 + +* Wed Nov 29 2023 Jan Grulich - 5.245.0-3 +- Rebuild (qt6) + +* Mon Nov 20 2023 Alessandro Astone - 5.245.0-2 +- Add back kuriikwsfiltereng SOVERSION patch + +* Thu Nov 09 2023 Steve Cossette - 5.245.0-1 +- 5.245.0 + +* Tue Oct 17 2023 Jan Grulich - 5.240.0^20231010.060359.1c34fd4-4 +- Rebuild (qt6) + +* Mon Oct 16 2023 Adam Williamson - 5.240.0^20231010.060359.1c34fd4-3 +- Give kuriikwsfiltereng_private library a proper soname to fix deps + +* Mon Oct 09 2023 Steve Cossette - 5.240.0^20231010.060359.1c34fd4-2 +- Fixed a problem with the -doc subpackage building differently on different arches. + +* Mon Oct 09 2023 Steve Cossette - 5.240.0^20231010.060359.1c34fd4-1 +- Initial Release diff --git a/staging/mutter/0001-Revert-x11-Use-input-region-from-frame-window-for-de.patch b/staging/mutter/0001-Revert-x11-Use-input-region-from-frame-window-for-de.patch new file mode 100644 index 0000000..4124b53 --- /dev/null +++ b/staging/mutter/0001-Revert-x11-Use-input-region-from-frame-window-for-de.patch @@ -0,0 +1,163 @@ +From 21680b2f4edb064ff524cb91e9e20ace91deda6d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Sun, 21 Apr 2024 16:54:52 +0200 +Subject: [PATCH 1/2] Revert "x11/window: Update comment and variable name to + reflect current behavior" + +This reverts commit e4763d00e8512aeb408ae118597d753f12217487. +--- + src/x11/window-x11.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c +index 6d2016e3ec..f6f7d87dfe 100644 +--- a/src/x11/window-x11.c ++++ b/src/x11/window-x11.c +@@ -2476,20 +2476,21 @@ meta_window_x11_update_input_region (MetaWindow *window) + + if (region != NULL) + { +- MtkRectangle bounding_rect; ++ MtkRectangle client_area; + +- bounding_rect.x = 0; +- bounding_rect.y = 0; +- bounding_rect.width = window->buffer_rect.width; +- bounding_rect.height = window->buffer_rect.height; ++ client_area.x = 0; ++ client_area.y = 0; ++ client_area.width = window->buffer_rect.width; ++ client_area.height = window->buffer_rect.height; + + /* The shape we get back from the client may have coordinates + * outside of the frame. The X SHAPE Extension requires that + * the overall shape the client provides never exceeds the + * "bounding rectangle" of the window -- the shape that the +- * window would have gotten if it was unshaped. ++ * window would have gotten if it was unshaped. In our case, ++ * this is simply the client area. + */ +- mtk_region_intersect_rectangle (region, &bounding_rect); ++ mtk_region_intersect_rectangle (region, &client_area); + } + + meta_window_set_input_region (window, region); +-- +2.44.0 + + +From f1996e67ad8a5a0009e90c38767c8906e015ba70 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Thu, 5 Oct 2023 13:09:46 -0700 +Subject: [PATCH 2/2] Revert "x11: Use input region from frame window for + decorated windows" + +This reverts commit d991961ae2a5c8cf2e58ff1072239f4902b0f767. It +seems to cause the broken mouse interaction bug reported in +https://bugzilla.redhat.com/show_bug.cgi?id=2239128 . + +Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3068 +--- + src/core/frame.c | 7 ------- + src/x11/window-x11.c | 29 ++++++++++------------------- + 2 files changed, 10 insertions(+), 26 deletions(-) + +diff --git a/src/core/frame.c b/src/core/frame.c +index c74a2e04ec..5feb854805 100644 +--- a/src/core/frame.c ++++ b/src/core/frame.c +@@ -35,7 +35,6 @@ + #include "x11/window-props.h" + + #include +-#include + + #define EVENT_MASK (SubstructureRedirectMask | \ + StructureNotifyMask | SubstructureNotifyMask | \ +@@ -109,9 +108,6 @@ meta_window_x11_set_frame_xwindow (MetaWindow *window, + XChangeWindowAttributes (x11_display->xdisplay, + frame->xwindow, CWEventMask, &attrs); + +- if (META_X11_DISPLAY_HAS_SHAPE (x11_display)) +- XShapeSelectInput (x11_display->xdisplay, frame->xwindow, ShapeNotifyMask); +- + meta_x11_display_register_x_window (x11_display, &frame->xwindow, window); + + if (window->mapped) +@@ -220,9 +216,6 @@ meta_window_destroy_frame (MetaWindow *window) + window->reparents_pending += 1; + } + +- if (META_X11_DISPLAY_HAS_SHAPE (x11_display)) +- XShapeSelectInput (x11_display->xdisplay, frame->xwindow, NoEventMask); +- + XDeleteProperty (x11_display->xdisplay, + meta_window_x11_get_xwindow (window), + x11_display->atom__MUTTER_NEEDS_FRAME); +diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c +index f6f7d87dfe..1bc5c57a1a 100644 +--- a/src/x11/window-x11.c ++++ b/src/x11/window-x11.c +@@ -2082,10 +2082,6 @@ meta_window_x11_constructed (GObject *object) + priv->keys_grabbed = FALSE; + priv->grab_on_frame = FALSE; + +- g_signal_connect (window, "notify::decorated", +- G_CALLBACK (meta_window_x11_update_input_region), +- window); +- + G_OBJECT_CLASS (meta_window_x11_parent_class)->constructed (object); + } + +@@ -2400,21 +2396,16 @@ meta_window_x11_update_input_region (MetaWindow *window) + g_autoptr (MtkRegion) region = NULL; + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); +- Window xwindow; + ++ /* Decorated windows don't have an input region, because ++ we don't shape the frame to match the client windows ++ (so the events are blocked by the frame anyway) ++ */ + if (window->decorated) + { +- if (!window->frame) +- { +- if (priv->input_region) +- meta_window_set_input_region (window, NULL); +- return; +- } +- xwindow = window->frame->xwindow; +- } +- else +- { +- xwindow = priv->xwindow; ++ if (priv->input_region) ++ meta_window_set_input_region (window, NULL); ++ return; + } + + if (META_X11_DISPLAY_HAS_SHAPE (x11_display)) +@@ -2426,7 +2417,7 @@ meta_window_x11_update_input_region (MetaWindow *window) + + mtk_x11_error_trap_push (x11_display->xdisplay); + rects = XShapeGetRectangles (x11_display->xdisplay, +- xwindow, ++ priv->xwindow, + ShapeInput, + &n_rects, + &ordering); +@@ -2480,8 +2471,8 @@ meta_window_x11_update_input_region (MetaWindow *window) + + client_area.x = 0; + client_area.y = 0; +- client_area.width = window->buffer_rect.width; +- client_area.height = window->buffer_rect.height; ++ client_area.width = priv->client_rect.width; ++ client_area.height = priv->client_rect.height; + + /* The shape we get back from the client may have coordinates + * outside of the frame. The X SHAPE Extension requires that +-- +2.44.0 + diff --git a/staging/mutter/0001-modified-3329.patch b/staging/mutter/0001-modified-3329.patch new file mode 100644 index 0000000..54f0ed4 --- /dev/null +++ b/staging/mutter/0001-modified-3329.patch @@ -0,0 +1,145 @@ +From e20ebeefa42997fe65008b11ef771c71b697273c Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Fri, 20 Oct 2023 22:12:23 -0700 +Subject: [PATCH] modified 3329 + +Signed-off-by: Adam Williamson +--- + src/compositor/meta-compositor-x11.c | 2 ++ + src/core/display.c | 34 ---------------------------- + src/tests/x11-test.sh | 3 +++ + src/x11/meta-x11-display.c | 30 +++++++++++++++++++++++- + 4 files changed, 34 insertions(+), 35 deletions(-) + +diff --git a/src/compositor/meta-compositor-x11.c b/src/compositor/meta-compositor-x11.c +index 1ad3327dd..ce7bc1945 100644 +--- a/src/compositor/meta-compositor-x11.c ++++ b/src/compositor/meta-compositor-x11.c +@@ -188,6 +188,8 @@ meta_compositor_x11_manage (MetaCompositor *compositor, + + compositor_x11->have_x11_sync_object = meta_sync_ring_init (xdisplay); + ++ meta_x11_display_redirect_windows (x11_display, display); ++ + return TRUE; + } + +diff --git a/src/core/display.c b/src/core/display.c +index 0a191c0fb..b16e50e21 100644 +--- a/src/core/display.c ++++ b/src/core/display.c +@@ -930,9 +930,6 @@ meta_display_new (MetaContext *context, + MetaDisplay *display; + MetaDisplayPrivate *priv; + guint32 timestamp; +-#ifdef HAVE_X11_CLIENT +- Window old_active_xwindow = None; +-#endif + MetaMonitorManager *monitor_manager; + MetaSettings *settings; + MetaInputCapture *input_capture; +@@ -1048,14 +1045,6 @@ meta_display_new (MetaContext *context, + display->last_focus_time = timestamp; + display->last_user_time = timestamp; + +-#ifdef HAVE_X11 +- if (!meta_is_wayland_compositor ()) +- meta_prop_get_window (display->x11_display, +- display->x11_display->xroot, +- display->x11_display->atom__NET_ACTIVE_WINDOW, +- &old_active_xwindow); +-#endif +- + if (!meta_compositor_manage (display->compositor, error)) + { + g_object_unref (display); +@@ -1076,30 +1065,7 @@ meta_display_new (MetaContext *context, + g_signal_connect (display->gesture_tracker, "state-changed", + G_CALLBACK (gesture_tracker_state_changed), display); + +- /* We know that if mutter is running as a Wayland compositor, +- * we start out with no windows. +- */ +-#ifdef HAVE_X11_CLIENT +- if (!meta_is_wayland_compositor ()) +- meta_display_manage_all_xwindows (display); +- +- if (old_active_xwindow != None) +- { +- MetaWindow *old_active_window; +- old_active_window = meta_x11_display_lookup_x_window (display->x11_display, +- old_active_xwindow); +- if (old_active_window) +- meta_window_focus (old_active_window, timestamp); +- else +- meta_display_unset_input_focus (display, timestamp); +- } +- else +- { +- meta_display_unset_input_focus (display, timestamp); +- } +-#else + meta_display_unset_input_focus (display, timestamp); +-#endif + + g_signal_connect (stage, "notify::is-grabbed", + G_CALLBACK (on_is_grabbed_changed), display); +diff --git a/src/tests/x11-test.sh b/src/tests/x11-test.sh +index 59e460fc3..d95b2460f 100755 +--- a/src/tests/x11-test.sh ++++ b/src/tests/x11-test.sh +@@ -34,6 +34,9 @@ echo \# Launched with pid $MUTTER2_PID + MUTTER2_PID=$! + wait $MUTTER1_PID + ++echo \# Waiting for the second mutter to finish loading ++gdbus wait --session org.gnome.Mutter.IdleMonitor ++ + sleep 2 + + echo \# Terminating clients > /dev/stderr +diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c +index 4e98203dd..4ca620410 100644 +--- a/src/x11/meta-x11-display.c ++++ b/src/x11/meta-x11-display.c +@@ -300,8 +300,36 @@ static void + on_x11_display_opened (MetaX11Display *x11_display, + MetaDisplay *display) + { ++ Window old_active_xwindow = None; ++ ++ if (!meta_is_wayland_compositor ()) ++ { ++ meta_prop_get_window (display->x11_display, ++ display->x11_display->xroot, ++ display->x11_display->atom__NET_ACTIVE_WINDOW, ++ &old_active_xwindow); ++ } ++ ++ if (meta_is_wayland_compositor ()) ++ meta_x11_display_redirect_windows (x11_display, display); ++ ++ + meta_display_manage_all_xwindows (display); +- meta_x11_display_redirect_windows (x11_display, display); ++ ++ if (old_active_xwindow != None) ++ { ++ MetaWindow *old_active_window; ++ ++ old_active_window = meta_x11_display_lookup_x_window (x11_display, ++ old_active_xwindow); ++ if (old_active_window) ++ { ++ uint32_t timestamp; ++ ++ timestamp = display->x11_display->timestamp; ++ meta_window_focus (old_active_window, timestamp); ++ } ++ } + } + + static void +-- +2.41.0 + diff --git a/staging/mutter/0001-place-Always-center-initial-setup-fedora-welcome.patch b/staging/mutter/0001-place-Always-center-initial-setup-fedora-welcome.patch new file mode 100644 index 0000000..078b791 --- /dev/null +++ b/staging/mutter/0001-place-Always-center-initial-setup-fedora-welcome.patch @@ -0,0 +1,28 @@ +From 692546a9701a7b363e6190af441a95385c244907 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 2 Dec 2022 22:49:41 +0100 +Subject: [PATCH] place: Always center initial-setup/fedora-welcome + +--- + src/core/place.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/core/place.c b/src/core/place.c +index f9877dfc7..a69a3ebd1 100644 +--- a/src/core/place.c ++++ b/src/core/place.c +@@ -321,6 +321,11 @@ window_place_centered (MetaWindow *window) + + type = window->type; + ++ if (g_strcmp0 (meta_window_get_wm_class (window), "org.gnome.InitialSetup") == 0 || ++ g_strcmp0 (meta_window_get_wm_class (window), "org.fedoraproject.welcome-screen") == 0 || ++ g_strcmp0 (meta_window_get_wm_class (window), "fedora-welcome") == 0) ++ return TRUE; ++ + return (type == META_WINDOW_DIALOG || + type == META_WINDOW_MODAL_DIALOG || + type == META_WINDOW_SPLASHSCREEN || +-- +2.39.2 + diff --git a/staging/mutter/0001-window-actor-Special-case-shaped-Java-windows.patch b/staging/mutter/0001-window-actor-Special-case-shaped-Java-windows.patch new file mode 100644 index 0000000..51f9ecf --- /dev/null +++ b/staging/mutter/0001-window-actor-Special-case-shaped-Java-windows.patch @@ -0,0 +1,70 @@ +From b3b5aa01c63aee1df079e0394b0e6372df1838d0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 12 May 2017 13:40:31 +0200 +Subject: [PATCH] window-actor: Special-case shaped Java windows + +OpenJDK wrongly assumes that shaping a window implies no shadows. +They got lucky until commit b975676c changed the fallback case, +but now their compliance tests are broken. Make them happy again +by special-casing shaped Java windows. +--- + src/compositor/meta-window-actor-x11.c | 8 ++++++++ + src/x11/window-x11-private.h | 2 ++ + src/x11/window-x11.c | 9 +++++++++ + 3 files changed, 19 insertions(+) + +diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c +index 19827af331..7d5e46ac75 100644 +--- a/src/compositor/meta-window-actor-x11.c ++++ b/src/compositor/meta-window-actor-x11.c +@@ -424,6 +424,14 @@ has_shadow (MetaWindowActorX11 *actor_x11) + */ + if (window->has_custom_frame_extents) + return FALSE; ++ ++ /* ++ * OpenJDK wrongly assumes that shaping a window implies no compositor ++ * shadows; make its compliance tests happy to give it what it wants ... ++ */ ++ if (g_strcmp0 (window->res_name, "sun-awt-X11-XWindowPeer") == 0 && ++ meta_window_x11_is_shaped (window)) ++ return FALSE; + + /* + * Generate shadows for all other windows. +diff --git a/src/x11/window-x11-private.h b/src/x11/window-x11-private.h +index c947744ee5..cb862f0d72 100644 +--- a/src/x11/window-x11-private.h ++++ b/src/x11/window-x11-private.h +@@ -125,6 +125,8 @@ gboolean meta_window_x11_has_pointer (MetaWindow *window); + gboolean meta_window_x11_same_application (MetaWindow *window, + MetaWindow *other_window); + ++gboolean meta_window_x11_is_shaped (MetaWindow *window); ++ + void meta_window_x11_shutdown_group (MetaWindow *window); + + META_EXPORT +diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c +index 745c45db18..83cdd2e420 100644 +--- a/src/x11/window-x11.c ++++ b/src/x11/window-x11.c +@@ -2585,6 +2585,15 @@ meta_window_x11_update_shape_region (MetaWindow *window) + meta_window_set_shape_region (window, region); + } + ++gboolean ++meta_window_x11_is_shaped (MetaWindow *window) ++{ ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); ++ MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); ++ ++ return priv->shape_region != NULL; ++} ++ + /* Generally meta_window_x11_same_application() is a better idea + * of "sameness", since it handles the case where multiple apps + * want to look like the same app or the same app wants to look +-- +2.43.2 + diff --git a/staging/mutter/3567.patch b/staging/mutter/3567.patch new file mode 100644 index 0000000..074930e --- /dev/null +++ b/staging/mutter/3567.patch @@ -0,0 +1,2118 @@ +From 77f2b82c4afe0c22249436e3ddabc2f4d2161b4f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Tue, 12 Dec 2023 22:41:20 +0100 +Subject: [PATCH 1/4] x11-display: Expose UI scaling factor via D-Bus + +This replaces the `legacy-ui-scaling-factor` entry in +`org.gnome.Mutter.DisplayConfig`, with the motivation being to no longer +expose X11 specific state via the monitor configuration API. +--- + .../org.gnome.Mutter.DisplayConfig.xml | 4 -- + data/dbus-interfaces/org.gnome.Mutter.X11.xml | 8 +++ + src/backends/meta-monitor-manager.c | 7 -- + src/meson.build | 5 ++ + src/x11/meta-x11-display.c | 64 ++++++++++++++++++- + 5 files changed, 76 insertions(+), 12 deletions(-) + create mode 100644 data/dbus-interfaces/org.gnome.Mutter.X11.xml + +diff --git a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml +index b05337d74..7294c57a8 100644 +--- a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml ++++ b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml +@@ -426,10 +426,6 @@ + always use the same scale. Absence of + this means logical monitor scales can + differ. +- * "legacy-ui-scaling-factor" (i): The legacy scaling factor traditionally +- used to scale X11 clients (commonly +- communicated via the +- Gdk/WindowScalingFactor XSetting entry). + --> + + +diff --git a/data/dbus-interfaces/org.gnome.Mutter.X11.xml b/data/dbus-interfaces/org.gnome.Mutter.X11.xml +new file mode 100644 +index 000000000..3d3c8a42f +--- /dev/null ++++ b/data/dbus-interfaces/org.gnome.Mutter.X11.xml +@@ -0,0 +1,8 @@ ++ ++ ++ ++ ++ ++ +diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c +index 77743bc72..7f98c2d98 100644 +--- a/src/backends/meta-monitor-manager.c ++++ b/src/backends/meta-monitor-manager.c +@@ -2051,14 +2051,12 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton, + GDBusMethodInvocation *invocation, + MetaMonitorManager *manager) + { +- MetaSettings *settings = meta_backend_get_settings (manager->backend); + GVariantBuilder monitors_builder; + GVariantBuilder logical_monitors_builder; + GVariantBuilder properties_builder; + GList *l; + int i; + MetaMonitorManagerCapability capabilities; +- int ui_scaling_factor; + int max_screen_width, max_screen_height; + + g_variant_builder_init (&monitors_builder, +@@ -2261,11 +2259,6 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton, + g_variant_new_boolean (TRUE)); + } + +- ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings); +- g_variant_builder_add (&properties_builder, "{sv}", +- "legacy-ui-scaling-factor", +- g_variant_new_int32 (ui_scaling_factor)); +- + if (meta_monitor_manager_get_max_screen_size (manager, + &max_screen_width, + &max_screen_height)) +diff --git a/src/meson.build b/src/meson.build +index 05df3bfd2..e658f98ca 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -949,6 +949,11 @@ dbus_interfaces = [ + 'interface': 'org.gnome.Mutter.DebugControl.xml', + 'prefix': 'org.gnome.Mutter', + }, ++ { ++ 'name': 'meta-dbus-x11', ++ 'interface': 'org.gnome.Mutter.X11.xml', ++ 'prefix': 'org.gnome.Mutter', ++ }, + ] + + if have_profiler +diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c +index 5c0760daa..55f062714 100644 +--- a/src/x11/meta-x11-display.c ++++ b/src/x11/meta-x11-display.c +@@ -70,7 +70,7 @@ + #include "wayland/meta-xwayland-private.h" + #endif + +-G_DEFINE_TYPE (MetaX11Display, meta_x11_display, G_TYPE_OBJECT) ++#include "meta-dbus-x11.h" + + static GQuark quark_x11_display_logical_monitor_data = 0; + +@@ -89,6 +89,14 @@ typedef struct _MetaX11DisplayLogicalMonitorData + int xinerama_index; + } MetaX11DisplayLogicalMonitorData; + ++typedef struct _MetaX11DisplayPrivate ++{ ++ MetaDBusX11 *dbus_api; ++ guint dbus_name_id; ++} MetaX11DisplayPrivate; ++ ++G_DEFINE_TYPE_WITH_PRIVATE (MetaX11Display, meta_x11_display, G_TYPE_OBJECT) ++ + static char *get_screen_name (Display *xdisplay, + int number); + +@@ -151,13 +159,46 @@ meta_x11_event_filter_free (MetaX11EventFilter *filter) + g_free (filter); + } + ++static void ++on_bus_acquired (GDBusConnection *connection, ++ const char *name, ++ gpointer user_data) ++{ ++ MetaX11Display *x11_display = user_data; ++ MetaX11DisplayPrivate *priv = ++ meta_x11_display_get_instance_private (x11_display); ++ ++ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_api), ++ connection, ++ "/org/gnome/Mutter/X11", ++ NULL); ++} ++ ++static void ++update_ui_scaling_factor (MetaX11Display *x11_display) ++{ ++ MetaX11DisplayPrivate *priv = ++ meta_x11_display_get_instance_private (x11_display); ++ MetaBackend *backend = backend_from_x11_display (x11_display); ++ MetaSettings *settings = meta_backend_get_settings (backend); ++ int ui_scaling_factor; ++ ++ ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings); ++ meta_dbus_x11_set_ui_scaling_factor (priv->dbus_api, ui_scaling_factor); ++} ++ + static void + meta_x11_display_dispose (GObject *object) + { + MetaX11Display *x11_display = META_X11_DISPLAY (object); ++ MetaX11DisplayPrivate *priv = ++ meta_x11_display_get_instance_private (x11_display); + + x11_display->closing = TRUE; + ++ g_clear_handle_id (&priv->dbus_name_id, g_bus_unown_name); ++ g_clear_object (&priv->dbus_api); ++ + g_clear_pointer (&x11_display->alarm_filters, g_ptr_array_unref); + + g_clear_list (&x11_display->event_funcs, +@@ -1224,6 +1265,23 @@ meta_x11_display_init_frames_client (MetaX11Display *x11_display) + on_frames_client_died, x11_display); + } + ++static void ++initialize_dbus_interface (MetaX11Display *x11_display) ++{ ++ MetaX11DisplayPrivate *priv = ++ meta_x11_display_get_instance_private (x11_display); ++ ++ priv->dbus_api = meta_dbus_x11_skeleton_new (); ++ priv->dbus_name_id = ++ g_bus_own_name (G_BUS_TYPE_SESSION, ++ "org.gnome.Mutter.X11", ++ G_BUS_NAME_OWNER_FLAGS_NONE, ++ on_bus_acquired, ++ NULL, NULL, ++ x11_display, NULL); ++ update_ui_scaling_factor (x11_display); ++} ++ + /** + * meta_x11_display_new: + * +@@ -1318,6 +1376,8 @@ meta_x11_display_new (MetaDisplay *display, + x11_display = g_object_new (META_TYPE_X11_DISPLAY, NULL); + x11_display->display = display; + ++ initialize_dbus_interface (x11_display); ++ + /* here we use XDisplayName which is what the user + * probably put in, vs. DisplayString(display) which is + * canonicalized by XOpenDisplay() +@@ -1974,6 +2034,8 @@ on_monitors_changed_internal (MetaMonitorManager *monitor_manager, + } + + x11_display->has_xinerama_indices = FALSE; ++ ++ update_ui_scaling_factor (x11_display); + } + + static Bool +-- +2.44.0 + + +From d90ede978c07b8baf4186f5f77bd165e35d60941 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= +Date: Tue, 20 Feb 2024 23:51:48 +0100 +Subject: [PATCH 2/4] Add an experimental feature for letting Xwayland clients + scale natively + +With the next commits we'll introduce a new mode for scaling of Xwayland apps, +we'll want to put this mode behind an experimental setting though, so add +that setting. +--- + data/org.gnome.mutter.gschema.xml.in | 8 ++++++++ + src/backends/meta-settings-private.h | 1 + + src/backends/meta-settings.c | 2 ++ + 3 files changed, 11 insertions(+) + +diff --git a/data/org.gnome.mutter.gschema.xml.in b/data/org.gnome.mutter.gschema.xml.in +index 92c97b12e..5c3948555 100644 +--- a/data/org.gnome.mutter.gschema.xml.in ++++ b/data/org.gnome.mutter.gschema.xml.in +@@ -5,6 +5,7 @@ + + + ++ + + + + + +diff --git a/src/backends/meta-settings-private.h b/src/backends/meta-settings-private.h +index afbba054a..2081a81b1 100644 +--- a/src/backends/meta-settings-private.h ++++ b/src/backends/meta-settings-private.h +@@ -32,6 +32,7 @@ typedef enum _MetaExperimentalFeature + META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS = (1 << 1), + META_EXPERIMENTAL_FEATURE_AUTOCLOSE_XWAYLAND = (1 << 2), + META_EXPERIMENTAL_FEATURE_VARIABLE_REFRESH_RATE = (1 << 3), ++ META_EXPERIMENTAL_FEATURE_XWAYLAND_NATIVE_SCALING = (1 << 4), + } MetaExperimentalFeature; + + typedef enum _MetaXwaylandExtension +diff --git a/src/backends/meta-settings.c b/src/backends/meta-settings.c +index 3703b23b0..1ae59d636 100644 +--- a/src/backends/meta-settings.c ++++ b/src/backends/meta-settings.c +@@ -296,6 +296,8 @@ experimental_features_handler (GVariant *features_variant, + feature = META_EXPERIMENTAL_FEATURE_AUTOCLOSE_XWAYLAND; + else if (g_str_equal (feature_str, "variable-refresh-rate")) + feature = META_EXPERIMENTAL_FEATURE_VARIABLE_REFRESH_RATE; ++ else if (g_str_equal (feature_str, "xwayland-native-scaling")) ++ feature = META_EXPERIMENTAL_FEATURE_XWAYLAND_NATIVE_SCALING; + + if (feature) + g_message ("Enabling experimental feature '%s'", feature_str); +-- +2.44.0 + + +From 1ac35ab1fcc1dd3416c0d0ec6bdeb739bd79e5a2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Tue, 12 Dec 2023 22:42:46 +0100 +Subject: [PATCH 3/4] context: Put Wayland compositor getter in the context + header + +--- + src/meta/meta-context.h | 5 +++++ + src/meta/meta-wayland-compositor.h | 3 --- + src/meta/types.h | 4 ++++ + 3 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/src/meta/meta-context.h b/src/meta/meta-context.h +index ef36bd2c3..2adb9b07e 100644 +--- a/src/meta/meta-context.h ++++ b/src/meta/meta-context.h +@@ -101,3 +101,8 @@ gboolean meta_context_raise_rlimit_nofile (MetaContext *context, + META_EXPORT + gboolean meta_context_restore_rlimit_nofile (MetaContext *context, + GError **error); ++ ++#ifdef HAVE_WAYLAND ++META_EXPORT ++MetaWaylandCompositor * meta_context_get_wayland_compositor (MetaContext *context); ++#endif +diff --git a/src/meta/meta-wayland-compositor.h b/src/meta/meta-wayland-compositor.h +index 7f4a50705..3df92fda5 100644 +--- a/src/meta/meta-wayland-compositor.h ++++ b/src/meta/meta-wayland-compositor.h +@@ -31,9 +31,6 @@ G_DECLARE_FINAL_TYPE (MetaWaylandCompositor, + META, WAYLAND_COMPOSITOR, + GObject) + +-META_EXPORT +-MetaWaylandCompositor *meta_context_get_wayland_compositor (MetaContext *context); +- + META_EXPORT + struct wl_display *meta_wayland_compositor_get_wayland_display (MetaWaylandCompositor *compositor); + +diff --git a/src/meta/types.h b/src/meta/types.h +index cbe2a9a3d..8fba4a839 100644 +--- a/src/meta/types.h ++++ b/src/meta/types.h +@@ -38,3 +38,7 @@ typedef struct _MetaSettings MetaSettings; + + typedef struct _MetaWorkspaceManager MetaWorkspaceManager; + typedef struct _MetaSelection MetaSelection; ++ ++#ifdef HAVE_WAYLAND ++typedef struct _MetaWaylandCompositor MetaWaylandCompositor; ++#endif +-- +2.44.0 + + +From eec800b7e0d5c6111bfd27e81f6b14f1612c6659 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Tue, 12 Dec 2023 22:52:44 +0100 +Subject: [PATCH 4/4] Add experimental mode to use native scaling of Xwayland + clients + +Allow scale-aware Xwayland clients to scale by an integer scale +themselves, instead of letting them render them at 1x scale and then +scaling up the texture, making it look blurry. + +When monitor framebuffers are scaled, this special cases Xwayland and +sends output regions in a way that Xwayland think everything is N times +as large as the logical region, where N is the ceil of the max monitor +scale. + +This is done by introducing a "stage" vs "protocol" coordinate space for +X11, where the "protocol" coordinate space is "stage" multiplied by a +scaling factor. + +We're guarding this behind a new experimental feature +"xwayland-native-scaling", which can only come into effect when enabled +together with "scale-monitor-framebuffer". +--- + src/backends/meta-monitor-manager-private.h | 2 + + src/backends/meta-monitor-manager.c | 6 + + src/compositor/meta-window-actor-x11.c | 22 +- + src/core/frame.c | 106 +++++-- + src/wayland/meta-wayland-cursor-surface.c | 52 ++-- + src/wayland/meta-wayland-outputs.c | 73 ++++- + src/wayland/meta-wayland-pointer.c | 14 + + src/wayland/meta-wayland-private.h | 2 + + src/wayland/meta-wayland-surface.c | 30 +- + src/wayland/meta-window-xwayland.c | 71 ++++- + src/wayland/meta-xwayland-private.h | 1 + + src/wayland/meta-xwayland-surface.c | 10 +- + src/wayland/meta-xwayland.c | 56 ++++ + src/wayland/meta-xwayland.h | 2 + + src/x11/meta-x11-display.c | 196 +++++++++++-- + src/x11/window-props.c | 104 ++++++- + src/x11/window-x11.c | 305 ++++++++++++++++---- + src/x11/window-x11.h | 38 +++ + 18 files changed, 916 insertions(+), 174 deletions(-) + +diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h +index 0760a341a..6ed3fc2c3 100644 +--- a/src/backends/meta-monitor-manager-private.h ++++ b/src/backends/meta-monitor-manager-private.h +@@ -436,3 +436,5 @@ gboolean meta_monitor_manager_apply_monitors_config (MetaMonitorManager * + MetaMonitorsConfig *config, + MetaMonitorsConfigMethod method, + GError **error); ++ ++MetaLogicalMonitorLayoutMode meta_monitor_manager_get_layout_mode (MetaMonitorManager *manager); +diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c +index 7f98c2d98..45033d966 100644 +--- a/src/backends/meta-monitor-manager.c ++++ b/src/backends/meta-monitor-manager.c +@@ -4116,3 +4116,9 @@ meta_monitor_manager_get_virtual_monitors (MetaMonitorManager *manager) + + return priv->virtual_monitors; + } ++ ++MetaLogicalMonitorLayoutMode ++meta_monitor_manager_get_layout_mode (MetaMonitorManager *manager) ++{ ++ return manager->layout_mode; ++} +diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c +index 7d5e46ac7..577ed2760 100644 +--- a/src/compositor/meta-window-actor-x11.c ++++ b/src/compositor/meta-window-actor-x11.c +@@ -696,11 +696,23 @@ meta_window_actor_x11_process_damage (MetaWindowActorX11 *actor_x11, + + surface = meta_window_actor_get_surface (META_WINDOW_ACTOR (actor_x11)); + if (surface) +- meta_surface_actor_process_damage (surface, +- event->area.x, +- event->area.y, +- event->area.width, +- event->area.height); ++ { ++ MetaWindow *window = ++ meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11)); ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); ++ MtkRectangle damage; ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->area.x, event->area.y, ++ event->area.width, event->area.height, ++ &damage.x, &damage.y, ++ &damage.width, &damage.height); ++ meta_surface_actor_process_damage (surface, ++ damage.x, ++ damage.y, ++ damage.width, ++ damage.height); ++ } + + meta_window_actor_notify_damaged (META_WINDOW_ACTOR (actor_x11)); + } +diff --git a/src/core/frame.c b/src/core/frame.c +index 5feb85480..6f0f3ab83 100644 +--- a/src/core/frame.c ++++ b/src/core/frame.c +@@ -33,6 +33,7 @@ + #include "x11/meta-x11-display-private.h" + #include "x11/window-x11-private.h" + #include "x11/window-props.h" ++#include "x11/window-x11.h" + + #include + +@@ -65,6 +66,7 @@ meta_window_x11_set_frame_xwindow (MetaWindow *window, + XSetWindowAttributes attrs; + gulong create_serial = 0; + MetaFrame *frame; ++ int child_x, child_y; + + if (window->frame) + return; +@@ -123,11 +125,19 @@ meta_window_x11_set_frame_xwindow (MetaWindow *window, + meta_stack_tracker_record_remove (window->display->stack_tracker, + meta_window_x11_get_xwindow (window), + XNextRequest (x11_display->xdisplay)); ++ meta_window_x11_stage_to_protocol (META_WINDOW_X11 (window), ++ frame->child_x, ++ frame->child_y, ++ 0, 0, ++ &child_x, ++ &child_y, ++ NULL, NULL); ++ + XReparentWindow (x11_display->xdisplay, + meta_window_x11_get_xwindow (window), + frame->xwindow, +- frame->child_x, +- frame->child_y); ++ child_x, ++ child_y); + window->reparents_pending += 1; + /* FIXME handle this error */ + mtk_x11_error_trap_pop (x11_display->xdisplay); +@@ -197,6 +207,8 @@ meta_window_destroy_frame (MetaWindow *window) + + if (!x11_display->closing) + { ++ int child_x, child_y; ++ + if (!window->unmanaging) + { + meta_stack_tracker_record_add (window->display->stack_tracker, +@@ -204,6 +216,14 @@ meta_window_destroy_frame (MetaWindow *window) + XNextRequest (x11_display->xdisplay)); + } + ++ meta_window_x11_stage_to_protocol (META_WINDOW_X11 (window), ++ window->frame->rect.x + borders.invisible.left, ++ window->frame->rect.y + borders.invisible.top, ++ 0, 0, ++ &child_x, ++ &child_y, ++ NULL, NULL); ++ + XReparentWindow (x11_display->xdisplay, + meta_window_x11_get_xwindow (window), + x11_display->xroot, +@@ -211,8 +231,7 @@ meta_window_destroy_frame (MetaWindow *window) + * coordinates here means we'll need to ensure a configure + * notify event is sent; see bug 399552. + */ +- window->frame->rect.x + borders.invisible.left, +- window->frame->rect.y + borders.invisible.top); ++ child_x, child_y); + window->reparents_pending += 1; + } + +@@ -263,6 +282,7 @@ meta_frame_query_borders (MetaFrame *frame, + MetaFrameBorders *borders) + { + MetaWindow *window = frame->window; ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaX11Display *x11_display = window->display->x11_display; + int format, res; + Atom type; +@@ -286,12 +306,22 @@ meta_frame_query_borders (MetaFrame *frame, + if (mtk_x11_error_trap_pop_with_return (x11_display->xdisplay) == Success && + res == Success && nitems == 4) + { +- borders->invisible = (MetaFrameBorder) { +- ((long *) data)[0], +- ((long *) data)[1], +- ((long *) data)[2], +- ((long *) data)[3], +- }; ++ int left, right, top, bottom; ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ ((long *) data)[0], ++ ((long *) data)[1], ++ ((long *) data)[2], ++ ((long *) data)[3], ++ &left, ++ &right, ++ &top, ++ &bottom); ++ ++ borders->invisible.left = left; ++ borders->invisible.right = right; ++ borders->invisible.top = top; ++ borders->invisible.bottom = bottom; + } + else + { +@@ -314,12 +344,21 @@ meta_frame_query_borders (MetaFrame *frame, + if (mtk_x11_error_trap_pop_with_return (x11_display->xdisplay) == Success && + res == Success && nitems == 4) + { +- borders->visible = (MetaFrameBorder) { +- ((long *) data)[0], +- ((long *) data)[1], +- ((long *) data)[2], +- ((long *) data)[3], +- }; ++ int left, right, top, bottom; ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ ((long *) data)[0], ++ ((long *) data)[1], ++ ((long *) data)[2], ++ ((long *) data)[3], ++ &left, ++ &right, ++ &top, ++ &bottom); ++ borders->visible.left = left; ++ borders->visible.right = right; ++ borders->visible.top = top; ++ borders->visible.bottom = bottom; + } + else + { +@@ -367,7 +406,9 @@ meta_frame_sync_to_window (MetaFrame *frame, + gboolean need_resize) + { + MetaWindow *window = frame->window; ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaX11Display *x11_display = window->display->x11_display; ++ MtkRectangle rect; + + meta_topic (META_DEBUG_GEOMETRY, + "Syncing frame geometry %d,%d %dx%d (SE: %d,%d)", +@@ -378,12 +419,22 @@ meta_frame_sync_to_window (MetaFrame *frame, + + mtk_x11_error_trap_push (x11_display->xdisplay); + ++ meta_window_x11_stage_to_protocol (window_x11, ++ frame->rect.x, ++ frame->rect.y, ++ frame->rect.width, ++ frame->rect.height, ++ &rect.x, ++ &rect.y, ++ &rect.width, ++ &rect.height); ++ + XMoveResizeWindow (x11_display->xdisplay, + frame->xwindow, +- frame->rect.x, +- frame->rect.y, +- frame->rect.width, +- frame->rect.height); ++ rect.x, ++ rect.y, ++ rect.width, ++ rect.height); + + mtk_x11_error_trap_pop (x11_display->xdisplay); + +@@ -420,6 +471,7 @@ static void + send_configure_notify (MetaFrame *frame) + { + MetaX11Display *x11_display = frame->window->display->x11_display; ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (frame->window); + XEvent event = { 0 }; + + /* We never get told by the frames client, just reassert the +@@ -429,10 +481,16 @@ send_configure_notify (MetaFrame *frame) + event.xconfigure.display = x11_display->xdisplay; + event.xconfigure.event = frame->xwindow; + event.xconfigure.window = frame->xwindow; +- event.xconfigure.x = frame->rect.x; +- event.xconfigure.y = frame->rect.y; +- event.xconfigure.width = frame->rect.width; +- event.xconfigure.height = frame->rect.height; ++ ++ meta_window_x11_stage_to_protocol (window_x11, ++ frame->rect.x, ++ frame->rect.y, ++ frame->rect.width, ++ frame->rect.height, ++ &event.xconfigure.x, ++ &event.xconfigure.y, ++ &event.xconfigure.width, ++ &event.xconfigure.height); + event.xconfigure.border_width = 0; + event.xconfigure.above = None; + event.xconfigure.override_redirect = False; +diff --git a/src/wayland/meta-wayland-cursor-surface.c b/src/wayland/meta-wayland-cursor-surface.c +index 87a8895c8..5a16ce7d8 100644 +--- a/src/wayland/meta-wayland-cursor-surface.c ++++ b/src/wayland/meta-wayland-cursor-surface.c +@@ -92,37 +92,29 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite, + { + MetaWaylandSurfaceRole *role = META_WAYLAND_SURFACE_ROLE (cursor_surface); + MetaWaylandSurface *surface = meta_wayland_surface_role_get_surface (role); +- +- if (!meta_wayland_surface_is_xwayland (surface)) ++ MetaContext *context = ++ meta_wayland_compositor_get_context (surface->compositor); ++ MetaBackend *backend = meta_context_get_backend (context); ++ MetaMonitorManager *monitor_manager = ++ meta_backend_get_monitor_manager (backend); ++ MetaLogicalMonitor *logical_monitor; ++ ++ logical_monitor = ++ meta_monitor_manager_get_logical_monitor_at (monitor_manager, x, y); ++ if (logical_monitor) + { +- MetaWaylandSurfaceRole *surface_role = +- META_WAYLAND_SURFACE_ROLE (cursor_surface); +- MetaWaylandSurface *surface = +- meta_wayland_surface_role_get_surface (surface_role); +- MetaContext *context = +- meta_wayland_compositor_get_context (surface->compositor); +- MetaBackend *backend = meta_context_get_backend (context); +- MetaMonitorManager *monitor_manager = +- meta_backend_get_monitor_manager (backend); +- MetaLogicalMonitor *logical_monitor; +- +- logical_monitor = +- meta_monitor_manager_get_logical_monitor_at (monitor_manager, x, y); +- if (logical_monitor) +- { +- int surface_scale = surface->applied_state.scale; +- float texture_scale; +- +- if (meta_backend_is_stage_views_scaled (backend)) +- texture_scale = 1.0 / surface_scale; +- else +- texture_scale = (meta_logical_monitor_get_scale (logical_monitor) / +- surface_scale); +- +- meta_cursor_sprite_set_texture_scale (cursor_sprite, texture_scale); +- meta_cursor_sprite_set_texture_transform (cursor_sprite, +- surface->buffer_transform); +- } ++ int surface_scale = surface->applied_state.scale; ++ float texture_scale; ++ ++ if (meta_backend_is_stage_views_scaled (backend)) ++ texture_scale = 1.0 / surface_scale; ++ else ++ texture_scale = (meta_logical_monitor_get_scale (logical_monitor) / ++ surface_scale); ++ ++ meta_cursor_sprite_set_texture_scale (cursor_sprite, texture_scale); ++ meta_cursor_sprite_set_texture_transform (cursor_sprite, ++ surface->buffer_transform); + } + + meta_wayland_surface_update_outputs (surface); +diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c +index 89ae86445..55af4b2ac 100644 +--- a/src/wayland/meta-wayland-outputs.c ++++ b/src/wayland/meta-wayland-outputs.c +@@ -31,6 +31,10 @@ + #include "backends/meta-monitor-manager-private.h" + #include "wayland/meta-wayland-private.h" + ++#ifdef HAVE_XWAYLAND ++#include "wayland/meta-xwayland.h" ++#endif ++ + #include "xdg-output-unstable-v1-server-protocol.h" + + /* Wayland protocol headers list new additions, not deprecations */ +@@ -50,6 +54,8 @@ struct _MetaWaylandOutput + { + GObject parent; + ++ MetaWaylandCompositor *compositor; ++ + struct wl_global *global; + GList *resources; + GList *xdg_output_resources; +@@ -422,6 +428,7 @@ meta_wayland_output_new (MetaWaylandCompositor *compositor, + MetaWaylandOutput *wayland_output; + + wayland_output = g_object_new (META_TYPE_WAYLAND_OUTPUT, NULL); ++ wayland_output->compositor = compositor; + wayland_output->global = wl_global_create (compositor->wayland_display, + &wl_output_interface, + META_WL_OUTPUT_VERSION, +@@ -596,6 +603,19 @@ static const struct zxdg_output_v1_interface + meta_xdg_output_destroy, + }; + ++static gboolean ++is_xwayland_resource (MetaWaylandOutput *wayland_output, ++ struct wl_resource *resource) ++{ ++#ifdef HAVE_XWAYLAND ++ MetaXWaylandManager *manager = &wayland_output->compositor->xwayland_manager; ++ ++ return resource && wl_resource_get_client (resource) == manager->client; ++#else ++ return FALSE; ++#endif ++} ++ + static void + send_xdg_output_events (struct wl_resource *resource, + MetaWaylandOutput *wayland_output, +@@ -613,18 +633,51 @@ send_xdg_output_events (struct wl_resource *resource, + layout = meta_logical_monitor_get_layout (logical_monitor); + old_layout = wayland_output->layout; + +- if (need_all_events || +- old_layout.x != layout.x || old_layout.y != layout.y) ++ if (is_xwayland_resource (wayland_output, resource)) + { +- zxdg_output_v1_send_logical_position (resource, layout.x, layout.y); +- need_done = TRUE; +- } ++#ifdef HAVE_XWAYLAND ++ MetaXWaylandManager *xwayland_manager = ++ &wayland_output->compositor->xwayland_manager; ++ int xwayland_scale; + +- if (need_all_events || +- old_layout.width != layout.width || old_layout.height != layout.height) ++ xwayland_scale = meta_xwayland_get_effective_scale (xwayland_manager); ++ ++ if (need_all_events || ++ old_layout.x != layout.x || old_layout.y != layout.y) ++ { ++ layout.x *= xwayland_scale; ++ layout.y *= xwayland_scale; ++ ++ zxdg_output_v1_send_logical_position (resource, layout.x, layout.y); ++ need_done = TRUE; ++ } ++ ++ if (need_all_events || ++ old_layout.width != layout.width || old_layout.height != layout.height) ++ { ++ layout.width *= xwayland_scale; ++ layout.height *= xwayland_scale; ++ ++ zxdg_output_v1_send_logical_size (resource, layout.width, layout.height); ++ need_done = TRUE; ++ } ++#endif ++ } ++ else + { +- zxdg_output_v1_send_logical_size (resource, layout.width, layout.height); +- need_done = TRUE; ++ if (need_all_events || ++ old_layout.x != layout.x || old_layout.y != layout.y) ++ { ++ zxdg_output_v1_send_logical_position (resource, layout.x, layout.y); ++ need_done = TRUE; ++ } ++ ++ if (need_all_events || ++ old_layout.width != layout.width || old_layout.height != layout.height) ++ { ++ zxdg_output_v1_send_logical_size (resource, layout.width, layout.height); ++ need_done = TRUE; ++ } + } + + if (need_all_events && version >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION) +@@ -745,7 +798,7 @@ meta_wayland_outputs_init (MetaWaylandCompositor *compositor) + MetaMonitorManager *monitor_manager = + meta_backend_get_monitor_manager (backend); + +- g_signal_connect (monitor_manager, "monitors-changed-internal", ++ g_signal_connect (monitor_manager, "monitors-changed", + G_CALLBACK (on_monitors_changed), compositor); + + compositor->outputs = +diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c +index 88b27f84d..324092970 100644 +--- a/src/wayland/meta-wayland-pointer.c ++++ b/src/wayland/meta-wayland-pointer.c +@@ -1244,6 +1244,20 @@ pointer_set_cursor (struct wl_client *client, + cursor_surface = META_WAYLAND_CURSOR_SURFACE (surface->role); + meta_wayland_cursor_surface_set_renderer (cursor_surface, + cursor_renderer); ++ ++#ifdef HAVE_XWAYLAND ++ if (meta_wayland_surface_is_xwayland (surface)) ++ { ++ MetaXWaylandManager *xwayland_manager = ++ &surface->compositor->xwayland_manager; ++ int scale; ++ ++ scale = meta_xwayland_get_effective_scale (xwayland_manager); ++ hot_x = round (hot_x / (double) scale); ++ hot_y = round (hot_y / (double) scale); ++ } ++#endif ++ + meta_wayland_cursor_surface_set_hotspot (cursor_surface, + hot_x, hot_y); + +diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h +index e8d442c03..834753ffd 100644 +--- a/src/wayland/meta-wayland-private.h ++++ b/src/wayland/meta-wayland-private.h +@@ -77,6 +77,8 @@ struct _MetaXWaylandManager + int rr_error_base; + + gboolean should_enable_ei_portal; ++ ++ double highest_monitor_scale; + }; + + struct _MetaWaylandCompositor +diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c +index 6dc5006b7..81ee47bbd 100644 +--- a/src/wayland/meta-wayland-surface.c ++++ b/src/wayland/meta-wayland-surface.c +@@ -781,8 +781,19 @@ meta_wayland_surface_apply_state (MetaWaylandSurface *surface, + state->buffer->type != META_WAYLAND_BUFFER_TYPE_SINGLE_PIXEL)); + } + +- if (state->scale > 0) +- surface->applied_state.scale = state->scale; ++ if (meta_wayland_surface_is_xwayland (surface)) ++ { ++#ifdef HAVE_XWAYLAND ++ MetaXWaylandManager *xwayland_manager = ++ &surface->compositor->xwayland_manager; ++ ++ surface->applied_state.scale = meta_xwayland_get_effective_scale (xwayland_manager); ++#endif ++ } ++ else if (state->scale > 0) ++ { ++ surface->applied_state.scale = state->scale; ++ } + + if (state->has_new_buffer_transform) + surface->buffer_transform = state->buffer_transform; +@@ -977,8 +988,9 @@ meta_wayland_surface_commit (MetaWaylandSurface *surface) + MetaMultiTexture *committed_texture = surface->committed_state.texture; + int committed_scale = surface->committed_state.scale; + +- if ((meta_multi_texture_get_width (committed_texture) % committed_scale != 0) || +- (meta_multi_texture_get_height (committed_texture) % committed_scale != 0)) ++ if (((meta_multi_texture_get_width (committed_texture) % committed_scale != 0) || ++ (meta_multi_texture_get_height (committed_texture) % committed_scale != 0)) && ++ !meta_wayland_surface_is_xwayland (surface)) + { + if (!surface->role || !META_IS_WAYLAND_CURSOR_SURFACE (surface->role)) + { +@@ -1506,6 +1518,16 @@ meta_wayland_surface_update_outputs (MetaWaylandSurface *surface) + g_hash_table_foreach (surface->compositor->outputs, + update_surface_output_state, + surface); ++ ++ if (meta_wayland_surface_is_xwayland (surface)) ++ { ++#ifdef HAVE_XWAYLAND ++ MetaXWaylandManager *xwayland_manager = ++ &surface->compositor->xwayland_manager; ++ ++ surface->applied_state.scale = meta_xwayland_get_effective_scale (xwayland_manager); ++#endif ++ } + } + + void +diff --git a/src/wayland/meta-window-xwayland.c b/src/wayland/meta-window-xwayland.c +index 1299a351c..5fb006962 100644 +--- a/src/wayland/meta-window-xwayland.c ++++ b/src/wayland/meta-window-xwayland.c +@@ -27,8 +27,9 @@ + #include "x11/window-x11-private.h" + #include "x11/xprops.h" + #include "wayland/meta-window-xwayland.h" +-#include "wayland/meta-wayland.h" ++#include "wayland/meta-wayland-private.h" + #include "wayland/meta-wayland-surface-private.h" ++#include "wayland/meta-xwayland.h" + + enum + { +@@ -315,6 +316,72 @@ meta_window_xwayland_process_property_notify (MetaWindow *window, + meta_window_queue (window, META_QUEUE_MOVE_RESIZE); + } + ++static void ++meta_window_xwayland_stage_to_protocol (MetaWindowX11 *window_x11, ++ int stage_x, ++ int stage_y, ++ int stage_width, ++ int stage_height, ++ int *protocol_x, ++ int *protocol_y, ++ int *protocol_width, ++ int *protocol_height) ++{ ++ MetaDisplay *display = meta_window_get_display (META_WINDOW (window_x11)); ++ MetaContext *context = meta_display_get_context (display); ++ MetaWaylandCompositor *wayland_compositor = ++ meta_context_get_wayland_compositor (context); ++ MetaXWaylandManager *xwayland_manager = &wayland_compositor->xwayland_manager; ++ int scale; ++ ++ scale = meta_xwayland_get_effective_scale (xwayland_manager); ++ if (protocol_x) ++ *protocol_x = stage_x * scale; ++ if (protocol_y) ++ *protocol_y = stage_y * scale; ++ if (protocol_width) ++ *protocol_width = stage_width * scale; ++ if (protocol_height) ++ *protocol_height = stage_height * scale; ++} ++ ++static void ++meta_window_xwayland_protocol_to_stage (MetaWindowX11 *window_x11, ++ int protocol_x, ++ int protocol_y, ++ int protocol_width, ++ int protocol_height, ++ int *stage_x, ++ int *stage_y, ++ int *stage_width, ++ int *stage_height) ++{ ++ MetaDisplay *display = meta_window_get_display (META_WINDOW (window_x11)); ++ MetaContext *context = meta_display_get_context (display); ++ MetaWaylandCompositor *wayland_compositor = ++ meta_context_get_wayland_compositor (context); ++ MetaXWaylandManager *xwayland_manager = &wayland_compositor->xwayland_manager; ++ MtkRectangle rect; ++ int scale; ++ ++ rect.x = protocol_x; ++ rect.y = protocol_y; ++ rect.width = protocol_width; ++ rect.height = protocol_height; ++ ++ scale = meta_xwayland_get_effective_scale (xwayland_manager); ++ mtk_rectangle_scale_double (&rect, 1.0 / scale, MTK_ROUNDING_STRATEGY_GROW, &rect); ++ ++ if (stage_x) ++ *stage_x = rect.x; ++ if (stage_y) ++ *stage_y = rect.y; ++ if (stage_width) ++ *stage_width = rect.width; ++ if (stage_height) ++ *stage_height = rect.height; ++} ++ + static void + meta_window_xwayland_class_init (MetaWindowXwaylandClass *klass) + { +@@ -331,6 +398,8 @@ meta_window_xwayland_class_init (MetaWindowXwaylandClass *klass) + window_x11_class->thaw_commits = meta_window_xwayland_thaw_commits; + window_x11_class->always_update_shape = meta_window_xwayland_always_update_shape; + window_x11_class->process_property_notify = meta_window_xwayland_process_property_notify; ++ window_x11_class->stage_to_protocol = meta_window_xwayland_stage_to_protocol; ++ window_x11_class->protocol_to_stage = meta_window_xwayland_protocol_to_stage; + + gobject_class->get_property = meta_window_xwayland_get_property; + gobject_class->set_property = meta_window_xwayland_set_property; +diff --git a/src/wayland/meta-xwayland-private.h b/src/wayland/meta-xwayland-private.h +index 7a9cb73fd..9e06f0315 100644 +--- a/src/wayland/meta-xwayland-private.h ++++ b/src/wayland/meta-xwayland-private.h +@@ -20,6 +20,7 @@ + #include + + #include "wayland/meta-wayland-private.h" ++#include "wayland/meta-xwayland.h" + + gboolean + meta_xwayland_init (MetaXWaylandManager *manager, +diff --git a/src/wayland/meta-xwayland-surface.c b/src/wayland/meta-xwayland-surface.c +index 8fa1c72a9..c6daf9b26 100644 +--- a/src/wayland/meta-xwayland-surface.c ++++ b/src/wayland/meta-xwayland-surface.c +@@ -163,13 +163,19 @@ meta_xwayland_surface_get_relative_coordinates (MetaWaylandSurfaceRole *surface_ + float *out_sy) + { + MetaXwaylandSurface *xwayland_surface = META_XWAYLAND_SURFACE (surface_role); ++ MetaWaylandSurface *surface = ++ meta_wayland_surface_role_get_surface (surface_role); ++ MetaWaylandCompositor *compositor = ++ meta_wayland_surface_get_compositor (surface); + MtkRectangle window_rect = { 0 }; ++ int xwayland_scale; + + if (xwayland_surface->window) + meta_window_get_buffer_rect (xwayland_surface->window, &window_rect); + +- *out_sx = abs_x - window_rect.x; +- *out_sy = abs_y - window_rect.y; ++ xwayland_scale = meta_xwayland_get_effective_scale (&compositor->xwayland_manager); ++ *out_sx = (abs_x - window_rect.x) * xwayland_scale; ++ *out_sy = (abs_y - window_rect.y) * xwayland_scale; + } + + static MetaWaylandSurface * +diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c +index ea9c27d74..828e6f64e 100644 +--- a/src/wayland/meta-xwayland.c ++++ b/src/wayland/meta-xwayland.c +@@ -1051,6 +1051,29 @@ meta_xwayland_shutdown (MetaWaylandCompositor *compositor) + } + } + ++static void ++update_highest_monitor_scale (MetaXWaylandManager *manager) ++{ ++ MetaWaylandCompositor *compositor = manager->compositor; ++ MetaContext *context = meta_wayland_compositor_get_context (compositor); ++ MetaBackend *backend = meta_context_get_backend (context); ++ MetaMonitorManager *monitor_manager = ++ meta_backend_get_monitor_manager (backend); ++ GList *logical_monitors; ++ GList *l; ++ double scale = 1.0; ++ ++ logical_monitors = meta_monitor_manager_get_logical_monitors (monitor_manager); ++ for (l = logical_monitors; l; l = l->next) ++ { ++ MetaLogicalMonitor *logical_monitor = l->data; ++ ++ scale = MAX (scale, meta_logical_monitor_get_scale (logical_monitor)); ++ } ++ ++ manager->highest_monitor_scale = scale; ++} ++ + gboolean + meta_xwayland_init (MetaXWaylandManager *manager, + MetaWaylandCompositor *compositor, +@@ -1058,6 +1081,9 @@ meta_xwayland_init (MetaXWaylandManager *manager, + GError **error) + { + MetaContext *context = compositor->context; ++ MetaBackend *backend = meta_context_get_backend (context); ++ MetaMonitorManager *monitor_manager = ++ meta_backend_get_monitor_manager (backend); + MetaX11DisplayPolicy policy; + int display = 0; + +@@ -1121,6 +1147,10 @@ meta_xwayland_init (MetaXWaylandManager *manager, + /* Xwayland specific protocol, needs to be filtered out for all other clients */ + meta_xwayland_grab_keyboard_init (compositor); + ++ g_signal_connect_swapped (monitor_manager, "monitors-changed-internal", ++ G_CALLBACK (update_highest_monitor_scale), manager); ++ update_highest_monitor_scale (manager); ++ + return TRUE; + } + +@@ -1312,3 +1342,29 @@ meta_xwayland_set_should_enable_ei_portal (MetaXWaylandManager *manager, + { + manager->should_enable_ei_portal = should_enable_ei_portal; + } ++ ++int ++meta_xwayland_get_effective_scale (MetaXWaylandManager *manager) ++{ ++ MetaWaylandCompositor *compositor = manager->compositor; ++ MetaContext *context = meta_wayland_compositor_get_context (compositor); ++ MetaBackend *backend = meta_context_get_backend (context); ++ MetaMonitorManager *monitor_manager = ++ meta_backend_get_monitor_manager (backend); ++ MetaSettings *settings = meta_backend_get_settings (backend); ++ ++ switch (meta_monitor_manager_get_layout_mode (monitor_manager)) ++ { ++ case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL: ++ break; ++ ++ case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL: ++ if (meta_settings_is_experimental_feature_enabled (settings, ++ META_EXPERIMENTAL_FEATURE_XWAYLAND_NATIVE_SCALING) && ++ meta_settings_is_experimental_feature_enabled (settings, ++ META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER)) ++ return ceil (manager->highest_monitor_scale); ++ } ++ ++ return 1; ++} +diff --git a/src/wayland/meta-xwayland.h b/src/wayland/meta-xwayland.h +index daf9d1abb..ae7a06977 100644 +--- a/src/wayland/meta-xwayland.h ++++ b/src/wayland/meta-xwayland.h +@@ -48,3 +48,5 @@ META_EXPORT_TEST + gboolean meta_xwayland_signal (MetaXWaylandManager *manager, + int signum, + GError **error); ++ ++int meta_xwayland_get_effective_scale (MetaXWaylandManager *manager); +diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c +index 55f062714..f67e9e427 100644 +--- a/src/x11/meta-x11-display.c ++++ b/src/x11/meta-x11-display.c +@@ -130,6 +130,42 @@ backend_from_x11_display (MetaX11Display *x11_display) + return meta_context_get_backend (context); + } + ++static void ++stage_to_protocol (MetaX11Display *x11_display, ++ int stage_x, ++ int stage_y, ++ int *protocol_x, ++ int *protocol_y) ++{ ++ MetaDisplay *display = meta_x11_display_get_display (x11_display); ++ MetaContext *context = meta_display_get_context (display); ++ int scale = 1; ++ ++ switch (meta_context_get_compositor_type (context)) ++ { ++ case META_COMPOSITOR_TYPE_WAYLAND: ++ { ++#ifdef HAVE_XWAYLAND ++ MetaWaylandCompositor *wayland_compositor = ++ meta_context_get_wayland_compositor (context); ++ MetaXWaylandManager *xwayland_manager = ++ &wayland_compositor->xwayland_manager; ++ ++ scale = meta_xwayland_get_effective_scale (xwayland_manager); ++#endif ++ break; ++ } ++ ++ case META_COMPOSITOR_TYPE_X11: ++ break; ++ } ++ ++ if (protocol_x) ++ *protocol_x = stage_x * scale; ++ if (protocol_y) ++ *protocol_y = stage_y * scale; ++} ++ + static void + meta_x11_display_unmanage_windows (MetaX11Display *x11_display) + { +@@ -180,10 +216,32 @@ update_ui_scaling_factor (MetaX11Display *x11_display) + MetaX11DisplayPrivate *priv = + meta_x11_display_get_instance_private (x11_display); + MetaBackend *backend = backend_from_x11_display (x11_display); +- MetaSettings *settings = meta_backend_get_settings (backend); +- int ui_scaling_factor; ++ MetaContext *context = meta_backend_get_context (backend); ++ int ui_scaling_factor = 1; ++ ++ switch (meta_context_get_compositor_type (context)) ++ { ++ case META_COMPOSITOR_TYPE_WAYLAND: ++ { ++#ifdef HAVE_XWAYLAND ++ MetaWaylandCompositor *wayland_compositor = ++ meta_context_get_wayland_compositor (context); ++ MetaXWaylandManager *xwayland_manager = ++ &wayland_compositor->xwayland_manager; ++ ++ ui_scaling_factor = meta_xwayland_get_effective_scale (xwayland_manager); ++#endif ++ break; ++ } ++ case META_COMPOSITOR_TYPE_X11: ++ { ++ MetaSettings *settings = meta_backend_get_settings (backend); ++ ++ ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings); ++ break; ++ } ++ } + +- ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings); + meta_dbus_x11_set_ui_scaling_factor (priv->dbus_api, ui_scaling_factor); + } + +@@ -641,6 +699,9 @@ set_desktop_geometry_hint (MetaX11Display *x11_display) + return; + + meta_display_get_size (x11_display->display, &monitor_width, &monitor_height); ++ stage_to_protocol (x11_display, ++ monitor_width, monitor_height, ++ &monitor_width, &monitor_height); + + data[0] = monitor_width; + data[1] = monitor_height; +@@ -1050,14 +1111,22 @@ set_workspace_work_area_hint (MetaWorkspace *workspace, + + for (l = logical_monitors; l; l = l->next) + { +- MtkRectangle area; ++ MtkRectangle stage_area; ++ MtkRectangle protocol_area; + +- meta_workspace_get_work_area_for_logical_monitor (workspace, l->data, &area); ++ meta_workspace_get_work_area_for_logical_monitor (workspace, l->data, ++ &stage_area); + +- tmp[0] = area.x; +- tmp[1] = area.y; +- tmp[2] = area.width; +- tmp[3] = area.height; ++ stage_to_protocol (x11_display, ++ stage_area.x, stage_area.y, ++ &protocol_area.x, &protocol_area.y); ++ stage_to_protocol (x11_display, ++ stage_area.width, stage_area.height, ++ &protocol_area.width, &protocol_area.height); ++ tmp[0] = protocol_area.x; ++ tmp[1] = protocol_area.y; ++ tmp[2] = protocol_area.width; ++ tmp[3] = protocol_area.height; + + tmp += 4; + } +@@ -1086,7 +1155,6 @@ set_work_area_hint (MetaDisplay *display, + int num_workspaces; + GList *l; + unsigned long *data, *tmp; +- MtkRectangle area; + + num_workspaces = meta_workspace_manager_get_n_workspaces (workspace_manager); + data = g_new (unsigned long, num_workspaces * 4); +@@ -1095,14 +1163,22 @@ set_work_area_hint (MetaDisplay *display, + for (l = workspace_manager->workspaces; l; l = l->next) + { + MetaWorkspace *workspace = l->data; ++ MtkRectangle stage_area; ++ MtkRectangle protocol_area; + +- meta_workspace_get_work_area_all_monitors (workspace, &area); ++ meta_workspace_get_work_area_all_monitors (workspace, &stage_area); + set_workspace_work_area_hint (workspace, x11_display); + +- tmp[0] = area.x; +- tmp[1] = area.y; +- tmp[2] = area.width; +- tmp[3] = area.height; ++ stage_to_protocol (x11_display, ++ stage_area.x, stage_area.y, ++ &protocol_area.x, &protocol_area.y); ++ stage_to_protocol (x11_display, ++ stage_area.width, stage_area.height, ++ &protocol_area.width, &protocol_area.height); ++ tmp[0] = protocol_area.x; ++ tmp[1] = protocol_area.y; ++ tmp[2] = protocol_area.width; ++ tmp[3] = protocol_area.height; + + tmp += 4; + } +@@ -1282,6 +1358,41 @@ initialize_dbus_interface (MetaX11Display *x11_display) + update_ui_scaling_factor (x11_display); + } + ++static void ++experimental_features_changed (MetaSettings *settings, ++ MetaExperimentalFeature old_experimental_features, ++ MetaX11Display *x11_display) ++{ ++ gboolean was_xwayland_native_scaling; ++ gboolean was_stage_views_scaled; ++ gboolean is_xwayland_native_scaling; ++ gboolean is_stage_views_scaled; ++ ++ was_xwayland_native_scaling = ++ !!(old_experimental_features & ++ META_EXPERIMENTAL_FEATURE_XWAYLAND_NATIVE_SCALING); ++ was_stage_views_scaled = ++ !!(old_experimental_features & ++ META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER); ++ ++ is_xwayland_native_scaling = ++ meta_settings_is_experimental_feature_enabled ( ++ settings, ++ META_EXPERIMENTAL_FEATURE_XWAYLAND_NATIVE_SCALING); ++ is_stage_views_scaled = ++ meta_settings_is_experimental_feature_enabled ( ++ settings, ++ META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER); ++ ++ if (is_xwayland_native_scaling != was_xwayland_native_scaling || ++ is_stage_views_scaled != was_stage_views_scaled) ++ { ++ update_ui_scaling_factor (x11_display); ++ set_desktop_geometry_hint (x11_display); ++ set_work_area_hint (x11_display->display, x11_display); ++ } ++} ++ + /** + * meta_x11_display_new: + * +@@ -1300,6 +1411,7 @@ meta_x11_display_new (MetaDisplay *display, + MetaBackend *backend = meta_context_get_backend (context); + MetaMonitorManager *monitor_manager = + meta_backend_get_monitor_manager (backend); ++ MetaSettings *settings = meta_backend_get_settings (backend); + g_autoptr (MetaX11Display) x11_display = NULL; + Display *xdisplay; + Screen *xscreen; +@@ -1470,7 +1582,7 @@ meta_x11_display_new (MetaDisplay *display, + "monitors-changed-internal", + G_CALLBACK (on_monitors_changed_internal), + x11_display, +- 0); ++ G_CONNECT_AFTER); + + init_leader_window (x11_display, ×tamp); + x11_display->timestamp = timestamp; +@@ -1563,6 +1675,11 @@ meta_x11_display_new (MetaDisplay *display, + + meta_prefs_add_listener (prefs_changed_callback, x11_display); + ++ g_signal_connect_object (settings, ++ "experimental-features-changed", ++ G_CALLBACK (experimental_features_changed), ++ x11_display, 0); ++ + set_work_area_hint (display, x11_display); + + g_signal_connect_object (display, "workareas-changed", +@@ -1771,16 +1888,12 @@ meta_x11_display_reload_cursor (MetaX11Display *x11_display) + } + + static void +-set_cursor_theme (Display *xdisplay, +- MetaBackend *backend) ++set_cursor_theme (Display *xdisplay, ++ const char *theme, ++ int size) + { +- MetaSettings *settings = meta_backend_get_settings (backend); +- int scale; +- +- scale = meta_settings_get_ui_scaling_factor (settings); +- XcursorSetTheme (xdisplay, meta_prefs_get_cursor_theme ()); +- XcursorSetDefaultSize (xdisplay, +- meta_prefs_get_cursor_size () * scale); ++ XcursorSetTheme (xdisplay, theme); ++ XcursorSetDefaultSize (xdisplay, size); + } + + static void +@@ -1832,8 +1945,37 @@ static void + update_cursor_theme (MetaX11Display *x11_display) + { + MetaBackend *backend = backend_from_x11_display (x11_display); ++ MetaContext *context = meta_backend_get_context (backend); ++ MetaSettings *settings = meta_backend_get_settings (backend); ++ int scale = 1; ++ int size; ++ const char *theme; ++ ++ switch (meta_context_get_compositor_type (context)) ++ { ++ case META_COMPOSITOR_TYPE_WAYLAND: ++ { ++#ifdef HAVE_XWAYLAND ++ MetaWaylandCompositor *wayland_compositor = ++ meta_context_get_wayland_compositor (context); ++ MetaXWaylandManager *xwayland_manager = ++ &wayland_compositor->xwayland_manager; ++ ++ scale = meta_xwayland_get_effective_scale (xwayland_manager); ++#endif ++ break; ++ } ++ ++ case META_COMPOSITOR_TYPE_X11: ++ scale = meta_settings_get_ui_scaling_factor (settings); ++ break; ++ } ++ ++ size = meta_prefs_get_cursor_size () * scale; ++ ++ theme = meta_prefs_get_cursor_theme (); + +- set_cursor_theme (x11_display->xdisplay, backend); ++ set_cursor_theme (x11_display->xdisplay, theme, size); + schedule_reload_x11_cursor (x11_display); + + if (META_IS_BACKEND_X11 (backend)) +@@ -1841,7 +1983,7 @@ update_cursor_theme (MetaX11Display *x11_display) + MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend); + Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11); + +- set_cursor_theme (xdisplay, backend); ++ set_cursor_theme (xdisplay, theme, size); + meta_backend_x11_reload_cursor (backend_x11); + } + } +diff --git a/src/x11/window-props.c b/src/x11/window-props.c +index c18b3eab5..6adb69bb8 100644 +--- a/src/x11/window-props.c ++++ b/src/x11/window-props.c +@@ -305,10 +305,15 @@ reload_icon_geometry (MetaWindow *window, + { + MtkRectangle geometry; + +- geometry.x = (int)value->v.cardinal_list.cardinals[0]; +- geometry.y = (int)value->v.cardinal_list.cardinals[1]; +- geometry.width = (int)value->v.cardinal_list.cardinals[2]; +- geometry.height = (int)value->v.cardinal_list.cardinals[3]; ++ meta_window_x11_protocol_to_stage (META_WINDOW_X11 (window), ++ value->v.cardinal_list.cardinals[0], ++ value->v.cardinal_list.cardinals[1], ++ value->v.cardinal_list.cardinals[2], ++ value->v.cardinal_list.cardinals[3], ++ &geometry.x, ++ &geometry.y, ++ &geometry.width, ++ &geometry.height); + + meta_window_set_icon_geometry (window, &geometry); + } +@@ -370,11 +375,24 @@ reload_gtk_frame_extents (MetaWindow *window, + } + else + { ++ int left, right, top, bottom; + MetaFrameBorder extents; +- extents.left = (int)value->v.cardinal_list.cardinals[0]; +- extents.right = (int)value->v.cardinal_list.cardinals[1]; +- extents.top = (int)value->v.cardinal_list.cardinals[2]; +- extents.bottom = (int)value->v.cardinal_list.cardinals[3]; ++ ++ meta_window_x11_protocol_to_stage (META_WINDOW_X11 (window), ++ value->v.cardinal_list.cardinals[0], ++ value->v.cardinal_list.cardinals[1], ++ value->v.cardinal_list.cardinals[2], ++ value->v.cardinal_list.cardinals[3], ++ &left, ++ &right, ++ &top, ++ &bottom); ++ ++ extents.left = left; ++ extents.right = right; ++ extents.top = top; ++ extents.bottom = bottom; ++ + meta_window_set_custom_frame_extents (window, &extents, initial); + } + } +@@ -678,10 +696,16 @@ reload_opaque_region (MetaWindow *window, + { + MtkRectangle *rect = &rects[rect_index]; + +- rect->x = region[i++]; +- rect->y = region[i++]; +- rect->width = region[i++]; +- rect->height = region[i++]; ++ meta_window_x11_protocol_to_stage (META_WINDOW_X11 (window), ++ region[i + 0], ++ region[i + 1], ++ region[i + 2], ++ region[i + 3], ++ &rect->x, ++ &rect->y, ++ &rect->width, ++ &rect->height); ++ i += 4; + + rect_index++; + } +@@ -1245,7 +1269,61 @@ meta_set_normal_hints (MetaWindow *window, + * as if flags were zero + */ + if (hints) +- window->size_hints = *(MetaSizeHints*)(hints); ++ { ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); ++ ++ window->size_hints = *(MetaSizeHints*)(hints); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->x, hints->y, ++ hints->width, hints->height, ++ &window->size_hints.x, ++ &window->size_hints.y, ++ &window->size_hints.width, ++ &window->size_hints.height); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->min_width, hints->min_height, ++ 0, 0, ++ &window->size_hints.min_width, ++ &window->size_hints.min_height, ++ NULL, NULL); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->max_width, hints->max_height, ++ 0, 0, ++ &window->size_hints.max_width, ++ &window->size_hints.max_height, ++ NULL, NULL); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->width_inc, hints->height_inc, ++ 0, 0, ++ &window->size_hints.width_inc, ++ &window->size_hints.height_inc, ++ NULL, NULL); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->min_aspect.x, hints->min_aspect.y, ++ 0, 0, ++ &window->size_hints.min_aspect.x, ++ &window->size_hints.min_aspect.y, ++ NULL, NULL); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->max_aspect.x, hints->max_aspect.y, ++ 0, 0, ++ &window->size_hints.max_aspect.x, ++ &window->size_hints.max_aspect.y, ++ NULL, NULL); ++ ++ meta_window_x11_protocol_to_stage (window_x11, ++ hints->base_width, hints->base_height, ++ 0, 0, ++ &window->size_hints.base_width, ++ &window->size_hints.base_height, ++ NULL, NULL); ++ } + else + window->size_hints.flags = 0; + +diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c +index 1bc5c57a1..14d334fe0 100644 +--- a/src/x11/window-x11.c ++++ b/src/x11/window-x11.c +@@ -110,6 +110,113 @@ meta_window_x11_get_private (MetaWindowX11 *window_x11) + return meta_window_x11_get_instance_private (window_x11); + } + ++static void ++meta_window_x11_real_stage_to_protocol (MetaWindowX11 *window_x11, ++ int stage_x, ++ int stage_y, ++ int stage_width, ++ int stage_height, ++ int *protocol_x, ++ int *protocol_y, ++ int *protocol_width, ++ int *protocol_height) ++{ ++ if (protocol_x) ++ *protocol_x = stage_x; ++ if (protocol_y) ++ *protocol_y = stage_y; ++ if (protocol_width) ++ *protocol_width = stage_width; ++ if (protocol_height) ++ *protocol_height = stage_height; ++} ++ ++static void ++meta_window_x11_real_protocol_to_stage (MetaWindowX11 *window_x11, ++ int protocol_x, ++ int protocol_y, ++ int protocol_width, ++ int protocol_height, ++ int *stage_x, ++ int *stage_y, ++ int *stage_width, ++ int *stage_height) ++{ ++ if (stage_x) ++ *stage_x = protocol_x; ++ if (stage_y) ++ *stage_y = protocol_y; ++ if (stage_width) ++ *stage_width = protocol_width; ++ if (stage_height) ++ *stage_height = protocol_height; ++} ++ ++void ++meta_window_x11_stage_to_protocol (MetaWindowX11 *window_x11, ++ int stage_x, ++ int stage_y, ++ int stage_width, ++ int stage_height, ++ int *protocol_x, ++ int *protocol_y, ++ int *protocol_width, ++ int *protocol_height) ++{ ++ MetaWindowX11Class *klass = META_WINDOW_X11_GET_CLASS (window_x11); ++ ++ klass->stage_to_protocol (window_x11, ++ stage_x, stage_y, ++ stage_width, stage_height, ++ protocol_x, protocol_y, ++ protocol_width, protocol_height); ++} ++ ++void ++meta_window_x11_protocol_to_stage (MetaWindowX11 *window_x11, ++ int protocol_x, ++ int protocol_y, ++ int protocol_width, ++ int protocol_height, ++ int *stage_x, ++ int *stage_y, ++ int *stage_width, ++ int *stage_height) ++{ ++ MetaWindowX11Class *klass = META_WINDOW_X11_GET_CLASS (window_x11); ++ ++ klass->protocol_to_stage (window_x11, ++ protocol_x, protocol_y, ++ protocol_width, protocol_height, ++ stage_x, stage_y, ++ stage_width, stage_height); ++} ++ ++static MtkRegion * ++region_protocol_to_stage (MtkRegion *region, ++ MetaWindowX11 *window_x11) ++{ ++ int n_rects, i; ++ MtkRectangle *rects; ++ MtkRegion *scaled_region; ++ ++ n_rects = mtk_region_num_rectangles (region); ++ MTK_RECTANGLE_CREATE_ARRAY_SCOPED (n_rects, rects); ++ for (i = 0; i < n_rects; i++) ++ { ++ rects[i] = mtk_region_get_rectangle (region, i); ++ meta_window_x11_protocol_to_stage (window_x11, ++ rects[i].x, rects[i].y, ++ rects[i].width, rects[i].height, ++ &rects[i].x, &rects[i].y, ++ &rects[i].width, &rects[i].height); ++ } ++ ++ scaled_region = mtk_region_create_rectangles (rects, n_rects); ++ ++ return scaled_region; ++} ++ + static void + send_icccm_message (MetaWindow *window, + Atom atom, +@@ -254,8 +361,13 @@ send_configure_notify (MetaWindow *window) + event.xconfigure.display = x11_display->xdisplay; + event.xconfigure.event = priv->xwindow; + event.xconfigure.window = priv->xwindow; +- event.xconfigure.x = priv->client_rect.x - priv->border_width; +- event.xconfigure.y = priv->client_rect.y - priv->border_width; ++ meta_window_x11_stage_to_protocol (window_x11, ++ priv->client_rect.x - priv->border_width, ++ priv->client_rect.y - priv->border_width, ++ 0, 0, ++ &event.xconfigure.x, ++ &event.xconfigure.y, ++ NULL, NULL); + if (window->frame) + { + if (window->withdrawn) +@@ -267,19 +379,42 @@ send_configure_notify (MetaWindow *window) + + meta_frame_calc_borders (window->frame, &borders); + +- event.xconfigure.x = window->frame->rect.x + borders.invisible.left; +- event.xconfigure.y = window->frame->rect.y + borders.invisible.top; ++ meta_window_x11_stage_to_protocol (window_x11, ++ window->frame->rect.x + borders.invisible.left, ++ window->frame->rect.y + borders.invisible.top, ++ 0, 0, ++ &event.xconfigure.x, ++ &event.xconfigure.y, ++ NULL, NULL); + } + else + { ++ int dx, dy; ++ + /* Need to be in root window coordinates */ +- event.xconfigure.x += window->frame->rect.x; +- event.xconfigure.y += window->frame->rect.y; ++ meta_window_x11_stage_to_protocol (window_x11, ++ window->frame->rect.x, ++ window->frame->rect.y, ++ 0, 0, ++ &dx, ++ &dy, ++ NULL, NULL); ++ event.xconfigure.x += dx; ++ event.xconfigure.y += dy; + } + } +- event.xconfigure.width = priv->client_rect.width; +- event.xconfigure.height = priv->client_rect.height; +- event.xconfigure.border_width = priv->border_width; /* requested not actual */ ++ meta_window_x11_stage_to_protocol (window_x11, ++ priv->client_rect.width, ++ priv->client_rect.height, ++ 0, 0, ++ &event.xconfigure.width, ++ &event.xconfigure.height, ++ NULL, NULL); ++ meta_window_x11_stage_to_protocol (window_x11, ++ priv->border_width, ++ 0, 0, 0, ++ &event.xconfigure.border_width, ++ NULL, NULL, NULL); + event.xconfigure.above = None; /* FIXME */ + event.xconfigure.override_redirect = False; + +@@ -1137,20 +1272,26 @@ static void + update_net_frame_extents (MetaWindow *window) + { + MetaX11Display *x11_display = window->display->x11_display; +- ++ int left, right, top, bottom; + unsigned long data[4]; + MetaFrameBorders borders; + Window xwindow = meta_window_x11_get_xwindow (window); + + meta_frame_calc_borders (window->frame, &borders); +- /* Left */ +- data[0] = borders.visible.left; +- /* Right */ +- data[1] = borders.visible.right; +- /* Top */ +- data[2] = borders.visible.top; +- /* Bottom */ +- data[3] = borders.visible.bottom; ++ meta_window_x11_stage_to_protocol (META_WINDOW_X11 (window), ++ borders.visible.left, ++ borders.visible.right, ++ borders.visible.top, ++ borders.visible.bottom, ++ &left, ++ &right, ++ &top, ++ &bottom); ++ ++ data[0] = left; ++ data[1] = right; ++ data[2] = top; ++ data[3] = bottom; + + meta_topic (META_DEBUG_GEOMETRY, + "Setting _NET_FRAME_EXTENTS on managed window 0x%lx " +@@ -1482,10 +1623,11 @@ meta_window_x11_move_resize_internal (MetaWindow *window, + configure_frame_first = size_dx + size_dy >= 0; + + values.border_width = 0; +- values.x = client_rect.x; +- values.y = client_rect.y; +- values.width = client_rect.width; +- values.height = client_rect.height; ++ meta_window_x11_stage_to_protocol (window_x11, ++ client_rect.x, client_rect.y, ++ client_rect.width, client_rect.height, ++ &values.x, &values.y, ++ &values.width, &values.height); + + mask = 0; + if (is_configure_request && priv->border_width != 0) +@@ -1591,6 +1733,10 @@ meta_window_x11_update_struts (MetaWindow *window) + strut_begin = struts[4+(i*2)]; + strut_end = struts[4+(i*2)+1]; + ++ meta_window_x11_protocol_to_stage (META_WINDOW_X11 (window), ++ strut_begin, strut_end, thickness, 0, ++ &strut_begin, &strut_end, &thickness, NULL); ++ + temp = g_new0 (MetaStrut, 1); + temp->side = 1 << i; /* See MetaSide def. Matches nicely, eh? */ + meta_display_get_size (window->display, +@@ -1655,6 +1801,10 @@ meta_window_x11_update_struts (MetaWindow *window) + if (thickness == 0) + continue; + ++ meta_window_x11_protocol_to_stage (META_WINDOW_X11 (window), ++ thickness, 0, 0, 0, ++ &thickness, NULL, NULL, NULL); ++ + temp = g_new0 (MetaStrut, 1); + temp->side = 1 << i; + meta_display_get_size (window->display, +@@ -2040,9 +2190,10 @@ static void + meta_window_x11_constructed (GObject *object) + { + MetaWindow *window = META_WINDOW (object); +- MetaWindowX11 *x11_window = META_WINDOW_X11 (object); +- MetaWindowX11Private *priv = meta_window_x11_get_instance_private (x11_window); ++ MetaWindowX11 *window_x11 = META_WINDOW_X11 (object); ++ MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); + XWindowAttributes attrs = priv->attributes; ++ MtkRectangle rect; + + meta_verbose ("attrs->map_state = %d (%s)", + attrs.map_state, +@@ -2057,16 +2208,17 @@ meta_window_x11_constructed (GObject *object) + window->client_type = META_WINDOW_CLIENT_TYPE_X11; + window->override_redirect = attrs.override_redirect; + +- window->rect.x = attrs.x; +- window->rect.y = attrs.y; +- window->rect.width = attrs.width; +- window->rect.height = attrs.height; ++ meta_window_x11_protocol_to_stage (window_x11, ++ attrs.x, attrs.y, attrs.width, attrs.height, ++ &rect.x, &rect.y, &rect.width, &rect.height); ++ ++ window->rect = rect; + + /* size_hints are the "request" */ +- window->size_hints.x = attrs.x; +- window->size_hints.y = attrs.y; +- window->size_hints.width = attrs.width; +- window->size_hints.height = attrs.height; ++ window->size_hints.x = rect.x; ++ window->size_hints.y = rect.y; ++ window->size_hints.width = rect.width; ++ window->size_hints.height = rect.height; + + window->depth = attrs.depth; + priv->xvisual = attrs.visual; +@@ -2076,11 +2228,11 @@ meta_window_x11_constructed (GObject *object) + + window->decorated = TRUE; + window->hidden = FALSE; +- priv->border_width = attrs.border_width; + priv->xclient_leader = None; + +- priv->keys_grabbed = FALSE; +- priv->grab_on_frame = FALSE; ++ meta_window_x11_protocol_to_stage (window_x11, ++ attrs.border_width, 0, 0, 0, ++ &priv->border_width, NULL, NULL, NULL); + + G_OBJECT_CLASS (meta_window_x11_parent_class)->constructed (object); + } +@@ -2188,6 +2340,8 @@ meta_window_x11_class_init (MetaWindowX11Class *klass) + klass->thaw_commits = meta_window_x11_impl_thaw_commits; + klass->always_update_shape = meta_window_x11_impl_always_update_shape; + klass->process_property_notify = meta_window_x11_impl_process_property_notify; ++ klass->stage_to_protocol = meta_window_x11_real_stage_to_protocol; ++ klass->protocol_to_stage = meta_window_x11_real_protocol_to_stage; + + obj_props[PROP_ATTRIBUTES] = + g_param_spec_pointer ("attributes", NULL, NULL, +@@ -2459,7 +2613,10 @@ meta_window_x11_update_input_region (MetaWindow *window) + else + { + /* Window has a custom shape. */ +- region = region_create_from_x_rectangles (rects, n_rects); ++ g_autoptr (MtkRegion) protocol_region = NULL; ++ ++ protocol_region = region_create_from_x_rectangles (rects, n_rects); ++ region = region_protocol_to_stage (protocol_region, window_x11); + } + + meta_XFree (rects); +@@ -2543,7 +2700,10 @@ meta_window_x11_update_shape_region (MetaWindow *window) + + if (rects) + { +- region = region_create_from_x_rectangles (rects, n_rects); ++ g_autoptr (MtkRegion) protocol_region = NULL; ++ ++ protocol_region = region_create_from_x_rectangles (rects, n_rects); ++ region = region_protocol_to_stage (protocol_region, window_x11); + XFree (rects); + } + } +@@ -2821,6 +2981,7 @@ meta_window_x11_configure_request (MetaWindow *window, + { + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); ++ int new_x, new_y, new_width, new_height; + + /* Note that x, y is the corner of the window border, + * and width, height is the size of the window inside +@@ -2829,15 +2990,25 @@ meta_window_x11_configure_request (MetaWindow *window, + * requested border here. + */ + if (event->xconfigurerequest.value_mask & CWBorderWidth) +- priv->border_width = event->xconfigurerequest.border_width; ++ { ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->xconfigurerequest.border_width, 0, 0, 0, ++ &priv->border_width, NULL, NULL, NULL); ++ } + +- meta_window_move_resize_request(window, +- event->xconfigurerequest.value_mask, +- window->size_hints.win_gravity, +- event->xconfigurerequest.x, +- event->xconfigurerequest.y, +- event->xconfigurerequest.width, +- event->xconfigurerequest.height); ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->xconfigurerequest.x, event->xconfigurerequest.y, ++ event->xconfigurerequest.width, event->xconfigurerequest.height, ++ &new_x, &new_y, ++ &new_width, &new_height); ++ ++ meta_window_move_resize_request (window, ++ event->xconfigurerequest.value_mask, ++ window->size_hints.win_gravity, ++ new_x, ++ new_y, ++ new_width, ++ new_height); + + /* Handle stacking. We only handle raises/lowers, mostly because + * stack.c really can't deal with anything else. I guess we'll fix +@@ -3332,8 +3503,13 @@ meta_window_x11_client_message (MetaWindow *window, + guint32 timestamp; + MetaWindowDrag *window_drag; + +- x_root = event->xclient.data.l[0]; +- y_root = event->xclient.data.l[1]; ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->xclient.data.l[0], ++ event->xclient.data.l[1], ++ 0, 0, ++ &x_root, ++ &y_root, ++ NULL, NULL); + action = event->xclient.data.l[2]; + button = event->xclient.data.l[3]; + +@@ -3497,6 +3673,7 @@ meta_window_x11_client_message (MetaWindow *window, + { + MetaGravity gravity; + guint value_mask; ++ int x, y, width, height; + + gravity = (MetaGravity) (event->xclient.data.l[0] & 0xff); + value_mask = (event->xclient.data.l[0] & 0xf00) >> 8; +@@ -3505,13 +3682,20 @@ meta_window_x11_client_message (MetaWindow *window, + if (gravity == 0) + gravity = window->size_hints.win_gravity; + ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->xclient.data.l[1], ++ event->xclient.data.l[2], ++ event->xclient.data.l[3], ++ event->xclient.data.l[4], ++ &x, &y, &width, &height); ++ + meta_window_move_resize_request(window, + value_mask, + gravity, +- event->xclient.data.l[1], /* x */ +- event->xclient.data.l[2], /* y */ +- event->xclient.data.l[3], /* width */ +- event->xclient.data.l[4]); /* height */ ++ x, ++ y, ++ width, ++ height); + } + else if (event->xclient.message_type == + x11_display->atom__NET_ACTIVE_WINDOW && +@@ -3568,11 +3752,15 @@ meta_window_x11_client_message (MetaWindow *window, + else if (event->xclient.message_type == + x11_display->atom__GTK_SHOW_WINDOW_MENU) + { +- gulong x, y; ++ int x, y; + + /* l[0] is device_id, which we don't use */ +- x = event->xclient.data.l[1]; +- y = event->xclient.data.l[2]; ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->xclient.data.l[1], ++ event->xclient.data.l[2], ++ 0, 0, ++ &x, &y, ++ NULL, NULL); + + meta_window_show_menu (window, META_WINDOW_MENU_WM, x, y); + } +@@ -4094,10 +4282,11 @@ meta_window_x11_configure_notify (MetaWindow *window, + g_assert (window->override_redirect); + g_assert (window->frame == NULL); + +- window->rect.x = event->x; +- window->rect.y = event->y; +- window->rect.width = event->width; +- window->rect.height = event->height; ++ meta_window_x11_protocol_to_stage (window_x11, ++ event->x, event->y, ++ event->width, event->height, ++ &window->rect.x, &window->rect.y, ++ &window->rect.width, &window->rect.height); + + priv->client_rect = window->rect; + window->buffer_rect = window->rect; +diff --git a/src/x11/window-x11.h b/src/x11/window-x11.h +index 205eaaa63..fa3fbea6a 100644 +--- a/src/x11/window-x11.h ++++ b/src/x11/window-x11.h +@@ -45,6 +45,24 @@ struct _MetaWindowX11Class + gboolean (*always_update_shape) (MetaWindow *window); + void (*process_property_notify) (MetaWindow *window, + XPropertyEvent *event); ++ void (*stage_to_protocol) (MetaWindowX11 *window_x11, ++ int stage_x, ++ int stage_y, ++ int stage_width, ++ int stage_height, ++ int *protocol_x, ++ int *protocol_y, ++ int *protocol_width, ++ int *protocol_height); ++ void (*protocol_to_stage) (MetaWindowX11 *window_x11, ++ int protocol_x, ++ int protocol_y, ++ int protocol_width, ++ int protocol_height, ++ int *stage_x, ++ int *stage_y, ++ int *stage_width, ++ int *stage_height); + }; + + MetaWindow * meta_window_x11_new (MetaDisplay *display, +@@ -112,3 +130,23 @@ gboolean meta_window_x11_has_alpha_channel (MetaWindow *window); + + META_EXPORT + Window meta_window_x11_get_xwindow (MetaWindow *window); ++ ++void meta_window_x11_stage_to_protocol (MetaWindowX11 *window_x11, ++ int stage_x, ++ int stage_y, ++ int stage_width, ++ int stage_heigth, ++ int *protocol_x, ++ int *protocol_y, ++ int *protocol_width, ++ int *protocol_height); ++ ++void meta_window_x11_protocol_to_stage (MetaWindowX11 *window_x11, ++ int protocol_x, ++ int protocol_y, ++ int protocol_width, ++ int protocol_height, ++ int *stage_x, ++ int *stage_y, ++ int *stage_width, ++ int *stage_heigth); +-- +2.44.0 + diff --git a/staging/mutter/mutter-42.alpha-disable-tegra.patch b/staging/mutter/mutter-42.alpha-disable-tegra.patch new file mode 100644 index 0000000..3225c8f --- /dev/null +++ b/staging/mutter/mutter-42.alpha-disable-tegra.patch @@ -0,0 +1,25 @@ +From a5c67e0debaa89f7a73452560664cdc5c581ab95 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Tue, 9 Mar 2021 17:21:59 -0800 +Subject: [PATCH] Test: deny atomic KMS for "tegra" (RHBZ #1936991) + +Signed-off-by: Adam Williamson +--- + src/backends/native/meta-kms-impl-device-atomic.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/backends/native/meta-kms-impl-device-atomic.c b/src/backends/native/meta-kms-impl-device-atomic.c +index 35837f7429..ffff7b8e23 100644 +--- a/src/backends/native/meta-kms-impl-device-atomic.c ++++ b/src/backends/native/meta-kms-impl-device-atomic.c +@@ -1352,6 +1352,7 @@ is_atomic_allowed (const char *driver_name) + { + const char *atomic_driver_deny_list[] = { + "xlnx", ++ "tegra", + NULL, + }; + +-- +2.43.0 + diff --git a/staging/mutter/mutter.spec b/staging/mutter/mutter.spec new file mode 100644 index 0000000..46bd363 --- /dev/null +++ b/staging/mutter/mutter.spec @@ -0,0 +1,217 @@ +%global glib_version 2.75.1 +%global gtk3_version 3.19.8 +%global gtk4_version 4.0.0 +%global gsettings_desktop_schemas_version 40~alpha +%global json_glib_version 0.12.0 +%global libinput_version 1.19.0 +%global pipewire_version 0.3.33 +%global lcms2_version 2.6 +%global colord_version 1.4.5 +%global libei_version 1.0.0 +%global mutter_api_version 14 + +%global gnome_major_version 46 +%global gnome_version %{gnome_major_version}.1 +%global tarball_version %%(echo %{gnome_version} | tr '~' '.') +%global _default_patch_fuzz 2 + +Name: mutter +Version: %{gnome_version}.xscaling.{{{ git_dir_version }}} +Release: 2%{?dist} +Summary: Window and compositing manager based on Clutter + +License: GPLv2+ +URL: http://www.gnome.org +Source0: https://download.gnome.org/sources/%{name}/%{gnome_major_version}/%{name}-%{tarball_version}.tar.xz + +# Work-around for OpenJDK's compliance test +Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1936991 +Patch1: mutter-42.alpha-disable-tegra.patch + +# https://pagure.io/fedora-workstation/issue/79 +Patch2: 0001-place-Always-center-initial-setup-fedora-welcome.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2239128 +# https://gitlab.gnome.org/GNOME/mutter/-/issues/3068 +# not upstreamed because for upstream we'd really want to find a way +# to fix *both* problems +Patch3: 0001-Revert-x11-Use-input-region-from-frame-window-for-de.patch + +# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329 +# Modified to add the change from +# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329#note_1874837 +# which solves the problems reported with #3329 alone +Patch4: 0001-modified-3329.patch + +# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3567 +Patch5: 3567.patch + +BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0 +BuildRequires: pkgconfig(sm) +BuildRequires: pkgconfig(libwacom) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xdamage) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xfixes) +BuildRequires: pkgconfig(xi) +BuildRequires: pkgconfig(xrandr) +BuildRequires: pkgconfig(xrender) +BuildRequires: pkgconfig(xcursor) +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(x11-xcb) +BuildRequires: pkgconfig(xkbcommon) +BuildRequires: pkgconfig(xkbcommon-x11) +BuildRequires: pkgconfig(xkbfile) +BuildRequires: pkgconfig(xtst) +BuildRequires: mesa-libEGL-devel +BuildRequires: mesa-libGLES-devel +BuildRequires: mesa-libGL-devel +BuildRequires: mesa-libgbm-devel +BuildRequires: pkgconfig(glesv2) +BuildRequires: pkgconfig(graphene-gobject-1.0) +BuildRequires: pam-devel +BuildRequires: pkgconfig(libdisplay-info) +BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_version} +BuildRequires: pkgconfig(sysprof-capture-4) +BuildRequires: sysprof-devel +BuildRequires: pkgconfig(libsystemd) +BuildRequires: xorg-x11-server-Xorg +BuildRequires: xorg-x11-server-Xvfb +BuildRequires: pkgconfig(xkeyboard-config) +BuildRequires: desktop-file-utils +# Bootstrap requirements +BuildRequires: gettext-devel git-core +BuildRequires: pkgconfig(libcanberra) +BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} +BuildRequires: pkgconfig(gnome-settings-daemon) +BuildRequires: meson +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(gnome-desktop-4) +BuildRequires: pkgconfig(gudev-1.0) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libstartup-notification-1.0) +BuildRequires: pkgconfig(wayland-eglstream) +BuildRequires: pkgconfig(wayland-protocols) +BuildRequires: pkgconfig(wayland-server) +BuildRequires: pkgconfig(lcms2) >= %{lcms2_version} +BuildRequires: pkgconfig(colord) >= %{colord_version} +BuildRequires: pkgconfig(libei-1.0) >= %{libei_version} +BuildRequires: pkgconfig(libeis-1.0) >= %{libei_version} + +BuildRequires: pkgconfig(json-glib-1.0) >= %{json_glib_version} +BuildRequires: pkgconfig(libinput) >= %{libinput_version} +BuildRequires: pkgconfig(xwayland) + +BuildRequires: python3-dbusmock + +Requires: control-center-filesystem +Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} +Requires: gnome-settings-daemon +Requires: gtk4%{?_isa} >= %{gtk4_version} +Requires: json-glib%{?_isa} >= %{json_glib_version} +Requires: libinput%{?_isa} >= %{libinput_version} +Requires: pipewire%{_isa} >= %{pipewire_version} +Requires: startup-notification +Requires: dbus + +# Need common +Requires: %{name}-common = %{gnome_version}-%{release} + +Recommends: mesa-dri-drivers%{?_isa} + +Provides: firstboot(windowmanager) = mutter + +# Cogl and Clutter were forked at these versions, but have diverged +# significantly since then. +Provides: bundled(cogl) = 1.22.0 +Provides: bundled(clutter) = 1.26.0 + +Conflicts: mutter < 45~beta.1-2 + +# Make sure dnf updates gnome-shell together with this package; otherwise we +# might end up with broken gnome-shell installations due to mutter ABI changes. +Conflicts: gnome-shell < 45~rc + +%description +Mutter is a window and compositing manager that displays and manages +your desktop via OpenGL. Mutter combines a sophisticated display engine +using the Clutter toolkit with solid window-management logic inherited +from the Metacity window manager. + +While Mutter can be used stand-alone, it is primarily intended to be +used as the display core of a larger system such as GNOME Shell. For +this reason, Mutter is very extensible via plugins, which are used both +to add fancy visual effects and to rework the window management +behaviors to meet the needs of the environment. + +%package common +Summary: Common files used by %{name} and forks of %{name} +BuildArch: noarch +Conflicts: mutter < 45~beta.1-2 + +%description common +Common files used by Mutter and soft forks of Mutter + +%package devel +Summary: Development package for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +# for EGL/eglmesaext.h that's included from public cogl-egl-defines.h header +Requires: mesa-libEGL-devel + +%description devel +Header files and libraries for developing Mutter plugins. Also includes +utilities for testing Metacity/Mutter themes. + +%package tests +Summary: Tests for the %{name} package +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: gtk3%{?_isa} >= %{gtk3_version} + +%description tests +The %{name}-tests package contains tests that can be used to verify +the functionality of the installed %{name} package. + +%prep +%autosetup -S git -n %{name}-%{tarball_version} + +%build +%meson -Degl_device=true -Dwayland_eglstream=true +%meson_build + +%install +%meson_install + +%find_lang %{name} + +%files -f %{name}.lang +%license COPYING +%doc NEWS +%{_bindir}/mutter +%{_libdir}/lib*.so.* +%{_libdir}/mutter-%{mutter_api_version}/ +%{_libexecdir}/mutter-restart-helper +%{_libexecdir}/mutter-x11-frames +%{_mandir}/man1/mutter.1* + +%files common +%{_datadir}/GConf/gsettings/mutter-schemas.convert +%{_datadir}/glib-2.0/schemas/org.gnome.mutter.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.mutter.wayland.gschema.xml +%{_datadir}/gnome-control-center/keybindings/50-mutter-*.xml +%{_udevrulesdir}/61-mutter.rules + +%files devel +%{_includedir}/* +%{_libdir}/lib*.so +%{_libdir}/pkgconfig/* + +%files tests +%{_libexecdir}/installed-tests/mutter-%{mutter_api_version} +%{_datadir}/installed-tests/mutter-%{mutter_api_version} +%{_datadir}/mutter-%{mutter_api_version}/tests + +%changelog +%autochangelog diff --git a/wolfi/bluefin-base.yaml b/wolfi/bluefin-base.yaml new file mode 100644 index 0000000..a6d755f --- /dev/null +++ b/wolfi/bluefin-base.yaml @@ -0,0 +1,51 @@ +package: + name: bluefin-base + version: 0.0.0 + epoch: 0 + description: "Bluefin metapackage" + copyright: + - license: Apache-2.0 + dependencies: + runtime: + - atuin + - brew + - gawk + - eza + - fd + - fish + - fzf + - rclone + - ripgrep + - sed + - starship + - ublue-base + - zoxide + - zsh + +environment: + contents: + keyring: + - https://packages.wolfi.dev/os/wolfi-signing.rsa.pub + repositories: + - https://packages.wolfi.dev/os + packages: + - busybox + - curl + +pipeline: + - runs: | + # Symlink linuxbrew to homebrew + mkdir -p "${{targets.destdir}}"/home + ln -sf /home/linuxbrew "${{targets.destdir}}"/home/homebrew + + # Install bash-prexec + mkdir -p "${{targets.destdir}}"/usr/share + curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o "${{targets.destdir}}"/usr/share/bash-prexec + + # Copy system files + cp -r etc "${{targets.destdir}}" + cp -r usr "${{targets.destdir}}" + cp -r root "${{targets.destdir}}" + +update: + manual: true diff --git a/wolfi/bluefin-base/etc/bashrc b/wolfi/bluefin-base/etc/bashrc new file mode 100644 index 0000000..31e1248 --- /dev/null +++ b/wolfi/bluefin-base/etc/bashrc @@ -0,0 +1,66 @@ +# shellcheck shell=bash disable=SC1091 +# /etc/bashrc + +# System wide functions and aliases +# Environment stuff goes in /etc/profile + +# It's NOT a good idea to change this file unless you know what you +# are doing. It's much better to create a custom.sh shell script in +# /etc/profile.d/ to make custom changes to your environment, as this +# will prevent the need for merging in future updates. + +# Prevent doublesourcing +if [ -z "$PROFILESOURCED" ] && [ "$PS1" ]; then + PROFILESOURCED="Y" + . /etc/profile +fi + +if [ -z "$BASHRCSOURCED" ]; then + BASHRCSOURCED="Y" + + # are we an interactive shell? + if [ "$PS1" ]; then + if [ -z "$PROMPT_COMMAND" ]; then + case $TERM in + xterm*) + PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + ;; + screen*) + PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + ;; + *) + [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default + ;; + esac + fi + # Turn on parallel history + shopt -s histappend + # Turn on checkwinsize + shopt -s checkwinsize + [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ " + # You might want to have e.g. tty in prompt (e.g. more virtual machines) + # and console windows + # If you want to do so, just add e.g. + # if [ "$PS1" ]; then + # PS1="[\u@\h:\l \W]\\$ " + # fi + # to your custom modification shell script in /etc/profile.d/ directory + fi + STARSHIP_CONFIG=/etc/starship.toml + export STARSHIP_CONFIG + eval "$(starship init bash)" + + # Enable fzf keybindings + [ -r /run/host/usr/share/fzf/shell/key-bindings.bash ] && \ + . /run/host/usr/share/fzf/shell/key-bindings.bash + + # Enable atuin and bash-prexec + source /usr/share/bash-prexec + eval "$(atuin init bash)" + + # Enable zoxide + eval "$(zoxide init bash --cmd cd)" +fi + +# vim:ts=4:sw=4 + diff --git a/wolfi/bluefin-base/etc/profile.d/00-bluefin-cli-brew-firstrun.sh b/wolfi/bluefin-base/etc/profile.d/00-bluefin-cli-brew-firstrun.sh new file mode 100644 index 0000000..2f4825d --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/00-bluefin-cli-brew-firstrun.sh @@ -0,0 +1,49 @@ +# shellcheck shell=sh disable=SC1091 +if test "$(id -u)" -gt "0"; then + blue=$(printf '\033[38;5;32m') + bold=$(printf '\033[1m') + normal=$(printf '\033[0m') + if test ! -f /etc/linuxbrew.firstrun; then + printf "\nBluefin-CLI First Run Setup\n\n" + printf "Setting up sudo for %s%s%s%s...\t\t\t " "$bold" "$blue" "$USER" "$normal" + echo "#$(id -u) ALL = (root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers > /dev/null + printf "%s[ OK ]%s\n" "${blue}" "${normal}" + fi + + if test ! -d /home/linuxbrew/.linuxbrew; then + name="$(hostname -s)" + linuxbrew_home="${XDG_DATA_HOME:-$HOME/.local/share}"/bluefin-cli/"${name}" + printf "Setting up Linuxbrew...\t\t\t\t " + if test ! -d "${linuxbrew_home}"; then + mkdir -p "${linuxbrew_home}" + if test -d "${XDG_DATA_HOME:-$HOME/.local/share}"/bluefin-cli/.linuxbrew; then + mv "${XDG_DATA_HOME:-$HOME/.local/share}"/bluefin-cli/.linuxbrew "${linuxbrew_home}"/.linuxbrew + fi + fi + if test ! -d /home/linuxbrew; then + sudo mkdir -p /home/linuxbrew + fi + sudo mount --bind "${linuxbrew_home}" /home/linuxbrew + sudo cp -R /home/homebrew/.linuxbrew /home/linuxbrew/ + sudo chown -R "$(id -u)" /home/linuxbrew + unset linuxbrew_home + printf "%s[ OK ]%s\n" "${blue}" "${normal}" + fi + + if test ! -d /usr/local/share/bash-completion/completions; then + printf "Setting up Tab-Completions...\t\t\t " + sudo mkdir -p /usr/local/share/bash-completion + sudo mount --bind /run/host/usr/share/bash-completion /usr/local/share/bash-completion + if test -x /run/host/usr/bin/ujust; then + sudo ln -fs /usr/bin/distrobox-host-exec /usr/local/bin/ujust + fi + printf "%s[ OK ]%s\n" "${blue}" "${normal}" + fi + + if test ! -f /etc/linuxbrew.firstrun; then + # Remove local repository added at buildtime + sudo sed -zi "s|\./packages\n||" /etc/apk/repositories + sudo touch /etc/linuxbrew.firstrun + printf "\nBluefin-CLI first run complete!\n\n" + fi +fi diff --git a/wolfi/bluefin-base/etc/profile.d/bash_completion.sh b/wolfi/bluefin-base/etc/profile.d/bash_completion.sh new file mode 100644 index 0000000..910b484 --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/bash_completion.sh @@ -0,0 +1,42 @@ +# shellcheck shell=sh disable=SC1090,SC1091,SC2039,SC2166,SC2268 +# Check for interactive bash and that we haven't already been sourced. +if [ "x${BASH_VERSION-}" != x -a "x${PS1-}" != x -a "x${BASH_COMPLETION_VERSINFO-}" = x ]; then + + # Check for recent enough version of bash. + if [ "${BASH_VERSINFO[0]}" -gt 4 ] || + [ "${BASH_VERSINFO[0]}" -eq 4 -a "${BASH_VERSINFO[1]}" -ge 2 ]; then + [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && + . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" + if shopt -q progcomp && [ -d /usr/share/bash-completion/completions ]; then + for rc in /usr/share/bash-completion/completions/*; do + if test -r "$rc"; then + . "$rc" + fi + done + unset rc + fi + if shopt -q progcomp && [ -r /usr/local/share/bash-completion/bash_completion ]; then + # Source completion code. + . /usr/local/share/bash-completion/bash_completion + fi + if ! test -L /home/linuxbrew/.linuxbrew/etc/bash_completion.d/brew && test "$(id -u)" -gt 0; then + /home/linuxbrew/.linuxbrew/bin/brew completions link > /dev/null + fi + if test -d /home/linuxbrew/.linuxbrew/etc/bash_completion.d; then + for rc in /home/linuxbrew/.linuxbrew/etc/bash_completion.d/*; do + if test -r "$rc"; then + . "$rc" + fi + done + unset rc + fi + if test -d /run/host/etc/bash_completion.d; then + for rc in /run/host/etc/bash_completion.d/*; do + if test -r "$rc"; then + . "$rc" + fi + done + unset rc + fi + fi +fi diff --git a/wolfi/bluefin-base/etc/profile.d/command-not-found-host-exec.sh b/wolfi/bluefin-base/etc/profile.d/command-not-found-host-exec.sh new file mode 100644 index 0000000..0961c55 --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/command-not-found-host-exec.sh @@ -0,0 +1,14 @@ +# shellcheck shell=sh +command_not_found_handle() { +# don't run if not in a container + if [ ! -e /run/.containerenv ] && [ ! -e /.dockerenv ]; then + exit 127 + fi + + distrobox-host-exec "${@}" +} +if [ -n "${ZSH_VERSION-}" ]; then + command_not_found_handler() { + command_not_found_handle "$@" + } +fi diff --git a/wolfi/bluefin-base/etc/profile.d/homebrew-env.sh b/wolfi/bluefin-base/etc/profile.d/homebrew-env.sh new file mode 100644 index 0000000..8fe8879 --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/homebrew-env.sh @@ -0,0 +1,10 @@ +# shellcheck shell=sh + +PATH="$PATH:/home/linuxbrew/.linuxbrew/sbin" +export PATH +HOMEBREW_REPOSITORY="/home/linuxbrew/.linuxbrew" +export HOMEBREW_REPOSITORY +HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" +export HOMEBREW_PREFIX +HOMEBREW_CELLAR="/home/linuxbrew/.linuxbrew/Cellar" +export HOMEBREW_CELLAR \ No newline at end of file diff --git a/wolfi/bluefin-base/etc/profile.d/modern-unix.sh b/wolfi/bluefin-base/etc/profile.d/modern-unix.sh new file mode 100644 index 0000000..1b38fd0 --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/modern-unix.sh @@ -0,0 +1,20 @@ +# shellcheck shell=sh +# Eza for ls +alias ll='eza -l --icons=auto --group-directories-first' 2>/dev/null +alias l.='eza -d .*' 2>/dev/null +alias ls='eza' 2>/dev/null +alias l1='eza -1' + +# Ripgrep for grep +alias grep='rg' 2>/dev/null +alias egrep='rg' 2>/dev/null +alias fgrep='rg -F' 2>/dev/null +alias xzgrep='rg -z' 2>/dev/null +alias xzegrep='rg -z' 2>/dev/null +alias xzfgrep='rg -z -F' 2>/dev/null + +# Zoxide is handling cd +alias cd='cd' 2>/dev/null + +# Fd for find +alias find='fd' 2>/dev/null \ No newline at end of file diff --git a/wolfi/bluefin-base/etc/profile.d/zz-profile_sourced.sh b/wolfi/bluefin-base/etc/profile.d/zz-profile_sourced.sh new file mode 100644 index 0000000..5140d0e --- /dev/null +++ b/wolfi/bluefin-base/etc/profile.d/zz-profile_sourced.sh @@ -0,0 +1,4 @@ +# shellcheck shell=sh +if [ -z "$PROFILESOURCED" ] && [ "$PS1" ]; then + PROFILESOURCED="Y" +fi diff --git a/wolfi/bluefin-base/etc/starship.toml b/wolfi/bluefin-base/etc/starship.toml new file mode 100644 index 0000000..6817c9c --- /dev/null +++ b/wolfi/bluefin-base/etc/starship.toml @@ -0,0 +1,49 @@ +[character] +success_symbol = '[\$](bold blue dimmed)' +error_symbol = '[\$](bold red)' + +[container] +symbol='📦' +format='[$symbol](bold blue dimmed) ' + +[directory] +style = 'bold cyan dimmed' + +[hostname] +ssh_only = false +style = 'blue bold dimmed' +format = '[$ssh_symbol$hostname]($style) ' + +[username] +style_user = 'blue bold dimmed' +style_root = 'red bold' +format = '[$user]($style)@' +show_always = true + +[palettes.catppuccin_mocha] +rosewater = "#f5e0dc" +flamingo = "#f2cdcd" +pink = "#f5c2e7" +mauve = "#cba6f7" +red = "#f38ba8" +maroon = "#eba0ac" +peach = "#fab387" +yellow = "#f9e2af" +green = "#a6e3a1" +teal = "#94e2d5" +sky = "#89dceb" +sapphire = "#74c7ec" +blue = "#89b4fa" +lavender = "#b4befe" +text = "#cdd6f4" +subtext1 = "#bac2de" +subtext0 = "#a6adc8" +overlay2 = "#9399b2" +overlay1 = "#7f849c" +overlay0 = "#6c7086" +surface2 = "#585b70" +surface1 = "#45475a" +surface0 = "#313244" +base = "#1e1e2e" +mantle = "#181825" +crust = "#11111b" diff --git a/wolfi/bluefin-base/root/.bash_profile b/wolfi/bluefin-base/root/.bash_profile new file mode 100644 index 0000000..a459ace --- /dev/null +++ b/wolfi/bluefin-base/root/.bash_profile @@ -0,0 +1,3 @@ +if [ -f ~/.bashrc ]; then + . ~/.bashrc +fi \ No newline at end of file diff --git a/wolfi/bluefin-base/root/.bashrc b/wolfi/bluefin-base/root/.bashrc new file mode 100644 index 0000000..2782dcd --- /dev/null +++ b/wolfi/bluefin-base/root/.bashrc @@ -0,0 +1,3 @@ +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi \ No newline at end of file diff --git a/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/00-bluefin-cli-brew-firstrun.fish b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/00-bluefin-cli-brew-firstrun.fish new file mode 100644 index 0000000..0e4fcb4 --- /dev/null +++ b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/00-bluefin-cli-brew-firstrun.fish @@ -0,0 +1,47 @@ +if test "$(id -u)" -gt "0" + set blue (set_color blue) + set bold (set_color -o blue) + set normal (set_color normal) + if test ! -f /etc/linuxbrew.firstrun + printf "\nBluefin-CLI First Run Setup\n\n" + printf "Setting up sudo for %s%s%s...\t\t\t " "$bold" "$USER" "$normal" + echo "#$UID ALL = (root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers > /dev/null + printf "%s[ OK ]%s\n" "$blue" "$normal" + end + + if test ! -d /home/linuxbrew/.linuxbrew + set name $(hostname -s) + set xdg_data_home "$XDG_DATA_HOME" + test -z "$xdg_data_home"; and set xdg_data_home "$HOME/.local/share/" + set linuxbrew_home "$xdg_data_home/bluefin-cli/$name" + printf "Setting up Linuxbrew...\t\t\t\t " + if test ! -d "$linuxbrew_home" + mkdir -p "$linuxbrew_home" + end + if test ! -d /home/linuxbrew + sudo mkdir -p /home/linuxbrew + end + sudo mount --bind "$linuxbrew_home" /home/linuxbrew + sudo cp -R /home/homebrew/.linuxbrew /home/linuxbrew/ + sudo chown -R "$UID" /home/linuxbrew + set -e linuxbrew_home + printf "%s[ OK ]%s\n" "$blue" "$normal" + end + + if test ! -d /usr/local/share/bash-completion/completions + printf "Setting up Tab-Completions...\t\t\t " + sudo mkdir -p /usr/local/share/bash-completion + sudo mount --bind /run/host/usr/share/bash-completion /usr/local/share/bash-completion + if test -x /run/host/usr/bin/ujust + sudo ln -fs /usr/bin/distrobox-host-exec /usr/local/bin/ujust + end + printf "%s[ OK ]%s\n" "$blue" "$normal" + end + + if test ! -f /etc/linuxbrew.firstrun + # Remove local repository added at buildtime + sudo sed -zi "s|\./packages\n||" /etc/apk/repositories + sudo touch /etc/linuxbrew.firstrun + printf "\nBluefin-CLI first run complete!\n\n" + end +end diff --git a/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/bling.fish b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/bling.fish new file mode 100644 index 0000000..34b6438 --- /dev/null +++ b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/bling.fish @@ -0,0 +1,27 @@ +if status is-interactive + set -gx STARSHIP_CONFIG /etc/starship.toml + eval "$(starship init fish)" + eval "$(atuin init fish)" + eval "$(zoxide init fish --cmd cd)" + set -gx HOST (hostname -s) +end + +# Eza for ls +alias ll='eza -l --icons=auto --group-directories-first' 2>/dev/null +alias l.='eza -d .*' 2>/dev/null +alias ls='eza' 2>/dev/null +alias l1='eza -1' + +# Ripgrep for grep +alias grep='rg' 2>/dev/null +alias egrep='rg' 2>/dev/null +alias fgrep='rg -F' 2>/dev/null +alias xzgrep='rg -z' 2>/dev/null +alias xzegrep='rg -z' 2>/dev/null +alias xzfgrep='rg -z -F' 2>/dev/null + +# Zoxide is handling cd +alias cd='cd' 2>/dev/null + +# Fd for find +alias find='fd' 2>/dev/null \ No newline at end of file diff --git a/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/brew.fish b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/brew.fish new file mode 100644 index 0000000..e702181 --- /dev/null +++ b/wolfi/bluefin-base/usr/share/fish/vendor_conf.d/brew.fish @@ -0,0 +1,15 @@ +if test "$(id -u)" -gt "0" + set -gx PATH $PATH /home/linuxbrew/.linuxbrew/bin + set -gx HOMEBREW_PREFIX /home/linuxbrew/.linuxbrew + set -gx HOMEBREW_CELLAR /home/linuxbrew/.linuxbrew/Cellar + set -gx HOMEBREW_REPOSITORY /home/linuxbrew/.linuxbrew + if ! test -L (brew --prefix)"/share/fish/completions" + brew completions link + end + if test -d (brew --prefix)"/share/fish/completions" + set -p fish_complete_path (brew --prefix)/share/fish/completions + end + if test -d (brew --prefix)"/share/fish/vendor_completions.d" + set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d + end +end \ No newline at end of file diff --git a/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_command_not_found.fish b/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_command_not_found.fish new file mode 100644 index 0000000..d7243f0 --- /dev/null +++ b/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_command_not_found.fish @@ -0,0 +1,8 @@ +function fish_command_not_found + # "In a container" check + if test -e /run/.containerenv -o -e /.dockerenv + distrobox-host-exec $argv + else + __fish_default_command_not_found_handler $argv + end +end \ No newline at end of file diff --git a/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_title.fish b/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_title.fish new file mode 100644 index 0000000..f1e820a --- /dev/null +++ b/wolfi/bluefin-base/usr/share/fish/vendor_functions.d/fish_title.fish @@ -0,0 +1,4 @@ +function fish_title + set -q argv[1]; or set argv fish + echo "$USER@$HOST" (fish_prompt_pwd_dir_length=1 prompt_pwd): $argv +end \ No newline at end of file diff --git a/wolfi/ublue-base.yaml b/wolfi/ublue-base.yaml new file mode 100644 index 0000000..9e2e71e --- /dev/null +++ b/wolfi/ublue-base.yaml @@ -0,0 +1,106 @@ +package: + name: ublue-base + version: 0.0.0 + epoch: 0 + description: "Universal Blue metapackage" + copyright: + - license: Apache-2.0 + dependencies: + runtime: + - apk-tools + - bash + - busybox + - bzip2 + - coreutils + - curl + - diffutils + - findmnt + - findutils + - git + - gnupg + - gpg + - iproute2 + - iputils + - keyutils + - libcap + - libsm + - libx11 + - libxau + - libxcb + - libxdmcp + - libxext + - libice + - libxmu + - libxt + - linux-pam + - man-db + - mount + - ncurses + - ncurses-terminfo + - net-tools + - openssh-client + - pigz + - posix-libc-utils + - procps + - rsync + - shadow + - sudo + - tcpdump + - tree + - tzdata + - umount + - unzip + - util-linux + - util-linux-misc + - vulkan-loader + - wget + - xauth + - xz + - zip + +environment: + contents: + keyring: + - https://packages.wolfi.dev/os/wolfi-signing.rsa.pub + repositories: + - https://packages.wolfi.dev/os + packages: + - busybox + - git + - wget + +pipeline: + - runs: | + mkdir -p "${{targets.contextdir}}"/usr/bin + mkdir -p "${{targets.contextdir}}"/usr/local/bin + + # Setup fake pinentry + install -Dm755 pinentry "${{targets.contextdir}}"/usr/bin/pinentry + + # Get Distrobox-host-exec and host-spawn + git clone https://github.com/89luca89/distrobox.git --single-branch distrobox + install -Dm755 distrobox/distrobox-host-exec "${{targets.contextdir}}"/usr/bin/distrobox-host-exec + install -Dm755 distrobox/distrobox-export "${{targets.contextdir}}"/usr/bin/distrobox-export + install -Dm755 distrobox/distrobox-init "${{targets.contextdir}}"/usr/bin/entrypoint + wget https://github.com/1player/host-spawn/releases/download/$(cat distrobox/distrobox-host-exec | grep host_spawn_version= | cut -d "\"" -f 2)/host-spawn-$(uname -m) -O "${{ targets.contextdir }}"/usr/bin/host-spawn + chmod +x "${{ targets.contextdir }}"/usr/bin/host-spawn + + # Make some symlinks + ln -sf /bin/sh "${{targets.contextdir}}"/usr/bin/sh + + # Symlink host tools + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/docker + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/podman + + # Symlink host package managers + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/apt + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/apt-get + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/dnf + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/flatpak + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/pacman + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/rpm-ostree + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/snap + ln -sf /usr/bin/distrobox-host-exec "${{targets.contextdir}}"/usr/local/bin/zypper + +update: + manual: true diff --git a/wolfi/ublue-base/pinentry b/wolfi/ublue-base/pinentry new file mode 100755 index 0000000..039e4d0 --- /dev/null +++ b/wolfi/ublue-base/pinentry @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0