[gnome-shell] dateMenu: Hide "Open Calendar" item if calendar unavailable



commit 4342155748249e0090850c084223f226de619777
Author: Florian MÃllner <fmuellner gnome org>
Date:   Fri Oct 12 20:59:31 2012 +0200

    dateMenu: Hide "Open Calendar" item if calendar unavailable
    
    The configured calendar application might not actually be installed.
    Instead of failing with an error message, hide the menu item altogether
    in this case.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=686050

 js/ui/dateMenu.js |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js
index 7f01a76..7b762b3 100644
--- a/js/ui/dateMenu.js
+++ b/js/ui/dateMenu.js
@@ -113,6 +113,11 @@ const DateMenuButton = new Lang.Class({
         this._openCalendarItem.actor.can_focus = false;
         vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
 
+        this._calendarSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.office.calendar' });
+        this._calendarSettings.connect('changed::exec',
+                                       Lang.bind(this, this._calendarSettingsChanged));
+        this._calendarSettingsChanged();
+
         // Whenever the menu is opened, select today
         this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) {
             if (isOpen) {
@@ -146,6 +151,12 @@ const DateMenuButton = new Lang.Class({
         this._sessionUpdated();
     },
 
+    _calendarSettingsChanged: function() {
+        let exec = this._calendarSettings.get_string('exec');
+        let fullExec = GLib.find_program_in_path(exec);
+        this._openCalendarItem.actor.visible = fullExec != null;
+    },
+
     _setEventsVisibility: function(visible) {
         this._openCalendarItem.actor.visible = visible;
         this._separator.visible = visible;
@@ -194,14 +205,13 @@ const DateMenuButton = new Lang.Class({
 
     _onOpenCalendarActivate: function() {
         this.menu.close();
-        let calendarSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.office.calendar' });
-        let tool = calendarSettings.get_string('exec');
+        let tool = this._calendarSettings.get_string('exec');
         if (tool.length == 0 || tool.substr(0, 9) == 'evolution') {
             // TODO: pass the selected day
             let app = Shell.AppSystem.get_default().lookup_app('evolution-calendar.desktop');
             app.activate();
         } else {
-            let needTerm = calendarSettings.get_boolean('needs-term');
+            let needTerm = this._calendarSettings.get_boolean('needs-term');
             if (needTerm) {
                 let terminalSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.terminal' });
                 let term = terminalSettings.get_string('exec');



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