There is a small test app:
Code:
/* Compile with:
* gcc -Wall -g events.c -o events $(pkg-config --cflags --libs gtk+-2.0)
*/
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
static void
set_zoom_atom (GtkWidget *window,
gint state)
{
GdkWindow *gdk_window;
GdkDisplay *display;
state = state > 0 ? 1 : 0;
gdk_window = window->window;
if (!gdk_window) {
g_print ("Not available window\n");
return;
}
display = gdk_drawable_get_display ((GdkDrawable*)gdk_window);
if (!display) {
g_print ("Not available display\n");
return;
}
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
GDK_WINDOW_XID (gdk_window),
gdk_x11_get_xatom_by_name_for_display
(display, "_HILDON_ZOOM_KEY_ATOM"),
XA_INTEGER, 32, PropModeReplace,
(unsigned char*) &state, 1);
}
static gboolean
key_cb (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data)
{
const gchar *msg;
switch (event->type) {
case GDK_KEY_PRESS:
msg = "press";
break;
case GDK_KEY_RELEASE:
msg = "release";
break;
default:
msg = "unknown";
break;
}
g_print ("%s\tstate[0x%x]\tkey[0x%x]\n", msg, event->state, event->keyval);
return FALSE;
}
static void
destroy_cb (GtkWidget *widget,
gpointer data)
{
gtk_main_quit ();
}
gint
main (gint argc,
gchar **argv)
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (window), "delete-event",
G_CALLBACK (destroy_cb), NULL);
g_signal_connect (G_OBJECT (window), "key-press-event",
G_CALLBACK (key_cb), NULL);
g_signal_connect (G_OBJECT (window), "key-release-event",
G_CALLBACK (key_cb), NULL);
gtk_widget_show_now (window);
gdk_window_set_events (window->window,
GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
set_zoom_atom (window, 1);
gtk_main ();
exit (0);
}
You can see that AltGr modifier (I use Swedish keyboard) is not taken into account in scratchbox. I guess the issue with key maps inside X86 scratchbox target.