Ver código fonte

LibGUI: Allow setting window icon before show().

rhin123 6 anos atrás
pai
commit
c02868f000
2 arquivos alterados com 15 adições e 3 exclusões
  1. 14 3
      Libraries/LibGUI/GWindow.cpp
  2. 1 0
      Libraries/LibGUI/GWindow.h

+ 14 - 3
Libraries/LibGUI/GWindow.cpp

@@ -87,6 +87,8 @@ void GWindow::show()
     auto response = GWindowServerConnection::the().sync_request(request, WSAPI_ServerMessage::Type::DidCreateWindow);
     m_window_id = response.window_id;
 
+    apply_icon();
+
     reified_windows.set(m_window_id, this);
     update();
 }
@@ -626,8 +628,6 @@ void GWindow::set_icon(const GraphicsBitmap* icon)
 {
     if (m_icon == icon)
         return;
-    if (!m_window_id)
-        return;
 
     m_icon = create_shared_bitmap(GraphicsBitmap::Format::RGBA32, icon->size());
     {
@@ -635,6 +635,17 @@ void GWindow::set_icon(const GraphicsBitmap* icon)
         painter.blit({ 0, 0 }, *icon, icon->rect());
     }
 
+    apply_icon();
+}
+
+void GWindow::apply_icon()
+{
+    if (!m_icon)
+        return;
+
+    if (!m_window_id)
+        return;
+
     int rc = seal_shared_buffer(m_icon->shared_buffer_id());
     ASSERT(rc == 0);
 
@@ -649,7 +660,7 @@ void GWindow::set_icon(const GraphicsBitmap* icon)
     message.type = WSAPI_ClientMessage::Type::SetWindowIconBitmap;
     message.window_id = m_window_id;
     message.window.icon_buffer_id = m_icon->shared_buffer_id();
-    message.window.icon_size = icon->size();
+    message.window.icon_size = m_icon->size();
     GWindowServerConnection::the().post_message_to_server(message);
 }
 

+ 1 - 0
Libraries/LibGUI/GWindow.h

@@ -120,6 +120,7 @@ public:
     void set_override_cursor(GStandardCursor);
 
     void set_icon(const GraphicsBitmap*);
+    void apply_icon();
     const GraphicsBitmap* icon() const { return m_icon.ptr(); }
 
     Vector<GWidget*> focusable_widgets() const;