changeset 1400:ccd383e11ff8

Allow removing of tooltips by passing NULL or "" and prevent double tooltips on some platforms.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 27 Nov 2011 20:28:15 +0000
parents 8e569dd09d94
children 7266e030a3e3
files gtk/dw.c gtk3/dw.c mac/dw.m os2/dw.c win/dw.c
diffstat 5 files changed, 41 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Sun Nov 27 12:08:05 2011 +0000
+++ b/gtk/dw.c	Sun Nov 27 20:28:15 2011 +0000
@@ -4366,6 +4366,21 @@
    return tmp;
 }
 
+void _create_tooltip(HWND handle, char *text)
+{
+   GtkTooltips *tooltips = NULL;
+   GtkWidget *oldtooltips = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tooltip");
+    
+   if(oldtooltips)
+      gtk_widget_destroy(oldtooltips);
+   if(text)
+   {
+      tooltips = gtk_tooltips_new();
+      gtk_tooltips_set_tip(tooltips, handle, text, NULL);
+   }
+   gtk_object_set_data(GTK_OBJECT(handle), "_dw_tooltip", (gpointer)tooltips);
+}
+
 /*
  * Create a new bitmap button window (widget) to be packed.
  * Parameters:
@@ -4376,7 +4391,6 @@
 {
    GtkWidget *tmp;
    GtkWidget *bitmap;
-   GtkTooltips *tooltips;
    int _locked_by_me = FALSE;
 
    DW_MUTEX_LOCK;
@@ -4389,12 +4403,7 @@
       gtk_container_add (GTK_CONTAINER(tmp), bitmap);
    }
    gtk_widget_show(tmp);
-   if(text)
-   {
-      tooltips = gtk_tooltips_new();
-      gtk_tooltips_set_tip(tooltips, tmp, text, NULL);
-      gtk_object_set_data(GTK_OBJECT(tmp), "_dw_tooltip", (gpointer)tooltips);
-   }
+   _create_tooltip(tmp, text);
    gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
    DW_MUTEX_UNLOCK;
    return tmp;
@@ -4416,7 +4425,6 @@
    GtkWidget *box;
    GtkWidget *label;
    GtkWidget *button;
-   GtkTooltips *tooltips;
    char *label_text=NULL;
    int _locked_by_me = FALSE;
 
@@ -4450,12 +4458,7 @@
    gtk_widget_show( box );
    gtk_container_add( GTK_CONTAINER(button), box );
    gtk_widget_show( button );
-   if ( text )
-   {
-      tooltips = gtk_tooltips_new();
-      gtk_tooltips_set_tip( tooltips, button, text, NULL );
-      gtk_object_set_data( GTK_OBJECT(button), "_dw_tooltip", (gpointer)tooltips );
-   }
+   _create_tooltip(tmp, text);
    gtk_object_set_data( GTK_OBJECT(button), "_dw_id", GINT_TO_POINTER(id) );
    DW_MUTEX_UNLOCK;
    return button;
@@ -4474,7 +4477,6 @@
 {
    GtkWidget *tmp;
    GtkWidget *bitmap;
-   GtkTooltips *tooltips;
    int _locked_by_me = FALSE;
 
    DW_MUTEX_LOCK;
@@ -4487,12 +4489,7 @@
       gtk_container_add (GTK_CONTAINER(tmp), bitmap);
    }
    gtk_widget_show(tmp);
-   if(text)
-   {
-      tooltips = gtk_tooltips_new();
-      gtk_tooltips_set_tip(tooltips, tmp, text, NULL);
-      gtk_object_set_data(GTK_OBJECT(tmp), "_dw_tooltip", (gpointer)tooltips);
-   }
+   _create_tooltip(tmp, text);
    gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
    DW_MUTEX_UNLOCK;
    return tmp;
@@ -4932,12 +4929,9 @@
 void API dw_window_set_tooltip(HWND handle, char *bubbletext)
 {
    int _locked_by_me = FALSE;
-   GtkTooltips *tooltips;
-
-   DW_MUTEX_LOCK;
-   tooltips = gtk_tooltips_new();
-   gtk_tooltips_set_tip(tooltips, handle, bubbletext ? bubbletext : "", NULL);
-   gtk_object_set_data(GTK_OBJECT(handle), "_dw_tooltip", (gpointer)tooltips);
+
+   DW_MUTEX_LOCK;
+   _create_tooltip(handle, bubbletext);
    DW_MUTEX_UNLOCK;
 }
 
--- a/gtk3/dw.c	Sun Nov 27 12:08:05 2011 +0000
+++ b/gtk3/dw.c	Sun Nov 27 20:28:15 2011 +0000
@@ -4345,7 +4345,10 @@
    int _locked_by_me = FALSE;
 
    DW_MUTEX_LOCK;
-   gtk_widget_set_tooltip_text(handle, bubbletext);
+   if(bubbletext && *bubbletext)
+      gtk_widget_set_tooltip_text(handle, bubbletext);
+   else
+      gtk_widget_set_has_tooltip(handle, FALSE);
    DW_MUTEX_UNLOCK;
 }
 
--- a/mac/dw.m	Sun Nov 27 12:08:05 2011 +0000
+++ b/mac/dw.m	Sun Nov 27 20:28:15 2011 +0000
@@ -8172,7 +8172,10 @@
 void API dw_window_set_tooltip(HWND handle, char *bubbletext)
 {
     id object = handle;
-    [object setToolTip:[NSString stringWithUTF8String:bubbletext]];
+    if(bubbletext && *bubbletext)
+        [object setToolTip:[NSString stringWithUTF8String:bubbletext]];
+    else
+        [object setToolTip:nil];
 }
 
 /*
--- a/os2/dw.c	Sun Nov 27 12:08:05 2011 +0000
+++ b/os2/dw.c	Sun Nov 27 20:28:15 2011 +0000
@@ -6393,13 +6393,14 @@
 {
    HWND buddy = (HWND)dw_window_get_data(handle, "_dw_comboentry");
    WindowData *blah = (WindowData *)WinQueryWindowPtr(buddy ? buddy : handle, QWP_USER);
+   char *text = bubbletext ? bubbletext : "";
 
    buddy = (HWND)dw_window_get_data(handle, "_dw_buddy");
 
    if(blah)
-       strncpy(blah->bubbletext, bubbletext, BUBBLE_HELP_MAX - 1);
+       strncpy(blah->bubbletext, text, BUBBLE_HELP_MAX - 1);
    if(buddy && (blah = (WindowData *)WinQueryWindowPtr(buddy, QWP_USER)))
-       strncpy(blah->bubbletext, bubbletext, BUBBLE_HELP_MAX - 1);
+       strncpy(blah->bubbletext, text, BUBBLE_HELP_MAX - 1);
 }
 
 /*
--- a/win/dw.c	Sun Nov 27 12:08:05 2011 +0000
+++ b/win/dw.c	Sun Nov 27 20:28:15 2011 +0000
@@ -3529,16 +3529,22 @@
 
 void _create_tooltip(HWND handle, char *text)
 {
+    HWND hwndTT = 0;
+    HWND oldTT = (HWND)dw_window_get_data(handle, "_dw_tooltip");
+    
+    if(oldTT)
+        DestroyWindow(oldTT);
     if(text)
     {
+        TOOLINFO ti = { 0 };
+        
         /* Create a tooltip. */
-        HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST,
+        hwndTT = CreateWindowEx(WS_EX_TOPMOST,
             TOOLTIPS_CLASS, NULL,
             WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
             CW_USEDEFAULT, CW_USEDEFAULT,
             CW_USEDEFAULT, CW_USEDEFAULT,
             handle, NULL, DWInstance,NULL);
-        TOOLINFO ti = { 0 };
 
         SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
 
@@ -3555,6 +3561,7 @@
         /* Associate the tooltip with the "tool" window. */
         SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
     }
+    dw_window_set_data(handle, "_dw_tooltip", (void *)hwndTT);
 }
 
 #ifndef GDIPLUS