summary refs log tree commit diff
path: root/src/emoji/PickButton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emoji/PickButton.cpp')
-rw-r--r--src/emoji/PickButton.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/emoji/PickButton.cpp b/src/emoji/PickButton.cpp
index d2b4e9fd..608b4fa2 100644
--- a/src/emoji/PickButton.cpp
+++ b/src/emoji/PickButton.cpp
@@ -24,25 +24,35 @@ using namespace emoji;
 
 // Number of milliseconds after which the panel will be hidden
 // if the mouse cursor is not on top of the widget.
-constexpr int TimeoutDuration = 300;
+constexpr int HIDE_TIMEOUT = 300;
 
 PickButton::PickButton(QWidget *parent)
   : FlatButton(parent)
   , panel_{nullptr}
 {
-        connect(&hideTimer_, &QTimer::timeout, this, [this]() {
-                if (panel_ && !panel_->underMouse()) {
-                        hideTimer_.stop();
-                        panel_->hide();
+        connect(&hideTimer_, &QTimer::timeout, this, &PickButton::hidePanel);
+        connect(this, &QPushButton::clicked, this, [this]() {
+                if (panel_ && panel_->isVisible()) {
+                        hidePanel();
+                        return;
                 }
+
+                showPanel();
         });
 }
 
 void
-PickButton::enterEvent(QEvent *e)
+PickButton::hidePanel()
 {
-        Q_UNUSED(e);
+        if (panel_ && !panel_->underMouse()) {
+                hideTimer_.stop();
+                panel_->hide();
+        }
+}
 
+void
+PickButton::showPanel()
+{
         if (panel_.isNull()) {
                 panel_ = QSharedPointer<Panel>(new Panel(this));
                 connect(panel_.data(), &Panel::emojiSelected, this, &PickButton::emojiSelected);
@@ -67,6 +77,6 @@ PickButton::enterEvent(QEvent *e)
 void
 PickButton::leaveEvent(QEvent *e)
 {
-        hideTimer_.start(TimeoutDuration);
+        hideTimer_.start(HIDE_TIMEOUT);
         FlatButton::leaveEvent(e);
 }