allow keybindings manager to bind arrow keys, using hack from utils.cc that was already in place

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3328 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2008-05-08 14:11:20 +00:00
parent 15d6871c02
commit f844b2c2ab
4 changed files with 46 additions and 33 deletions

View file

@ -184,7 +184,6 @@ Editor::update_route_visibility ()
for (i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
bool v = (*i)[route_display_columns.visible];
(*i)[route_display_columns.visible] = tv->marked_for_display ();
}

View file

@ -16,6 +16,7 @@
#include "actions.h"
#include "keyboard.h"
#include "keyeditor.h"
#include "utils.h"
#include "i18n.h"
@ -167,6 +168,8 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
goto out;
}
possibly_translate_keyval_to_make_legal_accelerator (ev->keyval);
bool result = AccelMap::change_entry (path,
ev->keyval,
(ModifierType) ev->state,

View file

@ -466,39 +466,10 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
it does allow.
*/
int fakekey = GDK_VoidSymbol;
int ret = false;
uint32_t fakekey = ev->keyval;
switch (ev->keyval) {
case GDK_Tab:
case GDK_ISO_Left_Tab:
fakekey = GDK_nabla;
break;
case GDK_Up:
fakekey = GDK_uparrow;
break;
case GDK_Down:
fakekey = GDK_downarrow;
break;
case GDK_Right:
fakekey = GDK_rightarrow;
break;
case GDK_Left:
fakekey = GDK_leftarrow;
break;
default:
break;
}
if (fakekey != GDK_VoidSymbol) {
ret = gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state));
if (ret) {
if (possibly_translate_keyval_to_make_legal_accelerator (fakekey)) {
if (gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state))) {
return true;
}
@ -724,3 +695,42 @@ reset_dpi ()
DPIReset();//Emit Signal
}
bool
possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval)
{
int fakekey = GDK_VoidSymbol;
switch (keyval) {
case GDK_Tab:
case GDK_ISO_Left_Tab:
fakekey = GDK_nabla;
break;
case GDK_Up:
fakekey = GDK_uparrow;
break;
case GDK_Down:
fakekey = GDK_downarrow;
break;
case GDK_Right:
fakekey = GDK_rightarrow;
break;
case GDK_Left:
fakekey = GDK_leftarrow;
break;
default:
break;
}
if (fakekey != GDK_VoidSymbol) {
keyval = fakekey;
return true;
}
return false;
}

View file

@ -76,6 +76,7 @@ bool canvas_item_visible (ArdourCanvas::Item* item);
void set_color (Gdk::Color&, int);
bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev);
bool possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval);
Glib::RefPtr<Gdk::Pixbuf> get_xpm (std::string);
Glib::RefPtr<Gdk::Pixbuf> get_icon (const char*);