1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:57:45 +00:00

WindowServer: Moving a window to front should always activate it.

So instead of having move_to_front() + set_active_window(), let's have
move_to_front_and_make_active().
This commit is contained in:
Andreas Kling 2019-03-24 13:09:46 +01:00
parent 56ee8bfe2a
commit e84823360d
3 changed files with 12 additions and 18 deletions

View file

@ -520,7 +520,7 @@ void WSWindowManager::add_window(WSWindow& window)
m_switcher.refresh(); m_switcher.refresh();
} }
void WSWindowManager::move_to_front(WSWindow& window) void WSWindowManager::move_to_front_and_make_active(WSWindow& window)
{ {
if (window.is_blocked_by_modal_window()) if (window.is_blocked_by_modal_window())
return; return;
@ -529,6 +529,8 @@ void WSWindowManager::move_to_front(WSWindow& window)
invalidate(window); invalidate(window);
m_windows_in_order.remove(&window); m_windows_in_order.remove(&window);
m_windows_in_order.append(&window); m_windows_in_order.append(&window);
set_active_window(&window);
} }
void WSWindowManager::remove_window(WSWindow& window) void WSWindowManager::remove_window(WSWindow& window)
@ -620,6 +622,7 @@ void WSWindowManager::start_window_drag(WSWindow& window, WSMouseEvent& event)
#ifdef DRAG_DEBUG #ifdef DRAG_DEBUG
printf("[WM] Begin dragging WSWindow{%p}\n", &window); printf("[WM] Begin dragging WSWindow{%p}\n", &window);
#endif #endif
move_to_front_and_make_active(window);
m_drag_window = window.make_weak_ptr();; m_drag_window = window.make_weak_ptr();;
m_drag_origin = event.position(); m_drag_origin = event.position();
m_drag_window_origin = window.position(); m_drag_window_origin = window.position();
@ -628,6 +631,7 @@ void WSWindowManager::start_window_drag(WSWindow& window, WSMouseEvent& event)
void WSWindowManager::start_window_resize(WSWindow& window, WSMouseEvent& event) void WSWindowManager::start_window_resize(WSWindow& window, WSMouseEvent& event)
{ {
move_to_front_and_make_active(window);
constexpr ResizeDirection direction_for_hot_area[3][3] = { constexpr ResizeDirection direction_for_hot_area[3][3] = {
{ ResizeDirection::UpLeft, ResizeDirection::Up, ResizeDirection::UpRight }, { ResizeDirection::UpLeft, ResizeDirection::Up, ResizeDirection::UpRight },
{ ResizeDirection::Left, ResizeDirection::None, ResizeDirection::Right }, { ResizeDirection::Left, ResizeDirection::None, ResizeDirection::Right },
@ -821,23 +825,17 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& event_
for_each_visible_window_from_front_to_back([&] (WSWindow& window) { for_each_visible_window_from_front_to_back([&] (WSWindow& window) {
if (window.type() == WSWindowType::Normal && outer_window_rect(window).contains(event.position())) { if (window.type() == WSWindowType::Normal && outer_window_rect(window).contains(event.position())) {
if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Left) { if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Left) {
move_to_front(window);
set_active_window(&window);
start_window_drag(window, event); start_window_drag(window, event);
return IterationDecision::Abort; return IterationDecision::Abort;
} }
if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Right && !window.is_blocked_by_modal_window()) { if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Right && !window.is_blocked_by_modal_window()) {
move_to_front(window);
set_active_window(&window);
start_window_resize(window, event); start_window_resize(window, event);
return IterationDecision::Abort; return IterationDecision::Abort;
} }
} }
if (window.type() == WSWindowType::Normal && title_bar_rect(window.rect()).contains(event.position())) { if (window.type() == WSWindowType::Normal && title_bar_rect(window.rect()).contains(event.position())) {
if (event.type() == WSMessage::MouseDown) { if (event.type() == WSMessage::MouseDown)
move_to_front(window); move_to_front_and_make_active(window);
set_active_window(&window);
}
if (close_button_rect_for_window(window.rect()).contains(event.position())) { if (close_button_rect_for_window(window.rect()).contains(event.position())) {
handle_close_button_mouse_event(window, event); handle_close_button_mouse_event(window, event);
return IterationDecision::Abort; return IterationDecision::Abort;
@ -848,10 +846,8 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& event_
} }
if (window.rect().contains(event.position())) { if (window.rect().contains(event.position())) {
if (window.type() == WSWindowType::Normal && event.type() == WSMessage::MouseDown) { if (window.type() == WSWindowType::Normal && event.type() == WSMessage::MouseDown)
move_to_front(window); move_to_front_and_make_active(window);
set_active_window(&window);
}
event_window = &window; event_window = &window;
if (!window.global_cursor_tracking()) { if (!window.global_cursor_tracking()) {
// FIXME: Should we just alter the coordinates of the existing MouseEvent and pass it through? // FIXME: Should we just alter the coordinates of the existing MouseEvent and pass it through?

View file

@ -49,7 +49,7 @@ public:
WSWindow* highlight_window() { return m_highlight_window.ptr(); } WSWindow* highlight_window() { return m_highlight_window.ptr(); }
void set_highlight_window(WSWindow*); void set_highlight_window(WSWindow*);
void move_to_front(WSWindow&); void move_to_front_and_make_active(WSWindow&);
void invalidate_cursor(); void invalidate_cursor();
void draw_cursor(); void draw_cursor();

View file

@ -34,10 +34,8 @@ void WSWindowSwitcher::on_key_event(const WSKeyEvent& event)
{ {
if (event.type() == WSMessage::KeyUp) { if (event.type() == WSMessage::KeyUp) {
if (event.key() == Key_Logo) { if (event.key() == Key_Logo) {
if (auto* window = selected_window()) { if (auto* window = selected_window())
WSWindowManager::the().set_active_window(window); WSWindowManager::the().move_to_front_and_make_active(*window);
WSWindowManager::the().move_to_front(*window);
}
WSWindowManager::the().set_highlight_window(nullptr); WSWindowManager::the().set_highlight_window(nullptr);
hide(); hide();
} }