aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/events.c
diff options
context:
space:
mode:
authorGravatar Rob <rob.manea@gmail.com>2010-02-22 09:03:15 +0100
committerGravatar Brendan Taylor <whateley@gmail.com>2011-04-18 20:23:42 -0600
commit5a46390e61faaea2d88ec49a1a81997672f4150b (patch)
tree670c9be49c6b9ec71a9c44fb8f0cb2694fa08f84 /src/events.c
parent60b4e20512df7b29e19aa3bb17532fd177928d4d (diff)
show modmask on MOD_PRESS/RELEASE
Diffstat (limited to 'src/events.c')
-rw-r--r--src/events.c33
1 files changed, 21 insertions, 12 deletions
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: */