[haiku-commits] r36861 - haiku/branches/features/stack-and-tile/src/servers/app

  • From: clemens.zeidler@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 19 May 2010 00:09:57 +0200 (CEST)

Author: czeidler
Date: 2010-05-19 00:09:57 +0200 (Wed, 19 May 2010)
New Revision: 36861
Changeset: http://dev.haiku-os.org/changeset/36861/haiku

Modified:
   haiku/branches/features/stack-and-tile/src/servers/app/Desktop.cpp
   haiku/branches/features/stack-and-tile/src/servers/app/Desktop.h
   haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.cpp
   haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.h
Log:
Move SAT stuff out of Desktop. Fix SAT debug build.



Modified: haiku/branches/features/stack-and-tile/src/servers/app/Desktop.cpp
===================================================================
--- haiku/branches/features/stack-and-tile/src/servers/app/Desktop.cpp  
2010-05-18 20:28:20 UTC (rev 36860)
+++ haiku/branches/features/stack-and-tile/src/servers/app/Desktop.cpp  
2010-05-18 22:09:57 UTC (rev 36861)
@@ -155,11 +155,12 @@
        int32* /*_viewToken*/, BMessage* /*latestMouseMoved*/)
 {
        int32 key = 0;
-       int32 modifiers;
+       int32 modifiers = 0;
 
-       if ((message->what == B_KEY_DOWN || message->what == 
B_UNMAPPED_KEY_DOWN)
-               && message->FindInt32("key", &key) == B_OK
-               && message->FindInt32("modifiers", &modifiers) == B_OK) {
+       message->FindInt32("key", &key);
+       message->FindInt32("modifiers", &modifiers);
+               
+       if ((message->what == B_KEY_DOWN || message->what == 
B_UNMAPPED_KEY_DOWN)) {
                // Check for safe video mode (cmd + ctrl + escape)
                if (key == 0x01 && (modifiers & B_COMMAND_KEY) != 0
                        && (modifiers & B_CONTROL_KEY) != 0) {
@@ -190,57 +191,17 @@
                        fDesktop->SetWorkspaceAsync(-1, (modifiers & 
B_SHIFT_KEY) != 0);
                        return B_SKIP_MESSAGE;
                }
-
-               // switch between stacked windows
-               if (modifiers & B_OPTION_KEY) {
-                       BList* stackedWindows = fDesktop->FocusWindow()->
-                               GetStackAndTileWindow()->StackedWindows();
-                       if (key == 0x61 && stackedWindows) {
-                               int32 oldIndex =
-                                       
stackedWindows->IndexOf(fDesktop->FocusWindow());
-                               int32 newIndex =
-                                       (oldIndex - 1 >= 0)?
-                                       oldIndex - 1 : 
stackedWindows->CountItems() - 1;
-                               fDesktop->ActivateWindow(
-                                       
static_cast<Window*>(stackedWindows->ItemAt(newIndex)));
-                               return B_SKIP_MESSAGE;
-                       } else if (key == 0x63 && stackedWindows) {
-                               int32 oldIndex =
-                                       
stackedWindows->IndexOf(fDesktop->FocusWindow());
-                               int32 newIndex =
-                                       (oldIndex + 1 < 
stackedWindows->CountItems())?
-                                       oldIndex + 1 : 0;
-                               fDesktop->ActivateWindow(
-                                       
static_cast<Window*>(stackedWindows->ItemAt(newIndex)));
-                               return B_SKIP_MESSAGE;
-                       }
-               }
        }
 
+       if (fDesktop->FilterKey(message->what, key, modifiers) == 
B_SKIP_MESSAGE)
+               return B_SKIP_MESSAGE;
+
        if (message->what == B_KEY_DOWN
                || message->what == B_MODIFIERS_CHANGED
                || message->what == B_UNMAPPED_KEY_DOWN
                || message->what == B_INPUT_METHOD_EVENT)
                _UpdateFocus(key, modifiers, _target);
 
-       // switch to and from stacking and snapping mode
-       if (message->what == B_MODIFIERS_CHANGED
-               && message->FindInt32("modifiers", &modifiers) == B_OK) {
-               // disable highlights if the stacking and snapping mode was 
just left
-               if (fDesktop->fIsStackingAndSnapping && !(modifiers & 
B_OPTION_KEY))
-                       fDesktop->FinishStackingAndSnapping();
-               fDesktop->fIsStackingAndSnapping = modifiers & B_OPTION_KEY;
-       }
-
-       // switch to and from stacking and snapping mode
-       if (message->what == B_MODIFIERS_CHANGED
-               && message->FindInt32("modifiers", &modifiers) == B_OK) {
-               // disable highlights if the stacking and snapping mode was 
just left
-               if (fDesktop->fIsStackingAndSnapping && !(modifiers & 
B_OPTION_KEY))
-                       fDesktop->FinishStackingAndSnapping();
-               fDesktop->fIsStackingAndSnapping = modifiers & B_OPTION_KEY;
-       }
-
        return B_DISPATCH_MESSAGE;
 }
 
@@ -352,9 +313,6 @@
        :
        MessageLooper("desktop"),
 
-       fIsStackingAndSnapping(false),
-       fStackAndTileSpec(new LinearSpec()),
-
        fUserID(userID),
        fTargetScreen(strdup(targetScreen)),
        fSettings(NULL),
@@ -385,6 +343,8 @@
        fFront(NULL),
        fBack(NULL)
 {
+       fStackAndTile = new StackAndTile(this);
+
        memset(fLastWorkspaceFocus, 0, sizeof(fLastWorkspaceFocus));
 
        char name[B_OS_NAME_LENGTH];
@@ -400,7 +360,7 @@
 
 Desktop::~Desktop()
 {
-       delete fStackAndTileSpec;
+       delete fStackAndTile;
        delete fSettings;
 
        delete_area(fSharedReadOnlyArea);
@@ -513,6 +473,13 @@
 }
 
 
+filter_result
+Desktop::FilterKey(uint32 what, int32 key, int32 modifiers)
+{
+       return fStackAndTile->FilterKey(what, key, modifiers);
+}
+
+
 // #pragma mark - Mouse and cursor methods
 
 
@@ -3357,15 +3324,3 @@
        return changed;
 }
 
-
-void
-Desktop::FinishStackingAndSnapping()
-{
-       for (Window* window = CurrentWindows().LastWindow(); window != NULL;
-               window = window->PreviousWindow(fCurrentWorkspace)) {
-               HighlightTab(window, false);
-               HighlightBorders(window, false);
-               window->GetStackAndTileWindow()->FinishStackingAndSnapping();
-       }
-       fIsStackingAndSnapping = false;
-}

Modified: haiku/branches/features/stack-and-tile/src/servers/app/Desktop.h
===================================================================
--- haiku/branches/features/stack-and-tile/src/servers/app/Desktop.h    
2010-05-18 20:28:20 UTC (rev 36860)
+++ haiku/branches/features/stack-and-tile/src/servers/app/Desktop.h    
2010-05-18 22:09:57 UTC (rev 36861)
@@ -20,6 +20,7 @@
 #include "Screen.h"
 #include "ScreenManager.h"
 #include "ServerCursor.h"
+#include "StackAndTile.h"
 #include "VirtualScreen.h"
 #include "WindowList.h"
 #include "Workspace.h"
@@ -34,7 +35,6 @@
 #include <Region.h>
 #include <Window.h>
 
-#include "LinearSpec.h"
 
 #define USE_MULTI_LOCKER 1
 
@@ -77,6 +77,8 @@
                        void                            
BroadcastToAllApps(int32 code);
                        void                            
BroadcastToAllWindows(int32 code);
 
+                       filter_result           FilterKey(uint32 what, int32 
key,
+                                                                       int32 
modifiers);
        // Locking
 #if USE_MULTI_LOCKER
                        bool                            LockSingleWindow()
@@ -248,11 +250,8 @@
                        
                        bool                                    
HighlightTab(Window* window, bool active);
                        bool                                    
HighlightBorders(Window* window, bool active);
-                       void                                    
FinishStackingAndSnapping();
 
-                       bool                                    
fIsStackingAndSnapping;
-                       LinearSpec*                             
fStackAndTileSpec;
-
+                       ::StackAndTile*         fStackAndTile;
 private:
                        void                            _LaunchInputServer();
                        void                            _GetLooperName(char* 
name, size_t size);

Modified: 
haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.cpp
===================================================================
--- haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.cpp     
2010-05-18 20:28:20 UTC (rev 36860)
+++ haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.cpp     
2010-05-18 22:09:57 UTC (rev 36861)
@@ -22,6 +22,77 @@
 #endif
 
 
+StackAndTile::StackAndTile(Desktop* desktop)
+       :
+       fDesktop(desktop),
+       fIsStackingAndSnapping(false)
+{
+
+}
+
+
+StackAndTile::~StackAndTile()
+{
+
+}
+
+
+filter_result
+StackAndTile::FilterKey(uint32 what, int32 key, int32 modifiers)
+{
+       if (what == B_KEY_DOWN || what == B_UNMAPPED_KEY_DOWN) {
+               // switch between stacked windows
+               if (modifiers & B_OPTION_KEY) {
+                       BList* stackedWindows = fDesktop->FocusWindow()->
+                               GetStackAndTileWindow()->StackedWindows();
+                       if (key == 0x61 && stackedWindows) {
+                               int32 oldIndex =
+                                       
stackedWindows->IndexOf(fDesktop->FocusWindow());
+                               int32 newIndex =
+                                       (oldIndex - 1 >= 0)?
+                                       oldIndex - 1 : 
stackedWindows->CountItems() - 1;
+                               fDesktop->ActivateWindow(
+                                       
static_cast<Window*>(stackedWindows->ItemAt(newIndex)));
+                               return B_SKIP_MESSAGE;
+                       } else if (key == 0x63 && stackedWindows) {
+                               int32 oldIndex =
+                                       
stackedWindows->IndexOf(fDesktop->FocusWindow());
+                               int32 newIndex =
+                                       (oldIndex + 1 < 
stackedWindows->CountItems())?
+                                       oldIndex + 1 : 0;
+                               fDesktop->ActivateWindow(
+                                       
static_cast<Window*>(stackedWindows->ItemAt(newIndex)));
+                               return B_SKIP_MESSAGE;
+                       }
+               }
+       }
+
+       // switch to and from stacking and snapping mode
+       if (what == B_MODIFIERS_CHANGED) {
+               // disable highlights if the stacking and snapping mode was 
just left
+               if (fIsStackingAndSnapping && !(modifiers & B_OPTION_KEY))
+                       FinishStackingAndSnapping();
+               fIsStackingAndSnapping = modifiers & B_OPTION_KEY;
+       }
+       
+       return B_DISPATCH_MESSAGE;
+}
+
+
+void
+StackAndTile::FinishStackingAndSnapping()
+{
+       for (Window* window = fDesktop->CurrentWindows().LastWindow();
+               window != NULL; window = window->PreviousWindow(
+                       fDesktop->CurrentWorkspace())) {
+               fDesktop->HighlightTab(window, false);
+               fDesktop->HighlightBorders(window, false);
+               window->GetStackAndTileWindow()->FinishStackingAndSnapping();
+       }
+       fIsStackingAndSnapping = false;
+}
+
+
 StackAndTileWindow::StackAndTileWindow(Window* window)
        :
        fWindow(window),
@@ -62,7 +133,7 @@
        fId(0),
        fStackedWindowIds(NULL)
 {
-       
+       fStackAndTile = fWindow->Desktop()->fStackAndTile;
 }
 
 
@@ -103,7 +174,7 @@
 StackAndTileWindow::MouseDown()
 {
        // Re-stack and re-snap the window if in stacking & snapping mode
-       if (fWindow->Desktop()->fIsStackingAndSnapping) {
+       if (fStackAndTile->IsStackingAndSnapping()) {
                _RemoveStackingAndSnapping();
                _RemoveStackingPersistently();
                _RemoveSnappingPersistently();
@@ -117,7 +188,7 @@
 StackAndTileWindow::MouseUp()
 {
        // Snap or stack the window if in stack & tiling mode
-       if (fWindow->Desktop()->fIsStackingAndSnapping) {
+       if (fStackAndTile->IsStackingAndSnapping()) {
                _RemoveStackingAndSnapping();
                _RemoveStackingPersistently();
                _RemoveSnappingPersistently();
@@ -126,7 +197,7 @@
                _StackWindow();
                _SnapWindow();
                StackAndTile();
-               fWindow->Desktop()->FinishStackingAndSnapping();
+               FinishStackingAndSnapping();
 
                //Activate this window so that others stacked/tiled along with 
it
                //stay on top.
@@ -142,7 +213,7 @@
        // snapping of this window is removed and can be changed.
        // Otherwise, dragging means the stack & tile constraints are
        // solved and windows adjusted accordingly.
-       if (fWindow->Desktop()->fIsStackingAndSnapping) {
+       if (fStackAndTile->IsStackingAndSnapping()) {
                _RemoveStackingAndSnapping();
                _RemoveStackingPersistently();
                _RemoveSnappingPersistently();
@@ -160,7 +231,7 @@
        // snapping of this window is removed and can be changed.
        // Otherwise, resizing means the stack & tile constraints are
        // solved and windows adjusted accordingly.
-       if (fWindow->Desktop()->fIsStackingAndSnapping) {
+       if (fStackAndTile->IsStackingAndSnapping()) {
                _RemoveStackingAndSnapping();
                _RemoveStackingPersistently();
                _RemoveSnappingPersistently();
@@ -541,10 +612,10 @@
        if (fLeftVar)
                return;
 
-       fLeftVar = fWindow->Desktop()->fStackAndTileSpec->AddVariable();
-       fTopVar = fWindow->Desktop()->fStackAndTileSpec->AddVariable();
-       fRightVar = fWindow->Desktop()->fStackAndTileSpec->AddVariable();
-       fBottomVar = fWindow->Desktop()->fStackAndTileSpec->AddVariable();
+       fLeftVar = fStackAndTile->GetLinearSpec()->AddVariable();
+       fTopVar = fStackAndTile->GetLinearSpec()->AddVariable();
+       fRightVar = fStackAndTile->GetLinearSpec()->AddVariable();
+       fBottomVar = fStackAndTile->GetLinearSpec()->AddVariable();
        BString label(fWindow->Title());
        label << ".fLeftVar";
        fLeftVar->SetLabel(label.String());
@@ -563,12 +634,10 @@
        fRightVar->SetRange(-DBL_MAX, DBL_MAX);
        fBottomVar->SetRange(-DBL_MAX, DBL_MAX);
 
-       fLeftConstraint  = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(1.0, fLeftVar,
-                       OperatorType(EQ), fWindow->Frame().left, 1, 1);
-       fTopConstraint  = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(1.0, fTopVar,
-                       OperatorType(EQ), fWindow->Frame().top, 1, 1);
+       fLeftConstraint  = fStackAndTile->GetLinearSpec()->AddConstraint(1.0,
+               fLeftVar, OperatorType(EQ), fWindow->Frame().left, 1, 1);
+       fTopConstraint  = fStackAndTile->GetLinearSpec()->AddConstraint(1.0,
+               fTopVar, OperatorType(EQ), fWindow->Frame().top, 1, 1);
        label = fWindow->Title();
        label << ".fLeftConstraint";
        fLeftConstraint->SetLabel(label.String());
@@ -578,12 +647,10 @@
 
        int32 minWidth, maxWidth, minHeight, maxHeight;
        fWindow->GetSizeLimits(&minWidth, &maxWidth, &minHeight, &maxHeight);
-       fMinWidthConstraint = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(1.0, fLeftVar, -1.0, fRightVar,
-                       OperatorType(LE), -minWidth);
-       fMinHeightConstraint = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(1.0, fTopVar, -1.0, fBottomVar,
-                       OperatorType(LE), -minHeight);
+       fMinWidthConstraint = fStackAndTile->GetLinearSpec()->AddConstraint(1.0,
+               fLeftVar, -1.0, fRightVar, OperatorType(LE), -minWidth);
+       fMinHeightConstraint = 
fStackAndTile->GetLinearSpec()->AddConstraint(1.0,
+               fTopVar, -1.0, fBottomVar, OperatorType(LE), -minHeight);
        label = fWindow->Title();
        label << ".fMinWidthConstraint";
        fMinWidthConstraint->SetLabel(label.String());
@@ -594,12 +661,12 @@
        // The width and height constraints have higher penalties than the
        // position constraints (left, top), so a window will keep its size
        // unless explicitly resized.
-       fWidthConstraint = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(-1.0, fLeftVar, 1.0, fRightVar,
-                       OperatorType(EQ), fWindow->Frame().Width(), 10, 10);
-       fHeightConstraint = fWindow->Desktop()->fStackAndTileSpec
-               ->AddConstraint(-1.0, fTopVar, 1.0, fBottomVar,
-                       OperatorType(EQ), fWindow->Frame().Height(), 10, 10);
+       fWidthConstraint = fStackAndTile->GetLinearSpec()->AddConstraint(-1.0,
+               fLeftVar, 1.0, fRightVar, OperatorType(EQ), 
fWindow->Frame().Width(),
+               10, 10);
+       fHeightConstraint = fStackAndTile->GetLinearSpec()->AddConstraint(-1.0,
+               fTopVar, 1.0, fBottomVar, OperatorType(EQ), 
fWindow->Frame().Height(),
+               10, 10);
        label = fWindow->Title();
        label << ".fWidthConstraint";
        fWidthConstraint->SetLabel(label.String());
@@ -610,7 +677,7 @@
        fSnappingConstraints = new BList();
 
        STRACE_SAT(("Finished Window::_InitStackingAndSnapping() on %s\n",
-               Title()));
+               fWindow->Title()));
 }
 
 
@@ -623,7 +690,7 @@
 StackAndTileWindow::_RemoveStackingAndSnapping()
 {
        STRACE_SAT(("Window::_RemoveStackingAndSnapping() on %s, fLeftVar=%d\n",
-               Title(), fLeftVar));
+               fWindow->Title(), fLeftVar));
 
        // if there are no variables for the sides, then it is not active
        if (!fLeftVar)
@@ -799,7 +866,7 @@
        }
 
        STRACE_SAT(("Finished Window::_RemoveStackingAndSnapping() on %s\n",
-               Title()));
+               fWindow->Title()));
 }
 
 
@@ -862,7 +929,7 @@
 StackAndTileWindow::_StackWindow()
 {
        STRACE_SAT(("Window::_StackWindow() on %s, fWindowUnder=%x\n",
-               Title(), fWindowUnder));
+               fWindow->Title(), fWindowUnder));
 
        // stack only if there is a candidate window for stacking
        if (fWindowUnder == NULL)
@@ -978,7 +1045,7 @@
        // clear stacking candidate
        fWindowUnder = NULL;
 
-       STRACE_SAT(("Finished Window::_StackWindow() on %s\n", Title()));
+       STRACE_SAT(("Finished Window::_StackWindow() on %s\n", 
fWindow->Title()));
 }
 
 
@@ -1002,7 +1069,7 @@
 StackAndTileWindow::_ArrangeStackedWindowTabs()
 {
        STRACE_SAT(("Window::_ArrangeStackedWindowTabs() on %s, 
fStackedWindows=%x\n",
-               Title(), fStackedWindows));
+               fWindow->Title(), fStackedWindows));
        if (!fStackedWindows)
                return;
 
@@ -1016,7 +1083,7 @@
                        + window->Decorator()->TabRect().Width() + 1;
        }
        STRACE_SAT(("Finished Window::_ArrangeStackedWindowTabs() on %s\n",
-               Title()));
+               fWindow->Title()));
 }
 
 
@@ -1197,7 +1264,7 @@
                        STRACE_SAT(("Adding %s[%d] to %s[%d]'s T2T & L2R 
list\n",
                                                topmostWindow->Title(),
                                                        
topmostWindow->GetStackAndTileWindow()->WindowId(),
-                                               Title(), WindowId()));
+                                               fWindow->Title(), WindowId()));
                }
 
                // adjust bottom border
@@ -1231,8 +1298,8 @@
                                fLeftAdjacentWindows->ItemAt(i));
                        
window->GetStackAndTileWindow()->_InitStackingAndSnapping();
                        Constraint* leftSnapping =
-                               
fWindow->Desktop()->fStackAndTileSpec->AddConstraint(
-                                       -1, 
window->GetStackAndTileWindow()->fRightVar, 1, fLeftVar,
+                               
fStackAndTile->GetLinearSpec()->AddConstraint(-1,
+                                       
window->GetStackAndTileWindow()->fRightVar, 1, fLeftVar,
                                        OperatorType(EQ), 11);
                        BString label("leftSnapping of ");
                        label << fWindow->Title();
@@ -1319,8 +1386,8 @@
                                fTopAdjacentWindows->ItemAt(i));
                        
