From d117becad83a42f49e17bc151ce5ecc11e4dc8cf Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 13 Dec 2013 21:15:07 -0800 Subject: Improve MainTab behavior when using the scroll wheel This gets the behavior close to what we really want. - scroll wheel no longer enters edit mode when over the tabWidget - scroll wheel doesn't modify dateTimeEdit, nor does it enter edit mode - scroll wheel still scrolls both the notes and the full widget The only oddity is that when clicking on either the dateTimeEdit or the tabWidget we don't immediately turn on the 'being edited' warning (as we do for all the other widgets). For those two widgets the user has to press a key before edit mode starts. I think this Fixes #176 Reported-by: Linus Torvalds Ideas-by: Lubomir I. Ivanov Signed-off-by: Dirk Hohndel --- qt-ui/maintab.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index edc425bfb..81187dcf8 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -281,19 +281,23 @@ void MainTab::enableEdition(EditMode newEditMode) bool MainTab::eventFilter(QObject* object, QEvent* event) { - if (isEnabled() && event->type() == QEvent::KeyPress && object == ui.dateTimeEdit) { - tabBar()->setTabIcon(currentIndex(), QIcon(":warning")); - enableEdition(); - } - - if (isEnabled() && event->type() == QEvent::FocusIn && (object == ui.rating || - object == ui.visibility || - object == ui.tagWidget)) { - tabBar()->setTabIcon(currentIndex(), QIcon(":warning")); - enableEdition(); - } - - if (isEnabled() && event->type() == QEvent::MouseButtonPress ) { + // we want to prevent the user from accidentally enabling editMode: + // for the tagWidget we ignore FocusIn - that's both a click and starting the scroll wheel + // this means a click by itself won't start edit mode - but typing something will + if (isEnabled() && editMode == NONE && object->objectName() == "tagWidget" && + event->type() == QEvent::FocusIn) + return true; + // for the dateTimeEdit widget we need to ignore Wheel events as well (as long as we aren't editing) + if (isEnabled() && editMode == NONE && object->objectName() == "dateTimeEdit" && + (event->type() == QEvent::FocusIn || event->type() == QEvent::Wheel)) + return true; + // MouseButtonPress in any widget (not all will ever get this), KeyPress in the dateTimeEdit, + // FocusIn for the starWidgets or RequestSoftwareInputPanel for tagWidget start the editing + if (isEnabled() && editMode == NONE && + (event->type() == QEvent::MouseButtonPress) || + (event->type() == QEvent::KeyPress && object == ui.dateTimeEdit) || + (event->type() == QEvent::FocusIn && (object == ui.rating || object == ui.visibility)) || + (event->type() == QEvent::RequestSoftwareInputPanel && object == ui.tagWidget)) { tabBar()->setTabIcon(currentIndex(), QIcon(":warning")); enableEdition(); } -- cgit v1.2.3-70-g09d2