diff --git a/src/libpw3270cpp/remote.cc b/src/libpw3270cpp/remote.cc index cc8c2ba..6d82599 100644 --- a/src/libpw3270cpp/remote.cc +++ b/src/libpw3270cpp/remote.cc @@ -452,7 +452,7 @@ #if defined(_WIN32) - static string getRegistryKey(const char *name) throw (std::exception) + static string getRegistryKey(const char *name) { char buffer[4096]; HKEY hKey = 0; @@ -1017,7 +1017,7 @@ { #if defined(_WIN32) - struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, (unsigned short) row, (unsigned short) col, (unsigned short) sz, lf ? '\n' : 0 }; + struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, (unsigned short) row, (unsigned short) col, (unsigned short) sz, (lf ? '\n' : (char) 0) }; return query_string(&query,sizeof(query),sz); @@ -1137,7 +1137,7 @@ { #if defined(_WIN32) - struct hllapi_packet_query_offset query = { HLLAPI_PACKET_GET_TEXT_AT_OFFSET, (unsigned short) baddr, (unsigned short) len, lf ? '\n' : 0 }; + struct hllapi_packet_query_offset query = { HLLAPI_PACKET_GET_TEXT_AT_OFFSET, (unsigned short) baddr, (unsigned short) len, (lf ? '\n' : (char) 0) }; return query_string(&query,sizeof(query),len); #elif defined(HAVE_DBUS) diff --git a/src/pw3270/windows/print.c b/src/pw3270/windows/print.c index e574082..7d7f63e 100644 --- a/src/pw3270/windows/print.c +++ b/src/pw3270/windows/print.c @@ -224,6 +224,76 @@ static gchar * enum_to_string(GType type, guint enum_value) void save_print_operation_settings(GtkPrintOperation * operation) { + // Save settings + GtkPrintSettings * settings = gtk_print_operation_get_print_settings(operation); + GtkPageSetup * pgsetup = gtk_print_operation_get_default_page_setup(operation); + GtkPaperSize * papersize = gtk_page_setup_get_paper_size(pgsetup); + + trace("Saving settings PrintSettings=%p page_setup=%p",settings,pgsetup); + +#ifdef ENABLE_WINDOWS_REGISTRY + HKEY registry; + + if(get_registry_handle("print",®istry,KEY_SET_VALUE)) + { + HKEY hKey; + DWORD disp; + + if(RegCreateKeyEx(registry,"settings",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) + { + gtk_print_settings_foreach( settings,(GtkPrintSettingsFunc) save_settings, hKey ); + RegCloseKey(hKey); + } + + if(RegCreateKeyEx(registry,"page",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) + { + gchar * orientation = enum_to_string(GTK_TYPE_PAGE_ORIENTATION,gtk_page_setup_get_orientation(pgsetup)); + + // From http://git.gnome.org/browse/gtk+/tree/gtk/gtkpagesetup.c + save_double(hKey, "MarginTop", gtk_page_setup_get_top_margin(pgsetup, GTK_UNIT_MM)); + save_double(hKey, "MarginBottom", gtk_page_setup_get_bottom_margin(pgsetup, GTK_UNIT_MM)); + save_double(hKey, "MarginLeft", gtk_page_setup_get_left_margin(pgsetup, GTK_UNIT_MM)); + save_double(hKey, "MarginRight", gtk_page_setup_get_right_margin(pgsetup, GTK_UNIT_MM)); + save_string(hKey, "Orientation", orientation); + + g_free (orientation); + + RegCloseKey(hKey); + } + + if(papersize && RegCreateKeyEx(registry,"paper",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) + { + // From http://git.gnome.org/browse/gtk+/tree/gtk/gtkpapersize.c + static const struct _papersettings + { + const gchar * name; + const gchar * (*get)(GtkPaperSize *); + } papersettings[] = + { + { "PPDName", gtk_paper_size_get_ppd_name }, + { "Name", gtk_paper_size_get_name }, + { "DisplayName", gtk_paper_size_get_display_name } + }; + + int f; + + for(f=0;f