Browse Source

Fix click-on-tooltip bug.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2217 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
pull/168/head
Michael R Sweet 23 years ago
parent
commit
fe1d700e5c
  1. 25
      src/Fl_Tooltip.cxx

25
src/Fl_Tooltip.cxx

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
//
// "$Id: Fl_Tooltip.cxx,v 1.38.2.19 2002/05/13 15:43:10 easysw Exp $"
// "$Id: Fl_Tooltip.cxx,v 1.38.2.20 2002/05/13 17:23:10 easysw Exp $"
//
// Tooltip source file for the Fast Light Tool Kit (FLTK).
//
@ -40,6 +40,8 @@ int Fl_Tooltip::size_ = FL_NORMAL_SIZE; @@ -40,6 +40,8 @@ int Fl_Tooltip::size_ = FL_NORMAL_SIZE;
#define MAX_WIDTH 400
static const char* tip;
class Fl_TooltipBox : public Fl_Menu_Window {
public:
Fl_TooltipBox() : Fl_Menu_Window(0, 0) {
@ -48,9 +50,11 @@ public: @@ -48,9 +50,11 @@ public:
}
void draw();
void layout();
void show() {
if (tip) Fl_Menu_Window::show();
}
};
static const char* tip;
static Fl_Widget* widget;
static Fl_TooltipBox *window = 0;
static int X,Y,W,H;
@ -108,6 +112,8 @@ static void tooltip_timeout(void*) { @@ -108,6 +112,8 @@ static void tooltip_timeout(void*) {
((Fl_Widget*)window)->label(tip);
window->layout();
window->redraw();
// printf("tooltip_timeout: Showing window %p with tooltip \"%s\"...\n",
// window, tip ? tip : "(null)");
window->show();
Fl::remove_timeout(recent_timeout);
recent_tooltip = 1;
@ -117,11 +123,17 @@ static void tooltip_timeout(void*) { @@ -117,11 +123,17 @@ static void tooltip_timeout(void*) {
// This is called when a widget is destroyed:
static void
tt_exit(Fl_Widget *w) {
// printf("tt_exit(w=%p)\n", w);
// printf(" widget=%p, window=%p\n", widget, window);
if (w && w == widget) Fl_Tooltip::enter_area(0,0,0,0,0,0);
}
static void
tt_enter(Fl_Widget* widget) {
// printf("tt_enter(widget=%p)\n", widget);
// printf(" window=%p\n", window);
// find the enclosing group with a tooltip:
Fl_Widget* w = widget;
while (w && !w->tooltip()) {
@ -138,6 +150,10 @@ tt_enter(Fl_Widget* widget) { @@ -138,6 +150,10 @@ tt_enter(Fl_Widget* widget) {
void
Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t)
{
// printf("Fl_Tooltip::enter_area(wid=%p, x=%d, y=%d, w=%d, h=%d, t=\"%s\")\n",
// wid, x, y, w, h, t ? t : "(null)");
// printf(" recursion=%d, window=%p\n", recursion, window);
if (recursion) return;
Fl::remove_timeout(tooltip_timeout);
Fl::remove_timeout(recent_timeout);
@ -159,6 +175,9 @@ Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t) @@ -159,6 +175,9 @@ Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t)
if (window) window->hide();
if (recent_tooltip) Fl::add_timeout(.2, recent_timeout);
}
// printf(" tip=\"%s\", window->shown()=%d\n", tip ? tip : "(null)",
// window ? window->shown() : 0);
}
void Fl_Widget::tooltip(const char *tt) {
@ -172,5 +191,5 @@ void Fl_Widget::tooltip(const char *tt) { @@ -172,5 +191,5 @@ void Fl_Widget::tooltip(const char *tt) {
}
//
// End of "$Id: Fl_Tooltip.cxx,v 1.38.2.19 2002/05/13 15:43:10 easysw Exp $".
// End of "$Id: Fl_Tooltip.cxx,v 1.38.2.20 2002/05/13 17:23:10 easysw Exp $".
//

Loading…
Cancel
Save