Проблемма с модальными окнами (Linux)

Вопросы программирования и использования среды Lazarus.

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

Ответить
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Проблемма с модальными окнами (Linux)

Сообщение qivi »

Столкнулся с проблемой. В Linux Mint 16 Cinnamon, проблема заключается в следующем:

Допустим у программы есть главная форма и дополнительная открываемая в модальном режиме по надобности. Главная форма запускается в полно экранном режиме:

Код: Выделить всё

Form1.WindowState:=wsFullScreen;

Далее вызываем вспомогательную форму (допустим по нажатию кнопки):

Код: Выделить всё

Form2.ShowModal

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

Как с этим бороться со стороны программы (я к тому что советы касающиеся перенастройки корицы что бы этого избежать не актуальны)?
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

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

Модальное окно под главной формой теряет фокус так как его получило модальное окно.....
Так кто получает фокус в итоге? Я так понимаю, что модальное окно получает фокус, и оно же при этом невидимо
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

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

Код: Выделить всё

Form1.WindowState:=wsFullScreen;

Переключение рабочих областей и окон через верхний угол не работает, вынужден через альт+таб переключаться на другую запущенную программу, это возвращает панель меню и задач, через диспечер процессов убиваю выполняемую программу.
Последний раз редактировалось qivi 17.02.2014 18:43:13, всего редактировалось 1 раз.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

http://lazplanet.blogspot.ru/2014/01/al ... -form.html
http://forum.lazarus.freepascal.org/ind ... ic=11975.0
http://forum.lazarus.freepascal.org/ind ... ic=12837.0

Добавлено спустя 3 минуты 17 секунд:
qivi писал(а):

Код: Выделить всё

Form1.WindowState:=wsFullScreen;


А если так? И играться уже с переключением StayOnTop?
http://www.cyberforum.ru/lazarus/thread1059288.html
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Прочитав предложенное выше я установил свойству FormStyle значение fsStayOnTop, расчитывая что она будет сверху только моей программы, а по факту форма ведёт себя единтично fsSystemStayOnTop. Почему так может быть? Что с этим можно сделать?
Аватара пользователя
minoshi
постоялец
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Сообщение minoshi »

в mseide сталкивался с подобным - как решить в лоб не нашел, сделал финт ушами - реализовал по схеме "все в одном окне".
При вызове дополнительного окна основное окно скрывается за фреймом, который препятствует передаче фокуса элементам, на фрейме расположено то самое дополнительное окно.

Выглядит всё это так:
Изображение
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А нельзя использовать wsMaximized вместо wsFullScreen?
Хотя эффект конечно странный.
alex208210
постоялец
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Сообщение alex208210 »

linux sabayon x86, XFCE(GTK), lazarus 0.9.28.2. FPC 2.4.0. Такой проблемы не наблюдаю.
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Каждый раз, когда всплывает модальное окно вспоминаю разработчиков нехорошим словом.
Модальные окна - зло.
Возможно, разработчики Cinnamon решили таким образом бороться со злом.
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

А нельзя использовать wsMaximized вместо wsFullScreen?

Можно впринципе, но wsFullScreen блокирует действие в Cinnamon на поднесение курсора к левому верхнему углу экрана, что желательно. Да и всегда хочетс костылей поменьше использовать.

Каждый раз, когда всплывает модальное окно вспоминаю разработчиков нехорошим словом.
Модальные окна - зло.

Негодование правидника и короткая православная проповедь +1. Тока во первых от модальных окон отказаться на 100% невозмложно, а во вторых данная ситуация касается как модалльных, так и не модальных окон, т. к. форма то одна и для тех, и для других.

linux sabayon x86, XFCE(GTK), lazarus 0.9.28.2. FPC 2.4.0. Такой проблемы не наблюдаю.

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

Я впрочем вроде подобрал компромис.

Хотя ещё вопросик, как можнго проверить что окно сейчас находется сверху прочих окон?
Ответить