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 |