aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c137
-rw-r--r--src/callbacks.h22
-rw-r--r--src/cookie-jar.c57
-rw-r--r--src/events.c104
-rw-r--r--src/events.h2
-rwxr-xr-xsrc/uzbl-browser73
-rw-r--r--src/uzbl-core.c84
-rw-r--r--src/uzbl-core.h4
8 files changed, 294 insertions, 189 deletions
diff --git a/src/callbacks.c b/src/callbacks.c
index f07d63e..f596472 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -46,6 +46,19 @@ set_authentication_handler() {
}
void
+set_status_background() {
+ GdkColor color;
+ gdk_color_parse (uzbl.behave.status_background, &color);
+ /* 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) */
+ if (uzbl.gui.main_window)
+ gtk_widget_modify_bg (uzbl.gui.main_window, GTK_STATE_NORMAL, &color);
+ else if (uzbl.gui.plug)
+ gtk_widget_modify_bg (GTK_WIDGET(uzbl.gui.plug), GTK_STATE_NORMAL, &color);
+}
+
+void
set_icon() {
if(file_exists(uzbl.gui.icon)) {
if (uzbl.gui.main_window)
@@ -182,6 +195,12 @@ cmd_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);
@@ -395,17 +414,43 @@ title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
}
void
-progress_change_cb (WebKitWebView* page, gint progress, gpointer data) {
- (void) page;
- (void) data;
- gchar *prg_str;
-
- prg_str = itos(progress);
+progress_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
+ (void) param_spec;
+ int progress = webkit_web_view_get_progress(web_view) * 100;
+ gchar *prg_str = itos(progress);
send_event(LOAD_PROGRESS, prg_str, NULL);
g_free(prg_str);
}
void
+load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
+ (void) param_spec;
+
+ WebKitWebFrame *frame = webkit_web_view_get_main_frame(web_view);
+ WebKitLoadStatus status = webkit_web_view_get_load_status(web_view);
+ switch(status) {
+ case WEBKIT_LOAD_PROVISIONAL:
+ send_event(LOAD_START, uzbl.state.uri, NULL);
+ break;
+ case WEBKIT_LOAD_COMMITTED:
+ g_free (uzbl.state.uri);
+ GString* newuri = g_string_new (webkit_web_frame_get_uri (frame));
+ uzbl.state.uri = g_string_free (newuri, FALSE);
+
+ send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL);
+ break;
+ case WEBKIT_LOAD_FINISHED:
+ send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL);
+ break;
+ case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT:
+ break; /* we don't do anything with this (yet) */
+ case WEBKIT_LOAD_FAILED:
+ break; /* load_error_cb will handle this case */
+ }
+
+}
+
+void
selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) {
(void)ud;
gchar *tmp;
@@ -417,23 +462,6 @@ selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) {
}
void
-load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
- (void) page;
- (void) data;
-
- send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL);
-}
-
-void
-load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
- (void) page;
- (void) frame;
- (void) data;
-
- send_event(LOAD_START, uzbl.state.uri, NULL);
-}
-
-void
load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud) {
(void) page;
(void) frame;
@@ -447,17 +475,6 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer
}
void
-load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
- (void) page;
- (void) data;
- g_free (uzbl.state.uri);
- GString* newuri = g_string_new (webkit_web_frame_get_uri (frame));
- uzbl.state.uri = g_string_free (newuri, FALSE);
-
- send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL);
-}
-
-void
destroy_cb (GtkWidget* widget, gpointer data) {
(void) widget;
(void) data;
@@ -589,9 +606,9 @@ motion_notify_cb(GtkWidget* window, GdkEventMotion* event, gpointer user_data) {
(void) event;
(void) user_data;
- gchar *details;
- details = g_strdup_printf("%.0lf %.0lf %u", event->x, event->y, event->state);
+ gchar *details = g_strdup_printf("%.0lf %.0lf %u", event->x, event->y, event->state);
send_event(PTR_MOVE, details, NULL);
+ g_free(details);
return FALSE;
}
@@ -703,11 +720,10 @@ create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) {
if (strncmp(uri, "javascript:", strlen("javascript:")) == 0) {
eval_js(uzbl.gui.web_view, (gchar*) uri + strlen("javascript:"), NULL, "javascript:");
+ gtk_widget_destroy(GTK_WIDGET(web_view));
}
else
send_event(NEW_WINDOW, uri, NULL);
-
- gtk_widget_destroy(GTK_WIDGET(web_view));
}
@@ -717,7 +733,7 @@ create_web_view_js_cb (WebKitWebView* web_view, gpointer user_data) {
(void) user_data;
g_object_connect (web_view, "signal::notify::uri",
- G_CALLBACK(create_web_view_js2_cb), NULL);
+ G_CALLBACK(create_web_view_js2_cb), NULL, NULL);
return TRUE;
}
@@ -764,6 +780,44 @@ download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) {
return (FALSE);
}
+gboolean
+scroll_vert_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);
+ gchar* details;
+ details = g_strdup_printf("%g %g %g %g", value, min, max, page);
+
+ send_event(SCROLL_VERT, details, NULL);
+
+ g_free(details);
+
+ return (FALSE);
+}
+
+gboolean
+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);
+ gchar* details;
+ details = g_strdup_printf("%g %g %g %g", value, min, max, page);
+
+ send_event(SCROLL_HORIZ, details, NULL);
+
+ g_free(details);
+
+ return (FALSE);
+}
+
void
run_menu_command(GtkWidget *menu, const char *line) {
(void) menu;
@@ -832,5 +886,10 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) {
void
cmd_set_cookie_handler() {
+ if(uzbl.behave.cookie_handler[0] == 0) {
+ g_free(uzbl.behave.cookie_handler);
+ uzbl.behave.cookie_handler = NULL;
+ }
+
uzbl_cookie_jar_set_handler(uzbl.net.soup_cookie_jar, uzbl.behave.cookie_handler);
}
diff --git a/src/callbacks.h b/src/callbacks.h
index 0b89f96..a4258f2 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -16,6 +16,9 @@ void
set_authentication_handler();
void
+set_status_background();
+
+void
set_icon();
void
@@ -59,6 +62,9 @@ void
cmd_set_zoom_type();
void
+cmd_enable_pagecache();
+
+void
cmd_disable_plugins();
void
@@ -143,16 +149,10 @@ void
title_change_cb (WebKitWebView* web_view, GParamSpec param_spec);
void
-progress_change_cb (WebKitWebView* page, gint progress, gpointer data);
-
-void
-load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
+progress_change_cb (WebKitWebView* web_view, GParamSpec param_spec);
void
-load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
-
-void
-load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
+load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec);
void
load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud);
@@ -211,5 +211,11 @@ button_release_cb (GtkWidget* window, GdkEventButton* event);
gboolean
focus_cb(GtkWidget* window, GdkEventFocus* event, void *ud);
+gboolean
+scroll_vert_cb(GtkAdjustment *adjust, void *w);
+
+gboolean
+scroll_horiz_cb(GtkAdjustment *adjust, void *w);
+
void
cmd_set_cookie_handler();
diff --git a/src/cookie-jar.c b/src/cookie-jar.c
index 4bb1925..f2e340b 100644
--- a/src/cookie-jar.c
+++ b/src/cookie-jar.c
@@ -35,6 +35,7 @@ static bool has_socket_handler(UzblCookieJar *jar) {
static void
soup_cookie_jar_socket_init(UzblCookieJar *jar) {
+ jar->handler = NULL;
jar->socket_path = NULL;
jar->connection_fd = -1;
}
@@ -69,14 +70,16 @@ uzbl_cookie_jar_set_handler(UzblCookieJar *jar, const gchar* handler) {
}
char *get_cookies(UzblCookieJar *jar, SoupURI *uri) {
- gchar *result;
+ gchar *result, *path;
GString *s = g_string_new ("GET");
+ path = uri->path[0] ? uri->path : "/";
+
if(has_socket_handler(jar)) {
g_string_append_c(s, 0); /* null-terminate the GET */
g_string_append_len(s, uri->scheme, strlen(uri->scheme)+1);
g_string_append_len(s, uri->host, strlen(uri->host)+1 );
- g_string_append_len(s, uri->path, strlen(uri->path)+1 );
+ g_string_append_len(s, path, strlen(path)+1 );
result = do_socket_request(jar, s->str, s->len);
/* try it again; older cookie daemons closed the connection after each request */
@@ -97,33 +100,43 @@ static void
request_started(SoupSessionFeature *feature, SoupSession *session,
SoupMessage *msg, SoupSocket *socket) {
(void) session; (void) socket;
+ gchar *cookies;
UzblCookieJar *jar = UZBL_COOKIE_JAR (feature);
SoupURI *uri = soup_message_get_uri(msg);
+ gboolean add_to_internal_jar = false;
- gchar *cookies = get_cookies(jar, uri);
+ if(jar->handler) {
+ cookies = get_cookies(jar, uri);
+ } else {
+ /* no handler is set, fall back to the internal soup cookie jar */
+ cookies = soup_cookie_jar_get_cookies(SOUP_COOKIE_JAR(jar), soup_message_get_uri (msg), TRUE);
+ }
- if (cookies && *cookies != 0) {
+ if (cookies && cookies[0] != 0) {
const gchar *next_cookie_start = cookies;
- /* add the cookie data that we just obtained from the cookie handler
- to the cookie jar so that javascript has access to them.
- we set this flag so that we don't trigger the PUT handler. */
- jar->in_get_callback = true;
- do {
- SoupCookie *soup_cookie = soup_cookie_parse(next_cookie_start, uri);
- if(soup_cookie)
- soup_cookie_jar_add_cookie(SOUP_COOKIE_JAR(uzbl.net.soup_cookie_jar), soup_cookie);
- next_cookie_start = strchr(next_cookie_start, ';');
- } while(next_cookie_start++ != NULL);
- jar->in_get_callback = false;
+ if (add_to_internal_jar) {
+ /* add the cookie data that we just obtained from the cookie handler
+ to the cookie jar so that javascript has access to them.
+ we set this flag so that we don't trigger the PUT handler. */
+ jar->in_get_callback = true;
+ do {
+ SoupCookie *soup_cookie = soup_cookie_parse(next_cookie_start, uri);
+ if(soup_cookie)
+ soup_cookie_jar_add_cookie(SOUP_COOKIE_JAR(uzbl.net.soup_cookie_jar), soup_cookie);
+ next_cookie_start = strchr(next_cookie_start, ';');
+ } while(next_cookie_start++ != NULL);
+ jar->in_get_callback = false;
+ }
soup_message_headers_replace (msg->request_headers, "Cookie", cookies);
-
- g_free (cookies);
} else {
soup_message_headers_remove (msg->request_headers, "Cookie");
}
+
+ if(cookies)
+ g_free (cookies);
}
static void
@@ -149,7 +162,8 @@ changed(SoupCookieJar *jar, SoupCookie *old_cookie, SoupCookie *new_cookie) {
GString *s = g_string_new ("PUT");
- gchar *scheme = (new_cookie->secure == TRUE) ? "https" : "http";
+ gchar *scheme = new_cookie->secure ? "https" : "http";
+
if(has_socket_handler(uzbl_jar)) {
g_string_append_c(s, 0); /* null-terminate the PUT */
g_string_append_len(s, scheme, strlen(scheme)+1);
@@ -174,7 +188,7 @@ changed(SoupCookieJar *jar, SoupCookie *old_cookie, SoupCookie *new_cookie) {
static void
setup_handler(UzblCookieJar *jar) {
- if(strncmp(jar->handler, "talk_to_socket", strlen("talk_to_socket")) == 0) {
+ if(jar->handler && strncmp(jar->handler, "talk_to_socket", strlen("talk_to_socket")) == 0) {
/* extract the socket path from the handler. */
jar->socket_path = jar->handler + strlen("talk_to_socket");
while(isspace(*jar->socket_path))
@@ -228,7 +242,7 @@ static gchar *do_socket_request(UzblCookieJar *jar, gchar *request, int request_
gchar *result = NULL;
if(jar->connection_fd < 0)
- connect_cookie_socket(jar); /* connection was lost, reconnect */
+ connect_cookie_socket(jar); /* connection was lost, reconnect */
/* write request */
ret = write(jar->connection_fd, request, request_length);
@@ -248,7 +262,8 @@ static gchar *do_socket_request(UzblCookieJar *jar, gchar *request, int request_
if(errno == EINTR) continue;
g_printerr("talk_to_socket: poll failed while waiting for input (%s)\n",
strerror(errno));
- disconnect_cookie_socket(jar);
+ if(errno != ETIMEDOUT)
+ disconnect_cookie_socket(jar);
return NULL;
}
diff --git a/src/events.c b/src/events.c
index c209550..20e3675 100644
--- a/src/events.c
+++ b/src/events.c
@@ -46,6 +46,9 @@ const char *event_table[LAST_EVENT] = {
"COMMAND_ERROR" ,
"BUILTINS" ,
"PTR_MOVE"
+ "PTR_MOVE" ,
+ "SCROLL_VERT" ,
+ "SCROLL_HORIZ"
};
void
@@ -57,56 +60,53 @@ event_buffer_timeout(guint sec) {
setitimer(ITIMER_REAL, &t, NULL);
}
-
-void
-send_event_socket(GString *msg) {
+static void
+send_event_sockets(GPtrArray *sockets, GString *msg) {
GError *error = NULL;
- GString *tmp;
- GIOChannel *gio = NULL;
GIOStatus ret;
gsize len;
- guint i=0, j=0;
+ guint i=0;
+
+ while(i < sockets->len) {
+ GIOChannel *gio = g_ptr_array_index(sockets, i++);
+
+ if(gio && gio->is_writeable && msg) {
+ ret = g_io_channel_write_chars (gio,
+ msg->str, msg->len,
+ &len, &error);
+
+ if (ret == G_IO_STATUS_ERROR)
+ g_warning ("Error sending event to socket: %s", error->message);
+ else
+ g_io_channel_flush(gio, &error);
+ }
+ }
+}
+
+static void
+replay_buffered_events() {
+ guint i = 0;
+ event_buffer_timeout(0);
+
+ /* replay buffered events */
+ while(i < uzbl.state.event_buffer->len) {
+ GString *tmp = g_ptr_array_index(uzbl.state.event_buffer, i++);
+ send_event_sockets(uzbl.comm.connect_chan, tmp);
+ g_string_free(tmp, TRUE);
+ }
+
+ g_ptr_array_free(uzbl.state.event_buffer, TRUE);
+ uzbl.state.event_buffer = NULL;
+}
+
+void
+send_event_socket(GString *msg) {
/* write to all --connect-socket sockets */
if(uzbl.comm.connect_chan) {
- while(i < uzbl.comm.connect_chan->len) {
- gio = g_ptr_array_index(uzbl.comm.connect_chan, i++);
- j=0;
-
- if(gio && gio->is_writeable) {
- if(uzbl.state.event_buffer) {
- event_buffer_timeout(0);
-
- /* replay buffered events */
- while(j < uzbl.state.event_buffer->len) {
- tmp = g_ptr_array_index(uzbl.state.event_buffer, j++);
- ret = g_io_channel_write_chars (gio,
- tmp->str, tmp->len,
- &len, &error);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
-
- if(msg) {
- ret = g_io_channel_write_chars (gio,
- msg->str, msg->len,
- &len, &error);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
- }
- if(uzbl.state.event_buffer) {
- g_ptr_array_free(uzbl.state.event_buffer, TRUE);
- uzbl.state.event_buffer = NULL;
- }
+ send_event_sockets(uzbl.comm.connect_chan, msg);
+ if(uzbl.state.event_buffer)
+ replay_buffered_events();
}
/* buffer events until a socket is set and connected
* or a timeout is encountered
@@ -118,22 +118,8 @@ send_event_socket(GString *msg) {
}
/* write to all client sockets */
- i=0;
if(msg && uzbl.comm.client_chan) {
- while(i < uzbl.comm.client_chan->len) {
- gio = g_ptr_array_index(uzbl.comm.client_chan, i++);
-
- if(gio && gio->is_writeable && msg) {
- ret = g_io_channel_write_chars (gio,
- msg->str, msg->len,
- &len, &error);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
+ send_event_sockets(uzbl.comm.client_chan, msg);
}
}
diff --git a/src/events.h b/src/events.h
index 1bd8804..bc7960d 100644
--- a/src/events.h
+++ b/src/events.h
@@ -15,7 +15,7 @@ enum event_type {
LINK_UNHOVER, FORM_ACTIVE, ROOT_ACTIVE,
FOCUS_LOST, FOCUS_GAINED, FILE_INCLUDED,
PLUG_CREATED, COMMAND_ERROR, BUILTINS,
- PTR_MOVE,
+ PTR_MOVE, SCROLL_VERT, SCROLL_HORIZ,
/* must be last entry */
LAST_EVENT
diff --git a/src/uzbl-browser b/src/uzbl-browser
index 9f6847b..88d3742 100755
--- a/src/uzbl-browser
+++ b/src/uzbl-browser
@@ -8,27 +8,23 @@
# to your $XDG_DATA_HOME/uzbl/scripts/ and edit them
PREFIX=/usr/local
-if [ -z "$XDG_DATA_HOME" ]
-then
- export XDG_DATA_HOME=$HOME/.local/share
-fi
+EXAMPLES=$PREFIX/share/uzbl/examples
-if [ -z "$XDG_CACHE_HOME" ]
-then
- export XDG_CACHE_HOME=$HOME/.cache
-fi
+XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
+export XDG_DATA_HOME
-if [ -z "$XDG_CONFIG_HOME" ]
-then
- export XDG_CONFIG_HOME=$HOME/.config
-fi
+XDG_CACHE_HOME=${XDG_CACHE_HOME:-$HOME/.cache}
+export XDG_CACHE_HOME
+
+XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config}
+export XDG_CONFIG_HOME
# assure the relevant directories exist.
-for dir in $XDG_CACHE_HOME/uzbl $XDG_DATA_HOME/uzbl $XDG_CONFIG_HOME/uzbl
+for dir in "$XDG_CACHE_HOME"/uzbl "$XDG_DATA_HOME"/uzbl "$XDG_CONFIG_HOME"/uzbl
do
- if [ ! -d $dir ]
+ if [ ! -d "$dir" ]
then
- if ! mkdir -p $dir
+ if ! mkdir -p "$dir"
then
echo "could not create $dir" >&2
exit 2
@@ -37,27 +33,48 @@ do
done
# if no config exists yet in the recommended location, put the default (recommended) config there
-if [ ! -f $XDG_CONFIG_HOME/uzbl/config ]
+if [ ! -f "$XDG_CONFIG_HOME"/uzbl/config ]
then
- if ! cp $PREFIX/share/uzbl/examples/config/config $XDG_CONFIG_HOME/uzbl/config
+ if [ ! -r "$EXAMPLES"/config/config ]
then
- echo "Could not copy default config to $XDG_CONFIG_HOME/uzbl/config" >&2
+ echo "Error: Global config not found; please check if your distribution ships them separately"
exit 3
fi
+ if ! cp "$EXAMPLES"/config/config "$XDG_CONFIG_HOME"/uzbl/config
+ then
+ echo "Could not copy default config to $XDG_CONFIG_HOME/uzbl/config" >&2
+ # Run with the global config as a last resort
+ config_file=$EXAMPLES/config/config
+ fi
fi
-# uzbl-cookie-manager will exit if another instance is already running
-uzbl-cookie-manager
+# this variable is used by the default helper scripts as a location to
+# load shared code from
+if [ -z "$UZBL_UTIL_DIR" ]
+then
+ if [ -d "$XDG_DATA_HOME"/uzbl/scripts/util ]
+ then
+ UZBL_UTIL_DIR=$XDG_DATA_HOME/uzbl/scripts/util
+ elif [ -d $EXAMPLES/data/scripts/util ]
+ then
+ UZBL_UTIL_DIR=$EXAMPLES/data/scripts/util
+ fi
+ export UZBL_UTIL_DIR
+fi
-DAEMON_SOCKET=$XDG_CACHE_HOME/uzbl/event_daemon
-DAEMON_PID=${DAEMON_SOCKET}.pid
+# uzbl-cookie-manager will exit if another instance is already running.
+# we could also check if its pid file exists to avoid having to spawn it.
+#if [ ! -f "$XDG_CACHE_HOME"/uzbl/cookie_daemon_socket.pid ]
+#then
+ ${UZBL_COOKIE_DAEMON:-uzbl-cookie-manager}
+#fi
-# uzbl-event-manager will exit if one is already running, but you could
-# check if the pid file exists here to avoid having to spawn it for a
-# slight speedup
-#if [ -f "$DAEMON_PID" ]
+# uzbl-event-manager will exit if one is already running.
+# we could also check if its pid file exists to avoid having to spawn it.
+DAEMON_SOCKET="$XDG_CACHE_HOME"/uzbl/event_daemon
+#if [ ! -f "$DAEMON_SOCKET".pid ]
#then
- uzbl-event-manager -va start
+ ${UZBL_EVENT_MANAGER:-uzbl-event-manager -va start}
#fi
-exec uzbl-core "$@" --connect-socket $DAEMON_SOCKET
+exec uzbl-core "$@" ${config_file:+--config "$config_file"} --connect-socket $DAEMON_SOCKET
diff --git a/src/uzbl-core.c b/src/uzbl-core.c
index 4125514..cb20fd7 100644
--- a/src/uzbl-core.c
+++ b/src/uzbl-core.c
@@ -85,7 +85,7 @@ const struct var_name_to_ptr_t {
{ "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)},
{ "status_top", PTR_V_INT(uzbl.behave.status_top, 1, move_statusbar)},
{ "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)},
- { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, NULL)},
+ { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, set_status_background)},
{ "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)},
{ "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)},
{ "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)},
@@ -117,6 +117,7 @@ const struct var_name_to_ptr_t {
{ "fantasy_font_family", PTR_V_STR(uzbl.behave.fantasy_font_family, 1, cmd_fantasy_font_family)},
{ "monospace_size", PTR_V_INT(uzbl.behave.monospace_size, 1, cmd_font_size)},
{ "minimum_font_size", PTR_V_INT(uzbl.behave.minimum_font_size, 1, cmd_minimum_font_size)},
+ { "enable_pagecache", PTR_V_INT(uzbl.behave.enable_pagecache, 1, cmd_enable_pagecache)},
{ "disable_plugins", PTR_V_INT(uzbl.behave.disable_plugins, 1, cmd_disable_plugins)},
{ "disable_scripts", PTR_V_INT(uzbl.behave.disable_scripts, 1, cmd_disable_scripts)},
{ "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)},
@@ -654,7 +655,8 @@ struct {const char *key; CommandInfo value;} cmdlist[] =
{ "menu_image_remove", {menu_remove_image, TRUE} },
{ "menu_editable_remove", {menu_remove_edit, TRUE} },
{ "hardcopy", {hardcopy, TRUE} },
- { "include", {include, TRUE} }
+ { "include", {include, TRUE} },
+ { "show_inspector", {show_inspector, 0} }
};
void
@@ -946,6 +948,13 @@ include(WebKitWebView *page, GArray *argv, GString *result) {
}
void
+show_inspector(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page; (void) argv; (void) result;
+
+ webkit_web_inspector_show(uzbl.gui.inspector);
+}
+
+void
act_dump_config() {
dump_config();
}
@@ -1211,6 +1220,7 @@ run_command (const gchar *command, const guint npre, const gchar **args,
gchar *pid = itos(getpid());
gchar *xwin = itos(uzbl.xwin);
guint i;
+
sharg_append(a, command);
for (i = 0; i < npre; i++) /* add n args before the default vars */
sharg_append(a, args[i]);
@@ -1817,32 +1827,29 @@ void
update_title (void) {
Behaviour *b = &uzbl.behave;
gchar *parsed;
+ const gchar *current_title;
+ /* this check is here because if we're starting up or shutting down it might not be a window */
+ gboolean have_main_window = !uzbl.state.plug_mode && GTK_IS_WINDOW(uzbl.gui.main_window);
+
+ if(have_main_window)
+ current_title = gtk_window_get_title (GTK_WINDOW(uzbl.gui.main_window));
if (b->show_status) {
- if (b->title_format_short) {
+ if (b->title_format_short && have_main_window) {
parsed = expand(b->title_format_short, 0);
- if (uzbl.gui.main_window)
+ if(!current_title || strcmp(current_title, parsed))
gtk_window_set_title (GTK_WINDOW(uzbl.gui.main_window), parsed);
g_free(parsed);
}
- if (b->status_format) {
+ if (b->status_format && GTK_IS_LABEL(uzbl.gui.mainbar_label)) {
parsed = expand(b->status_format, 0);
gtk_label_set_markup(GTK_LABEL(uzbl.gui.mainbar_label), parsed);
g_free(parsed);
}
- if (b->status_background) {
- GdkColor color;
- gdk_color_parse (b->status_background, &color);
- //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)
- if (uzbl.gui.main_window)
- gtk_widget_modify_bg (uzbl.gui.main_window, GTK_STATE_NORMAL, &color);
- else if (uzbl.gui.plug)
- gtk_widget_modify_bg (GTK_WIDGET(uzbl.gui.plug), GTK_STATE_NORMAL, &color);
- }
} else {
- if (b->title_format_long) {
+ if (b->title_format_long && have_main_window) {
parsed = expand(b->title_format_long, 0);
- if (uzbl.gui.main_window)
+ if(!current_title || strcmp(current_title, parsed))
gtk_window_set_title (GTK_WINDOW(uzbl.gui.main_window), parsed);
g_free(parsed);
}
@@ -1861,12 +1868,10 @@ create_browser () {
"signal::button-press-event", (GCallback)button_press_cb, NULL,
"signal::button-release-event", (GCallback)button_release_cb, NULL,
"signal::motion-notify-event", (GCallback)motion_notify_cb, NULL,
- "signal::title-changed", (GCallback)title_change_cb, NULL,
+ "signal::notify::title", (GCallback)title_change_cb, NULL,
"signal::selection-changed", (GCallback)selection_changed_cb, NULL,
- "signal::load-progress-changed", (GCallback)progress_change_cb, NULL,
- "signal::load-committed", (GCallback)load_commit_cb, NULL,
- "signal::load-started", (GCallback)load_start_cb, NULL,
- "signal::load-finished", (GCallback)load_finish_cb, NULL,
+ "signal::notify::progress", (GCallback)progress_change_cb, NULL,
+ "signal::notify::load-status", (GCallback)load_status_change_cb, NULL,
"signal::load-error", (GCallback)load_error_cb, NULL,
"signal::hovering-over-link", (GCallback)link_hover_cb, NULL,
"signal::navigation-policy-decision-requested", (GCallback)navigation_decision_cb, NULL,
@@ -2258,6 +2263,7 @@ initialize(int argc, char *argv[]) {
void
load_uri_imp(gchar *uri) {
GString* newuri;
+ SoupURI* soup_uri;
/* Strip leading whitespaces */
while (*uri) {
@@ -2269,26 +2275,28 @@ load_uri_imp(gchar *uri) {
eval_js(uzbl.gui.web_view, uri, NULL, "javascript:");
return;
}
+
newuri = g_string_new (uri);
- if (!soup_uri_new(uri)) {
- GString* fullpath = g_string_new ("");
+ soup_uri = soup_uri_new(uri);
+
+ if (!soup_uri) {
+ gchar* fullpath;
if (g_path_is_absolute (newuri->str))
- g_string_assign (fullpath, newuri->str);
+ fullpath = newuri->str;
else {
- gchar* wd;
- wd = g_get_current_dir ();
- g_string_assign (fullpath, g_build_filename (wd, newuri->str, NULL));
- free(wd);
+ gchar* wd = g_get_current_dir ();
+ fullpath = g_build_filename (wd, newuri->str, NULL);
+ g_free(wd);
}
struct stat stat_result;
- if (! g_stat(fullpath->str, &stat_result)) {
- g_string_prepend (fullpath, "file://");
- g_string_assign (newuri, fullpath->str);
- }
+ if (! g_stat(fullpath, &stat_result))
+ g_string_printf (newuri, "file://%s", fullpath);
else
g_string_prepend (newuri, "http://");
- g_string_free (fullpath, TRUE);
+ } else {
+ soup_uri_free(soup_uri);
}
+
/* if we do handle cookies, ask our handler for them */
webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str);
g_string_free (newuri, TRUE);
@@ -2339,6 +2347,16 @@ main (int argc, char* argv[]) {
uzbl.gui.bar_h = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_h);
gtk_widget_set_scroll_adjustments ((GtkWidget*) uzbl.gui.web_view, uzbl.gui.bar_h, uzbl.gui.bar_v);
+ g_object_connect((GObject*)uzbl.gui.bar_v,
+ "signal::value-changed", (GCallback)scroll_vert_cb, NULL,
+ "signal::changed", (GCallback)scroll_vert_cb, NULL,
+ NULL);
+
+ g_object_connect((GObject*)uzbl.gui.bar_h,
+ "signal::value-changed", (GCallback)scroll_horiz_cb, NULL,
+ "signal::changed", (GCallback)scroll_horiz_cb, NULL,
+ NULL);
+
if(!uzbl.state.instance_name)
uzbl.state.instance_name = itos((int)uzbl.xwin);
diff --git a/src/uzbl-core.h b/src/uzbl-core.h
index 5466507..b5a502e 100644
--- a/src/uzbl-core.h
+++ b/src/uzbl-core.h
@@ -146,6 +146,7 @@ typedef struct {
guint minimum_font_size;
gfloat zoom_level;
gboolean zoom_type;
+ guint enable_pagecache;
guint disable_plugins;
guint disable_scripts;
guint autoload_img;
@@ -450,6 +451,9 @@ void
include(WebKitWebView *page, GArray *argv, GString *result);
void
+show_inspector(WebKitWebView *page, GArray *argv, GString *result);
+
+void
builtins();
typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result);