Jump to content

Обработка выхода из приложения


photo

Recommended Posts

Posted

Здравствуйте !

Можно ли как то встроится в обработку события нажатия на кнопку крестик - "Закрыть приложение" ? Например, хочется показать диалог пользователю и если он откажется, то не закрывать приложение.

Posted

Здравствуйте! 
для этого нужно у окна выставить флаг setIgnoreSystemClose
и подписаться на события окна, где можно поймать событие ACTION_CLOSE и выполнить какуюто свою логику

namespace CloseDialog
{
	void close_dialog(WidgetDialogPtr w) // on cancel 
	{
		w->deleteLater();
	}

	void quit() // on ok 
	{
		Engine::get()->quit();
	}

	void on_window_event(WindowEventPtr event)
	{
		auto gevent = event->getGeneric();
		if (gevent && gevent->getAction() == WindowEventGeneric::ACTION_CLOSE) // if its close event
		{
			auto gui = WindowManager::getMainWindow()->getSelfGui();
			auto w_dialog = WidgetDialog::create(gui, "Are you sure?"); //create dialog
			w_dialog->getOkButton()->addCallback(Gui::CLICKED, MakeCallback(&CloseDialog::quit));
			gui->addChild(w_dialog, Gui::ALIGN_CENTER | Gui::ALIGN_OVERLAP);
			w_dialog->getCancelButton()->addCallback(Gui::CLICKED, MakeCallback(&CloseDialog::close_dialog, w_dialog));
			gui->addChild(w_dialog, Gui::ALIGN_CENTER | Gui::ALIGN_OVERLAP);
		}
	}
	void init()
	{
		WindowManager::getMainWindow()->setIgnoreSystemClose(true); // set flag
		WindowManager::getMainWindow()->addCallback(EngineWindow::CALLBACK_WINDOW_EVENT, MakeCallback(&CloseDialog::on_window_event)); // subscribe on events
	}
};


int AppSystemLogic::init()
{
	CloseDialog::init();
	return 1;
}

 

×
×
  • Create New...