aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/events.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/events.c')
-rw-r--r--src/events.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/events.c b/src/events.c
index d3da82b..45140c0 100644
--- a/src/events.c
+++ b/src/events.c
@@ -270,6 +270,12 @@ guint key_to_modifier(guint keyval) {
}
}
+guint button_to_modifier(guint buttonval) {
+ if(buttonval <= 5)
+ return 1 << (7 + buttonval);
+ return 0;
+}
+
/* Transform gdk key events to our own events */
void
key_to_event(guint keyval, guint state, guint is_modifier, gint mode) {
@@ -309,4 +315,36 @@ 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;
+ const char *reps;
+ gchar *modifiers = NULL;
+ guint mod = button_to_modifier (buttonval);
+
+ /* Get modifier state including this button press/release */
+ modifiers = get_modifier_mask(mode != GDK_BUTTON_RELEASE ? state | mod : state & ~mod);
+
+ switch (mode) {
+ case GDK_2BUTTON_PRESS:
+ reps = "2";
+ break;
+ case GDK_3BUTTON_PRESS:
+ reps = "3";
+ break;
+ default:
+ reps = "";
+ break;
+ }
+
+ details = g_strdup_printf("%sButton%d", reps, 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: */