From 5fd9cfa25e907f025712f22db2702779d9410e86 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 30 Jul 2019 10:22:30 -0300 Subject: [PATCH] Fixing windows save dialog. --- src/dialogs/save/save.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------------ src/dialogs/windows/select.c | 2 ++ src/filetransfer/v3270ft.c | 20 ++++++++++---------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/src/dialogs/save/save.c b/src/dialogs/save/save.c index 443b1e7..a5ad040 100644 --- a/src/dialogs/save/save.c +++ b/src/dialogs/save/save.c @@ -100,7 +100,44 @@ gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); } - static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *widget) { +#ifdef WIN32 +static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *widget) +{ + /* + + GtkFileChooserNative * dialog = + gtk_file_chooser_native_new( + _( "Select destination file"), + GTK_WINDOW(widget), + GTK_FILE_CHOOSER_ACTION_SAVE, + _("Select"), + _("Cancel") + ); + + gint rc = gtk_native_dialog_run (GTK_NATIVE_DIALOG(dialog)); + + debug("rc=%d",rc); + */ + + g_autofree gchar *filename = + v3270_select_file( + GTK_WIDGET(widget), + _( "Select destination file"), + _("Select"), + GTK_FILE_CHOOSER_ACTION_SAVE, + gtk_entry_get_text(GTK_ENTRY(widget->filename)), + N_("All files"), "*.*", + NULL + ); + + if(filename && *filename) { + gtk_entry_set_text(GTK_ENTRY(widget->filename),filename); + } + +} +#else +static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *widget) +{ //gint format = gtk_combo_box_get_active(GTK_COMBO_BOX(widget->format)); //g_autofree gchar * extension = g_strconcat("*",formats[format].extension,NULL); @@ -118,19 +155,20 @@ gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); g_signal_connect(G_OBJECT(dialog),"close",G_CALLBACK(v3270_dialog_close),NULL); - const gchar *filename = gtk_entry_get_text(GTK_ENTRY(widget->filename)); + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(dialog->filename)); if(filename && *filename) gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename); else - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS)); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), _("Untitled document")); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) - gtk_entry_set_text(GTK_ENTRY(widget->filename),gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); + gtk_entry_set_text(GTK_ENTRY(dialog->filename),gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); gtk_widget_destroy(dialog); } +#endif // _WIN32 static void V3270SaveDialog_init(V3270SaveDialog *dialog) { @@ -168,18 +206,16 @@ gtk_grid_attach(grid,widget,0,0,1,1); gtk_label_set_mnemonic_widget(GTK_LABEL(widget),dialog->filename); -/* -#ifdef WIN32 - widget = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON); - g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); - gtk_grid_attach(grid,widget,4,0,1,1); -#else -*/ +//#ifdef WIN32 +// widget = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON); +// g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_file),dialog); +// gtk_grid_attach(grid,widget,4,0,1,1); +//#else gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file")); g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); -// #endif // WIN32 +//#endif // WIN32 gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60); gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX); diff --git a/src/dialogs/windows/select.c b/src/dialogs/windows/select.c index 9f119c9..d50508a 100644 --- a/src/dialogs/windows/select.c +++ b/src/dialogs/windows/select.c @@ -165,6 +165,8 @@ gchar * v3270_select_file(GtkWidget *widget, const gchar *title, const gchar *bu if(filename && *filename) gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename); + else + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), _("Untitled document")); // Setup filters /* diff --git a/src/filetransfer/v3270ft.c b/src/filetransfer/v3270ft.c index 14875e9..797a01a 100644 --- a/src/filetransfer/v3270ft.c +++ b/src/filetransfer/v3270ft.c @@ -293,11 +293,11 @@ static gboolean spin_format(GtkSpinButton *spin, G_GNUC_UNUSED gpointer data) { return TRUE; } -#ifdef WIN32 -static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { -#else +//#ifdef WIN32 +//static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { +//#else static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) { -#endif // WIN32 +//#endif // WIN32 debug("%s",__FUNCTION__); @@ -567,16 +567,16 @@ static void v3270ft_init(v3270ft *dialog) { gtk_widget_set_hexpand(GTK_WIDGET(dialog->local),TRUE); -#ifdef WIN32 - widget = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON); - g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); - gtk_grid_attach(grid,widget,2,1,1,1); -#else +//#ifdef WIN32 +// widget = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON); +// g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); +// gtk_grid_attach(grid,widget,2,1,1,1); +//#else gtk_entry_set_icon_from_icon_name(dialog->local,GTK_ENTRY_ICON_SECONDARY,"document-open"); gtk_entry_set_icon_activatable(dialog->local,GTK_ENTRY_ICON_SECONDARY,TRUE); gtk_entry_set_icon_tooltip_text(dialog->local,GTK_ENTRY_ICON_SECONDARY,_("Select file")); g_signal_connect(G_OBJECT(dialog->local),"icon-press",G_CALLBACK(icon_press),dialog); -#endif // WIN32 +//#endif // WIN32 g_signal_connect(G_OBJECT(dialog->local),"changed",G_CALLBACK(local_file_changed),dialog); -- libgit2 0.21.2