Skip to content

Commit

Permalink
Ignore invisible widgets when hit testing (#4873)
Browse files Browse the repository at this point in the history
Co-authored-by: Felanbird <[email protected]>
  • Loading branch information
Nerixyz and Felanbird authored Oct 6, 2023
1 parent 7c8caba commit 7528257
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
- Bugfix: Fixed the Quick Switcher (CTRL+K) from sometimes showing up on the wrong window. (#4819)
- Bugfix: Fixed too much text being copied when copying chat messages. (#4812, #4830, #4839)
- Bugfix: Fixed empty page being added when showing out of bounds dialog. (#4849)
- Bugfix: Fixed issue on Windows preventing the title bar from being dragged in the top left corner. (#4873)
- Dev: Fixed UTF16 encoding of `modes` file for the installer. (#4791)
- Dev: Temporarily disable High DPI scaling on Qt6 builds on Windows. (#4767)
- Dev: Tests now run on Ubuntu 22.04 instead of 20.04 to loosen C++ restrictions in tests. (#4774)
Expand Down
31 changes: 20 additions & 11 deletions src/widgets/BaseWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ void BaseWindow::mousePressEvent(QMouseEvent *event)
{
std::function<bool(QWidget *)> recursiveCheckMouseTracking;
recursiveCheckMouseTracking = [&](QWidget *widget) {
if (widget == nullptr)
if (widget == nullptr || widget->isHidden())
{
return false;
}
Expand Down Expand Up @@ -934,17 +934,23 @@ bool BaseWindow::handleNCHITTEST(MSG *msg, long *result)
{
bool client = false;

for (QWidget *widget : this->ui_.buttons)
// Check the main layout first, as it's the largest area
if (this->ui_.layoutBase->geometry().contains(point))
{
if (widget->geometry().contains(point))
{
client = true;
}
client = true;
}

if (this->ui_.layoutBase->geometry().contains(point))
// Check the titlebar buttons
if (!client && this->ui_.titlebarBox->geometry().contains(point))
{
client = true;
for (QWidget *widget : this->ui_.buttons)
{
if (widget->isVisible() &&
widget->geometry().contains(point))
{
client = true;
}
}
}

if (client)
Expand All @@ -959,16 +965,17 @@ bool BaseWindow::handleNCHITTEST(MSG *msg, long *result)

return true;
}
else if (this->flags_.has(FramelessDraggable))

if (this->flags_.has(FramelessDraggable))
{
*result = 0;
bool client = false;

if (auto widget = this->childAt(point))
if (auto *widget = this->childAt(point))
{
std::function<bool(QWidget *)> recursiveCheckMouseTracking;
recursiveCheckMouseTracking = [&](QWidget *widget) {
if (widget == nullptr)
if (widget == nullptr || widget->isHidden())
{
return false;
}
Expand Down Expand Up @@ -998,6 +1005,8 @@ bool BaseWindow::handleNCHITTEST(MSG *msg, long *result)

return true;
}

// don't handle the message
return false;
#else
return false;
Expand Down

0 comments on commit 7528257

Please sign in to comment.