LINUX.ORG.RU

программирование в XWindow


0

0

Добрый день! нашел в сети такой пример кода

#include <X11/Xlib.h> // Every Xlib program must include this
#include <assert.h>   // I include this to test return values the lazy way
#include <unistd.h>   // So we got the profile for 10 seconds
#include <iostream>

#define NIL (0)       // A name for the void pointer

main() {

    // Open the display
    Display *dpy = XOpenDisplay(NIL);
    assert(dpy);

    // Get some colors
    int whiteColor = WhitePixel(dpy, DefaultScreen(dpy));

    // Create the window
    Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0,
            200, 100, 0, whiteColor, whiteColor);

    // Grab F2 key with code 68 (experiment by yourself)
    int F2_KEY = 68;

XGrabKey( dpy, 
F2_KEY, 
AnyModifier, 
w, //DefaultRootWindow (dpy), //<-----
true, 
GrabModeAsync, 
GrabModeAsync 
);

    // "Map" the window (that is, make it appear on the screen)
    XMapWindow(dpy, w);

    // Infinite loop ( hazard thing ;) )
    for(;;) {
        XEvent e;
        XNextEvent(dpy, &e);
        if (e.type == KeyPress )
        {
            printf( "F2 was pressed!!!\n" );
        }
    }
}

если в строке помеченной //<----- использовать DefaultRootWindow (dpy), то получаю ошибку времени выполнения

X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 33 (X_GrabKey) Serial number of failed request: 8 Current serial number in output stream: 9

даже из под sudo

Вообще, этим кодом (DefaultRootWindow (dpy),) я пытаюсь сделать глобальный хук клавы, то есть пытаюсь повесить хук на основное окно десктопа.

Таким образом работает утилита xbindkeys

как заставить это работать?

Ну почитай исходники xbindkeys, она наверное работает, значит делает что то по-другому.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

почитал. единственное отличие которое нашел - там хук ставится из под демона вроде. значит из обычного приложения нельзя? может кто знает где хотя бы взять толковую документацию по XWindow?

ArtemS2006
() автор топика

У меня (ion3) программа работает и когда захватывается с RootWindow. да и вообще все написано правильно (у меня в http://bitbucket.org/wieker/ksksawm/ все так же делается). Единственная идея, которая у меня есть, что эту клавишу уже захватил твой window manager. У тебя он какой? Попробуй запустить из под голых иксов.

wieker ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.