guint Keyboard::delete_mod = GDK_SHIFT_MASK;
guint Keyboard::insert_note_but = 1;
guint Keyboard::insert_note_mod = GDK_CONTROL_MASK;
-guint Keyboard::snap_mod = GDK_MOD3_MASK;
#ifdef GTKOSX
const char* Keyboard::copy_modifier_name() { return _("Control"); }
const char* Keyboard::rangeselect_modifier_name() { return S_("Key|Shift"); }
+guint Keyboard::snap_mod = Keyboard::Level4Modifier|Keyboard::TertiaryModifier; // XXX this is probably completely wrong
+guint Keyboard::snap_delta_mod = Keyboard::Level4Modifier;
+
#else
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
const char* Keyboard::copy_modifier_name() { return _("Control"); }
const char* Keyboard::rangeselect_modifier_name() { return S_("Key|Shift"); }
+guint Keyboard::snap_mod = Keyboard::SecondaryModifier;
+guint Keyboard::snap_delta_mod = Keyboard::SecondaryModifier|Keyboard::Level4Modifier;
+
#endif
guint Keyboard::GainFineScaleModifier = Keyboard::PrimaryModifier;
guint Keyboard::ScrollZoomHorizontalModifier = Keyboard::PrimaryModifier;
guint Keyboard::ScrollHorizontalModifier = Keyboard::TertiaryModifier;
-
Keyboard* Keyboard::_the_keyboard = 0;
Gtk::Window* Keyboard::current_window = 0;
bool Keyboard::_some_magic_widget_has_focus = false;
XMLNode* node = new XMLNode ("Keyboard");
char buf[32];
+ snprintf (buf, sizeof (buf), "%d", CopyModifier);
+ node->add_property ("copy-modifier", buf);
snprintf (buf, sizeof (buf), "%d", edit_but);
node->add_property ("edit-button", buf);
snprintf (buf, sizeof (buf), "%d", edit_mod);
node->add_property ("delete-modifier", buf);
snprintf (buf, sizeof (buf), "%d", snap_mod);
node->add_property ("snap-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", snap_delta_mod);
+ node->add_property ("snap-delta-modifier", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_but);
node->add_property ("insert-note-button", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_mod);
{
const XMLProperty* prop;
+ if ((prop = node.property ("copy-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &CopyModifier);
+ }
+
if ((prop = node.property ("edit-button")) != 0) {
sscanf (prop->value().c_str(), "%d", &edit_but);
}
sscanf (prop->value().c_str(), "%d", &snap_mod);
}
+ if ((prop = node.property ("snap-delta-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &snap_delta_mod);
+ }
+
if ((prop = node.property ("insert-note-button")) != 0) {
sscanf (prop->value().c_str(), "%d", &insert_note_but);
}
return false;
}
+bool
+Keyboard::focus_in_window (GdkEventFocus *, Gtk::Window* win)
+{
+ current_window = win;
+ DEBUG_TRACE (DEBUG::Keyboard, string_compose ("Focusing in window, title = %1\n", win->get_title()));
+ return false;
+}
+
+bool
+Keyboard::focus_out_window (GdkEventFocus * ev, Gtk::Window* win)
+{
+ if (ev) {
+ state.clear ();
+ current_window = 0;
+ } else {
+ current_window = 0;
+ }
+
+ DEBUG_TRACE (DEBUG::Keyboard, string_compose ("Foucusing out window, title = %1\n", win->get_title()));
+
+ return false;
+}
+
void
Keyboard::set_edit_button (guint but)
{
RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_mod);
}
+void
+Keyboard::set_snap_delta_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~snap_delta_mod);
+ snap_delta_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_delta_mod);
+}
+
bool
Keyboard::is_edit_event (GdkEventButton *ev)
{