Resolves: rhbz#1392145 ensure titlebar close button matches 'outside' direction

f41
Caolán McNamara 7 years ago
parent 3315e4963c
commit 8d302346ed

@ -0,0 +1,120 @@
From af8675040370ab7911fe9045fe546338abee20d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 16 Mar 2018 16:50:42 +0000
Subject: [PATCH] rhbz#1392145 ensure titlebar close button matches 'outside'
direction
Change-Id: I20e925c58adb56acd4d1a63720d330c8b6613441
---
vcl/inc/unx/gtk/gtkframe.hxx | 1 +
vcl/source/app/svmain.cxx | 3 ++-
vcl/unx/gtk3/gtk3gtkframe.cxx | 32 +++++++++++++++++++++++++++++++-
3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 0c9b002cb264..bf0ade47db2a 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -173,6 +173,7 @@ class GtkSalFrame : public SalFrame
SalX11Screen m_nXScreen;
GtkWidget* m_pWindow;
#if GTK_CHECK_VERSION(3,0,0)
+ GtkHeaderBar* m_pHeaderBar;
GtkGrid* m_pTopLevelGrid;
#endif
GtkEventBox* m_pEventBox;
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx
index 8f546feb5f78..63931e8f23b2 100644
--- a/vcl/source/app/svmain.cxx
+++ b/vcl/source/app/svmain.cxx
@@ -31,7 +31,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/asyncnotification.hxx>
-
+#include <i18nlangtag/mslangid.hxx>
#include <unotools/syslocaleoptions.hxx>
#include <vcl/svapp.hxx>
#include <vcl/vclmain.hxx>
@@ -335,6 +335,7 @@ bool InitVCL()
OUString aLocaleString(SvtSysLocaleOptions().GetRealUILanguageTag().getGlibcLocaleString(".UTF-8"));
if (!aLocaleString.isEmpty())
{
+ MsLangId::getSystemUILanguage(); //call this now to pin what the system UI really was
OUString envVar("LANGUAGE");
osl_setEnvironment(envVar.pData, aLocaleString.pData);
}
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 27a65caa3612..c8c98f5c5255 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -74,6 +74,8 @@
# include <cstdio>
#endif
+#include <i18nlangtag/mslangid.hxx>
+
#include <cstdlib>
#include <cmath>
@@ -477,6 +479,7 @@ bool GtkSalFrame::doKeyCallback( guint state,
GtkSalFrame::GtkSalFrame( SalFrame* pParent, SalFrameStyleFlags nStyle )
: m_nXScreen( getDisplay()->GetDefaultXScreen() )
+ , m_pHeaderBar(nullptr)
, m_pGraphics(nullptr)
, m_bGraphics(false)
{
@@ -489,6 +492,7 @@ GtkSalFrame::GtkSalFrame( SalFrame* pParent, SalFrameStyleFlags nStyle )
GtkSalFrame::GtkSalFrame( SystemParentData* pSysData )
: m_nXScreen( getDisplay()->GetDefaultXScreen() )
+ , m_pHeaderBar(nullptr)
, m_pGraphics(nullptr)
, m_bGraphics(false)
{
@@ -1241,6 +1245,27 @@ void GtkSalFrame::Init( SalFrame* pParent, SalFrameStyleFlags nStyle )
gtk_window_set_type_hint( GTK_WINDOW(m_pWindow), eType );
gtk_window_set_gravity( GTK_WINDOW(m_pWindow), GDK_GRAVITY_STATIC );
gtk_window_set_resizable( GTK_WINDOW(m_pWindow), bool(nStyle & SalFrameStyleFlags::SIZEABLE) );
+
+#if defined(GDK_WINDOWING_WAYLAND)
+ //rhbz#1392145 under wayland/csd if we've overridden the default widget direction in order to set LibreOffice's
+ //UI to the configured ui language but the system ui locale is a different text direction, then the toplevel
+ //built-in close button of the titlebar follows the overridden direction rather than continue in the same
+ //direction as every other titlebar on the user's desktop. So if they don't match set an explicit
+ //header bar with the desired 'outside' direction
+ if ((eType == GDK_WINDOW_TYPE_HINT_NORMAL || eType == GDK_WINDOW_TYPE_HINT_DIALOG) && GDK_IS_WAYLAND_DISPLAY(GtkSalFrame::getGdkDisplay()))
+ {
+ const bool bDesktopIsRTL = MsLangId::isRightToLeft(MsLangId::getSystemUILanguage());
+ const bool bAppIsRTL = gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL;
+ if (bDesktopIsRTL != bAppIsRTL)
+ {
+ m_pHeaderBar = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_widget_set_direction(GTK_WIDGET(m_pHeaderBar), bDesktopIsRTL ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR);
+ gtk_header_bar_set_show_close_button(m_pHeaderBar, true);
+ gtk_window_set_titlebar(GTK_WINDOW(m_pWindow), GTK_WIDGET(m_pHeaderBar));
+ gtk_widget_show(GTK_WIDGET(m_pHeaderBar));
+ }
+ }
+#endif
}
else if( nStyle & SalFrameStyleFlags::FLOAT )
gtk_window_set_type_hint( GTK_WINDOW(m_pWindow), GDK_WINDOW_TYPE_HINT_POPUP_MENU );
@@ -1332,7 +1357,12 @@ void GtkSalFrame::SetTitle( const OUString& rTitle )
{
m_aTitle = rTitle;
if( m_pWindow && ! isChild() )
- gtk_window_set_title( GTK_WINDOW(m_pWindow), OUStringToOString( rTitle, RTL_TEXTENCODING_UTF8 ).getStr() );
+ {
+ OString sTitle(OUStringToOString(rTitle, RTL_TEXTENCODING_UTF8));
+ gtk_window_set_title(GTK_WINDOW(m_pWindow), sTitle.getStr());
+ if (m_pHeaderBar)
+ gtk_header_bar_set_title(m_pHeaderBar, sTitle.getStr());
+ }
}
void GtkSalFrame::SetIcon( sal_uInt16 nIcon )
--
2.14.3

@ -62,7 +62,7 @@ Summary: Free Software Productivity Suite
Name: libreoffice
Epoch: 1
Version: %{libo_version}.1
Release: 2%{?libo_prerelease}%{?dist}
Release: 3%{?libo_prerelease}%{?dist}
License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and MPLv2.0 and CC0
URL: http://www.libreoffice.org/
@ -276,6 +276,7 @@ Patch4: 0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch
Patch5: 0001-request-installation-of-langpack-via-packagekit.patch
Patch6: 0001-Update-orcus-to-0.13.3-and-make-necessary-adjustment.patch
Patch7: 0001-sdk-lib-dir-missing-from-Linux-installation-sets.patch
Patch8: 0001-rhbz-1392145-ensure-titlebar-close-button-matches-ou.patch
%if 0%{?rhel}
# not upstreamed
@ -2329,6 +2330,9 @@ done
%{_includedir}/LibreOfficeKit
%changelog
* Fri Mar 16 2018 Caolán McNamara <caolanm@redhat.com> - 1:6.0.2.1-3-UNBUILT
- Resolves: rhbz#1392145 ensure titlebar close button matches 'outside' direction
* Fri Mar 16 2018 Stephan Bergmann <sbergman@redhat.com> - 1:6.0.2.1-2
- lib dir missing from libreoffice-sdk

Loading…
Cancel
Save