aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/config/config3
-rw-r--r--src/callbacks.c38
-rw-r--r--src/callbacks.h6
-rw-r--r--src/events.c3
-rw-r--r--src/events.h2
-rw-r--r--src/uzbl-core.c10
6 files changed, 61 insertions, 1 deletions
diff --git a/examples/config/config b/examples/config/config
index ef5c122..7c3a950 100644
--- a/examples/config/config
+++ b/examples/config/config
@@ -80,6 +80,9 @@ set authentication_handler = sync_spawn @scripts_dir/auth.py
# Example CONFIG_CHANGED event handler
#@on_event CONFIG_CHANGED print Config changed: %1 = %2
+# Scroll percentage calculation
+@on_event SCROLL_VERT set scroll_message = \@<(function(){var a='%1'.split(' ');var p='--';if(a[2]!=a[1]){p=(a[0]/(a[2]-a[3]));p=Math.round(10000*p)/100;};return p+'%';})()>\@
+
# === Behaviour and appearance ===============================================
set show_status = 1
diff --git a/src/callbacks.c b/src/callbacks.c
index 6ad8e2c..e0c2c0c 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -776,6 +776,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;
diff --git a/src/callbacks.h b/src/callbacks.h
index 1ba7e0b..a2862f4 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -214,5 +214,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/events.c b/src/events.c
index ee2f96c..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
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-core.c b/src/uzbl-core.c
index 23039cc..5e8618e 100644
--- a/src/uzbl-core.c
+++ b/src/uzbl-core.c
@@ -2497,6 +2497,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);