diff --git a/libs/gtkmm2ext/gtkmm2ext/keyboard.h b/libs/gtkmm2ext/gtkmm2ext/keyboard.h index 7b206e2ccc..85f034d247 100644 --- a/libs/gtkmm2ext/gtkmm2ext/keyboard.h +++ b/libs/gtkmm2ext/gtkmm2ext/keyboard.h @@ -163,6 +163,7 @@ class LIBGTKMM2EXT_API Keyboard : public sigc::trackable, PBD::Stateful static bool is_insert_note_event (GdkEventButton*); static bool is_context_menu_event (GdkEventButton*); static bool is_button2_event (GdkEventButton*); + static bool is_momentary_push_event (GdkEventButton*); static Keyboard& the_keyboard() { return *_the_keyboard; } @@ -209,6 +210,7 @@ class LIBGTKMM2EXT_API Keyboard : public sigc::trackable, PBD::Stateful static guint snap_mod; static guint snap_delta_mod; static guint button2_modifiers; + static guint momentary_push_modifiers; static Gtk::Window* current_window; static std::string user_keybindings_path; static bool can_save_keybindings; diff --git a/libs/gtkmm2ext/keyboard.cc b/libs/gtkmm2ext/keyboard.cc index 83dc8c0cad..58e4e3c31b 100644 --- a/libs/gtkmm2ext/keyboard.cc +++ b/libs/gtkmm2ext/keyboard.cc @@ -71,6 +71,7 @@ guint Keyboard::Level4Modifier = GDK_MOD1_MASK; // Alt/Option guint Keyboard::CopyModifier = GDK_CONTROL_MASK; // Control guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK; guint Keyboard::button2_modifiers = Keyboard::SecondaryModifier|Keyboard::Level4Modifier; +guint Keyboard::momentary_push_modifiers = Keyboard::TertiaryModifier; const char* Keyboard::primary_modifier_name() { return _("Command"); } const char* Keyboard::secondary_modifier_name() { return _("Control"); } @@ -96,6 +97,7 @@ guint Keyboard::Level4Modifier = GDK_MOD4_MASK|GDK_SUPER_MASK; // Mod4/Windows guint Keyboard::CopyModifier = GDK_CONTROL_MASK; guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK; guint Keyboard::button2_modifiers = 0; /* not used */ +guint Keyboard::momentary_push_modifiers = Keyboard::TertiaryModifier; const char* Keyboard::primary_modifier_name() { return _("Control"); } const char* Keyboard::secondary_modifier_name() { return _("Alt"); } @@ -546,6 +548,14 @@ Keyboard::is_button2_event (GdkEventButton* ev) #endif } +bool +Keyboard::is_momentary_push_event (GdkEventButton* ev) +{ + return (is_button2_event(ev)) || + ((ev->button == 1) && + ((ev->state & RelevantModifierKeyMask) == Keyboard::momentary_push_modifiers)); +} + bool Keyboard::is_delete_event (GdkEventButton *ev) {