Skip to content

Commit

Permalink
Fix tooltips appearing too large and/or away from the cursor (#4920)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nerixyz authored Nov 4, 2023
1 parent 879a63e commit 5325c7b
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 27 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
- Bugfix: Fixed the input completion popup from disappearing when clicking on it on Windows and macOS. (#4876)
- Bugfix: Fixed double-click text selection moving its position with each new message. (#4898)
- Bugfix: Fixed an issue where notifications on Windows would contain no or an old avatar. (#4899)
- Bugfix: Fixed tooltips appearing too large and/or away from the cursor. (#4920)
- Bugfix: Fixed a crash when clicking `More messages below` button in a usercard and closing it quickly. (#4933)
- Dev: Change clang-format from v14 to v16. (#4929)
- Dev: Fixed UTF16 encoding of `modes` file for the installer. (#4791)
Expand Down
6 changes: 0 additions & 6 deletions src/singletons/WindowManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,6 @@ WindowManager::WindowManager()
QObject::connect(this->saveTimer, &QTimer::timeout, [] {
getApp()->windows->save();
});

this->miscUpdateTimer_.start(100);

QObject::connect(&this->miscUpdateTimer_, &QTimer::timeout, [this] {
this->miscUpdate.invoke();
});
}

WindowManager::~WindowManager() = default;
Expand Down
5 changes: 0 additions & 5 deletions src/singletons/WindowManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,6 @@ class WindowManager final : public Singleton

pajlada::Signals::NoArgSignal wordFlagsChanged;

// This signal fires every 100ms and can be used to trigger random things that require a recheck.
// It is currently being used by the "Tooltip Preview Image" system to recheck if an image is ready to be rendered.
pajlada::Signals::NoArgSignal miscUpdate;

pajlada::Signals::Signal<Split *> selectSplit;
pajlada::Signals::Signal<SplitContainer *> selectSplitContainer;
pajlada::Signals::Signal<const MessagePtr &> scrollToMessageSignal;
Expand Down Expand Up @@ -159,7 +155,6 @@ class WindowManager final : public Singleton
pajlada::SettingListener wordFlagsListener_;

QTimer *saveTimer;
QTimer miscUpdateTimer_;

friend class Window; // this is for selectedWindow_
};
Expand Down
5 changes: 5 additions & 0 deletions src/widgets/TooltipEntryWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ bool TooltipEntryWidget::refreshPixmap()
this->displayImage_->setPixmap(pixmap->scaled(this->customImgWidth_,
this->customImgHeight_,
Qt::KeepAspectRatio));
if (this->displayImage_->size() !=
QSize{this->customImgWidth_, this->customImgHeight_})
{
this->adjustSize();
}
}
else
{
Expand Down
44 changes: 28 additions & 16 deletions src/widgets/TooltipWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,35 +37,46 @@ TooltipWidget::TooltipWidget(BaseWidget *parent)
});
this->updateFont();

auto windows = getApp()->windows;
auto *windows = getApp()->windows;
this->connections_.managedConnect(windows->gifRepaintRequested, [this] {
if (!this->isVisible())
{
return;
}

for (int i = 0; i < this->visibleEntries_; ++i)
{
auto entry = this->entryAt(i);
auto *entry = this->entryAt(i);
if (entry && entry->animated())
{
entry->refreshPixmap();
}
}
});

this->connections_.managedConnect(windows->miscUpdate, [this] {
bool needSizeAdjustment = false;
for (int i = 0; i < this->visibleEntries_; ++i)
{
auto entry = this->entryAt(i);
if (entry->hasImage() && entry->attemptRefresh())
this->connections_.managedConnect(
windows->layoutRequested, [this](auto *chan) {
if (chan != nullptr || !this->isVisible())
{
bool successfullyUpdated = entry->refreshPixmap();
needSizeAdjustment |= successfullyUpdated;
return;
}
}

if (needSizeAdjustment)
{
this->adjustSize();
}
});
bool needSizeAdjustment = false;
for (int i = 0; i < this->visibleEntries_; ++i)
{
auto *entry = this->entryAt(i);
if (entry->hasImage() && entry->attemptRefresh())
{
bool successfullyUpdated = entry->refreshPixmap();
needSizeAdjustment |= successfullyUpdated;
}
}

if (needSizeAdjustment)
{
this->adjustSize();
}
});
}

void TooltipWidget::setOne(const TooltipEntry &entry, TooltipStyle style)
Expand Down Expand Up @@ -101,6 +112,7 @@ void TooltipWidget::set(const std::vector<TooltipEntry> &entries,
entryWidget->setImageScale(entry.customWidth, entry.customHeight);
}
}
this->adjustSize();
}

void TooltipWidget::setVisibleEntries(int n)
Expand Down

0 comments on commit 5325c7b

Please sign in to comment.