042c7d7
From 265829dd1a0fb6bd271f3661803645bd42e0ce39 Mon Sep 17 00:00:00 2001
042c7d7
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
042c7d7
Date: Fri, 16 Sep 2016 11:19:52 +0100
042c7d7
Subject: [PATCH] Resolves: rhbz#1373933 gtk 3.21 emits a lot more "style-set"
042c7d7
 signals
042c7d7
MIME-Version: 1.0
042c7d7
Content-Type: text/plain; charset=UTF-8
042c7d7
Content-Transfer-Encoding: 8bit
042c7d7
042c7d7
also deb#837356
042c7d7
042c7d7
since gtk3 commit of...
042c7d7
042c7d7
commit 0f116135f4a5033ce4e9dfa19f10624701fa615c
042c7d7
Author: Matthias Clasen <mclasen@redhat.com>
042c7d7
Date:   Fri May 6 10:12:14 2016 -0400
042c7d7
042c7d7
    Avoid emitting ::style-set by name
042c7d7
042c7d7
    GtkStyle is deprecated, but we still emit ::style-set quite
042c7d7
    a bit, so lets at least not be slow while doing it.
042c7d7
042c7d7
docs say...
042c7d7
042c7d7
'GtkWidget::style-set has been deprecated since version 3.0 and should not be
042c7d7
used in newly-written code.
042c7d7
042c7d7
Use the “style-updated” signal'
042c7d7
042c7d7
and this code just came over from gtk2 without any thought about it at the
042c7d7
time, so change it over to the "style-updated" which makes everything happy
042c7d7
again
042c7d7
042c7d7
Change-Id: I9e920d2fb2d820ff1b1b5a9ecb228484df3d6146
042c7d7
(cherry picked from commit ef7abe81df10cb8a8c04afbb1fbe700f94e73f04)
042c7d7
---
042c7d7
 vcl/inc/unx/gtk/gtkframe.hxx  |  6 +++++-
042c7d7
 vcl/unx/gtk3/gtk3gtkframe.cxx | 19 +++++--------------
042c7d7
 2 files changed, 10 insertions(+), 15 deletions(-)
042c7d7
042c7d7
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
042c7d7
index 2b5dc55..1b48aa3 100644
042c7d7
--- a/vcl/inc/unx/gtk/gtkframe.hxx
042c7d7
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
042c7d7
@@ -242,7 +242,11 @@ class GtkSalFrame : public SalFrame
042c7d7
 
042c7d7
     // signals
042c7d7
     static gboolean     signalButton( GtkWidget*, GdkEventButton*, gpointer );
042c7d7
-    static void         signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer );
042c7d7
+#if GTK_CHECK_VERSION(3,0,0)
042c7d7
+    static void         signalStyleUpdated(GtkWidget*, gpointer);
042c7d7
+#else
042c7d7
+    static void         signalStyleSet(GtkWidget*, GtkStyle* pPrevious, gpointer);
042c7d7
+#endif
042c7d7
 #if GTK_CHECK_VERSION(3,0,0)
042c7d7
     static gboolean     signalDraw( GtkWidget*, cairo_t *cr, gpointer );
042c7d7
     static void         sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame);
042c7d7
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
042c7d7
index 9ea6237..1eba8e2 100644
042c7d7
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
042c7d7
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
042c7d7
@@ -993,7 +993,7 @@ void GtkSalFrame::InitCommon()
042c7d7
 
042c7d7
 
042c7d7
     // connect signals
042c7d7
-    g_signal_connect( G_OBJECT(m_pWindow), "style-set", G_CALLBACK(signalStyleSet), this );
042c7d7
+    g_signal_connect( G_OBJECT(m_pWindow), "style-updated", G_CALLBACK(signalStyleUpdated), this );
042c7d7
     gtk_widget_set_has_tooltip(pEventWidget, true);
042c7d7
     m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "query-tooltip", G_CALLBACK(signalTooltipQuery), this ));
042c7d7
     m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "button-press-event", G_CALLBACK(signalButton), this ));
042c7d7
@@ -3145,22 +3145,13 @@ gboolean GtkSalFrame::signalDelete( GtkWidget*, GdkEvent*, gpointer frame )
042c7d7
     return true;
042c7d7
 }
042c7d7
 
042c7d7
-void GtkSalFrame::signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer frame )
042c7d7
+void GtkSalFrame::signalStyleUpdated(GtkWidget*, gpointer frame)
042c7d7
 {
042c7d7
     GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
042c7d7
 
042c7d7
-    // every frame gets an initial style set on creation
042c7d7
-    // do not post these as the whole application tends to
042c7d7
-    // redraw itself to adjust to the new style
042c7d7
-    // where there IS no new style resulting in tremendous unnecessary flickering
042c7d7
-    if( pPrevious != nullptr )
042c7d7
-    {
042c7d7
-        // signalStyleSet does NOT usually have the gdk lock
042c7d7
-        // so post user event to safely dispatch the SalEvent::SettingsChanged
042c7d7
-        // note: settings changed for multiple frames is avoided in winproc.cxx ImplHandleSettings
042c7d7
-        GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::SettingsChanged );
042c7d7
-        GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::FontChanged );
042c7d7
-    }
042c7d7
+    // note: settings changed for multiple frames is avoided in winproc.cxx ImplHandleSettings
042c7d7
+    GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::SettingsChanged );
042c7d7
+    GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::FontChanged );
042c7d7
 }
042c7d7
 
042c7d7
 gboolean GtkSalFrame::signalWindowState( GtkWidget*, GdkEvent* pEvent, gpointer frame )
042c7d7
-- 
042c7d7
2.7.4
042c7d7