Skip to content

Commit

Permalink
WindowServer: Don't de-maximize windows immediately (SerenityOS#756)
Browse files Browse the repository at this point in the history
At least 5 pixels of dragging in some direction needed until a window
gets de-maximized.
  • Loading branch information
masi456 authored and awesomekling committed Nov 10, 2019
1 parent 18348ce commit 7e7451c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
10 changes: 10 additions & 0 deletions Libraries/LibDraw/Point.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,16 @@ class Point {
set_y(value);
}

// Returns pixels moved from other in either direction
int pixels_moved(const Point &other) const
{
auto pixels_moved = max(
abs(other.x() - x()),
abs(other.y() - y())
);
return pixels_moved;
}

private:
int m_x { 0 };
int m_y { 0 };
Expand Down
32 changes: 22 additions & 10 deletions Servers/WindowServer/WSWindowManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 7e7451c

Please sign in to comment.