diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2022-05-23 12:48:15 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2022-06-01 16:29:28 +0200 |
commit | 1c2d3b069859f466f59f35e50819fadc0ab61af7 (patch) | |
tree | e7db2e1f1056fddd2a78821a112bf234fbe04ca5 /vcl/unx | |
parent | c90db9e43db509bef6892c8443480ffa9ed8bbe0 (diff) |
Implement weld::IconView::connect_query_tooltip
Change-Id: I8a8540e240d6a7046f564404c7c3b6bff8c2f04d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134806
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'vcl/unx')
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index c61f6d650261..1f61fc49db3d 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -16099,6 +16099,7 @@ private: #if !GTK_CHECK_VERSION(4, 0, 0) gulong m_nPopupMenu; #endif + gulong m_nQueryTooltipSignalId = 0; ImplSVEvent* m_pSelectionChangeEvent; DECL_LINK(async_signal_selection_changed, void*, void); @@ -16145,6 +16146,32 @@ private: pThis->handle_item_activated(); } + static gboolean signalQueryTooltip(GtkWidget* /*pGtkWidget*/, gint x, gint y, + gboolean keyboard_tip, GtkTooltip* tooltip, + gpointer widget) + { + GtkInstanceIconView* pThis = static_cast<GtkInstanceIconView*>(widget); + GtkTreeIter iter; + GtkIconView* pIconView = pThis->m_pIconView; + GtkTreeModel* pModel = gtk_icon_view_get_model(pIconView); + GtkTreePath* pPath = nullptr; +#if GTK_CHECK_VERSION(4, 0, 0) + if (!gtk_icon_view_get_tooltip_context(pIconView, x, y, keyboard_tip, &pModel, &pPath, &iter)) + return false; +#else + if (!gtk_icon_view_get_tooltip_context(pIconView, &x, &y, keyboard_tip, &pModel, &pPath, &iter)) + return false; +#endif + OUString aTooltip = pThis->signal_query_tooltip(GtkInstanceTreeIter(iter)); + if (!aTooltip.isEmpty()) + { + gtk_tooltip_set_text(tooltip, OUStringToOString(aTooltip, RTL_TEXTENCODING_UTF8).getStr()); + gtk_icon_view_set_tooltip_item(pIconView, tooltip, pPath); + } + gtk_tree_path_free(pPath); + return !aTooltip.isEmpty(); + } + void insert_item(GtkTreeIter& iter, int pos, const OUString* pId, const OUString* pText, const OUString* pIconName) { gtk_tree_store_insert_with_values(m_pTreeStore, &iter, nullptr, pos, @@ -16251,6 +16278,12 @@ public: enable_notify_events(); } + virtual void connect_query_tooltip(const Link<const weld::TreeIter&, OUString>& rLink) override + { + weld::IconView::connect_query_tooltip(rLink); + m_nQueryTooltipSignalId = g_signal_connect(m_pIconView, "query-tooltip", G_CALLBACK(signalQueryTooltip), this); + } + virtual OUString get_selected_id() const override { assert(gtk_icon_view_get_model(m_pIconView) && "don't request selection when frozen"); @@ -16495,6 +16528,9 @@ public: if (m_pSelectionChangeEvent) Application::RemoveUserEvent(m_pSelectionChangeEvent); + if (m_nQueryTooltipSignalId) + g_signal_handler_disconnect(m_pIconView, m_nQueryTooltipSignalId); + g_signal_handler_disconnect(m_pIconView, m_nItemActivatedSignalId); g_signal_handler_disconnect(m_pIconView, m_nSelectionChangedSignalId); #if !GTK_CHECK_VERSION(4, 0, 0) |