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