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();