diff options
author | Rob <rob.manea@gmail.com> | 2010-02-22 09:03:15 +0100 |
---|---|---|
committer | Brendan Taylor <whateley@gmail.com> | 2011-04-18 20:23:42 -0600 |
commit | 5a46390e61faaea2d88ec49a1a81997672f4150b (patch) | |
tree | 670c9be49c6b9ec71a9c44fb8f0cb2694fa08f84 /src | |
parent | 60b4e20512df7b29e19aa3bb17532fd177928d4d (diff) |
show modmask on MOD_PRESS/RELEASE
Diffstat (limited to 'src')
-rw-r--r-- | src/callbacks.c | 4 | ||||
-rw-r--r-- | src/events.c | 33 | ||||
-rw-r--r-- | src/events.h | 3 |
3 files changed, 26 insertions, 14 deletions
diff --git a/src/callbacks.c b/src/callbacks.c index 4c150ec..6821700 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -549,7 +549,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_PRESS) - key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_PRESS); + key_to_event(event->keyval, event->state, event->is_modifier, GDK_KEY_PRESS); return uzbl.behave.forward_keys ? FALSE : TRUE; } @@ -559,7 +559,7 @@ key_release_cb (GtkWidget* window, GdkEventKey* event) { (void) window; if(event->type == GDK_KEY_RELEASE) - key_to_event(event->keyval, event->is_modifier?0:event->state, event->is_modifier, GDK_KEY_RELEASE); + key_to_event(event->keyval, event->state, event->is_modifier, GDK_KEY_RELEASE); return uzbl.behave.forward_keys ? FALSE : TRUE; } diff --git a/src/events.c b/src/events.c index 013bd85..12f9d83 100644 --- a/src/events.c +++ b/src/events.c @@ -202,16 +202,10 @@ send_event(int type, const gchar *custom_event, ...) { va_end (vargs); } -/* Transform gdk key events to our own events */ -void -key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { - gchar ucs[7]; - gint ulen; - gchar *keyname; - guint32 ukval = gdk_keyval_to_unicode(keyval); +gchar * +get_modifier_mask(guint state) { GString *modifiers = g_string_new(""); - /* check modifier state*/ if(state & GDK_MODIFIER_MASK) { if(state & GDK_SHIFT_MASK) g_string_append(modifiers, "Shift|"); @@ -244,6 +238,21 @@ key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { g_string_overwrite(modifiers, modifiers->len-1, " "); } + return g_string_free(modifiers, FALSE); +} + +/* Transform gdk key events to our own events */ +void +key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { + gchar ucs[7]; + gint ulen; + gchar *keyname; + guint32 ukval = gdk_keyval_to_unicode(keyval); + gchar *modifiers = NULL; + + /* check modifier state*/ + modifiers = get_modifier_mask(state); + /* check for printable unicode char */ /* TODO: Pass the keyvals through a GtkIMContext so that * we also get combining chars right @@ -253,19 +262,19 @@ key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { ucs[ulen] = 0; send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_FORMATTEDSTR, ucs, NULL); + TYPE_STR, modifiers, TYPE_FORMATTEDSTR, ucs, NULL); } /* send keysym for non-printable chars */ else if((keyname = gdk_keyval_name(keyval))){ if(is_modifier) send_event(mode == GDK_KEY_PRESS ? MOD_PRESS : MOD_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + TYPE_STR, modifiers, TYPE_NAME, keyname , NULL); else send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + TYPE_STR, modifiers, TYPE_NAME, keyname , NULL); } - g_string_free(modifiers, TRUE); + g_free(modifiers); } /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index 35e0ecd..0c40206 100644 --- a/src/events.h +++ b/src/events.h @@ -42,6 +42,9 @@ vsend_event(int type, const gchar *custom_event, va_list vargs); void send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED; +gchar * +get_modifier_mask(guint state); + void key_to_event(guint keyval, guint state, guint is_modifier, int mode); |