diff options
| -rw-r--r-- | itches/emacs/pgtk-shift-space.c | 80 |
1 files changed, 31 insertions, 49 deletions
diff --git a/itches/emacs/pgtk-shift-space.c b/itches/emacs/pgtk-shift-space.c index dcfef21..b223098 100644 --- a/itches/emacs/pgtk-shift-space.c +++ b/itches/emacs/pgtk-shift-space.c @@ -2,78 +2,60 @@ #include <gtk/gtk.h> -static gboolean show_key ( - GtkWidget *widget, - GdkEventKey *event, - gpointer data -) { - int mods[] = {GDK_SHIFT_MASK, GDK_CONTROL_MASK, GDK_MOD1_MASK}; - char* mods_names[] = {"shift", "control", "alt"}; - char mods_desc[64] = {'\0'}; - - for (size_t i=0; i<sizeof(mods)/sizeof(mods[0]); i++) - { - if (! (event->state & mods[i])) - continue; - - if (mods_desc[0]) - strcat(mods_desc, ":"); - - strcat(mods_desc, mods_names[i]); - } - if (! mods_desc[0]) - strcpy(mods_desc, "∅"); - - fprintf(stderr, "key pressed: '%d' (mods: %s)\n", event->keyval, mods_desc); - - if (gtk_im_context_filter_keypress ((GtkIMContext*)data, event)) - fprintf(stderr, "\t(handled by gtkim)\n"); - - return TRUE; +static gboolean +show_key (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + const int mods[] = {GDK_SHIFT_MASK, GDK_CONTROL_MASK, GDK_MOD1_MASK}; + char const * const mods_names[] = {"shift", "control", "alt"}; + + fprintf(stderr, "press:\t'%d'", event->keyval); + + for (size_t i=0; i<sizeof(mods)/sizeof(mods[0]); i++) + if (event->state & mods[i]) + fprintf(stderr, " +%s", mods_names[i]); + + fprintf(stderr, "\n"); + + if (gtk_im_context_filter_keypress (data, event)) + fprintf(stderr, "handled by gtkim\n"); + + fprintf(stderr, "\n"); + + return TRUE; } -static void show_commit ( - GtkIMContext *ctx, - gchar *str, - gpointer data -) { - fprintf(stderr, "\tcommitting: \"%s\"\n", str); +static void +show_commit (GtkIMContext *ctx, gchar *str, gpointer data) +{ + fprintf(stderr, "commit: \"%s\"\n", str); } static void -activate (GtkApplication* app, - gpointer user_data) +activate (GtkApplication *app, gpointer user_data) { GtkWidget *window; window = gtk_application_window_new (app); - gtk_window_set_title (GTK_WINDOW (window), "Window"); + gtk_window_set_title (GTK_WINDOW (window), "GTK key scratchpad"); gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); gtk_widget_show_all (window); GtkIMContext *im_context = gtk_im_context_simple_new(); - gtk_im_context_set_client_window( - im_context, gtk_widget_get_window(window) - ); + gtk_im_context_set_client_window(im_context, gtk_widget_get_window(window)); gtk_widget_add_events (window, GDK_KEY_PRESS_MASK); - g_signal_connect ( - G_OBJECT (window), "key_press_event", G_CALLBACK (show_key), im_context - ); - g_signal_connect ( - im_context, "commit", G_CALLBACK (show_commit), NULL - ); + g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (show_key), im_context); + g_signal_connect (im_context, "commit", G_CALLBACK (show_commit), NULL); } int -main (int argc, - char **argv) +main (int argc, char **argv) { GtkApplication *app; int status; - app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); + app = gtk_application_new ("org.gtk.key-scratchpad", G_APPLICATION_DEFAULT_FLAGS); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); |
