summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--FL/Fl_Tooltip.H5
-rw-r--r--documentation/Fl.html81
-rw-r--r--documentation/osissues.html3
-rw-r--r--src/Fl_Tooltip.cxx38
-rw-r--r--src/Fl_arg.cxx41
6 files changed, 136 insertions, 36 deletions
diff --git a/CHANGES b/CHANGES
index c3db138c2..361beb7d4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,12 +1,14 @@
CHANGES IN FLTK 1.1.0
+ - Now pass correctly pass keyboard and mouse events to
+ widget under tooltip as needed...
- Added new Fl::dnd_text_ops() methods to enable/disable
drag-and-drop text operations.
- Fl_Input now supports clicking inside a selection to
set the new text position when drag-and-drop is
enabled.
- Added support of X resources for scheme, dnd_text_ops,
- and visible_focus...
+ tooltips, and visible_focus...
- Fixed some case problems in includes for the MacOS X
code.
- Fl_Widget::handle() returned 1 for FL_ENTER and
diff --git a/FL/Fl_Tooltip.H b/FL/Fl_Tooltip.H
index 11858d4f4..785059ba1 100644
--- a/FL/Fl_Tooltip.H
+++ b/FL/Fl_Tooltip.H
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Tooltip.H,v 1.16.2.6 2002/04/09 17:20:23 easysw Exp $"
+// "$Id: Fl_Tooltip.H,v 1.16.2.7 2002/04/14 02:43:48 easysw Exp $"
//
// Tooltip header file for the Fast Light Tool Kit (FLTK).
//
@@ -36,6 +36,7 @@ class Fl_Tooltip_Window;
class FL_EXPORT Fl_Tooltip {
friend class Fl_Tooltip_Box;
+ friend class Fl_Tooltip_Window;
friend class Fl_Widget;
static float delay_;
@@ -76,5 +77,5 @@ public:
#endif
//
-// End of "$Id: Fl_Tooltip.H,v 1.16.2.6 2002/04/09 17:20:23 easysw Exp $".
+// End of "$Id: Fl_Tooltip.H,v 1.16.2.7 2002/04/14 02:43:48 easysw Exp $".
//
diff --git a/documentation/Fl.html b/documentation/Fl.html
index 3cefeda3f..7b4e6f5c3 100644
--- a/documentation/Fl.html
+++ b/documentation/Fl.html
@@ -278,26 +278,73 @@ than <tt>argc</tt>.
<P>All switches except -bg2 may be abbreviated one letter and case is ignored:
<UL>
-<LI><tt>-display host:n.n</tt> The X display to use (ignored under
-WIN32). </LI>
-<LI><tt>-geometry WxH+X+Y</tt> The window position and size will be
-modified according the the standard X geometry string. </LI>
-<LI><tt>-name string</tt> Fl_Window::xclass(string) will be done to
-the window, possibly changing its icon. </LI>
-<LI><tt>-title string</tt> Fl_Window::label(string) will be done to
-the window, changing both its title and the icontitle. </LI>
-<LI><tt>-iconic</tt> Fl_Window::iconize() will be done to the window. </LI>
-<LI><tt>-bg color</tt> XParseColor is used to lookup the passed color
-and then Fl::background() is done. Under WIN32 only color names of
-the form &quot;#xxxxxx&quot; are understood. </LI>
-<LI><tt>-bg2 color</tt> XParseColor is used to lookup the passed color
-and then Fl::background2() is done. </LI>
-<LI><tt>-fg color</tt> XParseColor is used to lookup the passed color
-and then Fl::foreground() is done. </LI>
+
+ <LI><TT>-bg color</TT> or <TT>-background color</TT>
+
+ <P>Sets the background color using <A
+ HREF="#Fl.background"><TT>Fl::background()</TT></A>.</LI>
+
+ <LI><TT>-bg2 color</TT> or <TT>-background2 color</TT>
+
+ <P>Sets the secondary background color using <A
+ HREF="#Fl.background2"><TT>Fl::background2()</TT></A>.</LI>
+
+ <LI><TT>-display host:n.n</TT>
+
+ <P>Sets the X display to use; this option is silently
+ ignored under WIN32 and MacOS.</LI>
+
+ <LI><TT>-dnd</TT> and <TT>-nodnd</TT>
+
+ <P>Enables or disables drag and drop text operations
+ using <A
+ HREF="#Fl.dnd_text_ops"><TT>Fl::dnd_text_ops()</TT></A>.</LI>
+
+ <LI><TT>-fg color</TT> or <TT>-foreground color</TT>
+
+ <P>Sets the foreground color using <A
+ HREF="#Fl.foreground"><TT>Fl::foreground()</TT></A>.</LI>
+
+ <LI><TT>-geometry WxH+X+Y</TT>
+
+ <P>Sets the initial window position and size according
+ the the standard X geometry string.</LI>
+
+ <LI><TT>-iconic</TT>
+
+ <P>Iconifies the window using <A
+ HREF="Fl_Window.html#Fl_Window.iconize"><TT>Fl_Window::iconize()</TT></A>.</LI>
+
+ <LI><TT>-kbd</TT> and <TT>-nokbd</TT>
+
+ <P>Enables or disables visible keyboard focus for
+ non-text widgets using <A
+ HREF="#Fl.visible_focus"><TT>Fl::visible_focus()</TT></A>.</LI>
+
+ <LI><TT>-name string</TT>
+
+ <P>Sets the window class using <A
+ HREF="Fl_Window.html#Fl_Window.xclass"><TT>Fl_Window::xclass()</TT></A>.</LI>
+
+ <LI><TT>-scheme string</TT>
+
+ <P>Sets the widget scheme using <A
+ HREF="#Fl.scheme"><TT>Fl::scheme()</TT></A>.</LI>
+
+ <LI><TT>-title string</TT>
+
+ <P>Sets the window title using <A
+ HREF="Fl_Window.html#Fl_Window.label"><TT>Fl_Window::label()</TT></A>.</LI>
+
+ <LI><TT>-tooltips</TT> and <TT>-notooltips</TT>
+
+ <P>Enables or disables tooltips using <A
+ HREF="Fl_Tooltip.html#Fl_Tooltip.enable"><TT>Fl_Tooltip::enable()</TT></A>.</LI>
+
</UL>
<P>The second form of <tt>Fl::args()</tt> is useful if your program does
-not have command line switches of its own. It parses all the switches,
+not have command line switches of its own. It parses all the switches,
and if any are not recognized it calls <tt>Fl::abort(Fl::help)</tt>.
<P>A usage string is displayed if <tt>Fl::args()</tt> detects an invalid
diff --git a/documentation/osissues.html b/documentation/osissues.html
index 29217d06d..2836b21a5 100644
--- a/documentation/osissues.html
+++ b/documentation/osissues.html
@@ -393,6 +393,9 @@ resources:
<LI><TT>Text.background</TT> - The default background
color for text fields (color).
+ <LI><TT>tooltips</TT> - The default setting for
+ tooltips (boolean).
+
<LI><TT>visibleFocus</TT> - The default setting for
visible keyboard focus on non-text widgets (boolean).
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 $".
//