tFix key handling - surf - customized build of surf, the suckless webkit browser | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 00f9dcdf439f85df4a2b1efef32e7422a671c26c | |
parent 971856a579889de5ee6d427c3f7374969b872cbc | |
Author: Quentin Rameau <[email protected]> | |
Date: Sun, 22 Nov 2015 17:44:40 +0100 | |
Fix key handling | |
I had forgotten to compare configured key values against lowered pressed | |
key values. | |
Integrated keypress() into winevent(). | |
Diffstat: | |
M surf.c | 58 +++++++++--------------------… | |
1 file changed, 17 insertions(+), 41 deletions(-) | |
--- | |
diff --git a/surf.c b/surf.c | |
t@@ -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); | |
t@@ -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); | |
t@@ -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; | |
t@@ -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) | |
{ | |
t@@ -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); | |
t@@ -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); | |
} | |
t@@ -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", |