diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README | 3 | ||||
-rwxr-xr-x | examples/data/scripts/follow.sh | 4 | ||||
-rwxr-xr-x | examples/data/scripts/load_cookies.sh | 2 | ||||
-rw-r--r-- | src/callbacks.c | 45 | ||||
-rw-r--r-- | src/callbacks.h | 3 | ||||
-rw-r--r-- | src/io.c | 2 | ||||
-rw-r--r-- | src/util.c | 2 | ||||
-rw-r--r-- | src/uzbl-core.c | 1 | ||||
-rw-r--r-- | src/uzbl-core.h | 3 | ||||
-rw-r--r-- | src/variables.c | 2 |
11 files changed, 27 insertions, 42 deletions
@@ -25,7 +25,7 @@ ARCH:=$(shell uname -m) COMMIT_HASH:=$(shell ./misc/hash.sh) -CPPFLAGS += -DARCH=\"$(ARCH)\" -DCOMMIT=\"$(COMMIT_HASH)\" +CPPFLAGS += -D_BSD_SOURCE -D_POSIX_SOURCE -DARCH=\"$(ARCH)\" -DCOMMIT=\"$(COMMIT_HASH)\" PKG_CFLAGS:=$(shell pkg-config --cflags $(REQ_PKGS)) @@ -373,6 +373,9 @@ file). access the contents of other `file://` URIs. (default 0). * `follow_hint_keys`: keys for keyboard-based navigation and link highlighting +* `handle_multi_click`: If set to 1, event handlers attached to `2Button*` + and `3Button*` bindings will only be used instead of the default actions in + WebKit (default 0). * `ssl_ca_file`: File that contains CA certificates. * `ssl_verify`: If set to 1, uzbl won't connect to "https" url unless it can validate certificate presented by remote server against `ssl_ca_file`. diff --git a/examples/data/scripts/follow.sh b/examples/data/scripts/follow.sh index 5ed0fbb..3518059 100755 --- a/examples/data/scripts/follow.sh +++ b/examples/data/scripts/follow.sh @@ -14,7 +14,9 @@ case "$result" in printf 'set mode=\nevent KEYCMD_CLEAR\n' > "$UZBL_FIFO" ;; XXXNEW_WINDOWXXX*) - printf "set mode=\nevent KEYCMD_CLEAR\nevent NEW_WINDOW $@\n" > "$UZBL_FIFO" + echo "set mode= +event KEYCMD_CLEAR +event NEW_WINDOW $@" > "$UZBL_FIFO" ;; XXXRETURNED_URIXXX*) uriaction=$1 diff --git a/examples/data/scripts/load_cookies.sh b/examples/data/scripts/load_cookies.sh index 380301e..5feca05 100755 --- a/examples/data/scripts/load_cookies.sh +++ b/examples/data/scripts/load_cookies.sh @@ -14,7 +14,7 @@ BEGIN { } $0 ~ /^#HttpOnly_/ { gsub(/@/, "\\@") - printf("add_cookie \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", substr($1,length("#HttpOnly_"),length($1)), $3, $6, $7, scheme[$4], $5) + printf("add_cookie \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", substr($1,length("#HttpOnly_")+1,length($1)), $3, $6, $7, scheme[$4], $5) } $0 !~ /^#/ { gsub(/@/, "\\@") diff --git a/src/callbacks.c b/src/callbacks.c index 23b8d55..eee9f69 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -95,17 +95,6 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer } void -selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) { - (void)ud; - gchar *tmp; - - webkit_web_view_copy_clipboard(webkitwebview); - tmp = gtk_clipboard_wait_for_text(gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); - send_event(SELECTION_CHANGED, NULL, TYPE_STR, tmp ? tmp : "", NULL); - g_free(tmp); -} - -void destroy_cb (GtkWidget* widget, gpointer data) { (void) widget; (void) data; @@ -165,13 +154,15 @@ button_press_cb (GtkWidget* window, GdkEventButton* event) { gboolean propagate = FALSE, sendev = FALSE; - context = get_click_context(NULL); + // Save last button click for use in menu + if(uzbl.state.last_button) + gdk_event_free((GdkEvent *)uzbl.state.last_button); + uzbl.state.last_button = (GdkEventButton *)gdk_event_copy((GdkEvent *)event); - if(event->type == GDK_BUTTON_PRESS) { - if(uzbl.state.last_button) - gdk_event_free((GdkEvent *)uzbl.state.last_button); - uzbl.state.last_button = (GdkEventButton *)gdk_event_copy((GdkEvent *)event); + // Grab context from last click + context = get_click_context(); + if(event->type == GDK_BUTTON_PRESS) { /* left click */ if(event->button == 1) { if((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE)) @@ -191,29 +182,25 @@ button_press_cb (GtkWidget* window, GdkEventButton* event) { sendev = TRUE; propagate = TRUE; } - - if(sendev) { - button_to_event(event->button, event->state, GDK_BUTTON_PRESS); - } } if(event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS) { if(event->button == 1 && !(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE) && (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT)) { sendev = TRUE; - propagate = TRUE; + propagate = uzbl.state.handle_multi_button; } else if(event->button == 2 && !(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE)) { sendev = TRUE; - propagate = TRUE; + propagate = uzbl.state.handle_multi_button; } - else if(event->button > 3) { + else if(event->button >= 3) { sendev = TRUE; - propagate = TRUE; + propagate = uzbl.state.handle_multi_button; } + } - if(sendev) { - button_to_event(event->button, event->state, event->type); - } + if(sendev) { + button_to_event(event->button, event->state, event->type); } return propagate; @@ -226,7 +213,7 @@ button_release_cb (GtkWidget* window, GdkEventButton* event) { gboolean propagate = FALSE, sendev = FALSE; - context = get_click_context(NULL); + context = get_click_context(); if(event->type == GDK_BUTTON_RELEASE) { if(event->button == 2 && !(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE)) { sendev = TRUE; @@ -624,7 +611,7 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { return; /* check context */ - if((context = get_click_context(NULL)) == -1) + if((context = get_click_context()) == -1) return; for(i=0; i < uzbl.gui.menu_items->len; i++) { diff --git a/src/callbacks.h b/src/callbacks.h index e9240b5..6a10205 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -19,9 +19,6 @@ gboolean load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud); void -selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud); - -void destroy_cb (GtkWidget* widget, gpointer data); gboolean @@ -1,5 +1,3 @@ -#define _POSIX_SOURCE - #include <stdio.h> #include "events.h" @@ -1,5 +1,3 @@ -#define _POSIX_SOURCE - #include <stdlib.h> #include <unistd.h> #include <string.h> diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 770d832..9db034a 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -771,7 +771,6 @@ create_scrolled_win() { "signal::button-release-event", (GCallback)button_release_cb, NULL, "signal::motion-notify-event", (GCallback)motion_notify_cb, NULL, "signal::notify::title", (GCallback)title_change_cb, NULL, - "signal::selection-changed", (GCallback)selection_changed_cb, NULL, "signal::notify::progress", (GCallback)progress_change_cb, NULL, "signal::notify::load-status", (GCallback)load_status_change_cb, NULL, "signal::notify::uri", (GCallback)uri_change_cb, NULL, diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 29b7b64..1f9613e 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -13,8 +13,6 @@ #ifndef __UZBL_CORE__ #define __UZBL_CORE__ -#define _POSIX_SOURCE - #include <glib/gstdio.h> #include <gtk/gtk.h> #include <gdk/gdkx.h> @@ -113,6 +111,7 @@ typedef struct { /* Events */ int socket_id; gboolean events_stdout; + gboolean handle_multi_button; GPtrArray* event_buffer; gchar** connect_socket_names; } State; diff --git a/src/variables.c b/src/variables.c index 8d874c2..e4763bc 100644 --- a/src/variables.c +++ b/src/variables.c @@ -735,6 +735,8 @@ const struct var_name_to_ptr_t { { "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)}, { "print_events", PTR_V_INT(uzbl.state.events_stdout, 1, NULL)}, + { "handle_multi_button", PTR_V_INT(uzbl.state.handle_multi_button, 1, NULL)}, + { "show_status", PTR_V_INT_GETSET(show_status)}, { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, set_status_top)}, { "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)}, |