summaryrefslogtreecommitdiff
path: root/vcl/unx
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2022-05-23 12:48:15 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2022-06-01 16:29:28 +0200
commit1c2d3b069859f466f59f35e50819fadc0ab61af7 (patch)
treee7db2e1f1056fddd2a78821a112bf234fbe04ca5 /vcl/unx
parentc90db9e43db509bef6892c8443480ffa9ed8bbe0 (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.cxx36
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)