LINUX.ORG.RU

Считать данные побайтно из stdin и из окна GtkWindow


0

0

Собственно нужно написать небольшую обертку над MPlayer'ом, которая будет иметь собственное GTK-окно.

Необходимо сохранить контроль над MPlayer'ом, а именно:

1) При нажатии пользователем на какую-либо клавишу на клавиатуре внутри моего GTK-окна ретранслировать ее MPlayer'у в stdin, как будто она была нажата в его терминале.

2) При нажатии пользователем на какую-либо клавишу в терминале, когда запущена моя программа, также ретранслировать ее MPlayer'у.

С обоими ситуациями проблемы:

1) Привязываюсь к сигналу key_press_event окна и выполняю

Glib::ustring string(1, gdk_keyval_to_unicode(event->keyval));
write(mplayer_stdin, string.data(), string.size());
Работает, но только с простыми клавишами, представляющими собой цифры и буквы, а для стрелок и пр. - нет.

2) С stdin'ом приложения тоже косяк. Слежу за ним при помощи

const Glib::RefPtr<Glib::IOSource> io_source = Glib::IOSource::create(fd, Glib::IO_IN | Glib::IO_HUP);
io_source->connect(sigc::ptr_fun(&io_handler));
io_source->attach(Glib::MainContext::get_default());
и читаю read()'ом. В итоге получается, что данные передаются приложению только после того, как пользователь нажмет на Enter, что, естественно, меня не устраивает - видимо дело в readline или в чем-то еще.

Укажите, пожалуйста, направление, в котором следует копать.


> Укажите, пожалуйста, направление, в котором следует копать.

думается что в направлении опции -slave mplayer'а, дабы ему слать не коды клавиш, а команды.

Begemoth ★★★★★
()

> и читаю read()'ом. В итоге получается, что данные передаются приложению только после того, как пользователь нажмет на Enter, что, естественно, меня не устраивает - видимо дело в readline или в чем-то еще.

Дело в режиме работы терминала и/или кэшировании ввода.

Begemoth ★★★★★
()

посмотри код gnome-mplayer

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.