Доброго времени суток господа, у меня появилась следующая проблема: требуется заблокировать рабочий стол, показать на весь экран некоторое изображение, и собственно - заблокировать клавиатурный ввод. Пытался реализовать следующим способом:
Window root,wnd,logo,logo2;
int x,y,dW,dH;
int running = 0;
char *background = NULL;
int lockScreen(Display **dsp,Window *wnd1){
XSetWindowAttributes attr,attr1,attr2;
Pixmap shape,pic,lock,shp, bg_pic, bg_shp;
int screen_number = 0;
long win_mask = CWBackPixel|CWBorderPixel|CWOverrideRedirect;
if(running == 1)
return 0;
running = 1;
x=5;
y=35;
(*dsp) = XOpenDisplay(":0.0");
if((*dsp) == NULL)
return(-1);
dW = XDisplayWidth(*dsp,screen_number);
dH = XDisplayHeight(*dsp,screen_number);
root = XRootWindow(*dsp,screen_number);
if(background != NULL)
{
if(XpmReadFileToPixmap(*dsp,root,background,&bg_pic,&bg_shp,NULL) != XpmOpenFailed)
win_mask = CWBackPixmap|CWBorderPixel|CWOverrideRedirect;
}
attr.background_pixel = 700;
attr.background_pixmap = bg_pic;
attr.border_pixel = 100;
attr.override_redirect = True;
(*wnd1) = XCreateWindow(*dsp, root, 0, 0, dW, dH,0,
CopyFromParent, CopyFromParent,CopyFromParent,
win_mask
,&attr);
XMapRaised(*dsp,*wnd1);
XpmCreatePixmapFromData(*dsp,*wnd1,logo_xpm,&pic,&shape,NULL);
attr1.background_pixmap = pic;
logo = XCreateWindow(*dsp,*wnd1,dW-150,0,150,30,0,CopyFromParent,CopyFromParent,CopyFromParent,CWBackPixmap,&attr1);
XMapWindow(*dsp,logo);
logo2 = XCreateSimpleWindow(*dsp, *wnd1, 0, 0, dW-150, 30, 0, 0,300);
XMapWindow(*dsp,logo2);
XpmCreatePixmapFromData(*dsp,*wnd1,locked_xpm,&lock,&shp,NULL);
attr2.background_pixmap = lock;
wnd = XCreateWindow(*dsp,*wnd1,dW/2-150,dH/2-100,300,200,0,CopyFromParent,CopyFromParent,CopyFromParent,CWBackPixmap,&attr2);
//wnd = XCreateSimpleWindow(*dsp, *wnd1, x, y, 200, 200, 1, 0, 400);
XMapWindow(*dsp,wnd);
XGrabPointer(*dsp,*wnd1,False,ButtonPressMask|ButtonReleaseMask|PointerMotionMask,GrabModeAsync,GrabModeAsync,None,None,CurrentTime);
XGrabKeyboard(*dsp,*wnd1,False,GrabModeAsync,GrabModeAsync,CurrentTime);
XSelectInput(*dsp,*wnd1,KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|ShiftMask|LockMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask);
return(0);
}
Но, собственно - никаких результатов это не принесло. После запуска, как будто код и не отрабатывает вовсе. Буду благодарен, если кто подскажет - почему-же эта конструкция не работает.