pidgin/pidgindebug.c

changeset 42352
1c53950f9052
parent 42182
3fc2d2b7b7a8
child 42358
5cde734cf63d
equal deleted inserted replaced
42351:876522a8b982 42352:1c53950f9052
105 (gtk_adjustment_get_upper(adj) - 105 (gtk_adjustment_get_upper(adj) -
106 gtk_adjustment_get_page_size(adj) * 1.5)); 106 gtk_adjustment_get_page_size(adj) * 1.5));
107 } 107 }
108 108
109 static void 109 static void
110 save_response_cb(GtkNativeDialog *self, gint response_id, gpointer data) 110 save_response_cb(GObject *obj, GAsyncResult *result, gpointer data)
111 { 111 {
112 PidginDebugWindow *win = (PidginDebugWindow *)data; 112 PidginDebugWindow *win = (PidginDebugWindow *)data;
113 113 GFile *file = NULL;
114 if(response_id == GTK_RESPONSE_ACCEPT) { 114 GFileOutputStream *output = NULL;
115 GFile *file = NULL; 115 GtkTextIter start, end;
116 GFileOutputStream *output = NULL; 116 GDateTime *date = NULL;
117 GtkTextIter start, end; 117 char *date_str = NULL;
118 GDateTime *date = NULL; 118 char *tmp = NULL;
119 gchar *date_str = NULL; 119 GError *error = NULL;
120 gchar *tmp = NULL; 120
121 GError *error = NULL; 121 file = gtk_file_dialog_save_finish(GTK_FILE_DIALOG(obj), result, NULL);
122 122 if(file == NULL) {
123 file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(self)); 123 return;
124 output = g_file_replace(file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, 124 }
125 &error); 125
126 g_object_unref(file); 126 output = g_file_replace(file, NULL, FALSE, G_FILE_CREATE_NONE, NULL,
127 127 &error);
128 if(output == NULL) { 128 g_clear_object(&file);
129 purple_debug_error("debug", 129
130 "Unable to open file to save debug log: %s", 130 if(output == NULL) {
131 error->message); 131 purple_debug_error("debug",
132 g_error_free(error); 132 "Unable to open file to save debug log: %s",
133 g_object_unref(self); 133 error->message);
134 return; 134 g_error_free(error);
135 } 135 return;
136 136 }
137 date = g_date_time_new_now_local(); 137
138 date_str = g_date_time_format(date, "%c"); 138 date = g_date_time_new_now_local();
139 g_date_time_unref(date); 139 date_str = g_date_time_format(date, "%c");
140 140 g_date_time_unref(date);
141 tmp = g_strdup_printf("Pidgin Debug Log : %s\n", date_str); 141
142 g_output_stream_write_all(G_OUTPUT_STREAM(output), tmp, strlen(tmp), 142 tmp = g_strdup_printf("Pidgin Debug Log : %s\n", date_str);
143 NULL, NULL, &error); 143 g_output_stream_write_all(G_OUTPUT_STREAM(output), tmp, strlen(tmp),
144 g_free(tmp); 144 NULL, NULL, &error);
145 g_free(date_str); 145 g_free(tmp);
146 146 g_free(date_str);
147 if(error != NULL) { 147
148 purple_debug_error("debug", "Unable to save debug log: %s", 148 if(error != NULL) {
149 error->message); 149 purple_debug_error("debug", "Unable to save debug log: %s",
150 g_error_free(error); 150 error->message);
151 g_object_unref(output); 151 g_error_free(error);
152 g_object_unref(self);
153 return;
154 }
155
156 gtk_text_buffer_get_bounds(win->buffer, &start, &end);
157 tmp = gtk_text_buffer_get_text(win->buffer, &start, &end, TRUE);
158 g_output_stream_write_all(G_OUTPUT_STREAM(output), tmp, strlen(tmp),
159 NULL, NULL, &error);
160 g_free(tmp);
161
162 if(error != NULL) {
163 purple_debug_error("debug", "Unable to save debug log: %s",
164 error->message);
165 g_error_free(error);
166 g_object_unref(output);
167 g_object_unref(self);
168 return;
169 }
170
171 g_object_unref(output); 152 g_object_unref(output);
172 } 153 return;
173 154 }
174 g_object_unref(self); 155
156 gtk_text_buffer_get_bounds(win->buffer, &start, &end);
157 tmp = gtk_text_buffer_get_text(win->buffer, &start, &end, TRUE);
158 g_output_stream_write_all(G_OUTPUT_STREAM(output), tmp, strlen(tmp),
159 NULL, NULL, &error);
160 g_free(tmp);
161
162 if(error != NULL) {
163 purple_debug_error("debug", "Unable to save debug log: %s",
164 error->message);
165 g_error_free(error);
166 g_object_unref(output);
167 return;
168 }
169
170 g_object_unref(output);
175 } 171 }
176 172
177 static void 173 static void
178 save_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win) 174 save_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win)
179 { 175 {
180 GtkFileChooserNative *filesel; 176 GtkFileDialog *dialog;
181 177
182 filesel = gtk_file_chooser_native_new(_("Save Debug Log"), GTK_WINDOW(win), 178 dialog = gtk_file_dialog_new();
183 GTK_FILE_CHOOSER_ACTION_SAVE, 179 gtk_file_dialog_set_title(dialog, _("Save Debug Log"));
184 _("_Save"), _("_Cancel")); 180 gtk_file_dialog_set_modal(dialog, TRUE);
185 181 gtk_file_dialog_set_initial_name(dialog, "purple-debug.log");
186 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(filesel), 182 gtk_file_dialog_save(dialog, GTK_WINDOW(win), NULL,
187 "purple-debug.log"); 183 save_response_cb, win);
188 184 g_clear_object(&dialog);
189 g_signal_connect(filesel, "response", G_CALLBACK(save_response_cb), win);
190
191 gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(filesel), TRUE);
192 gtk_native_dialog_show(GTK_NATIVE_DIALOG(filesel));
193 } 185 }
194 186
195 static void 187 static void
196 clear_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win) 188 clear_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win)
197 { 189 {

mercurial