diff --git a/pw3270.svg b/pw3270.svg new file mode 100644 index 0000000..ebd2f7c --- /dev/null +++ b/pw3270.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/gtk/common/config.c b/src/gtk/common/config.c index 638b174..f4d1bf7 100644 --- a/src/gtk/common/config.c +++ b/src/gtk/common/config.c @@ -566,11 +566,20 @@ gchar * build_data_filename(const gchar *first_element, ...) } #ifdef WIN_REGISTRY_ENABLED -HKEY get_registry_handle(const gchar *first_element,REGSAM samDesired) +gboolean get_registry_handle(const gchar *group, HKEY *hKey, REGSAM samDesired) { - #warning Implementar + gboolean ret; + gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,g_get_application_name(),group); + DWORD disp; + + if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,samDesired,NULL,hKey,&disp) == ERROR_SUCCESS) + ret = TRUE; + else + ret = FALSE; - return 0; + g_free(path); + + return ret; } #else GKeyFile * get_application_keyfile(void) diff --git a/src/gtk/main.c b/src/gtk/main.c index 5e8892f..9047b27 100644 --- a/src/gtk/main.c +++ b/src/gtk/main.c @@ -81,19 +81,17 @@ static int initialize(void) { // Invalid GTK version, notify user int rc; + GtkWidget *dialog = gtk_message_dialog_new( NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, - _( "This program requires GTK version %d.%d.%d" ),GTK_MAJOR_VERSION,GTK_MINOR_VERSION,GTK_MICRO_VERSION ); + _( "%s requires GTK version %d.%d.%d" ),PACKAGE_NAME,GTK_MAJOR_VERSION,GTK_MINOR_VERSION,GTK_MICRO_VERSION ); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg); gtk_window_set_title(GTK_WINDOW(dialog),_( "GTK Version mismatch" )); - -#if GTK_CHECK_VERSION(2,10,0) gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); -#endif rc = gtk_dialog_run(GTK_DIALOG (dialog)); gtk_widget_destroy(dialog); @@ -147,14 +145,13 @@ int main(int argc, char *argv[]) } g_set_application_name(appname); + lib3270_set_popup_handler(popup_handler); rc = initialize(); if(!rc) { configuration_init(); - lib3270_set_popup_handler(popup_handler); - toplevel = create_main_window(); if(toplevel) diff --git a/src/gtk/print.c b/src/gtk/print.c index b0e0b3f..27346db 100644 --- a/src/gtk/print.c +++ b/src/gtk/print.c @@ -131,11 +131,98 @@ } } +#ifdef WIN32 + +#define save_string(h,k,v) save_settings(k,v,h) + +static void save_settings(const gchar *key, const gchar *value, HKEY hKey) +{ + RegSetValueEx(hKey,key,0,REG_SZ,(const BYTE *) value,strlen(value)+1); +} + +static void save_double(HKEY hKey, const gchar *key, gdouble value) +{ + // Reference: http://git.gnome.org/browse/glib/tree/glib/gkeyfile.c + gchar result[G_ASCII_DTOSTR_BUF_SIZE]; + g_ascii_dtostr (result, sizeof (result), value); + save_settings(key,result,hKey); +} + + +/* + * From: http://git.gnome.org/browse/gtk+/tree/gtk/gtkpagesetup.c + * something like this should really be in gobject! + * + * I Agree!! (Perry Werneck) + * + */ +static gchar * enum_to_string(GType type, guint enum_value) +{ + GEnumClass *enum_class; + GEnumValue *value; + gchar *retval = NULL; + + enum_class = g_type_class_ref (type); + + value = g_enum_get_value(enum_class, enum_value); + if (value) + retval = g_strdup (value->value_nick); + + g_type_class_unref (enum_class); + + return retval; +} + +#endif // WIN32 + static void done(GtkPrintOperation *prt, GtkPrintOperationResult result, PRINT_INFO *info) { #ifdef WIN32 - #warning Implementar + 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( gtk_print_operation_get_print_settings(prt), + (GtkPrintSettingsFunc) save_settings, + hKey ); + RegCloseKey(hKey); + } + + if(RegCreateKeyEx(registry,"pagesetup",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) + { + HKEY hPaperSize; + GtkPageSetup * setup = gtk_print_operation_get_default_page_setup(prt); + gchar * orientation = enum_to_string(GTK_TYPE_PAGE_ORIENTATION,gtk_page_setup_get_orientation(setup)); + + // From http://git.gnome.org/browse/gtk+/tree/gtk/gtkpagesetup.c + save_double(hKey, "MarginTop", gtk_page_setup_get_top_margin(setup, GTK_UNIT_MM)); + save_double(hKey, "MarginBottom", gtk_page_setup_get_bottom_margin(setup, GTK_UNIT_MM)); + save_double(hKey, "MarginLeft", gtk_page_setup_get_left_margin(setup, GTK_UNIT_MM)); + save_double(hKey, "MarginRight", gtk_page_setup_get_right_margin(setup, GTK_UNIT_MM)); + save_string(hKey, "Orientation", orientation); + + g_free (orientation); + + if(RegCreateKeyEx(hKey,"papersize",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hPaperSize,&disp) == ERROR_SUCCESS) + { + GtkPaperSize *paper_size = gtk_page_setup_get_paper_size (setup); + if(paper_size) + { + #warning Implement it + } + RegCloseKey(hPaperSize); + } + RegCloseKey(hKey); + } + + RegCloseKey(registry); + } #else GKeyFile * conf = get_application_keyfile(); -- libgit2 0.21.2