Skip to content

Instantly share code, notes, and snippets.

@anderflash
Created July 7, 2016 23:51
Show Gist options
  • Save anderflash/b9cffe559f3981e3fc63e9e0d4eb63ac to your computer and use it in GitHub Desktop.
Save anderflash/b9cffe559f3981e3fc63e9e0d4eb63ac to your computer and use it in GitHub Desktop.
A Minimum Working Example (MWE) of failure of press event in GTK+3
#include <gtk/gtk.h>
static gboolean
press_event(GtkWidget* widget, GdkEvent* event, gpointer user_data){
printf("Hello\n");
return FALSE;
}
static gboolean
release_event(GtkWidget* widget, GdkEvent* event, gpointer user_data){
printf("World\n");
return FALSE;
}
static gboolean
clicked_event(GtkWidget* widget, GdkEvent* event, gpointer user_data){
printf("!\n");
return FALSE;
}
static void
activate(GtkApplication* app, gpointer user_data){
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget* toolbar = gtk_toolbar_new();
GtkWidget* left = GTK_WIDGET(gtk_tool_button_new(NULL,"left"));
GtkWidget* box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_add_events(left, GDK_BUTTON_PRESS_MASK);
gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(window), box);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar),GTK_TOOL_ITEM(left),0);
g_signal_connect(left,"button-press-event",G_CALLBACK(press_event),NULL);
g_signal_connect(left,"button-release-event",G_CALLBACK(release_event),NULL);
g_signal_connect(left,"clicked",G_CALLBACK(clicked_event),NULL);
g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
gtk_widget_show_all(window);
gtk_main();
}
int main(int argc, char const *argv[])
{
// Common routine for setting up a GTK+ application
GtkApplication* app = gtk_application_new("io.github.atkv",G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
int status = g_application_run(G_APPLICATION(app),argc, (char**)argv);
g_object_unref(app);
return status;
}
@anderflash
Copy link
Author

anderflash commented Jul 7, 2016

Compiles with

$ gcc test_gtk_press_event.c -o  test_gtk_press_event `pkg-config --libs --cflags gtk+-3.0`
$ ./test_gtk_press_event

If I click fast, the press event happens, but in a normal speed, it does not.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment