diff --git a/calendar/base/src/calRecurrenceInfo.js b/calendar/base/src/calRecurrenceInfo.js index f26633ffae83..e89fdef16018 100644 --- a/calendar/base/src/calRecurrenceInfo.js +++ b/calendar/base/src/calRecurrenceInfo.js @@ -185,7 +185,7 @@ calRecurrenceInfo.prototype = { if (!this.mBaseItem) throw Components.results.NS_ERROR_NOT_INITIALIZED; - if (aIndex < 0 || aIndex >= mRecurrenceItems.length) + if (aIndex < 0 || aIndex >= this.mRecurrenceItems.length) throw Components.results.NS_ERROR_INVALID_ARG; return this.mRecurrenceItems[aIndex]; @@ -221,8 +221,15 @@ calRecurrenceInfo.prototype = { if (this.mImmutable) throw Components.results.NS_ERROR_OBJECT_IS_IMMUTABLE; + // Because xpcom objects can be wrapped in various ways, testing for + // mere == sometimes returns false even when it should be true. Use + // the interface pointer returned by sip to avoid that problem. + var sip1 = Components.classes["@mozilla.org/supports-interface-pointer;1"] + .createInstance(Components.interfaces.nsISupportsInterfacePointer); + sip1.data = aItem; + sip1.dataIID = Components.interfaces.calIRecurrenceItem; for (var i = 0; i < this.mRecurrenceItems.length; i++) { - if (this.mRecurrenceItems[i] == aItem) { + if (this.mRecurrenceItems[i] == sip1.data) { this.deleteRecurrenceItemAt(i); return; } diff --git a/calendar/providers/composite/calCompositeCalendar.js b/calendar/providers/composite/calCompositeCalendar.js index 34d7d579756d..c213cb10a4be 100644 --- a/calendar/providers/composite/calCompositeCalendar.js +++ b/calendar/providers/composite/calCompositeCalendar.js @@ -233,7 +233,7 @@ calCompositeCalendar.prototype = { }, setDefaultCalendar: function (cal, usePref) { - if (this.mDefaultCalendar == cal) // .equals(uri) ?? + if (this.mDefaultCalendar && this.mDefaultCalendar.uri.equals(cal.uri)) return; if (usePref && this.mPrefPrefix) { this.mCalMgr.deleteCalendarPref(this.mDefaultCalendar,