Сложные привязки клавиш в Gtk - PullRequest
2 голосов
/ 05 июня 2019

Некоторые текстовые редакторы, такие как поддержка возвышенного или атомного типа привязки сложных клавиш , когда вы нажимаете и отпускаете две или более кнопок, удерживая Ctrl или любую другую клавишу-модификатор, нажатую для запуска какого-либо действия.

Кажется, что нет прямой поддержки такой концепции в Gtk.Конечно, можно сделать что-то вроде этого:

static second_event_happened = FALSE;

ctrl_k_cb () {
    g_timeout_add (500, ctrl_k_timeout, NULL) // queue watching function

    // adjust accels so that until timeout ctrl+t calls ctrl_k_t_cb
}

ctrl_k_timeout () {
    if (second_event_happened)
       second_event_happened = FALSE;
    else
       ctrl_k_function ();

    // reset accels to their normal state, i.e. ctrl+t calls ctrl_t_cb
}

ctrl_t_cb () {
    ...    
}

ctrl_k_t_cb () {
    second_event_happened = TRUE;

    ...
}

Однако этот подход подвержен ошибкам.Есть ли более простое или GTK-решение?

...