comparison 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
comparison
equal deleted inserted replaced
1399:8e569dd09d94 1400:ccd383e11ff8
4364 dw_window_set_font(tmp, _DWDefaultFont); 4364 dw_window_set_font(tmp, _DWDefaultFont);
4365 DW_MUTEX_UNLOCK; 4365 DW_MUTEX_UNLOCK;
4366 return tmp; 4366 return tmp;
4367 } 4367 }
4368 4368
4369 void _create_tooltip(HWND handle, char *text)
4370 {
4371 GtkTooltips *tooltips = NULL;
4372 GtkWidget *oldtooltips = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tooltip");
4373
4374 if(oldtooltips)
4375 gtk_widget_destroy(oldtooltips);
4376 if(text)
4377 {
4378 tooltips = gtk_tooltips_new();
4379 gtk_tooltips_set_tip(tooltips, handle, text, NULL);
4380 }
4381 gtk_object_set_data(GTK_OBJECT(handle), "_dw_tooltip", (gpointer)tooltips);
4382 }
4383
4369 /* 4384 /*
4370 * Create a new bitmap button window (widget) to be packed. 4385 * Create a new bitmap button window (widget) to be packed.
4371 * Parameters: 4386 * Parameters:
4372 * text: Bubble help text to be displayed. 4387 * text: Bubble help text to be displayed.
4373 * id: An ID of a bitmap in the resource file. 4388 * id: An ID of a bitmap in the resource file.
4374 */ 4389 */
4375 HWND dw_bitmapbutton_new(char *text, unsigned long id) 4390 HWND dw_bitmapbutton_new(char *text, unsigned long id)
4376 { 4391 {
4377 GtkWidget *tmp; 4392 GtkWidget *tmp;
4378 GtkWidget *bitmap; 4393 GtkWidget *bitmap;
4379 GtkTooltips *tooltips;
4380 int _locked_by_me = FALSE; 4394 int _locked_by_me = FALSE;
4381 4395
4382 DW_MUTEX_LOCK; 4396 DW_MUTEX_LOCK;
4383 tmp = gtk_button_new(); 4397 tmp = gtk_button_new();
4384 bitmap = dw_bitmap_new(id); 4398 bitmap = dw_bitmap_new(id);
4387 { 4401 {
4388 dw_window_set_bitmap(bitmap, id, NULL); 4402 dw_window_set_bitmap(bitmap, id, NULL);
4389 gtk_container_add (GTK_CONTAINER(tmp), bitmap); 4403 gtk_container_add (GTK_CONTAINER(tmp), bitmap);
4390 } 4404 }
4391 gtk_widget_show(tmp); 4405 gtk_widget_show(tmp);
4392 if(text) 4406 _create_tooltip(tmp, text);
4393 {
4394 tooltips = gtk_tooltips_new();
4395 gtk_tooltips_set_tip(tooltips, tmp, text, NULL);
4396 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_tooltip", (gpointer)tooltips);
4397 }
4398 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); 4407 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
4399 DW_MUTEX_UNLOCK; 4408 DW_MUTEX_UNLOCK;
4400 return tmp; 4409 return tmp;
4401 } 4410 }
4402 4411
4414 { 4423 {
4415 GtkWidget *bitmap; 4424 GtkWidget *bitmap;
4416 GtkWidget *box; 4425 GtkWidget *box;
4417 GtkWidget *label; 4426 GtkWidget *label;
4418 GtkWidget *button; 4427 GtkWidget *button;
4419 GtkTooltips *tooltips;
4420 char *label_text=NULL; 4428 char *label_text=NULL;
4421 int _locked_by_me = FALSE; 4429 int _locked_by_me = FALSE;
4422 4430
4423 DW_MUTEX_LOCK; 4431 DW_MUTEX_LOCK;
4424 4432
4448 4456
4449 /* Pack and show all our widgets */ 4457 /* Pack and show all our widgets */
4450 gtk_widget_show( box ); 4458 gtk_widget_show( box );
4451 gtk_container_add( GTK_CONTAINER(button), box ); 4459 gtk_container_add( GTK_CONTAINER(button), box );
4452 gtk_widget_show( button ); 4460 gtk_widget_show( button );
4453 if ( text ) 4461 _create_tooltip(tmp, text);
4454 {
4455 tooltips = gtk_tooltips_new();
4456 gtk_tooltips_set_tip( tooltips, button, text, NULL );
4457 gtk_object_set_data( GTK_OBJECT(button), "_dw_tooltip", (gpointer)tooltips );
4458 }
4459 gtk_object_set_data( GTK_OBJECT(button), "_dw_id", GINT_TO_POINTER(id) ); 4462 gtk_object_set_data( GTK_OBJECT(button), "_dw_id", GINT_TO_POINTER(id) );
4460 DW_MUTEX_UNLOCK; 4463 DW_MUTEX_UNLOCK;
4461 return button; 4464 return button;
4462 } 4465 }
4463 4466
4472 */ 4475 */
4473 HWND dw_bitmapbutton_new_from_data(char *text, unsigned long id, char *data, int len) 4476 HWND dw_bitmapbutton_new_from_data(char *text, unsigned long id, char *data, int len)
4474 { 4477 {
4475 GtkWidget *tmp; 4478 GtkWidget *tmp;
4476 GtkWidget *bitmap; 4479 GtkWidget *bitmap;
4477 GtkTooltips *tooltips;
4478 int _locked_by_me = FALSE; 4480 int _locked_by_me = FALSE;
4479 4481
4480 DW_MUTEX_LOCK; 4482 DW_MUTEX_LOCK;
4481 tmp = gtk_button_new(); 4483 tmp = gtk_button_new();
4482 bitmap = dw_bitmap_new(id); 4484 bitmap = dw_bitmap_new(id);
4485 { 4487 {
4486 dw_window_set_bitmap_from_data(bitmap, 0, data, len); 4488 dw_window_set_bitmap_from_data(bitmap, 0, data, len);
4487 gtk_container_add (GTK_CONTAINER(tmp), bitmap); 4489 gtk_container_add (GTK_CONTAINER(tmp), bitmap);
4488 } 4490 }
4489 gtk_widget_show(tmp); 4491 gtk_widget_show(tmp);
4490 if(text) 4492 _create_tooltip(tmp, text);
4491 {
4492 tooltips = gtk_tooltips_new();
4493 gtk_tooltips_set_tip(tooltips, tmp, text, NULL);
4494 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_tooltip", (gpointer)tooltips);
4495 }
4496 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); 4493 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
4497 DW_MUTEX_UNLOCK; 4494 DW_MUTEX_UNLOCK;
4498 return tmp; 4495 return tmp;
4499 } 4496 }
4500 4497
4930 * bubbletext: The text in the floating bubble tooltip. 4927 * bubbletext: The text in the floating bubble tooltip.
4931 */ 4928 */
4932 void API dw_window_set_tooltip(HWND handle, char *bubbletext) 4929 void API dw_window_set_tooltip(HWND handle, char *bubbletext)
4933 { 4930 {
4934 int _locked_by_me = FALSE; 4931 int _locked_by_me = FALSE;
4935 GtkTooltips *tooltips; 4932
4936 4933 DW_MUTEX_LOCK;
4937 DW_MUTEX_LOCK; 4934 _create_tooltip(handle, bubbletext);
4938 tooltips = gtk_tooltips_new();
4939 gtk_tooltips_set_tip(tooltips, handle, bubbletext ? bubbletext : "", NULL);
4940 gtk_object_set_data(GTK_OBJECT(handle), "_dw_tooltip", (gpointer)tooltips);
4941 DW_MUTEX_UNLOCK; 4935 DW_MUTEX_UNLOCK;
4942 } 4936 }
4943 4937
4944 /* 4938 /*
4945 * Gets the text used for a given window. 4939 * Gets the text used for a given window.