diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/calendarwindow.cpp | 22 | ||||
| -rw-r--r-- | src/monthview.cpp | 3 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/calendarwindow.cpp b/src/calendarwindow.cpp index d9c1da2..4a07b89 100644 --- a/src/calendarwindow.cpp +++ b/src/calendarwindow.cpp @@ -25,6 +25,7 @@ #include "monthview.h" #include <QAction> +#include <QApplication> #include <QButtonGroup> #include <QCloseEvent> #include <QComboBox> @@ -276,8 +277,10 @@ void CalendarWindow::buildActions() QKeySequence(Qt::CTRL | Qt::Key_E), nullptr, &CalendarWindow::startEdit); QAction *del = make(QStringLiteral("deleteEvent"), tr("&Delete event"), QKeySequence(Qt::Key_Delete), m_views, &CalendarWindow::deleteSelected); - QAction *cancel = make(QStringLiteral("cancelEdit"), tr("Cancel &editing"), - QKeySequence(Qt::Key_Escape), m_pane, &CalendarWindow::cancelEdit); + // Window-wide, so Escape closes the details pane from the grid too; the + // combo and spin box popups take their own Escape first. + QAction *cancel = make(QStringLiteral("cancelEdit"), tr("C&lose event"), + QKeySequence(Qt::Key_Escape), nullptr, &CalendarWindow::cancelEdit); QAction *undo = m_undo.createUndoAction(this, tr("&Undo")); undo->setShortcut(QKeySequence::Undo); @@ -619,9 +622,18 @@ bool CalendarWindow::save() void CalendarWindow::cancelEdit() { - if (!m_pane->isEditing()) - return; - m_pane->stopEdit(); + // Cancelling an edit returns to the details; with no edit, closing the + // details clears the selection, which hides the pane. + if (m_pane->isEditing()) { + // Escape used to be scoped to the pane; keep a stray one from the + // grid from throwing away an edit. + if (!m_pane->isAncestorOf(QApplication::focusWidget())) + return; + m_pane->stopEdit(); + } else { + m_selectedUid.clear(); + m_selectedStart = {}; + } rebuildItems(); } diff --git a/src/monthview.cpp b/src/monthview.cpp index 202ef4a..5b56ee4 100644 --- a/src/monthview.cpp +++ b/src/monthview.cpp @@ -28,6 +28,9 @@ MonthView::MonthView(QWidget *parent) m_year(QDate::currentDate().year()), m_month(QDate::currentDate().month()) { setMinimumSize(420, 320); + // A click must move focus here, or it stays in the edit form and the + // view-scoped shortcuts and the Escape guard read the wrong widget. + setFocusPolicy(Qt::StrongFocus); } void MonthView::setMonth(int year, int month) |
