[Libreoffice-commits] core.git: vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue May 11 14:38:28 UTC 2021


 vcl/unx/gtk3/gtkdata.cxx |   27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

New commits:
commit 1821241f7c7c90784662be54dc3b42e4f9ca3ca3
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue May 11 14:01:52 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue May 11 16:37:32 2021 +0200

    gtk4: listen to monitors changing the new way
    
    Change-Id: Iab483c86a0d9810e801a19a9daf3cb9cc1632608
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115406
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/unx/gtk3/gtkdata.cxx b/vcl/unx/gtk3/gtkdata.cxx
index 4cea5bc5d223..2f0d949f0710 100644
--- a/vcl/unx/gtk3/gtkdata.cxx
+++ b/vcl/unx/gtk3/gtkdata.cxx
@@ -94,8 +94,15 @@ GtkSalDisplay::~GtkSalDisplay()
 #endif
 }
 
-#if !GTK_CHECK_VERSION(4, 0, 0)
-extern "C" {
+#if GTK_CHECK_VERSION(4, 0, 0)
+
+static void signalMonitorsChanged(GListModel*, gpointer data)
+{
+    GtkSalDisplay* pDisp = static_cast<GtkSalDisplay*>(data);
+    pDisp->emitDisplayChanged();
+}
+
+#else
 
 static void signalScreenSizeChanged( GdkScreen* pScreen, gpointer data )
 {
@@ -109,8 +116,6 @@ static void signalMonitorsChanged( GdkScreen* pScreen, gpointer data )
     pDisp->monitorsChanged( pScreen );
 }
 
-}
-
 GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* )
 {
     (void) this; // loplugin:staticmethods
@@ -569,7 +574,14 @@ void GtkSalData::Init()
     GtkSalDisplay *pDisplay = new GtkSalDisplay( pGdkDisp );
     SetDisplay( pDisplay );
 
-#if !GTK_CHECK_VERSION(4, 0, 0)
+#if GTK_CHECK_VERSION(4, 0, 0)
+    pDisplay->emitDisplayChanged();
+    GListModel *pMonitors = gdk_display_get_monitors(pGdkDisp);
+    g_signal_connect(pMonitors, "items-changed", G_CALLBACK(signalMonitorsChanged), pDisplay);
+
+    gtk_style_context_add_provider_for_display(pGdkDisp, CreateSmallButtonProvider(),
+            GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#else
     int nScreens = gdk_display_get_n_screens( pGdkDisp );
     for( int n = 0; n < nScreens; n++ )
     {
@@ -583,14 +595,11 @@ void GtkSalData::Init()
         g_signal_connect( G_OBJECT(pScreen), "size-changed",
                           G_CALLBACK(signalScreenSizeChanged), pDisplay );
         g_signal_connect( G_OBJECT(pScreen), "monitors-changed",
-                          G_CALLBACK(signalMonitorsChanged), GetGtkDisplay() );
+                          G_CALLBACK(signalMonitorsChanged), pDisplay );
 
         gtk_style_context_add_provider_for_screen(pScreen, CreateSmallButtonProvider(),
             GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
     }
-#else
-    gtk_style_context_add_provider_for_display(pGdkDisp, CreateSmallButtonProvider(),
-            GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
 #endif
 }
 


More information about the Libreoffice-commits mailing list