Подключите вкладку к gtkEntry - PullRequest
0 голосов
/ 15 декабря 2011

Как мне заставить клавишу табуляции вести себя как клавиша Enter в GtkEntry? Я могу поймать клавишу «Ввод» с сигналом «активирован». Как я могу поймать клавишу «tab» для GtkEntry?

static void enter(GtkWidget *widget, GtkWidget *entry)
{
  const gchar *entry_text;
  entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
  printf("Entry contents: %s\n", entry_text);
}

entry = gtk_entry_new();
g_signal_connect(entry, "activated", G_CALLBACK(enter), entry);

Точно так же, как я могу получать уведомления при нажатии клавиши табуляции?

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Обычно это плохая идея, поскольку вкладка используется для изменения фокуса приложения.Помните, что важно сделать приложение пригодным для использования без мыши, использование tab в GtkEntry для чего-то другого, кроме изменения фокуса, сделает это намного сложнее, возможно, даже невозможно.

1 голос
/ 15 декабря 2011

Вы можете зарегистрировать запись для "key-press-event" или "key-release-event" и в обратном вызове события проверьте значение ключа GdkEventKey.Вы можете использовать макросы, определенные в gdkkeysyms.h, чтобы проверить «Tab» или «Enter», что-то в этих строках:

...
#include <gdk/gdkkeysyms.h>
...
static gboolean
key_press_cb(GtkWidget *w, GdkEvent *ev, gpointer data)
{
    (void)w; (void)data; /* To avoid compiler warnings */
    GdkEventKey *key = (GdkEventKey*)ev;
    if(key) /* Extra check maybe redundant */
    {
        if(key->keyval == GDK_Tab)
            printf(" Tab pressed\n");
        else if (key->keyval == GDK_Return)
                printf(" Enter pressed\n");
    }
    /* Default handling of "Tab" is change of focus.
     * If TRUE is passed here, the event will not be propagated
     */
    return FALSE;
}
...
    entry = gtk_entry_new ();
    g_signal_connect(entry, "key-press-event", G_CALLBACK(key_press_cb), NULL);
...

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...