src/gtkdebug.c

changeset 9480
b4d46aa1be7d
parent 8953
6705ad4595b0
child 9482
8ade66642b6e
equal deleted inserted replaced
9479:43fab0434710 9480:b4d46aa1be7d
22 * along with this program; if not, write to the Free Software 22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */ 24 */
25 #include "gtkinternal.h" 25 #include "gtkinternal.h"
26 26
27 #include "notify.h"
27 #include "prefs.h" 28 #include "prefs.h"
28 #include "request.h" 29 #include "request.h"
29 #include "util.h" 30 #include "util.h"
30 31
31 #include "gtkdebug.h" 32 #include "gtkdebug.h"
40 typedef struct 41 typedef struct
41 { 42 {
42 GtkWidget *window; 43 GtkWidget *window;
43 GtkWidget *text; 44 GtkWidget *text;
44 GtkWidget *find; 45 GtkWidget *find;
46 GtkWidget *save;
45 47
46 gboolean timestamps; 48 gboolean timestamps;
47 gboolean paused; 49 gboolean paused;
48 50
49 guint timestamps_handle; 51 guint timestamps_handle;
69 static gint 71 static gint
70 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) 72 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused)
71 { 73 {
72 if (debug_win->timestamps_handle != 0) 74 if (debug_win->timestamps_handle != 0)
73 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); 75 gaim_prefs_disconnect_callback(debug_win->timestamps_handle);
74 76 if (debug_win->save != NULL)
75 gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE); 77 gtk_widget_destroy(debug_win->save);
76 78
77 g_free(debug_win); 79 g_free(debug_win);
78 debug_win = NULL; 80 debug_win = NULL;
81
82 gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE);
79 83
80 return FALSE; 84 return FALSE;
81 } 85 }
82 86
83 static gboolean 87 static gboolean
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 {

mercurial