Mercurial > pidgin
comparison src/gtklog.c @ 10175:53410b84336f
[gaim-migrate @ 11290]
I wrote a helper function that creates the imhtml and toolbar and
puts them in a widget and what not. And I changed some places
to use this. And I removed some whitespace from log.c. And I
changed the conversation colors back to normal. And I'm not
committing everything in my tree, so let me know if this doesn't
compile. And that's all.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 14 Nov 2004 01:52:25 +0000 |
parents | e74eb0d11f86 |
children | 5b33637b69fd |
comparison
equal
deleted
inserted
replaced
10174:8dd4535dd359 | 10175:53410b84336f |
---|---|
68 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) | 68 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) |
69 { | 69 { |
70 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); | 70 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); |
71 GList *logs; | 71 GList *logs; |
72 GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); | 72 GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
73 | 73 |
74 if (lv->search) | 74 if (lv->search) |
75 g_free(lv->search); | 75 g_free(lv->search); |
76 | 76 |
77 gtk_tree_store_clear(lv->treestore); | 77 gtk_tree_store_clear(lv->treestore); |
78 if (strlen(search_term) == 0) {/* reset the tree */ | 78 if (strlen(search_term) == 0) {/* reset the tree */ |
79 populate_log_tree(lv); | 79 populate_log_tree(lv); |
80 lv->search = NULL; | 80 lv->search = NULL; |
81 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); | 81 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); |
82 return; | 82 return; |
83 } | 83 } |
84 | 84 |
85 lv->search = g_strdup(search_term); | 85 lv->search = g_strdup(search_term); |
86 | 86 |
87 gdk_window_set_cursor(lv->window->window, cursor); | 87 gdk_window_set_cursor(lv->window->window, cursor); |
88 while (gtk_events_pending()) | 88 while (gtk_events_pending()) |
89 gtk_main_iteration(); | 89 gtk_main_iteration(); |
90 gdk_cursor_unref(cursor); | 90 gdk_cursor_unref(cursor); |
91 | 91 |
92 for (logs = lv->logs; logs != NULL; logs = logs->next) { | 92 for (logs = lv->logs; logs != NULL; logs = logs->next) { |
93 char *read = gaim_log_read((GaimLog*)logs->data, NULL); | 93 char *read = gaim_log_read((GaimLog*)logs->data, NULL); |
94 if (gaim_strcasestr(read, search_term)) { | 94 if (gaim_strcasestr(read, search_term)) { |
95 GtkTreeIter iter; | 95 GtkTreeIter iter; |
96 GaimLog *log = logs->data; | 96 GaimLog *log = logs->data; |
101 strncpy(title, title_utf8, sizeof(title)); | 101 strncpy(title, title_utf8, sizeof(title)); |
102 g_free(title_utf8); | 102 g_free(title_utf8); |
103 gtk_tree_store_append (lv->treestore, &iter, NULL); | 103 gtk_tree_store_append (lv->treestore, &iter, NULL); |
104 gtk_tree_store_set(lv->treestore, &iter, | 104 gtk_tree_store_set(lv->treestore, &iter, |
105 0, title, | 105 0, title, |
106 1, log, -1); | 106 1, log, -1); |
107 } | 107 } |
108 } | 108 } |
109 | 109 |
110 | 110 |
111 cursor = gdk_cursor_new(GDK_LEFT_PTR); | 111 cursor = gdk_cursor_new(GDK_LEFT_PTR); |
112 gdk_window_set_cursor(lv->window->window, cursor); | 112 gdk_window_set_cursor(lv->window->window, cursor); |
113 gdk_cursor_unref(cursor); | 113 gdk_cursor_unref(cursor); |
114 } | 114 } |
115 | 115 |
187 title_utf8 = gaim_utf8_try_convert(title); | 187 title_utf8 = gaim_utf8_try_convert(title); |
188 g_free(title); | 188 g_free(title); |
189 title = title_utf8; | 189 title = title_utf8; |
190 gtk_window_set_title(GTK_WINDOW(viewer->window), title); | 190 gtk_window_set_title(GTK_WINDOW(viewer->window), title); |
191 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml)); | 191 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml)); |
192 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read, | 192 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read, |
193 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL | | 193 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL | |
194 ((flags & GAIM_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0)); | 194 ((flags & GAIM_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0)); |
195 | 195 |
196 if (viewer->search) | 196 if (viewer->search) |
197 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); | 197 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); |
198 | 198 |
199 g_free(read); | 199 g_free(read); |
200 g_free(title); | 200 g_free(title); |
201 } | 201 } |
202 | 202 |
203 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet. | 203 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet. |
216 char *utf8_tmp; /* temporary variable for utf8 conversion */ | 216 char *utf8_tmp; /* temporary variable for utf8 conversion */ |
217 GtkTreeIter toplevel, child; | 217 GtkTreeIter toplevel, child; |
218 GList *logs = lv->logs; | 218 GList *logs = lv->logs; |
219 while (logs) { | 219 while (logs) { |
220 GaimLog *log = logs->data; | 220 GaimLog *log = logs->data; |
221 | 221 |
222 strftime(month, sizeof(month), "%B %Y", localtime(&log->time)); | 222 strftime(month, sizeof(month), "%B %Y", localtime(&log->time)); |
223 strftime(title, sizeof(title), "%c", localtime(&log->time)); | 223 strftime(title, sizeof(title), "%c", localtime(&log->time)); |
224 | 224 |
225 /* do utf8 conversions */ | 225 /* do utf8 conversions */ |
226 utf8_tmp = gaim_utf8_try_convert(month); | 226 utf8_tmp = gaim_utf8_try_convert(month); |
227 strncpy(month, utf8_tmp, sizeof(month)); | 227 strncpy(month, utf8_tmp, sizeof(month)); |
228 utf8_tmp = gaim_utf8_try_convert(title); | 228 utf8_tmp = gaim_utf8_try_convert(title); |
229 strncpy(title, utf8_tmp, sizeof(title)); | 229 strncpy(title, utf8_tmp, sizeof(title)); |
230 g_free(utf8_tmp); | 230 g_free(utf8_tmp); |
231 | 231 |
232 if (strncmp(month, prev_top_month, sizeof(month)) != 0) { | 232 if (strncmp(month, prev_top_month, sizeof(month)) != 0) { |
233 /* top level */ | 233 /* top level */ |
234 gtk_tree_store_append(lv->treestore, &toplevel, NULL); | 234 gtk_tree_store_append(lv->treestore, &toplevel, NULL); |
235 gtk_tree_store_set(lv->treestore, &toplevel, 0, month, 1, NULL, -1); | 235 gtk_tree_store_set(lv->treestore, &toplevel, 0, month, 1, NULL, -1); |
236 | 236 |
237 /* sub */ | 237 /* sub */ |
238 gtk_tree_store_append(lv->treestore, &child, &toplevel); | 238 gtk_tree_store_append(lv->treestore, &child, &toplevel); |
239 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); | 239 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); |
240 | 240 |
241 strncpy(prev_top_month, month, sizeof(prev_top_month)); | 241 strncpy(prev_top_month, month, sizeof(prev_top_month)); |
242 } else { | 242 } else { |
243 gtk_tree_store_append(lv->treestore, &child, &toplevel); | 243 gtk_tree_store_append(lv->treestore, &child, &toplevel); |
244 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); | 244 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); |
245 } | 245 } |
246 | 246 |
247 logs = logs->next; | 247 logs = logs->next; |
248 } | 248 } |
249 } | 249 } |
250 | 250 |
251 void gaim_gtk_log_show(GaimLogType type, const char *screenname, GaimAccount *account) { | 251 void gaim_gtk_log_show(GaimLogType type, const char *screenname, GaimAccount *account) { |
274 lv = g_new0(GaimGtkLogViewer, 1); | 274 lv = g_new0(GaimGtkLogViewer, 1); |
275 lv->logs = logs = gaim_log_get_logs(type, screenname, account); | 275 lv->logs = logs = gaim_log_get_logs(type, screenname, account); |
276 g_hash_table_insert(log_viewers, ht, lv); | 276 g_hash_table_insert(log_viewers, ht, lv); |
277 | 277 |
278 /* Window ***********/ | 278 /* Window ***********/ |
279 lv->window = gtk_dialog_new_with_buttons(screenname, NULL, 0, | 279 lv->window = gtk_dialog_new_with_buttons(screenname, NULL, 0, |
280 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); | 280 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); |
281 gtk_container_set_border_width (GTK_CONTAINER(lv->window), 6); | 281 gtk_container_set_border_width (GTK_CONTAINER(lv->window), 6); |
282 gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE); | 282 gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE); |
283 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(lv->window)->vbox), 0); | 283 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(lv->window)->vbox), 0); |
284 g_signal_connect(G_OBJECT(lv->window), "response", | 284 g_signal_connect(G_OBJECT(lv->window), "response", |
285 G_CALLBACK(destroy_cb), ht); | 285 G_CALLBACK(destroy_cb), ht); |
286 | 286 |
287 hbox = gtk_hbox_new(FALSE, 6); | 287 hbox = gtk_hbox_new(FALSE, 6); |
288 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); | 288 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); |
289 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), hbox, FALSE, FALSE, 0); | 289 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), hbox, FALSE, FALSE, 0); |
309 | 309 |
310 /* Pane *************/ | 310 /* Pane *************/ |
311 pane = gtk_hpaned_new(); | 311 pane = gtk_hpaned_new(); |
312 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); | 312 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); |
313 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), pane, TRUE, TRUE, 0); | 313 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), pane, TRUE, TRUE, 0); |
314 | 314 |
315 /* List *************/ | 315 /* List *************/ |
316 sw = gtk_scrolled_window_new (NULL, NULL); | 316 sw = gtk_scrolled_window_new (NULL, NULL); |
317 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); | 317 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); |
318 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); | 318 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
319 gtk_paned_add1(GTK_PANED(pane), sw); | 319 gtk_paned_add1(GTK_PANED(pane), sw); |
341 lv->imhtml = gtk_imhtml_new(NULL, NULL); | 341 lv->imhtml = gtk_imhtml_new(NULL, NULL); |
342 gtk_widget_set_name(lv->imhtml, "gaim_gtklog_imhtml"); | 342 gtk_widget_set_name(lv->imhtml, "gaim_gtklog_imhtml"); |
343 gtk_container_add(GTK_CONTAINER(sw), lv->imhtml); | 343 gtk_container_add(GTK_CONTAINER(sw), lv->imhtml); |
344 gaim_setup_imhtml(lv->imhtml); | 344 gaim_setup_imhtml(lv->imhtml); |
345 gtk_widget_set_size_request(lv->imhtml, 320, 200); | 345 gtk_widget_set_size_request(lv->imhtml, 320, 200); |
346 | 346 |
347 /* Search box **********/ | 347 /* Search box **********/ |
348 hbox = gtk_hbox_new(FALSE, 6); | 348 hbox = gtk_hbox_new(FALSE, 6); |
349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
350 lv->entry = gtk_entry_new(); | 350 lv->entry = gtk_entry_new(); |
351 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); | 351 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); |
390 syslog_viewer->logs = g_list_concat(syslog_viewer->logs, logs); | 390 syslog_viewer->logs = g_list_concat(syslog_viewer->logs, logs); |
391 } | 391 } |
392 syslog_viewer->logs = g_list_sort(syslog_viewer->logs, gaim_log_compare); | 392 syslog_viewer->logs = g_list_sort(syslog_viewer->logs, gaim_log_compare); |
393 | 393 |
394 /* Window ***********/ | 394 /* Window ***********/ |
395 syslog_viewer->window = gtk_dialog_new_with_buttons(_("System Log"), NULL, 0, | 395 syslog_viewer->window = gtk_dialog_new_with_buttons(_("System Log"), NULL, 0, |
396 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); | 396 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); |
397 gtk_container_set_border_width (GTK_CONTAINER(syslog_viewer->window), 6); | 397 gtk_container_set_border_width (GTK_CONTAINER(syslog_viewer->window), 6); |
398 gtk_dialog_set_has_separator(GTK_DIALOG(syslog_viewer->window), FALSE); | 398 gtk_dialog_set_has_separator(GTK_DIALOG(syslog_viewer->window), FALSE); |
399 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), 0); | 399 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), 0); |
400 g_signal_connect(G_OBJECT(syslog_viewer->window), "response", | 400 g_signal_connect(G_OBJECT(syslog_viewer->window), "response", |
401 G_CALLBACK(destroy_cb), NULL); | 401 G_CALLBACK(destroy_cb), NULL); |
402 | 402 |
403 hbox = gtk_hbox_new(FALSE, 6); | 403 hbox = gtk_hbox_new(FALSE, 6); |
404 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); | 404 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); |
405 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), hbox, | 405 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), hbox, |
416 /* Pane *************/ | 416 /* Pane *************/ |
417 pane = gtk_hpaned_new(); | 417 pane = gtk_hpaned_new(); |
418 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); | 418 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); |
419 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), pane, | 419 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), pane, |
420 TRUE, TRUE, 0); | 420 TRUE, TRUE, 0); |
421 | 421 |
422 /* List *************/ | 422 /* List *************/ |
423 sw = gtk_scrolled_window_new (NULL, NULL); | 423 sw = gtk_scrolled_window_new (NULL, NULL); |
424 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); | 424 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); |
425 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); | 425 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
426 gtk_paned_add1(GTK_PANED(pane), sw); | 426 gtk_paned_add1(GTK_PANED(pane), sw); |
468 g_signal_connect (GTK_BUTTON (button), "clicked", | 468 g_signal_connect (GTK_BUTTON (button), "clicked", |
469 G_CALLBACK (search_cb), | 469 G_CALLBACK (search_cb), |
470 syslog_viewer); | 470 syslog_viewer); |
471 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 471 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
472 | 472 |
473 gtk_widget_show_all(syslog_viewer->window); | 473 gtk_widget_show_all(syslog_viewer->window); |
474 } | 474 } |