Author: czeidler Date: 2011-07-25 05:32:14 +0200 (Mon, 25 Jul 2011) New Revision: 42482 Changeset: https://dev.haiku-os.org/changeset/42482 Ticket: https://dev.haiku-os.org/ticket/7796 Modified: haiku/trunk/headers/private/interface/WindowPrivate.h haiku/trunk/src/servers/app/OffscreenWindow.cpp haiku/trunk/src/servers/app/Window.cpp Log: 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. Modified: haiku/trunk/headers/private/interface/WindowPrivate.h =================================================================== --- haiku/trunk/headers/private/interface/WindowPrivate.h 2011-07-25 02:13:18 UTC (rev 42481) +++ haiku/trunk/headers/private/interface/WindowPrivate.h 2011-07-25 03:32:14 UTC (rev 42482) @@ -20,6 +20,7 @@ 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 */ Modified: haiku/trunk/src/servers/app/OffscreenWindow.cpp =================================================================== --- haiku/trunk/src/servers/app/OffscreenWindow.cpp 2011-07-25 02:13:18 UTC (rev 42481) +++ haiku/trunk/src/servers/app/OffscreenWindow.cpp 2011-07-25 03:32:14 UTC (rev 42482) @@ -14,6 +14,8 @@ #include <Debug.h> +#include <WindowPrivate.h> + #include "BitmapHWInterface.h" #include "DrawingEngine.h" #include "ServerBitmap.h" @@ -24,7 +26,7 @@ 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)) Modified: haiku/trunk/src/servers/app/Window.cpp =================================================================== --- haiku/trunk/src/servers/app/Window.cpp 2011-07-25 02:13:18 UTC (rev 42481) +++ haiku/trunk/src/servers/app/Window.cpp 2011-07-25 03:32:14 UTC (rev 42482) @@ -137,7 +137,8 @@ &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 @@ 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 @@ || feel == kDesktopWindowFeel || feel == kMenuWindowFeel || feel == kWindowScreenFeel - || feel == kPasswordWindowFeel; + || feel == kPasswordWindowFeel + || feel == kOffscreenWindowFeel; }