1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 23:58:11 +00:00

WindowServer: Allow changing frameless state after a window is created

This commit is contained in:
Tom 2021-02-20 23:10:21 -07:00 committed by Andreas Kling
parent 368fe0f7f8
commit 1c31bcb24e
7 changed files with 39 additions and 2 deletions

View file

@ -871,6 +871,16 @@ void Window::set_fullscreen(bool fullscreen)
WindowServerConnection::the().send_sync<Messages::WindowServer::SetFullscreen>(m_window_id, fullscreen);
}
void Window::set_frameless(bool frameless)
{
if (m_frameless == frameless)
return;
m_frameless = frameless;
if (!is_visible())
return;
WindowServerConnection::the().send_sync<Messages::WindowServer::SetFrameless>(m_window_id, frameless);
}
bool Window::is_maximized() const
{
if (!is_visible())

View file

@ -58,7 +58,7 @@ public:
bool is_maximized() const;
bool is_frameless() const { return m_frameless; }
void set_frameless(bool frameless) { m_frameless = frameless; }
void set_frameless(bool);
bool is_resizable() const { return m_resizable; }
void set_resizable(bool resizable) { m_resizable = resizable; }

View file

@ -286,6 +286,18 @@ OwnPtr<Messages::WindowServer::SetFullscreenResponse> ClientConnection::handle(c
return make<Messages::WindowServer::SetFullscreenResponse>();
}
OwnPtr<Messages::WindowServer::SetFramelessResponse> ClientConnection::handle(const Messages::WindowServer::SetFrameless& message)
{
auto it = m_windows.find(message.window_id());
if (it == m_windows.end()) {
did_misbehave("SetFrameless: Bad window ID");
return {};
}
it->value->set_frameless(message.frameless());
WindowManager::the().tell_wm_listeners_window_state_changed(*it->value);
return make<Messages::WindowServer::SetFramelessResponse>();
}
OwnPtr<Messages::WindowServer::SetWindowOpacityResponse> ClientConnection::handle(const Messages::WindowServer::SetWindowOpacity& message)
{
auto it = m_windows.find(message.window_id());

View file

@ -125,6 +125,7 @@ private:
virtual OwnPtr<Messages::WindowServer::SetWindowAlphaHitThresholdResponse> handle(const Messages::WindowServer::SetWindowAlphaHitThreshold&) override;
virtual OwnPtr<Messages::WindowServer::MoveWindowToFrontResponse> handle(const Messages::WindowServer::MoveWindowToFront&) override;
virtual OwnPtr<Messages::WindowServer::SetFullscreenResponse> handle(const Messages::WindowServer::SetFullscreen&) override;
virtual OwnPtr<Messages::WindowServer::SetFramelessResponse> handle(const Messages::WindowServer::SetFrameless&) override;
virtual void handle(const Messages::WindowServer::AsyncSetWallpaper&) override;
virtual OwnPtr<Messages::WindowServer::SetBackgroundColorResponse> handle(const Messages::WindowServer::SetBackgroundColor&) override;
virtual OwnPtr<Messages::WindowServer::SetWallpaperModeResponse> handle(const Messages::WindowServer::SetWallpaperMode&) override;

View file

@ -500,6 +500,19 @@ void Window::set_visible(bool b)
Compositor::the().invalidate_screen(frame().render_rect());
}
void Window::set_frameless(bool frameless)
{
if (m_frameless == frameless)
return;
auto render_rect_before = frame().render_rect();
m_frameless = frameless;
if (m_visible) {
Compositor::the().invalidate_occlusions();
invalidate(true, true);
Compositor::the().invalidate_screen(frameless ? render_rect_before : frame().render_rect());
}
}
void Window::invalidate(bool invalidate_frame, bool re_render_frame)
{
m_invalidated = true;

View file

@ -299,7 +299,7 @@ public:
bool is_accessory() const;
bool is_accessory_of(Window&) const;
void set_frameless(bool frameless) { m_frameless = frameless; }
void set_frameless(bool);
bool is_frameless() const { return m_frameless; }
int progress() const { return m_progress; }

View file

@ -88,6 +88,7 @@ endpoint WindowServer = 2
SetWindowHasAlphaChannel(i32 window_id, bool has_alpha_channel) => ()
MoveWindowToFront(i32 window_id) => ()
SetFullscreen(i32 window_id, bool fullscreen) => ()
SetFrameless(i32 window_id, bool frameless) => ()
PopupMenu(i32 menu_id, Gfx::IntPoint screen_position) => ()
DismissMenu(i32 menu_id) => ()