Re: Callback based tooltips (Re: New tooltips API, continued)
- From: Kristian Rietveld <kris imendio com>
- To: Tim Janik <timj imendio com>
- Cc: Owen Taylor <otaylor redhat com>, Gtk+ Developers <gtk-devel-list gnome org>, Matthias Clasen <mclasen redhat com>
- Subject: Re: Callback based tooltips (Re: New tooltips API, continued)
- Date: Tue, 11 Apr 2006 08:19:54 +0200
Tim Janik wrote:
reading your proposal for the first time (both versions of it), i can't
help the
feeling that it seems a bit complicated (with nesting tip areas etc.) at
least
from a widget user perspective.
i'm wondering if a callback based approach wouldn't ease the whole setup
a lot,
so to brainstorm for a second:
It looks like that our proposals have a lot in common at the higher
level, but we have different thoughts on the details. This might be
caused by the complexity of GtkTooltipWindow in my proposal. While I
started out with a small callback based setup in the past (long before I
managed to send out the first proposal), I was pointed to a mail from
Owen [1] where he explained his issues with a callback-based approach.
His sketch of an alternate approach looked reasonable to me, so I
decided to go on with that and fill in the details (some of which still
remain to filled in though).
We do agree that we should have a tooltip-markup property on widgets.
The "query_tooltip" signal has some things in common with the
"populate_tooltip" signal we added in my proposal. As an afterthought,
I guess the fact that we added a "populate_tooltip" signal actually
indicates that a callback-based is wished ...
The point where our proposals really differ is at handling complex
tooltips. I think we should go with your approach, if we can fix the
problems raised which led Owen to come up with an alternative approach:
* Tooltips should be available on demand by the keyboard (already
raised in this thread),
* Extensibility, which has already been solved with the idea of
allowing the widget user to set a custom tooltip window,
* Cases where tooltip texts or tooltip areas change dynamically.
Tooltips areas change when for example scrolling in a GtkTreeView, I
guess this is already handled by the fact that we will query for a
tooltip again when the pointer moves (where we might also want to
re-query on scroll events). For tooltip texts we would just need a way
to get hold of GtkTooltip outside of the query_tooltip callback ...
* We also add in that we need the ability to display the tooltip
on-demand, which has been raised at a later point.
it also coveres moderately advanced cases with gtk_tooltip_set_icon() and
gtk_tooltip_set_custom(). for real adventurous tooltipping, people can use
gtk_widget_set_tooltip_window() and mess up their custom window instead
of GtkTooltip inside of a ::query_tooltip() handler. the common case
however would be to not make use of gtk_widget_set_tooltip_window().
When using a custom tooltip window, who would handle popping up/down
that window? Is the idea to pop up/down the window from a
query_tooltip_callback()?
- for area specific tooltipping, widgets don't need to track the mouse
pointer themselves. once gtk is in tooltip mode, ::query_tooltip() is
simply emitted as the pointer moves.
And as said above, maybe also on scroll events.
- in constrast to your proposal, the decision of *when* to popup tooltips,
and how long they are left up is completely up to gtk. this is actually
meant to improve user experience, since gtk can honour per-display
tooltip behaviour settings, and tooltip popup behaviour will be
consistent
across widgets on the same display.
In my proposal gtk+ would decide when to pop up/down the tooltips for
all tooltips, except for the most complex case where one provides a
GtkTooltipWindow themselves.
- there's no "grouping" of tooltips provided. for one, that's because i
don't really understand the use case for that. once in tooltip mode, all
widget tooltips can simply be popped up/changed seemlessly, until some
significant user action forces leave of tooltip mode again (button press,
key press).
and for another, if grouping really is required, that can still be
implemented after the fact with API similar to what you suggested.
One of the usecases of grouping can, for example, be found in toolbars.
Toolbars have multiple buttons/items, which are all different widgets.
If the tooltip is already displayed for one item and the mouse is
moved to another item on the toolbar, you usually do not want to wait
for the new tooltip to popup. The solution here is to create a tooltip
group and include all items on the toolbar.
- because GtkTooltip is opaque and basically just implements a limited
set of tip setters, future versions could allow gtk-wide or per-display
plugging of tooltip objects. this could be interesting for embedded
devices, respectively touchscreens, which may want to display tooltips
in a non-standard way. e.g. an "info popup" in the upper right corner
like the N770 has it. it also would cover themes that want to implement
specialized tooltip display.
This is an interesting win with your proposal.
- querying tooltips via ::query_tooltip() will also be easily customizable
via connecting signal handlers to widgets, and it will work for
insensitive
widgets even with area sensitive tooltips. especially the latter isn't
really
covered by your proposal afaiu but an often requested feature.
I don't fully understand what you mean here; but tooltips for insenstive
widgets would just work fine with the API in my proposal.
well, sorry for coming back so late. hope i could provide some usefull
input anyway ;)
You sure did :). As I said earlier, I pretty much prefer your simpler
proposal once we find solutions for the keyboard handling (which will
probably automatically give us API for ondemand tooltips?), dynamically
changing tooltip texts and agree on how to handle custom tooltip
windows. I hope we can agree on these issues soon, so I can come up
with a patch before the middle of next week.
thanks,
-kris.
[1]http://mail.gnome.org/archives/gtk-devel-list/2004-October/msg00120.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]