summary refs log tree commit diff
path: root/src/emoji
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-08 15:49:53 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-08 15:49:53 +0300
commit5125433552eb905fe228febc4961bca404f6bae2 (patch)
tree328af902848286d4222bb738ea6125868262f0c4 /src/emoji
parentBump version (diff)
downloadnheko-5125433552eb905fe228febc4961bca404f6bae2.tar.xz
Hide emoji panel if it's not under the mouse cursor
fixes #254
fixes #246
Diffstat (limited to 'src/emoji')
-rw-r--r--src/emoji/Panel.cc8
-rw-r--r--src/emoji/PickButton.cc28
2 files changed, 27 insertions, 9 deletions
diff --git a/src/emoji/Panel.cc b/src/emoji/Panel.cc

index 064dd6d5..89c3f823 100644 --- a/src/emoji/Panel.cc +++ b/src/emoji/Panel.cc
@@ -39,7 +39,7 @@ Panel::Panel(QWidget *parent) "QScrollBar::handle:vertical { min-height: 30px; }"); setAttribute(Qt::WA_ShowWithoutActivating, true); - setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); + setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); auto mainWidget = new QWidget(this); mainWidget->setMaximumSize(width_, height_); @@ -214,12 +214,6 @@ Panel::showCategory(const Category *category) } void -Panel::leaveEvent(QEvent *) -{ - hide(); -} - -void Panel::paintEvent(QPaintEvent *event) { Q_UNUSED(event); diff --git a/src/emoji/PickButton.cc b/src/emoji/PickButton.cc
index 530c951b..d2b4e9fd 100644 --- a/src/emoji/PickButton.cc +++ b/src/emoji/PickButton.cc
@@ -15,15 +15,28 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "emoji/PickButton.h" +#include <QDebug> + #include "emoji/Panel.h" +#include "emoji/PickButton.h" 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; + PickButton::PickButton(QWidget *parent) : FlatButton(parent) , panel_{nullptr} -{} +{ + connect(&hideTimer_, &QTimer::timeout, this, [this]() { + if (panel_ && !panel_->underMouse()) { + hideTimer_.stop(); + panel_->hide(); + } + }); +} void PickButton::enterEvent(QEvent *e) @@ -33,8 +46,12 @@ PickButton::enterEvent(QEvent *e) if (panel_.isNull()) { panel_ = QSharedPointer<Panel>(new Panel(this)); connect(panel_.data(), &Panel::emojiSelected, this, &PickButton::emojiSelected); + connect(panel_.data(), &Panel::leaving, this, [this]() { panel_->hide(); }); } + if (panel_->isVisible()) + return; + QPoint pos(rect().x(), rect().y()); pos = this->mapToGlobal(pos); @@ -46,3 +63,10 @@ PickButton::enterEvent(QEvent *e) panel_->move(x, y); panel_->show(); } + +void +PickButton::leaveEvent(QEvent *e) +{ + hideTimer_.start(TimeoutDuration); + FlatButton::leaveEvent(e); +}