LINUX.ORG.RU

Xlib


0

0

Народ, такой косяк. есть прога, написана под хлиб. Ее задача - блокировать Хы, и ждать ввода пароля (не надо мне говорить что для этих целей есть всякий xlock и подобное. нафик.) Захват ввода осуществляется такими строками: XGrabPointer(*dsp,*wnd1,False,ButtonPressMask|ButtonReleaseMask|PointerMotionMas k,GrabModeAsync,GrabModeAsync,None,None,CurrentTime); XGrabKeyboard(*dsp,*wnd1,True,GrabModeAsync,GrabModeAsync,CurrentTime); XSelectInput(*dsp,*wnd1,KeyPressMask|KeyReleaseMask); XFlush( *dsp );

Все работает, только такой вот косяк: иногда машина перестает реагировать на нажатия кнопок. Причем не реагирует окло минуты, а потом обрабатывает все скопом. В чем может быть причина??? (события берутся по XNextEvent)

anonymous

Hесколько фич

0) Всегда надо проверять нормально ли выполнен реквест (success check)

1) В не зависимости от event mask, eventы KeyPress/KeyRelease будут
приходить если ты грабил кейборду, то есть SelectInput излишен

2) Hе нужно ставить в event mask те евенты которые ты не хандлишь
тоесть к примеру если ты не обрабатываешь PointerMotion или
ButtonRelease то не надо их пихать в евент маск.

В отличии от GrabKeyboard евенты репортяться в соответствии с event
mask, то есть в этом случае надо селектить.

3) Если ты хочешь чтобы все клиенты кроме тебя отсасывали, тоесть
чтобы их запросы не обрабатывал server то надо использовать
GrabServer

В твоем случае скорее всего надо грабить рутовое окно .. хотя хз .. по
идеи должно работать и с любым другим окном

То что происходять затыки очень похоже что ктото фризит клаву и через
несколько времени отпускает .. соответственно евенты копятся а потом
разом репортятся .. надо смотреть более конкретно ситуацию ..

lg ★★
()
Ответ на: комментарий от lg

Спасиоб, очень помог. XGrabServer спас положение...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.