summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2002-04-14 02:43:48 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2002-04-14 02:43:48 +0000
commit8e3cdc0ac1556f510e936b0e154c6ce513ec3604 (patch)
tree0c0f1bb0d2d46639e7324950e2a8a01d2ac2ffb3
parentdc355ebb5477bd3c4374658d3db2a935ae3fb935 (diff)
Propagate events from the tooltip window to the widget we are tooltipping
for... Add "tooltips" resource for default state of tooltips. Fix another tooltip cycling problem. Fix default help and argument processing (didn't have the right min chars for matching, and didn't list new options) Update docos to list new tooltip resource and list of standard arguments. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2079 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-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 $".
//