|
 |
d289e2 |
From f1cace2cd06b20fc1431f15892a4293fa3601b39 Mon Sep 17 00:00:00 2001
|
|
 |
d289e2 |
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
 |
d289e2 |
Date: Wed, 8 Jul 2020 10:13:26 +0100
|
|
 |
d289e2 |
Subject: [PATCH] use gdk_wayland_window_set_application_id when it becomes
|
|
 |
d289e2 |
available
|
|
 |
d289e2 |
MIME-Version: 1.0
|
|
 |
d289e2 |
Content-Type: text/plain; charset=UTF-8
|
|
 |
d289e2 |
Content-Transfer-Encoding: 8bit
|
|
 |
d289e2 |
|
|
 |
d289e2 |
Change-Id: I60775dcbfbc396f195a71f219668944d0bfecf31
|
|
 |
d289e2 |
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98325
|
|
 |
d289e2 |
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
|
 |
d289e2 |
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
|
 |
d289e2 |
(cherry picked from commit 2d8e2813ddc87f7ce03b97e4d603df11613461f0)
|
|
 |
d289e2 |
|
|
 |
d289e2 |
gdk_wayland_window_set_application_id doesn't work when called early
|
|
 |
d289e2 |
|
|
 |
d289e2 |
after mapped it definitely works
|
|
 |
d289e2 |
|
|
 |
d289e2 |
Change-Id: Ide0fa636ee26acea0d938aef08532b9396fe901a
|
|
 |
d289e2 |
---
|
|
 |
d289e2 |
vcl/inc/unx/gtk/gtkframe.hxx | 3 +++
|
|
 |
d289e2 |
vcl/unx/gtk3/gtk3gtkframe.cxx | 49 +++++++++++++++++++++++++++++------
|
|
 |
d289e2 |
2 files changed, 44 insertions(+), 8 deletions(-)
|
|
 |
d289e2 |
|
|
 |
d289e2 |
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
d289e2 |
index ccf9064..49b6937 100644
|
|
 |
d289e2 |
--- a/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
d289e2 |
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
d289e2 |
@@ -206,6 +206,7 @@ class GtkSalFrame : public SalFrame
|
|
 |
d289e2 |
GtkDropTarget* m_pDropTarget;
|
|
 |
d289e2 |
GtkDragSource* m_pDragSource;
|
|
 |
d289e2 |
bool m_bGeometryIsProvisional;
|
|
 |
d289e2 |
+ bool m_bIconSetWhileUnmapped;
|
|
 |
d289e2 |
|
|
 |
d289e2 |
GtkSalMenu* m_pSalMenu;
|
|
 |
d289e2 |
|
|
 |
d289e2 |
@@ -315,6 +316,8 @@ class GtkSalFrame : public SalFrame
|
|
 |
d289e2 |
|
|
 |
d289e2 |
void SetScreen( unsigned int nNewScreen, SetType eType, tools::Rectangle const *pSize = nullptr );
|
|
 |
d289e2 |
|
|
 |
d289e2 |
+ void SetIcon(const char* pIcon);
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
public:
|
|
 |
d289e2 |
cairo_surface_t* m_pSurface;
|
|
 |
d289e2 |
basegfx::B2IVector m_aFrameSize;
|
|
 |
d289e2 |
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
|
|
 |
d289e2 |
index 786aa40..624c75a 100644
|
|
 |
d289e2 |
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
|
|
 |
d289e2 |
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
|
|
 |
d289e2 |
@@ -55,6 +55,7 @@
|
|
 |
d289e2 |
|
|
 |
d289e2 |
#include <cstdlib>
|
|
 |
d289e2 |
#include <cmath>
|
|
 |
d289e2 |
+#include <dlfcn.h>
|
|
 |
d289e2 |
|
|
 |
d289e2 |
#include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
|
|
 |
d289e2 |
#include <com/sun/star/awt/MouseButton.hpp>
|
|
 |
d289e2 |
@@ -922,6 +923,7 @@ void GtkSalFrame::InitCommon()
|
|
 |
d289e2 |
m_pDropTarget = nullptr;
|
|
 |
d289e2 |
m_pDragSource = nullptr;
|
|
 |
d289e2 |
m_bGeometryIsProvisional = false;
|
|
 |
d289e2 |
+ m_bIconSetWhileUnmapped = false;
|
|
 |
d289e2 |
m_ePointerStyle = static_cast<PointerStyle>(0xffff);
|
|
 |
d289e2 |
m_pSalMenu = nullptr;
|
|
 |
d289e2 |
m_nWatcherId = 0;
|
|
 |
d289e2 |
@@ -1217,6 +1219,28 @@ void GtkSalFrame::SetTitle( const OUString& rTitle )
|
|
 |
d289e2 |
}
|
|
 |
d289e2 |
}
|
|
 |
d289e2 |
|
|
 |
d289e2 |
+void GtkSalFrame::SetIcon(const char* appicon)
|
|
 |
