Introduction
Introduction Statistics Contact Development Disclaimer Help
tFixed keys handling for multilayout environments. - surf - customized build of…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit bccfe2a9a553784aa0b50fb63aa198be906d8cae
parent dcb4f81ad22ed7fbaa4df391814307feb700f18e
Author: Alexander Sedov <[email protected]>
Date: Fri, 15 Mar 2013 19:12:15 +0400
Fixed keys handling for multilayout environments.
There is a bug in GTK+ that does not allow capturing shortcuts using
letter keys on layouts other than "us". The bug is there for ages and
tthere is probably no hope that it will get fixed. This patch switches
shortcut handling method to GtkAccelGroup, which handles this case
correctly. Enjoy!
Signed-off-by: Christoph Lohmann <[email protected]>
Diffstat:
M surf.c | 30 +++++++++++++++++++++++-------
1 file changed, 23 insertions(+), 7 deletions(-)
---
diff --git a/surf.c b/surf.c
t@@ -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);
t@@ -124,7 +125,9 @@ static gboolean inspector_show(WebKitWebInspector *i, Clie…
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,
t@@ -166,6 +169,18 @@ static void zoom(Client *c, const Arg *arg);
#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, NU…
+ 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,
gpointer d) {
t@@ -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;
t@@ -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 */
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.