mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 18:05:07 +00:00
WindowServer: Don't de-maximize windows immediately (#756)
At least 5 pixels of dragging in some direction needed until a window gets de-maximized.
This commit is contained in:
parent
18348cebf1
commit
7e7451c427
2 changed files with 32 additions and 10 deletions
|
@ -419,11 +419,6 @@ void WSWindowManager::start_window_drag(WSWindow& window, const WSMouseEvent& ev
|
|||
move_to_front_and_make_active(window);
|
||||
m_drag_window = window.make_weak_ptr();
|
||||
m_drag_origin = event.position();
|
||||
if (window.is_maximized()) {
|
||||
auto width_before_resize = window.width();
|
||||
window.set_maximized(false);
|
||||
window.move_to(m_drag_origin.x() - (window.width() * ((float)m_drag_origin.x() / width_before_resize)), m_drag_origin.y());
|
||||
}
|
||||
m_drag_window_origin = window.position();
|
||||
invalidate(window);
|
||||
}
|
||||
|
@ -489,14 +484,31 @@ bool WSWindowManager::process_ongoing_window_drag(WSMouseEvent& event, WSWindow*
|
|||
return true;
|
||||
}
|
||||
if (event.type() == WSEvent::MouseMove) {
|
||||
|
||||
#ifdef DRAG_DEBUG
|
||||
dbg() << "[WM] Dragging, origin: " << m_drag_origin << ", now: " << event.position();
|
||||
if (m_drag_window->is_maximized()) {
|
||||
dbg() << " [!] The window is still maximized. Not dragging yet.";
|
||||
}
|
||||
#endif
|
||||
Point pos = m_drag_window_origin.translated(event.position() - m_drag_origin);
|
||||
m_drag_window->set_position_without_repaint(pos);
|
||||
if (m_drag_window->rect().contains(event.position()))
|
||||
hovered_window = m_drag_window;
|
||||
return true;
|
||||
if (m_drag_window->is_maximized()) {
|
||||
auto pixels_moved_from_start = event.position().pixels_moved(m_drag_origin);
|
||||
// dbg() << "[WM] " << pixels_moved_from_start << " moved since start of drag";
|
||||
if (pixels_moved_from_start > 5) {
|
||||
// dbg() << "[WM] de-maximizing window";
|
||||
m_drag_origin = event.position();
|
||||
auto width_before_resize = m_drag_window->width();
|
||||
m_drag_window->set_maximized(false);
|
||||
m_drag_window->move_to(m_drag_origin.x() - (m_drag_window->width() * ((float)m_drag_origin.x() / width_before_resize)), m_drag_origin.y());
|
||||
m_drag_window_origin = m_drag_window->position();
|
||||
}
|
||||
} else {
|
||||
Point pos = m_drag_window_origin.translated(event.position() - m_drag_origin);
|
||||
m_drag_window->set_position_without_repaint(pos);
|
||||
if (m_drag_window->rect().contains(event.position()))
|
||||
hovered_window = m_drag_window;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue