void SendKeyEvent(Gtk.Widget target, uint keyval, Gdk.ModifierType state, Gdk.EventType eventType, string subWindow) { Gdk.KeymapKey[] keyms = Gdk.Keymap.Default.GetEntriesForKeyval(keyval); if (keyms.Length == 0) { throw new Exception("Keyval not found"); } Gdk.Window win; if (subWindow == null) { win = target.GdkWindow; } else { win = (Gdk.Window)GetValue(target, target.GetType(), subWindow); } NativeEventKeyStruct nativeEvent = new NativeEventKeyStruct(); nativeEvent.type = eventType; nativeEvent.send_event = 1; nativeEvent.window = win.Handle; nativeEvent.state = (uint)state; nativeEvent.keyval = keyval; nativeEvent.group = (byte)keyms[0].Group; nativeEvent.hardware_keycode = (ushort)keyms[0].Keycode; nativeEvent.length = 0; nativeEvent.time = Gtk.Global.CurrentEventTime; IntPtr ptr = GLib.Marshaller.StructureToPtrAlloc(nativeEvent); try { Gdk.EventKey evnt = new Gdk.EventKey(ptr); Gdk.EventHelper.Put(evnt); } finally { Marshal.FreeHGlobal(ptr); } }
void SendKeyEvent(Gtk.Widget target, uint keyval, Gdk.ModifierType state, Gdk.EventType eventType, string subWindow) { Gdk.KeymapKey[] keyms = Gdk.Keymap.Default.GetEntriesForKeyval (keyval); if (keyms.Length == 0) throw new Exception ("Keyval not found"); Gdk.Window win; if (subWindow == null) win = target.GdkWindow; else win = (Gdk.Window) GetValue (target, target.GetType (), subWindow); var nativeEvent = new NativeEventKeyStruct { type = eventType, send_event = 1, window = win.Handle, state = (uint)state, keyval = keyval, group = (byte)keyms [0].Group, hardware_keycode = (ushort)keyms [0].Keycode, length = 0, time = Gtk.Global.CurrentEventTime }; IntPtr ptr = GLib.Marshaller.StructureToPtrAlloc (nativeEvent); try { Gdk.EventHelper.Put (new Gdk.EventKey (ptr)); } finally { Marshal.FreeHGlobal (ptr); } }