From 3bc5be71a39bf2ed9d9937a4f60df61dd6d3a2b4 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Sat, 9 Apr 2016 15:37:40 +0000 Subject: Rewrite Fl_Tooltip.cxx for the driver model. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11565 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/Fl_System_Driver.H | 4 ++++ src/Fl_Tooltip.cxx | 12 +++++------- src/drivers/Posix/Fl_Posix_System_Driver.H | 1 + src/drivers/WinAPI/Fl_WinAPI_System_Driver.H | 1 + 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/FL/Fl_System_Driver.H b/FL/Fl_System_Driver.H index c7dea05df..db0c1119f 100644 --- a/FL/Fl_System_Driver.H +++ b/FL/Fl_System_Driver.H @@ -118,6 +118,10 @@ public: virtual int need_menu_handle_part1_extra() {return 0;} // implement to support fl_open_uri() virtual int open_uri(const char *uri, char *msg, int msglen) {return 0;} + // the default implementation of use_tooltip_timeout_condition() may be enough + virtual int use_tooltip_timeout_condition() {return 0;} + // the default implementation of use_recent_tooltip_fix() may be enough + virtual int use_recent_tooltip_fix() {return 0;} }; #endif // FL_SYSTEM_DRIVER_H diff --git a/src/Fl_Tooltip.cxx b/src/Fl_Tooltip.cxx index 26a2496eb..2d88182fe 100644 --- a/src/Fl_Tooltip.cxx +++ b/src/Fl_Tooltip.cxx @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include // strdup() @@ -151,9 +153,8 @@ static void tooltip_timeout(void*) { if (window) window->hide(); } else { int condition = 1; -#if !(defined(__APPLE__) || defined(WIN32)) // bugfix: no need to refactor - condition = (Fl::grab() == NULL); -#endif +// bugfix: no need to refactor + if (Fl::system_driver()->use_tooltip_timeout_condition()) condition = (Fl::grab() == NULL); if ( condition ) { if (!window) window = new Fl_TooltipBox; // this cast bypasses the normal Fl_Window label() code: @@ -287,12 +288,9 @@ void Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* if (recent_tooltip) { if (window) window->hide(); Fl::add_timeout(Fl_Tooltip::hoverdelay(), tooltip_timeout); - } else if (Fl_Tooltip::delay() < .1) { -#ifdef WIN32 // possible fix for the Windows titlebar, it seems to want the // window to be destroyed, moving it messes up the parenting: - if (window && window->visible()) window->hide(); -#endif // WIN32 + if (Fl::system_driver()->use_recent_tooltip_fix() && window && window->visible()) window->hide(); tooltip_timeout(0); } else { if (window && window->visible()) window->hide(); diff --git a/src/drivers/Posix/Fl_Posix_System_Driver.H b/src/drivers/Posix/Fl_Posix_System_Driver.H index 7f95ede63..de7ab085f 100644 --- a/src/drivers/Posix/Fl_Posix_System_Driver.H +++ b/src/drivers/Posix/Fl_Posix_System_Driver.H @@ -72,6 +72,7 @@ public: virtual int need_menu_handle_part2() {return 1;} virtual int need_menu_handle_part1_extra() {return 1;} virtual int open_uri(const char *uri, char *msg, int msglen); + virtual int use_tooltip_timeout_condition() {return 1;} }; #endif // FL_POSIX_SYSTEM_DRIVER_H diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H index 6079b0721..7d99c4548 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H @@ -76,6 +76,7 @@ public: virtual int filename_isdir_quick(const char* n); virtual const char *filename_ext(const char *buf); virtual int open_uri(const char *uri, char *msg, int msglen); + virtual int use_recent_tooltip_fix() {return 1;} }; #endif // FL_WINAPI_SYSTEM_DRIVER_H -- cgit v1.2.3