[gnome-shell] dash: Improve feedback when favorite-apps key is locked



commit e69cc20fc7dc10b9c04c3a0224c01c8cd23671cf
Author: David King <amigadave amigadave com>
Date:   Thu Dec 11 15:22:19 2014 +0000

    dash: Improve feedback when favorite-apps key is locked
    
    In a lockdown scenario, where the favorite-apps GSettings key is not
    writable, hide the menu items for adding and removing favorites from the
    dash menu. Additionally, reject drops to the dash for DND.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=741325

 js/ui/appDisplay.js |   35 +++++++++++++++++++++--------------
 js/ui/dash.js       |   12 ++++++++++++
 2 files changed, 33 insertions(+), 14 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 5a14aca..4ecc7ec 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 99635cd..acf1eb4 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();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]