From 7148814fee2d7fdf15451275fda3f7a38ec6be6f Mon Sep 17 00:00:00 2001 From: "mostafah%oeone.com" Date: Wed, 18 Jun 2003 20:11:58 +0000 Subject: [PATCH] Made progress on bug 134969: Add alarms to nsnotify/Alarm as well if Calendar is not running by changing calendar icon in taskbar when alarm goes off. --- calendar/libxpical/Makefile.in | 1 + calendar/libxpical/oeICalContainerImpl.cpp | 14 +++- calendar/libxpical/oeICalImpl.cpp | 61 ++++++++++++++++++ calendar/resources/content/calendar.js | 6 ++ calendar/resources/content/calendarEvent.js | 2 +- calendar/resources/jar.mn | 4 ++ calendar/resources/skin/classic/overlay.css | 8 +++ .../skin/classic/taskbar-calalarm-act.gif | Bin 0 -> 210 bytes .../skin/classic/taskbar-calalarm.gif | Bin 0 -> 204 bytes calendar/resources/skin/modern/overlay.css | 8 +++ .../skin/modern/taskbar-calalarm-act.gif | Bin 0 -> 210 bytes .../skin/modern/taskbar-calalarm.gif | Bin 0 -> 204 bytes 12 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 calendar/resources/skin/classic/taskbar-calalarm-act.gif create mode 100644 calendar/resources/skin/classic/taskbar-calalarm.gif create mode 100644 calendar/resources/skin/modern/taskbar-calalarm-act.gif create mode 100644 calendar/resources/skin/modern/taskbar-calalarm.gif diff --git a/calendar/libxpical/Makefile.in b/calendar/libxpical/Makefile.in index 1c91d6b7f956..8e711352f151 100644 --- a/calendar/libxpical/Makefile.in +++ b/calendar/libxpical/Makefile.in @@ -53,6 +53,7 @@ REQUIRES = xpcom \ necko \ msgcompose \ addrbook \ + dom \ ical \ icalss \ $(NULL) diff --git a/calendar/libxpical/oeICalContainerImpl.cpp b/calendar/libxpical/oeICalContainerImpl.cpp index 92008c45b94a..d4c80e820c22 100644 --- a/calendar/libxpical/oeICalContainerImpl.cpp +++ b/calendar/libxpical/oeICalContainerImpl.cpp @@ -229,7 +229,17 @@ oeICalContainerImpl::AddCalendar( const char *server ) { #endif nsresult rv; - nsCOMPtr calendar = do_CreateInstance(OE_ICAL_CONTRACTID, &rv); + + nsCOMPtr calendar; + GetCalendar( server , getter_AddRefs(calendar) ); + if( calendar ) { + #ifdef ICAL_DEBUG_ALL + printf( "oeICalContainerImpl::AddCalendar()-Warning: Calendar already exists\n" ); + #endif + return NS_OK; + } + + calendar = do_CreateInstance(OE_ICAL_CONTRACTID, &rv); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } @@ -252,6 +262,8 @@ oeICalContainerImpl::AddCalendar( const char *server ) { calendar->AddTodoObserver( tmpobserver ); } + calendar->SetBatchMode( m_batchMode ); //Make sure the current batchmode value is inherited + calendar->SetServer( server ); return NS_OK; diff --git a/calendar/libxpical/oeICalImpl.cpp b/calendar/libxpical/oeICalImpl.cpp index 5b99fb57efd7..4fa57927d7e6 100644 --- a/calendar/libxpical/oeICalImpl.cpp +++ b/calendar/libxpical/oeICalImpl.cpp @@ -53,6 +53,12 @@ #include "nsISupportsArray.h" #include "nsXPCOM.h" #include "nsComponentManagerUtils.h" +#include "nsIWindowMediator.h" +#include "nsIServiceManager.h" +#include "nsIDOMWindowInternal.h" +#include "nsIDOMDocument.h" +#include "nsIDOMElement.h" + extern "C" { #include "icalss.h" @@ -1668,6 +1674,57 @@ void AlarmTimerCallback(nsITimer *aTimer, void *aClosure) icallib->SetupAlarmManager(); } +NS_IMETHODIMP UpdateCalendarIcon( PRBool hasAlarm ) +{ + nsresult rv; + nsCOMPtr windowMediator = + do_GetService(NS_WINDOWMEDIATOR_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv,rv); + static PRBool lastTimeHadAlarm = false; + + if( lastTimeHadAlarm == hasAlarm ) + return NS_OK; + + lastTimeHadAlarm = hasAlarm; + nsCOMPtr windowEnumerator; + + // why use DOM window enumerator instead of XUL window...???? + if (NS_SUCCEEDED(windowMediator->GetEnumerator(nsnull, getter_AddRefs(windowEnumerator)))) + { + PRBool more; + + windowEnumerator->HasMoreElements(&more); + + while(more) + { + nsCOMPtr nextWindow = nsnull; + windowEnumerator->GetNext(getter_AddRefs(nextWindow)); + nsCOMPtr domWindow(do_QueryInterface(nextWindow)); + + nsCOMPtr domDocument; + domWindow->GetDocument(getter_AddRefs(domDocument)); + + if(domDocument) + { + nsCOMPtr domElement; + domDocument->GetElementById(NS_LITERAL_STRING("mini-cal"), getter_AddRefs(domElement)); + + if (domElement) { + if ( hasAlarm ) { + domElement->SetAttribute(NS_LITERAL_STRING("BiffState"), NS_LITERAL_STRING("Alarm")); + } + else { + domElement->RemoveAttribute(NS_LITERAL_STRING("BiffState")); + } + } + } + + windowEnumerator->HasMoreElements(&more); + } + } + return NS_OK; +} + void oeICalImpl::SetupAlarmManager() { #ifdef ICAL_DEBUG printf( "oeICalImpl::SetupAlarmManager()\n" ); @@ -1682,6 +1739,8 @@ void oeICalImpl::SetupAlarmManager() { return; } + UpdateCalendarIcon( false ); + PRTime todayinms = PR_Now(); PRInt64 usecpermsec; LL_I2L( usecpermsec, PR_USEC_PER_MSEC ); @@ -1706,6 +1765,8 @@ void oeICalImpl::SetupAlarmManager() { printf( "ALARM WENT OFF: %s\n", icaltime_as_ical_string( alarmtime ) ); #endif + UpdateCalendarIcon( true ); + nsresult rv; oeIICalEventDisplay* eventDisplay; rv = NS_NewICalEventDisplay( event, &eventDisplay ); diff --git a/calendar/resources/content/calendar.js b/calendar/resources/content/calendar.js index 90ea77902217..3d230c0fb7c7 100644 --- a/calendar/resources/content/calendar.js +++ b/calendar/resources/content/calendar.js @@ -126,6 +126,9 @@ function calendarInit() // get the Ical Library gICalLib = gEventSource.getICalLib(); + + // this suspends feedbacks to observers until all is settled + gICalLib.batchMode = true; // set up the CalendarWindow instance @@ -196,6 +199,9 @@ function calendarInit() document.getElementById( 'event-filter-menulist' ).selectedItem = document.getElementById( 'event-filter-'+value ); gEventSource.alarmObserver.firePendingAlarms(); + + //All is settled, enable feedbacks to observers + gICalLib.batchMode = false; } // Set the date and time on the clock and set up a timeout to refresh the clock when the diff --git a/calendar/resources/content/calendarEvent.js b/calendar/resources/content/calendarEvent.js index 303d562a1d8d..5e03dd5fee07 100644 --- a/calendar/resources/content/calendarEvent.js +++ b/calendar/resources/content/calendarEvent.js @@ -101,7 +101,7 @@ function CalendarEventDataSource( ) { try { - var iCalLibComponent = Components.classes["@mozilla.org/ical-container;1"].createInstance(); + var iCalLibComponent = Components.classes["@mozilla.org/ical-container;1"].getService(); } catch ( e ) { alert( "The calendar cannot run due to the following error:\n"+ diff --git a/calendar/resources/jar.mn b/calendar/resources/jar.mn index 286f1ec044b1..c75edd1797e1 100644 --- a/calendar/resources/jar.mn +++ b/calendar/resources/jar.mn @@ -115,6 +115,8 @@ calendar.jar: skin/classic/calendar/synch_animated.gif (skin/classic/synch_animated.gif) skin/classic/calendar/taskbar-cal.gif (skin/classic/taskbar-cal.gif) skin/classic/calendar/taskbar-cal-act.gif (skin/classic/taskbar-cal-act.gif) + skin/classic/calendar/taskbar-calalarm.gif (skin/classic/taskbar-calalarm.gif) + skin/classic/calendar/taskbar-calalarm-act.gif (skin/classic/taskbar-calalarm-act.gif) skin/classic/calendar/week-view-corner.png (skin/classic/week-view-corner.png) skin/classic/calendar/ca-event-dialog/calendar_disabled.gif (skin/classic/ca-event-dialog/calendar_disabled.gif) skin/classic/calendar/ca-event-dialog/calendar_down.gif (skin/classic/ca-event-dialog/calendar_down.gif) @@ -158,6 +160,8 @@ calendar.jar: skin/modern/calendar/synch_animated.gif (skin/modern/synch_animated.gif) skin/modern/calendar/taskbar-cal.gif (skin/modern/taskbar-cal.gif) skin/modern/calendar/taskbar-cal-act.gif (skin/modern/taskbar-cal-act.gif) + skin/modern/calendar/taskbar-calalarm.gif (skin/modern/taskbar-calalarm.gif) + skin/modern/calendar/taskbar-calalarm-act.gif (skin/modern/taskbar-calalarm-act.gif) skin/modern/calendar/week-view-corner.png (skin/modern/week-view-corner.png) skin/modern/calendar/ca-event-dialog/calendar_disabled.gif (skin/modern/ca-event-dialog/calendar_disabled.gif) skin/modern/calendar/ca-event-dialog/calendar_down.png (skin/modern/ca-event-dialog/calendar_down.png) diff --git a/calendar/resources/skin/classic/overlay.css b/calendar/resources/skin/classic/overlay.css index fbde9fe9b6cf..55360784726f 100644 --- a/calendar/resources/skin/classic/overlay.css +++ b/calendar/resources/skin/classic/overlay.css @@ -45,6 +45,14 @@ list-style-image: url("chrome://calendar/skin/taskbar-cal-act.gif"); } +#mini-cal[BiffState="Alarm"] { + list-style-image: url("chrome://calendar/skin/taskbar-calalarm.gif"); +} + +#mini-cal[BiffState="Alarm"]:hover:active { + list-style-image: url("chrome://calendar/skin/taskbar-calalarm-act.gif"); +} + .icon-calendar16 { list-style-image: url("chrome://calendar/skin/calendar-16.gif"); } diff --git a/calendar/resources/skin/classic/taskbar-calalarm-act.gif b/calendar/resources/skin/classic/taskbar-calalarm-act.gif new file mode 100644 index 0000000000000000000000000000000000000000..7dc445e5dbe249d933a3f0041c4092f341485e09 GIT binary patch literal 210 zcmZ?wbhEHb6ky{a@0BR_*$)T(;J)17JSzk z-MMWP1Up?iX8SOmV^ED;$)S58{fgpBmNk0Lh6mQNwM<`Am9@^rK(aJsv!~mPWMy^@ I9!3Uh0MCC`cK`qY literal 0 HcmV?d00001 diff --git a/calendar/resources/skin/classic/taskbar-calalarm.gif b/calendar/resources/skin/classic/taskbar-calalarm.gif new file mode 100644 index 0000000000000000000000000000000000000000..2972f4486f51401632dcbeca72c5111ed6350138 GIT binary patch literal 204 zcmZ?wbhEHb6ky32d-iNIGc!9okO(fI_>+Z^fkB=@2S_sT z1MOsB^;8hxIOrhc__5YadQXAOhIfs3JeoAP4{u?+x%y#+gTes^l|?CDa{VV&cIL22 kOz=#2C6u(3QET%r7JoUR?5RP9c9RY{9Dc;y#=u|=0LY7A*#H0l literal 0 HcmV?d00001 diff --git a/calendar/resources/skin/modern/overlay.css b/calendar/resources/skin/modern/overlay.css index 4d3f1f553518..b1c98ca9f432 100644 --- a/calendar/resources/skin/modern/overlay.css +++ b/calendar/resources/skin/modern/overlay.css @@ -45,6 +45,14 @@ list-style-image: url("chrome://calendar/skin/taskbar-cal-act.gif"); } +#mini-cal[BiffState="Alarm"] { + list-style-image: url("chrome://calendar/skin/taskbar-calalarm.gif"); +} + +#mini-cal[BiffState="Alarm"]:hover:active { + list-style-image: url("chrome://calendar/skin/taskbar-calalarm-act.gif"); +} + .icon-calendar16 { list-style-image: url("chrome://calendar/skin/calendar-16.gif"); } diff --git a/calendar/resources/skin/modern/taskbar-calalarm-act.gif b/calendar/resources/skin/modern/taskbar-calalarm-act.gif new file mode 100644 index 0000000000000000000000000000000000000000..7dc445e5dbe249d933a3f0041c4092f341485e09 GIT binary patch literal 210 zcmZ?wbhEHb6ky{a@0BR_*$)T(;J)17JSzk z-MMWP1Up?iX8SOmV^ED;$)S58{fgpBmNk0Lh6mQNwM<`Am9@^rK(aJsv!~mPWMy^@ I9!3Uh0MCC`cK`qY literal 0 HcmV?d00001 diff --git a/calendar/resources/skin/modern/taskbar-calalarm.gif b/calendar/resources/skin/modern/taskbar-calalarm.gif new file mode 100644 index 0000000000000000000000000000000000000000..2972f4486f51401632dcbeca72c5111ed6350138 GIT binary patch literal 204 zcmZ?wbhEHb6ky32d-iNIGc!9okO(fI_>+Z^fkB=@2S_sT z1MOsB^;8hxIOrhc__5YadQXAOhIfs3JeoAP4{u?+x%y#+gTes^l|?CDa{VV&cIL22 kOz=#2C6u(3QET%r7JoUR?5RP9c9RY{9Dc;y#=u|=0LY7A*#H0l literal 0 HcmV?d00001