From e7e8faa25b55e36c8cc085f8737082f3319dcae5 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen Date: Thu, 27 Nov 2014 09:47:40 +0000 Subject: Improve tooltip behavior for huge tooltips: remove flicker, support key/mouse dismiss Fixes STR 2650. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10473 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Tooltip.cxx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Fl_Tooltip.cxx b/src/Fl_Tooltip.cxx index a3deaaa6a..66e782b77 100644 --- a/src/Fl_Tooltip.cxx +++ b/src/Fl_Tooltip.cxx @@ -57,6 +57,14 @@ public: Fl_Menu_Window::show(); } + + int handle(int e) { + if (e == FL_PUSH || e == FL_KEYDOWN) { + hide(); + return 1; + } + return Fl_Menu_Window::handle(e); + } }; Fl_Widget* Fl_Tooltip::widget_ = 0; @@ -168,7 +176,13 @@ void Fl_Tooltip::enter_(Fl_Widget* w) { printf("Fl_Tooltip::enter_(w=%p)\n", w); printf(" window=%p\n", window); #endif // DEBUG - + if (w && w->as_window() && ((Fl_Window*)w)->tooltip_window()) { + // Fix STR #2650: if there's no better place for a tooltip window, don't move it. + int oldx = w->x(); + int oldy = w->y(); + ((Fl_TooltipBox*)w)->layout(); + if (w->x() == oldx && w->y() == oldy) return; + } // find the enclosing group with a tooltip: Fl_Widget* tw = w; for (;;) { -- cgit v1.2.3