LINUX.ORG.RU

История изменений

Исправление alozovskoy, (текущая версия) :

Спасибо огромное!

Вот что у меня получилось:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/XInput2.h>

int dpy_w;
int dpy_h;

int barrier_x;
int barrier_y;
Display *dpy;
PointerBarrier barrier;
Window window;

static void
create_barrier (void)
{

//barrier = XFixesCreatePointerBarrier (dpy, window, 0, barrier_y, dpy_w, barrier_y, 0, 0, NULL); - for horizontal barrier
barrier = XFixesCreatePointerBarrier (dpy, window, barrier_x, 0, barrier_x, dpy_h, 0, 0, NULL); // for vertical barrier
}

int
main (int argc, char **argv)
{
    XEvent xev;
    XIEventMask mask;
    unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 };

    dpy = XOpenDisplay(NULL);

    dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
    dpy_h = DisplayHeight (dpy, DefaultScreen (dpy));

    window = XCreateSimpleWindow (dpy, DefaultRootWindow(dpy),
                                  0, 0, dpy_w, dpy_h,
                                  0, BlackPixel(dpy, 0),
                                  WhitePixel(dpy, 0));

    barrier_y = 100;
    barrier_x = 100;

    create_barrier ();

    XISetMask (mask_bits, XI_BarrierHit);
    XISetMask (mask_bits, XI_BarrierLeave);
    mask.deviceid = XIAllMasterDevices;
    mask.mask = mask_bits;
    mask.mask_len = sizeof (mask_bits);
    XISelectEvents (dpy, window, &mask, 1);
    XSync(dpy, False);
 
    while (1) {}

}

Это работает, но за качество кода не ручаюсь - первый раз сегодня что-то делал с кодом на си, при этом просто повыкидывал все «ненужное» из примера. Ну и, конечно, тут все захардкожено.

Исходная версия alozovskoy, :

Спасибо огромное!

Вот что у меня получилось:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/XInput2.h>

int dpy_w;
int dpy_h;

int barrier_x;
int barrier_y;
Display *dpy;
PointerBarrier barrier;
Window window;

static void
create_barrier (void)
{

//barrier = XFixesCreatePointerBarrier (dpy, window, 0, barrier_y, dpy_w, barrier_y, 0, 0, NULL); - for horizontal barrier
barrier = XFixesCreatePointerBarrier (dpy, window, barrier_x, 0, barrier_x, dpy_h, 0, 0, NULL); // for vertical barrier
}

int
main (int argc, char **argv)
{
    XEvent xev;
    XIEventMask mask;
    unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 };

    dpy = XOpenDisplay(NULL);

    dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
    dpy_h = DisplayHeight (dpy, DefaultScreen (dpy));

    window = XCreateSimpleWindow (dpy, DefaultRootWindow(dpy),
                                  0, 0, dpy_w, dpy_h,
                                  0, BlackPixel(dpy, 0),
                                  WhitePixel(dpy, 0));

    barrier_y = 100;
    barrier_x = 100;

    create_barrier ();

    XISetMask (mask_bits, XI_BarrierHit);
    XISetMask (mask_bits, XI_BarrierLeave);
    mask.deviceid = XIAllMasterDevices;
    mask.mask = mask_bits;
    mask.mask_len = sizeof (mask_bits);
    XISelectEvents (dpy, window, &mask, 1);
    XSync(dpy, False);
 
    while (1) {}

}

Это работает, но за качество кода не ручаюсь - первый раз сегодня что-то делал с кодом на си, при этом просто повыкидывал все «ненужное» из примера.