diff --git a/colors.conf b/colors.conf
index 39e9525..542dc0a 100644
--- a/colors.conf
+++ b/colors.conf
@@ -24,6 +24,16 @@
# erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
#
+[default]
+label=PW3270 default
+
+base=#000000,#7890F0,#FF0000,#FF00FF,#00FF00,#00FFFF,#FFFF00,#FFFFFF,#000000,#000080,#FFA200,#800080,#008000,#008080,#A0A000,#C0C0C0
+field=#00FF00,#FF0000,#00FFFF,#FFFFFF
+selection=#404040,#ffffff
+OIA=#000000,#00FF00,#7890F0,#FFFFFF,#FF0000
+
+cross-hair=#00FF00
+
[X3270]
label=X3270
diff --git a/memchk.sh b/memchk.sh
new file mode 100755
index 0000000..057bedf
--- /dev/null
+++ b/memchk.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+G_DEBUG=gc-friendly G_SLICE=always-malloc valgrind --leak-check=full --suppressions=src/gtk/valgrind.suppression --gen-suppressions=all .bin/Debug/pw3270
+
diff --git a/pw3270.cbp b/pw3270.cbp
index 0791ef3..de7b6d9 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -9,8 +9,8 @@
-
-
+
+
@@ -20,8 +20,8 @@
-
-
+
+
@@ -35,7 +35,7 @@
-
+
@@ -45,283 +45,283 @@
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
diff --git a/src/gtk/colors.c b/src/gtk/colors.c
index be9595f..fcc0a9c 100644
--- a/src/gtk/colors.c
+++ b/src/gtk/colors.c
@@ -32,7 +32,6 @@
/*--[ Implement ]------------------------------------------------------------------------------------*/
-
static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
{
#define V3270_COLOR_BASE V3270_COLOR_GRAY+1
@@ -50,18 +49,10 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
switch(g_strv_length(str))
{
case 2: // Only 2 colors, create monocromatic table
- gdk_color_parse(str[0],clr);
- gdk_color_parse(str[1],clr+1);
-
- trace("%s color table is: monocromatic",group);
-
- for(f=2;ffont)
g_free(info->font);
- if(info->colorname)
- g_free(info->colorname);
-
g_free(info);
}
@@ -179,41 +175,6 @@
trace("Font set to \"%s\" with size %d",info->font,info->fontsize);
}
-/*
- static void color_scheme_changed(GtkComboBox *widget,PRINT_INFO *info)
- {
- gchar *new_colors = NULL;
-
-#if GTK_CHECK_VERSION(3,0,0)
-
- new_colors = g_strdup(gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)));
-
-#else
-
- GValue value = { 0, };
- GtkTreeIter iter;
-
- if(!gtk_combo_box_get_active_iter(widget,&iter))
- return;
-
- gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value);
- new_colors = g_strdup(g_value_get_string(&value));
-
-#endif
-
- if(!info->colorname)
- return;
-
-// trace("%s: %s->%s",__FUNCTION__,info->colorname,new_colors);
-
- if(*info->colorname)
- g_free(info->colorname);
-
- info->colorname = new_colors;
-
- }
-*/
-
static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info)
{
gboolean active = gtk_toggle_button_get_active(togglebutton);
@@ -223,41 +184,11 @@
static GObject * create_custom_widget(GtkPrintOperation *prt, PRINT_INFO *info)
{
- static const gchar *def_colors = "white," // V3270_COLOR_BACKGROUND
- "black," // V3270_COLOR_BLUE
- "black," // V3270_COLOR_RED
- "black," // V3270_COLOR_PINK
- "black," // V3270_COLOR_GREEN
- "black," // V3270_COLOR_TURQUOISE
- "black," // V3270_COLOR_YELLOW
- "black," // V3270_COLOR_WHITE
- "black," // V3270_COLOR_BLACK
- "black," // V3270_COLOR_DARK_BLUE
- "black," // V3270_COLOR_ORANGE
- "black," // V3270_COLOR_PURPLE
- "black," // V3270_COLOR_DARK_GREEN
- "black," // V3270_COLOR_DARK_TURQUOISE
- "black," // V3270_COLOR_MUSTARD
- "black," // V3270_COLOR_GRAY
- "black," // V3270_COLOR_FIELD_DEFAULT
- "black," // V3270_COLOR_FIELD_INTENSIFIED
- "black," // V3270_COLOR_FIELD_PROTECTED
- "black," // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED
- "black," // V3270_COLOR_SELECTED_BG
- "white," // V3270_COLOR_SELECTED_FG
- "black," // V3270_COLOR_SELECTED_BORDER
- "black," // V3270_COLOR_CURSOR
- "black," // V3270_COLOR_CROSS_HAIR
- "white," // V3270_COLOR_OIA_BACKGROUND
- "black," // V3270_COLOR_OIA
- "black," // V3270_COLOR_OIA_SEPARATOR
- "black," // V3270_COLOR_OIA_STATUS_OK
- "black"; // V3270_COLOR_OIA_STATUS_INVALID
-
static const gchar * label[] = { N_( "Font:" ), N_( "Color scheme:" ) };
GtkWidget * container = gtk_table_new(3,2,FALSE);
GtkWidget * widget;
int f;
+ gchar * ptr;
for(f=0;fcolor,ptr);
+ else
+ v3270_set_mono_color_table(info->color,"black","white");
+ g_free(ptr);
- gtk_widget_set_sensitive(widget,FALSE);
-// info->colorname = get_string_from_config("print","colors",def_colors);
-// load_color_schemes(widget,info->colorname);
-// g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(color_scheme_changed),info);
+ widget = color_scheme_new(info->color);
+ g_object_set_data(G_OBJECT(container),"combo",widget);
gtk_table_attach(GTK_TABLE(container),widget,1,2,1,2,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0);
// Selection checkbox
@@ -316,9 +246,24 @@
static void custom_widget_apply(GtkPrintOperation *prt, GtkWidget *widget, PRINT_INFO *info)
{
- trace("%s",__FUNCTION__);
- set_string_to_config("print","colors",info->colorname);
- v3270_set_color_table(info->color,info->colorname);
+ GtkWidget * combo = g_object_get_data(G_OBJECT(widget),"combo");
+ GdkColor * clr = g_object_get_data(G_OBJECT(combo),"selected");
+
+ if(clr)
+ {
+ int f;
+ GString *str = g_string_new("");
+ for(f=0;fcolor[f] = clr[f];
+ if(f)
+ g_string_append_c(str,',');
+ g_string_append_printf(str,"%s",gdk_color_to_string(clr+f));
+ }
+ set_string_to_config("print","colors","%s",str->str);
+ g_string_free(str,TRUE);
+ }
+ g_object_unref(combo);
}
static GtkPrintOperation * begin_print_operation(GtkAction *action, GtkWidget *widget, PRINT_INFO **info)
diff --git a/src/gtk/v3270/v3270.h b/src/gtk/v3270/v3270.h
index a3c380c..0dd7b0a 100644
--- a/src/gtk/v3270/v3270.h
+++ b/src/gtk/v3270/v3270.h
@@ -219,6 +219,7 @@
void v3270_set_colors(GtkWidget *widget, const gchar *);
void v3270_set_color_table(GdkColor *table, const gchar *colors);
const GdkColor * v3270_get_color_table(GtkWidget *widget);
+ void v3270_set_mono_color_table(GdkColor *table, const gchar *fg, const gchar *bg);
void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *color);
void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkColor *color);
GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id);
diff --git a/src/gtk/v3270/widget.c b/src/gtk/v3270/widget.c
index 5151aa4..c6816ad 100644
--- a/src/gtk/v3270/widget.c
+++ b/src/gtk/v3270/widget.c
@@ -874,6 +874,24 @@ const GdkColor * v3270_get_color_table(GtkWidget *widget)
return GTK_V3270(widget)->color;
}
+void v3270_set_mono_color_table(GdkColor *clr, const gchar *fg, const gchar *bg)
+{
+ int f;
+
+ gdk_color_parse(bg,clr);
+ gdk_color_parse(fg,clr+1);
+
+ for(f=2;f