Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XLib и блокировка действий пользователя, В Gnome 
V
    Опции темы
Alkash
Дата 16.2.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Доброго времени суток господа, у меня появилась следующая проблема: требуется заблокировать рабочий стол, показать на весь экран некоторое изображение, и собственно - заблокировать клавиатурный ввод. Пытался реализовать следующим способом:
Код

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);
}

Но, собственно - никаких результатов это не принесло. После запуска, как будто код и не отрабатывает вовсе. Буду благодарен, если кто подскажет - почему-же эта конструкция не работает.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Fynivx
Дата 19.2.2012, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.8.2011

Репутация: нет
Всего: 1



Что именно в этом коде, по-вашему, должно блокировать ввод, где именно, для чего, и почему нельзя установить для этого глобальный флаг и использовать его в цикле обработки событий?
PM MAIL   Вверх
rsm
Дата 19.2.2012, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Цитата(Alkash @  16.2.2012,  12:43 Найти цитируемый пост)
Буду благодарен, если кто подскажет - почему-же эта конструкция не работает

Есть мнение, что отсутствует цикл обработки событий. Вот пример, делающий приблизительно то же, что требуется в задаче.
PM MAIL   Вверх
Alkash
Дата 21.2.2012, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Всем спасибо, уже сам разобрался. Что должно блокировать? Создается окно, закрывает собой экран, забирается клавиатурный ввод, ну и собственно proffit!


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.