$window->connect('key-press-event', 'on_key');
В функцию on_key() автоматически передаются два параметра: виджет и GdkEvent, содержащий информацию о нажатых клавишах. $event->keyval содержит модификатор нажатой клавиши (полный список модификаторов находится здесь), $event->state содержит маску дополнительно используемой клавиши (полный список). Следующее условие выполнится, если были нажаты Ctrl и q:
$keyval = $event->keyval;
$state = $event->state;
if ($state & Gdk::CONTROL_MASK && $keyval == Gdk::KEY_q)
{
echo "Ctrl + q\n";
}
При нажатии трёх клавиш, одна из которых Shift, в переменной $keyval будет содержаться заглавная буква, а не прописная:
elseif ($state & Gdk::CONTROL_MASK && $keyval == Gdk::KEY_A)
{
echo "Ctrl + Shift + A\n";
}
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(200, 100);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$window->connect('key-press-event', 'on_key');
$window->show_all();
Gtk::main();
function on_key($widget, $event)
{
$keyval = $event->keyval;
$state = $event->state;
if ($state & Gdk::CONTROL_MASK && $keyval == Gdk::KEY_q)
{
echo "Ctrl + q\n";
}
elseif ($state & Gdk::MOD1_MASK && $keyval == Gdk::KEY_s)
{
echo "Alt + s\n";
}
elseif ($state & Gdk::SUPER_MASK && $keyval == Gdk::KEY_d)
{
echo "Super + d\n";
}
// Комбинация из трёх клавиш, одна из которых - Shift
elseif ($state & Gdk::CONTROL_MASK && $keyval == Gdk::KEY_A)
{
echo "Ctrl + Shift + A\n";
}
}
Комментариев нет:
Отправить комментарий