X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=56bf6b0d35e4efdd7970299d1837df392fbacab1;hb=bccfe2a9a553784aa0b50fb63aa198be906d8cae;hp=1ad5ace70aa58789a6ab44deb1eae899d85e582d;hpb=dcb4f81ad22ed7fbaa4df391814307feb700f18e;p=surf.git diff --git a/surf.c b/surf.c index 1ad5ace..56bf6b0 100644 --- a/surf.c +++ b/surf.c @@ -80,6 +80,7 @@ static gboolean usingproxy = 0; static char togglestat[6]; static char pagestat[3]; +static void add_accels(Client *c); static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, WebKitNetworkResponse *resp, gpointer d); @@ -124,7 +125,9 @@ static gboolean inspector_show(WebKitWebInspector *i, Client *c); static gboolean inspector_close(WebKitWebInspector *i, Client *c); static void inspector_finished(WebKitWebInspector *i, Client *c); -static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c); +static gboolean keypress(GtkAccelGroup *group, + GObject *obj, guint key, GdkModifierType mods, + Client *c); static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *c); static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec, @@ -165,6 +168,18 @@ static void zoom(Client *c, const Arg *arg); /* configuration, allows nested code to access above variables */ #include "config.h" +static void +add_accels(Client *c) { + int i; + GtkAccelGroup *group = gtk_accel_group_new(); + for(i = 0; i < LENGTH(keys); i++) { + GClosure *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); +} + static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, WebKitNetworkResponse *resp, @@ -514,14 +529,17 @@ inspector_finished(WebKitWebInspector *i, Client *c) { } static gboolean -keypress(GtkWidget* w, GdkEventKey *ev, Client *c) { +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(gdk_keyval_to_lower(ev->keyval) == keys[i].keyval - && CLEANMASK(ev->state) == keys[i].mod + if(key == keys[i].keyval + && mods == keys[i].mod && keys[i].func) { keys[i].func(c, &(keys[i].arg)); processed = TRUE; @@ -646,9 +664,7 @@ newclient(void) { "destroy", G_CALLBACK(destroywin), c); if(!kioskmode) { - g_signal_connect(G_OBJECT(c->win), - "key-press-event", - G_CALLBACK(keypress), c); + add_accels(c); } /* Pane */