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);
}
diff --git a/src/emoji/PickButton.h b/src/emoji/PickButton.h
index d14067c6..97ed8c37 100644
--- a/src/emoji/PickButton.h
+++ b/src/emoji/PickButton.h
@@ -37,10 +37,12 @@ signals:
void emojiSelected(const QString &emoji);
protected:
- void enterEvent(QEvent *e) override;
void leaveEvent(QEvent *e) override;
private:
+ void showPanel();
+ void hidePanel();
+
// Vertical distance from panel's bottom.
int vertical_distance_ = 10;
|