«key-release-event» не запускается - PullRequest
       15

«key-release-event» не запускается

0 голосов
/ 19 сентября 2018

Рассмотрим следующий код:

#include <gtk/gtk.h>

static void stop(GtkWidget *window, GdkEventKey *key, gboolean *key_held)
{
        *key_held = FALSE;
        g_print("stopped!\n");
}

static void counter(GtkWidget *window, GdkEventKey *key, gpointer user_data)
{
        gboolean key_held = TRUE;
        gulong signal_ID = g_signal_connect(window, "key-release-event", G_CALLBACK(stop), &key_held);

        for (unsigned long int i = 0;key_held;i++)
        {   
                g_print("%li\n", i); 
        }   

        g_signal_handler_disconnect(window, signal_ID);
}

int main(int argc, char **argv)
{
        gtk_init(&argc, &argv);

        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_widget_add_events(window, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);

        g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
        g_signal_connect(window, "key-press-event", G_CALLBACK(counter), NULL);

        gtk_widget_show(window);

        gtk_main();
}

Все просто: счетчик начинает отсчет с 0, когда пользователь нажимает клавишу, и продолжает считать, пока пользователь не отпустит ключ ...

Или, по крайней мере, так должно быть.На самом деле происходит следующее: когда пользователь нажимает клавишу, счетчик запускается и не останавливается, когда пользователь отпускает клавишу.Единственный способ прекратить считать - завершить программу.Кроме того, не только "key-release-event" не запускается, но и "delete-event" не слишком: мне нужно нажать Ctrl + C , чтобы завершить программу.

...