Calendar: only show events when configured in Evolution

When no calendars are enabled, hide the events pane completely instead
of showing it empty.

https://bugzilla.gnome.org/show_bug.cgi?id=680083
This commit is contained in:
Giovanni Campagna
2012-10-29 16:37:07 +01:00
parent ec39aa3890
commit ee50904147
5 changed files with 91 additions and 16 deletions

View File

@@ -170,6 +170,7 @@ const EmptyEventSource = new Lang.Class({
_init: function() {
this.isLoading = false;
this.isDummy = true;
this.hasCalendars = false;
},
destroy: function() {
@@ -196,6 +197,7 @@ const CalendarServerIface = <interface name="org.gnome.Shell.CalendarServer">
<arg type="b" direction="in" />
<arg type="a(sssbxxa{sv})" direction="out" />
</method>
<property name="HasCalendars" type="b" access="read" />
<signal name="Changed" />
</interface>;
@@ -206,8 +208,7 @@ function CalendarServer() {
g_interface_name: CalendarServerInfo.name,
g_interface_info: CalendarServerInfo,
g_name: 'org.gnome.Shell.CalendarServer',
g_object_path: '/org/gnome/Shell/CalendarServer',
g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES });
g_object_path: '/org/gnome/Shell/CalendarServer' });
}
function _datesEqual(a, b) {
@@ -256,7 +257,12 @@ const DBusEventSource = new Lang.Class({
this._onNameVanished();
}));
this._dbusProxy.connect('g-properties-changed', Lang.bind(this, function() {
this.emit('notify::has-calendars');
}));
this._initialized = true;
this.emit('notify::has-calendars');
this._onNameAppeared();
}));
},
@@ -265,6 +271,13 @@ const DBusEventSource = new Lang.Class({
this._dbusProxy.run_dispose();
},
get hasCalendars() {
if (this._initialized)
return this._dbusProxy.HasCalendars;
else
return false;
},
_resetCache: function() {
this._events = [];
this._lastRequestBegin = null;

View File

@@ -161,8 +161,10 @@ const DateMenuButton = new Lang.Class({
this._openClocksItem.actor.visible = app !== null;
},
_setEventsVisibility: function(visible) {
_updateEventsVisibility: function() {
let visible = this._eventSource.hasCalendars;
this._openCalendarItem.actor.visible = visible;
this._openClocksItem.actor.visible = visible;
this._separator.visible = visible;
if (visible) {
let alignment = 0.25;
@@ -184,6 +186,9 @@ const DateMenuButton = new Lang.Class({
this._eventList.setEventSource(eventSource);
this._eventSource = eventSource;
this._eventSource.connect('notify::has-calendars', Lang.bind(this, function() {
this._updateEventsVisibility();
}));
},
_sessionUpdated: function() {
@@ -195,7 +200,7 @@ const DateMenuButton = new Lang.Class({
eventSource = new Calendar.EmptyEventSource();
}
this._setEventSource(eventSource);
this._setEventsVisibility(showEvents);
this._updateEventsVisibility();
// This needs to be handled manually, as the code to
// autohide separators doesn't work across the vbox