diff options
author | portix <none@none> | 2012-12-04 13:26:35 +0100 |
---|---|---|
committer | portix <none@none> | 2012-12-04 13:26:35 +0100 |
commit | bd1683913bc3b77aa73c68e3ed7bd1d0a5e1fb2b (patch) | |
tree | c47ca64329760a7b02433549b08dc57e56cbc442 /src/view.c | |
parent | 0486ab5b0ccd5f0970ff85fd4a791c737dd637aa (diff) | |
download | dwb-bd1683913bc3b77aa73c68e3ed7bd1d0a5e1fb2b.zip |
Emit createTab after focusing the tab
Diffstat (limited to 'src/view.c')
-rw-r--r-- | src/view.c | 1967 |
1 files changed, 1053 insertions, 914 deletions
@@ -75,331 +75,382 @@ view_main_frame_committed_cb(WebKitWebFrame *frame, GList *gl) { #endif static void -view_resource_request_cb(WebKitWebView *wv, WebKitWebFrame *frame, WebKitWebResource *resource, WebKitNetworkRequest *request, WebKitNetworkResponse *response, GList *gl) { - if (EMIT_SCRIPT(RESOURCE)) { - ScriptSignal signal = { - SCRIPTS_WV(gl), .objects = { G_OBJECT(frame), G_OBJECT(request), G_OBJECT(response) }, SCRIPTS_SIG_META(NULL, RESOURCE, 3) }; - scripts_emit(&signal); - } - if (dwb.state.do_not_track) { - SoupMessage *msg = webkit_network_request_get_message(request); - if (msg != NULL) { - soup_message_headers_append(msg->request_headers, "DNT", "1"); +view_resource_request_cb(WebKitWebView *wv, WebKitWebFrame *frame, WebKitWebResource *resource, WebKitNetworkRequest *request, WebKitNetworkResponse *response, GList *gl) +{ + if (EMIT_SCRIPT(RESOURCE)) + { + ScriptSignal signal = { + SCRIPTS_WV(gl), .objects = { G_OBJECT(frame), G_OBJECT(request), G_OBJECT(response) }, SCRIPTS_SIG_META(NULL, RESOURCE, 3) }; + scripts_emit(&signal); + } + if (dwb.state.do_not_track) + { + SoupMessage *msg = webkit_network_request_get_message(request); + if (msg != NULL) + soup_message_headers_append(msg->request_headers, "DNT", "1"); } - } } #if WEBKIT_CHECK_VERSION(1, 8, 0) static void -view_document_finished(WebKitWebView *wv, WebKitWebFrame *frame, GList *gl) { - if (EMIT_SCRIPT(DOCUMENT_LOADED)) { - ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, DOCUMENT_LOADED, 1) }; - scripts_emit(&signal); - } +view_document_finished(WebKitWebView *wv, WebKitWebFrame *frame, GList *gl) +{ + if (EMIT_SCRIPT(DOCUMENT_LOADED)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, DOCUMENT_LOADED, 1) }; + scripts_emit(&signal); + } } #endif /* view_button_press_cb(WebKitWebView *web, GdkEventButton *button, GList *gl) {{{*/ static void -view_disconnect_caret(WebKitWebView *web) { - if (m_sig_caret_button_release > 0) { - g_signal_handler_disconnect(web, m_sig_caret_button_release); - m_sig_caret_button_release = 0; - } - if (m_sig_caret_motion > 0) { - g_signal_handler_disconnect(web, m_sig_caret_motion); - m_sig_caret_motion = 0; - } +view_disconnect_caret(WebKitWebView *web) +{ + if (m_sig_caret_button_release > 0) + { + g_signal_handler_disconnect(web, m_sig_caret_button_release); + m_sig_caret_button_release = 0; + } + if (m_sig_caret_motion > 0) + { + g_signal_handler_disconnect(web, m_sig_caret_motion); + m_sig_caret_motion = 0; + } } void -view_link_select(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) { - WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); - WebKitDOMRange *range = webkit_dom_document_caret_range_from_point(doc, e->x, e->y); - WebKitDOMDOMSelection *selection = webkit_dom_dom_window_get_selection(webkit_dom_document_get_default_view(doc)); - - int start, end; - start = webkit_dom_range_get_start_offset(other, NULL); - end = webkit_dom_range_get_end_offset(range, NULL); - WebKitDOMNode *node = webkit_dom_range_get_start_container(other, NULL); - WebKitDOMNode *thisnode = webkit_dom_range_get_start_container(range, NULL); - if (start < end) - webkit_dom_dom_selection_set_base_and_extent(selection, node, start, thisnode, end, NULL); - else - webkit_dom_dom_selection_set_base_and_extent(selection, thisnode, end, node, start, NULL); +view_link_select(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) +{ + int start, end; + + WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); + WebKitDOMRange *range = webkit_dom_document_caret_range_from_point(doc, e->x, e->y); + WebKitDOMDOMSelection *selection = webkit_dom_dom_window_get_selection(webkit_dom_document_get_default_view(doc)); + + start = webkit_dom_range_get_start_offset(other, NULL); + end = webkit_dom_range_get_end_offset(range, NULL); + + WebKitDOMNode *node = webkit_dom_range_get_start_container(other, NULL); + WebKitDOMNode *thisnode = webkit_dom_range_get_start_container(range, NULL); + + if (start < end) + webkit_dom_dom_selection_set_base_and_extent(selection, node, start, thisnode, end, NULL); + else + webkit_dom_dom_selection_set_base_and_extent(selection, thisnode, end, node, start, NULL); } static gboolean -view_caret_motion_cb(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) { - view_link_select(web, e, other); - return false; +view_caret_motion_cb(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) +{ + view_link_select(web, e, other); + return false; } static gboolean -view_caret_release_cb(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) { - view_link_select(web, e, other); - view_disconnect_caret(web); - return false; +view_caret_release_cb(WebKitWebView *web, GdkEventButton *e, WebKitDOMRange *other) +{ + view_link_select(web, e, other); + view_disconnect_caret(web); + return false; } static gboolean -view_button_press_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) { - WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, e); - WebKitHitTestResultContext context; - g_object_get(result, "context", &context, NULL); - gboolean ret = false; - m_click_time = e->time; - if (EMIT_SCRIPT(BUTTON_PRESS)) { - char *json = util_create_json(8, - UINTEGER, "time", e->time, UINTEGER, "type", e->type, - DOUBLE, "x", e->x, DOUBLE, "y", e->y, - UINTEGER, "state", e->state, UINTEGER, "button", e->button, - DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); - ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(result) }, SCRIPTS_SIG_META(json, BUTTON_PRESS, 1) }; - SCRIPTS_EMIT_RETURN(signal, json, true); - } - - if (gtk_widget_has_focus(dwb.gui.entry)) { - dwb_focus_scroll(gl); - CLEAR_COMMAND_TEXT(); - } - if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE) { - dwb_change_mode(INSERT_MODE); - return false; - } - else if (e->state & GDK_CONTROL_MASK && e->button == 1) { - WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); - WebKitDOMRange *range = webkit_dom_document_caret_range_from_point(doc, e->x, e->y); - WebKitDOMDOMSelection *selection = webkit_dom_dom_window_get_selection(webkit_dom_document_get_default_view(doc)); - webkit_dom_dom_selection_remove_all_ranges(selection); - webkit_dom_dom_selection_add_range(selection, range); - m_sig_caret_button_release = g_signal_connect(web, "button-release-event", G_CALLBACK(view_caret_release_cb), range); - m_sig_caret_motion = g_signal_connect(web, "motion-notify-event", G_CALLBACK(view_caret_motion_cb), range); - return false; - } - else if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION && e->type == GDK_BUTTON_PRESS && e->state & GDK_BUTTON1_MASK) { - char *clipboard = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY)); - char *backup = clipboard; - g_strstrip(clipboard); - if (e->button == 3) { - dwb_load_uri(NULL, clipboard); - ret = true; +view_button_press_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) +{ + WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, e); + WebKitHitTestResultContext context; + g_object_get(result, "context", &context, NULL); + gboolean ret = false; + m_click_time = e->time; + if (EMIT_SCRIPT(BUTTON_PRESS)) + { + char *json = util_create_json(8, + UINTEGER, "time", e->time, UINTEGER, "type", e->type, + DOUBLE, "x", e->x, DOUBLE, "y", e->y, + UINTEGER, "state", e->state, UINTEGER, "button", e->button, + DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); + ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(result) }, SCRIPTS_SIG_META(json, BUTTON_PRESS, 1) }; + SCRIPTS_EMIT_RETURN(signal, json, true); + } + + if (gtk_widget_has_focus(dwb.gui.entry)) + { + dwb_focus_scroll(gl); + CLEAR_COMMAND_TEXT(); + } + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE) + { + dwb_change_mode(INSERT_MODE); + return false; + } + else if (e->state & GDK_CONTROL_MASK && e->button == 1) + { + WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); + WebKitDOMRange *range = webkit_dom_document_caret_range_from_point(doc, e->x, e->y); + WebKitDOMDOMSelection *selection = webkit_dom_dom_window_get_selection(webkit_dom_document_get_default_view(doc)); + webkit_dom_dom_selection_remove_all_ranges(selection); + webkit_dom_dom_selection_add_range(selection, range); + m_sig_caret_button_release = g_signal_connect(web, "button-release-event", G_CALLBACK(view_caret_release_cb), range); + m_sig_caret_motion = g_signal_connect(web, "motion-notify-event", G_CALLBACK(view_caret_motion_cb), range); + return false; } - else if (e->button == 2) { - view_add(clipboard, dwb.state.background_tabs); - ret = true; + else if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION && e->type == GDK_BUTTON_PRESS && e->state & GDK_BUTTON1_MASK) + { + char *clipboard = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY)); + char *backup = clipboard; + g_strstrip(clipboard); + if (e->button == 3) + { + dwb_load_uri(NULL, clipboard); + ret = true; + } + else if (e->button == 2) + { + view_add(clipboard, dwb.state.background_tabs); + ret = true; + } + g_free(backup); + return ret; + } + else if (e->button == 1 && e->type == GDK_BUTTON_PRESS && WEBVIEW(gl) != CURRENT_WEBVIEW()) + { + dwb_unfocus(); + dwb_focus(gl); + } + else if (e->button == 3 && e->state & GDK_BUTTON1_MASK) + /* no popup if button 1 is presssed */ + return true; + else if (e->button == 8) + { + dwb_history_back(); + return true; + } + else if (e->button == 9) + { + dwb_history_forward(); + return true; } - g_free(backup); return ret; - } - else if (e->button == 1 && e->type == GDK_BUTTON_PRESS && WEBVIEW(gl) != CURRENT_WEBVIEW()) { - dwb_unfocus(); - dwb_focus(gl); - } - else if (e->button == 3 && e->state & GDK_BUTTON1_MASK) { - /* no popup if button 1 is presssed */ - return true; - } - else if (e->button == 8) { - dwb_history_back(); - return true; - } - else if (e->button == 9) { - dwb_history_forward(); - return true; - } - return ret; }/*}}}*/ /* view_button_press_cb {{{*/ static gboolean -view_button_release_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) { - char *uri = NULL; - WebKitHitTestResultContext context; - - WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, e); - g_object_get(result, "context", &context, NULL); - - if (EMIT_SCRIPT(BUTTON_RELEASE)) { - char *json = util_create_json(7, - UINTEGER, "time", e->time, - DOUBLE, "x", e->x, DOUBLE, "y", e->y, - UINTEGER, "state", e->state, UINTEGER, "button", e->button, - DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); - ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(result) }, SCRIPTS_SIG_META(json, BUTTON_RELEASE, 1) }; - SCRIPTS_EMIT_RETURN(signal, json, true); - } - - if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { - if (e->button == 2 || (e->time - m_click_time < 200 && (e->button == 1 && e->state & GDK_CONTROL_MASK))) { - g_object_get(result, "link-uri", &uri, NULL); - view_add(uri, dwb.state.background_tabs); - view_disconnect_caret(web); - return true; +view_button_release_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) +{ + char *uri = NULL; + WebKitHitTestResultContext context; + + WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, e); + g_object_get(result, "context", &context, NULL); + + if (EMIT_SCRIPT(BUTTON_RELEASE)) + { + char *json = util_create_json(7, + UINTEGER, "time", e->time, + DOUBLE, "x", e->x, DOUBLE, "y", e->y, + UINTEGER, "state", e->state, UINTEGER, "button", e->button, + DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); + ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(result) }, SCRIPTS_SIG_META(json, BUTTON_RELEASE, 1) }; + SCRIPTS_EMIT_RETURN(signal, json, true); } - } - return false; + + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) + { + if (e->button == 2 || (e->time - m_click_time < 200 && (e->button == 1 && e->state & GDK_CONTROL_MASK))) + { + g_object_get(result, "link-uri", &uri, NULL); + view_add(uri, dwb.state.background_tabs); + view_disconnect_caret(web); + return true; + } + } + return false; }/*}}}*/ /* view_close_web_view_cb(WebKitWebView *web, GList *gl) {{{*/ static gboolean -view_close_web_view_cb(WebKitWebView *web, GList *gl) { - view_remove(gl); - return true; +view_close_web_view_cb(WebKitWebView *web, GList *gl) +{ + view_remove(gl); + return true; }/*}}}*/ /* view_frame_committed_cb {{{*/ static void -view_frame_committed_cb(WebKitWebFrame *frame, GList *gl) { - if (EMIT_SCRIPT(FRAME_STATUS)) { - ScriptSignal signal = { SCRIPTS_WV(gl), - .objects = { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, FRAME_STATUS, 1) }; - scripts_emit(&signal); - } +view_frame_committed_cb(WebKitWebFrame *frame, GList *gl) +{ + if (EMIT_SCRIPT(FRAME_STATUS)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), + .objects = { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, FRAME_STATUS, 1) }; + scripts_emit(&signal); + } }/*}}}*/ /* view_frame_created_cb {{{*/ static void -view_frame_created_cb(WebKitWebView *wv, WebKitWebFrame *frame, GList *gl) { - if (EMIT_SCRIPT(FRAME_CREATED)) { - ScriptSignal signal = { SCRIPTS_WV(gl), .objects = { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, FRAME_CREATED, 1) }; - scripts_emit(&signal); - } - g_signal_connect(frame, "notify::load-status", G_CALLBACK(view_frame_committed_cb), gl); - VIEW(gl)->status->frames = g_slist_prepend(VIEW(gl)->status->frames, frame); +view_frame_created_cb(WebKitWebView *wv, WebKitWebFrame *frame, GList *gl) +{ + if (EMIT_SCRIPT(FRAME_CREATED)) { + ScriptSignal signal = { SCRIPTS_WV(gl), .objects = { G_OBJECT(frame) }, SCRIPTS_SIG_META(NULL, FRAME_CREATED, 1) }; + scripts_emit(&signal); + } + g_signal_connect(frame, "notify::load-status", G_CALLBACK(view_frame_committed_cb), gl); + VIEW(gl)->status->frames = g_slist_prepend(VIEW(gl)->status->frames, frame); }/*}}}*/ /* view_console_message_cb(WebKitWebView *web, char *message, int line, char *sourceid, GList *gl) {{{*/ static gboolean -view_console_message_cb(WebKitWebView *web, char *message, int line, char *sourceid, GList *gl) { - return true; +view_console_message_cb(WebKitWebView *web, char *message, int line, char *sourceid, GList *gl) +{ + return true; }/*}}}*/ static gboolean new_window_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *action, - WebKitWebPolicyDecision *policy, GList *gl) { - const char *uri = webkit_network_request_get_uri(request); - dwb_change_mode(NORMAL_MODE, true); - dwb_new_window(uri); - gtk_widget_destroy(GTK_WIDGET(web)); - return true; + WebKitWebPolicyDecision *policy, GList *gl) +{ + const char *uri = webkit_network_request_get_uri(request); + dwb_change_mode(NORMAL_MODE, true); + dwb_new_window(uri); + gtk_widget_destroy(GTK_WIDGET(web)); + return true; } /* view_create_web_view_cb(WebKitWebView *, WebKitWebFrame *, GList *) {{{*/ static WebKitWebView * -view_create_web_view_cb(WebKitWebView *web, WebKitWebFrame *frame, GList *gl) { - if (dwb.misc.tabbed_browsing) { - GList *gl = view_add(NULL, dwb.state.background_tabs); - return WEBVIEW(gl); - } - else { - GtkWidget *wv = webkit_web_view_new(); - g_signal_connect(wv, "navigation-policy-decision-requested", G_CALLBACK(new_window_cb), gl); - return WEBKIT_WEB_VIEW(wv); - } +view_create_web_view_cb(WebKitWebView *web, WebKitWebFrame *frame, GList *gl) +{ + if (dwb.misc.tabbed_browsing) + { + GList *gl = view_add(NULL, dwb.state.background_tabs); + return WEBVIEW(gl); + } + else + { + GtkWidget *wv = webkit_web_view_new(); + g_signal_connect(wv, "navigation-policy-decision-requested", G_CALLBACK(new_window_cb), gl); + return WEBKIT_WEB_VIEW(wv); + } }/*}}}*/ /* view_download_requested_cb(WebKitWebView *, WebKitDownload *, GList *) {{{*/ static gboolean -view_download_requested_cb(WebKitWebView *web, WebKitDownload *download, GList *gl) { - if (EMIT_SCRIPT(DOWNLOAD)) { - char *json = util_create_json(2, - CHAR, "referer", soup_get_header_from_request(webkit_download_get_network_request(download), "Referer"), - CHAR, "mimeType", dwb.state.mimetype_request); - ScriptSignal signal = { SCRIPTS_WV(gl), .objects = { G_OBJECT(download) }, SCRIPTS_SIG_META(json, DOWNLOAD, 1) }; - SCRIPTS_EMIT_RETURN(signal, json, true); - } - download_get_path(gl, download); - return true; +view_download_requested_cb(WebKitWebView *web, WebKitDownload *download, GList *gl) +{ + if (EMIT_SCRIPT(DOWNLOAD)) + { + char *json = util_create_json(2, + CHAR, "referer", soup_get_header_from_request(webkit_download_get_network_request(download), "Referer"), + CHAR, "mimeType", dwb.state.mimetype_request); + ScriptSignal signal = { SCRIPTS_WV(gl), .objects = { G_OBJECT(download) }, SCRIPTS_SIG_META(json, DOWNLOAD, 1) }; + SCRIPTS_EMIT_RETURN(signal, json, true); + } + download_get_path(gl, download); + return true; }/*}}}*/ gboolean -view_delete_web_inspector(GtkWidget *widget, GdkEvent *event, WebKitWebInspector *inspector) { - webkit_web_inspector_close(inspector); - for (GList *gl = dwb.state.views; gl; gl=gl->next) { - if (VIEW(gl)->inspector_window == widget) { - VIEW(gl)->inspector_window = NULL; - break; +view_delete_web_inspector(GtkWidget *widget, GdkEvent *event, WebKitWebInspector *inspector) +{ + webkit_web_inspector_close(inspector); + for (GList *gl = dwb.state.views; gl; gl=gl->next) + { + if (VIEW(gl)->inspector_window == widget) + { + VIEW(gl)->inspector_window = NULL; + break; + } } - } - gtk_widget_destroy(widget); + gtk_widget_destroy(widget); - return true; + return true; } /* view_inspect_web_view_cb(WebKitWebInspector *, WebKitWebView *, GList * *){{{*/ static WebKitWebView * -view_inspect_web_view_cb(WebKitWebInspector *inspector, WebKitWebView *wv, GList *gl) { - GtkWidget *window; - if (dwb.gui.wid == 0) { - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - } - else - window = gtk_plug_new(dwb.gui.wid); - GtkWidget *webview = webkit_web_view_new(); - WebKitWebSettings *settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview)); - g_object_set(settings, "user-stylesheet-uri", GET_CHAR("user-stylesheet-uri"), NULL); - gtk_window_set_title(GTK_WINDOW(window), "dwb-web-inspector"); - - gtk_window_set_default_size(GTK_WINDOW(window), GET_INT("default-width"), GET_INT("default-height")); - gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, NULL, GDK_HINT_MIN_SIZE); - - gtk_container_add(GTK_CONTAINER(window), webview); - gtk_widget_show_all(window); - VIEW(gl)->inspector_window = window; - - g_signal_connect(window, "delete-event", G_CALLBACK(view_delete_web_inspector), inspector); - return WEBKIT_WEB_VIEW(webview); +view_inspect_web_view_cb(WebKitWebInspector *inspector, WebKitWebView *wv, GList *gl) +{ + GtkWidget *window; + if (dwb.gui.wid == 0) + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + else + window = gtk_plug_new(dwb.gui.wid); + + GtkWidget *webview = webkit_web_view_new(); + WebKitWebSettings *settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview)); + g_object_set(settings, "user-stylesheet-uri", GET_CHAR("user-stylesheet-uri"), NULL); + gtk_window_set_title(GTK_WINDOW(window), "dwb-web-inspector"); + + gtk_window_set_default_size(GTK_WINDOW(window), GET_INT("default-width"), GET_INT("default-height")); + gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, NULL, GDK_HINT_MIN_SIZE); + + gtk_container_add(GTK_CONTAINER(window), webview); + gtk_widget_show_all(window); + VIEW(gl)->inspector_window = window; + + g_signal_connect(window, "delete-event", G_CALLBACK(view_delete_web_inspector), inspector); + return WEBKIT_WEB_VIEW(webview); }/*}}}*/ /* view_hovering_over_link_cb(WebKitWebView *, char *title, char *uri, GList *) {{{*/ static void -view_hovering_over_link_cb(WebKitWebView *web, char *title, char *uri, GList *gl) { - if (EMIT_SCRIPT(HOVERING_OVER_LINK)) { - char *json = util_create_json(2, CHAR, "uri", uri, CHAR, "title", title); - ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(json, HOVERING_OVER_LINK, 0) }; - scripts_emit(&signal); - g_free(json); - } - if (uri) { - VIEW(gl)->status->hover_uri = g_strdup(uri); - dwb_set_status_bar_text(dwb.gui.urilabel, uri, &dwb.color.active_fg, NULL, false); - if (! (dwb.state.bar_visible & BAR_VIS_STATUS)) { - WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); - WebKitDOMElement *docelement = webkit_dom_document_get_document_element(doc); - webkit_dom_node_append_child(WEBKIT_DOM_NODE(docelement), WEBKIT_DOM_NODE(VIEW(gl)->hover.element), NULL); - webkit_dom_html_anchor_element_set_href(WEBKIT_DOM_HTML_ANCHOR_ELEMENT(VIEW(gl)->hover.anchor), uri); - webkit_dom_html_element_set_inner_text(WEBKIT_DOM_HTML_ELEMENT(VIEW(gl)->hover.anchor), uri, NULL); +view_hovering_over_link_cb(WebKitWebView *web, char *title, char *uri, GList *gl) +{ + if (EMIT_SCRIPT(HOVERING_OVER_LINK)) + { + char *json = util_create_json(2, CHAR, "uri", uri, CHAR, "title", title); + ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(json, HOVERING_OVER_LINK, 0) }; + scripts_emit(&signal); + g_free(json); + } + if (uri) + { + VIEW(gl)->status->hover_uri = g_strdup(uri); + dwb_set_status_bar_text(dwb.gui.urilabel, uri, &dwb.color.active_fg, NULL, false); + if (! (dwb.state.bar_visible & BAR_VIS_STATUS)) + { + WebKitDOMDocument *doc = webkit_web_view_get_dom_document(web); + WebKitDOMElement *docelement = webkit_dom_document_get_document_element(doc); + webkit_dom_node_append_child(WEBKIT_DOM_NODE(docelement), WEBKIT_DOM_NODE(VIEW(gl)->hover.element), NULL); + webkit_dom_html_anchor_element_set_href(WEBKIT_DOM_HTML_ANCHOR_ELEMENT(VIEW(gl)->hover.anchor), uri); + webkit_dom_html_element_set_inner_text(WEBKIT_DOM_HTML_ELEMENT(VIEW(gl)->hover.anchor), uri, NULL); + } + } + else + { + g_free(VIEW(gl)->status->hover_uri); + VIEW(gl)->status->hover_uri = NULL; + dwb_update_uri(gl); + if (! (dwb.state.bar_visible & BAR_VIS_STATUS)) + dwb_dom_remove_from_parent(WEBKIT_DOM_NODE(VIEW(gl)->hover.element), NULL); } - } - else { - g_free(VIEW(gl)->status->hover_uri); - VIEW(gl)->status->hover_uri = NULL; - dwb_update_uri(gl); - if (! (dwb.state.bar_visible & BAR_VIS_STATUS)) - dwb_dom_remove_from_parent(WEBKIT_DOM_NODE(VIEW(gl)->hover.element), NULL); - } }/*}}}*/ /* view_mime_type_policy_cb {{{*/ static gboolean -view_mime_type_policy_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetworkRequest *request, char *mimetype, WebKitWebPolicyDecision *policy, GList *gl) { - /* Prevents from segfault if proxy is set */ - if ( !mimetype || strlen(mimetype) == 0 ) - return false; - - if (EMIT_SCRIPT(MIME_TYPE)) { - char *json = util_create_json(1, CHAR, "mimeType", mimetype); - ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame), G_OBJECT(request) }, SCRIPTS_SIG_META(json, MIME_TYPE, 2) }; - if (scripts_emit(&signal)) { - webkit_web_policy_decision_ignore(policy); - g_free(json); - return true; +view_mime_type_policy_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetworkRequest *request, char *mimetype, WebKitWebPolicyDecision *policy, GList *gl) +{ + /* Prevents from segfault if proxy is set */ + if ( !mimetype || strlen(mimetype) == 0 ) + return false; + + if (EMIT_SCRIPT(MIME_TYPE)) + { + char *json = util_create_json(1, CHAR, "mimeType", mimetype); + ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame), G_OBJECT(request) }, SCRIPTS_SIG_META(json, MIME_TYPE, 2) }; + if (scripts_emit(&signal)) + { + webkit_web_policy_decision_ignore(policy); + g_free(json); + return true; + } + g_free(json); } - g_free(json); - } - if (!webkit_web_view_can_show_mime_type(web, mimetype) || dwb.state.nv & OPEN_DOWNLOAD) { - dwb.state.mimetype_request = g_strdup(mimetype); - webkit_web_policy_decision_download(policy); - return true; - } - return false; + if (!webkit_web_view_can_show_mime_type(web, mimetype) || dwb.state.nv & OPEN_DOWNLOAD) + { + dwb.state.mimetype_request = g_strdup(mimetype); + webkit_web_policy_decision_download(policy); + return true; + } + return false; }/*}}}*/ @@ -407,221 +458,250 @@ view_mime_type_policy_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetwor /* view_navigation_policy_cb {{{*/ static gboolean view_navigation_policy_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *action, - WebKitWebPolicyDecision *policy, GList *gl) { - - char *uri = (char *) webkit_network_request_get_uri(request); - gboolean ret = false; - WebKitWebNavigationReason reason = webkit_web_navigation_action_get_reason(action); - - if (EMIT_SCRIPT(NAVIGATION)) { - ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame), G_OBJECT(request), G_OBJECT(action) }, SCRIPTS_SIG_META(NULL, NAVIGATION, 3) }; - if (scripts_emit(&signal)) { - webkit_web_policy_decision_ignore(policy); - return true; - } - } - - if (!g_str_has_prefix(uri, "http:") && !g_str_has_prefix(uri, "https:") && - !g_str_has_prefix(uri, "about:") && !g_str_has_prefix(uri, "dwb:") && - !g_str_has_prefix(uri, "file:")) { - if (dwb_scheme_handler(gl, request) == STATUS_OK) { - webkit_web_policy_decision_ignore(policy); - return true; - } - } - - /* Check if tab is locked */ - if (LP_LOCKED_URI(VIEW(gl))) { - const char *initial_uri = webkit_web_view_get_uri(web); - if (g_strcmp0(uri, initial_uri)) { - dwb_set_error_message(dwb.state.fview, "Locked to domain %s, request aborted.", initial_uri); - webkit_web_policy_decision_ignore(policy); - return true; + WebKitWebPolicyDecision *policy, GList *gl) +{ + + char *uri = (char *) webkit_network_request_get_uri(request); + gboolean ret = false; + WebKitWebNavigationReason reason = webkit_web_navigation_action_get_reason(action); + + if (EMIT_SCRIPT(NAVIGATION)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), { G_OBJECT(frame), G_OBJECT(request), G_OBJECT(action) }, SCRIPTS_SIG_META(NULL, NAVIGATION, 3) }; + if (scripts_emit(&signal)) + { + webkit_web_policy_decision_ignore(policy); + return true; + } } - } - else if (LP_LOCKED_DOMAIN(VIEW(gl))) { - const char *host, *initial_host; - WebKitWebFrame *mainframe = webkit_web_view_get_main_frame(web); - WebKitWebDataSource *datasource = webkit_web_frame_get_data_source(mainframe); - WebKitNetworkRequest *initial_request = webkit_web_data_source_get_request(datasource); + if (!g_str_has_prefix(uri, "http:") && !g_str_has_prefix(uri, "https:") && + !g_str_has_prefix(uri, "about:") && !g_str_has_prefix(uri, "dwb:") && + !g_str_has_prefix(uri, "file:")) + { + if (dwb_scheme_handler(gl, request) == STATUS_OK) + { + webkit_web_policy_decision_ignore(policy); + return true; + } + } - initial_host = dwb_soup_get_host_from_request(initial_request); - host = dwb_soup_get_host_from_request(request); + /* Check if tab is locked */ + if (LP_LOCKED_URI(VIEW(gl))) + { + const char *initial_uri = webkit_web_view_get_uri(web); + if (g_strcmp0(uri, initial_uri)) + { + dwb_set_error_message(dwb.state.fview, "Locked to domain %s, request aborted.", initial_uri); + webkit_web_policy_decision_ignore(policy); + return true; + } - if (g_strcmp0(initial_host, host)) { - dwb_set_error_message(dwb.state.fview, "Locked to domain %s, request aborted.", initial_host); - webkit_web_policy_decision_ignore(policy); - return true; } - } - if (g_str_has_prefix(uri, "dwb:")) { - if (!html_load(gl, uri)) { - fprintf(stderr, "Error loadings %s, maybe some files are missing.\n", uri); + else if (LP_LOCKED_DOMAIN(VIEW(gl))) + { + const char *host, *initial_host; + WebKitWebFrame *mainframe = webkit_web_view_get_main_frame(web); + WebKitWebDataSource *datasource = webkit_web_frame_get_data_source(mainframe); + WebKitNetworkRequest *initial_request = webkit_web_data_source_get_request(datasource); + + initial_host = dwb_soup_get_host_from_request(initial_request); + host = dwb_soup_get_host_from_request(request); + + if (g_strcmp0(initial_host, host)) + { + dwb_set_error_message(dwb.state.fview, "Locked to domain %s, request aborted.", initial_host); + webkit_web_policy_decision_ignore(policy); + return true; + } } - webkit_web_policy_decision_ignore(policy); - return true; - } - if (webkit_web_navigation_action_get_button(action) == 2) { - gboolean background = dwb.state.nv & OPEN_BACKGROUND; - dwb.state.nv = OPEN_NORMAL; - webkit_web_policy_decision_ignore(policy); - view_add(uri, background); - return true; - } - /* In single mode (without tabs), this seems to be the only way of creating a - * new window - */ - if (dwb.state.nv & OPEN_NEW_WINDOW) { - if ((dwb.state.nv & OPEN_VIA_HINTS) || (dwb.state.nv & OPEN_EXPLICIT && reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED)) { - dwb_change_mode(NORMAL_MODE, true); - dwb_new_window(uri); - webkit_web_policy_decision_ignore(policy); - return true; + if (g_str_has_prefix(uri, "dwb:")) + { + if (!html_load(gl, uri)) + fprintf(stderr, "Error loadings %s, maybe some files are missing.\n", uri); + + webkit_web_policy_decision_ignore(policy); + return true; } - } - GError *error = NULL; - - switch (reason) { - /* special handler for filesystem browsing */ - case WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED: - case WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD: - case WEBKIT_WEB_NAVIGATION_REASON_RELOAD: - if (local_check_directory(gl, uri, reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED, &error)) { - if (error != NULL) { - dwb_set_error_message(gl, error->message); - g_clear_error(&error); - } - webkit_web_policy_decision_ignore(policy); - return true; - } - dwb_soup_clean(); - case WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED: - if (dwb.state.mode == SEARCH_FIELD_MODE) { - webkit_web_policy_decision_ignore(policy); - char *hint_search_submit = GET_CHAR("searchengine-submit-pattern"); - if (hint_search_submit == NULL) { - hint_search_submit = HINT_SEARCH_SUBMIT; - } - char *tmp_uri = g_uri_unescape_string(uri, NULL); - char *search_engine = dwb.state.form_name && !g_strrstr(tmp_uri, hint_search_submit) - ? g_strdup_printf("%s?%s=%s", tmp_uri, dwb.state.form_name, hint_search_submit) - : g_strdup(tmp_uri); - dwb_save_searchengine(search_engine); - webkit_web_policy_decision_ignore(policy); - return true; + if (webkit_web_navigation_action_get_button(action) == 2) + { + gboolean background = dwb.state.nv & OPEN_BACKGROUND; + dwb.state.nv = OPEN_NORMAL; + webkit_web_policy_decision_ignore(policy); + view_add(uri, background); + return true; + } + /* In single mode (without tabs), this seems to be the only way of creating a + * new window + */ + if (dwb.state.nv & OPEN_NEW_WINDOW) + { + if ((dwb.state.nv & OPEN_VIA_HINTS) || (dwb.state.nv & OPEN_EXPLICIT && reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED)) + { + dwb_change_mode(NORMAL_MODE, true); + dwb_new_window(uri); + webkit_web_policy_decision_ignore(policy); + return true; } - default: break; + } + GError *error = NULL; + + switch (reason) + { + /* special handler for filesystem browsing */ + case WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED: + case WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD: + case WEBKIT_WEB_NAVIGATION_REASON_RELOAD: + if (local_check_directory(gl, uri, reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED, &error)) + { + if (error != NULL) + { + dwb_set_error_message(gl, error->message); + g_clear_error(&error); + } + webkit_web_policy_decision_ignore(policy); + return true; + } + dwb_soup_clean(); + case WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED: + if (dwb.state.mode == SEARCH_FIELD_MODE) + { + webkit_web_policy_decision_ignore(policy); + char *hint_search_submit = GET_CHAR("searchengine-submit-pattern"); + if (hint_search_submit == NULL) + hint_search_submit = HINT_SEARCH_SUBMIT; + + char *tmp_uri = g_uri_unescape_string(uri, NULL); + char *search_engine = dwb.state.form_name && !g_strrstr(tmp_uri, hint_search_submit) + ? g_strdup_printf("%s?%s=%s", tmp_uri, dwb.state.form_name, hint_search_submit) + : g_strdup(tmp_uri); + dwb_save_searchengine(search_engine); + webkit_web_policy_decision_ignore(policy); + return true; + } + default: break; - } - return ret; + } + return ret; }/*}}}*/ /* view_new_window_policy_cb {{{*/ static gboolean view_new_window_policy_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *action, - WebKitWebPolicyDecision *decision, GList *gl) { + WebKitWebPolicyDecision *decision, GList *gl) +{ return false; }/*}}}*/ /* view_create_plugin_widget_cb {{{*/ static GtkWidget * -view_create_plugin_widget_cb(WebKitWebView *web, char *mime_type, char *uri, GHashTable *param, GList *gl) { - VIEW(gl)->plugins->status |= PLUGIN_STATUS_HAS_PLUGIN; +view_create_plugin_widget_cb(WebKitWebView *web, char *mime_type, char *uri, GHashTable *param, GList *gl) +{ + VIEW(gl)->plugins->status |= PLUGIN_STATUS_HAS_PLUGIN; #if 0 - GHashTableIter iter; - g_hash_table_iter_init(&iter, param); - char *key, *value; - while(g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer*)&value)) { - printf("%s %s\n", key, value); - } + GHashTableIter iter; + g_hash_table_iter_init(&iter, param); + char *key, *value; + while(g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer*)&value)) { + printf("%s %s\n", key, value); + } #endif - return NULL; + return NULL; }/*}}}*/ /* view_scroll_cb(GtkWidget *w, GdkEventScroll * GList *) {{{*/ static gboolean -view_scroll_cb(GtkWidget *w, GdkEventScroll *e, GList *gl) { - dwb_update_status_text(gl, NULL); - if (GET_BOOL("enable-frame-flattening")) { - Arg a = { .n = e->direction }; - commands_scroll(NULL, &a); - return true; - } - return false; +view_scroll_cb(GtkWidget *w, GdkEventScroll *e, GList *gl) +{ + dwb_update_status_text(gl, NULL); + if (GET_BOOL("enable-frame-flattening")) + { + Arg a = { .n = e->direction }; + commands_scroll(NULL, &a); + return true; + } + return false; }/*}}}*/ /* view_value_changed_cb(GtkAdjustment *a, GList *gl) {{{ */ static gboolean -view_value_changed_cb(GtkAdjustment *a, GList *gl) { - dwb_update_status_text(gl, a); - return false; +view_value_changed_cb(GtkAdjustment *a, GList *gl) +{ + dwb_update_status_text(gl, a); + return false; }/* }}} */ /* view_icon_loaded(GtkAdjustment *a, GList *gl) {{{ */ void -view_icon_loaded(WebKitWebView *web, char *icon_uri, GList *gl) { - view_set_favicon(gl, true); +view_icon_loaded(WebKitWebView *web, char *icon_uri, GList *gl) +{ + view_set_favicon(gl, true); }/* }}} */ /* view_title_cb {{{*/ static void -view_title_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) { - dwb_update_status(gl, NULL); +view_title_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) +{ + dwb_update_status(gl, NULL); }/*}}}*/ /* view_title_cb {{{*/ static void -view_uri_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) { - dwb_update_uri(gl); +view_uri_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) +{ + dwb_update_uri(gl); }/*}}}*/ /* view_progress_cb {{{*/ static void -view_progress_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) { - View *v = gl->data; - v->status->progress = webkit_web_view_get_progress(web) * 100; - if (v->status->progress == 100) { - v->status->progress = 0; - } - dwb_update_status(gl, NULL); +view_progress_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) +{ + View *v = gl->data; + v->status->progress = webkit_web_view_get_progress(web) * 100; + if (v->status->progress == 100) + v->status->progress = 0; + + dwb_update_status(gl, NULL); }/*}}}*/ /* view_popup_activate_cb {{{*/ static void -view_popup_activate_cb(GtkMenuItem *menu, GList *gl) { - GtkAction *a = NULL; - const char *name; - /* - * context-menu-action-2000 open link - * context-menu-action-1 open link in window - * context-menu-action-2 download linked file - * context-menu-action-3 copy link location - * context-menu-action-13 reload - * context-menu-action-10 back - * context-menu-action-11 forward - * context-menu-action-12 stop - * - * */ - - a = gtk_activatable_get_related_action(GTK_ACTIVATABLE(menu)); - if (a == NULL) - return; - name = gtk_action_get_name(a); - if (!g_strcmp0(name, "context-menu-action-3")) { /* copy link location */ - GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); - gtk_clipboard_set_text(clipboard, VIEW(gl)->status->hover_uri, -1); - } +view_popup_activate_cb(GtkMenuItem *menu, GList *gl) +{ + GtkAction *a = NULL; + const char *name; + /* + * context-menu-action-2000 open link + * context-menu-action-1 open link in window + * context-menu-action-2 download linked file + * context-menu-action-3 copy link location + * context-menu-action-13 reload + * context-menu-action-10 back + * context-menu-action-11 forward + * context-menu-action-12 stop + * + * */ + + a = gtk_activatable_get_related_action(GTK_ACTIVATABLE(menu)); + if (a == NULL) + return; + name = gtk_action_get_name(a); + if (!g_strcmp0(name, "context-menu-action-3")) /* copy link location */ + { + GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); + gtk_clipboard_set_text(clipboard, VIEW(gl)->status->hover_uri, -1); + } }/*}}}*/ /* view_populate_popup_cb {{{*/ static void -view_populate_popup_cb(WebKitWebView *web, GtkMenu *menu, GList *gl) { +view_populate_popup_cb(WebKitWebView *web, GtkMenu *menu, GList *gl) +{ GList *items = gtk_container_get_children(GTK_CONTAINER(menu)); - for (GList *l = items; l; l=l->next) { + for (GList *l = items; l; l=l->next) g_signal_connect(l->data, "activate", G_CALLBACK(view_popup_activate_cb), gl); - } + g_list_free(items); }/*}}}*/ @@ -630,151 +710,166 @@ view_populate_popup_cb(WebKitWebView *web, GtkMenu *menu, GList *gl) { * commited, so we don't connect to window-object-cleared but to * load_status_after instead */ static void -view_load_status_after_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) { - WebKitLoadStatus status = webkit_web_view_get_load_status(web); - if (status == WEBKIT_LOAD_COMMITTED) { - dwb_execute_script(webkit_web_view_get_main_frame(web), dwb.misc.scripts, false); - if (VIEW(gl)->js_base != NULL) { - JSValueUnprotect(JS_CONTEXT_REF(gl), VIEW(gl)->js_base); - VIEW(gl)->js_base = NULL; +view_load_status_after_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) +{ + WebKitLoadStatus status = webkit_web_view_get_load_status(web); + if (status == WEBKIT_LOAD_COMMITTED) + { + dwb_execute_script(webkit_web_view_get_main_frame(web), dwb.misc.scripts, false); + if (VIEW(gl)->js_base != NULL) + { + JSValueUnprotect(JS_CONTEXT_REF(gl), VIEW(gl)->js_base); + VIEW(gl)->js_base = NULL; + } + VIEW(gl)->js_base = js_create_object(webkit_web_view_get_main_frame(web), dwb.misc.hints); + js_call_as_function(webkit_web_view_get_main_frame(web), VIEW(gl)->js_base, "init", dwb.misc.hint_style, kJSTypeObject, NULL); } - VIEW(gl)->js_base = js_create_object(webkit_web_view_get_main_frame(web), dwb.misc.hints); - js_call_as_function(webkit_web_view_get_main_frame(web), VIEW(gl)->js_base, "init", dwb.misc.hint_style, kJSTypeObject, NULL); - } }/*}}}*/ /* view_load_status_cb {{{*/ static void -view_load_status_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) { - WebKitLoadStatus status = webkit_web_view_get_load_status(web); - View *v = VIEW(gl); - char *host = NULL; - const char *uri = webkit_web_view_get_uri(web); - - - switch (status) { - case WEBKIT_LOAD_PROVISIONAL: - dwb_clean_load_begin(gl); - g_slist_free(v->status->frames); - v->status->frames = NULL; - v->status->frames = g_slist_prepend(v->status->frames, webkit_web_view_get_main_frame(WEBVIEW(gl))); - break; - case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT: - /* This is more or less a dummy call, to compile the script and speed up - * execution time - * */ - js_call_as_function(webkit_web_view_get_main_frame(web), v->js_base, "createStyleSheet", NULL, kJSTypeUndefined, NULL); - break; - case WEBKIT_LOAD_COMMITTED: - if (v->status->scripts & SCRIPTS_ALLOWED_TEMPORARY) { - g_object_set(webkit_web_view_get_settings(web), "enable-scripts", false, NULL); - v->status->scripts &= ~SCRIPTS_ALLOWED_TEMPORARY; - } - if (v->plugins->status & PLUGIN_STATUS_ENABLED) - plugins_connect(gl); - if (VIEW(gl)->status->scripts & SCRIPTS_BLOCKED - && (((host = dwb_get_host(web)) - && (g_list_find_custom(dwb.fc.pers_scripts, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.pers_scripts, uri, (GCompareFunc)g_strcmp0) - || g_list_find_custom(dwb.fc.tmp_scripts, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.tmp_scripts, uri, (GCompareFunc)g_strcmp0))) - || g_str_has_prefix(uri, "dwb:") || !g_strcmp0(uri, "Error"))) { - g_object_set(webkit_web_view_get_settings(web), "enable-scripts", true, NULL); - v->status->scripts |= SCRIPTS_ALLOWED_TEMPORARY; - } - if (v->plugins->status & PLUGIN_STATUS_ENABLED - && ( (host != NULL || (host = dwb_get_host(web))) - && (g_list_find_custom(dwb.fc.pers_plugins, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.pers_plugins, uri, (GCompareFunc)g_strcmp0) - || g_list_find_custom(dwb.fc.tmp_plugins, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.tmp_plugins, uri, (GCompareFunc)g_strcmp0) ) - )) { - plugins_disconnect(gl); - } - if (EMIT_SCRIPT(LOAD_COMMITTED)) { - ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_COMMITTED, 0) }; - scripts_emit(&signal); - } - view_ssl_state(gl); - g_free(host); - break; - case WEBKIT_LOAD_FINISHED: - dwb_update_status(gl, NULL); - /* TODO sqlite */ - if (!dwb.misc.private_browsing - && g_strcmp0(uri, "about:blank") - && !g_str_has_prefix(uri, "dwb:") - && (dwb_prepend_navigation(gl, &dwb.fc.history) == STATUS_OK) - && dwb.misc.sync_interval <= 0) { - util_file_add_navigation(dwb.files[FILES_HISTORY], dwb.fc.history->data, false, dwb.misc.history_length); - } - dwb_execute_script(webkit_web_view_get_main_frame(web), dwb.misc.scripts_onload, false); - if (dwb.state.auto_insert_mode) - dwb_check_auto_insert(gl); - if (EMIT_SCRIPT(LOAD_FINISHED)) { - ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_FINISHED, 0) }; +view_load_status_cb(WebKitWebView *web, GParamSpec *pspec, GList *gl) +{ + WebKitLoadStatus status = webkit_web_view_get_load_status(web); + View *v = VIEW(gl); + char *host = NULL; + const char *uri = webkit_web_view_get_uri(web); + + + switch (status) + { + case WEBKIT_LOAD_PROVISIONAL: + dwb_clean_load_begin(gl); + g_slist_free(v->status->frames); + v->status->frames = NULL; + v->status->frames = g_slist_prepend(v->status->frames, webkit_web_view_get_main_frame(WEBVIEW(gl))); + break; + case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT: + /* This is more or less a dummy call, to compile the script and speed up + * execution time + * */ + js_call_as_function(webkit_web_view_get_main_frame(web), v->js_base, "createStyleSheet", NULL, kJSTypeUndefined, NULL); + break; + case WEBKIT_LOAD_COMMITTED: + if (v->status->scripts & SCRIPTS_ALLOWED_TEMPORARY) + { + g_object_set(webkit_web_view_get_settings(web), "enable-scripts", false, NULL); + v->status->scripts &= ~SCRIPTS_ALLOWED_TEMPORARY; + } + if (v->plugins->status & PLUGIN_STATUS_ENABLED) + plugins_connect(gl); + if (VIEW(gl)->status->scripts & SCRIPTS_BLOCKED + && (((host = dwb_get_host(web)) + && (g_list_find_custom(dwb.fc.pers_scripts, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.pers_scripts, uri, (GCompareFunc)g_strcmp0) + || g_list_find_custom(dwb.fc.tmp_scripts, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.tmp_scripts, uri, (GCompareFunc)g_strcmp0))) + || g_str_has_prefix(uri, "dwb:") || !g_strcmp0(uri, "Error"))) + { + g_object_set(webkit_web_view_get_settings(web), "enable-scripts", true, NULL); + v->status->scripts |= SCRIPTS_ALLOWED_TEMPORARY; + } + if (v->plugins->status & PLUGIN_STATUS_ENABLED + && ( (host != NULL || (host = dwb_get_host(web))) + && (g_list_find_custom(dwb.fc.pers_plugins, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.pers_plugins, uri, (GCompareFunc)g_strcmp0) + || g_list_find_custom(dwb.fc.tmp_plugins, host, (GCompareFunc)g_strcmp0) || g_list_find_custom(dwb.fc.tmp_plugins, uri, (GCompareFunc)g_strcmp0) ) + )) + { + plugins_disconnect(gl); + } + if (EMIT_SCRIPT(LOAD_COMMITTED)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_COMMITTED, 0) }; + scripts_emit(&signal); + } + view_ssl_state(gl); + g_free(host); + break; + case WEBKIT_LOAD_FINISHED: + dwb_update_status(gl, NULL); + /* TODO sqlite */ + if (!dwb.misc.private_browsing + && g_strcmp0(uri, "about:blank") + && !g_str_has_prefix(uri, "dwb:") + && (dwb_prepend_navigation(gl, &dwb.fc.history) == STATUS_OK) + && dwb.misc.sync_interval <= 0) + { + util_file_add_navigation(dwb.files[FILES_HISTORY], dwb.fc.history->data, false, dwb.misc.history_length); + } + dwb_execute_script(webkit_web_view_get_main_frame(web), dwb.misc.scripts_onload, false); + if (dwb.state.auto_insert_mode) + dwb_check_auto_insert(gl); + + if (EMIT_SCRIPT(LOAD_FINISHED)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_FINISHED, 0) }; + scripts_emit(&signal); + } + break; + case WEBKIT_LOAD_FAILED: + break; + default: + break; + } + if (EMIT_SCRIPT(LOAD_STATUS)) + { + ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_STATUS, 0) }; scripts_emit(&signal); - } - break; - case WEBKIT_LOAD_FAILED: - break; - default: - break; - } - if (EMIT_SCRIPT(LOAD_STATUS)) { - ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(NULL, LOAD_STATUS, 0) }; - scripts_emit(&signal); - } + } }/*}}}*/ /* view_load_error_cb {{{*/ static gboolean -view_load_error_cb(WebKitWebView *web, WebKitWebFrame *frame, char *uri, GError *weberror, GList *gl) { - if (weberror->code == WEBKIT_NETWORK_ERROR_CANCELLED - || weberror->code == WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD - || weberror->code == WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE) - return false; +view_load_error_cb(WebKitWebView *web, WebKitWebFrame *frame, char *uri, GError *weberror, GList *gl) +{ + if (weberror->code == WEBKIT_NETWORK_ERROR_CANCELLED + || weberror->code == WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD + || weberror->code == WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE) + return false; + + char *errorfile = util_get_data_file(ERROR_FILE, "lib"); + if (errorfile == NULL) + return false; + + char *site, *search; + char *content = util_get_file_content(errorfile, NULL); + char *tmp = g_strdup(uri); + char *res = tmp; + if ( (tmp = strstr(tmp, "://")) != NULL) + tmp += 3; + else + tmp = res; - char *errorfile = util_get_data_file(ERROR_FILE, "lib"); - if (errorfile == NULL) - return false; + if (g_str_has_suffix(tmp, "/")) + tmp[strlen(tmp)-1] = '\0'; - char *site, *search; - char *content = util_get_file_content(errorfile, NULL); - char *tmp = g_strdup(uri); - char *res = tmp; - if ( (tmp = strstr(tmp, "://")) != NULL) - tmp += 3; - else - tmp = res; - - if (g_str_has_suffix(tmp, "/")) - tmp[strlen(tmp)-1] = '\0'; - - char *icon = dwb_get_stock_item_base64_encoded(GTK_STOCK_DIALOG_ERROR); - if ((search = dwb_get_searchengine(tmp)) != NULL) - site = g_strdup_printf(content, icon != NULL ? icon : "", uri, weberror->message, "visible", search); - else - site = g_strdup_printf(content, icon != NULL ? icon : "", uri, weberror->message, "hidden", ""); - - webkit_web_frame_load_alternate_string(frame, site, uri, uri); - - g_free(site); - g_free(content); - g_free(res); - g_free(icon); - g_free(search); - return true; + char *icon = dwb_get_stock_item_base64_encoded(GTK_STOCK_DIALOG_ERROR); + if ((search = dwb_get_searchengine(tmp)) != NULL) + site = g_strdup_printf(content, icon != NULL ? icon : "", uri, weberror->message, "visible", search); + else + site = g_strdup_printf(content, icon != NULL ? icon : "", uri, weberror->message, "hidden", ""); + + webkit_web_frame_load_alternate_string(frame, site, uri, uri); + + g_free(site); + g_free(content); + g_free(res); + g_free(icon); + g_free(search); + return true; }/*}}}*/ static gboolean -view_motion_notify_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) { - if (EMIT_SCRIPT(MOUSE_MOVE)) { - char *json = util_create_json(7, - UINTEGER, "time", e->time, - DOUBLE, "x", e->x, DOUBLE, "y", e->y, - UINTEGER, "state", e->state, UINTEGER, "button", e->button, - DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); - ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(json, MOUSE_MOVE, 0) }; - SCRIPTS_EMIT_RETURN(signal, json, true); - } - return false; +view_motion_notify_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) +{ + if (EMIT_SCRIPT(MOUSE_MOVE)) { + char *json = util_create_json(7, + UINTEGER, "time", e->time, + DOUBLE, "x", e->x, DOUBLE, "y", e->y, + UINTEGER, "state", e->state, UINTEGER, "button", e->button, + DOUBLE, "xRoot", e->x_root, DOUBLE, "yRoot", e->y_root); + ScriptSignal signal = { SCRIPTS_WV(gl), SCRIPTS_SIG_META(json, MOUSE_MOVE, 0) }; + SCRIPTS_EMIT_RETURN(signal, json, true); + } + return false; } /* Entry */ @@ -784,473 +879,517 @@ view_motion_notify_cb(WebKitWebView *web, GdkEventButton *e, GList *gl) { /* view_tab_button_press_cb(GtkWidget, GdkEventButton* , GList * ){{{*/ static gboolean -view_tab_button_press_cb(GtkWidget *tabevent, GdkEventButton *e, GList *gl) { - if (e->button == 1 && e->type == GDK_BUTTON_PRESS) { - dwb_focus_view(gl); - return true; - } - else if (e->button == 3 && e->type == GDK_BUTTON_PRESS) { - view_remove(gl); - return true; - } - return false; +view_tab_button_press_cb(GtkWidget *tabevent, GdkEventButton *e, GList *gl) +{ + if (e->button == 1 && e->type == GDK_BUTTON_PRESS) + { + dwb_focus_view(gl); + return true; + } + else if (e->button == 3 && e->type == GDK_BUTTON_PRESS) + { + view_remove(gl); + return true; + } + return false; }/*}}}*/ /* DWB_WEB_VIEW {{{*/ void -view_set_favicon(GList *gl, gboolean web) { - GdkPixbuf *pb = NULL, *old; - GdkPixbuf *new = NULL; - if ( (old = gtk_image_get_pixbuf(GTK_IMAGE(VIEW(gl)->tabicon))) ) { - g_object_unref(old); - } - if (web) { - pb = webkit_web_view_get_icon_pixbuf(WEBVIEW(gl)); - if (pb) { - new = gdk_pixbuf_scale_simple(pb, dwb.misc.bar_height, dwb.misc.bar_height, GDK_INTERP_BILINEAR); - g_object_unref(pb); +view_set_favicon(GList *gl, gboolean web) +{ + GdkPixbuf *pb = NULL, *old; + GdkPixbuf *new = NULL; + if ( (old = gtk_image_get_pixbuf(GTK_IMAGE(VIEW(gl)->tabicon))) ) + g_object_unref(old); + + if (web) + { + pb = webkit_web_view_get_icon_pixbuf(WEBVIEW(gl)); + if (pb) + { + new = gdk_pixbuf_scale_simple(pb, dwb.misc.bar_height, dwb.misc.bar_height, GDK_INTERP_BILINEAR); + g_object_unref(pb); + } } - } - gtk_image_set_from_pixbuf(GTK_IMAGE(VIEW(gl)->tabicon), new); + gtk_image_set_from_pixbuf(GTK_IMAGE(VIEW(gl)->tabicon), new); } /* view_modify_style(GList *gl, GdkColor *fg, GdkColor *bg, GdkColor *tabfg, GdkColor *tabbg, PangoFontDescription *fd, int fontsize) {{{*/ void -view_modify_style(GList *gl, DwbColor *tabfg, DwbColor *tabbg, PangoFontDescription *fd) { - View *v = VIEW(gl); - DWB_WIDGET_OVERRIDE_BACKGROUND(v->tabevent, GTK_STATE_NORMAL, tabbg); - DWB_WIDGET_OVERRIDE_COLOR(v->tablabel, GTK_STATE_NORMAL, tabfg); - DWB_WIDGET_OVERRIDE_FONT(v->tablabel, fd); +view_modify_style(GList *gl, DwbColor *tabfg, DwbColor *tabbg, PangoFontDescription *fd) +{ + View *v = VIEW(gl); + DWB_WIDGET_OVERRIDE_BACKGROUND(v->tabevent, GTK_STATE_NORMAL, tabbg); + DWB_WIDGET_OVERRIDE_COLOR(v->tablabel, GTK_STATE_NORMAL, tabfg); + DWB_WIDGET_OVERRIDE_FONT(v->tablabel, fd); } /*}}}*/ /* view_set_active_style (GList *) {{{*/ void -view_set_active_style(GList *gl) { - view_modify_style(gl, &dwb.color.tab_active_fg, &dwb.color.tab_active_bg, dwb.font.fd_active); +view_set_active_style(GList *gl) +{ + view_modify_style(gl, &dwb.color.tab_active_fg, &dwb.color.tab_active_bg, dwb.font.fd_active); }/*}}}*/ /* view_set_normal_style {{{*/ void -view_set_normal_style(GList *gl) { - if (g_list_position(dwb.state.views, gl) % 2 == 0) - view_modify_style(gl, &dwb.color.tab_normal_fg1, &dwb.color.tab_normal_bg1, dwb.font.fd_inactive); - else - view_modify_style(gl, &dwb.color.tab_normal_fg2, &dwb.color.tab_normal_bg2, dwb.font.fd_inactive); +view_set_normal_style(GList *gl) +{ + if (g_list_position(dwb.state.views, gl) % 2 == 0) + view_modify_style(gl, &dwb.color.tab_normal_fg1, &dwb.color.tab_normal_bg1, dwb.font.fd_inactive); + else + view_modify_style(gl, &dwb.color.tab_normal_fg2, &dwb.color.tab_normal_bg2, dwb.font.fd_inactive); }/*}}}*/ /* view_init_settings {{{*/ static void -view_init_settings(GList *gl) { - View *v = gl->data; - v->settings = webkit_web_settings_copy(dwb.state.web_settings); - webkit_web_view_set_settings(WEBKIT_WEB_VIEW(v->web), v->settings); - GList *l; - for (l = g_hash_table_get_values(dwb.settings); l; l=l->next) { - WebSettings *s = l->data; - if (s->apply & SETTING_PER_VIEW && s->func != NULL) { - s->func(gl, s); +view_init_settings(GList *gl) +{ + View *v = gl->data; + v->settings = webkit_web_settings_copy(dwb.state.web_settings); + webkit_web_view_set_settings(WEBKIT_WEB_VIEW(v->web), v->settings); + GList *l; + for (l = g_hash_table_get_values(dwb.settings); l; l=l->next) + { + WebSettings *s = l->data; + if (s->apply & SETTING_PER_VIEW && s->func != NULL) + s->func(gl, s); } - } - if (l != NULL) - g_list_free(l); + if (l != NULL) + g_list_free(l); }/*}}}*/ /* view_init_signals(View *v) {{{*/ static void -view_init_signals(GList *gl) { - View *v = gl->data; - GtkAdjustment *a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(v->scroll)); - v->status->signals[SIG_BUTTON_PRESS] = g_signal_connect(v->web, "button-press-event", G_CALLBACK(view_button_press_cb), gl); - v->status->signals[SIG_BUTTON_RELEASE] = g_signal_connect(v->web, "button-release-event", G_CALLBACK(view_button_release_cb), gl); - v->status->signals[SIG_CLOSE_WEB_VIEW] = g_signal_connect(v->web, "close-web-view", G_CALLBACK(view_close_web_view_cb), gl); - v->status->signals[SIG_CONSOLE_MESSAGE] = g_signal_connect(v->web, "console-message", G_CALLBACK(view_console_message_cb), gl); - v->status->signals[SIG_CREATE_WEB_VIEW] = g_signal_connect(v->web, "create-web-view", G_CALLBACK(view_create_web_view_cb), gl); - v->status->signals[SIG_DOWNLOAD_REQUESTED] = g_signal_connect(v->web, "download-requested", G_CALLBACK(view_download_requested_cb), gl); - v->status->signals[SIG_HOVERING_OVER_LINK] = g_signal_connect(v->web, "hovering-over-link", G_CALLBACK(view_hovering_over_link_cb), gl); - v->status->signals[SIG_MIME_TYPE] = g_signal_connect(v->web, "mime-type-policy-decision-requested", G_CALLBACK(view_mime_type_policy_cb), gl); - v->status->signals[SIG_NAVIGATION] = g_signal_connect(v->web, "navigation-policy-decision-requested", G_CALLBACK(view_navigation_policy_cb), gl); - v->status->signals[SIG_NEW_WINDOW] = g_signal_connect(v->web, "new-window-policy-decision-requested", G_CALLBACK(view_new_window_policy_cb), gl); - v->status->signals[SIG_RESOURCE_REQUEST] = g_signal_connect(v->web, "resource-request-starting", G_CALLBACK(view_resource_request_cb), gl); +view_init_signals(GList *gl) +{ + View *v = gl->data; + GtkAdjustment *a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(v->scroll)); + v->status->signals[SIG_BUTTON_PRESS] = g_signal_connect(v->web, "button-press-event", G_CALLBACK(view_button_press_cb), gl); + v->status->signals[SIG_BUTTON_RELEASE] = g_signal_connect(v->web, "button-release-event", G_CALLBACK(view_button_release_cb), gl); + v->status->signals[SIG_CLOSE_WEB_VIEW] = g_signal_connect(v->web, "close-web-view", G_CALLBACK(view_close_web_view_cb), gl); + v->status->signals[SIG_CONSOLE_MESSAGE] = g_signal_connect(v->web, "console-message", G_CALLBACK(view_console_message_cb), gl); + v->status->signals[SIG_CREATE_WEB_VIEW] = g_signal_connect(v->web, "create-web-view", G_CALLBACK(view_create_web_view_cb), gl); + v->status->signals[SIG_DOWNLOAD_REQUESTED] = g_signal_connect(v->web, "download-requested", G_CALLBACK(view_download_requested_cb), gl); + v->status->signals[SIG_HOVERING_OVER_LINK] = g_signal_connect(v->web, "hovering-over-link", G_CALLBACK(view_hovering_over_link_cb), gl); + v->status->signals[SIG_MIME_TYPE] = g_signal_connect(v->web, "mime-type-policy-decision-requested", G_CALLBACK(view_mime_type_policy_cb), gl); + v->status->signals[SIG_NAVIGATION] = g_signal_connect(v->web, "navigation-policy-decision-requested", G_CALLBACK(view_navigation_policy_cb), gl); + v->status->signals[SIG_NEW_WINDOW] = g_signal_connect(v->web, "new-window-policy-decision-requested", G_CALLBACK(view_new_window_policy_cb), gl); + v->status->signals[SIG_RESOURCE_REQUEST] = g_signal_connect(v->web, "resource-request-starting", G_CALLBACK(view_resource_request_cb), gl); #if WEBKIT_CHECK_VERSION(1, 8, 0) - v->status->signals[SIG_DOCUMENT_FINISHED] = g_signal_connect(v->web, "document-load-finished", G_CALLBACK(view_document_finished), gl); + v->status->signals[SIG_DOCUMENT_FINISHED] = g_signal_connect(v->web, "document-load-finished", G_CALLBACK(view_document_finished), gl); #endif - v->status->signals[SIG_CREATE_PLUGIN_WIDGET] = g_signal_connect(v->web, "create-plugin-widget", G_CALLBACK(view_create_plugin_widget_cb), gl); - v->status->signals[SIG_FRAME_CREATED] = g_signal_connect(v->web, "frame-created", G_CALLBACK(view_frame_created_cb), gl); - - v->status->signals[SIG_LOAD_STATUS] = g_signal_connect(v->web, "notify::load-status", G_CALLBACK(view_load_status_cb), gl); - v->status->signals[SIG_LOAD_ERROR] = g_signal_connect(v->web, "load-error", G_CALLBACK(view_load_error_cb), gl); - v->status->signals[SIG_LOAD_STATUS_AFTER] = g_signal_connect_after(v->web, "notify::load-status", G_CALLBACK(view_load_status_after_cb), gl); - v->status->signals[SIG_POPULATE_POPUP] = g_signal_connect(v->web, "populate-popup", G_CALLBACK(view_populate_popup_cb), gl); - v->status->signals[SIG_PROGRESS] = g_signal_connect(v->web, "notify::progress", G_CALLBACK(view_progress_cb), gl); - v->status->signals[SIG_TITLE] = g_signal_connect(v->web, "notify::title", G_CALLBACK(view_title_cb), gl); - v->status->signals[SIG_URI] = g_signal_connect(v->web, "notify::uri", G_CALLBACK(view_uri_cb), gl); - v->status->signals[SIG_SCROLL] = g_signal_connect(v->web, "scroll-event", G_CALLBACK(view_scroll_cb), gl); - v->status->signals[SIG_VALUE_CHANGED] = g_signal_connect(a, "value-changed", G_CALLBACK(view_value_changed_cb), gl); - if (GET_BOOL("enable-favicon")) - v->status->signals[SIG_ICON_LOADED] = g_signal_connect(v->web, "icon-loaded", G_CALLBACK(view_icon_loaded), gl); - - /* v->status->signals[SIG_ENTRY_ACTIVATE] = g_signal_connect(v->entry, "activate", G_CALLBACK(view_entry_activate_cb), gl); */ - - v->status->signals[SIG_MOTION_NOTIFY] = g_signal_connect(v->web, "motion-notify-event", G_CALLBACK(view_motion_notify_cb), gl); - v->status->signals[SIG_TAB_BUTTON_PRESS] = g_signal_connect(v->tabevent, "button-press-event", G_CALLBACK(view_tab_button_press_cb), gl); - //WebKitWebFrame *frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(v->web)); - //v->status->signals[SIG_MAIN_FRAME_COMMITTED] = g_signal_connect(frame, "load-committed", G_CALLBACK(view_main_frame_committed_cb), gl); - - /* WebInspector */ - WebKitWebInspector *inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(v->web)); - g_signal_connect(inspector, "inspect-web-view", G_CALLBACK(view_inspect_web_view_cb), gl); + v->status->signals[SIG_CREATE_PLUGIN_WIDGET] = g_signal_connect(v->web, "create-plugin-widget", G_CALLBACK(view_create_plugin_widget_cb), gl); + v->status->signals[SIG_FRAME_CREATED] = g_signal_connect(v->web, "frame-created", G_CALLBACK(view_frame_created_cb), gl); + + v->status->signals[SIG_LOAD_STATUS] = g_signal_connect(v->web, "notify::load-status", G_CALLBACK(view_load_status_cb), gl); + v->status->signals[SIG_LOAD_ERROR] = g_signal_connect(v->web, "load-error", G_CALLBACK(view_load_error_cb), gl); + v->status->signals[SIG_LOAD_STATUS_AFTER] = g_signal_connect_after(v->web, "notify::load-status", G_CALLBACK(view_load_status_after_cb), gl); + v->status->signals[SIG_POPULATE_POPUP] = g_signal_connect(v->web, "populate-popup", G_CALLBACK(view_populate_popup_cb), gl); + v->status->signals[SIG_PROGRESS] = g_signal_connect(v->web, "notify::progress", G_CALLBACK(view_progress_cb), gl); + v->status->signals[SIG_TITLE] = g_signal_connect(v->web, "notify::title", G_CALLBACK(view_title_cb), gl); + v->status->signals[SIG_URI] = g_signal_connect(v->web, "notify::uri", G_CALLBACK(view_uri_cb), gl); + v->status->signals[SIG_SCROLL] = g_signal_connect(v->web, "scroll-event", G_CALLBACK(view_scroll_cb), gl); + v->status->signals[SIG_VALUE_CHANGED] = g_signal_connect(a, "value-changed", G_CALLBACK(view_value_changed_cb), gl); + if (GET_BOOL("enable-favicon")) + v->status->signals[SIG_ICON_LOADED] = g_signal_connect(v->web, "icon-loaded", G_CALLBACK(view_icon_loaded), gl); + + /* v->status->signals[SIG_ENTRY_ACTIVATE] = g_signal_connect(v->entry, "activate", G_CALLBACK(view_entry_activate_cb), gl); */ + + v->status->signals[SIG_MOTION_NOTIFY] = g_signal_connect(v->web, "motion-notify-event", G_CALLBACK(view_motion_notify_cb), gl); + v->status->signals[SIG_TAB_BUTTON_PRESS] = g_signal_connect(v->tabevent, "button-press-event", G_CALLBACK(view_tab_button_press_cb), gl); + //WebKitWebFrame *frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(v->web)); + //v->status->signals[SIG_MAIN_FRAME_COMMITTED] = g_signal_connect(frame, "load-committed", G_CALLBACK(view_main_frame_committed_cb), gl); + + /* WebInspector */ + WebKitWebInspector *inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(v->web)); + g_signal_connect(inspector, "inspect-web-view", G_CALLBACK(view_inspect_web_view_cb), gl); } /*}}}*/ /* view_create_web_view(View *v) return: GList * {{{*/ static View * -view_create_web_view() { - View *v = g_malloc(sizeof(View)); - - ViewStatus *status = dwb_malloc(sizeof(ViewStatus)); - status->search_string = NULL; - status->downloads = NULL; - status->hover_uri = NULL; +view_create_web_view() +{ + View *v = g_malloc(sizeof(View)); + + ViewStatus *status = dwb_malloc(sizeof(ViewStatus)); + status->search_string = NULL; + status->downloads = NULL; + status->hover_uri = NULL; #ifdef WITH_LIBSOUP_2_38 - status->request_uri = NULL; + status->request_uri = NULL; #endif - status->progress = 0; - status->allowed_plugins = NULL; - status->exc_style = NULL; - status->styles = NULL; - status->lockprotect = 0; - status->frames = NULL; - status->group = 0; - - v->js_base = NULL; - v->inspector_window = NULL; - v->plugins = plugins_new(); - for (int i=0; i<SIG_LAST; i++) - status->signals[i] = 0; - v->status = status; - - v->web = webkit_web_view_new(); - - /* Srolling */ - v->scroll = gtk_scrolled_window_new(NULL, NULL); - gtk_container_add(GTK_CONTAINER(v->scroll), v->web); + status->progress = 0; + status->allowed_plugins = NULL; + status->exc_style = NULL; + status->styles = NULL; + status->lockprotect = 0; + status->frames = NULL; + status->group = 0; + + v->js_base = NULL; + v->inspector_window = NULL; + v->plugins = plugins_new(); + for (int i=0; i<SIG_LAST; i++) + status->signals[i] = 0; + v->status = status; + + v->web = webkit_web_view_new(); + + /* Srolling */ + v->scroll = gtk_scrolled_window_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(v->scroll), v->web); #if !_HAS_GTK3 - if (! GET_BOOL("scrollbars")) { - WebKitWebFrame *frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(v->web)); - g_signal_connect(frame, "scrollbars-policy-changed", G_CALLBACK(gtk_true), NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(v->scroll), GTK_POLICY_NEVER, GTK_POLICY_NEVER); - } + if (! GET_BOOL("scrollbars")) + { + WebKitWebFrame *frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(v->web)); + g_signal_connect(frame, "scrollbars-policy-changed", G_CALLBACK(gtk_true), NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(v->scroll), GTK_POLICY_NEVER, GTK_POLICY_NEVER); + } #endif - /* Tabbar */ - v->tabevent = gtk_event_box_new(); + /* Tabbar */ + v->tabevent = gtk_event_box_new(); #if _HAS_GTK3 - v->tabbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); + v->tabbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); #else - v->tabbox = gtk_hbox_new(false, 1); + v->tabbox = gtk_hbox_new(false, 1); #endif - v->tablabel = gtk_label_new(NULL); - - gtk_label_set_use_markup(GTK_LABEL(v->tablabel), true); - gtk_label_set_width_chars(GTK_LABEL(v->tablabel), 1); - gtk_misc_set_alignment(GTK_MISC(v->tablabel), 0.0, 0.5); - gtk_label_set_ellipsize(GTK_LABEL(v->tablabel), PANGO_ELLIPSIZE_END); - - gtk_box_pack_end(GTK_BOX(v->tabbox), v->tablabel, true, true, 3); - - GdkPixbuf *pb = gdk_pixbuf_new_from_xpm_data(dummy_icon); - v->tabicon = gtk_image_new_from_pixbuf(pb); - gtk_box_pack_end(GTK_BOX(v->tabbox), v->tabicon, false, false, 0); - - GtkWidget *alignment = gtk_alignment_new(0.5, 0.5, 1, 1); - int padding = GET_INT("bars-padding"); - gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), padding, padding, padding, padding); - gtk_container_add(GTK_CONTAINER(alignment), v->tabbox); - gtk_container_add(GTK_CONTAINER(v->tabevent), alignment); - - DWB_WIDGET_OVERRIDE_FONT(v->tablabel, dwb.font.fd_inactive); - - gtk_widget_set_can_focus(v->scroll, false); - gtk_widget_show_all(v->scroll); - gtk_widget_show_all(v->tabevent); - - WebKitDOMDocument *doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(v->web)); - v->hover.element = webkit_dom_document_create_element(doc, "div", NULL); - v->hover.anchor = webkit_dom_document_create_element(doc, "a", NULL); - char *font = GET_CHAR("font-hidden-statusbar"); - char *bgcolor = GET_CHAR("background-color"); - char *fgcolor = GET_CHAR("foreground-color"); - gchar *style = g_strdup_printf( - "bottom:0px;right:0px;position:fixed;z-index:1000;\ - text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%%;\ - border-left:1px solid #555;\ - border-top:1px solid #555;\ - padding-left:2px;\ - border-radius:5px 0px 0px 0px;letter-spacing:0px;background:%s;color:%s;font:%s", - bgcolor, - fgcolor, - font); - webkit_dom_element_set_attribute(v->hover.element, "style", style, NULL); - g_free(style); - webkit_dom_element_set_attribute(v->hover.anchor, "style", "text-decoration:none;color:inherit;", NULL); - webkit_dom_node_append_child(WEBKIT_DOM_NODE(v->hover.element), WEBKIT_DOM_NODE(v->hover.anchor), NULL); - webkit_dom_html_element_set_id(WEBKIT_DOM_HTML_ELEMENT(v->hover.element), "dwb_hover_element"); - - v->status_element = webkit_dom_document_create_element(doc, "div", NULL); - style = g_strdup_printf( - "bottom:0px;left:0px;position:fixed;z-index:1000;\ - border-right:1px solid #555;\ - border-top:1px solid #555;\ - padding-right:2px;\ - border-radius:0px 5px 0px 0px;letter-spacing:0px;background:%s;color:%s;font:%s;", - bgcolor, - fgcolor, - font); - webkit_dom_element_set_attribute(v->status_element, "style", style, NULL); - g_free(style); - return v; + v->tablabel = gtk_label_new(NULL); + + gtk_label_set_use_markup(GTK_LABEL(v->tablabel), true); + gtk_label_set_width_chars(GTK_LABEL(v->tablabel), 1); + gtk_misc_set_alignment(GTK_MISC(v->tablabel), 0.0, 0.5); + gtk_label_set_ellipsize(GTK_LABEL(v->tablabel), PANGO_ELLIPSIZE_END); + + gtk_box_pack_end(GTK_BOX(v->tabbox), v->tablabel, true, true, 3); + + GdkPixbuf *pb = gdk_pixbuf_new_from_xpm_data(dummy_icon); + v->tabicon = gtk_image_new_from_pixbuf(pb); + gtk_box_pack_end(GTK_BOX(v->tabbox), v->tabicon, false, false, 0); + + GtkWidget *alignment = gtk_alignment_new(0.5, 0.5, 1, 1); + int padding = GET_INT("bars-padding"); + gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), padding, padding, padding, padding); + gtk_container_add(GTK_CONTAINER(alignment), v->tabbox); + gtk_container_add(GTK_CONTAINER(v->tabevent), alignment); + + DWB_WIDGET_OVERRIDE_FONT(v->tablabel, dwb.font.fd_inactive); + + gtk_widget_set_can_focus(v->scroll, false); + gtk_widget_show_all(v->scroll); + gtk_widget_show_all(v->tabevent); + + WebKitDOMDocument *doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(v->web)); + v->hover.element = webkit_dom_document_create_element(doc, "div", NULL); + v->hover.anchor = webkit_dom_document_create_element(doc, "a", NULL); + char *font = GET_CHAR("font-hidden-statusbar"); + char *bgcolor = GET_CHAR("background-color"); + char *fgcolor = GET_CHAR("foreground-color"); + gchar *style = g_strdup_printf( + "bottom:0px;right:0px;position:fixed;z-index:1000;\ + text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%%;\ + border-left:1px solid #555;\ + border-top:1px solid #555;\ + padding-left:2px;\ + border-radius:5px 0px 0px 0px;letter-spacing:0px;background:%s;color:%s;font:%s", + bgcolor, + fgcolor, + font); + webkit_dom_element_set_attribute(v->hover.element, "style", style, NULL); + g_free(style); + webkit_dom_element_set_attribute(v->hover.anchor, "style", "text-decoration:none;color:inherit;", NULL); + webkit_dom_node_append_child(WEBKIT_DOM_NODE(v->hover.element), WEBKIT_DOM_NODE(v->hover.anchor), NULL); + webkit_dom_html_element_set_id(WEBKIT_DOM_HTML_ELEMENT(v->hover.element), "dwb_hover_element"); + + v->status_element = webkit_dom_document_create_element(doc, "div", NULL); + style = g_strdup_printf( + "bottom:0px;left:0px;position:fixed;z-index:1000;\ + border-right:1px solid #555;\ + border-top:1px solid #555;\ + padding-right:2px;\ + border-radius:0px 5px 0px 0px;letter-spacing:0px;background:%s;color:%s;font:%s;", + bgcolor, + fgcolor, + font); + webkit_dom_element_set_attribute(v->status_element, "style", style, NULL); + g_free(style); + return v; } /*}}}*/ /* view_clear_tab {{{*/ void -view_clear_tab(GList *gl) { - WebKitWebBackForwardList *bf_list = webkit_web_view_get_back_forward_list(WEBVIEW(gl)); - webkit_web_back_forward_list_clear(bf_list); - dwb_load_uri(gl, "about:blank"); +view_clear_tab(GList *gl) +{ + WebKitWebBackForwardList *bf_list = webkit_web_view_get_back_forward_list(WEBVIEW(gl)); + webkit_web_back_forward_list_clear(bf_list); + dwb_load_uri(gl, "about:blank"); }/*}}}*/ void -view_clean(GList *gl) { - View *v = VIEW(gl); - /* Inspector */ - if (v->inspector_window != NULL) { - gtk_widget_destroy(v->inspector_window); - v->inspector_window = NULL; - } +view_clean(GList *gl) +{ + View *v = VIEW(gl); + /* Inspector */ + if (v->inspector_window != NULL) + { + gtk_widget_destroy(v->inspector_window); + v->inspector_window = NULL; + } - /* Favicon */ - GdkPixbuf *pb; - if ( (pb = gtk_image_get_pixbuf(GTK_IMAGE(v->tabicon))) ) - g_object_unref(pb); + /* Favicon */ + GdkPixbuf *pb; + if ( (pb = gtk_image_get_pixbuf(GTK_IMAGE(v->tabicon))) ) + g_object_unref(pb); - gtk_widget_destroy(v->tabicon); - gtk_widget_destroy(v->tablabel); - gtk_widget_destroy(v->tabbox); - gtk_widget_destroy(v->tabevent); + gtk_widget_destroy(v->tabicon); + gtk_widget_destroy(v->tablabel); + gtk_widget_destroy(v->tabbox); + gtk_widget_destroy(v->tabevent); - plugins_free(v->plugins); + plugins_free(v->plugins); - scripts_remove_tab(v->script_wv); + scripts_remove_tab(v->script_wv); - if (v->status->exc_style) { - g_object_unref(v->status->exc_style); - } - if (v->status->styles) { - for (GSList *l = v->status->styles; l; l=l->next) - g_object_unref(l->data); - g_slist_free(v->status->styles); - } + if (v->status->exc_style) + g_object_unref(v->status->exc_style); + + if (v->status->styles) + { + for (GSList *l = v->status->styles; l; l=l->next) + g_object_unref(l->data); + g_slist_free(v->status->styles); + } - g_object_unref(v->hover.anchor); - g_object_unref(v->hover.element); - g_object_unref(v->status_element); + g_object_unref(v->hover.anchor); + g_object_unref(v->hover.element); + g_object_unref(v->status_element); - g_object_unref(v->settings); - /* Destroy widget */ - gtk_widget_destroy(v->web); - gtk_widget_destroy(v->scroll); + g_object_unref(v->settings); + /* Destroy widget */ + gtk_widget_destroy(v->web); + gtk_widget_destroy(v->scroll); - FREE0(v->status->hover_uri); + FREE0(v->status->hover_uri); #ifdef WITH_LIBSOUP_2_38 - FREE0(v->status->request_uri); + FREE0(v->status->request_uri); #endif - FREE0(v->status); + FREE0(v->status); - FREE0(v); + FREE0(v); } /* view_remove (void) {{{*/ DwbStatus -view_remove(GList *gl) { - if (!dwb.state.views->next) { - if (dwb.misc.clt_policy == CLT_POLICY_CLOSE) { - view_clear_tab(dwb.state.fview); - dwb_end(); - return STATUS_END; +view_remove(GList *gl) +{ + if (!dwb.state.views->next) + { + if (dwb.misc.clt_policy == CLT_POLICY_CLOSE) + { + view_clear_tab(dwb.state.fview); + dwb_end(); + return STATUS_END; + } + if (dwb.misc.clt_policy == CLT_POLICY_CLEAR) + view_clear_tab(dwb.state.fview); + return STATUS_OK; } - if (dwb.misc.clt_policy == CLT_POLICY_CLEAR) - view_clear_tab(dwb.state.fview); - return STATUS_OK; - } - if (dwb.state.nummod >= 0) { - gl = g_list_nth(dwb.state.views, dwb.state.nummod - 1); - if (gl == NULL) - return STATUS_OK; - } - else if (gl == NULL) - gl = dwb.state.fview; - View *v = gl->data; - int position = g_list_position(dwb.state.views, gl); - /* Check for protected tab */ - if (LP_PROTECTED(v) && !dwb_confirm(dwb.state.fview, "Really close tab %d [y/n]?", position + 1) ) { - CLEAR_COMMAND_TEXT(); - return STATUS_OK; - } - /* Get new focused tab */ - GList *new_fview = dwb.state.fview; - if (gl == dwb.state.fview) { - if (dwb.state.last_tab > position) - dwb.state.last_tab--; - if (dwb.misc.tab_position & TAB_CLOSE_POSITION_RIGHTMOST) { - if (dwb.state.fview->next) { - new_fview = g_list_last(dwb.state.views); - } - else { - new_fview = g_list_last(dwb.state.views)->prev; - } + if (dwb.state.nummod >= 0) + { + gl = g_list_nth(dwb.state.views, dwb.state.nummod - 1); + if (gl == NULL) + return STATUS_OK; } - else if (dwb.misc.tab_position & TAB_CLOSE_POSITION_RIGHT) { - if ( !(new_fview = dwb.state.fview->next) ) { - new_fview = g_list_last(dwb.state.views)->prev; - } + else if (gl == NULL) + gl = dwb.state.fview; + + View *v = gl->data; + int position = g_list_position(dwb.state.views, gl); + /* Check for protected tab */ + if (LP_PROTECTED(v) && !dwb_confirm(dwb.state.fview, "Really close tab %d [y/n]?", position + 1) ) + { + CLEAR_COMMAND_TEXT(); + return STATUS_OK; } - else if (dwb.misc.tab_position & TAB_CLOSE_POSITION_LEFTMOST) { - if (dwb.state.fview == dwb.state.views) - new_fview = dwb.state.views->next; - else - new_fview = dwb.state.views; + /* Get new focused tab */ + GList *new_fview = dwb.state.fview; + if (gl == dwb.state.fview) + { + if (dwb.state.last_tab > position) + dwb.state.last_tab--; + if (dwb.misc.tab_position & TAB_CLOSE_POSITION_RIGHTMOST) + { + if (dwb.state.fview->next) + new_fview = g_list_last(dwb.state.views); + else + new_fview = g_list_last(dwb.state.views)->prev; + + } + else if (dwb.misc.tab_position & TAB_CLOSE_POSITION_RIGHT) + { + if ( !(new_fview = dwb.state.fview->next) ) + new_fview = g_list_last(dwb.state.views)->prev; + } + else if (dwb.misc.tab_position & TAB_CLOSE_POSITION_LEFTMOST) + { + if (dwb.state.fview == dwb.state.views) + new_fview = dwb.state.views->next; + else + new_fview = dwb.state.views; + } + else + { + if ( !(new_fview = dwb.state.fview->prev) ) + new_fview = g_list_first(dwb.state.views)->next; + } + if (dwb.state.bar_visible & BAR_VIS_TOP && !gtk_widget_get_visible(dwb.gui.topbox)) + gtk_widget_show_all(dwb.gui.topbox); } - else { // tab.misc.tab_position & TAB_CLOSE_POSITION_LEFT - if ( !(new_fview = dwb.state.fview->prev) ) { - new_fview = g_list_first(dwb.state.views)->next; - } + else if (dwb.state.nummod - 1 == position) + { + dwb.state.last_tab = -1; } - if (dwb.state.bar_visible & BAR_VIS_TOP && !gtk_widget_get_visible(dwb.gui.topbox)) - gtk_widget_show_all(dwb.gui.topbox); - } - else if (dwb.state.nummod - 1 == position) { - dwb.state.last_tab = -1; - } - /* Get History for the undo list */ - WebKitWebBackForwardList *bflist = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(v->web)); - if ( bflist != NULL ) { - GList *store = NULL; - - for (int i = -webkit_web_back_forward_list_get_back_length(bflist); i<=0; i++) { - WebKitWebHistoryItem *item = webkit_web_back_forward_list_get_nth_item(bflist, i); - Navigation *n = dwb_navigation_from_webkit_history_item(item); - if (n) - store = g_list_append(store, n); + + /* Get History for the undo list */ + WebKitWebBackForwardList *bflist = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(v->web)); + if ( bflist != NULL ) + { + GList *store = NULL; + + for (int i = -webkit_web_back_forward_list_get_back_length(bflist); i<=0; i++) + { + WebKitWebHistoryItem *item = webkit_web_back_forward_list_get_nth_item(bflist, i); + Navigation *n = dwb_navigation_from_webkit_history_item(item); + if (n) + store = g_list_append(store, n); + } + dwb.state.undo_list = g_list_prepend(dwb.state.undo_list, store); } - dwb.state.undo_list = g_list_prepend(dwb.state.undo_list, store); - } - dwb_focus(new_fview); - view_clean(gl); + dwb_focus(new_fview); + view_clean(gl); - dwb_source_remove(); + dwb_source_remove(); - dwb.state.views = g_list_delete_link(dwb.state.views, gl); - if (!dwb.state.views->next && !dwb.misc.show_single_tab) - gtk_widget_hide(dwb.gui.topbox); + dwb.state.views = g_list_delete_link(dwb.state.views, gl); + if (!dwb.state.views->next && !dwb.misc.show_single_tab) + gtk_widget_hide(dwb.gui.topbox); - gtk_widget_show(CURRENT_VIEW()->scroll); + gtk_widget_show(CURRENT_VIEW()->scroll); - dwb_update_layout(); - dwb_update_status_text(dwb.state.fview, NULL); - CLEAR_COMMAND_TEXT(); + dwb_update_layout(); + dwb_update_status_text(dwb.state.fview, NULL); + CLEAR_COMMAND_TEXT(); - return STATUS_OK; + return STATUS_OK; }/*}}}*/ /* view_ssl_state (GList *gl) {{{*/ static void -view_ssl_state(GList *gl) { - View *v = VIEW(gl); - SslState ssl = SSL_NONE; - - const char *uri = webkit_web_view_get_uri(WEBKIT_WEB_VIEW(v->web)); - if (uri && g_str_has_prefix(uri, "https")) { - SoupMessage *msg = dwb_soup_get_message(MAIN_FRAME_CAST(v->web)); - if (msg) { - ssl = soup_message_get_flags(msg) & SOUP_MESSAGE_CERTIFICATE_TRUSTED - ? SSL_TRUSTED - : SSL_UNTRUSTED; +view_ssl_state(GList *gl) +{ + View *v = VIEW(gl); + SslState ssl = SSL_NONE; + + const char *uri = webkit_web_view_get_uri(WEBKIT_WEB_VIEW(v->web)); + if (uri && g_str_has_prefix(uri, "https")) + { + SoupMessage *msg = dwb_soup_get_message(MAIN_FRAME_CAST(v->web)); + if (msg) + { + ssl = soup_message_get_flags(msg) & SOUP_MESSAGE_CERTIFICATE_TRUSTED + ? SSL_TRUSTED + : SSL_UNTRUSTED; + } } - } - v->status->ssl = ssl; - dwb_update_uri(gl); + v->status->ssl = ssl; + dwb_update_uri(gl); }/*}}}*/ /* view_add(Arg *arg) return: View *{{{*/ GList * -view_add(const char *uri, gboolean background) { - GList *ret = NULL; - - if (!dwb.misc.tabbed_browsing && dwb.state.views) { - dwb_new_window(uri); - return NULL; - } - View *v = view_create_web_view(); - gtk_box_pack_end(GTK_BOX(dwb.gui.topbox), v->tabevent, true, true, 0); - int length = g_list_length(dwb.state.views); - if (dwb.state.fview) { - int p; - if (dwb.misc.tab_position & TAB_POSITION_RIGHTMOST) - p = length; - else if (dwb.misc.tab_position & TAB_POSITION_LEFT) - p = g_list_position(dwb.state.views, dwb.state.fview); - else if (dwb.misc.tab_position & TAB_POSITION_LEFTMOST) - p = 0; +view_add(const char *uri, gboolean background) +{ + GList *ret = NULL; + + if (!dwb.misc.tabbed_browsing && dwb.state.views) + { + dwb_new_window(uri); + return NULL; + } + View *v = view_create_web_view(); + gtk_box_pack_end(GTK_BOX(dwb.gui.topbox), v->tabevent, true, true, 0); + int length = g_list_length(dwb.state.views); + if (dwb.state.fview) + { + int p; + if (dwb.misc.tab_position & TAB_POSITION_RIGHTMOST) + p = length; + else if (dwb.misc.tab_position & TAB_POSITION_LEFT) + p = g_list_position(dwb.state.views, dwb.state.fview); + else if (dwb.misc.tab_position & TAB_POSITION_LEFTMOST) + p = 0; + else + p = g_list_position(dwb.state.views, dwb.state.fview) + 1; + + gtk_box_reorder_child(GTK_BOX(dwb.gui.topbox), v->tabevent, length - p); + gtk_box_insert(GTK_BOX(dwb.gui.mainbox), v->scroll, true, true, 0, p, GTK_PACK_START); + dwb.state.views = g_list_insert(dwb.state.views, v, p); + ret = g_list_nth(dwb.state.views, p); + scripts_create_tab(ret); + + if (background) + { + view_set_normal_style(ret); + gtk_widget_hide(v->scroll); + } + else + { + if (! (CURRENT_VIEW()->status->lockprotect & LP_VISIBLE) ) + gtk_widget_hide(VIEW(dwb.state.fview)->scroll); + dwb_unfocus(); + dwb_focus(ret); + } + } else - p = g_list_position(dwb.state.views, dwb.state.fview) + 1; - - gtk_box_reorder_child(GTK_BOX(dwb.gui.topbox), v->tabevent, length - p); - gtk_box_insert(GTK_BOX(dwb.gui.mainbox), v->scroll, true, true, 0, p, GTK_PACK_START); - dwb.state.views = g_list_insert(dwb.state.views, v, p); - ret = g_list_nth(dwb.state.views, p); - scripts_create_tab(ret); - - if (background) { - view_set_normal_style(ret); - gtk_widget_hide(v->scroll); + { + gtk_box_pack_start(GTK_BOX(dwb.gui.mainbox), v->scroll, true, true, 0); + dwb.state.views = g_list_prepend(dwb.state.views, v); + ret = dwb.state.views; + scripts_create_tab(ret); + dwb_focus(ret); } - else { - if (! (CURRENT_VIEW()->status->lockprotect & LP_VISIBLE) ) - gtk_widget_hide(VIEW(dwb.state.fview)->scroll); - dwb_unfocus(); - dwb_focus(ret); + if (!dwb.misc.show_single_tab) + { + if (length == 0) + gtk_widget_hide(dwb.gui.topbox); + else if (length == 1 && (dwb.state.bar_visible & BAR_VIS_TOP)) + gtk_widget_show(dwb.gui.topbox); } - } - else { - gtk_box_pack_start(GTK_BOX(dwb.gui.mainbox), v->scroll, true, true, 0); - dwb.state.views = g_list_prepend(dwb.state.views, v); - ret = dwb.state.views; - scripts_create_tab(ret); - dwb_focus(ret); - } - if (!dwb.misc.show_single_tab) { - if (length == 0) { - gtk_widget_hide(dwb.gui.topbox); + if (EMIT_SCRIPT(CREATE_TAB)) + { + ScriptSignal signal = { VIEW(ret)->script_wv, SCRIPTS_SIG_META(NULL, CREATE_TAB, 0) }; + scripts_emit(&signal); } - else if (length == 1 && (dwb.state.bar_visible & BAR_VIS_TOP)) - gtk_widget_show(dwb.gui.topbox); - } - view_init_signals(ret); - view_init_settings(ret); - if (GET_BOOL("adblocker")) - adblock_connect(ret); - dwb_update_layout(); + view_init_signals(ret); + view_init_settings(ret); + if (GET_BOOL("adblocker")) + adblock_connect(ret); + + dwb_update_layout(); - if (uri != NULL) { - dwb_load_uri(ret, uri); - } - return ret; + if (uri != NULL) + dwb_load_uri(ret, uri); + + return ret; } /*}}}*/ /*}}}*/ |