Commit 7a750bff7084d8c0b00cffb217f1d0ca3b0d7aaa

Authored by Perry Werneck
1 parent 057233e1
Exists in master and in 1 other branch develop

Fixing "save" action.

src/dialogs/save/convenience.c
... ... @@ -36,19 +36,70 @@
36 36  
37 37 LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error)
38 38 {
39   - if(*error)
  39 + g_autofree gchar * message = NULL;
  40 +
  41 + if(filename)
  42 + {
  43 + message = g_strdup_printf("Can't save contents to file \"%s\"",filename);
  44 + }
  45 + else
40 46 {
41   - return -1;
  47 + message = g_strdup("Can't save contents to file");
42 48 }
43 49  
44 50 if(!v3270_is_connected(widget))
45 51 {
46   - *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN));
47   - return -1;
  52 + if(error)
  53 + {
  54 + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN));
  55 + }
  56 + else
  57 + {
  58 + GtkWidget *popup = gtk_message_dialog_new_with_markup(
  59 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  60 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  61 + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
  62 + message
  63 + );
  64 +
  65 + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed"));
  66 +
  67 + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN));
  68 +
  69 + gtk_dialog_run(GTK_DIALOG(popup));
  70 + gtk_widget_destroy(popup);
  71 + }
  72 + return errno = ENOTCONN;
48 73 }
49 74  
50 75 lib3270_trace_event(v3270_get_session(widget),"save action activated (type=%d)",(int) mode);
51   - return lib3270_save(v3270_get_session(widget),mode,filename);
  76 + int rc = lib3270_save(v3270_get_session(widget),mode,filename);
  77 +
  78 + if(!rc)
  79 + return 0;
  80 +
  81 + if(error)
  82 + {
  83 + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),rc,"%s",strerror(rc));
  84 + }
  85 + else
  86 + {
  87 + GtkWidget *popup = gtk_message_dialog_new_with_markup(
  88 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  89 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  90 + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
  91 + message
  92 + );
  93 +
  94 + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed"));
  95 +
  96 + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN));
  97 +
  98 + gtk_dialog_run(GTK_DIALOG(popup));
  99 + gtk_widget_destroy(popup);
  100 + }
  101 +
  102 + return errno = rc;
52 103 }
53 104  
54 105 int v3270_save_all(GtkWidget *widget, const gchar *filename, GError **error)
... ...
src/dialogs/save/save.c
... ... @@ -100,6 +100,32 @@
100 100 gtk_dialog_response(dialog,GTK_RESPONSE_APPLY);
101 101 }
102 102  
  103 + /*
  104 + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action)
  105 + {
  106 + const gchar * attr = g_object_get_data(action,"overwrite");
  107 + GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
  108 + GtkWidget * dialog;
  109 +
  110 + if(attr && !g_ascii_strcasecmp(attr,"yes"))
  111 + return ret;
  112 +
  113 + dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(chooser),
  114 + GTK_DIALOG_DESTROY_WITH_PARENT,
  115 + GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL,
  116 + "%s",_("The file already exists. Replace it?"));
  117 +
  118 +
  119 + if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
  120 + ret = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
  121 +
  122 + gtk_widget_destroy(dialog);
  123 +
  124 + return ret;
  125 +
  126 + }
  127 + */
  128 +
103 129 #ifdef WIN32
104 130 static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) {
105 131 #else
... ... @@ -120,6 +146,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon
120 146 NULL
121 147 );
122 148  
  149 + // g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action));
  150 +
  151 +
123 152 if(filename)
124 153 gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename);
125 154  
... ...