diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 5a14aca9e..4ecc7ec8c 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1748,6 +1748,8 @@ const AppIconMenu = new Lang.Class({ this.actor.add_style_class_name('app-well-menu'); + this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' }); + // Chain our visibility and lifecycle to that of the source source.actor.connect('notify::mapped', Lang.bind(this, function () { if (!source.actor.mapped) @@ -1807,22 +1809,27 @@ const AppIconMenu = new Lang.Class({ this.emit('activate-window', null); })); } - this._appendSeparator(); - let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id()); + let canFavorite = this._settings.is_writable('favorite-apps'); - if (isFavorite) { - let item = this._appendMenuItem(_("Remove from Favorites")); - item.connect('activate', Lang.bind(this, function() { - let favs = AppFavorites.getAppFavorites(); - favs.removeFavorite(this._source.app.get_id()); - })); - } else { - let item = this._appendMenuItem(_("Add to Favorites")); - item.connect('activate', Lang.bind(this, function() { - let favs = AppFavorites.getAppFavorites(); - favs.addFavorite(this._source.app.get_id()); - })); + if (canFavorite) { + this._appendSeparator(); + + let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id()); + + if (isFavorite) { + let item = this._appendMenuItem(_("Remove from Favorites")); + item.connect('activate', Lang.bind(this, function() { + let favs = AppFavorites.getAppFavorites(); + favs.removeFavorite(this._source.app.get_id()); + })); + } else { + let item = this._appendMenuItem(_("Add to Favorites")); + item.connect('activate', Lang.bind(this, function() { + let favs = AppFavorites.getAppFavorites(); + favs.addFavorite(this._source.app.get_id()); + })); + } } if (Shell.AppSystem.get_default().lookup_app('org.gnome.Software.desktop')) { diff --git a/js/ui/dash.js b/js/ui/dash.js index 99635cd44..acf1eb40b 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -1,6 +1,7 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; +const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Signals = imports.signals; const Lang = imports.lang; @@ -269,6 +270,9 @@ const ShowAppsIcon = new Lang.Class({ if (app == null) return false; + if (!this._settings.is_writable('favorite-apps')) + return false; + let id = app.get_id(); let isFavorite = AppFavorites.getAppFavorites().isFavorite(id); return isFavorite; @@ -424,6 +428,8 @@ const Dash = new Lang.Class({ this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay)); + this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' }); + this._appSystem = Shell.AppSystem.get_default(); this._appSystem.connect('installed-changed', Lang.bind(this, function() { @@ -850,6 +856,9 @@ const Dash = new Lang.Class({ if (app == null || app.is_window_backed()) return DND.DragMotionResult.NO_DROP; + if (!this._settings.is_writable('favorite-apps')) + return DND.DragMotionResult.NO_DROP; + let favorites = AppFavorites.getAppFavorites().getFavorites(); let numFavorites = favorites.length; @@ -926,6 +935,9 @@ const Dash = new Lang.Class({ return false; } + if (!this._settings.is_writable('favorite-apps')) + return false; + let id = app.get_id(); let favorites = AppFavorites.getAppFavorites().getFavoriteMap();