From 418f391fb12d0485e22b522b6c5c62ed4a8034c2 Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Mon, 25 Jul 2011 03:32:14 +0000 Subject: [PATCH] Fixes #7796. The decorator add-on is unloaded when not needed anymore. Avoid assigning offscreen windows a window behaviour (which lives in an add-on). When loading another add-on the offscreen window was still pointing to an invalid window behaviour. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42482 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/interface/WindowPrivate.h | 1 + src/servers/app/OffscreenWindow.cpp | 4 +++- src/servers/app/Window.cpp | 9 ++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/headers/private/interface/WindowPrivate.h b/headers/private/interface/WindowPrivate.h index 858bd9f7c6..749902bc97 100644 --- a/headers/private/interface/WindowPrivate.h +++ b/headers/private/interface/WindowPrivate.h @@ -20,6 +20,7 @@ const window_feel kDesktopWindowFeel = window_feel(1024); const window_feel kMenuWindowFeel = window_feel(1025); const window_feel kWindowScreenFeel = window_feel(1026); const window_feel kPasswordWindowFeel = window_feel(1027); +const window_feel kOffscreenWindowFeel = window_feel(1028); /* Private window types */ diff --git a/src/servers/app/OffscreenWindow.cpp b/src/servers/app/OffscreenWindow.cpp index 291b80ea67..1e8eaffc3f 100644 --- a/src/servers/app/OffscreenWindow.cpp +++ b/src/servers/app/OffscreenWindow.cpp @@ -14,6 +14,8 @@ #include +#include + #include "BitmapHWInterface.h" #include "DrawingEngine.h" #include "ServerBitmap.h" @@ -24,7 +26,7 @@ using std::nothrow; OffscreenWindow::OffscreenWindow(ServerBitmap* bitmap, const char* name, ::ServerWindow* window) : Window(bitmap->Bounds(), name, - B_NO_BORDER_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NO_BORDER_WINDOW_LOOK, kOffscreenWindowFeel, 0, 0, window, new (nothrow) DrawingEngine()), fBitmap(bitmap), fHWInterface(new (nothrow) BitmapHWInterface(fBitmap)) diff --git a/src/servers/app/Window.cpp b/src/servers/app/Window.cpp index 975dcc3df6..bb57933a81 100644 --- a/src/servers/app/Window.cpp +++ b/src/servers/app/Window.cpp @@ -137,7 +137,8 @@ Window::Window(const BRect& frame, const char *name, &fMaxHeight); } } - fWindowBehaviour = gDecorManager.AllocateWindowBehaviour(this); + if (fFeel != kOffscreenWindowFeel) + fWindowBehaviour = gDecorManager.AllocateWindowBehaviour(this); // do we need to change our size to let the decorator fit? // _ResizeBy() will adapt the frame for validity before resizing @@ -183,7 +184,8 @@ Window::~Window() status_t Window::InitCheck() const { - if (!fDrawingEngine || !fWindowBehaviour) + if (fDrawingEngine == NULL + || (fFeel != kOffscreenWindowFeel && fWindowBehaviour == NULL)) return B_NO_MEMORY; // TODO: anything else? return B_OK; @@ -1597,7 +1599,8 @@ Window::IsValidFeel(window_feel feel) || feel == kDesktopWindowFeel || feel == kMenuWindowFeel || feel == kWindowScreenFeel - || feel == kPasswordWindowFeel; + || feel == kPasswordWindowFeel + || feel == kOffscreenWindowFeel; }