move emulate_key_event() to utils
authorRobin Gareus <robin@gareus.org>
Sun, 9 Jun 2013 23:54:55 +0000 (01:54 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 9 Jun 2013 23:54:55 +0000 (01:54 +0200)
gtk2_ardour/utils.cc
gtk2_ardour/utils.h
gtk2_ardour/video_monitor.cc

index 19f93ad2e82b8005a08790ed341827c0e97ce945..d4bc460269029fdebedf8ee02bd425d89098f25b 100644 (file)
@@ -329,6 +329,35 @@ forward_key_press (GdkEventKey* ev)
         return PublicEditor::instance().on_key_press_event(ev);
 }
 
+bool
+emulate_key_event (Gtk::Widget* w, unsigned int keyval)
+{
+       GdkDisplay  *display = gtk_widget_get_display (GTK_WIDGET(w->gobj()));
+       GdkKeymap   *keymap  = gdk_keymap_get_for_display (display);
+       GdkKeymapKey *keymapkey = NULL;
+       gint n_keys;
+
+       if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return false;
+       if (n_keys !=1) { g_free(keymapkey); return false;}
+
+       GdkEventKey ev;
+       ev.type = GDK_KEY_PRESS;
+       ev.window = gtk_widget_get_window(GTK_WIDGET(w->gobj()));
+       ev.send_event = FALSE;
+       ev.time = 0;
+       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;
+       return forward_key_press(&ev);
+}
+
 bool
 key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
 {
@@ -461,6 +490,8 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
                /* no special handling or there are modifiers in effect: accelerate first */
 
                 DEBUG_TRACE (DEBUG::Accelerators, "\tactivate, then propagate\n");
+               DEBUG_TRACE (DEBUG::Accelerators, string_compose ("\tevent send-event:%1 time:%2 length:%3 string:%4 hardware_keycode:%5 group:%6\n",
+                                       ev->send_event, ev->time, ev->length, ev->string, ev->hardware_keycode, ev->group));
 
                if (allow_activating) {
                        DEBUG_TRACE (DEBUG::Accelerators, "\tsending to window\n");
index 7137f273c65752d44aa6513313be41ea89d679e6..d3110104fbf7f10e403a1226ae3272cec25d92b1 100644 (file)
@@ -65,6 +65,7 @@ void set_color (Gdk::Color&, int);
 bool relay_key_press (GdkEventKey* ev, Gtk::Window* win);
 bool forward_key_press (GdkEventKey* ev);
 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev);
+bool emulate_key_event (Gtk::Widget*, unsigned int);
 
 Glib::RefPtr<Gdk::Pixbuf> get_xpm (std::string);
 std::string get_icon_path (const char*);
index 258dc85c0ba1ebd84ba6cfc834ce9683a7c7bfa0..c33b96fda2f641d816aafffd23596a6b09720204 100644 (file)
@@ -252,31 +252,7 @@ VideoMonitor::forward_keyevent (unsigned int keyval)
 {
        Editor* ed = dynamic_cast<Editor*>(&PublicEditor::instance());
        if (!ed) return;
-
-       GdkDisplay  *display = gtk_widget_get_display (GTK_WIDGET(ed->gobj()));
-       GdkKeymap   *keymap  = gdk_keymap_get_for_display (display);
-       GdkKeymapKey *keymapkey = NULL;
-       gint n_keys;
-
-       if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return;
-       if (n_keys !=1) { g_free(keymapkey); return;}
-
-       GdkEventKey ev;
-       ev.type = GDK_KEY_PRESS;
-       ev.window = ed->get_window()->gobj();
-       ev.send_event = FALSE;
-       ev.time = 0;
-       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);
+       emulate_key_event(ed, keyval);
 }
 
 void