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); | ... | ... |