screenshot: Use GLib.BookmarkFile to save recent screenshots

Avoid the GTK dependency, and use the common GLib API to store
screenshots in recent files. While at it, give it a better
exec hint than the implicit "gnome-shell %u" GTK added for us,
nobody seems to pay attention to that, but if they ever did
it's better to provide sensible information.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2656>
This commit is contained in:
Carlos Garnacho 2023-02-22 11:45:26 +01:00 committed by Marge Bot
parent 1f7e03ab5e
commit b89d90eb80

View File

@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported ScreenshotService, ScreenshotUI, showScreenshotUI, captureScreenshot */
const { Clutter, Cogl, Gio, GObject, GLib, Graphene, Gtk, Meta, Shell, St } = imports.gi;
const {Clutter, Cogl, Gio, GObject, GLib, Graphene, Meta, Shell, St} = imports.gi;
const GrabHelper = imports.ui.grabHelper;
const Layout = imports.ui.layout;
@ -2060,6 +2060,33 @@ function _storeScreenshot(bytes, pixbuf) {
yield `-${i}`;
}
/**
* Adds a record of a screenshot file in the recently used files list.
*
* @param {Gio.File} screenshotFile - The screenshot file.
*/
function saveRecentFile(screenshotFile) {
const recentFile =
GLib.build_filenamev([GLib.get_user_data_dir(), 'recently-used.xbel']);
const uri = screenshotFile.get_uri();
const bookmarks = new GLib.BookmarksFile();
try {
bookmarks.load_from_file(recentFile);
} catch (e) {
if (!e.matches(GLib.BookmarkFileError.FILE_NOT_FOUND)) {
log(`Could not open recent file ${uri}: ${e.message}`);
return;
}
}
try {
bookmarks.add_application(uri, GLib.get_prgname(), 'gio open %u');
bookmarks.to_file(recentFile);
} catch (e) {
log(`Could not save recent file ${uri}: ${e.message}`);
}
}
const lockdownSettings =
new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' });
const disableSaveToDisk =
@ -2102,7 +2129,7 @@ function _storeScreenshot(bytes, pixbuf) {
}
// Add it to recent files.
Gtk.RecentManager.get_default().add_item(file.get_uri());
saveRecentFile(file);
}
// Create a St.ImageContent icon for the notification. We want