From b68041954603518a4d76e5eab4ddbc0ccdcc33b8 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 31 May 2013 12:57:26 +0000 Subject: [PATCH] Impressão passa a salvar/restaurar configuração do papel --- src/pw3270/print.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- src/pw3270/v3270/selection.c | 17 ++++++++--------- 2 files changed, 150 insertions(+), 13 deletions(-) diff --git a/src/pw3270/print.c b/src/pw3270/print.c index 3dbd76e..f4e56af 100644 --- a/src/pw3270/print.c +++ b/src/pw3270/print.c @@ -331,6 +331,7 @@ static gchar * enum_to_string(GType type, guint enum_value) gtk_page_setup_to_key_file(pgsetup,conf,"page_setup"); gtk_paper_size_to_key_file(papersize,conf,"paper_size"); #endif + } if(info->font_scaled) @@ -548,6 +549,31 @@ static gchar * enum_to_string(GType type, guint enum_value) trace("%s: %s=\"%s\"",__FUNCTION__,key,val); gtk_print_settings_set(GTK_PRINT_SETTINGS(settings), key, val); } + + // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.h + #define MM_PER_INCH 25.4 + #define POINTS_PER_INCH 72 + + // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.c + static gdouble _gtk_print_convert_from_mm (gdouble len, GtkUnit unit) + { + switch (unit) + { + case GTK_UNIT_MM: + return len; + case GTK_UNIT_INCH: + return len / MM_PER_INCH; + + default: + g_warning ("Unsupported unit"); + + /* Fall through */ + case GTK_UNIT_POINTS: + return len / (MM_PER_INCH / POINTS_PER_INCH); + break; + } + } + #endif // WIN32 static GtkPrintOperation * begin_print_operation(GObject *obj, GtkWidget *widget, PRINT_INFO **info) @@ -555,7 +581,7 @@ static gchar * enum_to_string(GType type, guint enum_value) GtkPrintOperation * print = gtk_print_operation_new(); GtkPrintSettings * settings = gtk_print_settings_new(); GtkPageSetup * setup = gtk_page_setup_new(); - GtkPaperSize * papersize = gtk_paper_size_new((const gchar *) g_object_get_data(obj,"papersize")); + GtkPaperSize * papersize = NULL; *info = g_new0(PRINT_INFO,1); (*info)->session = v3270_get_session(widget); @@ -593,8 +619,9 @@ static gchar * enum_to_string(GType type, guint enum_value) if(get_registry_handle("print",®istry,KEY_READ)) { - HKEY hKey; - DWORD disp; + HKEY hKey; + DWORD disp; + gchar * attr = g_object_get_data(obj,"papersize"); registry_foreach(registry,"settings",update_settings,(gpointer) settings); @@ -612,13 +639,99 @@ static gchar * enum_to_string(GType type, guint enum_value) RegCloseKey(hKey); } - #warning Work in progress + if(attr) + { + // Paper is defined in xml, use it + papersize = gtk_paper_size_new(attr); + } + else if(RegCreateKeyEx(registry,"paper",0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&disp) == ERROR_SUCCESS) + { + // Use saved paper size + // Reference: https://git.gnome.org/browse/gtk+/tree/gtk/gtkpapersize.c + struct _papersettings + { + const gchar * name; + gchar * value; + } papersettings[] = + { + { "PPDName", NULL }, + { "Name", NULL }, + { "DisplayName", NULL } + }; + + int f; + gdouble width, height; + + // Read paper settings + registry_get_double(hKey, "Width", &width); + registry_get_double(hKey, "Height", &height); + + for(f=0;fmessage); + g_error_free(err); + } + + trace("Papersize: %p",papersize); + } + else + { + // Create default + papersize = gtk_paper_size_new(NULL); + } + #endif } diff --git a/src/pw3270/v3270/selection.c b/src/pw3270/v3270/selection.c index 6028296..c79f4a0 100644 --- a/src/pw3270/v3270/selection.c +++ b/src/pw3270/v3270/selection.c @@ -81,6 +81,14 @@ static void clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection, } } +/** + * Get text at informed area. + * + * @param widget Widget. + * @param offset Offset of the desired text. + * @param len Number of characters to get. + * + */ gchar * v3270_get_text(GtkWidget *widget, int offset, int len) { v3270 * terminal; @@ -139,7 +147,6 @@ static const char * update_selected_text(GtkWidget *widget, gboolean cut) { int c; gchar * ptr = ln[l]; -// GString * buffer; for(c=0;cselection.text, -1, "UTF-8", lib3270_get_charset(terminal->host), NULL, NULL, NULL); - gtk_clipboard_set_text(gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD),text,-1); - g_free(text); - - g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE); -*/ - update_system_clipboard(widget); } -- libgit2 0.21.2