Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: XLib, Gnome и блокировка действий пользователя  (Прочитано 645 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CynicRus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
Доброго времени суток господа, у меня появилась следующая проблема: требуется заблокировать рабочий стол, показать на весь экран некоторое изображение, и собственно - заблокировать клавиатурный ввод. Пытался реализовать следующим способом:
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);
}
Но, собственно - никаких результатов это не принесло. После запуска, как будто код и не отрабатывает вовсе. Буду благодарен, если кто подскажет - почему-же эта конструкция не работает.
"Only two things are infinite, the universe and human stupidity... and I'm not sure about the universe."  -- Albert Einstein

 

Страница сгенерирована за 0.868 секунд. Запросов: 26.