Procedure TGtkTerm.SendKey(AKey: char);
var
Event : PGdkEvent;
hw_keycode : ctypes.cuint16;
keys : PGdkKeymapKey;
n_keys : ctypes.cint;
begin
if(self.Vte=nil)then exit;
write('gdk_keymap_get_entries_for_keyval... ');
if gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), ord(AKey), keys, @n_keys)
then try
hw_keycode := keys[0].keycode;
writeln('done.');
writeln('hw_keycode=',hw_keycode,'; keys freed.');
finally
g_free(keys);
writeln('failed.');
end
else exit;
write('gdk_event_new (GDK_KEY_PRESS)... ');
Event := gdk_event_new(GDK_KEY_PRESS);
if(Event=nil)
then writeln('failed.')
else writeln('done.');
if(Event=nil)then exit;
try
Event^.key.window := self.Vte^.window;
Event^.key.state := 0;//GDK_MOD1_MASK; {alt}
Event^.key.hardware_keycode := hw_keycode;
Event^.key.keyval := gdk_unicode_to_keyval(ord(AKey));
Event^.key.length := 1;
writeln('key.keyval=',Event^.key.keyval);
Event^.key.send_event := 0;
Event^.key.time := GDK_CURRENT_TIME;
write('gtk_main_do_event(Event);... ');
try
gtk_main_do_event(Event);
writeln('done.');
except
writeln('failed.');
end;
finally
gdk_event_free(Event);
end;
end;