mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:47:44 +00:00
WindowServer/LibGUI: Enforce minimum window size
This commit is contained in:
parent
71d6459b7f
commit
3474d7c88e
3 changed files with 22 additions and 10 deletions
|
@ -167,13 +167,13 @@ void Window::set_rect(const Gfx::Rect& a_rect)
|
||||||
m_main_widget->resize(m_rect_when_windowless.size());
|
m_main_widget->resize(m_rect_when_windowless.size());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowRect>(m_window_id, a_rect);
|
auto window_rect = WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowRect>(m_window_id, a_rect)->rect();
|
||||||
if (m_back_bitmap && m_back_bitmap->size() != a_rect.size())
|
if (m_back_bitmap && m_back_bitmap->size() != window_rect.size())
|
||||||
m_back_bitmap = nullptr;
|
m_back_bitmap = nullptr;
|
||||||
if (m_front_bitmap && m_front_bitmap->size() != a_rect.size())
|
if (m_front_bitmap && m_front_bitmap->size() != window_rect.size())
|
||||||
m_front_bitmap = nullptr;
|
m_front_bitmap = nullptr;
|
||||||
if (m_main_widget)
|
if (m_main_widget)
|
||||||
m_main_widget->resize(a_rect.size());
|
m_main_widget->resize(window_rect.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::set_window_type(WindowType window_type)
|
void Window::set_window_type(WindowType window_type)
|
||||||
|
|
|
@ -50,6 +50,15 @@ namespace WindowServer {
|
||||||
|
|
||||||
HashMap<int, NonnullRefPtr<ClientConnection>>* s_connections;
|
HashMap<int, NonnullRefPtr<ClientConnection>>* s_connections;
|
||||||
|
|
||||||
|
static Gfx::Rect normalize_window_rect(Gfx::Rect rect, WindowType window_type)
|
||||||
|
{
|
||||||
|
auto min_size = 1;
|
||||||
|
if (window_type == WindowType::Normal)
|
||||||
|
min_size = 50;
|
||||||
|
Gfx::Rect normalized_rect = { rect.x(), rect.y(), max(rect.width(), min_size), max(rect.height(), min_size) };
|
||||||
|
return normalized_rect;
|
||||||
|
}
|
||||||
|
|
||||||
void ClientConnection::for_each_client(Function<void(ClientConnection&)> callback)
|
void ClientConnection::for_each_client(Function<void(ClientConnection&)> callback)
|
||||||
{
|
{
|
||||||
if (!s_connections)
|
if (!s_connections)
|
||||||
|
@ -388,9 +397,10 @@ OwnPtr<Messages::WindowServer::SetWindowRectResponse> ClientConnection::handle(c
|
||||||
dbg() << "ClientConnection: Ignoring SetWindowRect request for fullscreen window";
|
dbg() << "ClientConnection: Ignoring SetWindowRect request for fullscreen window";
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
window.set_rect(message.rect());
|
auto normalized_rect = normalize_window_rect(message.rect(), window.type());
|
||||||
window.request_update(message.rect());
|
window.set_rect(normalized_rect);
|
||||||
return make<Messages::WindowServer::SetWindowRectResponse>();
|
window.request_update(normalized_rect);
|
||||||
|
return make<Messages::WindowServer::SetWindowRectResponse>(normalized_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
OwnPtr<Messages::WindowServer::GetWindowRectResponse> ClientConnection::handle(const Messages::WindowServer::GetWindowRect& message)
|
OwnPtr<Messages::WindowServer::GetWindowRectResponse> ClientConnection::handle(const Messages::WindowServer::GetWindowRect& message)
|
||||||
|
@ -444,8 +454,10 @@ OwnPtr<Messages::WindowServer::CreateWindowResponse> ClientConnection::handle(co
|
||||||
auto window = Window::construct(*this, (WindowType)message.type(), window_id, message.modal(), message.minimizable(), message.resizable(), message.fullscreen());
|
auto window = Window::construct(*this, (WindowType)message.type(), window_id, message.modal(), message.minimizable(), message.resizable(), message.fullscreen());
|
||||||
window->set_has_alpha_channel(message.has_alpha_channel());
|
window->set_has_alpha_channel(message.has_alpha_channel());
|
||||||
window->set_title(message.title());
|
window->set_title(message.title());
|
||||||
if (!message.fullscreen())
|
if (!message.fullscreen()) {
|
||||||
window->set_rect(message.rect());
|
auto normalized_rect = normalize_window_rect(message.rect(), window->type());
|
||||||
|
window->set_rect(normalized_rect);
|
||||||
|
}
|
||||||
if (window->type() == WindowType::Desktop) {
|
if (window->type() == WindowType::Desktop) {
|
||||||
window->set_rect(WindowManager::the().desktop_rect());
|
window->set_rect(WindowManager::the().desktop_rect());
|
||||||
window->recalculate_rect();
|
window->recalculate_rect();
|
||||||
|
|
|
@ -48,7 +48,7 @@ endpoint WindowServer = 2
|
||||||
SetWindowTitle(i32 window_id, String title) => ()
|
SetWindowTitle(i32 window_id, String title) => ()
|
||||||
GetWindowTitle(i32 window_id) => (String title)
|
GetWindowTitle(i32 window_id) => (String title)
|
||||||
|
|
||||||
SetWindowRect(i32 window_id, Gfx::Rect rect) => ()
|
SetWindowRect(i32 window_id, Gfx::Rect rect) => (Gfx::Rect rect)
|
||||||
GetWindowRect(i32 window_id) => (Gfx::Rect rect)
|
GetWindowRect(i32 window_id) => (Gfx::Rect rect)
|
||||||
|
|
||||||
InvalidateRect(i32 window_id, Vector<Gfx::Rect> rects, bool ignore_occlusion) =|
|
InvalidateRect(i32 window_id, Vector<Gfx::Rect> rects, bool ignore_occlusion) =|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue