aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
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
parent60b4e20512df7b29e19aa3bb17532fd177928d4d (diff)
show modmask on MOD_PRESS/RELEASE
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c4
-rw-r--r--src/events.c33
-rw-r--r--src/events.h3
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);