pidgin/gtklog.c

changeset 32710
e07993a28f20
parent 32520
93814958369f
child 32912
6f4a4f8ad117
child 33120
f6f1a27ade72
equal deleted inserted replaced
32056:5ecbc7cf4ee1 32710:e07993a28f20
33 #include "request.h" 33 #include "request.h"
34 #include "util.h" 34 #include "util.h"
35 35
36 #include "pidginstock.h" 36 #include "pidginstock.h"
37 #include "gtkblist.h" 37 #include "gtkblist.h"
38 #include "gtkimhtml.h"
39 #include "gtklog.h" 38 #include "gtklog.h"
40 #include "gtkutils.h" 39 #include "gtkutils.h"
40 #include "gtkwebview.h"
41 41
42 static GHashTable *log_viewers = NULL; 42 static GHashTable *log_viewers = NULL;
43 static void populate_log_tree(PidginLogViewer *lv); 43 static void populate_log_tree(PidginLogViewer *lv);
44 static PidginLogViewer *syslog_viewer = NULL; 44 static PidginLogViewer *syslog_viewer = NULL;
45 45
128 /* reset the tree */ 128 /* reset the tree */
129 gtk_tree_store_clear(lv->treestore); 129 gtk_tree_store_clear(lv->treestore);
130 populate_log_tree(lv); 130 populate_log_tree(lv);
131 g_free(lv->search); 131 g_free(lv->search);
132 lv->search = NULL; 132 lv->search = NULL;
133 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); 133 webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(lv->web_view));
134 select_first_log(lv); 134 select_first_log(lv);
135 return; 135 return;
136 } 136 }
137 137
138 if (lv->search != NULL && !strcmp(lv->search, search_term)) 138 if (lv->search != NULL && !strcmp(lv->search, search_term))
139 { 139 {
140 /* Searching for the same term acts as "Find Next" */ 140 /* Searching for the same term acts as "Find Next" */
141 gtk_imhtml_search_find(GTK_IMHTML(lv->imhtml), lv->search); 141 webkit_web_view_search_text(WEBKIT_WEB_VIEW(lv->web_view), lv->search, FALSE, TRUE, TRUE);
142 return; 142 return;
143 } 143 }
144 144
145 pidgin_set_cursor(lv->window, GDK_WATCH); 145 pidgin_set_cursor(lv->window, GDK_WATCH);
146 146
147 g_free(lv->search); 147 g_free(lv->search);
148 lv->search = g_strdup(search_term); 148 lv->search = g_strdup(search_term);
149 149
150 gtk_tree_store_clear(lv->treestore); 150 gtk_tree_store_clear(lv->treestore);
151 gtk_imhtml_clear(GTK_IMHTML(lv->imhtml)); 151 webkit_web_view_open(WEBKIT_WEB_VIEW(lv->web_view), "about:blank"); /* clear the view */
152 152
153 for (logs = lv->logs; logs != NULL; logs = logs->next) { 153 for (logs = lv->logs; logs != NULL; logs = logs->next) {
154 char *read = purple_log_read((PurpleLog*)logs->data, NULL); 154 char *read = purple_log_read((PurpleLog*)logs->data, NULL);
155 if (read && *read && purple_strcasestr(read, search_term)) { 155 if (read && *read && purple_strcasestr(read, search_term)) {
156 GtkTreeIter iter; 156 GtkTreeIter iter;
417 } 417 }
418 418
419 static gboolean search_find_cb(gpointer data) 419 static gboolean search_find_cb(gpointer data)
420 { 420 {
421 PidginLogViewer *viewer = data; 421 PidginLogViewer *viewer = data;
422 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); 422 webkit_web_view_mark_text_matches(WEBKIT_WEB_VIEW(viewer->web_view), viewer->search, FALSE, 0);
423 g_object_steal_data(G_OBJECT(viewer->entry), "search-find-cb"); 423 webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(viewer->web_view), TRUE);
424 webkit_web_view_search_text(WEBKIT_WEB_VIEW(viewer->web_view), viewer->search, FALSE, TRUE, TRUE);
424 return FALSE; 425 return FALSE;
425 } 426 }
426 427
427 static void log_select_cb(GtkTreeSelection *sel, PidginLogViewer *viewer) { 428 static void log_select_cb(GtkTreeSelection *sel, PidginLogViewer *viewer) {
428 GtkTreeIter iter; 429 GtkTreeIter iter;
459 } 460 }
460 461
461 read = purple_log_read(log, &flags); 462 read = purple_log_read(log, &flags);
462 viewer->flags = flags; 463 viewer->flags = flags;
463 464
464 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml)); 465 webkit_web_view_open(WEBKIT_WEB_VIEW(viewer->web_view), "about:blank");
465 gtk_imhtml_set_protocol_name(GTK_IMHTML(viewer->imhtml),
466 purple_account_get_protocol_name(log->account));
467 466
468 purple_signal_emit(pidgin_log_get_handle(), "log-displaying", viewer, log); 467 purple_signal_emit(pidgin_log_get_handle(), "log-displaying", viewer, log);
469 468
470 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read, 469 webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(viewer->web_view), read, "");
471 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL |
472 ((flags & PURPLE_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0));
473 g_free(read); 470 g_free(read);
474 471
475 if (viewer->search != NULL) { 472 if (viewer->search != NULL) {
476 guint source; 473 webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(viewer->web_view));
477 gtk_imhtml_search_clear(GTK_IMHTML(viewer->imhtml)); 474 g_idle_add(search_find_cb, viewer);
478 source = g_idle_add(search_find_cb, viewer);
479 g_object_set_data_full(G_OBJECT(viewer->entry), "search-find-cb",
480 GINT_TO_POINTER(source), (GDestroyNotify)g_source_remove);
481 } 475 }
482 476
483 pidgin_clear_cursor(viewer->window); 477 pidgin_clear_cursor(viewer->window);
484 } 478 }
485 479
618 g_object_unref(G_OBJECT(lv->treestore)); 612 g_object_unref(G_OBJECT(lv->treestore));
619 rend = gtk_cell_renderer_text_new(); 613 rend = gtk_cell_renderer_text_new();
620 col = gtk_tree_view_column_new_with_attributes ("time", rend, "markup", 0, NULL); 614 col = gtk_tree_view_column_new_with_attributes ("time", rend, "markup", 0, NULL);
621 gtk_tree_view_append_column (GTK_TREE_VIEW(lv->treeview), col); 615 gtk_tree_view_append_column (GTK_TREE_VIEW(lv->treeview), col);
622 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (lv->treeview), FALSE); 616 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (lv->treeview), FALSE);
623 gtk_paned_add1(GTK_PANED(pane), 617 gtk_paned_add1(GTK_PANED(pane),
624 pidgin_make_scrollable(lv->treeview, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS, GTK_SHADOW_IN, -1, -1)); 618 pidgin_make_scrollable(lv->treeview, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS, GTK_SHADOW_IN, -1, -1));
625 619
626 populate_log_tree(lv); 620 populate_log_tree(lv);
627 621
628 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (lv->treeview)); 622 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (lv->treeview));
653 /* A fancy little box ************/ 647 /* A fancy little box ************/
654 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 648 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
655 gtk_paned_add2(GTK_PANED(pane), vbox); 649 gtk_paned_add2(GTK_PANED(pane), vbox);
656 650
657 /* Viewer ************/ 651 /* Viewer ************/
658 frame = pidgin_create_imhtml(FALSE, &lv->imhtml, NULL, NULL); 652 frame = pidgin_create_webview(FALSE, &lv->web_view, NULL, NULL);
659 gtk_widget_set_name(lv->imhtml, "pidgin_log_imhtml"); 653 gtk_widget_set_name(lv->web_view, "pidgin_log_web_view");
660 gtk_widget_set_size_request(lv->imhtml, 320, 200); 654 gtk_widget_set_size_request(lv->web_view, 320, 200);
661 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); 655 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
662 gtk_widget_show(frame); 656 gtk_widget_show(frame);
663 657
664 /* Search box **********/ 658 /* Search box **********/
665 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 659 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);

mercurial