diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/callbacks.c | 4 | ||||
-rw-r--r-- | src/events.c | 15 | ||||
-rw-r--r-- | src/events.h | 5 |
3 files changed, 14 insertions, 10 deletions
diff --git a/src/callbacks.c b/src/callbacks.c index c0064ec..4c150ec 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, GDK_KEY_PRESS); + key_to_event(event->keyval, event->is_modifier?0: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, GDK_KEY_RELEASE); + key_to_event(event->keyval, event->is_modifier?0: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 45b2ef1..013bd85 100644 --- a/src/events.c +++ b/src/events.c @@ -23,6 +23,8 @@ const char *event_table[LAST_EVENT] = { "REQUEST_STARTING" , "KEY_PRESS" , "KEY_RELEASE" , + "MOD_PRESS" , + "MOD_RELEASE" , "COMMAND_EXECUTED" , "LINK_HOVER" , "TITLE_CHANGED" , @@ -202,13 +204,12 @@ send_event(int type, const gchar *custom_event, ...) { /* Transform gdk key events to our own events */ void -key_to_event(guint keyval, guint state, gint mode) { +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); GString *modifiers = g_string_new(""); - gchar *details; /* check modifier state*/ if(state & GDK_MODIFIER_MASK) { @@ -256,13 +257,15 @@ key_to_event(guint keyval, guint state, gint mode) { } /* send keysym for non-printable chars */ else if((keyname = gdk_keyval_name(keyval))){ - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, - TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + if(is_modifier) + send_event(mode == GDK_KEY_PRESS ? MOD_PRESS : MOD_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); + else + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, + TYPE_STR, modifiers->str, TYPE_NAME, keyname , NULL); } g_string_free(modifiers, TRUE); - g_free(details); - } /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index 97ed0a0..35e0ecd 100644 --- a/src/events.h +++ b/src/events.h @@ -13,7 +13,8 @@ enum event_type { LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, REQUEST_STARTING, - KEY_PRESS, KEY_RELEASE, COMMAND_EXECUTED, + KEY_PRESS, KEY_RELEASE, MOD_PRESS, MOD_RELEASE, + COMMAND_EXECUTED, LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, VARIABLE_SET, FIFO_SET, SOCKET_SET, @@ -42,6 +43,6 @@ void send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED; void -key_to_event(guint keyval, guint state, int mode); +key_to_event(guint keyval, guint state, guint is_modifier, int mode); #endif |