Mercurial > pidgin
comparison src/gtkdebug.c @ 8953:0277908e367d
[gaim-migrate @ 9726]
find and save buttons for the debug window from nosnilmot
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Sun, 16 May 2004 17:44:37 +0000 |
| parents | 92cbf9713795 |
| children | 91856b52a391 |
comparison
equal
deleted
inserted
replaced
| 8952:e3f4657fa555 | 8953:0277908e367d |
|---|---|
| 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 "prefs.h" | 27 #include "prefs.h" |
| 28 #include "request.h" | |
| 28 #include "util.h" | 29 #include "util.h" |
| 29 | 30 |
| 30 #include "gtkdebug.h" | 31 #include "gtkdebug.h" |
| 31 #include "gtkimhtml.h" | 32 #include "gtkimhtml.h" |
| 33 #include "gtkutils.h" | |
| 32 #include "stock.h" | 34 #include "stock.h" |
| 33 | 35 |
| 34 #include "ui.h" | 36 #include "ui.h" |
| 35 | 37 |
| 36 extern int opt_debug; | 38 extern int opt_debug; |
| 37 | 39 |
| 38 typedef struct | 40 typedef struct |
| 39 { | 41 { |
| 40 GtkWidget *window; | 42 GtkWidget *window; |
| 41 GtkWidget *text; | 43 GtkWidget *text; |
| 44 GtkWidget *find; | |
| 42 | 45 |
| 43 gboolean timestamps; | 46 gboolean timestamps; |
| 44 gboolean paused; | 47 gboolean paused; |
| 45 | 48 |
| 46 guint timestamps_handle; | 49 guint timestamps_handle; |
| 56 "#FF0000", /**< Fatal errors. */ | 59 "#FF0000", /**< Fatal errors. */ |
| 57 }; | 60 }; |
| 58 | 61 |
| 59 static DebugWindow *debug_win = NULL; | 62 static DebugWindow *debug_win = NULL; |
| 60 | 63 |
| 64 struct _find { | |
| 65 DebugWindow *window; | |
| 66 GtkWidget *entry; | |
| 67 }; | |
| 68 | |
| 61 static gint | 69 static gint |
| 62 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) | 70 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) |
| 63 { | 71 { |
| 64 if (debug_win->timestamps_handle != 0) | 72 if (debug_win->timestamps_handle != 0) |
| 65 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); | 73 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); |
| 79 gaim_prefs_set_int("/gaim/gtk/debug/width", event->width); | 87 gaim_prefs_set_int("/gaim/gtk/debug/width", event->width); |
| 80 gaim_prefs_set_int("/gaim/gtk/debug/height", event->height); | 88 gaim_prefs_set_int("/gaim/gtk/debug/height", event->height); |
| 81 } | 89 } |
| 82 | 90 |
| 83 return FALSE; | 91 return FALSE; |
| 92 } | |
| 93 | |
| 94 static void | |
| 95 do_find_cb(GtkWidget *widget, gint resp, struct _find *f) | |
| 96 { | |
| 97 switch (resp) { | |
| 98 case GTK_RESPONSE_OK: | |
| 99 gtk_imhtml_search_find(GTK_IMHTML(f->window->text), | |
| 100 gtk_entry_get_text(GTK_ENTRY(f->entry))); | |
| 101 break; | |
| 102 | |
| 103 case GTK_RESPONSE_DELETE_EVENT: | |
| 104 case GTK_RESPONSE_CLOSE: | |
| 105 gtk_imhtml_search_clear(GTK_IMHTML(f->window->text)); | |
| 106 gtk_widget_destroy(f->window->find); | |
| 107 f->window->find = NULL; | |
| 108 g_free(f); | |
| 109 break; | |
| 110 } | |
| 111 } | |
| 112 | |
| 113 static void | |
| 114 find_cb(GtkWidget *w, DebugWindow *win) | |
| 115 { | |
| 116 GtkWidget *hbox, *img, *label; | |
| 117 struct _find *f; | |
| 118 | |
| 119 if(win->find) | |
| 120 { | |
| 121 gtk_window_present(GTK_WINDOW(win->find)); | |
| 122 return; | |
| 123 } | |
| 124 | |
| 125 f = g_malloc(sizeof(struct _find)); | |
| 126 f->window = win; | |
| 127 win->find = gtk_dialog_new_with_buttons(_("Find"), | |
| 128 GTK_WINDOW(win->window), GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 129 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, | |
| 130 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL); | |
| 131 gtk_dialog_set_default_response(GTK_DIALOG(win->find), | |
| 132 GTK_RESPONSE_OK); | |
| 133 g_signal_connect(G_OBJECT(win->find), "response", | |
| 134 G_CALLBACK(do_find_cb), f); | |
| 135 | |
| 136 gtk_container_set_border_width(GTK_CONTAINER(win->find), 6); | |
| 137 gtk_window_set_resizable(GTK_WINDOW(win->find), FALSE); | |
| 138 gtk_dialog_set_has_separator(GTK_DIALOG(win->find), FALSE); | |
| 139 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(win->find)->vbox), 12); | |
| 140 gtk_container_set_border_width( | |
| 141 GTK_CONTAINER(GTK_DIALOG(win->find)->vbox), 6); | |
| 142 | |
| 143 hbox = gtk_hbox_new(FALSE, 12); | |
| 144 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(win->find)->vbox), | |
| 145 hbox); | |
| 146 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, | |
| 147 GTK_ICON_SIZE_DIALOG); | |
| 148 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 149 | |
| 150 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 151 gtk_dialog_set_response_sensitive(GTK_DIALOG(win->find), | |
| 152 GTK_RESPONSE_OK, FALSE); | |
| 153 | |
| 154 label = gtk_label_new(NULL); | |
| 155 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:")); | |
| 156 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
| 157 | |
| 158 f->entry = gtk_entry_new(); | |
| 159 gtk_entry_set_activates_default(GTK_ENTRY(f->entry), TRUE); | |
| 160 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(f->entry)); | |
| 161 g_signal_connect(G_OBJECT(f->entry), "changed", | |
| 162 G_CALLBACK(gaim_gtk_set_sensitive_if_input), | |
| 163 win->find); | |
| 164 gtk_box_pack_start(GTK_BOX(hbox), f->entry, FALSE, FALSE, 0); | |
| 165 | |
| 166 gtk_widget_show_all(win->find); | |
| 167 gtk_widget_grab_focus(f->entry); | |
| 168 } | |
| 169 | |
| 170 static void | |
| 171 do_save_cb(GtkWidget *wid) | |
| 172 { | |
| 173 DebugWindow *win = NULL; | |
| 174 const char *filename; | |
| 175 char *tmp; | |
| 176 FILE *fp; | |
| 177 | |
| 178 win = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button), | |
| 179 "gaim_debugwin"); | |
| 180 | |
| 181 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); | |
| 182 gtk_widget_destroy(wid); | |
| 183 | |
| 184 if (filename == NULL) | |
| 185 return; | |
| 186 | |
| 187 if ((fp = fopen(filename, "w+")) == NULL) | |
| 188 return; | |
| 189 | |
| 190 if (debug_win == NULL) | |
| 191 return; | |
| 192 | |
| 193 tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL); | |
| 194 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); | |
| 195 fprintf(fp, "%s", tmp); | |
| 196 g_free(tmp); | |
| 197 | |
| 198 fclose(fp); | |
| 199 } | |
| 200 | |
| 201 static void | |
| 202 do_check_save_cb(GtkObject *obj, GtkWidget *wid) | |
| 203 { | |
| 204 const char *filename; | |
| 205 | |
| 206 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); | |
| 207 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid))) | |
| 208 return; | |
| 209 | |
| 210 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
| 211 { | |
| 212 gaim_request_yes_no(NULL, NULL, _("That file already exists"), | |
| 213 _("Would you like to overwrite it?"), 1, wid, | |
| 214 G_CALLBACK(do_save_cb), NULL); | |
| 215 } | |
| 216 else | |
| 217 do_save_cb(wid); | |
| 218 } | |
| 219 | |
| 220 static void | |
| 221 save_cb(GtkWidget *w, DebugWindow *win) | |
| 222 { | |
| 223 char buf[BUF_LONG]; | |
| 224 GtkWidget *window; | |
| 225 | |
| 226 window = gtk_file_selection_new(_("Save Debug Log")); | |
| 227 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gaim-debug.log", | |
| 228 gaim_home_dir()); | |
| 229 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); | |
| 230 g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), | |
| 231 "gaim_debugwin", win); | |
| 232 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), | |
| 233 "clicked", G_CALLBACK(do_check_save_cb), window); | |
| 234 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), | |
| 235 "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)window); | |
| 236 | |
| 237 gtk_widget_show(window); | |
| 84 } | 238 } |
| 85 | 239 |
| 86 static void | 240 static void |
| 87 clear_cb(GtkWidget *w, DebugWindow *win) | 241 clear_cb(GtkWidget *w, DebugWindow *win) |
| 88 { | 242 { |
| 150 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), | 304 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), |
| 151 GTK_ICON_SIZE_SMALL_TOOLBAR); | 305 GTK_ICON_SIZE_SMALL_TOOLBAR); |
| 152 | 306 |
| 153 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); | 307 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); |
| 154 | 308 |
| 155 #if 0 | |
| 156 /* Find button */ | 309 /* Find button */ |
| 157 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND, | 310 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND, |
| 158 NULL, NULL, NULL, NULL, -1); | 311 NULL, NULL, G_CALLBACK(find_cb), win, -1); |
| 159 | 312 |
| 160 /* Save */ | 313 /* Save */ |
| 161 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE, | 314 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE, |
| 162 NULL, NULL, NULL, NULL, -1); | 315 NULL, NULL, G_CALLBACK(save_cb), win, -1); |
| 163 #endif | |
| 164 | 316 |
| 165 /* Clear button */ | 317 /* Clear button */ |
| 166 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR, | 318 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR, |
| 167 NULL, NULL, G_CALLBACK(clear_cb), win, -1); | 319 NULL, NULL, G_CALLBACK(clear_cb), win, -1); |
| 168 | 320 |
| 179 button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), | 331 button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), |
| 180 GTK_TOOLBAR_CHILD_TOGGLEBUTTON, | 332 GTK_TOOLBAR_CHILD_TOGGLEBUTTON, |
| 181 NULL, _("Timestamps"), NULL, NULL, | 333 NULL, _("Timestamps"), NULL, NULL, |
| 182 NULL, G_CALLBACK(timestamps_cb), | 334 NULL, G_CALLBACK(timestamps_cb), |
| 183 win); | 335 win); |
| 184 | 336 |
| 185 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), | 337 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), |
| 186 gaim_prefs_get_bool("/gaim/gtk/debug/timestamps")); | 338 gaim_prefs_get_bool("/gaim/gtk/debug/timestamps")); |
| 187 | 339 |
| 188 win->timestamps_handle = | 340 win->timestamps_handle = |
| 189 gaim_prefs_connect_callback("/gaim/gtk/debug/timestamps", | 341 gaim_prefs_connect_callback("/gaim/gtk/debug/timestamps", |
| 190 timestamps_pref_cb, button); | 342 timestamps_pref_cb, button); |
| 191 } | 343 } |
| 192 | 344 |
