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

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

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

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

Legioner ★★★★★ ()
Ответ на: Re: программирование в XWindow от Legioner

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

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

ArtemS2006 ()

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

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

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