mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:47:44 +00:00
WindowServer: Fix 'Maximize' Button
When a window is maximized by clicking the 'maximize' button in the window frame, the WindowFrame *is* invalidated and repainted properly. However, the internal state of the WindowServer::Button does not get updated until the next mouse movement. This means that the 'maximize' button is erroneously highlighted until the mouse moves again. This is very visible. Ideally, a patch should compute the actual new m_hovered. However, this requires knowledge of the new rect, or calling something on the Button after the new rect has been determined. Until someone can figure out a good way around this, setting m_hovered to false is a solution that 'usually' works. Note that this does *not* work when after maximizing/restoring, the maximize button falls exactly under the mouse again. The button functions properly, but is erroneously not highlighted. At least a *missing* highlight is less noticable than a highlight too many.
This commit is contained in:
parent
cc67671d95
commit
124cbea347
1 changed files with 7 additions and 1 deletions
|
@ -78,8 +78,14 @@ void Button::on_mouse_event(const MouseEvent& event)
|
||||||
if (on_click)
|
if (on_click)
|
||||||
on_click(*this);
|
on_click(*this);
|
||||||
}
|
}
|
||||||
if (old_pressed != m_pressed)
|
if (old_pressed != m_pressed) {
|
||||||
|
// Would like to compute:
|
||||||
|
// m_hovered = rect_after_action().contains(event.position());
|
||||||
|
// However, we don't know that rect yet. We can make an educated
|
||||||
|
// guess which also looks okay even when wrong:
|
||||||
|
m_hovered = false;
|
||||||
wm.invalidate(screen_rect());
|
wm.invalidate(screen_rect());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue