X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fkeyboard.h;h=29052993348cebf7f35e41765bf8d685943a5350;hb=6001b8d28dd764bada8b9198a5f91e0a2f5251f6;hp=c13b06afe50f6dad2ff204fda0926303b713e297;hpb=79986643c0c904f6574bb5323e2233a43a9e622e;p=ardour.git diff --git a/gtk2_ardour/keyboard.h b/gtk2_ardour/keyboard.h index c13b06afe5..2905299334 100644 --- a/gtk2_ardour/keyboard.h +++ b/gtk2_ardour/keyboard.h @@ -15,27 +15,25 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_keyboard_h__ #define __ardour_keyboard_h__ +#include #include #include #include #include +#include -#include -#include +#include "ardour/types.h" +#include "pbd/stateful.h" #include "selection.h" -using std::vector; -using std::string; - -class Keyboard : public sigc::trackable, Stateful +class Keyboard : public sigc::trackable, PBD::Stateful { public: Keyboard (); @@ -44,20 +42,34 @@ class Keyboard : public sigc::trackable, Stateful XMLNode& get_state (void); int set_state (const XMLNode&); - typedef vector State; - - int get_prefix(float&, bool& was_floating); - void start_prefix (); - - static State translate_key_name (const string&); - static string get_real_keyname (const string& name); - + typedef std::vector State; typedef uint32_t ModifierMask; - static uint32_t Control; - static uint32_t Shift; - static uint32_t Alt; - static uint32_t Meta; + static uint32_t PrimaryModifier; + static uint32_t SecondaryModifier; + static uint32_t TertiaryModifier; + static uint32_t Level4Modifier; + static uint32_t CopyModifier; + static uint32_t RangeSelectModifier; + + static void set_primary_modifier (uint32_t newval) { + set_modifier (newval, PrimaryModifier); + } + static void set_secondary_modifier (uint32_t newval) { + set_modifier (newval, SecondaryModifier); + } + static void set_tertiary_modifier (uint32_t newval) { + set_modifier (newval, TertiaryModifier); + } + static void set_level4_modifier (uint32_t newval) { + set_modifier (newval, Level4Modifier); + } + static void set_copy_modifier (uint32_t newval) { + set_modifier (newval, CopyModifier); + } + static void set_range_select_modifier (uint32_t newval) { + set_modifier (newval, RangeSelectModifier); + } bool key_is_down (uint32_t keyval); @@ -77,8 +89,6 @@ class Keyboard : public sigc::trackable, Stateful static bool no_modifiers_active (guint state); - static void set_meta_modifier (guint); - static void set_snap_modifier (guint); static ModifierMask snap_modifier () { return ModifierMask (snap_mod); } @@ -95,39 +105,60 @@ class Keyboard : public sigc::trackable, Stateful static bool is_edit_event (GdkEventButton*); static bool is_delete_event (GdkEventButton*); static bool is_context_menu_event (GdkEventButton*); + static bool is_button2_event (GdkEventButton*); static Keyboard& the_keyboard() { return *_the_keyboard; } + static bool some_magic_widget_has_focus (); + static void magic_widget_grab_focus (); + static void magic_widget_drop_focus (); + + static void setup_keybindings (); + static void keybindings_changed (); + static void save_keybindings (); + static bool load_keybindings (std::string path); + static void set_can_save_keybindings (bool yn); + static std::string current_binding_name () { return _current_binding_name; } + static std::map binding_files; + + struct AccelKeyLess { + bool operator() (const Gtk::AccelKey a, const Gtk::AccelKey b) const { + if (a.get_key() != b.get_key()) { + return a.get_key() < b.get_key(); + } else { + return a.get_mod() < b.get_mod(); + } + } + }; + private: static Keyboard* _the_keyboard; - bool _queue_events; - bool _flush_queue; - guint snooper_id; State state; - bool collecting_prefix; - string current_prefix; - int* modifier_masks; - int modifier_mask; - int min_keycode; - int max_keycode; static guint edit_but; static guint edit_mod; static guint delete_but; static guint delete_mod; static guint snap_mod; + static guint button2_modifiers; + static Gtk::Window* current_window; + static std::string user_keybindings_path; + static bool can_save_keybindings; + static bool bindings_changed_after_save_became_legal; + static std::string _current_binding_name; + + typedef std::pair two_strings; + + static std::map release_keys; static gint _snooper (GtkWidget*, GdkEventKey*, gpointer); gint snooper (GtkWidget*, GdkEventKey*); - - void queue_event (GdkEventKey*); - void get_modifier_masks (); - void check_modifier_state (); - void clear_modifier_state (); - void check_meta_numlock (char keycode, guint mod, string modname); + static void set_modifier (uint32_t newval, uint32_t& variable); + + static bool _some_magic_widget_has_focus; }; #endif /* __ardour_keyboard_h__ */