Popup improvements
- ESC closes the popup.
- Up/Down arrows for navigation.
- BackTab for backwards navigation.
fixes #301
fixes #302
1 files changed, 43 insertions, 16 deletions
diff --git a/src/SuggestionsPopup.cpp b/src/SuggestionsPopup.cpp
index 174076f9..51229806 100644
--- a/src/SuggestionsPopup.cpp
+++ b/src/SuggestionsPopup.cpp
@@ -1,8 +1,8 @@
-#include "SuggestionsPopup.hpp"
#include "Avatar.h"
#include "AvatarProvider.h"
#include "Config.h"
#include "DropShadow.h"
+#include "SuggestionsPopup.hpp"
#include "Utils.h"
#include "timeline/TimelineViewManager.h"
@@ -72,7 +72,6 @@ PopupItem::mousePressEvent(QMouseEvent *event)
SuggestionsPopup::SuggestionsPopup(QWidget *parent)
: QWidget(parent)
- , tab_clicks_(0)
{
setAttribute(Qt::WA_ShowWithoutActivating, true);
setWindowFlags(Qt::ToolTip | Qt::NoDropShadowWindowHint);
@@ -103,41 +102,69 @@ SuggestionsPopup::addUsers(const QVector<SearchResult> &users)
connect(user, &PopupItem::clicked, this, &SuggestionsPopup::itemSelected);
}
- tab_clicks_ = 0; // Reset to start from the beginning of pop-up window on next invocation.
+ resetSelection();
resize(geometry().width(), 40 * users.size());
}
void
-SuggestionsPopup::cycleThroughSuggestions()
+SuggestionsPopup::hoverSelection()
+{
+ resetHovering();
+ setHovering(selectedItem_);
+ update();
+}
+
+void
+SuggestionsPopup::selectNextSuggestion()
+{
+ selectedItem_++;
+ if (selectedItem_ >= layout_->count())
+ selectFirstItem();
+
+ hoverSelection();
+}
+
+void
+SuggestionsPopup::selectPreviousSuggestion()
{
- tab_clicks_ %= layout_->count(); // Stay within the number of items in layout.
+ selectedItem_--;
+ if (selectedItem_ < 0)
+ selectLastItem();
+
+ hoverSelection();
+}
- // Reset flag for hovering effect first.
+void
+SuggestionsPopup::resetHovering()
+{
for (int i = 0; i < layout_->count(); ++i) {
- const auto &p = qobject_cast<PopupItem *>(layout_->itemAt(i)->widget());
- p->setHovering(false);
+ const auto item = qobject_cast<PopupItem *>(layout_->itemAt(i)->widget());
+
+ if (item)
+ item->setHovering(false);
}
+}
- const auto &item = layout_->itemAt(tab_clicks_);
+void
+SuggestionsPopup::setHovering(int pos)
+{
+ const auto &item = layout_->itemAt(pos);
const auto &widget = qobject_cast<PopupItem *>(item->widget());
- widget->setHovering(true);
-
- ++tab_clicks_;
- update(); // Request to update the paint event.
+ if (widget)
+ widget->setHovering(true);
}
void
SuggestionsPopup::selectHoveredSuggestion()
{
- // Each tab press increments the counter by one, so the element desired is one off.
- const auto item = layout_->itemAt(tab_clicks_ - 1);
+ const auto item = layout_->itemAt(selectedItem_);
if (!item)
return;
const auto &widget = qobject_cast<PopupItem *>(item->widget());
emit itemSelected(TimelineViewManager::displayName(widget->user()));
- tab_clicks_ = 0; // Reset to start from the beginning of pop-up window on next invocation.
+ resetSelection();
}
|