[Libreoffice-commits] core.git: Branch 'libreoffice-7-0' - vcl/inc vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed Sep 30 08:23:54 UTC 2020


 vcl/inc/unx/gtk/gtkframe.hxx  |    3 +++
 vcl/unx/gtk3/gtk3gtkframe.cxx |   41 +++++++++++++++++++++++++++--------------
 2 files changed, 30 insertions(+), 14 deletions(-)

New commits:
commit 831a9b465ac82ec8d27186329d6596ef5e9e4601
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Sep 29 12:30:18 2020 +0100
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Wed Sep 30 10:23:20 2020 +0200

    gdk_wayland_window_set_application_id doesn't work when called early
    
    after mapped it definitely works
    
    Change-Id: Ide0fa636ee26acea0d938aef08532b9396fe901a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103579
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index fa08c1e64617..aad22afa85e2 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -209,6 +209,7 @@ class GtkSalFrame final : public SalFrame
     GtkDropTarget*                  m_pDropTarget;
     GtkDragSource*                  m_pDragSource;
     bool                            m_bGeometryIsProvisional;
+    bool                            m_bIconSetWhileUnmapped;
 
     GtkSalMenu*                     m_pSalMenu;
 
@@ -319,6 +320,8 @@ class GtkSalFrame final : public SalFrame
 
     void SetScreen( unsigned int nNewScreen, SetType eType, tools::Rectangle const *pSize = nullptr );
 
+    void SetIcon(const char* pIcon);
+
 public:
     cairo_surface_t*                m_pSurface;
     basegfx::B2IVector              m_aFrameSize;
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 22ea69f31d7b..803ae198de2e 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -929,6 +929,7 @@ void GtkSalFrame::InitCommon()
     m_pDropTarget       = nullptr;
     m_pDragSource       = nullptr;
     m_bGeometryIsProvisional = false;
+    m_bIconSetWhileUnmapped = false;
     m_bTooltipBlocked   = false;
     m_ePointerStyle     = static_cast<PointerStyle>(0xffff);
     m_pSalMenu          = nullptr;
@@ -1227,6 +1228,28 @@ void GtkSalFrame::SetTitle( const OUString& rTitle )
     }
 }
 
+void GtkSalFrame::SetIcon(const char* appicon)
+{
+    gtk_window_set_icon_name(GTK_WINDOW(m_pWindow), appicon);
+
+#if defined(GDK_WINDOWING_WAYLAND)
+    if (DLSYM_GDK_IS_WAYLAND_DISPLAY(getGdkDisplay()))
+    {
+        static auto set_application_id = reinterpret_cast<void (*) (GdkWindow*, const char*)>(
+                                             dlsym(nullptr, "gdk_wayland_window_set_application_id"));
+        if (set_application_id)
+        {
+            GdkWindow* gdkWindow = gtk_widget_get_window(m_pWindow);
+            set_application_id(gdkWindow, appicon);
+
+            // gdk_wayland_window_set_application_id doesn't seem to work before
+            // the window is mapped, so set this for real when/if we are mapped
+            m_bIconSetWhileUnmapped = !gtk_widget_get_mapped(m_pWindow);
+        }
+    }
+#endif
+}
+
 void GtkSalFrame::SetIcon( sal_uInt16 nIcon )
 {
     if( (m_nStyle & (SalFrameStyleFlags::PLUG|SalFrameStyleFlags::SYSTEMCHILD|SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::INTRO|SalFrameStyleFlags::OWNERDRAWDECORATION))
@@ -1250,20 +1273,7 @@ void GtkSalFrame::SetIcon( sal_uInt16 nIcon )
     else
         appicon = g_strdup ("libreoffice-startcenter");
 
-    gtk_window_set_icon_name (GTK_WINDOW (m_pWindow), appicon);
-
-#if defined(GDK_WINDOWING_WAYLAND)
-    if (DLSYM_GDK_IS_WAYLAND_DISPLAY(getGdkDisplay()))
-    {
-        static auto set_application_id = reinterpret_cast<void (*) (GdkWindow*, const char*)>(
-                                             dlsym(nullptr, "gdk_wayland_window_set_application_id"));
-        if (set_application_id)
-        {
-            GdkWindow* gdkWindow = gtk_widget_get_window(m_pWindow);
-            set_application_id(gdkWindow, appicon);
-        }
-    }
-#endif
+    SetIcon(appicon);
 
     g_free (appicon);
 }
@@ -3147,6 +3157,9 @@ gboolean GtkSalFrame::signalMap(GtkWidget *, GdkEvent*, gpointer frame)
 {
     GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
 
+    if (pThis->m_bIconSetWhileUnmapped)
+        pThis->SetIcon(gtk_window_get_icon_name(GTK_WINDOW(pThis->m_pWindow)));
+
     pThis->CallCallbackExc( SalEvent::Resize, nullptr );
     pThis->TriggerPaintEvent();
 


More information about the Libreoffice-commits mailing list