Commit d4e4ff8467f6016380ba1b28584644eee167efef
1 parent
8ac39478
Exists in
master
and in
5 other branches
Ajustes para que o menu acompanhe as mudanças na propriedade do widget
Showing
1 changed file
with
30 additions
and
16 deletions
Show diff stats
src/pw3270/window.c
| ... | ... | @@ -358,37 +358,59 @@ |
| 358 | 358 | } |
| 359 | 359 | } |
| 360 | 360 | |
| 361 | + static void update_model(GtkWidget *widget, guint id, const gchar *name, GtkWidget **radio) | |
| 362 | + { | |
| 363 | + int f; | |
| 364 | + | |
| 365 | + trace("Widget %p changed to %s (id=%d)",widget,name,id); | |
| 366 | + set_integer_to_config("terminal","model",id); | |
| 367 | + set_string_to_config("terminal","model_name","%s",name); | |
| 368 | + | |
| 369 | + id -= 2; | |
| 370 | + for(f=0;radio[f];f++) | |
| 371 | + { | |
| 372 | + if(f == id) | |
| 373 | + { | |
| 374 | + if(!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(radio[f]))) | |
| 375 | + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio[f]),TRUE); | |
| 376 | + return; | |
| 377 | + } | |
| 378 | + } | |
| 379 | + } | |
| 380 | + | |
| 361 | 381 | static void setup_screen_sizes(GtkWidget *widget, GtkWidget *obj) |
| 362 | 382 | { |
| 363 | 383 | static const gchar * text[] = { "80x24", "80x32", "80x43", "132x27" }; |
| 364 | 384 | GtkWidget * menu = gtk_menu_new(); |
| 365 | 385 | int model = lib3270_get_model_number(v3270_get_session(obj))-2; |
| 366 | 386 | GSList * group = NULL; |
| 367 | - GtkWidget * item; | |
| 368 | 387 | int f; |
| 388 | + GtkWidget **item = g_new0(GtkWidget *,G_N_ELEMENTS(text)+1); | |
| 369 | 389 | |
| 370 | 390 | gtk_widget_set_sensitive(widget,TRUE); |
| 371 | 391 | |
| 372 | 392 | for(f=0;f<G_N_ELEMENTS(text);f++) |
| 373 | 393 | { |
| 374 | - gchar * name = g_strdup_printf( _( "Model %d (%s)"),f+2,text[f]); | |
| 394 | + gchar * name = g_strdup_printf( _( "Model %d (%s)"),f+2,text[f]); | |
| 375 | 395 | |
| 376 | - item = gtk_radio_menu_item_new_with_label(group,name); | |
| 396 | + item[f] = gtk_radio_menu_item_new_with_label(group,name); | |
| 377 | 397 | g_free(name); |
| 378 | 398 | |
| 379 | - g_object_set_data(G_OBJECT(item),"mode_3270",GINT_TO_POINTER((f+2))); | |
| 399 | + g_object_set_data(G_OBJECT(item[f]),"mode_3270",GINT_TO_POINTER((f+2))); | |
| 380 | 400 | |
| 381 | - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); | |
| 401 | + group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item[f])); | |
| 382 | 402 | |
| 383 | 403 | gtk_widget_show(item); |
| 384 | - gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); | |
| 404 | + gtk_menu_shell_append(GTK_MENU_SHELL(menu),item[f]); | |
| 385 | 405 | |
| 386 | 406 | if(f == model) |
| 387 | - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),TRUE); | |
| 407 | + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item[f]),TRUE); | |
| 388 | 408 | |
| 389 | - g_signal_connect(G_OBJECT(item),"toggled",G_CALLBACK(set_screen_size),(gpointer) obj); | |
| 409 | + g_signal_connect(G_OBJECT(item[f]),"toggled",G_CALLBACK(set_screen_size),(gpointer) obj); | |
| 390 | 410 | |
| 391 | 411 | } |
| 412 | + g_object_set_data_full(G_OBJECT(menu),"screen_sizes",item,g_free); | |
| 413 | + g_signal_connect(obj,"model_changed",G_CALLBACK(update_model),item); | |
| 392 | 414 | |
| 393 | 415 | gtk_widget_show_all(menu); |
| 394 | 416 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget),menu); |
| ... | ... | @@ -455,13 +477,6 @@ |
| 455 | 477 | set_string_to_config("terminal",name,"%s",value); |
| 456 | 478 | } |
| 457 | 479 | |
| 458 | - static void update_model(GtkWidget *widget, guint id, const gchar *name) | |
| 459 | - { | |
| 460 | - trace("Widget %p changed to %s (id=%d)",widget,name,id); | |
| 461 | - set_integer_to_config("terminal","model",id); | |
| 462 | - set_string_to_config("terminal","model_name","%s",name); | |
| 463 | - } | |
| 464 | - | |
| 465 | 480 | static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group) |
| 466 | 481 | { |
| 467 | 482 | GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions"); |
| ... | ... | @@ -648,7 +663,6 @@ |
| 648 | 663 | g_signal_connect(widget->terminal,"disconnected",G_CALLBACK(disconnected),widget); |
| 649 | 664 | g_signal_connect(widget->terminal,"connected",G_CALLBACK(connected),widget); |
| 650 | 665 | g_signal_connect(widget->terminal,"update_config",G_CALLBACK(update_config),0); |
| 651 | - g_signal_connect(widget->terminal,"model_changed",G_CALLBACK(update_model),0); | |
| 652 | 666 | g_signal_connect(widget->terminal,"selecting",G_CALLBACK(selecting),group); |
| 653 | 667 | g_signal_connect(widget->terminal,"popup",G_CALLBACK(popup_menu),popup); |
| 654 | 668 | g_signal_connect(widget->terminal,"has_text",G_CALLBACK(has_text),group); | ... | ... |