mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-09 01:20:46 +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
|
@ -78,8 +78,14 @@ void Button::on_mouse_event(const MouseEvent& event)
|
|||
if (on_click)
|
||||
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());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue