static void _ghtml_inspect_url(GtkWidget * widget, char const * url) { GHtml * ghtml; WebKitWebSettings * settings; WebKitWebInspector * inspector; ghtml = g_object_get_data(G_OBJECT(widget), "ghtml"); if(ghtml->inspector == NULL) { settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW( ghtml->view)); g_object_set(settings, "enable-developer-extras", TRUE, NULL); surfer_open(ghtml->surfer, url); inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW( ghtml->view)); g_signal_connect(G_OBJECT(inspector), "inspect-web-view", G_CALLBACK(_inspect_inspect), ghtml); g_signal_connect(G_OBJECT(inspector), "show-window", G_CALLBACK( _inspect_show), ghtml); g_signal_connect(G_OBJECT(inspector), "notify::inspected-uri", G_CALLBACK(_inspect_inspected_uri), ghtml); } else { surfer_open(ghtml->surfer, url); inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW( ghtml->view)); } /* FIXME crashes (tested on NetBSD/amd64) */ webkit_web_inspector_show(inspector); }
/* on_view_event_after */ static gboolean _on_view_event_after(GtkWidget * widget, GdkEvent * event, gpointer data) { GHtml * ghtml = data; GdkEventButton * eb; GtkTextIter start; GtkTextIter end; gint x; gint y; GtkTextIter iter; GSList * tags; GSList * p; char * link = NULL; gchar * url; if(event->type != GDK_BUTTON_RELEASE || event->button.button != 1) return FALSE; eb = &event->button; gtk_text_buffer_get_selection_bounds(ghtml->tbuffer, &start, &end); if(gtk_text_iter_get_offset(&start) != gtk_text_iter_get_offset(&end)) return FALSE; gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_WIDGET, eb->x, eb->y, &x, &y); gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &iter, x, y); tags = gtk_text_iter_get_tags(&iter); for(p = tags; p != NULL; p = p->next) if((link = g_object_get_data(G_OBJECT(p->data), "link")) != NULL) break; if(tags != NULL) g_slist_free(tags); if(link == NULL) return FALSE; url = (ghtml->base != NULL) ? ghtml->base : _history_get_location( ghtml->current); if((url = _ghtml_make_url(url, link)) != NULL) surfer_open(ghtml->surfer, url); else surfer_open(ghtml->surfer, link); g_free(url); return FALSE; }
/* surfer_open_tab */ void surfer_open_tab(Surfer * surfer, char const * url) { surfer_open(surfer, url); }