LINUX.ORG.RU

Пояснить код с диалогом закрытия окна в CL-gtk2+


0

1

Здравствуйте, вот код:

		(g-signal-connect Окно2 "delete-event" (lambda (widget event)
                                                (declare (ignore widget event))
                                                (let ((dlg1 (make-instance 'message-dialog
																		  :title  "Вопрос вопросов"
                                                                          :text "Ты уверен, а вдруг из за этого погибнет ещё одна вселенная?"
                                                                          :buttons :yes-no)))
                                                  (let ((response (dialog-run dlg1)))
                                                    (object-destroy dlg1)
                                                    (not (eq :yes response))))))
Вернее часть кода, здесь вылетает диалоговое окно спрашивает закрыть или не закрыть программку. Всё работает вот только не пойму как оно работает... я хочу что бы при нажатии кнопки «ОК» кроме закрытия ещё и блок (setf ....) запускался. Прописать этот блок в сигнал окна «destroy» нельзя так как иногда нужно просто закрыть окно без запуска блока (setf.....). Одним словом объясните если не трудно как этот диалог работает.

> Одним словом объясните если не трудно как этот диалог работает.

Хреново.

anonymous ()

>> Ты уверен, а вдруг из за этого погибнет ещё одна вселенная?

До этого ты наверное писал «Ты уверен, а вдруг из за этого погибнет Египет?»

cathode ()
Ответ на: комментарий от yoghurt

эмммм каким образом? Меня ставит в тупик то что используется (not (eq :yes response)) но без if и при проверке условия получается ответ или T или NIL то есть

      (g-signal-connect Окно2 "delete-event" (lambda (widget event)
                                                (declare (ignore widget event))
                                                (let ((dlg1 (make-instance 'message-dialog
                                                        :title  "Вопрос вопросов"
                                                                          :text "Ты уверен, а вдруг из за этого погибнет ещё одна вселенная?"
                                                                          :buttons :yes-no)))
                                                  (let ((response (dialog-run dlg1)))
                                                    (object-destroy dlg1)
                                                    T))))

или

      (g-signal-connect Окно2 "delete-event" (lambda (widget event)
                                                (declare (ignore widget event))
                                                (let ((dlg1 (make-instance 'message-dialog
                                                        :title  "Вопрос вопросов"
                                                                          :text "Ты уверен, а вдруг из за этого погибнет ещё одна вселенная?"
                                                                          :buttons :yes-no)))
                                                  (let ((response (dialog-run dlg1)))
                                                    (object-destroy dlg1)
                                                    NIL))))

А перед этим само диалоговое окно уничтожается (object-destroy dlg1).... Так вот где же там закрытие основного окна? Или вызов сигнала закрытия?

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

Почитай уже документацию по GTK+. Смотри в сторону слота, который вешается на delete-event, и о смысле его возвращаемых значений.

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

delete-event генерируется после закрытия окна. То есть это реакция на закрытие. Поэтому в обработчике ничего этого и нет. Читай доки, там всё есть.

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

Ну вообще-то всё прекрасно работает если прописать диалог в сигнале от нажатия кнопки причём ничего не меняя... я изменил только текст что бы понять что запустилось.... так что это не зависит к какому сигналу приписан диалог. А доки... ну вообще то не нашел там достаточно много белых полей... хотя если читать ГТК а не CL-gtk то наверное можно найти, а потом открыть код и глянуть как реализовано... но это достаточно трудно думал может кто-то знает...тем более не факт что получится найти то что нужно.

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