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:
parent
ea801a99dc
commit
96104b5524
20 changed files with 339 additions and 12 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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&);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue