Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignore invisible widgets when hit testing #4873

Merged
merged 6 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 to be dragged in the top left corner. (#4873)
pajlada marked this conversation as resolved.
Show resolved Hide resolved
- 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
Loading