aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c4
-rw-r--r--src/events.c15
-rw-r--r--src/events.h5
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