diff --git a/src/tests/servers/app/Jamfile b/src/tests/servers/app/Jamfile index 7c924594cb..e2a9b51dae 100644 --- a/src/tests/servers/app/Jamfile +++ b/src/tests/servers/app/Jamfile @@ -167,6 +167,7 @@ SubInclude HAIKU_TOP src tests servers app desktop_window ; SubInclude HAIKU_TOP src tests servers app event_mask ; SubInclude HAIKU_TOP src tests servers app following ; SubInclude HAIKU_TOP src tests servers app look_and_feel ; +SubInclude HAIKU_TOP src tests servers app menu_crash ; SubInclude HAIKU_TOP src tests servers app no_pointer_history ; SubInclude HAIKU_TOP src tests servers app painter ; SubInclude HAIKU_TOP src tests servers app playground ; diff --git a/src/tests/servers/app/menu_crash/Jamfile b/src/tests/servers/app/menu_crash/Jamfile new file mode 100644 index 0000000000..cbec8fcac3 --- /dev/null +++ b/src/tests/servers/app/menu_crash/Jamfile @@ -0,0 +1,13 @@ +SubDir HAIKU_TOP src tests servers app menu_crash ; + +SetSubDirSupportedPlatformsBeOSCompatible ; +AddSubDirSupportedPlatforms libbe_test ; + +UseHeaders [ FDirName os app ] ; +UseHeaders [ FDirName os interface ] ; + +Application MenuCrash : + MenuCrash.cpp + : be +; + diff --git a/src/tests/servers/app/menu_crash/MenuCrash.cpp b/src/tests/servers/app/menu_crash/MenuCrash.cpp new file mode 100644 index 0000000000..67e1c5f725 --- /dev/null +++ b/src/tests/servers/app/menu_crash/MenuCrash.cpp @@ -0,0 +1,129 @@ +/* + * Copyright 2007, Haiku Inc. + * Distributed under the terms of the MIT License. + * + * Authors: + * Axel Dörfler, axeld@pinc-software.de + */ + + +#include + +#include +#include +#include +#include +#include +#include + + +class MenuItem : public BMenuItem { + public: + MenuItem(const char* name); + virtual ~MenuItem(); + + virtual void DrawContent(); +}; + + +MenuItem::MenuItem(const char* name) + : BMenuItem(name, NULL) +{ +} + + +MenuItem::~MenuItem() +{ +} + + +void +MenuItem::DrawContent() +{ + *(uint32*)0 = 0; +} + + +// #pragma mark - + + +class Window : public BWindow { + public: + Window(); + virtual ~Window(); + + virtual bool QuitRequested(); +}; + + +Window::Window() + : BWindow(BRect(100, 100, 400, 400), "MenuCrash-Test", + B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS) +{ + BMenuBar* menuBar = new BMenuBar(Bounds(), "menu"); + AddChild(menuBar); + + // add menu + + BMenu* menu = new BMenu("File"); + BMenu* crashMenu = new BMenu("Crash"); + crashMenu->AddItem(new MenuItem("Crash")); + menu->AddItem(crashMenu); + + menu->AddSeparatorItem(); + + menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), + 'Q', B_COMMAND_KEY)); + menu->SetTargetForItems(this); + menuBar->AddItem(menu); +} + +Window::~Window() +{ +} + + +bool +Window::QuitRequested() +{ + be_app->PostMessage(B_QUIT_REQUESTED); + return true; +} + + +// #pragma mark - + + +class Application : public BApplication { + public: + Application(); + + virtual void ReadyToRun(void); +}; + + +Application::Application() + : BApplication("application/x-vnd.haiku-menu_crash") +{ +} + + +void +Application::ReadyToRun(void) +{ + Window *window = new Window(); + window->Show(); +} + + +// #pragma mark - + + +int +main(int argc, char **argv) +{ + Application app; + + app.Run(); + return 0; +}