diff --git a/include/Mw/LowLevel/Haiku.h b/include/Mw/LowLevel/Haiku.h index 2849e5f..751f45e 100644 --- a/include/Mw/LowLevel/Haiku.h +++ b/include/Mw/LowLevel/Haiku.h @@ -58,6 +58,8 @@ class MwWindow : public BWindow { MwWindow(BRect rc, window_type type, uint32 flags); void MessageReceived(BMessage* message); + + bool QuitRequested(); }; typedef BBitmap MwBBitmap; @@ -93,6 +95,7 @@ enum BWIN_MW_WHAT { enum MwLLHAIKU_EVENT { MwLLHAIKU_EVENT_DRAW = 0, + MwLLHAIKU_EVENT_CLOSE, MwLLHAIKU_EVENT_MOUSEDOWN, MwLLHAIKU_EVENT_MOUSEUP, MwLLHAIKU_EVENT_MOUSEMOVED diff --git a/src/backend/haiku.cc b/src/backend/haiku.cc index e04915e..d3dd02a 100644 --- a/src/backend/haiku.cc +++ b/src/backend/haiku.cc @@ -324,6 +324,19 @@ void MwWindow::MessageReceived(BMessage* message) { } } +bool MwWindow::QuitRequested() { + MwLLHaikuEvent ev; + MwView* v = (MwView*)this->ChildAt(0); + + ev.type = MwLLHAIKU_EVENT_CLOSE; + + v->locker->Lock(); + arrput(v->handle->haiku.events, ev); + v->locker->Unlock(); + + return false; +} + struct app_param { MwRect rc; MwLL handle; @@ -530,6 +543,8 @@ void MwLLNextEventImpl(MwLL handle) { if(ev->type == MwLLHAIKU_EVENT_DRAW) { MwLLDispatch(handle, draw, NULL); + } else if(ev->type == MwLLHAIKU_EVENT_CLOSE) { + MwLLDispatch(handle, close, NULL); } else if(ev->type == MwLLHAIKU_EVENT_MOUSEDOWN) { MwLLDispatch(handle, down, &m); } else if(ev->type == MwLLHAIKU_EVENT_MOUSEUP) {