1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-26 01:25:08 +00:00

WSWindowManager: Add double click to maximize/restore

This commit is contained in:
Robin Burchell 2019-05-18 15:42:26 +02:00 committed by Andreas Kling
parent 316fb624f7
commit ec0d598934
2 changed files with 59 additions and 38 deletions

View file

@ -547,7 +547,7 @@ void WSWindowManager::start_window_resize(WSWindow& window, const WSMouseEvent&
start_window_resize(window, event.position(), event.button());
}
bool WSWindowManager::process_ongoing_window_drag(const WSMouseEvent& event, WSWindow*& hovered_window)
bool WSWindowManager::process_ongoing_window_drag(WSMouseEvent& event, WSWindow*& hovered_window)
{
if (!m_drag_window)
return false;
@ -558,6 +558,19 @@ bool WSWindowManager::process_ongoing_window_drag(const WSMouseEvent& event, WSW
invalidate(*m_drag_window);
if (m_drag_window->rect().contains(event.position()))
hovered_window = m_drag_window;
if (m_drag_window->is_resizable()) {
process_event_for_doubleclick(*m_drag_window, event);
if (event.type() == WSEvent::MouseDoubleClick) {
#if defined(DOUBLECLICK_DEBUG)
dbgprintf("[WM] Click up became doubleclick!\n");
#endif
if (m_drag_window->is_maximized()) {
m_drag_window->set_maximized(false);
} else {
m_drag_window->set_maximized(true);
}
}
}
m_drag_window = nullptr;
return true;
}
@ -692,9 +705,11 @@ CElapsedTimer& WSWindowManager::DoubleClickInfo::click_clock(MouseButton button)
// #define DOUBLECLICK_DEBUG
void WSWindowManager::deliver_mouse_event(WSWindow& window, WSMouseEvent& event)
void WSWindowManager::process_event_for_doubleclick(WSWindow& window, WSMouseEvent& event)
{
if (event.type() == WSEvent::MouseUp) {
// We only care about button presses (because otherwise it's not a doubleclick, duh!)
ASSERT(event.type() == WSEvent::MouseUp);
if (&window != m_double_click_info.m_clicked_window) {
// we either haven't clicked anywhere, or we haven't clicked on this
// window. set the current click window, and reset the timers.
@ -732,6 +747,11 @@ void WSWindowManager::deliver_mouse_event(WSWindow& window, WSMouseEvent& event)
}
}
void WSWindowManager::deliver_mouse_event(WSWindow& window, WSMouseEvent& event)
{
if (event.type() == WSEvent::MouseUp) {
process_event_for_doubleclick(window, event);
}
window.event(event);
}

View file

@ -127,9 +127,10 @@ public:
private:
void process_mouse_event(WSMouseEvent&, WSWindow*& hovered_window);
void process_event_for_doubleclick(WSWindow& window, WSMouseEvent& event);
void deliver_mouse_event(WSWindow& window, WSMouseEvent& event);
bool process_ongoing_window_resize(const WSMouseEvent&, WSWindow*& hovered_window);
bool process_ongoing_window_drag(const WSMouseEvent&, WSWindow*& hovered_window);
bool process_ongoing_window_drag(WSMouseEvent&, WSWindow*& hovered_window);
void handle_menu_mouse_event(WSMenu&, const WSMouseEvent&);
void handle_menubar_mouse_event(const WSMouseEvent&);
void handle_close_button_mouse_event(WSWindow&, const WSMouseEvent&);