window->GetStackAndTileWindow()->_InitStackingAndSnapping();
                        Constraint* topSnapping =
-                               
fWindow->Desktop()->fStackAndTileSpec->AddConstraint(
-                                       -1, 
window->GetStackAndTileWindow()->fBottomVar, 1, fTopVar,
+                               
fStackAndTile->GetLinearSpec()->AddConstraint(-1,
+                                       
window->GetStackAndTileWindow()->fBottomVar, 1, fTopVar,
                                        OperatorType(EQ), 32);
                        BString label("topSnapping of ");
                        label << fWindow->Title();
@@ -1407,9 +1474,9 @@
                                fRightAdjacentWindows->ItemAt(i));
                        
window->GetStackAndTileWindow()->_InitStackingAndSnapping();
                        Constraint* rightSnapping =
-                               
fWindow->Desktop()->fStackAndTileSpec->AddConstraint(
-                                       -1, fRightVar, 1, 
window->GetStackAndTileWindow()->fLeftVar,
-                                       OperatorType(EQ), 11);
+                               
fStackAndTile->GetLinearSpec()->AddConstraint(-1, fRightVar, 1,
+                                       
window->GetStackAndTileWindow()->fLeftVar, OperatorType(EQ),
+                                       11);
                        BString label("rightSnapping of ");
                        label << fWindow->Title();
                        rightSnapping->SetLabel(label.String());
