Remove hover event from emoji picker

fixes #398
remotes/origin/HEAD
Konstantinos Sideris 6 years ago
parent 3fb57ac049
commit 43a4676282
  1. 1
      src/TextInputWidget.cpp
  2. 26
      src/emoji/PickButton.cpp
  3. 4
      src/emoji/PickButton.h

@ -501,6 +501,7 @@ TextInputWidget::TextInputWidget(QWidget *parent)
sendMessageBtn_->setIconSize(QSize(ButtonHeight, ButtonHeight));
emojiBtn_ = new emoji::PickButton(this);
emojiBtn_->setToolTip(tr("Emoji"));
QIcon emoji_icon;
emoji_icon.addFile(":/icons/icons/ui/smile.png");

@ -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);
}

@ -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;

Loading…
Cancel
Save