mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 04:37:44 +00:00
WindowServer: Keep track of which WindowStack a Window is part of
Each Window now knows which WindowStack it's part of. We call this the Window::outer_stack(), in preparation for supporting inner stacks. :^)
This commit is contained in:
parent
d0bc3d6002
commit
2b0e0b602c
3 changed files with 11 additions and 1 deletions
|
@ -25,6 +25,7 @@ class Menu;
|
|||
class Menubar;
|
||||
class MenuItem;
|
||||
class MouseEvent;
|
||||
class WindowStack;
|
||||
|
||||
enum WMEventMask {
|
||||
WindowRectChanges = 1 << 0,
|
||||
|
@ -313,6 +314,10 @@ public:
|
|||
const Menubar* menubar() const { return m_menubar; }
|
||||
void set_menubar(Menubar*);
|
||||
|
||||
WindowStack* outer_stack() { return m_outer_stack; }
|
||||
WindowStack const* outer_stack() const { return m_outer_stack; }
|
||||
void set_outer_stack(Badge<WindowStack>, WindowStack* stack) { m_outer_stack = stack; }
|
||||
|
||||
private:
|
||||
Window(ClientConnection&, WindowType, int window_id, bool modal, bool minimizable, bool frameless, bool resizable, bool fullscreen, bool accessory, Window* parent_window = nullptr);
|
||||
Window(Core::Object&, WindowType);
|
||||
|
@ -394,6 +399,7 @@ private:
|
|||
int m_minimize_animation_step { -1 };
|
||||
Optional<int> m_progress;
|
||||
bool m_should_show_menubar { true };
|
||||
WindowStack* m_outer_stack { nullptr };
|
||||
|
||||
public:
|
||||
using List = IntrusiveList<Window, RawPtr<Window>, &Window::m_list_node>;
|
||||
|
|
|
@ -167,7 +167,7 @@ void WindowManager::add_window(Window& window)
|
|||
{
|
||||
bool is_first_window = m_window_stack.is_empty();
|
||||
|
||||
m_window_stack.windows().append(window);
|
||||
m_window_stack.add(window);
|
||||
|
||||
if (window.is_fullscreen()) {
|
||||
Core::EventLoop::current().post_event(window, make<ResizeEvent>(Screen::the().rect()));
|
||||
|
|
|
@ -18,12 +18,16 @@ WindowStack::~WindowStack()
|
|||
|
||||
void WindowStack::add(Window& window)
|
||||
{
|
||||
VERIFY(window.outer_stack() == nullptr);
|
||||
m_windows.append(window);
|
||||
window.set_outer_stack({}, this);
|
||||
}
|
||||
|
||||
void WindowStack::remove(Window& window)
|
||||
{
|
||||
VERIFY(window.outer_stack() == this);
|
||||
m_windows.remove(window);
|
||||
window.set_outer_stack({}, nullptr);
|
||||
}
|
||||
|
||||
void WindowStack::move_to_front(Window& window)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue