Exemple #1
0
        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);
            }
        }