Commit a008763afb6d08b24515d069c92cf45163ec5687

Authored by Perry Werneck
1 parent b9333f4a
Exists in v5.2

Updating settings manager.

Showing 2 changed files with 15 additions and 631 deletions   Show diff stats
src/pw3270/colors.c
... ... @@ -41,637 +41,6 @@
41 41  
42 42 /*--[ Implement ]------------------------------------------------------------------------------------*/
43 43  
44   -/*
45   -static void store_color_scheme(GtkWidget *widget)
46   -{
47   - int f;
48   -
49   - GString *text = g_string_new("");
50   - // Base colors
51   - // base=#000000,#7890F0,#FF0000,#FF00FF,#00FF00,#00FFFF,#FFFF00,#FFFFFF,#000000,#000080,#FFA200,#800080,#008000,#008080,#A0A000,#C0C0C0
52   - for(f=0;f<V3270_COLOR_BASE;f++)
53   - {
54   - if(f)
55   - g_string_append_c(text,';');
56   - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,f)));
57   - }
58   - set_string_to_config("color-scheme","base","%s",text->str);
59   - g_string_truncate(text,0);
60   -
61   - // Field colors.
62   - // field=#00FF00,#FF0000,#00FFFF,#FFFFFF
63   - for(f=0;f<4;f++)
64   - {
65   - if(f)
66   - g_string_append_c(text,';');
67   - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_FIELD+f)));
68   - }
69   - set_string_to_config("color-scheme","field","%s",text->str);
70   - g_string_truncate(text,0);
71   -
72   - // Selection colors
73   - // selection=#404040,#ffffff
74   - for(f=0;f<2;f++)
75   - {
76   - if(f)
77   - g_string_append_c(text,';');
78   - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_SELECTED_BG+f)));
79   - }
80   - set_string_to_config("color-scheme","selection","%s",text->str);
81   - g_string_truncate(text,0);
82   -
83   - // OIA colors
84   - // OIA=#000000,#00FF00,#7890F0,#FFFFFF,#FF0000
85   - for(f=0;f<5;f++)
86   - {
87   - if(f)
88   - g_string_append_c(text,';');
89   - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_OIA_BACKGROUND+f)));
90   - }
91   - set_string_to_config("color-scheme","OIA","%s",text->str);
92   - g_string_truncate(text,0);
93   -
94   - // Cross-hair
95   - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_CROSS_HAIR)));
96   -
97   - set_string_to_config("color-scheme","cross-hair","%s",text->str);
98   - g_string_free(text,TRUE);
99   -
100   -}
101   -
102   -static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkRGBA *clr)
103   -{
104   - const gchar * val;
105   - int f;
106   -
107   - // Load base colors
108   - val = g_key_file_get_string(conf,group,"base",NULL);
109   - if(val)
110   - {
111   - // Process base colors
112   - gchar **str = g_strsplit(val,";",V3270_COLOR_BASE);
113   -
114   - switch(g_strv_length(str))
115   - {
116   - case 2: // Only 2 colors, create monocromatic table
117   - v3270_set_mono_color_table(clr,str[1],str[0]);
118   - break;
119   -
120   - case V3270_COLOR_BASE: // All colors, update it
121   - for(f=0;f<V3270_COLOR_BASE;f++)
122   - gdk_rgba_parse(clr+f,str[f]);
123   - break;
124   -
125   - default:
126   -
127   - // Unexpected size, load new colors over the defaults
128   - g_warning("base color list in %s has %d elements, should have %d",group,g_strv_length(str),V3270_COLOR_GRAY);
129   -
130   - gdk_rgba_parse(clr,str[0]);
131   - gdk_rgba_parse(clr+1,str[1]);
132   -
133   - for(f=2;f<V3270_COLOR_BASE;f++)
134   - clr[f] = clr[1];
135   -
136   - clr[V3270_COLOR_BLACK] = *clr;
137   -
138   - for(f=2;f<MIN(g_strv_length(str),V3270_COLOR_BASE-1);f++)
139   - gdk_rgba_parse(clr+f,str[f]);
140   -
141   - }
142   - g_strfreev(str);
143   -
144   - }
145   - else
146   - {
147   - g_warning("Color scheme [%s] has no \"base\" entry, using green on black",group);
148   -
149   - gdk_rgba_parse(clr,"black");
150   - gdk_rgba_parse(clr+1,"green");
151   -
152   - for(f=2;f<V3270_COLOR_BASE;f++)
153   - clr[f] = clr[1];
154   - clr[V3270_COLOR_BLACK] = *clr;
155   - }
156   -
157   - // Load field colors
158   - clr[V3270_COLOR_FIELD] = clr[V3270_COLOR_GREEN];
159   - clr[V3270_COLOR_FIELD_INTENSIFIED] = clr[V3270_COLOR_RED];
160   - clr[V3270_COLOR_FIELD_PROTECTED] = clr[V3270_COLOR_BLUE];
161   - clr[V3270_COLOR_FIELD_PROTECTED_INTENSIFIED] = clr[V3270_COLOR_WHITE];
162   -
163   - val = g_key_file_get_string(conf,group,"field",NULL);
164   - if(val)
165   - {
166   - gchar **str = g_strsplit(val,";",5);
167   -
168   - for(f=0;f< MIN(g_strv_length(str),4); f++)
169   - gdk_rgba_parse(clr+V3270_COLOR_FIELD+f,str[f]);
170   -
171   - g_strfreev(str);
172   - }
173   -
174   - // Load selection colors
175   - clr[V3270_COLOR_SELECTED_BG] = clr[V3270_COLOR_WHITE];
176   - clr[V3270_COLOR_SELECTED_FG] = clr[V3270_COLOR_BLACK];
177   - val = g_key_file_get_string(conf,group,"selection",NULL);
178   - if(val)
179   - {
180   - gchar **str = g_strsplit(val,";",3);
181   -
182   - for(f=0;f< MIN(g_strv_length(str),2); f++)
183   - gdk_rgba_parse(clr+V3270_COLOR_SELECTED_BG+f,str[f]);
184   -
185   - g_strfreev(str);
186   - }
187   -
188   - // Load OIA colors
189   - clr[V3270_COLOR_OIA_BACKGROUND] = clr[V3270_COLOR_BACKGROUND];
190   - clr[V3270_COLOR_OIA_FOREGROUND] = clr[V3270_COLOR_GREEN];
191   - clr[V3270_COLOR_OIA_SEPARATOR] = clr[V3270_COLOR_GREEN];
192   - clr[V3270_COLOR_OIA_STATUS_OK] = clr[V3270_COLOR_GREEN];
193   - clr[V3270_COLOR_OIA_STATUS_INVALID] = clr[V3270_COLOR_RED];
194   - clr[V3270_COLOR_OIA_STATUS_WARNING] = clr[V3270_COLOR_YELLOW];
195   -
196   - val = g_key_file_get_string(conf,group,"OIA",NULL);
197   - if(val)
198   - {
199   - gchar **str = g_strsplit(val,";",6);
200   -
201   - // 0 = V3270_COLOR_OIA_BACKGROUND,
202   - // 1 = V3270_COLOR_OIA_FOREGROUND,
203   - // 2 = V3270_COLOR_OIA_SEPARATOR,
204   - // 3 = V3270_COLOR_OIA_STATUS_OK,
205   - // 4 = V3270_COLOR_OIA_STATUS_WARNING,
206   - // 5 = V3270_COLOR_OIA_STATUS_INVALID,
207   -
208   - if(g_strv_length(str) == 5)
209   - {
210   - for(f=0;f < 5; f++)
211   - gdk_rgba_parse(clr+V3270_COLOR_OIA_BACKGROUND+f,str[f]);
212   - clr[V3270_COLOR_OIA_STATUS_INVALID] = clr[V3270_COLOR_OIA_STATUS_WARNING];
213   - }
214   - else
215   - {
216   - for(f=0;f< MIN(g_strv_length(str),6); f++)
217   - gdk_rgba_parse(clr+V3270_COLOR_OIA_BACKGROUND+f,str[f]);
218   - }
219   -
220   - g_strfreev(str);
221   - }
222   -
223   - // Setup extended elements
224   - clr[V3270_COLOR_CROSS_HAIR] = clr[V3270_COLOR_GREEN];
225   -
226   - val = g_key_file_get_string(conf,group,"cross-hair",NULL);
227   - if(val)
228   - gdk_rgba_parse(clr+V3270_COLOR_CROSS_HAIR,val);
229   -
230   -}
231   -
232   - static void color_scheme_changed(GtkComboBox *combo)
233   - {
234   - GtkWidget * terminal = (GtkWidget *) g_object_get_data(G_OBJECT(combo),"terminal_widget");
235   - GtkWidget * colorsel = (GtkWidget *) g_object_get_data(G_OBJECT(combo),"color_selection_widget");
236   - GdkRGBA * clr = NULL;
237   - GValue value = { 0, };
238   - GtkTreeIter iter;
239   -
240   - if(!gtk_combo_box_get_active_iter(combo,&iter))
241   - return;
242   -
243   - gtk_tree_model_get_value(gtk_combo_box_get_model(combo),&iter,1,&value);
244   -
245   - clr = g_value_get_pointer(&value);
246   - g_object_set_data(G_OBJECT(combo),"selected",clr);
247   -
248   - if(terminal)
249   - {
250   - // Update terminal colors
251   - int f;
252   - for(f=0;f<V3270_COLOR_COUNT;f++)
253   - v3270_set_color(terminal,f,clr+f);
254   -
255   - v3270_reload(terminal);
256   - gtk_widget_queue_draw(terminal);
257   - }
258   -
259   - if(colorsel)
260   - {
261   - // Update color selection widget
262   - int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colorsel),"colorid"));
263   - if(id >= 0 && id < V3270_COLOR_COUNT)
264   - {
265   -#if USE_GTK_COLOR_CHOOSER
266   - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(colorsel),clr+id);
267   -#else
268   - gtk_color_selection_set_current_rgba(GTK_COLOR_SELECTION(colorsel),clr+id);
269   -#endif // GTK_CHECK_VERSION
270   - }
271   - }
272   -
273   - }
274   -
275   - static gboolean compare_colors(const GdkRGBA *colora, const GdkRGBA *colorb)
276   - {
277   - int f;
278   -
279   - for(f=0;f<V3270_COLOR_COUNT;f++)
280   - {
281   - if(!gdk_rgba_equal(colora+f,colorb+f))
282   - return FALSE;
283   - }
284   -
285   - return TRUE;
286   - }
287   -
288   - ///
289   - /// @brief Create a color scheme dropdown button
290   - ///
291   - /// @param clr Pointer to current color table
292   - ///
293   - /// @return Combobox widget with colors.conf loaded and set
294   - ///
295   - ///
296   - GtkWidget * color_scheme_new(const GdkRGBA *current)
297   - {
298   - gchar * filename = build_data_filename("colors.conf",NULL);
299   - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_POINTER);
300   - GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
301   - GtkWidget * widget = gtk_combo_box_new_with_model(model);
302   - GtkTreeIter iter;
303   -
304   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
305   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL);
306   -
307   - gtk_widget_set_sensitive(widget,FALSE);
308   -
309   - if(!g_file_test(filename,G_FILE_TEST_IS_REGULAR))
310   - {
311   - g_warning("Unable to load color schemes in \"%s\"",filename);
312   - }
313   - else
314   - {
315   - GKeyFile * conf = g_key_file_new();
316   - GError * err = NULL;
317   -
318   - g_key_file_load_from_file(conf,filename,G_KEY_FILE_NONE,&err);
319   - if(err)
320   - {
321   - g_warning("Error \"%s\" loading %s",err->message,filename);
322   - g_error_free(err);
323   - }
324   - else
325   - {
326   - gsize len = 0;
327   - gchar **group = g_key_file_get_groups(conf,&len);
328   - GdkRGBA * table = g_new0(GdkRGBA,(len*V3270_COLOR_COUNT));
329   - int pos = 0;
330   - int g;
331   - gboolean found = FALSE;
332   -
333   - g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(color_scheme_changed),0);
334   -
335   - g_object_set_data_full(G_OBJECT(widget),"colortable",table,g_free);
336   -
337   - for(g=0;g<len;g++)
338   - {
339   - // Setup colors for current entry
340   - GdkRGBA * clr = table+pos;
341   - const gchar * label = g_key_file_get_locale_string(conf,group[g],"label",NULL,NULL);
342   -
343   - load_color_scheme(conf,group[g],clr);
344   -
345   - // Set it in the combobox
346   - gtk_list_store_append((GtkListStore *) model,&iter);
347   - gtk_list_store_set((GtkListStore *) model, &iter,
348   - 0, label ? label : group[g],
349   - 1, clr,
350   - -1);
351   -
352   - if(compare_colors(clr,current) && current)
353   - {
354   - // It's the same color, select iter
355   - trace("Current color scheme is \"%s\"",group[g]);
356   - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter);
357   - found = TRUE;
358   - }
359   -
360   - // move to next color list
361   - pos += V3270_COLOR_COUNT;
362   - }
363   -
364   - g_strfreev(group);
365   -
366   - if(!found)
367   - {
368   - // Custom color table, save it as a new dropdown entry.
369   -
370   - GdkRGBA * clr = g_new0(GdkRGBA,V3270_COLOR_COUNT);
371   - int f;
372   -
373   - for(f=0;f<V3270_COLOR_COUNT;f++)
374   - clr[f] = current[f];
375   -
376   - trace("Current color scheme is \"%s\"","custom");
377   -
378   - g_object_set_data_full(G_OBJECT(widget),"customcolortable",clr,g_free);
379   -
380   - gtk_list_store_append((GtkListStore *) model,&iter);
381   - gtk_list_store_set((GtkListStore *) model, &iter,
382   - 0, _( "Custom colors" ),
383   - 1, clr,
384   - -1);
385   -
386   - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter);
387   -
388   - }
389   -
390   -
391   - gtk_widget_set_sensitive(widget,TRUE);
392   - }
393   -
394   - g_key_file_free(conf);
395   -
396   - }
397   - g_free(filename);
398   -
399   - return widget;
400   - }
401   -
402   -#if USE_GTK_COLOR_CHOOSER
403   - static void color_activated(GtkColorChooser *chooser, GdkRGBA *clr, GtkWidget *widget)
404   - {
405   - int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(chooser),"colorid"));
406   -
407   - if(id < 0 || id >= V3270_COLOR_COUNT)
408   - return;
409   -
410   - trace("Updating color %d",id);
411   -
412   - v3270_set_color(widget,id,clr);
413   - v3270_reload(widget);
414   - gtk_widget_queue_draw(widget);
415   -
416   - }
417   -#else
418   - static void color_changed(GtkWidget *colorselection, GtkWidget *widget)
419   - {
420   - GdkRGBA clr;
421   - int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colorselection),"colorid"));
422   -
423   - if(id < 0 || id >= V3270_COLOR_COUNT)
424   - return;
425   -
426   - gtk_color_selection_get_current_rgba(GTK_COLOR_SELECTION(colorselection),&clr);
427   -
428   - v3270_set_color(widget,id,&clr);
429   - v3270_reload(widget);
430   - gtk_widget_queue_draw(widget);
431   - }
432   -#endif // GTK_CHECK_VERSION
433   -
434   - static void color_selected(GtkTreeSelection *selection, GtkWidget *color)
435   - {
436   - GtkWidget * widget = g_object_get_data(G_OBJECT(selection),"v3270");
437   -#if ! USE_GTK_COLOR_CHOOSER
438   - GdkRGBA * saved = g_object_get_data(G_OBJECT(selection),"lastcolors");
439   -#endif // !GTK(3,4,0)
440   - GValue value = { 0, };
441   - GtkTreeModel * model;
442   - GtkTreeIter iter;
443   - GdkRGBA * clr;
444   - int id;
445   -
446   - gtk_widget_set_sensitive(color,FALSE);
447   -
448   - if(!gtk_tree_selection_get_selected(selection,&model,&iter))
449   - return;
450   -
451   - gtk_tree_model_get_value(model,&iter,1,&value);
452   -
453   - id = g_value_get_int(&value);
454   -
455   - if(id < 0 || id >= V3270_COLOR_COUNT)
456   - return;
457   -
458   - g_object_set_data(G_OBJECT(color),"colorid",GINT_TO_POINTER(id));
459   - clr = v3270_get_color(widget,id);
460   -
461   -#if USE_GTK_COLOR_CHOOSER
462   - {
463   - GValue value;
464   -
465   - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color),clr);
466   -
467   - g_value_init(&value, G_TYPE_BOOLEAN);
468   - g_value_set_boolean(&value,FALSE);
469   - g_object_set_property(G_OBJECT(color),"show-editor",&value);
470   - }
471   -#else
472   - gtk_color_selection_set_previous_rgba(GTK_COLOR_SELECTION(color),saved+id);
473   - gtk_color_selection_set_current_rgba(GTK_COLOR_SELECTION(color),clr);
474   -#endif // GTK_CHECK_VERSION
475   -
476   - gtk_widget_set_sensitive(color,TRUE);
477   - }
478   -
479   - void editcolors_action(GtkAction *action, GtkWidget *widget)
480   - {
481   -// static const gchar *custom = N_( "Custom colors" );
482   -
483   - static const struct _node
484   - {
485   - int id;
486   - const char *text;
487   - } node[] =
488   - {
489   - { V3270_COLOR_BACKGROUND, N_( "Terminal colors" ) },
490   - { V3270_COLOR_FIELD, N_( "Field colors" ) },
491   - { V3270_COLOR_SELECTED_BG, N_( "Misc colors" ) },
492   - };
493   -
494   - static const gchar *color_name[V3270_COLOR_COUNT] =
495   - {
496   - N_( "Background" ), // V3270_COLOR_BACKGROUND
497   - N_( "Blue" ), // V3270_COLOR_BLUE
498   - N_( "Red" ), // V3270_COLOR_RED
499   - N_( "Pink" ), // V3270_COLOR_PINK
500   - N_( "Green" ), // V3270_COLOR_GREEN
501   - N_( "Turquoise" ), // V3270_COLOR_TURQUOISE
502   - N_( "Yellow" ), // V3270_COLOR_YELLOW
503   - N_( "White" ), // V3270_COLOR_WHITE
504   - N_( "Black" ), // V3270_COLOR_BLACK
505   - N_( "Dark Blue" ), // V3270_COLOR_DARK_BLUE
506   - N_( "Orange" ), // V3270_COLOR_ORANGE
507   - N_( "Purple" ), // V3270_COLOR_PURPLE
508   - N_( "Dark Green" ), // V3270_COLOR_DARK_GREEN
509   - N_( "Dark Turquoise" ), // V3270_COLOR_DARK_TURQUOISE
510   - N_( "Mustard" ), // V3270_COLOR_MUSTARD
511   - N_( "Gray" ), // V3270_COLOR_GRAY
512   -
513   - N_( "Normal/Unprotected" ), // V3270_COLOR_FIELD
514   - N_( "Intensified/Unprotected" ), // V3270_COLOR_FIELD_INTENSIFIED
515   - N_( "Normal/Protected" ), // V3270_COLOR_FIELD_PROTECTED
516   - N_( "Intensified/Protected" ), // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED
517   -
518   - N_( "Selection background" ), // TERMINAL_COLOR_SELECTED_BG
519   - N_( "Selection foreground" ), // TERMINAL_COLOR_SELECTED_FG
520   -
521   - N_( "Cross hair cursor" ), // TERMINAL_COLOR_CROSS_HAIR
522   -
523   - // Oia Colors
524   - N_( "OIA background" ), // TERMINAL_COLOR_OIA_BACKGROUND
525   - N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND
526   - N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR
527   - N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK
528   - N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING
529   - N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID
530   -
531   - };
532   -
533   - const gchar * title = g_object_get_data(G_OBJECT(action),"title");
534   - GtkWidget * dialog = gtk_dialog_new_with_buttons ( gettext(title ? title : N_( "Color setup") ),
535   - GTK_WINDOW(gtk_widget_get_toplevel(widget)),
536   - GTK_DIALOG_DESTROY_WITH_PARENT,
537   - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
538   - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
539   - NULL );
540   -#if GTK_CHECK_VERSION(3,0,0)
541   - GtkWidget * panned = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
542   -#else
543   - GtkWidget * panned = gtk_hbox_new(FALSE,2);
544   -#endif // GTK(3,0,0)
545   -
546   - GtkWidget * tree;
547   - GtkWidget * color;
548   - GdkRGBA saved[V3270_COLOR_COUNT];
549   -
550   - // Color dialog setup
551   -#if USE_GTK_COLOR_CHOOSER
552   - color = gtk_color_chooser_widget_new();
553   - gtk_widget_set_sensitive(color,0);
554   - g_signal_connect(G_OBJECT(color),"color-activated",G_CALLBACK(color_activated),widget);
555   -#else
556   - color = gtk_color_selection_new();
557   - gtk_widget_set_sensitive(color,0);
558   - gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(color),FALSE);
559   - gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(color),TRUE);
560   - g_signal_connect(G_OBJECT(color),"color-changed",G_CALLBACK(color_changed),widget);
561   -#endif // GTK_CHECK_VERSION
562   -
563   - gtk_box_pack_end(GTK_BOX(panned),color,TRUE,TRUE,0);
564   - g_object_set_data(G_OBJECT(color),"colorid",(gpointer) -1);
565   -
566   - // Tree view with all available colors
567   - {
568   - GtkTreeModel * model = (GtkTreeModel *) gtk_tree_store_new(2,G_TYPE_STRING,G_TYPE_INT);
569   - GtkWidget * box;
570   - GtkTreeIter iter;
571   - GtkTreeIter parent;
572   - GtkTreeSelection * select;
573   - int f;
574   - int title = 0;
575   -
576   - tree = gtk_tree_view_new_with_model(model);
577   -
578   - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree),FALSE);
579   - gtk_tree_view_insert_column_with_attributes( GTK_TREE_VIEW(tree),
580   - -1,
581   - "color",gtk_cell_renderer_text_new(),"text",
582   - 0, NULL );
583   -
584   - gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL);
585   - gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);
586   -
587   - select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree));
588   -
589   - g_object_set_data(G_OBJECT(select),"v3270",widget);
590   - g_object_set_data(G_OBJECT(select),"lastcolors",saved);
591   -
592   - gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
593   - g_signal_connect(G_OBJECT(select),"changed",G_CALLBACK(color_selected),color);
594   -
595   - for(f=0;f<V3270_COLOR_COUNT;f++)
596   - {
597   - saved[f] = *(v3270_get_color(widget,f));
598   -
599   - if(f == node[title].id)
600   - {
601   - gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL);
602   - gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);
603   - }
604   - gtk_tree_store_append((GtkTreeStore *) model,&iter,&parent);
605   - gtk_tree_store_set((GtkTreeStore *) model, &iter, 0, gettext(color_name[f]), 1, f, -1);
606   - }
607   -
608   - gtk_tree_view_expand_all(GTK_TREE_VIEW(tree));
609   -
610   - box = gtk_scrolled_window_new(NULL,NULL);
611   - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(box),GTK_POLICY_NEVER,GTK_POLICY_ALWAYS);
612   - gtk_container_add(GTK_CONTAINER(box),tree);
613   - gtk_box_pack_start(GTK_BOX(panned),box,TRUE,TRUE,0);
614   -
615   -
616   - }
617   -
618   - gtk_widget_show_all(panned);
619   - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(panned),TRUE,TRUE,2);
620   -
621   - // Color scheme combo
622   - {
623   -#if GTK_CHECK_VERSION(3,0,0)
624   - GtkWidget * box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
625   -#else
626   - GtkWidget * box = gtk_hbox_new(FALSE,2);
627   -#endif // GTK(3,0,0)
628   - GtkWidget * button = color_scheme_new(v3270_get_color_table(widget));
629   -
630   - g_object_set_data(G_OBJECT(button),"terminal_widget",widget);
631   - g_object_set_data(G_OBJECT(button),"color_selection_widget",color);
632   -
633   - gtk_box_pack_start(GTK_BOX(box),gtk_label_new(_("Color scheme:")),FALSE,FALSE,2);
634   - gtk_box_pack_start(GTK_BOX(box),button,TRUE,TRUE,2);
635   - gtk_widget_show_all(box);
636   - gtk_box_pack_end(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),box,FALSE,FALSE,2);
637   - }
638   -
639   - // Run dialog
640   -
641   - if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
642   - {
643   - // Accepted, save in configuration file
644   - int f;
645   - GString *str = g_string_new("");
646   - for(f=0;f<V3270_COLOR_COUNT;f++)
647   - {
648   - if(f)
649   - g_string_append_c(str,';');
650   - g_string_append_printf(str,"%s",gdk_rgba_to_string(v3270_get_color(widget,f)));
651   - }
652   - set_string_to_config("terminal","colors","%s",str->str);
653   - g_string_free(str,TRUE);
654   -
655   - store_color_scheme(widget);
656   - }
657   - else
658   - {
659   - // Rejected, restore original colors
660   - int f;
661   -
662   - for(f=0;f<V3270_COLOR_COUNT;f++)
663   - v3270_set_color(widget,f,saved+f);
664   - }
665   -
666   - gtk_widget_destroy(dialog);
667   -
668   - // Redraw widget
669   - v3270_reload(widget);
670   - gtk_widget_queue_draw(widget);
671   -
672   - }
673   -
674   -*/
675 44  
676 45 void editcolors_action(GtkAction *action, GtkWidget *terminal)
677 46 {
... ...
src/pw3270/window.c
... ... @@ -34,10 +34,12 @@
34 34 #include <lib3270/popup.h>
35 35 #include <lib3270/actions.h>
36 36 #include <lib3270/trace.h>
  37 +#include <lib3270/log.h>
37 38 #include <lib3270/toggle.h>
38 39 #include <lib3270/properties.h>
39 40 #include <v3270/trace.h>
40 41 #include <v3270/toggle.h>
  42 +#include <v3270/settings.h>
41 43  
42 44 /*--[ Widget definition ]----------------------------------------------------------------------------*/
43 45  
... ... @@ -401,6 +403,18 @@ static GtkWidget * trace_window = NULL;
401 403 update_window_title(window);
402 404 }
403 405  
  406 + static void save_terminal_settings(GtkWidget *widget, GtkWidget *window)
  407 + {
  408 + debug("%s",__FUNCTION__);
  409 +
  410 +#ifdef ENABLE_WINDOWS_REGISTRY
  411 +
  412 +#else
  413 + v3270_to_key_file(widget, get_application_keyfile(), "terminal");
  414 +#endif // _WIN32
  415 +
  416 + }
  417 +
404 418 LIB3270_EXPORT void pw3270_set_session_name(GtkWidget *widget, const gchar *name)
405 419 {
406 420 g_return_if_fail(GTK_IS_PW3270(widget));
... ... @@ -840,6 +854,7 @@ static GtkWidget * trace_window = NULL;
840 854 g_signal_connect(widget->terminal,"field_clicked",G_CALLBACK(field_clicked),widget);
841 855 g_signal_connect(widget->terminal,"toggle_changed",G_CALLBACK(toggle_changed),widget);
842 856 g_signal_connect(widget->terminal,"session_changed",G_CALLBACK(session_changed),widget);
  857 + g_signal_connect(widget->terminal,"save_settings",G_CALLBACK(save_terminal_settings),widget);
843 858  
844 859 //g_signal_connect(widget->terminal,"print",G_CALLBACK(print_all),widget);
845 860  
... ...