about summary refs log tree commit diff
path: root/surf.c
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2015-11-22 17:44:40 +0100
committerQuentin Rameau <quinq@fifth.space>2015-11-22 17:44:40 +0100
commit00f9dcdf439f85df4a2b1efef32e7422a671c26c (patch)
tree984a37544c4f6c8db6d2636db8276d573e678f54 /surf.c
parentFix target uri handling when leaving window (diff)
downloadsurf-00f9dcdf439f85df4a2b1efef32e7422a671c26c.tar.gz
surf-00f9dcdf439f85df4a2b1efef32e7422a671c26c.tar.bz2
surf-00f9dcdf439f85df4a2b1efef32e7422a671c26c.zip
Fix key handling
I had forgotten to compare configured key values against lowered pressed
key values.
Integrated keypress() into winevent().
Diffstat (limited to 'surf.c')
-rw-r--r--surf.c58
1 files changed, 17 insertions, 41 deletions
diff --git a/surf.c b/surf.c
index 05c22ec..93111d4 100644
--- a/surf.c
+++ b/surf.c
@@ -105,7 +105,6 @@ static void sigchld(int unused);
 static char *buildfile(const char *path);
 static char *buildpath(const char *path);
 static Client *newclient(Client *c);
-static void addaccelgroup(Client *c);
 static void loaduri(Client *c, const Arg *a);
 static const char *geturi(Client *c);
 static void setatom(Client *c, int a, const char *v);
@@ -131,8 +130,6 @@ static WebKitWebView *newview(Client *c, WebKitWebView *rv);
 static GtkWidget *createview(WebKitWebView *v, WebKitNavigationAction *a,
                              Client *c);
 static gboolean buttonreleased(GtkWidget *w, GdkEvent *e, Client *c);
-static gboolean keypress(GtkAccelGroup *group, GObject *obj, guint key,
-                         GdkModifierType mods, Client *c);
 static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,
                                 gpointer d);
 static gboolean winevent(GtkWidget *w, GdkEvent *e, Client *c);
@@ -344,21 +341,6 @@ newclient(Client *rc)
 }
 
 void
-addaccelgroup(Client *c)
-{
-	int i;
-	GtkAccelGroup *group = gtk_accel_group_new();
-	GClosure *closure;
-
-	for (i = 0; i < LENGTH(keys); i++) {
-		closure = g_cclosure_new(G_CALLBACK(keypress), c, NULL);
-		gtk_accel_group_connect(group, keys[i].keyval, keys[i].mod, 0,
-		                        closure);
-	}
-	gtk_window_add_accel_group(GTK_WINDOW(c->win), group);
-}
-
-void
 loaduri(Client *c, const Arg *a)
 {
 	struct stat st;
@@ -828,28 +810,6 @@ buttonreleased(GtkWidget *w, GdkEvent *e, Client *c)
 	return FALSE;
 }
 
-gboolean
-keypress(GtkAccelGroup *group, GObject *obj, guint key, GdkModifierType mods,
-         Client *c)
-{
-	guint i;
-	gboolean processed = FALSE;
-
-	mods = CLEANMASK(mods);
-	key = gdk_keyval_to_lower(key);
-	updatewinid(c);
-	for (i = 0; i < LENGTH(keys); i++) {
-		if (key == keys[i].keyval
-		    && mods == keys[i].mod
-		    && keys[i].func) {
-			keys[i].func(c, &(keys[i].arg));
-			processed = TRUE;
-		}
-	}
-
-	return processed;
-}
-
 GdkFilterReturn
 processx(GdkXEvent *e, GdkEvent *event, gpointer d)
 {
@@ -878,11 +838,26 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d)
 gboolean
 winevent(GtkWidget *w, GdkEvent *e, Client *c)
 {
+	int i;
+
 	switch (e->type) {
 	case GDK_ENTER_NOTIFY:
 		c->overtitle = c->targeturi;
 		updatetitle(c);
 		break;
+	case GDK_KEY_PRESS:
+		if (!kioskmode) {
+			for (i = 0; i < LENGTH(keys); ++i) {
+				if (gdk_keyval_to_lower(e->key.keyval) ==
+				    keys[i].keyval &&
+				    CLEANMASK(e->key.state) == keys[i].mod &&
+				    keys[i].func) {
+					updatewinid(c);
+					keys[i].func(c, &(keys[i].arg));
+					return TRUE;
+				}
+			}
+		}
 	case GDK_LEAVE_NOTIFY:
 		c->overtitle = NULL;
 		updatetitle(c);
@@ -928,7 +903,6 @@ showview(WebKitWebView *v, Client *c)
 		webkit_web_view_set_background_color(c->view, &bgcolor);
 
 	if (!kioskmode) {
-		addaccelgroup(c);
 		gdk_window_set_events(gwin, GDK_ALL_EVENTS_MASK);
 		gdk_window_add_filter(gwin, processx, c);
 	}
@@ -970,6 +944,8 @@ createwindow(Client *c)
 	                 G_CALLBACK(destroywin), c);
 	g_signal_connect(G_OBJECT(w), "enter-notify-event",
 	                 G_CALLBACK(winevent), c);
+	g_signal_connect(G_OBJECT(w), "key-press-event",
+	                 G_CALLBACK(winevent), c);
 	g_signal_connect(G_OBJECT(w), "leave-notify-event",
 	                 G_CALLBACK(winevent), c);
 	g_signal_connect(G_OBJECT(w), "window-state-event",