Commit d4e4ff8467f6016380ba1b28584644eee167efef

Authored by perry.werneck@gmail.com
1 parent 8ac39478

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