Ticket #4846: mftest.cpp

File mftest.cpp, 1.5 KB (added by augiedoggie, 10 years ago)
Line 
1#include <AppKit.h>
2#include <InterfaceKit.h>
3
4
5#define GO_MESSAGE 'MiGo'
6
7
8class MyWin : public BWindow {
9public:
10 MyWin(BRect rect) : BWindow(rect, "MenuFieldTest", B_TITLED_WINDOW
11 , B_QUIT_ON_WINDOW_CLOSE | B_ASYNCHRONOUS_CONTROLS) {
12
13 _CreateView(Bounds());
14
15 }
16
17
18 virtual void MessageReceived(BMessage* message) {
19 switch (message->what) {
20 case GO_MESSAGE:
21 {
22 BView* containerView = ChildAt(0);
23
24 if (containerView) {
25
26 containerView->LockLooper();
27
28 containerView->RemoveSelf();
29
30 //This delete hangs approximately 1 out of every 6-8 tries
31 //The menufield is stalled at wait_for_thread() in it's destructor
32 //because _m_task_ won't exit properly
33 delete containerView;
34
35 //Uncomment the following _CreateView() to hang immediately
36 //This one does weird things as well, I assume it's related
37 //_CreateView(Bounds());
38 }
39 }
40 break;
41 default:
42 BWindow::MessageReceived(message);
43 }
44 }
45
46
47 void _CreateView(BRect rect) {
48 BView* containerView = new BView(Bounds(), NULL, B_FOLLOW_ALL_SIDES, 0);
49
50 AddChild(containerView);
51
52 BMenu* menu = new BMenu("Menu");
53
54 menu->AddItem(new BMenuItem("Go", new BMessage(GO_MESSAGE)));
55
56 containerView->AddChild(new BMenuField(BRect(0, 0, 200, 200)
57 , "MenuField", "TestMenuField", menu));
58 }
59};
60
61
62class MyApp : public BApplication {
63public:
64 MyApp() : BApplication("application/x-vnd.cpr-mftest") {
65 MyWin* win = new MyWin(BRect(200, 200, 400, 400));
66
67 win->Show();
68 }
69};
70
71
72int main(int argc, char** argv) {
73 MyApp app;
74
75 app.Run();
76
77 return 0;
78}