Calendar: freeze updates when the event source is loading

Check if the event source is currently doing an async call, and prevent
UI updates in that case. This avoids a flash of "No updates" when switching
months.

https://bugzilla.gnome.org/show_bug.cgi?id=641383
This commit is contained in:
Giovanni Campagna 2012-10-23 18:41:24 +02:00
parent 69cdc5a9b9
commit 443fe813c3

View File

@ -168,6 +168,7 @@ const EmptyEventSource = new Lang.Class({
Name: 'EmptyEventSource', Name: 'EmptyEventSource',
_init: function() { _init: function() {
this.isLoading = false;
}, },
requestRange: function(begin, end) { requestRange: function(begin, end) {
@ -229,6 +230,7 @@ const DBusEventSource = new Lang.Class({
_init: function() { _init: function() {
this._resetCache(); this._resetCache();
this.isLoading = false;
this._initialized = false; this._initialized = false;
this._dbusProxy = new CalendarServer(); this._dbusProxy = new CalendarServer();
@ -293,6 +295,7 @@ const DBusEventSource = new Lang.Class({
} }
this._events = newEvents; this._events = newEvents;
this.isLoading = false;
this.emit('changed'); this.emit('changed');
}, },
@ -315,6 +318,7 @@ const DBusEventSource = new Lang.Class({
requestRange: function(begin, end, forceReload) { requestRange: function(begin, end, forceReload) {
if (forceReload || !(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) { if (forceReload || !(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) {
this.isLoading = true;
this._lastRequestBegin = begin; this._lastRequestBegin = begin;
this._lastRequestEnd = end; this._lastRequestEnd = end;
this._curRequestBegin = begin; this._curRequestBegin = begin;
@ -776,6 +780,9 @@ const EventsList = new Lang.Class({
}, },
_update: function() { _update: function() {
if (this._eventSource.isLoading)
return;
let today = new Date(); let today = new Date();
if (_sameDay (this._date, today)) { if (_sameDay (this._date, today)) {
this._showToday(); this._showToday();