From 02fcc0f6527353baf8f376ed6651cfe7c77bf15b Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 21 Apr 2011 13:33:50 -0400 Subject: Add button_to_event function for clicks --- src/callbacks.c | 10 ++-------- src/events.c | 18 ++++++++++++++++++ src/events.h | 5 ++++- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 6821700..5873b5e 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -568,7 +568,6 @@ gboolean button_press_cb (GtkWidget* window, GdkEventButton* event) { (void) window; gint context; - gchar *details; gboolean propagate = FALSE, sendev = FALSE; @@ -595,9 +594,7 @@ button_press_cb (GtkWidget* window, GdkEventButton* event) { } if(sendev) { - details = g_strdup_printf("Button%d", event->button); - send_event(KEY_PRESS, NULL, TYPE_NAME, details, NULL); - g_free (details); + button_to_event(event->button, event->state, GDK_BUTTON_PRESS); } } @@ -608,7 +605,6 @@ gboolean button_release_cb (GtkWidget* window, GdkEventButton* event) { (void) window; gint context; - gchar *details; gboolean propagate = FALSE, sendev = FALSE; @@ -624,9 +620,7 @@ button_release_cb (GtkWidget* window, GdkEventButton* event) { } if(sendev) { - details = g_strdup_printf("Button%d", event->button); - send_event(KEY_RELEASE, NULL, TYPE_NAME, details, NULL); - g_free (details); + button_to_event(event->button, event->state, GDK_BUTTON_RELEASE); } } diff --git a/src/events.c b/src/events.c index 62d6414..0ae7a98 100644 --- a/src/events.c +++ b/src/events.c @@ -306,4 +306,22 @@ key_to_event(guint keyval, guint state, guint is_modifier, gint mode) { g_free(modifiers); } +/* Transform gdk button events to our own events */ +void +button_to_event(guint buttonval, guint state, gint mode) { + gchar *details; + gchar *modifiers = NULL; + + /* Get modifier state */ + modifiers = get_modifier_mask(state); + + details = g_strdup_printf("Button%d", buttonval); + + send_event(mode == GDK_BUTTON_PRESS ? KEY_PRESS : KEY_RELEASE, NULL, + TYPE_STR, modifiers, TYPE_FORMATTEDSTR, details, NULL); + + g_free(details); + g_free(modifiers); +} + /* vi: set et ts=4: */ diff --git a/src/events.h b/src/events.h index 0c40206..dbe0244 100644 --- a/src/events.h +++ b/src/events.h @@ -46,6 +46,9 @@ gchar * get_modifier_mask(guint state); void -key_to_event(guint keyval, guint state, guint is_modifier, int mode); +key_to_event(guint keyval, guint state, guint is_modifier, gint mode); + +void +button_to_event(guint buttonval, guint state, gint mode); #endif -- cgit v1.2.3