vcl/unx/gtk3/gtk3gtkinst.cxx |   24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

New commits:
commit 8db72947d7bd6eda08b95a13b63a5f0503564639
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue May 4 11:44:49 2021 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Tue May 4 16:02:59 2021 +0200

    Related: tdf#141857 send style-updated after app settings are updated
    
    so the libreoffice settings are updated before the widget updates,
    otherwise the app settings are the old settings when the widget updates
    
    Change-Id: Id32dd55a1e5102cc707d6ee74eddfae2247e105a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115070
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 2ecd35cb89b5..65a530fd3370 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -13841,7 +13841,6 @@ private:
     std::unique_ptr<IMHandler> m_xIMHandler;
     cairo_surface_t* m_pSurface;
     gulong m_nDrawSignalId;
-    gulong m_nStyleUpdatedSignalId;
     gulong m_nQueryTooltip;
     gulong m_nPopupMenu;
     gulong m_nScrollEvent;
@@ -13886,12 +13885,6 @@ private:
         m_pSurface = get_underlying_cairo_surface(*m_xDevice);
         GtkInstanceWidget::signal_size_allocate(nWidth, nHeight);
     }
-    static void signalStyleUpdated(GtkWidget*, gpointer widget)
-    {
-        GtkInstanceDrawingArea* pThis = 
static_cast<GtkInstanceDrawingArea*>(widget);
-        SolarMutexGuard aGuard;
-        return pThis->signal_style_updated();
-    }
     void signal_style_updated()
     {
         m_aStyleUpdatedHdl.Call(*this);
@@ -13952,6 +13945,7 @@ private:
         GtkInstanceDrawingArea* pThis = 
static_cast<GtkInstanceDrawingArea*>(widget);
         return pThis->signal_scroll(pEvent);
     }
+    DECL_LINK(SettingsChangedHdl, VclSimpleEvent&, void);
 public:
     GtkInstanceDrawingArea(GtkDrawingArea* pDrawingArea, GtkInstanceBuilder* 
pBuilder, const a11yref& rA11y, bool bTakeOwnership)
         : GtkInstanceWidget(GTK_WIDGET(pDrawingArea), pBuilder, bTakeOwnership)
@@ -13961,7 +13955,6 @@ public:
         , m_xDevice(DeviceFormat::DEFAULT)
         , m_pSurface(nullptr)
         , m_nDrawSignalId(g_signal_connect(m_pDrawingArea, "draw", 
G_CALLBACK(signalDraw), this))
-        , 
m_nStyleUpdatedSignalId(g_signal_connect(m_pDrawingArea,"style-updated", 
G_CALLBACK(signalStyleUpdated), this))
         , m_nQueryTooltip(g_signal_connect(m_pDrawingArea, "query-tooltip", 
G_CALLBACK(signalQueryTooltip), this))
         , m_nPopupMenu(g_signal_connect(m_pDrawingArea, "popup-menu", 
G_CALLBACK(signalPopupMenu), this))
         , m_nScrollEvent(g_signal_connect(m_pDrawingArea, "scroll-event", 
G_CALLBACK(signalScroll), this))
@@ -13969,6 +13962,8 @@ public:
         gtk_widget_set_has_tooltip(m_pWidget, true);
         g_object_set_data(G_OBJECT(m_pDrawingArea), 
"g-lo-GtkInstanceDrawingArea", this);
         m_xDevice->EnableRTL(get_direction());
+
+        Application::AddEventListener(LINK(this, GtkInstanceDrawingArea, 
SettingsChangedHdl));
     }
 
     AtkObject* GetAtkObject(AtkObject* pDefaultAccessible)
@@ -14112,6 +14107,8 @@ public:
 
     virtual ~GtkInstanceDrawingArea() override
     {
+        Application::RemoveEventListener(LINK(this, GtkInstanceDrawingArea, 
SettingsChangedHdl));
+
         g_object_steal_data(G_OBJECT(m_pDrawingArea), 
"g-lo-GtkInstanceDrawingArea");
         if (m_pAccessible)
             g_object_unref(m_pAccessible);
@@ -14121,7 +14118,6 @@ public:
         g_signal_handler_disconnect(m_pDrawingArea, m_nScrollEvent);
         g_signal_handler_disconnect(m_pDrawingArea, m_nPopupMenu);
         g_signal_handler_disconnect(m_pDrawingArea, m_nQueryTooltip);
-        g_signal_handler_disconnect(m_pDrawingArea, m_nStyleUpdatedSignalId);
         g_signal_handler_disconnect(m_pDrawingArea, m_nDrawSignalId);
     }
 
@@ -14143,6 +14139,16 @@ public:
     }
 };
 
+IMPL_LINK(GtkInstanceDrawingArea, SettingsChangedHdl, VclSimpleEvent&, rEvent, 
void)
+{
+    if (rEvent.GetId() != VclEventId::ApplicationDataChanged)
+        return;
+
+    DataChangedEvent* pData = 
static_cast<DataChangedEvent*>(static_cast<VclWindowEvent&>(rEvent).GetData());
+    if (pData->GetType() == DataChangedEventType::SETTINGS)
+        signal_style_updated();
+}
+
 class IMHandler
 {
 private:
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to