История изменений
Исправление Zubok, (текущая версия) :
Вот рабочий код. Я проверил.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
int
main (int argc, char **argv)
{
XEvent xev;
int fixes_opcode, fixes_event_base, fixes_error_base;
PointerBarrier barrier;
int dpy_w;
int dpy_h;
Display *dpy;
dpy = XOpenDisplay(NULL);
if (!XQueryExtension(dpy, "XFIXES",
&fixes_opcode,
&fixes_event_base,
&fixes_error_base))
return EXIT_FAILURE;
dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
dpy_h = DisplayHeight (dpy, DefaultScreen (dpy));
barrier = XFixesCreatePointerBarrier (dpy, DefaultRootWindow(dpy),
100, 0, 100, dpy_h,
0, 0, NULL); // for vertical barrier
while (1) {
XNextEvent (dpy, &xev);
}
}
Параметры каждого монитора можно из расширения RandR узнать. Там будет указано, какой монитор где расположен и какие у них разрешения. dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
выдаст тебе ширину всего виртуального экрана :0, а не помониторно.
UPD. Или сделай так, чтобы координату вертикального барьера можно было передать через командную строчку. Скажем
./vertical-pointer-barrier 1280
Исправление Zubok, :
Вот рабочий код. Я проверил.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
int
main (int argc, char **argv)
{
XEvent xev;
int fixes_opcode, fixes_event_base, fixes_error_base;
PointerBarrier barrier;
int dpy_w;
int dpy_h;
Display *dpy;
dpy = XOpenDisplay(NULL);
if (!XQueryExtension(dpy, "XFIXES",
&fixes_opcode,
&fixes_event_base,
&fixes_error_base))
return EXIT_FAILURE;
dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
dpy_h = DisplayHeight (dpy, DefaultScreen (dpy));
barrier = XFixesCreatePointerBarrier (dpy, DefaultRootWindow(dpy),
100, 0, 100, dpy_h,
0, 0, NULL); // for vertical barrier
while (1) {
XNextEvent (dpy, &xev);
}
}
Параметры каждого монитора можно из расширения RandR узнать. Там будет указано, какой монитор где расположен и какие у них разрешения. dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
выдаст тебе ширину всего виртуального экрана :0, а не помониторно.
Исходная версия Zubok, :
Вот рабочий код. Я проверил.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
int
main (int argc, char **argv)
{
XEvent xev;
int fixes_opcode, fixes_event_base, fixes_error_base;
PointerBarrier barrier;
int dpy_w;
int dpy_h;
Display *dpy;
dpy = XOpenDisplay(NULL);
if (!XQueryExtension(dpy, "XFIXES",
&fixes_opcode,
&fixes_event_base,
&fixes_error_base))
return EXIT_FAILURE;
dpy_w = DisplayWidth (dpy, DefaultScreen (dpy));
dpy_h = DisplayHeight (dpy, DefaultScreen (dpy));
barrier = XFixesCreatePointerBarrier (dpy, DefaultRootWindow(dpy),
100, 0, 100, dpy_h,
0, 0, NULL); // for vertical barrier
while (1) {
XNextEvent (dpy, &xev);
}
}