diff options
Diffstat (limited to 'uzbl.c')
-rw-r--r-- | uzbl.c | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -1,6 +1,6 @@ /* -*- c-basic-offset: 4; -*- */ -/* Original code taken from the example webkit-gtk+ application. see notice below. */ -/* Modified code is licensed under the GPL 3. See LICENSE file. */ +// Original code taken from the example webkit-gtk+ application. see notice below. +// Modified code is licensed under the GPL 3. See LICENSE file. /* @@ -36,14 +36,12 @@ #include <gtk/gtk.h> #include <gdk/gdkx.h> #include <gdk/gdkkeysyms.h> - -#include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> +#include <sys/types.h> +#include <sys/un.h> #include <sys/utsname.h> #include <sys/time.h> -#include <sys/un.h> - #include <webkit/webkit.h> #include <libsoup/soup.h> @@ -393,6 +391,23 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequ return (FALSE); } +static gboolean +mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { + (void) frame; + (void) request; + (void) user_data; + + /* If we can display it, let's display it... */ + if (webkit_web_view_can_show_mime_type (web_view, mime_type)) { + webkit_web_policy_decision_use (policy_decision); + return TRUE; + } + + /* ...everything we can't displayed is downloaded */ + webkit_web_policy_decision_download (policy_decision); + return TRUE; +} + WebKitWebView* create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) { (void) web_view; @@ -952,7 +967,7 @@ expand_template(const char *template, gboolean escape_markup) { token = g_scanner_get_next_token(uzbl.scan); if(token == G_TOKEN_SYMBOL) { - sym = (int)g_scanner_cur_value(uzbl.scan).v_symbol; + sym = GPOINTER_TO_INT(g_scanner_cur_value(uzbl.scan).v_symbol); switch(sym) { case SYM_URI: if(escape_markup) { @@ -1529,13 +1544,17 @@ set_var_value(gchar *name, gchar *val) { if (c->type == TYPE_STR) { buf = expand_vars(val); g_free(*c->ptr); - *c->ptr = g_strdup(val); - } else if (c->type == TYPE_INT) { + *c->ptr = buf; + } else if(c->type == TYPE_INT) { int *ip = (int *)c->ptr; - *ip = (int)strtoul(val, &endp, 10); + buf = expand_vars(val); + *ip = (int)strtoul(buf, &endp, 10); + g_free(buf); } else if (c->type == TYPE_FLOAT) { float *fp = (float *)c->ptr; - *fp = strtof(val, &endp); + buf = expand_vars(val); + *fp = strtof(buf, &endp); + g_free(buf); } /* invoke a command specific function */ @@ -1986,6 +2005,7 @@ create_browser () { g_signal_connect (G_OBJECT (g->web_view), "new-window-policy-decision-requested", G_CALLBACK (new_window_cb), g->web_view); g_signal_connect (G_OBJECT (g->web_view), "download-requested", G_CALLBACK (download_cb), g->web_view); g_signal_connect (G_OBJECT (g->web_view), "create-web-view", G_CALLBACK (create_web_view_cb), g->web_view); + g_signal_connect (G_OBJECT (g->web_view), "mime-type-policy-decision-requested", G_CALLBACK (mime_policy_cb), g->web_view); return scrolled_window; } @@ -2133,6 +2153,8 @@ add_binding (const gchar *key, const gchar *act) { printf ("Binding %-10s : %s\n", key, act); action = new_action(parts[0], parts[1]); + if (g_hash_table_remove (uzbl.bindings, key)) + g_warning ("Overwriting existing binding for \"%s\"", key); g_hash_table_replace(uzbl.bindings, g_strdup(key), action); g_strfreev(parts); } |