Decorator * DecorInfo::Instantiate(Desktop* desktop, DrawingEngine* engine, BRect rect, const char *title, window_look look, uint32 flags) { if (!desktop->LockSingleWindow()) return NULL; DesktopSettings settings(desktop); Decorator *decorator; try { if (fAllocator != NULL) decorator = fAllocator(settings, rect, look, flags); else decorator = new DefaultDecorator(settings, rect, look, flags); } catch (...) { desktop->UnlockSingleWindow(); return NULL; } desktop->UnlockSingleWindow(); decorator->SetDrawingEngine(engine); decorator->SetTitle(title); return decorator; }
Decorator* DecorAddOn::AllocateDecorator(Desktop* desktop, DrawingEngine* engine, BRect rect, const char* title, window_look look, uint32 flags) { if (!desktop->LockSingleWindow()) return NULL; DesktopSettings settings(desktop); Decorator* decorator; decorator = _AllocateDecorator(settings, rect, look, flags); desktop->UnlockSingleWindow(); if (!decorator) return NULL; decorator->SetDrawingEngine(engine); decorator->SetTitle(title); return decorator; }