aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/callbacks.c')
-rw-r--r--src/callbacks.c520
1 files changed, 63 insertions, 457 deletions
diff --git a/src/callbacks.c b/src/callbacks.c
index 3f7e27d..446e868 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -6,429 +6,30 @@
#include "uzbl-core.h"
#include "callbacks.h"
#include "events.h"
-#include "util.h"
-#include "io.h"
-
-
-void
-set_proxy_url() {
- SoupURI *suri;
-
- if (uzbl.net.proxy_url == NULL || *uzbl.net.proxy_url == ' ') {
- soup_session_remove_feature_by_type(uzbl.net.soup_session,
- (GType) SOUP_SESSION_PROXY_URI);
- }
- else {
- suri = soup_uri_new(uzbl.net.proxy_url);
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_PROXY_URI,
- suri, NULL);
- soup_uri_free(suri);
- }
-
- return;
-}
-
-
-void
-set_authentication_handler() {
- /* Check if WEBKIT_TYPE_SOUP_AUTH_DIALOG feature is set */
- GSList *flist = soup_session_get_features (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG);
- guint feature_is_set = g_slist_length(flist);
- g_slist_free(flist);
-
- if (uzbl.behave.authentication_handler == NULL || *uzbl.behave.authentication_handler == 0) {
- if (!feature_is_set)
- soup_session_add_feature_by_type
- (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG);
- } else {
- if (feature_is_set)
- soup_session_remove_feature_by_type
- (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG);
- }
- return;
-}
-
-
-void
-set_status_background() {
- /* labels and hboxes do not draw their own background. applying this
- * on the vbox/main_window is ok as the statusbar is the only affected
- * widget. (if not, we could also use GtkEventBox) */
- GtkWidget* widget = uzbl.gui.main_window ? uzbl.gui.main_window : GTK_WIDGET (uzbl.gui.plug);
-
-#if GTK_CHECK_VERSION(2,91,0)
- GdkRGBA color;
- gdk_rgba_parse (&color, uzbl.behave.status_background);
- gtk_widget_override_background_color (widget, GTK_STATE_NORMAL, &color);
-#else
- GdkColor color;
- gdk_color_parse (uzbl.behave.status_background, &color);
- gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);
-#endif
-}
-
-
-void
-set_icon() {
- if(file_exists(uzbl.gui.icon)) {
- if (uzbl.gui.main_window)
- gtk_window_set_icon_from_file (GTK_WINDOW (uzbl.gui.main_window), uzbl.gui.icon, NULL);
- } else {
- g_printerr ("Icon \"%s\" not found. ignoring.\n", uzbl.gui.icon);
- }
-}
-
-void
-cmd_set_geometry() {
- int ret=0, x=0, y=0;
- unsigned int w=0, h=0;
- if(uzbl.gui.geometry) {
- if(uzbl.gui.geometry[0] == 'm') { /* m/maximize/maximized */
- gtk_window_maximize((GtkWindow *)(uzbl.gui.main_window));
- } else {
- /* we used to use gtk_window_parse_geometry() but that didn't work how it was supposed to */
- ret = XParseGeometry(uzbl.gui.geometry, &x, &y, &w, &h);
- if(ret & XValue)
- gtk_window_move((GtkWindow *)uzbl.gui.main_window, x, y);
- if(ret & WidthValue)
- gtk_window_resize((GtkWindow *)uzbl.gui.main_window, w, h);
- }
- }
-
- /* update geometry var with the actual geometry
- this is necessary as some WMs don't seem to honour
- the above setting and we don't want to end up with
- wrong geometry information
- */
- retrieve_geometry();
-}
-
-void
-cmd_set_status() {
- if (!uzbl.behave.show_status) {
- gtk_widget_hide(uzbl.gui.mainbar);
- } else {
- gtk_widget_show(uzbl.gui.mainbar);
- }
- update_title();
-}
-
-void
-cmd_load_uri() {
- load_uri_imp (uzbl.state.uri);
-}
-
-void
-cmd_max_conns() {
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_MAX_CONNS, uzbl.net.max_conns, NULL);
-}
-
-void
-cmd_max_conns_host() {
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL);
-}
-
-void
-cmd_http_debug() {
- soup_session_remove_feature
- (uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_logger));
- /* do we leak if this doesn't get freed? why does it occasionally crash if freed? */
- /*g_free(uzbl.net.soup_logger);*/
-
- uzbl.net.soup_logger = soup_logger_new(uzbl.behave.http_debug, -1);
- soup_session_add_feature(uzbl.net.soup_session,
- SOUP_SESSION_FEATURE(uzbl.net.soup_logger));
-}
-
-WebKitWebSettings*
-view_settings() {
- return webkit_web_view_get_settings(uzbl.gui.web_view);
-}
-
-void
-cmd_font_size() {
- WebKitWebSettings *ws = view_settings();
- if (uzbl.behave.font_size > 0) {
- g_object_set (G_OBJECT(ws), "default-font-size", uzbl.behave.font_size, NULL);
- }
-
- if (uzbl.behave.monospace_size > 0) {
- g_object_set (G_OBJECT(ws), "default-monospace-font-size",
- uzbl.behave.monospace_size, NULL);
- } else {
- g_object_set (G_OBJECT(ws), "default-monospace-font-size",
- uzbl.behave.font_size, NULL);
- }
-}
-
-void
-cmd_default_font_family() {
- g_object_set (G_OBJECT(view_settings()), "default-font-family",
- uzbl.behave.default_font_family, NULL);
-}
-
-void
-cmd_monospace_font_family() {
- g_object_set (G_OBJECT(view_settings()), "monospace-font-family",
- uzbl.behave.monospace_font_family, NULL);
-}
-
-void
-cmd_sans_serif_font_family() {
- g_object_set (G_OBJECT(view_settings()), "sans_serif-font-family",
- uzbl.behave.sans_serif_font_family, NULL);
-}
-
-void
-cmd_serif_font_family() {
- g_object_set (G_OBJECT(view_settings()), "serif-font-family",
- uzbl.behave.serif_font_family, NULL);
-}
-
-void
-cmd_cursive_font_family() {
- g_object_set (G_OBJECT(view_settings()), "cursive-font-family",
- uzbl.behave.cursive_font_family, NULL);
-}
-
-void
-cmd_fantasy_font_family() {
- g_object_set (G_OBJECT(view_settings()), "fantasy-font-family",
- uzbl.behave.fantasy_font_family, NULL);
-}
-
-void
-cmd_zoom_level() {
- webkit_web_view_set_zoom_level (uzbl.gui.web_view, uzbl.behave.zoom_level);
-}
-
-void
-cmd_enable_pagecache() {
- g_object_set (G_OBJECT(view_settings()), "enable-page-cache",
- uzbl.behave.enable_pagecache, NULL);
-}
-
-void
-cmd_disable_plugins() {
- g_object_set (G_OBJECT(view_settings()), "enable-plugins",
- !uzbl.behave.disable_plugins, NULL);
-}
-
-void
-cmd_disable_scripts() {
- g_object_set (G_OBJECT(view_settings()), "enable-scripts",
- !uzbl.behave.disable_scripts, NULL);
-}
-
-void
-cmd_minimum_font_size() {
- g_object_set (G_OBJECT(view_settings()), "minimum-font-size",
- uzbl.behave.minimum_font_size, NULL);
-}
-void
-cmd_autoload_img() {
- g_object_set (G_OBJECT(view_settings()), "auto-load-images",
- uzbl.behave.autoload_img, NULL);
-}
-
-
-void
-cmd_autoshrink_img() {
- g_object_set (G_OBJECT(view_settings()), "auto-shrink-images",
- uzbl.behave.autoshrink_img, NULL);
-}
-
-
-void
-cmd_enable_spellcheck() {
- g_object_set (G_OBJECT(view_settings()), "enable-spell-checking",
- uzbl.behave.enable_spellcheck, NULL);
-}
-
-void
-cmd_enable_private() {
- g_object_set (G_OBJECT(view_settings()), "enable-private-browsing",
- uzbl.behave.enable_private, NULL);
-}
-
-void
-cmd_print_bg() {
- g_object_set (G_OBJECT(view_settings()), "print-backgrounds",
- uzbl.behave.print_bg, NULL);
-}
-
-void
-cmd_style_uri() {
- g_object_set (G_OBJECT(view_settings()), "user-stylesheet-uri",
- uzbl.behave.style_uri, NULL);
-}
-
-void
-cmd_resizable_txt() {
- g_object_set (G_OBJECT(view_settings()), "resizable-text-areas",
- uzbl.behave.resizable_txt, NULL);
-}
+#include "menu.h"
+#include "type.h"
void
-cmd_default_encoding() {
- g_object_set (G_OBJECT(view_settings()), "default-encoding",
- uzbl.behave.default_encoding, NULL);
-}
-
-void
-cmd_enforce_96dpi() {
- g_object_set (G_OBJECT(view_settings()), "enforce-96-dpi",
- uzbl.behave.enforce_96dpi, NULL);
-}
-
-void
-cmd_caret_browsing() {
- g_object_set (G_OBJECT(view_settings()), "enable-caret-browsing",
- uzbl.behave.caret_browsing, NULL);
-}
-
-void
-set_current_encoding() {
- gchar *encoding = uzbl.behave.current_encoding;
- if(strlen(encoding) == 0)
- encoding = NULL;
-
- webkit_web_view_set_custom_encoding(uzbl.gui.web_view, encoding);
-}
-
-
-void
-cmd_fifo_dir() {
- uzbl.behave.fifo_dir = init_fifo(uzbl.behave.fifo_dir);
-}
-
-void
-cmd_socket_dir() {
- uzbl.behave.socket_dir = init_socket(uzbl.behave.socket_dir);
-}
-
-void
-cmd_inject_html() {
- if(uzbl.behave.inject_html) {
- webkit_web_view_load_html_string (uzbl.gui.web_view,
- uzbl.behave.inject_html, NULL);
- }
-}
-
-void
-cmd_useragent() {
- if (*uzbl.net.useragent == ' ') {
- g_free (uzbl.net.useragent);
- uzbl.net.useragent = NULL;
- } else {
- g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT,
- uzbl.net.useragent, NULL);
- }
-}
-
-void
-set_accept_languages() {
- if (*uzbl.net.accept_languages == ' ') {
- g_free (uzbl.net.accept_languages);
- uzbl.net.accept_languages = NULL;
- } else {
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_ACCEPT_LANGUAGE, uzbl.net.accept_languages, NULL);
- }
-}
-
-void
-cmd_javascript_windows() {
- g_object_set (G_OBJECT(view_settings()), "javascript-can-open-windows-automatically",
- uzbl.behave.javascript_windows, NULL);
-}
-
-void
-cmd_scrollbars_visibility() {
- if(uzbl.gui.scrollbars_visible) {
- uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win));
- uzbl.gui.bar_v = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win));
- }
- else {
- uzbl.gui.bar_v = gtk_range_get_adjustment (GTK_RANGE (uzbl.gui.scbar_v));
- uzbl.gui.bar_h = gtk_range_get_adjustment (GTK_RANGE (uzbl.gui.scbar_h));
- }
-
- set_webview_scroll_adjustments();
-}
-
-/* requires webkit >=1.1.14 */
-void
-cmd_view_source() {
- webkit_web_view_set_view_source_mode(uzbl.gui.web_view,
- (gboolean) uzbl.behave.view_source);
-}
-
-void
-cmd_set_zoom_type () {
- if(uzbl.behave.zoom_type)
- webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, TRUE);
- else
- webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE);
-}
-
-void
-toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) {
- (void)argv;
- (void)result;
-
- webkit_web_view_set_full_content_zoom (page, !webkit_web_view_get_full_content_zoom (page));
-}
-
-void
-toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result) {
- (void)page;
- (void)argv;
- (void)result;
-
- if (uzbl.behave.show_status) {
- gtk_widget_hide(uzbl.gui.mainbar);
- } else {
- gtk_widget_show(uzbl.gui.mainbar);
- }
- uzbl.behave.show_status = !uzbl.behave.show_status;
- update_title();
-}
-
-void
-link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data) {
- (void) page;
- (void) title;
- (void) data;
+link_hover_cb (WebKitWebView *page, const gchar *title, const gchar *link, gpointer data) {
+ (void) page; (void) title; (void) data;
State *s = &uzbl.state;
+ if(s->last_selected_url)
+ g_free(s->last_selected_url);
+
if(s->selected_url) {
- if(s->last_selected_url)
- g_free(s->last_selected_url);
s->last_selected_url = g_strdup(s->selected_url);
- }
- else {
- if(s->last_selected_url) g_free(s->last_selected_url);
+ g_free(s->selected_url);
+ s->selected_url = NULL;
+ } else
s->last_selected_url = NULL;
- }
- g_free(s->selected_url);
- s->selected_url = NULL;
+ if(s->last_selected_url && g_strcmp0(link, s->last_selected_url))
+ send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL);
if (link) {
s->selected_url = g_strdup(link);
-
- if(s->last_selected_url &&
- g_strcmp0(s->selected_url, s->last_selected_url))
- send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL);
-
- send_event(LINK_HOVER, NULL, TYPE_STR, s->selected_url, NULL);
- }
- else if(s->last_selected_url) {
- send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL);
+ send_event(LINK_HOVER, NULL, TYPE_STR, s->selected_url, NULL);
}
update_title();
@@ -478,7 +79,7 @@ load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
}
}
-void
+gboolean
load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud) {
(void) page; (void) frame; (void) ud;
GError *err = web_err;
@@ -488,15 +89,8 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer
TYPE_INT, err->code,
TYPE_STR, err->message,
NULL);
-}
-
-void
-uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) {
- (void) param_spec;
- g_free (uzbl.state.uri);
- g_object_get (web_view, "uri", &uzbl.state.uri, NULL);
- g_setenv("UZBL_URI", uzbl.state.uri, TRUE);
+ return FALSE;
}
void
@@ -767,10 +361,11 @@ request_starting_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitWebRes
}
void
-create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) {
+create_web_view_js_cb (WebKitWebView* web_view, GParamSpec param_spec) {
(void) web_view;
(void) param_spec;
+ webkit_web_view_stop_loading(web_view);
const gchar* uri = webkit_web_view_get_uri(web_view);
if (strncmp(uri, "javascript:", strlen("javascript:")) == 0) {
@@ -781,18 +376,6 @@ create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) {
send_event(NEW_WINDOW, NULL, TYPE_STR, uri, NULL);
}
-
-gboolean
-create_web_view_js_cb (WebKitWebView* web_view, gpointer user_data) {
- (void) web_view;
- (void) user_data;
-
- g_object_connect (web_view, "signal::notify::uri",
- G_CALLBACK(create_web_view_js2_cb), NULL, NULL);
- return TRUE;
-}
-
-
/*@null@*/ WebKitWebView*
create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) {
(void) web_view;
@@ -804,8 +387,8 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us
WebKitWebView* new_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
- g_signal_connect (new_view, "web-view-ready",
- G_CALLBACK(create_web_view_js_cb), NULL);
+ g_object_connect (new_view, "signal::notify::uri",
+ G_CALLBACK(create_web_view_js_cb), NULL, NULL);
return new_view;
}
@@ -953,43 +536,32 @@ download_cb(WebKitWebView *web_view, WebKitDownload *download, gpointer user_dat
return TRUE;
}
-gboolean
-scroll_vert_cb(GtkAdjustment *adjust, void *w)
-{
- (void) w;
-
+void
+send_scroll_event(int type, GtkAdjustment *adjust) {
gdouble value = gtk_adjustment_get_value(adjust);
gdouble min = gtk_adjustment_get_lower(adjust);
gdouble max = gtk_adjustment_get_upper(adjust);
gdouble page = gtk_adjustment_get_page_size(adjust);
- send_event (SCROLL_VERT, NULL,
+ send_event (type, NULL,
TYPE_FLOAT, value,
TYPE_FLOAT, min,
TYPE_FLOAT, max,
TYPE_FLOAT, page,
NULL);
+}
+gboolean
+scroll_vert_cb(GtkAdjustment *adjust, void *w) {
+ (void) w;
+ send_scroll_event(SCROLL_VERT, adjust);
return (FALSE);
}
gboolean
-scroll_horiz_cb(GtkAdjustment *adjust, void *w)
-{
+scroll_horiz_cb(GtkAdjustment *adjust, void *w) {
(void) w;
-
- gdouble value = gtk_adjustment_get_value(adjust);
- gdouble min = gtk_adjustment_get_lower(adjust);
- gdouble max = gtk_adjustment_get_upper(adjust);
- gdouble page = gtk_adjustment_get_page_size(adjust);
-
- send_event (SCROLL_HORIZ, NULL,
- TYPE_FLOAT, value,
- TYPE_FLOAT, min,
- TYPE_FLOAT, max,
- TYPE_FLOAT, page,
- NULL);
-
+ send_scroll_event(SCROLL_HORIZ, adjust);
return (FALSE);
}
@@ -1079,4 +651,38 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) {
}
}
+void
+window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame,
+ JSGlobalContextRef *context, JSObjectRef *object) {
+ (void) frame; (void) context; (void) object;
+#if WEBKIT_CHECK_VERSION (1, 3, 13)
+ // Take this opportunity to set some callbacks on the DOM
+ WebKitDOMDocument *document = webkit_web_view_get_dom_document (webview);
+ webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document),
+ "focus", G_CALLBACK(dom_focus_cb), TRUE, NULL);
+ webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document),
+ "blur", G_CALLBACK(dom_focus_cb), TRUE, NULL);
+#else
+ (void) webview;
+#endif
+}
+
+#if WEBKIT_CHECK_VERSION (1, 3, 13)
+void
+dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) {
+ (void) target; (void) user_data;
+ WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event);
+ gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget));
+ send_event (FOCUS_ELEMENT, NULL, TYPE_STR, name, NULL);
+}
+
+void
+dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) {
+ (void) target; (void) user_data;
+ WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event);
+ gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget));
+ send_event (BLUR_ELEMENT, NULL, TYPE_STR, name, NULL);
+}
+#endif
+
/* vi: set et ts=4: */