GTK Button - Funktion ausführen solange der Button gedrückt wird
-
Ich hab mal ne Frage:
Wenn ich mitg_signal_connect (m1xplus, "clicked", G_CALLBACK(m1xfplus), NULL);
einen Button connecte, und ihn dan anklicke, wir die Funktion 'm1xfplus' EINMAL ausgeführt. Nun möchte ich aber das die Funktion solange immer und immerwieder ausgeführt wird, solange der Button gedrückt bleibt.
Wie gehts das?
Gruß Tom
-
So was??
#include <gtk/gtk.h> typedef struct { gboolean finish; GtkWidget *window; } WorkFields; static gboolean time_handler(WorkFields *work) { if ((work->window == NULL) || (work->finish)) return FALSE; // Stop g_timeout g_print("working...\n"); return TRUE; // Continue g_timeout } void button_pressed(GtkWidget *widget, WorkFields *work) { g_print("pressed\n"); work->finish = FALSE; g_timeout_add(1000, (GSourceFunc) time_handler, work); // call every second return; } void button_released(GtkWidget *widget, WorkFields *work) { g_print("released\n"); work->finish = TRUE; return; } int main( int argc, char *argv[]) { GtkWidget *fixed; GtkWidget *button; WorkFields *work; // Allocate storage work = g_slice_new (WorkFields); gtk_init(&argc, &argv); work->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(work->window), "GtkButton"); gtk_window_set_default_size(GTK_WINDOW(work->window), 230, 150); gtk_window_set_position(GTK_WINDOW(work->window), GTK_WIN_POS_CENTER); fixed = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(work->window), fixed); button = gtk_button_new_with_label("Press"); gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50); gtk_widget_set_size_request(button, 80, 35); g_signal_connect(G_OBJECT(button), "pressed", G_CALLBACK(button_pressed), work); g_signal_connect(G_OBJECT(button), "released", G_CALLBACK(button_released), work); g_signal_connect(G_OBJECT(work->window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(work->window); gtk_main(); // Free alocated storage g_slice_free (WorkFields, work); return 0; }