@@ -1421,7 +1488,7 @@
                                SNAP_LEFT, SNAP_RIGHT);
 
                        STRACE_SAT(("Adding %s[%d] to %s[%d]'s R2L list\n",
-                                               window->Title(), 
window->WindowId(), Title(),
+                                               window->Title(), WindowId(), 
window->Title(),
                                                WindowId()));
                }
        }
@@ -1459,8 +1526,9 @@
                                SNAP_TOP, SNAP_BOTTOM);
 
                        STRACE_SAT(("Adding %s[%d] to %s[%d]'s L2L & B2T 
list\n",
-                                               leftmostWindow->Title(), 
leftmostWindow->WindowId(),
-                                               Title(), WindowId()));
+                               leftmostWindow->Title(),
+                               
leftmostWindow->GetStackAndTileWindow()->WindowId(),
+                               fWindow->Title(), WindowId()));
                }
 
                // adjust right border
@@ -1494,9 +1562,9 @@
                                fBottomAdjacentWindows->ItemAt(i));
                        
window->GetStackAndTileWindow()->_InitStackingAndSnapping();
                        Constraint* bottomSnapping =
-                               
fWindow->Desktop()->fStackAndTileSpec->AddConstraint(
-                                       -1, fBottomVar, 1, 
window->GetStackAndTileWindow()->fTopVar,
-                                       OperatorType(EQ), 32);
+                               
fStackAndTile->GetLinearSpec()->AddConstraint(-1, fBottomVar, 1,
+                                       
window->GetStackAndTileWindow()->fTopVar, OperatorType(EQ),
+                                       32);
                        BString label("bottomSnapping of ");
                        label << fWindow->Title();
                        bottomSnapping->SetLabel(label.String());
