Mercurial > dwindows
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