From 46bdde50018635964c1acf33e84f3c7a16396420 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Dec 13 2022 06:12:16 +0000 Subject: import gnome-shell-extensions-3.32.1-30.el8 --- diff --git a/SOURCES/0001-fileItem-Just-destroy-menus.patch b/SOURCES/0001-fileItem-Just-destroy-menus.patch new file mode 100644 index 0000000..012428b --- /dev/null +++ b/SOURCES/0001-fileItem-Just-destroy-menus.patch @@ -0,0 +1,31 @@ +From 506c6d69eaa5e056d9580a28e9c200586b0e1fb0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 2 Dec 2022 15:20:40 +0100 +Subject: [PATCH] fileItem: Just destroy menus + +The menu manager is smart enough to remove the menu automatically, +and the actor will be destroyed alongside the menu. Not doing those +actions explicitly allows the automatic handling to proceed without +confusing the grab state. +--- + extensions/desktop-icons/fileItem.js | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js +index 44a93352..f2f03440 100644 +--- a/extensions/desktop-icons/fileItem.js ++++ b/extensions/desktop-icons/fileItem.js +@@ -575,10 +575,6 @@ var FileItem = class { + + _removeMenu() { + if (this._menu != null) { +- if (this._menuManager != null) +- this._menuManager.removeMenu(this._menu); +- +- Main.layoutManager.uiGroup.remove_child(this._menu.actor); + this._menu.destroy(); + this._menu = null; + } +-- +2.38.1 + diff --git a/SOURCES/0001-fileItem-Support-.desktop-files-of-type-Link.patch b/SOURCES/0001-fileItem-Support-.desktop-files-of-type-Link.patch new file mode 100644 index 0000000..f4bf2b4 --- /dev/null +++ b/SOURCES/0001-fileItem-Support-.desktop-files-of-type-Link.patch @@ -0,0 +1,147 @@ +From be4ab59a3f2bb9829dde390db3dd8868a08840eb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 2 Dec 2022 19:28:54 +0100 +Subject: [PATCH] fileItem: Support .desktop files of type Link + +Gio only has direct support for .desktop files of type Application. + +However in the context of desktop icons (and file managers), shortcuts +of URLs are useful as well, so add explicit support for .desktop files +of type Link. +--- + extensions/desktop-icons/fileItem.js | 71 +++++++++++++++++++++++----- + 1 file changed, 60 insertions(+), 11 deletions(-) + +diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js +index f2f03440..1c9a1e55 100644 +--- a/extensions/desktop-icons/fileItem.js ++++ b/extensions/desktop-icons/fileItem.js +@@ -239,12 +239,32 @@ var FileItem = class { + log(`desktop-icons: File ${this._displayName} is writable by others - will not allow launching`); + + if (this._isDesktopFile) { +- this._desktopFile = Gio.DesktopAppInfo.new_from_filename(this._file.get_path()); +- if (!this._desktopFile) { +- log(`Couldn’t parse ${this._displayName} as a desktop file, will treat it as a regular file.`); ++ try { ++ const keyFile = new GLib.KeyFile(); ++ keyFile.load_from_file(this._file.get_path(), GLib.KeyFileFlags.NONE); ++ ++ const type = keyFile.get_string( ++ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_TYPE); ++ switch (type) { ++ case GLib.KEY_FILE_DESKTOP_TYPE_APPLICATION: ++ this._desktopFile = Gio.DesktopAppInfo.new_from_keyfile(keyFile); ++ if (!this._desktopFile) { ++ log(`Couldn’t parse ${this._displayName} as a desktop file, will treat it as a regular file.`); ++ this._isValidDesktopFile = false; ++ } else { ++ this._isValidDesktopFile = true; ++ } ++ break; ++ case GLib.KEY_FILE_DESKTOP_TYPE_LINK: ++ const url = keyFile.get_string( ++ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_URL); ++ if (url) ++ this._linkFile = keyFile; ++ default: // fall-through ++ this._isValidDesktopFile = false; ++ } ++ } catch (e) { + this._isValidDesktopFile = false; +- } else { +- this._isValidDesktopFile = true; + } + } else { + this._isValidDesktopFile = false; +@@ -356,8 +376,17 @@ var FileItem = class { + if (this._isBrokenSymlink) { + this._icon.child = this._createEmblemedStIcon(null, 'text-x-generic'); + } else { +- if (this.trustedDesktopFile && this._desktopFile.has_key('Icon')) +- this._icon.child = this._createEmblemedStIcon(null, this._desktopFile.get_string('Icon')); ++ let iconName = null; ++ ++ try { ++ if (this.trustedDesktopFile) ++ iconName = this._desktopFile.get_string('Icon'); ++ else if (this._linkFile) ++ iconName = this._linkFile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_ICON); ++ } catch (e) {} ++ ++ if (iconName) ++ this._icon.child = this._createEmblemedStIcon(null, iconName); + else + this._icon.child = this._createEmblemedStIcon(this._fileInfo.get_icon(), null); + } +@@ -411,7 +440,7 @@ var FileItem = class { + itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-unreadable'))); + else + itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link'))); +- } else if (this.trustedDesktopFile) { ++ } else if (this.trustedDesktopFile || this._linkFile) { + itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link'))); + } + +@@ -440,6 +469,12 @@ var FileItem = class { + return; + } + ++ if (this._linkFile) { ++ this._openUri(this._linkFile.get_string( ++ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_URL)); ++ return; ++ } ++ + if (this._attributeCanExecute && + !this._isDirectory && + !this._isValidDesktopFile && +@@ -449,13 +484,17 @@ var FileItem = class { + return; + } + +- Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(), ++ this._openUri(this.file.get_uri()); ++ } ++ ++ _openUri(uri) { ++ Gio.AppInfo.launch_default_for_uri_async(uri, + null, null, + (source, result) => { + try { + Gio.AppInfo.launch_default_for_uri_finish(result); + } catch (e) { +- log('Error opening file ' + this.file.get_uri() + ': ' + e.message); ++ log('Error opening file ' + uri + ': ' + e.message); + } + } + ); +@@ -555,7 +594,9 @@ var FileItem = class { + } + + canRename() { +- return !this.trustedDesktopFile && this._fileExtra == Prefs.FileType.NONE; ++ return !this.trustedDesktopFile && ++ !this._linkFile && ++ this._fileExtra == Prefs.FileType.NONE; + } + + _doOpenWith() { +@@ -819,6 +860,14 @@ var FileItem = class { + if (this.trustedDesktopFile) + return this._desktopFile.get_name(); + ++ if (this._linkFile) { ++ try { ++ const name = this._linkFile.get_string( ++ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_NAME); ++ return name; ++ } catch (e) {} ++ } ++ + return this._displayName || null; + } + +-- +2.38.1 + diff --git a/SPECS/gnome-shell-extensions.spec b/SPECS/gnome-shell-extensions.spec index 7e70373..4199258 100644 --- a/SPECS/gnome-shell-extensions.spec +++ b/SPECS/gnome-shell-extensions.spec @@ -6,7 +6,7 @@ Name: gnome-shell-extensions Version: 3.32.1 -Release: 29%{?dist} +Release: 30%{?dist} Summary: Modify and extend GNOME Shell functionality and behavior Group: User Interface/Desktops @@ -51,6 +51,8 @@ Patch0022: 0001-gesture-inhibitor-Put-a-foot-down-with-self-enabling.pat Patch0023: 0001-desktop-icons-Use-a-single-unique-name-to-access-nau.patch Patch0024: window-list-touch.patch Patch0025: 0001-auto-move-windows-Don-t-move-windows-already-on-all-.patch +Patch0026: 0001-fileItem-Just-destroy-menus.patch +Patch0027: 0001-fileItem-Support-.desktop-files-of-type-Link.patch %description GNOME Shell Extensions is a collection of extensions providing additional and @@ -549,6 +551,12 @@ cp $RPM_SOURCE_DIR/gnome-classic.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions %changelog +* Fri Dec 09 2022 Florian Müllner - 3.32.1-30 +- Fix stuck grab if disabled with open context menu + Resolves: #2149670 +- Support .desktop files of type Link + Resolves: #2143825 + * Mon Aug 29 2022 Jonas Ådahl - 3.32.1-29 - Avoid invalid window management in auto-move-windows Resolves: #2089311