From 4342155748249e0090850c084223f226de619777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 12 Oct 2012 20:59:31 +0200 Subject: [PATCH] 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 file changed, 13 insertions(+), 3 deletions(-) diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index 7f01a7615..7b762b3de 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');