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:
parent
368fe0f7f8
commit
1c31bcb24e
7 changed files with 39 additions and 2 deletions
|
@ -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())
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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) => ()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue