comparison src/gtkdebug.c @ 9480:91856b52a391

[gaim-migrate @ 10305] Make the debug window's save button use the gtk 2.4 file chooser. I'll ChangeLog this when I'm done with all the dialogs. The code isn't the prettiest thing in the world... but I don't see a better way. And I'm about to test this on a gtk less than 2.4, once I commit it. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 08 Jul 2004 01:24:48 +0000
parents 0277908e367d
children b917acdc982f
comparison
equal deleted inserted replaced
9479:fababc25f270 9480:91856b52a391
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 {