1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 07:07:45 +00:00

Taskbar: More bringup work. We now see a basic window list.

This commit is contained in:
Andreas Kling 2019-04-04 01:44:35 +02:00
parent ea801a99dc
commit 96104b5524
20 changed files with 339 additions and 12 deletions

View file

@ -34,6 +34,9 @@ void GBoxLayout::run(GWidget& widget)
dbgprintf("GBoxLayout: Starting with available size: %s\n", available_size.to_string().characters());
for (auto& entry : m_entries) {
if (!entry.widget)
continue;
if (!entry.widget->is_visible())
continue;
++number_of_visible_entries;
@ -81,6 +84,8 @@ void GBoxLayout::run(GWidget& widget)
int current_y = margins().top();
for (auto& entry : m_entries) {
if (!entry.widget)
continue;
if (!entry.widget->is_visible())
continue;
Rect rect(current_x, current_y, 0, 0);

View file

@ -268,6 +268,17 @@ void GEventLoop::handle_menu_event(const WSAPI_ServerMessage& event)
ASSERT_NOT_REACHED();
}
void GEventLoop::handle_wm_event(const WSAPI_ServerMessage& event, GWindow& window)
{
if (event.type == WSAPI_ServerMessage::WM_WindowAdded)
return post_event(window, make<GWMWindowAddedEvent>(event.wm.client_id, event.wm.window_id, String(event.text, event.text_length), event.wm.rect));
if (event.type == WSAPI_ServerMessage::WM_WindowStateChanged)
return post_event(window, make<GWMWindowStateChangedEvent>(event.wm.client_id, event.wm.window_id, String(event.text, event.text_length), event.wm.rect));
if (event.type == WSAPI_ServerMessage::WM_WindowRemoved)
return post_event(window, make<GWMWindowRemovedEvent>(event.wm.client_id, event.wm.window_id));
ASSERT_NOT_REACHED();
}
void GEventLoop::wait_for_event()
{
fd_set rfds;
@ -397,6 +408,11 @@ void GEventLoop::process_unprocessed_messages()
case WSAPI_ServerMessage::Type::WindowResized:
handle_resize_event(event, *window);
break;
case WSAPI_ServerMessage::Type::WM_WindowAdded:
case WSAPI_ServerMessage::Type::WM_WindowRemoved:
case WSAPI_ServerMessage::Type::WM_WindowStateChanged:
handle_wm_event(event, *window);
break;
default:
break;
}

View file

@ -60,6 +60,7 @@ private:
void handle_window_close_request_event(const WSAPI_ServerMessage&, GWindow&);
void handle_menu_event(const WSAPI_ServerMessage&);
void handle_window_entered_or_left_event(const WSAPI_ServerMessage&, GWindow&);
void handle_wm_event(const WSAPI_ServerMessage&, GWindow&);
void get_next_timer_expiration(timeval&);
void connect_to_server();

View file

@ -40,6 +40,15 @@ void GLayout::add_widget(GWidget& widget)
m_owner->notify_layout_changed(Badge<GLayout>());
}
void GLayout::remove_widget(GWidget& widget)
{
m_entries.remove_first_matching([&] (auto& entry) {
return entry.widget.ptr() == &widget;
});
if (m_owner)
m_owner->notify_layout_changed(Badge<GLayout>());
}
void GLayout::set_spacing(int spacing)
{
if (m_spacing == spacing)

View file

@ -16,6 +16,8 @@ public:
void add_widget(GWidget&);
void add_layout(OwnPtr<GLayout>&&);
void remove_widget(GWidget&);
virtual void run(GWidget&) = 0;
void notify_adopted(Badge<GWidget>, GWidget&);

View file

@ -27,6 +27,10 @@ void GWidget::child_event(GChildEvent& event)
if (event.child() && event.child()->is_widget() && layout())
layout()->add_widget(static_cast<GWidget&>(*event.child()));
}
if (event.type() == GEvent::ChildRemoved) {
if (event.child() && event.child()->is_widget() && layout())
layout()->remove_widget(static_cast<GWidget&>(*event.child()));
}
return GObject::child_event(event);
}