vcl/unx/gtk3/gtkdata.cxx | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-)
New commits: commit 1821241f7c7c90784662be54dc3b42e4f9ca3ca3 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue May 11 14:01:52 2021 +0100 Commit: Caolán McNamara <caol...@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 <caol...@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 } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits