diff gtk/dw.c @ 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 614fb124d2e2
children 7266e030a3e3
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;
 }