summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hofmann <scm@uninformativ.de>2014-06-14 16:01:53 +0200
committerPeter Hofmann <scm@uninformativ.de>2014-06-14 16:01:53 +0200
commitd96eb7cfc8e0d02da8ad2f50880ac23c4d719a53 (patch)
treef86f4ba25d0525d192d41ada93b969ae49f24cda
parent8eb72e4255f3488c4f14ea28f7e1f3773d40b14a (diff)
downloadlariza-d96eb7cfc8e0d02da8ad2f50880ac23c4d719a53.tar.gz
Hotkey-scrolling
-rw-r--r--README2
-rw-r--r--zea.c57
2 files changed, 56 insertions, 3 deletions
diff --git a/README b/README
index a758b05..ed3abb3 100644
--- a/README
+++ b/README
@@ -11,11 +11,11 @@ Features:
- An input box to change the current URL
- Global content zoom
- Pluggability into suckless' tabbed
+ - vi-like scrolling (modified by CTRL)
- Support for Flash and Java
Planned features:
- - vi-like shortcuts
- Adblock
diff --git a/zea.c b/zea.c
index b590da7..b39f305 100644
--- a/zea.c
+++ b/zea.c
@@ -23,6 +23,7 @@ static gboolean zea_new_client_request(WebKitWebView *, WebKitWebFrame *,
WebKitWebPolicyDecision *, gpointer);
static void zea_title_changed(GObject *, GParamSpec *, gpointer);
static void zea_uri_changed(GObject *, GParamSpec *, gpointer);
+static void zea_scroll(GtkAdjustment *, int, gdouble);
static gboolean zea_web_view_key(GtkWidget *, GdkEvent *, gpointer);
@@ -248,6 +249,22 @@ zea_uri_changed(GObject *obj, GParamSpec *pspec, gpointer data)
gtk_entry_set_text(GTK_ENTRY(c->location), (t == NULL ? "zea" : t));
}
+void
+zea_scroll(GtkAdjustment *a, int step_type, gdouble factor)
+{
+ gdouble new, lower, upper, step;
+ lower = gtk_adjustment_get_lower(a);
+ upper = gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a) + lower;
+ if (step_type == 0)
+ step = gtk_adjustment_get_step_increment(a);
+ else
+ step = gtk_adjustment_get_page_increment(a);
+ new = gtk_adjustment_get_value(a) + factor * step;
+ new = new < lower ? lower : new;
+ new = new > upper ? upper : new;
+ gtk_adjustment_set_value(a, new);
+}
+
gboolean
zea_web_view_key(GtkWidget *widget, GdkEvent *event, gpointer data)
{
@@ -257,13 +274,49 @@ zea_web_view_key(GtkWidget *widget, GdkEvent *event, gpointer data)
if (event->type == GDK_KEY_PRESS)
{
- if (((GdkEventKey *)event)->state & GDK_MOD1_MASK)
+ if (((GdkEventKey *)event)->state & GDK_CONTROL_MASK)
{
- if (((GdkEventKey *)event)->keyval == GDK_KEY_l)
+ if (((GdkEventKey *)event)->keyval == GDK_KEY_o)
{
gtk_widget_grab_focus(c->location);
return TRUE;
}
+ else if (((GdkEventKey *)event)->keyval == GDK_KEY_h)
+ {
+ zea_scroll(gtk_scrolled_window_get_hadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 0, -1);
+ return TRUE;
+ }
+ else if (((GdkEventKey *)event)->keyval == GDK_KEY_j)
+ {
+ zea_scroll(gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 0, 1);
+ return TRUE;
+ }
+ else if (((GdkEventKey *)event)->keyval == GDK_KEY_k)
+ {
+ zea_scroll(gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 0, -1);
+ return TRUE;
+ }
+ else if (((GdkEventKey *)event)->keyval == GDK_KEY_l)
+ {
+ zea_scroll(gtk_scrolled_window_get_hadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 0, 1);
+ return TRUE;
+ }
+ else if (((GdkEventKey *)event)->keyval == GDK_KEY_f)
+ {
+ zea_scroll(gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 1, 0.5);
+ return TRUE;
+ }
+ if (((GdkEventKey *)event)->keyval == GDK_KEY_b)
+ {
+ zea_scroll(gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), 1, -0.5);
+ return TRUE;
+ }
}
}