[haiku-commits] r42482 - in haiku/trunk: headers/private/interface src/servers/app

  • From: clemens.zeidler@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 25 Jul 2011 05:32:14 +0200 (CEST)

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;
 }
 
 


Other related posts:

  • » [haiku-commits] r42482 - in haiku/trunk: headers/private/interface src/servers/app - clemens . zeidler