diff --git a/korgac/alarmdockwindow.h b/korgac/alarmdockwindow.h --- a/korgac/alarmdockwindow.h +++ b/korgac/alarmdockwindow.h @@ -49,6 +49,7 @@ void quitSignal(); void suspendAllSignal(); void dismissAllSignal(); + void showReminderSignal(); protected Q_SLOTS: void activate(const QPoint &pos) override; @@ -71,6 +72,7 @@ // user is typing AlarmDialog now gets those keys and space or return will // dismiss all notifications before the user has a chance to read them. QAction *mGrabFocus = nullptr; + QAction *mShow = nullptr; bool mAutostartSet = false; }; diff --git a/korgac/alarmdockwindow.cpp b/korgac/alarmdockwindow.cpp --- a/korgac/alarmdockwindow.cpp +++ b/korgac/alarmdockwindow.cpp @@ -71,11 +71,17 @@ // Set up the context menu mSuspendAll - = contextMenu()->addAction(i18nc("@action:inmenu", "Suspend All Reminders"), this, + = contextMenu()->addAction(i18nc("@action:inmenu", "&Suspend All Reminders"), this, &AlarmDockWindow::slotSuspendAll); mDismissAll - = contextMenu()->addAction(i18nc("@action:inmenu", "Dismiss All Reminders"), this, + = contextMenu()->addAction(i18nc("@action:inmenu", "&Dismiss All Reminders"), this, &AlarmDockWindow::slotDismissAll); + // leave mShow always enabled that way you can get to alarms that are + // suspended and inactive to dismiss them before they go off again + // (as opposed to the other two that are initially disabled) + mShow + = contextMenu()->addAction(i18nc("@action:inmenu", "Show &Reminders"), this, + &AlarmDockWindow::showReminderSignal); mSuspendAll->setEnabled(false); mDismissAll->setEnabled(false); diff --git a/korgac/koalarmclient.h b/korgac/koalarmclient.h --- a/korgac/koalarmclient.h +++ b/korgac/koalarmclient.h @@ -64,11 +64,13 @@ void checkAlarms(); void setupAkonadi(); void slotCommitData(QSessionManager &); + void showReminder(); bool dockerEnabled(); bool collectionsAvailable() const; - void createReminder(const Akonadi::ETMCalendar::Ptr &calendar, const Akonadi::Item &incidence, + void createReminder(const Akonadi::Item &incidence, const QDateTime &dt, const QString &displayText); void saveLastCheckTime(); + void createDialog(); AlarmDockWindow *mDocker = nullptr; // the panel icon Akonadi::ETMCalendar::Ptr mCalendar; diff --git a/korgac/koalarmclient.cpp b/korgac/koalarmclient.cpp --- a/korgac/koalarmclient.cpp +++ b/korgac/koalarmclient.cpp @@ -56,6 +56,7 @@ mDocker = new AlarmDockWindow; connect(this, &KOAlarmClient::reminderCount, mDocker, &AlarmDockWindow::slotUpdate); connect(mDocker, &AlarmDockWindow::quitSignal, this, &KOAlarmClient::slotQuit); + connect(mDocker, &AlarmDockWindow::showReminderSignal, this, &KOAlarmClient::showReminder); } // Check if Akonadi is already configured @@ -156,7 +157,7 @@ Akonadi::Item i = mCalendar->item(Akonadi::Item::fromUrl(url).id()); if (CalendarSupport::hasIncidence(i) && !CalendarSupport::incidence(i)->alarms().isEmpty()) { - createReminder(mCalendar, i, dt, QString()); + createReminder(i, dt, QString()); } } } @@ -226,34 +227,46 @@ const Akonadi::Item::Id id = mCalendar->item(uid).id(); const Akonadi::Item item = mCalendar->item(id); - createReminder(mCalendar, item, from, alarm->text()); + createReminder(item, from, alarm->text()); } } -void KOAlarmClient::createReminder(const Akonadi::ETMCalendar::Ptr &calendar, - const Akonadi::Item &aitem, const QDateTime &remindAtDate, +void KOAlarmClient::createReminder(const Akonadi::Item &aitem, const QDateTime &remindAtDate, const QString &displayText) { if (!CalendarSupport::hasIncidence(aitem)) { return; } + if (remindAtDate.addDays(10) < mLastChecked) { // ignore reminders more than 10 days old return; } + + createDialog(); + + mDialog->addIncidence(aitem, remindAtDate, displayText); + mDialog->wakeUp(); + saveLastCheckTime(); +} + +void KOAlarmClient::showReminder() +{ + createDialog(); + mDialog->show(); +} + +void KOAlarmClient::createDialog() +{ if (!mDialog) { - mDialog = new AlarmDialog(calendar); + mDialog = new AlarmDialog(mCalendar); connect(this, &KOAlarmClient::saveAllSignal, mDialog, &AlarmDialog::slotSave); if (mDocker) { connect(mDialog, &AlarmDialog::reminderCount, mDocker, &AlarmDockWindow::slotUpdate); connect(mDocker, &AlarmDockWindow::suspendAllSignal, mDialog, &AlarmDialog::suspendAll); connect(mDocker, &AlarmDockWindow::dismissAllSignal, mDialog, &AlarmDialog::dismissAll); } } - - mDialog->addIncidence(aitem, remindAtDate, displayText); - mDialog->wakeUp(); - saveLastCheckTime(); } void KOAlarmClient::slotQuit()