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