From 55be299a11561cb945b288ace73c7e197c01dcd1 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 6 Feb 2019 09:50:46 -0200 Subject: [PATCH] Print dialog doesn't follow the gnome style, fixing custom widget to match. --- src/dialogs/fontselect.c | 32 +++++++++++++++++++++++--------- src/dialogs/print/print.c | 33 +++++++++++++++++++++++++-------- src/include/v3270/print.h | 3 ++- src/testprogram/testprogram.c | 1 + 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/dialogs/fontselect.c b/src/dialogs/fontselect.c index da10278..6cef36a 100644 --- a/src/dialogs/fontselect.c +++ b/src/dialogs/fontselect.c @@ -27,28 +27,30 @@ * */ + #include #include #include #include /*--[ Widget definition ]----------------------------------------------------------------------------*/ - LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname) + LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active) { - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING); - GtkWidget * widget = gtk_combo_box_new_with_model(model); + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING); - GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL); - if(!(fontname && *fontname)) - fontname = v3270_get_default_font_name(); - gint n_families, i; PangoFontFamily **families; pango_context_list_families(gtk_widget_get_pango_context(widget),&families, &n_families); + if(!(selected && *selected)) + selected = v3270_get_default_font_name(); + + memset(active,0,sizeof(GtkTreeIter)); + for(i=0; i < n_families; i++) { if(!pango_font_family_is_monospace(families[i])) @@ -60,13 +62,25 @@ gtk_list_store_append((GtkListStore *) model,&iter); gtk_list_store_set((GtkListStore *) model, &iter,0, name, -1); - if(!g_ascii_strcasecmp(name,fontname)) - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); + if(!g_ascii_strcasecmp(name,selected)) + *active = iter; } g_free(families); + return model; + } + + LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *selected) + { + GtkWidget * widget = gtk_combo_box_new(); + GtkTreeIter active; + GtkTreeModel * model = v3270_font_family_model_new(widget,selected,&active); + + gtk_combo_box_set_model(GTK_COMBO_BOX(widget),model); + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&active); + return widget; } diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index b9638c5..231ab9c 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -84,8 +84,8 @@ { static const gchar * text[] = { - N_( "_Font" ), - N_( "C_olor scheme" ) + N_( "_Font:" ), + N_( "C_olor scheme:" ) }; size_t f; @@ -97,13 +97,27 @@ // Create dialog + GtkWidget * frame = gtk_frame_new(""); GtkGrid * grid = GTK_GRID(gtk_grid_new()); GtkWidget * font = v3270_font_selection_new(operation->font.name); GtkWidget * color = v3270_color_scheme_new(); GtkWidget * selected = gtk_check_button_new_with_label( _("Print selection box") ); - // https://developer.gnome.org/hig/stable/visual-layout.html.en - gtk_container_set_border_width(GTK_CONTAINER(grid),18); + // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-: + + gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_NONE); + + GtkWidget *label = gtk_label_new(NULL); + + gtk_label_set_markup(GTK_LABEL(label),_("Text options")); + gtk_frame_set_label_widget(GTK_FRAME(frame),label); + + gtk_container_set_border_width(GTK_CONTAINER(frame),12); + + gtk_container_set_border_width(GTK_CONTAINER(grid),6); + + g_object_set(G_OBJECT(grid),"margin-start",8,NULL); + gtk_grid_set_row_spacing(grid,6); gtk_grid_set_column_spacing(grid,12); @@ -116,7 +130,7 @@ for(f=0;fmode = LIB3270_PRINT_ALL; widget->show_selection = FALSE; - widget->font.name = g_strdup(v3270_default_font); + widget->font.name = NULL; // g_strdup(v3270_default_font); widget->contents.width = 80; v3270_set_mono_color_table(widget->colors,"#000000","#FFFFFF"); @@ -210,6 +226,7 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT operation->mode = mode; operation->widget = GTK_V3270(widget); operation->session = v3270_get_session(widget); + operation->font.name = g_strdup(v3270_get_font_family(widget)); V3270PrintOperation_set_text_by_mode(operation, mode); diff --git a/src/include/v3270/print.h b/src/include/v3270/print.h index 202ded8..0070e3c 100644 --- a/src/include/v3270/print.h +++ b/src/include/v3270/print.h @@ -54,7 +54,8 @@ LIB3270_EXPORT V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT_MODE mode); LIB3270_EXPORT void V3270PrintOperation_set_text_by_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode); - LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname); + LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active); + LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname); LIB3270_EXPORT GType V3270PrintOperation_get_type(void); diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 8b9c5bd..0a3b9de 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -168,6 +168,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { v3270_set_url(terminal,NULL); + // v3270_set_font_family(terminal,"Droid Sans Mono"); g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); GtkWidget *trace = v3270_new_trace_window(terminal,NULL); -- libgit2 0.21.2