From 0f0dc03849b7d4c8b50f2d121d23e205f1db5845 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 29 Jul 2019 15:21:23 +0200 Subject: [PATCH] Fix broken thumbnail butto tooltips --- rtgui/batchqueueentry.cc | 8 +++++--- rtgui/batchqueueentry.h | 2 +- rtgui/thumbbrowserbase.cc | 12 ++++++++---- rtgui/thumbbrowserentrybase.cc | 5 +++-- rtgui/thumbbrowserentrybase.h | 4 ++-- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc index a5dfb6dde..23982095c 100644 --- a/rtgui/batchqueueentry.cc +++ b/rtgui/batchqueueentry.cc @@ -168,10 +168,12 @@ void BatchQueueEntry::getIconSize (int& w, int& h) const } -Glib::ustring BatchQueueEntry::getToolTip (int x, int y) const +std::tuple BatchQueueEntry::getToolTip (int x, int y) const { // get the parent class' tooltip first - Glib::ustring tooltip = ThumbBrowserEntryBase::getToolTip(x, y); + Glib::ustring tooltip; + bool useMarkup; + std::tie(tooltip, useMarkup) = ThumbBrowserEntryBase::getToolTip(x, y); // add the saving param options if (!outFileName.empty()) { @@ -198,7 +200,7 @@ Glib::ustring BatchQueueEntry::getToolTip (int x, int y) const } } - return tooltip; + return std::make_tuple(std::move(tooltip), useMarkup); } diff --git a/rtgui/batchqueueentry.h b/rtgui/batchqueueentry.h index d13dfe827..0ea56e403 100644 --- a/rtgui/batchqueueentry.h +++ b/rtgui/batchqueueentry.h @@ -70,7 +70,7 @@ public: std::vector> getIconsOnImageArea () override; void getIconSize (int& w, int& h) const override; - Glib::ustring getToolTip (int x, int y) const override; + std::tuple getToolTip (int x, int y) const override; // bqentryupdatelistener interface void updateImage (guint8* img, int w, int h, int origw, int origh, guint8* newOPreview) override; diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index dba5390c1..f637015bc 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -745,20 +745,24 @@ void ThumbBrowserBase::Internal::on_realize() bool ThumbBrowserBase::Internal::on_query_tooltip (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip) { // Gtk signals automatically acquire the GUI (i.e. this method is enclosed by gdk_thread_enter and gdk_thread_leave) - Glib::ustring ttip = ""; - + Glib::ustring ttip; + boolean useMarkup = false; { MYREADERLOCK(l, parent->entryRW); for (size_t i = 0; i < parent->fd.size(); i++) if (parent->fd[i]->drawable && parent->fd[i]->inside (x, y)) { - ttip = parent->fd[i]->getToolTip (x, y); + std::tie(ttip, useMarkup) = parent->fd[i]->getToolTip (x, y); break; } } if (!ttip.empty()) { - tooltip->set_text(ttip); + if (useMarkup) { + tooltip->set_markup(ttip); + } else { + tooltip->set_text(ttip); + } return true; } else { return false; diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index f9e2b41b5..e660e794b 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -724,7 +724,7 @@ bool ThumbBrowserEntryBase::releaseNotify (int button, int type, int bstate, int return buttonSet ? buttonSet->releaseNotify (x, y) : false; } -Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const +std::tuple ThumbBrowserEntryBase::getToolTip (int x, int y) const { Glib::ustring tooltip; @@ -734,6 +734,7 @@ Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const // Always show the filename in the tooltip since the filename in the thumbnail could be truncated. // If "Show Exif info" is disabled, also show Exif info in the tooltip. + bool useMarkup = !tooltip.empty(); if (inside(x, y) && tooltip.empty()) { tooltip = dispname; @@ -748,7 +749,7 @@ Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const } } - return tooltip; + return std::make_tuple(std::move(tooltip), useMarkup); } diff --git a/rtgui/thumbbrowserentrybase.h b/rtgui/thumbbrowserentrybase.h index 12e64c60d..6cbcb37d0 100644 --- a/rtgui/thumbbrowserentrybase.h +++ b/rtgui/thumbbrowserentrybase.h @@ -19,7 +19,7 @@ #pragma once #include - +#include #include #include "cursormanager.h" @@ -190,7 +190,7 @@ public: virtual bool motionNotify (int x, int y); virtual bool pressNotify (int button, int type, int bstate, int x, int y); virtual bool releaseNotify (int button, int type, int bstate, int x, int y); - virtual Glib::ustring getToolTip (int x, int y) const; + virtual std::tuple getToolTip (int x, int y) const; inline ThumbBrowserEntryBase* getOriginal() const {