properly fake/forward keyboard events from video-monitor

This commit is contained in:
Robin Gareus 2013-06-10 00:52:24 +02:00
parent 85ceefd70a
commit d4a656fc35

View File

@ -21,9 +21,11 @@
#include "pbd/convert.h" #include "pbd/convert.h"
#include "gui_thread.h" #include "gui_thread.h"
#include "ardour_ui.h" #include "ardour_ui.h"
#include "utils.h"
#include <stdio.h> #include <stdio.h>
#include "public_editor.h" #include "public_editor.h"
#include "editor.h"
#include "video_monitor.h" #include "video_monitor.h"
#include "i18n.h" #include "i18n.h"
@ -248,33 +250,33 @@ VideoMonitor::is_started ()
void void
VideoMonitor::forward_keyevent (unsigned int keyval) VideoMonitor::forward_keyevent (unsigned int keyval)
{ {
#if 0 // TODO just 'fake' keyboard input Editor* ed = dynamic_cast<Editor*>(&PublicEditor::instance());
GdkEventKey ev; if (!ed) return;
ev.type = GDK_KEY_PRESS;
ev.window = NULL; // XXX
ev.send_event = TRUE;
ev.time = 0;
ev.state = 0;
ev.keyval = keyval;
ev.length = 1;
ev.string = NULL;
ev.hardware_keycode = 0;
ev.group = 0;
PublicEditor::instance().on_key_press_event(&ev); GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET(ed->gobj()));
ev.type = GDK_KEY_RELEASE; GdkKeymap *keymap = gdk_keymap_get_for_display (display);
PublicEditor::instance().on_key_press_event(&ev); GdkKeymapKey *keymapkey = NULL;
#else gint n_keys;
if (keyval == GDK_KEY_space) {
if(_session->transport_rolling ()) { if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return;
_session->request_transport_speed (0.0); if (n_keys !=1) { g_free(keymapkey); return;}
} else {
_session->request_transport_speed (1.0f); GdkEventKey ev;
} ev.type = GDK_KEY_PRESS;
} else if (keyval == GDK_KEY_BackSpace) { ev.window = ed->get_window()->gobj();
_session->goto_start (); ev.send_event = FALSE;
} ev.time = 0;
#endif ev.state = 0;
ev.keyval = keyval;
ev.length = 0;
ev.string = (gchar*) "";
ev.hardware_keycode = keymapkey[0].keycode;
ev.group = keymapkey[0].group;
g_free(keymapkey);
forward_key_press(&ev);
ev.type = GDK_KEY_RELEASE;
forward_key_press(&ev);
} }
void void