LINUX.ORG.RU

X-window, программы не получают фокус ввода.

 ,


0

2

Доброго времени суток.

Решил все таки создать в Development. Есть Astra Orel. Если запустить иксы без оконного менеджера (командой xinit), то в некоторых программах не удается произвести ввод с клавиатуры.

Так, например не работает ввод текста в графическом редакторе из под коробки.

Я написал приложение на Qt 4.8.5, в котором некоторые операции совершаются с зажатой клавишей + клик мыши. Там не срабатывает фокус, я уже это проверил в gdb. Порой кстати такая ошибка не происходит. Это бывает редко.

но если переключить окно в полноэкранный режим используя QMainWindow::showFullScreen(), то все работает, сижу вот копаюсь в исходниках QWidget.

Но смущает то, что такая же ошибка появляется в граф. редакторе.

Почему без оконного менедждера такое вообще происходит? Я не прошу копаться за меня в этом, просто прошу хорошо знакомых с иксами подсказать, что может быть не так.

Но все таки, на всякий случай сделал ltrace и strace

trace.zip

Приложение в обоих случаях трассировки сработало одинаково.

  • после запуска было нажато ctrl+lmb, не сработало;
  • по нажатию на кнопку на форме приложение было переведено в полноэкранный режим;
  • было нажато ctrl+lmb, сработало успешно;
  • по нажатию на кнопку выхода на форме был произведен выход из приложения.

И еще: должна ли помочь тут XSendEvent?



Последнее исправление: OlegUP (всего исправлений: 4)

Сорри за оффтоп, но лично я плохо понимаю, для чего запускать без WM неполноэкранные приложения. Обоиной любоваться что ли?

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

Таково требование, есть 6 мониторов с touch'ем на каждом из которых нужно по одному окну приложения. Эта программа только для подгонки графических элементов под монитор, далее там будет что то вроде конструктора элементов Информационного Табло.

OlegUP
() автор топика

Проверь-ка такую вещь. У тебя наверняка есть указатель мыши на экране. Передвинь его на то место, где осуществляется ввод: в окно, в поле ввода. Если ты работешь без оконного менеджера, то в иксах действует рудиментарная процедура передачи фокуса ввода: фокус у того, над кем находится pointer.

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

вообще опытный образец из отдела забрали.

Ну вот как вернут, то попроверяй еще раз. Вот тот факт, что в в fullscreen приложение начинает работать, может намекать на это. В режиме fullscreen указатель мыши 100% находится над окном.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

Ну вот как вернут, то попроверяй еще раз.

Да виртуалка же есть, не суть. Дело в том, что выделить текст мышью получается, а вот курсор на нем не появляется, выходит, тут дело не в обработке события мыши если запустить xinit с параметром -geometry $w+$h+0+0 где $w больше длины окна и $h больше высоты того же окна приложения, а лучше вообще задать их соответственно разрешению монитора, то тут происходят следующие странности: сколько бы мы раз не запустили программу и не переходили в полноэкранный режим, фокус ловится, стоит только перейти в полноэкранный режим, то всех последующих запусках приложения фокус ловиться не будет, видимо, переход в fullscreen что-то сбивает в иксах. Не зря видимо в ltrace появляются ошибки вызовов QWidget::sizeHintEv, QWidget::minimumSizeHintEv и MainWindow::setCentralWindget

OlegUP
() автор топика
Ответ на: комментарий от OlegUP

А в режиме fullscreen работает или уже тоже не работает? А с приложениями на других тулкитах как? И как осуществляется переход в полноэкранный режим из приложения на Qt?

Пока что есть предположение, что после fullscreen окно root захватывает фокус ввода с клавиатуры и больше его не отдает. Но это еще рано говорить.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

смотрите топик

если переключить окно в полноэкранный режим используя QMainWindow::showFullScreen(), то все работает...

OlegUP
() автор топика
Ответ на: комментарий от OlegUP

Я переспросил, потому что вот эта фраза последняя сбила с толку:

сколько бы мы раз не запустили программу и не переходили в полноэкранный режим, фокус ловится, стоит только перейти в полноэкранный режим, то всех последующих запусках приложения фокус ловиться не будет

Поэтому я решил уточнить на всякий случай.

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

Я переспросил, потому что вот эта фраза последняя сбила с толку:

Действительно, сбивает, в полноэкранном режиме все работает, может случиться и такое что после него фокус ловится, тут вообще это случайно как-бы происходит. Вроде бы условия одинаковые, может конечно влияет положение курсора мыши?

Давайте обусловим запуск xinit с параметрами геометрии на весь размер экрана как случай (1) и будем ссылаться далее как (1), а запуск xinit без параметров геометрии как случай (2)

Постараюсь повторить так, чтобы не сбивало: В случае (1) фокус работает при запуске до тех пор, пока не будет осуществлен переход в полноэкранный режим и обратно , то в дальнейшем виджет даже после перезапуска программы теряет фокус.

В обоих случаях при работе в полноэкранном режиме все работает как и должно работать. но в случае (2) виджет может получить фокус, и чаще всего не получить при запуске.

OlegUP
() автор топика
Ответ на: комментарий от OlegUP

Ок, это понятно. А что насчет программ на разных тулкитах? Все одинаково ведут себя? Во всех input focus отваливается?

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