summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README2
-rw-r--r--zea.c37
2 files changed, 36 insertions, 3 deletions
diff --git a/README b/README
index 9ad2114..056fe1f 100644
--- a/README
+++ b/README
@@ -12,11 +12,11 @@ Features:
- Global content zoom
- Pluggability into suckless' tabbed
- vi-like scrolling (modified by CTRL)
+ - Searching the current page for a word
- Support for Flash and Java
Planned features:
- - Searching the current page for a word
- Adblock
- Keyword based searching (opening "wi foo" will search wikipedia)
diff --git a/zea.c b/zea.c
index 29a7841..602f14d 100644
--- a/zea.c
+++ b/zea.c
@@ -23,6 +23,7 @@ static gboolean zea_new_client_request(WebKitWebView *, WebKitWebFrame *,
WebKitNetworkRequest *,
WebKitWebNavigationAction *,
WebKitWebPolicyDecision *, gpointer);
+static void zea_search(gpointer, gint);
static void zea_scroll(GtkAdjustment *, gint, gdouble);
static void zea_title_changed(GObject *, GParamSpec *, gpointer);
static void zea_uri_changed(GObject *, GParamSpec *, gpointer);
@@ -33,6 +34,7 @@ static gboolean zea_web_view_key(GtkWidget *, GdkEvent *, gpointer);
static Window embed = 0;
static gint clients = 0;
static gdouble global_zoom = 1.0;
+static gchar *search_text = NULL;
struct Client
@@ -127,6 +129,7 @@ gboolean
zea_location_key(GtkWidget *widget, GdkEvent *event, gpointer data)
{
struct Client *c = (struct Client *)data;
+ const gchar *t;
(void)widget;
@@ -135,8 +138,16 @@ zea_location_key(GtkWidget *widget, GdkEvent *event, gpointer data)
if (((GdkEventKey *)event)->keyval == GDK_KEY_Return)
{
gtk_widget_grab_focus(c->web_view);
- webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view),
- gtk_entry_get_text(GTK_ENTRY(c->location)));
+ t = gtk_entry_get_text(GTK_ENTRY(c->location));
+ if (t != NULL && t[0] == '/')
+ {
+ if (search_text != NULL)
+ g_free(search_text);
+ search_text = g_strdup(t + 1); /* XXX whacky */
+ zea_search(c, 1);
+ }
+ else
+ webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view), t);
return TRUE;
}
}
@@ -238,6 +249,18 @@ zea_new_client_request(WebKitWebView *web_view, WebKitWebFrame *frame,
}
void
+zea_search(gpointer data, gint direction)
+{
+ struct Client *c = (struct Client *)data;
+
+ if (search_text == NULL)
+ return;
+
+ webkit_web_view_search_text(WEBKIT_WEB_VIEW(c->web_view), search_text,
+ FALSE, direction == 1, TRUE);
+}
+
+void
zea_scroll(GtkAdjustment *a, gint step_type, gdouble factor)
{
gdouble new, lower, upper, step;
@@ -366,6 +389,16 @@ zea_web_view_key(GtkWidget *widget, GdkEvent *event, gpointer data)
GTK_SCROLLED_WINDOW(c->scroll)), 1, -0.5);
return TRUE;
}
+ if (((GdkEventKey *)event)->keyval == GDK_KEY_n)
+ {
+ zea_search(c, 1);
+ return TRUE;
+ }
+ if (((GdkEventKey *)event)->keyval == GDK_KEY_p)
+ {
+ zea_search(c, -1);
+ return TRUE;
+ }
}
else if (((GdkEventKey *)event)->keyval == GDK_KEY_Escape)
{