Как убить XtAppMainLoop (мотив)?

Я хочу использовать XmCreate{Error|Warning|Info}Dialog для отображения некоторого сообщения на экране в моем приложении на основе SDL до того, как его главное окно будет открыто и будут доступны какие-либо данные программы. Я хочу, чтобы диалоговое окно открывалось, печатало предполагаемое сообщение, и когда пользователь нажимал кнопку «ОК», диалоговое окно и верхний виджет, который я должен был создать для него, должны быть закрыты/удалены. Теперь afaik XtAppMainLoop будет зацикливаться и обрабатывать верхние сообщения виджета (окно?), пока пользователь не закроет его. Я хочу закрыть его, когда диалог вернется. Как я могу это сделать?


person Razzupaltuff    schedule 06.09.2009    source источник


Ответы (2)


После нескольких часов гугления и чтения я обнаружил, что вы можете использовать XtAppSetExitFlag (XtAppContext).

person Razzupaltuff    schedule 07.09.2009
comment
На самом деле, я думал о другом. Вы можете fork() и сделать окно состояния в дочернем элементе, а затем просто выйти из дочернего элемента. Слишком поздно! Извини! Кстати, я думал о другом. Вы используете мотив только потому, что этот пример кода из другого вопроса включает Xm/Xm.h? Теперь в мотивах нет ничего плохого, но это излишество, если все, что вам нужно, это заставка. Дай мне знать... - person DigitalRoss; 08.09.2009
comment
Я ищу не заставку, а окно сообщения. Ну, на самом деле немного больше, чем это. Я хочу иметь возможность печатать длинные многострочные диагностические сообщения, поэтому мне нужно что-то вроде диалога с текстовым виджетом. Наконец-то я нашел что-то полезное в руководстве по программированию Motif и адаптировал его под свои нужды. Я опубликую код или ссылку на код, когда закончу. Кстати, чтобы избежать остановки программы циклом приложения, можно перехватить сигнал закрытия оконных менеджеров и вместо этого установить флаг выхода приложения с помощью XtAppSetExitFlag. Это просто завершит цикл событий. - person Razzupaltuff; 08.09.2009

Это просто: в XtAppContext, который возвращается из XtAppMainLoop, просто выполните p->exit_flag = 1;.

Приложения также часто просто включают свой собственный основной цикл и делают все, что хотят. Все, что делает XtAppMainLoop, — это вызывает XtAppNextEvent(app, &event), а затем XtDispatchEvent(&event).

person DigitalRoss    schedule 06.09.2009
comment
Спасибо за информацию, но я не могу получить доступ к XtAppContext.exit_flag, потому что XtAppContext был превращен в какой-то непрозрачный тип данных с некоторыми трюками с включаемым файлом и предварительным объявлением, и я не могу определить, какие (X11) включаемые файлы мне нужно включить в сделай так, чтоб это работало. Я думаю, что могу добиться того, чего хочу, вызвав XtDestroyApplicationContext, который, надеюсь, также позаботится о своем цикле событий. - person Razzupaltuff; 07.09.2009