@@ -1566,7 +1634,7 @@
        *id = windowId;
        windowIdList->AddItem(id);
 
-       STRACE_SAT(("\tAdded %s to %s's %s 2 %s list\n",
+       STRACE_SAT(("\tAdded %i to %s's %s 2 %s list\n",
                windowId, fWindow->Title(), 
kSnapOrientationString[thisSnapOrientation],
                kSnapOrientationString[otherSnapOrientation]));
 }
@@ -1787,9 +1855,9 @@
        if (snapDistance == 0)
                snappingConstraint = thisSnappingVar->IsEqual(otherSnappingVar);
        else
-               snappingConstraint = fWindow->Desktop()->fStackAndTileSpec
-                       ->AddConstraint(-1, thisSnappingVar, 1, 
otherSnappingVar,
-                               OperatorType(EQ), snapDistance);
+               snappingConstraint = 
fStackAndTile->GetLinearSpec()->AddConstraint(-1,
+                       thisSnappingVar, 1, otherSnappingVar, OperatorType(EQ),
+                       snapDistance);
 
        snappingLabel << fWindow->Title();
        snappingConstraint->SetLabel(snappingLabel.String());
@@ -1907,7 +1975,7 @@
 StackAndTileWindow::StackAndTile()
 {
        STRACE_SAT(("Window::StackAndTile() on %s, 
fWindow->Desktop()->fStackAndTileSpec=%x\n",
-               Title(), fWindow->Desktop()->fStackAndTileSpec));
+               fWindow->Title(), fStackAndTile->GetLinearSpec()));
 
        // works only if stack and tile is active for this window
        if (!fLeftVar)
