diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Tooltip.cxx | 38 | ||||
| -rw-r--r-- | src/Fl_arg.cxx | 41 |
2 files changed, 63 insertions, 16 deletions
diff --git a/src/Fl_Tooltip.cxx b/src/Fl_Tooltip.cxx index 0c35f2e33..5b1c8d1e6 100644 --- a/src/Fl_Tooltip.cxx +++ b/src/Fl_Tooltip.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Tooltip.cxx,v 1.38.2.11 2002/04/09 17:20:24 easysw Exp $" +// "$Id: Fl_Tooltip.cxx,v 1.38.2.12 2002/04/14 02:43:48 easysw Exp $" // // Tooltip source file for the Fast Light Tool Kit (FLTK). // @@ -68,8 +68,26 @@ class Fl_Tooltip_Window : public Fl_Menu_Window { int Fl_Tooltip_Window::handle(int event) { - if (event == FL_KEYDOWN || event == FL_KEYUP || event == FL_SHORTCUT) return 0; - else return Fl_Menu_Window::handle(event); + switch (event) { + case FL_KEYUP : + case FL_KEYDOWN : + case FL_SHORTCUT : + case FL_PUSH : + case FL_DRAG : + case FL_RELEASE : + case FL_MOUSEWHEEL : + if (Fl_Tooltip::widget) { + // Pass events to widget... + Fl::belowmouse(Fl_Tooltip::widget); + // Update event_x() and event_y() to be relative to the + // widget's window, not the tooltip window... + Fl::e_x = Fl::e_x_root - Fl_Tooltip::widget->window()->x(); + Fl::e_y = Fl::e_y_root - Fl_Tooltip::widget->window()->y(); + return Fl_Tooltip::widget->handle(event); + } else return 0; + default : + return Fl_Menu_Window::handle(event); + } } @@ -140,7 +158,14 @@ Fl_Tooltip::enter(Fl_Widget *w) { // printf(" visible() = %d\n", w->visible()); // printf(" active() = %d\n", w->active()); // } + Fl_Widget* temp = w; + while (temp && !temp->tooltip()) { + if (temp == window) return; // Don't do anything if pointed at tooltip + temp = temp->parent(); + } + if ((!w || !w->tooltip()) && tooltip_callback_ && window) { +// puts("Hiding tooltip..."); Fl::remove_timeout(tooltip_callback_); window->hide(); shown = 0; @@ -173,6 +198,7 @@ Fl_Tooltip::tooltip_exit(Fl_Widget *w) { widget = 0; if (window) { +// puts("Hiding tooltip..."); window->hide(); shown = 0; } @@ -196,6 +222,9 @@ Fl_Tooltip::tooltip_timeout(void *v) { window->resizable(box); window->end(); Fl_Group::current(saveCurrent); + +// printf("Fl_Tooltip::window = %p\n", window); +// printf("Fl_Tooltip::box = %p\n", box); } if (!v) @@ -209,6 +238,7 @@ Fl_Tooltip::tooltip_timeout(void *v) { Fl_Window *widgetWindow = widget->window(); if (widgetWindow) { +// puts("Showing tooltip"); Fl::grab(*widgetWindow); window->show(); Fl::release(); @@ -220,5 +250,5 @@ Fl_Tooltip::tooltip_timeout(void *v) { // -// End of "$Id: Fl_Tooltip.cxx,v 1.38.2.11 2002/04/09 17:20:24 easysw Exp $". +// End of "$Id: Fl_Tooltip.cxx,v 1.38.2.12 2002/04/14 02:43:48 easysw Exp $". // diff --git a/src/Fl_arg.cxx b/src/Fl_arg.cxx index b0bb3ecd3..5f576ea41 100644 --- a/src/Fl_arg.cxx +++ b/src/Fl_arg.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_arg.cxx,v 1.5.2.8.2.9 2002/04/13 22:17:46 easysw Exp $" +// "$Id: Fl_arg.cxx,v 1.5.2.8.2.10 2002/04/14 02:43:48 easysw Exp $" // // Optional argument initialization code for the Fast Light Tool Kit (FLTK). // @@ -91,7 +91,7 @@ int Fl::arg(int argc, char **argv, int &i) { Fl::visible_focus(0); i++; return 1; - } else if (match(s, "dnd")) { + } else if (match(s, "dnd", 2)) { Fl::dnd_text_ops(1); i++; return 1; @@ -99,6 +99,14 @@ int Fl::arg(int argc, char **argv, int &i) { Fl::dnd_text_ops(0); i++; return 1; + } else if (match(s, "tooltips", 2)) { + Fl_Tooltip::enable(); + i++; + return 1; + } else if (match(s, "notooltips", 3)) { + Fl_Tooltip::disable(); + i++; + return 1; } const char *v = argv[i+1]; @@ -113,26 +121,26 @@ int Fl::arg(int argc, char **argv, int &i) { geometry = v; #if !defined(WIN32) && !defined(__APPLE__) - } else if (match(s, "display")) { + } else if (match(s, "display", 2)) { Fl::display(v); #endif - } else if (match(s, "title")) { + } else if (match(s, "title", 2)) { title = v; - } else if (match(s, "name")) { + } else if (match(s, "name", 2)) { name = v; } else if (match(s, "bg2", 3) || match(s, "background2", 11)) { fl_bg2 = v; - } else if (match(s, "bg") || match(s, "background")) { + } else if (match(s, "bg", 2) || match(s, "background", 10)) { fl_bg = v; - } else if (match(s, "fg") || match(s, "foreground")) { + } else if (match(s, "fg", 2) || match(s, "foreground", 10)) { fl_fg = v; - } else if (match(s, "scheme")) { + } else if (match(s, "scheme", 1)) { Fl::scheme(v); } else return 0; // unrecognized @@ -176,6 +184,11 @@ void Fl_Window::show(int argc, char **argv) { strcasecmp(val, "on") == 0 || strcasecmp(val, "yes") == 0); + val = XGetDefault(fl_display, key, "tooltips"); + if (val) Fl_Tooltip::enable(strcasecmp(val, "true") == 0 || + strcasecmp(val, "on") == 0 || + strcasecmp(val, "yes") == 0); + val = XGetDefault(fl_display, key, "visibleFocus"); if (val) Fl::visible_focus(strcasecmp(val, "true") == 0 || strcasecmp(val, "on") == 0 || @@ -239,15 +252,19 @@ static const char * const helpmsg = "options are:\n" " -bg2 color\n" " -bg color\n" -" -d[isplay] host:n.n\n" +" -di[splay] host:n.n\n" +" -dn[d]\n" " -fg color\n" " -g[eometry] WxH+X+Y\n" " -i[conic]\n" " -k[bd]\n" -" -n[ame] classname\n" +" -na[me] classname\n" +" -nod[nd]\n" " -nok[bd]\n" +" -not[ooltips]\n" " -s[cheme] scheme\n" -" -t[itle] windowtitle"; +" -ti[tle] windowtitle\n"; +" -to[oltips]"; const char * const Fl::help = helpmsg+13; @@ -394,5 +411,5 @@ int XParseGeometry(const char* string, int* x, int* y, #endif // ifdef WIN32 // -// End of "$Id: Fl_arg.cxx,v 1.5.2.8.2.9 2002/04/13 22:17:46 easysw Exp $". +// End of "$Id: Fl_arg.cxx,v 1.5.2.8.2.10 2002/04/14 02:43:48 easysw Exp $". // |