d289e2 |
+{
|
|
 |
d289e2 |
+ gtk_window_set_icon_name(GTK_WINDOW(m_pWindow), appicon);
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
+#if defined(GDK_WINDOWING_WAYLAND)
|
|
 |
d289e2 |
+ if (DLSYM_GDK_IS_WAYLAND_DISPLAY(getGdkDisplay()))
|
|
 |
d289e2 |
+ {
|
|
 |
d289e2 |
+ static auto set_application_id = reinterpret_cast<void (*) (GdkWindow*, const char*)>(
|
|
 |
d289e2 |
+ dlsym(nullptr, "gdk_wayland_window_set_application_id"));
|
|
 |
d289e2 |
+ if (set_application_id)
|
|
 |
d289e2 |
+ {
|
|
 |
d289e2 |
+ GdkWindow* gdkWindow = gtk_widget_get_window(m_pWindow);
|
|
 |
d289e2 |
+ set_application_id(gdkWindow, appicon);
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
+ // gdk_wayland_window_set_application_id doesn't seem to work before
|
|
 |
d289e2 |
+ // the window is mapped, so set this for real when/if we are mapped
|
|
 |
d289e2 |
+ m_bIconSetWhileUnmapped = !gtk_widget_get_mapped(m_pWindow);
|
|
 |
d289e2 |
+ }
|
|
 |
d289e2 |
+ }
|
|
 |
d289e2 |
+#endif
|
|
 |
d289e2 |
+}
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
void GtkSalFrame::SetIcon( sal_uInt16 nIcon )
|
|
 |
d289e2 |
{
|
|
 |
d289e2 |
if( (m_nStyle & (SalFrameStyleFlags::PLUG|SalFrameStyleFlags::SYSTEMCHILD|SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::INTRO|SalFrameStyleFlags::OWNERDRAWDECORATION))
|
|
 |
d289e2 |
@@ -1240,7 +1264,8 @@ void GtkSalFrame::SetIcon( sal_uInt16 nIcon )
|
|
 |
d289e2 |
else
|
|
 |
d289e2 |
appicon = g_strdup ("libreoffice-startcenter");
|
|
 |
d289e2 |
|
|
 |
d289e2 |
- gtk_window_set_icon_name (GTK_WINDOW (m_pWindow), appicon);
|
|
 |
d289e2 |
+ SetIcon(appicon);
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
g_free (appicon);
|
|
 |
d289e2 |
}
|
|
 |
d289e2 |
|
|
 |
d289e2 |
@@ -1309,13 +1334,18 @@ void GtkSalFrame::Show( bool bVisible, bool /*bNoActivate*/ )
|
|
 |
d289e2 |
}
|
|
 |
d289e2 |
|
|
 |
d289e2 |
#if defined(GDK_WINDOWING_WAYLAND)
|
|
 |
d289e2 |
- //rhbz#1334915, gnome#779143, tdf#100158
|
|
 |
d289e2 |
- //gtk under wayland lacks a way to change the app_id
|
|
 |
d289e2 |
- //of a window, so brute force everything as a
|
|
 |
d289e2 |
- //startcenter when initially shown to at least get
|
|
 |
d289e2 |
- //the default LibreOffice icon and not the broken
|
|
 |
d289e2 |
- //app icon
|
|
 |
d289e2 |
- if (DLSYM_GDK_IS_WAYLAND_DISPLAY(getGdkDisplay()))
|
|
 |
d289e2 |
+ /*
|
|
 |
d289e2 |
+ rhbz#1334915, gnome#779143, tdf#100158
|
|
 |
d289e2 |
+ https://gitlab.gnome.org/GNOME/gtk/-/issues/767
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
+ before gdk_wayland_window_set_application_id was available gtk
|
|
 |
d289e2 |
+ under wayland lacked a way to change the app_id of a window, so
|
|
 |
d289e2 |
+ brute force everything as a startcenter when initially shown to at
|
|
 |
d289e2 |
+ least get the default LibreOffice icon and not the broken app icon
|
|
 |
d289e2 |
+ */
|
|
 |
d289e2 |
+ static bool bAppIdImmutable = DLSYM_GDK_IS_WAYLAND_DISPLAY(getGdkDisplay()) &&
|
|
 |
d289e2 |
+ !dlsym(nullptr, "gdk_wayland_window_set_application_id");
|
|
 |
d289e2 |
+ if (bAppIdImmutable)
|
|
 |
d289e2 |
{
|
|
 |
d289e2 |
OString sOrigName(g_get_prgname());
|
|
 |
d289e2 |
g_set_prgname("libreoffice-startcenter");
|
|
 |
d289e2 |
@@ -3039,6 +3069,9 @@ gboolean GtkSalFrame::signalMap(GtkWidget *, GdkEvent*, gpointer frame)
|
|
 |
d289e2 |
{
|
|
 |
d289e2 |
GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
|
|
 |
d289e2 |
|
|
 |
d289e2 |
+ if (pThis->m_bIconSetWhileUnmapped)
|
|
 |
d289e2 |
+ pThis->SetIcon(gtk_window_get_icon_name(GTK_WINDOW(pThis->m_pWindow)));
|
|
 |
d289e2 |
+
|
|
 |
d289e2 |
pThis->CallCallbackExc( SalEvent::Resize, nullptr );
|
|
 |
d289e2 |
pThis->TriggerPaintEvent();
|
|
 |
d289e2 |
|
|
 |
d289e2 |
--
|
|
 |
d289e2 |
2.26.2
|
|
 |
d289e2 |
|