void FillDeserializedTree(tree_node *RootNode) { std::vector<window_info*> Windows = GetAllWindowsOnDisplay(KWMScreen.Current->ID); tree_node *Current = NULL; GetFirstLeafNode(RootNode, (void**)&Current); std::size_t Counter = 0, Leafs = 0; while(Current) { if(Counter < Windows.size()) Current->WindowID = Windows[Counter++]->WID; Current = GetNearestTreeNodeToTheRight(Current); ++Leafs; } if(Leafs < Windows.size() && Counter < Windows.size()) { tree_node *Root = RootNode; for(; Counter < Windows.size(); ++Counter) { while(!IsLeafNode(Root)) { if(!IsLeafNode(Root->LeftChild) && IsLeafNode(Root->RightChild)) Root = Root->RightChild; else Root = Root->LeftChild; } DEBUG("FillDeserializedTree() Create pair of leafs"); CreateLeafNodePair(KWMScreen.Current, Root, Root->WindowID, Windows[Counter]->WID, GetOptimalSplitMode(Root)); Root = RootNode; } } }
void TileFocusedSpace(space_tiling_option Mode) { if(KWMScreen.Current && IsSpaceInitializedForScreen(KWMScreen.Current) && KWMToggles.EnableTilingMode && !IsSpaceTransitionInProgress() && !IsSpaceSystemOrFullscreen() && FilterWindowList(KWMScreen.Current)) { space_info *Space = &KWMScreen.Current->Space[KWMScreen.Current->ActiveSpace]; if(Space->Mode == Mode) return; DestroyNodeTree(Space->RootNode, Space->Mode); Space->RootNode = NULL; Space->Mode = Mode; std::vector<window_info*> WindowsOnDisplay = GetAllWindowsOnDisplay(KWMScreen.Current->ID); CreateWindowNodeTree(KWMScreen.Current, &WindowsOnDisplay); } }