From e7578e27ccb638ca59ad250bc7a8049b3aa25df4 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 2 Apr 2011 08:14:56 -0600 Subject: fix returning to default encoding ("set current_encoding =") --- src/callbacks.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/callbacks.c') diff --git a/src/callbacks.c b/src/callbacks.c index deda426..360b0c4 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -292,8 +292,11 @@ cmd_caret_browsing() { void set_current_encoding() { - webkit_web_view_set_custom_encoding(uzbl.gui.web_view, - uzbl.behave.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); } -- cgit v1.2.3 From bdfb2fb35c4d6fa407361dcc99aefb00ff185e6d Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 12 Apr 2011 22:35:42 -0600 Subject: allow a second argument to the 'download' command that specifies a destination path --- examples/data/scripts/download.sh | 14 +++++++++++--- src/callbacks.c | 8 ++++++++ src/uzbl-core.c | 18 ++++++++++++------ 3 files changed, 31 insertions(+), 9 deletions(-) (limited to 'src/callbacks.c') diff --git a/examples/data/scripts/download.sh b/examples/data/scripts/download.sh index fe566ed..dbc9caf 100755 --- a/examples/data/scripts/download.sh +++ b/examples/data/scripts/download.sh @@ -1,9 +1,17 @@ #!/bin/sh # uzbl's example configuration sets this script up as its download_handler. -# when uzbl starts a download it runs this script. +# this script is run when uzbl encounters a URL that it can't display, and when +# a download is requested using the 'download' command. +# # if the script prints a file path to stdout, uzbl will save the download to -# that path. -# if nothing is printed to stdout, the download will be cancelled. +# that path using it's internal downloader. +# +# if nothing is printed to stdout, the internal download will be cancelled. +# you could do your own download handling in your script that way. + +# if $5 is set, it is the path that was passed to uzbl's "download" command. +# we want to use that if it's available. +[ -n "$5" ] && echo "$5" && exit . "$UZBL_UTIL_DIR/uzbl-dir.sh" diff --git a/src/callbacks.c b/src/callbacks.c index 360b0c4..703107b 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -837,6 +837,11 @@ download_cb(WebKitWebView *web_view, WebKitDownload *download, gpointer user_dat /* get the URI being downloaded */ const gchar *uri = webkit_download_get_uri(download); + /* get the destination path, if specified. + * this is only intended to be set when this function is trigger by an + * explicit download using uzbl's 'download' action. */ + const gchar *destination = user_data; + if (uzbl.state.verbose) printf("Download requested -> %s\n", uri); @@ -883,6 +888,9 @@ download_cb(WebKitWebView *web_view, WebKitDownload *download, gpointer user_dat gchar *total_size_s = g_strdup_printf("%d", total_size); g_array_append_val(a, total_size_s); + if(destination) + g_array_append_val(a, destination); + GString *result = g_string_new (""); run_parsed_command(c, a, result); diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 3a96482..204c89c 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -745,15 +745,21 @@ void download(WebKitWebView *web_view, GArray *argv, GString *result) { (void) result; - const gchar *uri = NULL; + const gchar *uri = argv_idx(argv, 0); + const gchar *destination = NULL; + if(argv->len > 1) + destination = argv_idx(argv, 1); - if(argv->len > 0) - uri = argv_idx(argv, 0); + WebKitNetworkRequest *req = webkit_network_request_new(uri); + WebKitDownload *download = webkit_download_new(req); + + download_cb(web_view, download, destination); + + if(webkit_download_get_destination_uri(download)) + webkit_download_start(download); else - uri = uzbl.state.uri; + g_object_unref(download); - WebKitNetworkRequest *req = webkit_network_request_new(uri); - webkit_web_view_request_download(web_view, req); g_object_unref(req); } -- cgit v1.2.3 From 4b106c13eb642f865c4bed2bc149c703e3fe7534 Mon Sep 17 00:00:00 2001 From: Rob Date: Fri, 19 Feb 2010 11:09:21 +0100 Subject: added modifier mask to key_press/release events --- src/callbacks.c | 4 ++-- src/events.c | 48 +++++++++++++++++++++++++++++++++++++++++++----- src/events.h | 2 +- 3 files changed, 46 insertions(+), 8 deletions(-) (limited to 'src/callbacks.c') diff --git a/src/callbacks.c b/src/callbacks.c index 703107b..c0064ec 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -549,7 +549,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_PRESS) - key_to_event(event->keyval, GDK_KEY_PRESS); + key_to_event(event->keyval, event->is_modifier?0:event->state, GDK_KEY_PRESS); return uzbl.behave.forward_keys ? FALSE : TRUE; } @@ -559,7 +559,7 @@ key_release_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_RELEASE) - key_to_event(event->keyval, GDK_KEY_RELEASE); + key_to_event(event->keyval, event->is_modifier?0:event->state, GDK_KEY_RELEASE); return uzbl.behave.forward_keys ? FALSE : TRUE; } diff --git a/src/events.c b/src/events.c index 58dddfc..45b2ef1 100644 --- a/src/events.c +++ b/src/events.c @@ -202,11 +202,46 @@ send_event(int type, const gchar *custom_event, ...) { /* Transform gdk key events to our own events */ void -key_to_event(guint keyval, gint mode) { +key_to_event(guint keyval, guint state, gint mode) { gchar ucs[7]; gint ulen; gchar *keyname; guint32 ukval = gdk_keyval_to_unicode(keyval); + GString *modifiers = g_string_new(""); + gchar *details; + + /* check modifier state*/ + if(state & GDK_MODIFIER_MASK) { + if(state & GDK_SHIFT_MASK) + g_string_append(modifiers, "Shift|"); + if(state & GDK_LOCK_MASK) + g_string_append(modifiers, "ScrollLock|"); + if(state & GDK_CONTROL_MASK) + g_string_append(modifiers, "Ctrl|"); + if(state & GDK_MOD1_MASK) + g_string_append(modifiers,"Mod1|"); + if(state & GDK_MOD2_MASK) + g_string_append(modifiers,"Mod2|"); + if(state & GDK_MOD3_MASK) + g_string_append(modifiers,"Mod3|"); + if(state & GDK_MOD4_MASK) + g_string_append(modifiers,"Mod4|"); + if(state & GDK_MOD5_MASK) + g_string_append(modifiers,"Mod5|"); + if(state & GDK_BUTTON1_MASK) + g_string_append(modifiers,"Button1|"); + if(state & GDK_BUTTON2_MASK) + g_string_append(modifiers,"Button2|"); + if(state & GDK_BUTTON3_MASK) + g_string_append(modifiers,"Button3|"); + if(state & GDK_BUTTON4_MASK) + g_string_append(modifiers,"Button4|"); + if(state & GDK_BUTTON5_MASK) + g_string_append(modifiers,"Button5|"); + + if(modifiers->str[modifiers->len-1] == '|') + g_string_overwrite(modifiers, modifiers->len-1, " "); + } /* check for printable unicode char */ /* TODO: Pass the keyvals through a GtkIMContext so that @@ -216,15 +251,18 @@ key_to_event(guint keyval, gint mode) { ulen = g_unichar_to_utf8(ukval, ucs); ucs[ulen] = 0; - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - NULL, TYPE_FORMATTEDSTR, ucs, NULL); + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_FORMATTEDSTR, ucs, NULL); } /* send keysym for non-printable chars */ else if((keyname = gdk_keyval_name(keyval))){ - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - NULL, TYPE_NAME, keyname , NULL); + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); } + g_string_free(modifiers, TRUE); + g_free(details); + } /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index bd519a6..97ed0a0 100644 --- a/src/events.h +++ b/src/events.h @@ -42,6 +42,6 @@ void send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED; void -key_to_event(guint keyval, gint mode); +key_to_event(guint keyval, guint state, int mode); #endif -- cgit v1.2.3 From 60b4e20512df7b29e19aa3bb17532fd177928d4d Mon Sep 17 00:00:00 2001 From: Rob Date: Fri, 19 Feb 2010 12:44:37 +0100 Subject: added MOD_PRESS/RELEASE events that denote X modifier keys --- src/callbacks.c | 4 ++-- src/events.c | 15 +++++++++------ src/events.h | 5 +++-- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'src/callbacks.c') diff --git a/src/callbacks.c b/src/callbacks.c index c0064ec..4c150ec 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -549,7 +549,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_PRESS) - key_to_event(event->keyval, event->is_modifier?0:event->state, GDK_KEY_PRESS); + key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_PRESS); return uzbl.behave.forward_keys ? FALSE : TRUE; } @@ -559,7 +559,7 @@ key_release_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_RELEASE) - key_to_event(event->keyval, event->is_modifier?0:event->state, GDK_KEY_RELEASE); + key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_RELEASE); return uzbl.behave.forward_keys ? FALSE : TRUE; } diff --git a/src/events.c b/src/events.c index 45b2ef1..013bd85 100644 --- a/src/events.c +++ b/src/events.c @@ -23,6 +23,8 @@ const char *event_table[LAST_EVENT] = { "REQUEST_STARTING" , "KEY_PRESS" , "KEY_RELEASE" , + "MOD_PRESS" , + "MOD_RELEASE" , "COMMAND_EXECUTED" , "LINK_HOVER" , "TITLE_CHANGED" , @@ -202,13 +204,12 @@ send_event(int type, const gchar *custom_event, ...) { /* Transform gdk key events to our own events */ void -key_to_event(guint keyval, guint state, gint mode) { +key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { gchar ucs[7]; gint ulen; gchar *keyname; guint32 ukval = gdk_keyval_to_unicode(keyval); GString *modifiers = g_string_new(""); - gchar *details; /* check modifier state*/ if(state & GDK_MODIFIER_MASK) { @@ -256,13 +257,15 @@ key_to_event(guint keyval, guint state, gint mode) { } /* send keysym for non-printable chars */ else if((keyname = gdk_keyval_name(keyval))){ - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + if(is_modifier) + send_event(mode == GDK_KEY_PRESS ? MOD_PRESS : MOD_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + else + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); } g_string_free(modifiers, TRUE); - g_free(details); - } /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index 97ed0a0..35e0ecd 100644 --- a/src/events.h +++ b/src/events.h @@ -13,7 +13,8 @@ enum event_type { LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, REQUEST_STARTING, - KEY_PRESS, KEY_RELEASE, COMMAND_EXECUTED, + KEY_PRESS, KEY_RELEASE, MOD_PRESS, MOD_RELEASE, + COMMAND_EXECUTED, LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, VARIABLE_SET, FIFO_SET, SOCKET_SET, @@ -42,6 +43,6 @@ void send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED; void -key_to_event(guint keyval, guint state, int mode); +key_to_event(guint keyval, guint state, guint is_modifier, int mode); #endif -- cgit v1.2.3 From 5a46390e61faaea2d88ec49a1a81997672f4150b Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 22 Feb 2010 09:03:15 +0100 Subject: show modmask on MOD_PRESS/RELEASE --- src/callbacks.c | 4 ++-- src/events.c | 33 +++++++++++++++++++++------------ src/events.h | 3 +++ 3 files changed, 26 insertions(+), 14 deletions(-) (limited to 'src/callbacks.c') diff --git a/src/callbacks.c b/src/callbacks.c index 4c150ec..6821700 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -549,7 +549,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_PRESS) - key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_PRESS); + key_to_event(event->keyval, event->state, event->is_modifier, GDK_KEY_PRESS); return uzbl.behave.forward_keys ? FALSE : TRUE; } @@ -559,7 +559,7 @@ key_release_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_RELEASE) - key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_RELEASE); + key_to_event(event->keyval, event->state, event->is_modifier, GDK_KEY_RELEASE); return uzbl.behave.forward_keys ? FALSE : TRUE; } diff --git a/src/events.c b/src/events.c index 013bd85..12f9d83 100644 --- a/src/events.c +++ b/src/events.c @@ -202,16 +202,10 @@ send_event(int type, const gchar *custom_event, ...) { va_end (vargs); } -/* Transform gdk key events to our own events */ -void -key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { - gchar ucs[7]; - gint ulen; - gchar *keyname; - guint32 ukval = gdk_keyval_to_unicode(keyval); +gchar * +get_modifier_mask(guint state) { GString *modifiers = g_string_new(""); - /* check modifier state*/ if(state & GDK_MODIFIER_MASK) { if(state & GDK_SHIFT_MASK) g_string_append(modifiers, "Shift|"); @@ -244,6 +238,21 @@ key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { g_string_overwrite(modifiers, modifiers->len-1, " "); } + return g_string_free(modifiers, FALSE); +} + +/* Transform gdk key events to our own events */ +void +key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { + gchar ucs[7]; + gint ulen; + gchar *keyname; + guint32 ukval = gdk_keyval_to_unicode(keyval); + gchar *modifiers = NULL; + + /* check modifier state*/ + modifiers = get_modifier_mask(state); + /* check for printable unicode char */ /* TODO: Pass the keyvals through a GtkIMContext so that * we also get combining chars right @@ -253,19 +262,19 @@ key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { ucs[ulen] = 0; send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_FORMATTEDSTR, ucs, NULL); + TYPE_STR, modifiers, TYPE_FORMATTEDSTR, ucs, NULL); } /* send keysym for non-printable chars */ else if((keyname = gdk_keyval_name(keyval))){ if(is_modifier) send_event(mode == GDK_KEY_PRESS ? MOD_PRESS : MOD_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + TYPE_STR, modifiers, TYPE_NAME, keyname , NULL); else send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + TYPE_STR, modifiers, TYPE_NAME, keyname , NULL); } - g_string_free(modifiers, TRUE); + g_free(modifiers); } /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index 35e0ecd..0c40206 100644 --- a/src/events.h +++ b/src/events.h @@ -42,6 +42,9 @@ vsend_event(int type, const gchar *custom_event, va_list vargs); void send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED; +gchar * +get_modifier_mask(guint state); + void key_to_event(guint keyval, guint state, guint is_modifier, int mode); -- cgit v1.2.3