Re: How to get all the key press event in a textview?



On Fri, Sep 28, 2007 at 05:40:56PM +0800, Magicloud Magiclouds wrote:
     As in Emacs, something like Ctrl+Alt+a work, even in a gnome-terminal.

How is Emacs related to this?

     But in my simple gtk program,

What program?

     I just get ctrl+65507(keyval) in key release event.

This is the release of Ctrl (when Alt is no longer pressed).
If you release Alt before Ctrl, you should get this event.
If you release Ctrl first, the Alt flag will be set too in
the Ctrl-release event because Alt is still held.

Do you mean this is the *only* key release event you receive?

     How to make it work? Thanks.

In *my* simple Gtk+ program, it works normally.  Pressing
Ctrl, pressing Alt, pressing l (Ctrl-Alt-a is taken by my
window manager), releasing l, releasing Alt, releasing Ctrl
prints:

press: keyval=ffe3 state=0x0000
press: keyval=ffe9 state=0x0004
press: keyval=006c state=0x000c
release: keyval=006c state=0x000c
release: keyval=ffe9 state=0x000c
release: keyval=ffe3 state=0x0004

This is what xev prints, too.  Of course, since the modifier
state is the state when the event occurred, you can get
various combinations of states in the l-release event
depending on the order of key releases.   But in all cases
user's actions are faithfully reprorted.

Yeti

--
http://gwyddion.net/


=====================================================================
#include <gtk/gtk.h>

static gboolean
key_event(G_GNUC_UNUSED GtkWidget *widget,
          GdkEventKey *event)
{
    g_printerr("%s: keyval=%04x state=0x%04x\n",
               event->type == GDK_KEY_PRESS ? "press" : "release",
               event->keyval, event->state);
    return FALSE;
}

int
main(int argc, char *argv[])
{
    GtkWidget *window, *view;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 320, 240);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    view = gtk_text_view_new();
    g_signal_connect(view, "key-press-event", G_CALLBACK(key_event), NULL);
    g_signal_connect(view, "key-release-event", G_CALLBACK(key_event), NULL);
    gtk_container_add(GTK_CONTAINER(window), view);

    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]