comparison pidgin/gtklog.c @ 32520:fe75cd926073

Webkit Message views. This commit is a squashed commit of the series of commits from my git repository which I was using for development. (git://github.com/tdrhq/pidgin-clone.git, branch webkit)
author tdrhq@soc.pidgin.im
date Fri, 24 Jul 2009 01:18:07 +0000
parents 6e1967b0f90b
children 041d5144730f
comparison
equal deleted inserted replaced
28007:ed3184cc557d 32520:fe75cd926073
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;
420 } 420 }
421 421
422 static gboolean search_find_cb(gpointer data) 422 static gboolean search_find_cb(gpointer data)
423 { 423 {
424 PidginLogViewer *viewer = data; 424 PidginLogViewer *viewer = data;
425 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); 425 webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (viewer->web_view), viewer->search, FALSE, 0);
426 webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (viewer->web_view), TRUE);
427 webkit_web_view_search_text (WEBKIT_WEB_VIEW (viewer->web_view), viewer->search, FALSE, TRUE, TRUE);
426 return FALSE; 428 return FALSE;
427 } 429 }
428 430
429 static void log_select_cb(GtkTreeSelection *sel, PidginLogViewer *viewer) { 431 static void log_select_cb(GtkTreeSelection *sel, PidginLogViewer *viewer) {
430 GtkTreeIter iter; 432 GtkTreeIter iter;
461 } 463 }
462 464
463 read = purple_log_read(log, &flags); 465 read = purple_log_read(log, &flags);
464 viewer->flags = flags; 466 viewer->flags = flags;
465 467
466 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml)); 468 webkit_web_view_open (WEBKIT_WEB_VIEW(viewer->web_view), "about:blank");
467 gtk_imhtml_set_protocol_name(GTK_IMHTML(viewer->imhtml),
468 purple_account_get_protocol_name(log->account));
469 469
470 purple_signal_emit(pidgin_log_get_handle(), "log-displaying", viewer, log); 470 purple_signal_emit(pidgin_log_get_handle(), "log-displaying", viewer, log);
471 471
472 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read, 472 webkit_web_view_load_html_string (WEBKIT_WEB_VIEW(viewer->web_view), read, "");
473 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL |
474 ((flags & PURPLE_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0));
475 g_free(read); 473 g_free(read);
476 474
477 if (viewer->search != NULL) { 475 if (viewer->search != NULL) {
478 gtk_imhtml_search_clear(GTK_IMHTML(viewer->imhtml)); 476 webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(viewer->web_view));
479 g_idle_add(search_find_cb, viewer); 477 g_idle_add(search_find_cb, viewer);
480 } 478 }
481 479
482 pidgin_clear_cursor(viewer->window); 480 pidgin_clear_cursor(viewer->window);
483 } 481 }
656 /* A fancy little box ************/ 654 /* A fancy little box ************/
657 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 655 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
658 gtk_paned_add2(GTK_PANED(pane), vbox); 656 gtk_paned_add2(GTK_PANED(pane), vbox);
659 657
660 /* Viewer ************/ 658 /* Viewer ************/
661 frame = pidgin_create_imhtml(FALSE, &lv->imhtml, NULL, NULL); 659 sw = gtk_scrolled_window_new (NULL, NULL);
662 gtk_widget_set_name(lv->imhtml, "pidgin_log_imhtml"); 660 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
663 gtk_widget_set_size_request(lv->imhtml, 320, 200); 661 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
664 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); 662
665 gtk_widget_show(frame); 663 lv->web_view = gtk_webview_new ();
664 gtk_container_add (GTK_CONTAINER (sw), lv->web_view);
665 gtk_widget_set_name(lv->web_view, "pidgin_log_web_view");
666 gtk_widget_set_size_request(lv->web_view, 320, 200);
667 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
668 gtk_widget_show(sw);
666 669
667 /* Search box **********/ 670 /* Search box **********/
668 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 671 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
669 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 672 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
670 lv->entry = gtk_entry_new(); 673 lv->entry = gtk_entry_new();