| 71 static gint |
71 static gint |
| 72 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) |
72 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) |
| 73 { |
73 { |
| 74 if (debug_win->timestamps_handle != 0) |
74 if (debug_win->timestamps_handle != 0) |
| 75 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); |
75 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); |
| 76 if (debug_win->save != NULL) |
76 if (debug_win->save != NULL) { |
| |
77 gaim_notify_close_with_handle(debug_win->save); |
| |
78 gaim_request_close_with_handle(debug_win->save); |
| 77 gtk_widget_destroy(debug_win->save); |
79 gtk_widget_destroy(debug_win->save); |
| |
80 } |
| 78 |
81 |
| 79 g_free(debug_win); |
82 g_free(debug_win); |
| 80 debug_win = NULL; |
83 debug_win = NULL; |
| 81 |
84 |
| 82 gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE); |
85 gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE); |
| 170 gtk_widget_show_all(win->find); |
173 gtk_widget_show_all(win->find); |
| 171 gtk_widget_grab_focus(f->entry); |
174 gtk_widget_grab_focus(f->entry); |
| 172 } |
175 } |
| 173 |
176 |
| 174 static void |
177 static void |
| 175 save_writefile_cb(GtkWidget *widget) |
178 save_writefile_cb(DebugWindow *win, gint id) |
| 176 { |
179 { |
| 177 const char *filename; |
180 const char *filename; |
| |
181 FILE *fp; |
| 178 char *tmp; |
182 char *tmp; |
| 179 FILE *fp; |
|
| 180 |
|
| 181 g_return_if_fail(debug_win != NULL); |
|
| 182 |
183 |
| 183 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
184 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 184 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(debug_win->save)); |
185 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(win->save)); |
| 185 #else /* FILECHOOSER */ |
186 #else /* FILECHOOSER */ |
| 186 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(debug_win->save)); |
187 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(win->save)); |
| 187 #endif /* FILECHOOSER */ |
188 #endif /* FILECHOOSER */ |
| 188 |
189 |
| 189 gaim_notify_close_with_handle(debug_win->save); |
190 gaim_notify_close_with_handle(win->save); |
| 190 |
191 |
| 191 if (filename == NULL) { |
192 if (filename == NULL) { |
| 192 gaim_notify_error(debug_win->save, NULL, _("Invalid file name."), NULL); |
193 gaim_notify_error(win->save, NULL, _("Invalid file name."), NULL); |
| 193 return; |
194 return; |
| 194 } |
195 } |
| 195 |
196 |
| 196 if ((fp = fopen(filename, "w+")) == NULL) { |
197 if ((fp = fopen(filename, "w+")) == NULL) { |
| 197 gaim_notify_error(debug_win->save, NULL, _("Unable to open file."), NULL); |
198 gaim_notify_error(win->save, NULL, _("Unable to open file."), NULL); |
| 198 return; |
199 return; |
| 199 } |
200 } |
| 200 |
201 |
| 201 tmp = gtk_imhtml_get_text(GTK_IMHTML(debug_win->text), NULL, NULL); |
202 tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL); |
| 202 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); |
203 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); |
| 203 fprintf(fp, "%s", tmp); |
204 fprintf(fp, "%s", tmp); |
| 204 g_free(tmp); |
205 g_free(tmp); |
| 205 |
206 |
| 206 fclose(fp); |
207 fclose(fp); |
| 207 |
208 |
| 208 gtk_widget_destroy(debug_win->save); |
209 gtk_widget_destroy(win->save); |
| 209 debug_win->save = NULL; |
210 win->save = NULL; |
| 210 } |
211 } |
| 211 |
212 |
| 212 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
213 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 213 static void |
214 static void |
| 214 save_checkfile_cb(GtkWidget *widget, gint response, DebugWindow *win) |
215 save_checkfile_cb(GtkWidget *widget, gint response, DebugWindow *win) |
| 215 { |
216 { |
| 216 const char *filename; |
217 const char *filename; |
| 217 |
218 |
| 218 if (response != GTK_RESPONSE_ACCEPT) { |
219 if (response != GTK_RESPONSE_ACCEPT) { |
| |
220 gaim_notify_close_with_handle(win->save); |
| |
221 gaim_request_close_with_handle(win->save); |
| 219 if (response == GTK_RESPONSE_CANCEL) |
222 if (response == GTK_RESPONSE_CANCEL) |
| 220 gtk_widget_destroy(win->save); |
223 gtk_widget_destroy(win->save); |
| 221 win->save = NULL; |
224 win->save = NULL; |
| 222 return; |
225 return; |
| 223 } |
226 } |
| 234 /* Descend into directory? */ |
237 /* Descend into directory? */ |
| 235 return; |
238 return; |
| 236 } |
239 } |
| 237 #endif /* FILECHOOSER */ |
240 #endif /* FILECHOOSER */ |
| 238 |
241 |
| |
242 gaim_request_close_with_handle(win->save); |
| |
243 |
| 239 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
244 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
| 240 { |
245 { |
| 241 gaim_request_close_with_handle(win->save); |
|
| 242 gaim_request_yes_no(win->save, NULL, _("That file already exists"), |
246 gaim_request_yes_no(win->save, NULL, _("That file already exists"), |
| 243 _("Would you like to overwrite it?"), 1, |
247 _("Would you like to overwrite it?"), 1, |
| 244 win->save, G_CALLBACK(save_writefile_cb), NULL); |
248 win, G_CALLBACK(save_writefile_cb), NULL); |
| 245 } |
249 } |
| 246 else |
250 else |
| 247 save_writefile_cb(win->save); |
251 save_writefile_cb(win, 1); |
| 248 } |
252 } |
| 249 |
253 |
| 250 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
254 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 251 static void |
255 static void |
| 252 save_destroy_cb(GtkWidget *widget, DebugWindow *win) |
256 save_destroy_cb(GtkWidget *widget, DebugWindow *win) |
| 253 { |
257 { |
| 254 if (win->save != NULL) |
258 if (win->save != NULL) { |
| |
259 gaim_notify_close_with_handle(win->save); |
| |
260 gaim_request_close_with_handle(win->save); |
| 255 gtk_widget_destroy(win->save); |
261 gtk_widget_destroy(win->save); |
| 256 |
262 win->save = NULL; |
| 257 win->save = NULL; |
263 } |
| 258 } |
264 } |
| 259 #endif |
265 #endif |
| 260 |
266 |
| 261 static void |
267 static void |
| 262 save_cb(GtkWidget *w, DebugWindow *win) |
268 save_cb(GtkWidget *w, DebugWindow *win) |
| 281 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win->save), |
287 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win->save), |
| 282 "gaim-debug.log"); |
288 "gaim-debug.log"); |
| 283 g_signal_connect(G_OBJECT(win->save), "response", |
289 g_signal_connect(G_OBJECT(win->save), "response", |
| 284 G_CALLBACK(save_checkfile_cb), win); |
290 G_CALLBACK(save_checkfile_cb), win); |
| 285 #else /* FILECHOOSER */ |
291 #else /* FILECHOOSER */ |
| 286 win->save = gtk_file_selection_new(_("Save Debug Log")); |
|
| 287 buf = g_strdup_printf("%s" G_DIR_SEPARATOR_S "gaim-debug.log", |
292 buf = g_strdup_printf("%s" G_DIR_SEPARATOR_S "gaim-debug.log", |
| 288 gaim_home_dir()); |
293 gaim_home_dir()); |
| |
294 win->save = gtk_file_selection_new(_("Save Debug Log")); |
| 289 gtk_file_selection_set_filename(GTK_FILE_SELECTION(win->save), buf); |
295 gtk_file_selection_set_filename(GTK_FILE_SELECTION(win->save), buf); |
| 290 g_free(buf); |
|
| 291 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->ok_button), |
296 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->ok_button), |
| 292 "clicked", G_CALLBACK(save_checkfile_cb), win); |
297 "clicked", G_CALLBACK(save_checkfile_cb), win); |
| 293 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->cancel_button), |
298 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->cancel_button), |
| 294 "clicked", G_CALLBACK(save_destroy_cb), win); |
299 "clicked", G_CALLBACK(save_destroy_cb), win); |
| 295 g_signal_connect(G_OBJECT(win->save), |
300 g_signal_connect(G_OBJECT(win->save), |
| 296 "destroy", G_CALLBACK(save_destroy_cb), win); |
301 "destroy", G_CALLBACK(save_destroy_cb), win); |
| |
302 g_free(buf); |
| 297 #endif /* FILECHOOSER */ |
303 #endif /* FILECHOOSER */ |
| 298 |
304 |
| 299 gtk_widget_show_all(GTK_WIDGET(win->save)); |
305 gtk_widget_show_all(GTK_WIDGET(win->save)); |
| 300 } |
306 } |
| 301 |
307 |