mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-20 00:12:20 +00:00
WindowServer: Restore modal chains from the Taskbar and Switcher
And only show modeless windows in WindowSwitcher.
This commit is contained in:
parent
5a0472d8d2
commit
6f316d59f4
|
@ -63,8 +63,7 @@ void WMConnectionFromClient::set_active_window(i32 client_id, i32 window_id)
|
|||
return;
|
||||
}
|
||||
auto& window = *(*it).value;
|
||||
WindowManager::the().minimize_windows(window, false);
|
||||
WindowManager::the().move_to_front_and_make_active(window);
|
||||
WindowManager::the().restore_modal_chain(window);
|
||||
}
|
||||
|
||||
void WMConnectionFromClient::popup_window_menu(i32 client_id, i32 window_id, Gfx::IntPoint const& screen_position)
|
||||
|
|
|
@ -2124,6 +2124,16 @@ void WindowManager::did_popup_a_menu(Badge<Menu>)
|
|||
set_automatic_cursor_tracking_window(nullptr);
|
||||
}
|
||||
|
||||
void WindowManager::restore_modal_chain(Window& window)
|
||||
{
|
||||
for_each_window_in_modal_chain(window, [&](auto& w) {
|
||||
w.set_minimized(false);
|
||||
w.window_stack().move_to_front(w);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
move_to_front_and_make_active(window);
|
||||
}
|
||||
|
||||
void WindowManager::minimize_windows(Window& window, bool minimized)
|
||||
{
|
||||
for_each_window_in_modal_chain(window, [&](auto& w) {
|
||||
|
|
|
@ -233,6 +233,7 @@ public:
|
|||
void start_menu_doubleclick(Window& window, MouseEvent const& event);
|
||||
bool is_menu_doubleclick(Window& window, MouseEvent const& event) const;
|
||||
|
||||
void restore_modal_chain(Window&);
|
||||
void minimize_windows(Window&, bool);
|
||||
void hide_windows(Window&, bool);
|
||||
void maximize_windows(Window&, bool);
|
||||
|
|
|
@ -90,8 +90,7 @@ void WindowSwitcher::on_key_event(KeyEvent const& event)
|
|||
if (event.type() == Event::KeyUp) {
|
||||
if (event.key() == (m_mode == Mode::ShowAllWindows ? Key_Super : Key_Alt)) {
|
||||
if (auto* window = selected_window()) {
|
||||
window->set_minimized(false);
|
||||
WindowManager::the().move_to_front_and_make_active(*window);
|
||||
WindowManager::the().restore_modal_chain(*window);
|
||||
}
|
||||
WindowManager::the().set_highlight_window(nullptr);
|
||||
hide();
|
||||
|
@ -227,7 +226,7 @@ void WindowSwitcher::refresh()
|
|||
auto add_window_stack_windows = [&](WindowStack& window_stack) {
|
||||
window_stack.for_each_window_of_type_from_front_to_back(
|
||||
WindowType::Normal, [&](Window& window) {
|
||||
if (window.is_frameless())
|
||||
if (window.is_frameless() || window.is_modal())
|
||||
return IterationDecision::Continue;
|
||||
++window_count;
|
||||
longest_title_width = max(longest_title_width, wm.font().width(window.computed_title()));
|
||||
|
|
Loading…
Reference in a new issue