@@ -1933,7 +2001,7 @@
        // solve Stack & Tile specification
        ResultType result;
        for (int32 tries = 0; tries < 15; tries++) {
-               result = fWindow->Desktop()->fStackAndTileSpec->Solve();
+               result = fStackAndTile->GetLinearSpec()->Solve();
                if (result == OPTIMAL || result == INFEASIBLE)
                        break;
        }
@@ -1969,10 +2037,10 @@
 
        _ArrangeStackedWindowTabs();
 
-       #ifdef DEBUG_STACK_AND_TILE
+       #ifdef 0 //DEBUG_STACK_AND_TILE
        // debug_printf crashes if given too large strings
        // therefore we cut our specification string up into smaller chunks
-       BString* specStr = fWindow->Desktop()->fStackAndTileSpec->ToBString();
+       BString* specStr = fStackAndTile->GetLinearSpec()->ToBString();
        char line[71];
        int32 i = specStr->FindFirst("\n");
        while(i != B_ERROR) {
@@ -2000,7 +2068,7 @@
        debug_printf("\n");
        delete specStr;
        #endif
-       STRACE_SAT(("Finished Window::StackAndTile() on %s\n", Title()));
+       STRACE_SAT(("Finished Window::StackAndTile() on %s\n", 
fWindow->Title()));
 }
 
 
