| 166 gtk_widget_show_all(win->find); |
170 gtk_widget_show_all(win->find); |
| 167 gtk_widget_grab_focus(f->entry); |
171 gtk_widget_grab_focus(f->entry); |
| 168 } |
172 } |
| 169 |
173 |
| 170 static void |
174 static void |
| 171 do_save_cb(GtkWidget *wid) |
175 do_save_cb(GtkWidget *widget) |
| 172 { |
176 { |
| 173 DebugWindow *win = NULL; |
|
| 174 const char *filename; |
177 const char *filename; |
| 175 char *tmp; |
178 char *tmp; |
| 176 FILE *fp; |
179 FILE *fp; |
| 177 |
180 |
| 178 win = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button), |
181 g_return_if_fail(debug_win != NULL); |
| 179 "gaim_debugwin"); |
182 |
| 180 |
183 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 181 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); |
184 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(debug_win->save)); |
| 182 gtk_widget_destroy(wid); |
185 #else /* FILECHOOSER */ |
| 183 |
186 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(debug_win->save)); |
| 184 if (filename == NULL) |
187 #endif /* FILECHOOSER */ |
| |
188 |
| |
189 if (filename == NULL) { |
| |
190 gaim_notify_error(NULL, NULL, _("Invalid file name."), NULL); |
| 185 return; |
191 return; |
| 186 |
192 } |
| 187 if ((fp = fopen(filename, "w+")) == NULL) |
193 |
| |
194 if ((fp = fopen(filename, "w+")) == NULL) { |
| |
195 gaim_notify_error(NULL, NULL, _("Unable to open file."), NULL); |
| 188 return; |
196 return; |
| 189 |
197 } |
| 190 if (debug_win == NULL) |
198 |
| 191 return; |
199 tmp = gtk_imhtml_get_text(GTK_IMHTML(debug_win->text), NULL, NULL); |
| 192 |
|
| 193 tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL); |
|
| 194 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); |
200 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); |
| 195 fprintf(fp, "%s", tmp); |
201 fprintf(fp, "%s", tmp); |
| 196 g_free(tmp); |
202 g_free(tmp); |
| 197 |
203 |
| 198 fclose(fp); |
204 fclose(fp); |
| 199 } |
205 |
| 200 |
206 gtk_widget_destroy(debug_win->save); |
| 201 static void |
207 debug_win->save = NULL; |
| 202 do_check_save_cb(GtkObject *obj, GtkWidget *wid) |
208 } |
| 203 { |
209 |
| |
210 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| |
211 static void |
| |
212 do_check_save_cb(GtkWidget *widget, gint response, gpointer data) |
| |
213 { |
| |
214 DebugWindow *win = (DebugWindow *)data; |
| 204 const char *filename; |
215 const char *filename; |
| 205 |
216 |
| 206 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); |
217 if (response != GTK_RESPONSE_ACCEPT) { |
| 207 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid))) |
218 if (response == GTK_RESPONSE_CANCEL) |
| |
219 gtk_widget_destroy(win->save); |
| |
220 win->save = NULL; |
| 208 return; |
221 return; |
| |
222 } |
| |
223 |
| |
224 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(win->save)); |
| |
225 #else /* FILECHOOSER */ |
| |
226 static void |
| |
227 do_check_save_cb(GtkWidget *widget, DebugWindow *win) |
| |
228 { |
| |
229 const char *filename; |
| |
230 |
| |
231 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(win->save)); |
| |
232 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(win->save))) { |
| |
233 /* Descend into directory? */ |
| |
234 return; |
| |
235 } |
| |
236 #endif /* FILECHOOSER */ |
| 209 |
237 |
| 210 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
238 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
| 211 { |
239 { |
| 212 gaim_request_yes_no(NULL, NULL, _("That file already exists"), |
240 gaim_request_yes_no(NULL, NULL, _("That file already exists"), |
| 213 _("Would you like to overwrite it?"), 1, wid, |
241 _("Would you like to overwrite it?"), 1, |
| 214 G_CALLBACK(do_save_cb), NULL); |
242 win->save, G_CALLBACK(do_save_cb), NULL); |
| 215 } |
243 } |
| 216 else |
244 else |
| 217 do_save_cb(wid); |
245 do_save_cb(win->save); |
| 218 } |
246 } |
| |
247 |
| |
248 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| |
249 static void |
| |
250 cancel_save_cb(GtkWidget *widget, DebugWindow *win) |
| |
251 { |
| |
252 if (win->save != NULL) |
| |
253 gtk_widget_destroy(win->save); |
| |
254 |
| |
255 win->save = NULL; |
| |
256 } |
| |
257 #endif |
| 219 |
258 |
| 220 static void |
259 static void |
| 221 save_cb(GtkWidget *w, DebugWindow *win) |
260 save_cb(GtkWidget *w, DebugWindow *win) |
| 222 { |
261 { |
| 223 char buf[BUF_LONG]; |
262 if (win->save != NULL) { |
| 224 GtkWidget *window; |
263 gtk_widget_show(win->save); |
| 225 |
264 gdk_window_raise(win->save->window); |
| 226 window = gtk_file_selection_new(_("Save Debug Log")); |
265 return; |
| 227 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gaim-debug.log", |
266 } |
| 228 gaim_home_dir()); |
267 |
| 229 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); |
268 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 230 g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
269 win->save = gtk_file_chooser_dialog_new(_("Save Conversation"), |
| 231 "gaim_debugwin", win); |
270 GTK_WINDOW(win->window), |
| 232 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
271 GTK_FILE_CHOOSER_ACTION_SAVE, |
| 233 "clicked", G_CALLBACK(do_check_save_cb), window); |
272 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 234 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), |
273 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, |
| 235 "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)window); |
274 NULL); |
| 236 |
275 gtk_dialog_set_default_response(GTK_DIALOG(win->save), GTK_RESPONSE_ACCEPT); |
| 237 gtk_widget_show(window); |
276 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win->save), |
| |
277 "gaim-debug.log"); |
| |
278 g_signal_connect(G_OBJECT(win->save), |
| |
279 "response", G_CALLBACK(do_check_save_cb), win->save); |
| |
280 #else /* FILECHOOSER */ |
| |
281 gchar *buf; |
| |
282 |
| |
283 win->save = gtk_file_selection_new(_("Save Debug Log")); |
| |
284 buf = g_strdup_printf("%s" G_DIR_SEPARATOR_S "gaim-debug.log", |
| |
285 gaim_home_dir()); |
| |
286 gtk_file_selection_set_filename(GTK_FILE_SELECTION(win->save), buf); |
| |
287 g_free(buf); |
| |
288 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->ok_button), |
| |
289 "clicked", G_CALLBACK(do_check_save_cb), win); |
| |
290 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->cancel_button), |
| |
291 "clicked", G_CALLBACK(cancel_save_cb), win); |
| |
292 g_signal_connect(G_OBJECT(win->save), |
| |
293 "destroy", G_CALLBACK(cancel_save_cb), win); |
| |
294 #endif /* FILECHOOSER */ |
| |
295 |
| |
296 gtk_widget_show(win->save); |
| 238 } |
297 } |
| 239 |
298 |
| 240 static void |
299 static void |
| 241 clear_cb(GtkWidget *w, DebugWindow *win) |
300 clear_cb(GtkWidget *w, DebugWindow *win) |
| 242 { |
301 { |