From 80b0b3ea05c4575911f37fa5ad66d7deeaef0ad6 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 30 Jun 1998 08:20:45 +0000 Subject: [PATCH] ok, this enables the possibility for key-release bindings. but nearly no widget really cares to set GDK_KEY_RELEASE_MASK, which needs to be enabled in order for release bindings to work. Tue Jun 30 09:24:40 1998 Tim Janik * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" modifier as well. (gtk_accelerator_name): add "" to the accelerator name if neccessary. * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into account. * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. * gdk/gdktypes.h (enum): added GDK_RELEASE_MASK to GdkModifierType. --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-0 | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-2 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ gtk/gtkaccelgroup.c | 30 +++++++++++++++++++++++++++++- gtk/gtkbindings.c | 2 +- 9 files changed, 86 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 64ebfbd164..0163d85b38 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,13 @@ Tue Jun 30 09:24:40 1998 Tim Janik + * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "" + modifier as well. + (gtk_accelerator_name): add "" to the accelerator name if + neccessary. + + * gtk/gtkbindings.c (BINDING_MOD_MASK): take BINDING_MOD_MASK into + account. + * gtk/gtkwidget.c (gtk_widget_real_key_release_event): implemented default handler for key-release events, which checks for activation of GDK_RELEASE_MASK key bindings. diff --git a/gtk/gtkaccelgroup.c b/gtk/gtkaccelgroup.c index 0824e2a2a0..c8c3e908f4 100644 --- a/gtk/gtkaccelgroup.c +++ b/gtk/gtkaccelgroup.c @@ -844,6 +844,20 @@ is_control (const gchar *string) (string[8] == '>')); } +static inline gboolean +is_release (const gchar *string) +{ + return ((string[0] == '<') && + (string[1] == 'r' || string[1] == 'R') && + (string[2] == 'e' || string[2] == 'E') && + (string[3] == 'l' || string[3] == 'L') && + (string[4] == 'e' || string[4] == 'E') && + (string[5] == 'a' || string[5] == 'A') && + (string[6] == 's' || string[6] == 'S') && + (string[7] == 'e' || string[7] == 'E') && + (string[8] == '>')); +} + void gtk_accelerator_parse (const gchar *accelerator, guint *accelerator_key, @@ -866,7 +880,13 @@ gtk_accelerator_parse (const gchar *accelerator, { if (*accelerator == '<') { - if (len >= 9 && is_control (accelerator)) + if (len >= 9 && is_release (accelerator)) + { + accelerator += 9; + len -= 9; + mods |= GDK_RELEASE_MASK; + } + else if (len >= 9 && is_control (accelerator)) { accelerator += 9; len -= 9; @@ -947,6 +967,7 @@ gtk_accelerator_name (guint accelerator_key, { static const gchar text_shift[] = ""; static const gchar text_control[] = ""; + static const gchar text_release[] = ""; static const gchar text_mod1[] = ""; static const gchar text_mod2[] = ""; static const gchar text_mod3[] = ""; @@ -967,6 +988,8 @@ gtk_accelerator_name (guint accelerator_key, l += sizeof (text_shift) - 1; if (accelerator_mods & GDK_CONTROL_MASK) l += sizeof (text_control) - 1; + if (accelerator_mods & GDK_RELEASE_MASK) + l += sizeof (text_release) - 1; if (accelerator_mods & GDK_MOD1_MASK) l += sizeof (text_mod1) - 1; if (accelerator_mods & GDK_MOD2_MASK) @@ -993,6 +1016,11 @@ gtk_accelerator_name (guint accelerator_key, strcpy (accelerator + l, text_control); l += sizeof (text_control) - 1; } + if (accelerator_mods & GDK_RELEASE_MASK) + { + strcpy (accelerator + l, text_release); + l += sizeof (text_release) - 1; + } if (accelerator_mods & GDK_MOD1_MASK) { strcpy (accelerator + l, text_mod1); diff --git a/gtk/gtkbindings.c b/gtk/gtkbindings.c index 27864fed49..8c17c9f5df 100644 --- a/gtk/gtkbindings.c +++ b/gtk/gtkbindings.c @@ -28,7 +28,7 @@ /* --- defines --- */ -#define BINDING_MOD_MASK() (gtk_accelerator_get_default_mod_mask ()) +#define BINDING_MOD_MASK() (gtk_accelerator_get_default_mod_mask () | GDK_RELEASE_MASK) /* --- variables --- */