@@ -2058,7 +2126,7 @@
 StackAndTileWindow::_RemoveStackingPersistently()
 {
        STRACE_SAT(("Window::_RemoveStackingPersistently() on %s, 
fStackedWindowIds=%x\n",
-               Title(), fStackedWindowIds));
+               fWindow->Title(), fStackedWindowIds));
        if (!fStackedWindowIds)
                return;
 
@@ -2072,7 +2140,7 @@
 
        fStackedWindowIds = NULL;
        STRACE_SAT(("Finished Window::_RemoveStackingPersistently() on %s\n",
-               Title()));
+               fWindow->Title()));
 }
 
 
@@ -2082,7 +2150,8 @@
 void
 StackAndTileWindow::_RemoveSnappingPersistently()
 {
-       STRACE_SAT(("Window::_RemoveSnappingPersistently() on %s\n", Title()));
+       STRACE_SAT(("Window::_RemoveSnappingPersistently() on %s\n",
+               fWindow->Title()));
 
        _FreeUpSnappingList(SNAP_LEFT, SNAP_LEFT, true);
        _FreeUpSnappingList(SNAP_LEFT, SNAP_RIGHT, true);
@@ -2094,7 +2163,7 @@
        _FreeUpSnappingList(SNAP_BOTTOM, SNAP_BOTTOM, true);
 
        STRACE_SAT(("Finished Window::_RemoveSnappingPersistently() on %s\n",
-               Title()));
+               fWindow->Title()));
 }
 
 

Modified: haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.h
===================================================================
--- haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.h       
2010-05-18 20:28:20 UTC (rev 36860)
+++ haiku/branches/features/stack-and-tile/src/servers/app/StackAndTile.h       
2010-05-18 22:09:57 UTC (rev 36861)
@@ -10,6 +10,7 @@
 
 
 #include <Message.h>
+#include <MessageFilter.h>
 #include <Region.h>
 
 
@@ -23,6 +24,28 @@
 class Window;
 
 
+class StackAndTile
+{
+       public:
+                                                       StackAndTile(Desktop* 
desktop);
+                                                       ~StackAndTile();
+
+               // hook functions
+               filter_result           FilterKey(uint32 what, int32 key, int32 
modifiers);
+
+               void                            FinishStackingAndSnapping();
+               bool                            IsStackingAndSnapping()
+                                                               { return 
fIsStackingAndSnapping; }
+               LinearSpec*                     GetLinearSpec() { return 
&fStackAndTileSpec; }
+
+       private:
+               LinearSpec                      fStackAndTileSpec;
+               Desktop*                        fDesktop;
+               
+               bool                            fIsStackingAndSnapping;
+};
+
+
 class StackAndTileWindow
 {
        public:
@@ -86,6 +109,8 @@
                BList*                          Bottom2TopSnappingWindowIds() 
const
                                                                { return 
fBottom2TopSnappingWindowIds; }
 
+               ::StackAndTile*         fStackAndTile;
+
        private:
                void                            _InitStackingAndSnapping();
                void                            _RemoveStackingAndSnapping();


Other related posts:

  • » [haiku-commits] r36861 - haiku/branches/features/stack-and-tile/src/servers/app - clemens . zeidler