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,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 | static void setup_screen_sizes(GtkWidget *widget, GtkWidget *obj) | 381 | static void setup_screen_sizes(GtkWidget *widget, GtkWidget *obj) |
362 | { | 382 | { |
363 | static const gchar * text[] = { "80x24", "80x32", "80x43", "132x27" }; | 383 | static const gchar * text[] = { "80x24", "80x32", "80x43", "132x27" }; |
364 | GtkWidget * menu = gtk_menu_new(); | 384 | GtkWidget * menu = gtk_menu_new(); |
365 | int model = lib3270_get_model_number(v3270_get_session(obj))-2; | 385 | int model = lib3270_get_model_number(v3270_get_session(obj))-2; |
366 | GSList * group = NULL; | 386 | GSList * group = NULL; |
367 | - GtkWidget * item; | ||
368 | int f; | 387 | int f; |
388 | + GtkWidget **item = g_new0(GtkWidget *,G_N_ELEMENTS(text)+1); | ||
369 | 389 | ||
370 | gtk_widget_set_sensitive(widget,TRUE); | 390 | gtk_widget_set_sensitive(widget,TRUE); |
371 | 391 | ||
372 | for(f=0;f<G_N_ELEMENTS(text);f++) | 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 | g_free(name); | 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 | gtk_widget_show(item); | 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 | if(f == model) | 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 | gtk_widget_show_all(menu); | 415 | gtk_widget_show_all(menu); |
394 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget),menu); | 416 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget),menu); |
@@ -455,13 +477,6 @@ | @@ -455,13 +477,6 @@ | ||
455 | set_string_to_config("terminal",name,"%s",value); | 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 | static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group) | 480 | static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group) |
466 | { | 481 | { |
467 | GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions"); | 482 | GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions"); |
@@ -648,7 +663,6 @@ | @@ -648,7 +663,6 @@ | ||
648 | g_signal_connect(widget->terminal,"disconnected",G_CALLBACK(disconnected),widget); | 663 | g_signal_connect(widget->terminal,"disconnected",G_CALLBACK(disconnected),widget); |
649 | g_signal_connect(widget->terminal,"connected",G_CALLBACK(connected),widget); | 664 | g_signal_connect(widget->terminal,"connected",G_CALLBACK(connected),widget); |
650 | g_signal_connect(widget->terminal,"update_config",G_CALLBACK(update_config),0); | 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 | g_signal_connect(widget->terminal,"selecting",G_CALLBACK(selecting),group); | 666 | g_signal_connect(widget->terminal,"selecting",G_CALLBACK(selecting),group); |
653 | g_signal_connect(widget->terminal,"popup",G_CALLBACK(popup_menu),popup); | 667 | g_signal_connect(widget->terminal,"popup",G_CALLBACK(popup_menu),popup); |
654 | g_signal_connect(widget->terminal,"has_text",G_CALLBACK(has_text),group); | 668 | g_signal_connect(widget->terminal,"has_text",G_CALLBACK(has_text),group); |