bool CreateMonocleTree(tree_node *RootNode, screen_info *Screen, std::vector<window_info*> *WindowsPtr) { bool Result = false; std::vector<window_info*> &Windows = *WindowsPtr; if(!Windows.empty()) { tree_node *Root = RootNode; Root->WindowID = Windows[0]->WID; for(std::size_t WindowIndex = 1; WindowIndex < Windows.size(); ++WindowIndex) { tree_node *Next = CreateRootNode(); SetRootNodeContainer(Screen, Next); Next->WindowID = Windows[WindowIndex]->WID; Root->RightChild = Next; Next->LeftChild = Root; Root = Next; } Result = true; } return Result; }
void ChangePaddingOfDisplay(const std::string &Side, int Offset) { screen_info *Screen = GetDisplayOfMousePointer(); if(Side == "left") { if(Screen->Space[Screen->ActiveSpace].PaddingLeft + Offset >= 0) Screen->Space[Screen->ActiveSpace].PaddingLeft += Offset; } else if(Side == "right") { if(Screen->Space[Screen->ActiveSpace].PaddingRight + Offset >= 0) Screen->Space[Screen->ActiveSpace].PaddingRight += Offset; } else if(Side == "top") { if(Screen->Space[Screen->ActiveSpace].PaddingTop + Offset >= 0) Screen->Space[Screen->ActiveSpace].PaddingTop += Offset; } else if(Side == "bottom") { if(Screen->Space[Screen->ActiveSpace].PaddingBottom + Offset >= 0) Screen->Space[Screen->ActiveSpace].PaddingBottom += Offset; } SetRootNodeContainer(Screen, Screen->Space[Screen->ActiveSpace].RootNode); CreateNodeContainers(Screen, Screen->Space[Screen->ActiveSpace].RootNode, true); ApplyNodeContainer(Screen->Space[Screen->ActiveSpace].RootNode); }
void ChangePaddingOfDisplay(const std::string &Side, int Offset) { screen_info *Screen = GetDisplayOfMousePointer(); space_info *Space = &Screen->Space[Screen->ActiveSpace]; if(Side == "left") { if(Space->Offset.PaddingLeft + Offset >= 0) Space->Offset.PaddingLeft += Offset; } else if(Side == "right") { if(Space->Offset.PaddingRight + Offset >= 0) Space->Offset.PaddingRight += Offset; } else if(Side == "top") { if(Space->Offset.PaddingTop + Offset >= 0) Space->Offset.PaddingTop += Offset; } else if(Side == "bottom") { if(Space->Offset.PaddingBottom + Offset >= 0) Space->Offset.PaddingBottom += Offset; } if(Space->RootNode) { if(Space->Mode == SpaceModeBSP) { SetRootNodeContainer(Screen, Space->RootNode); CreateNodeContainers(Screen, Space->RootNode, true); } else if(Space->Mode == SpaceModeMonocle) { tree_node *CurrentNode = Space->RootNode; while(CurrentNode) { SetRootNodeContainer(Screen, CurrentNode); CurrentNode = CurrentNode->RightChild; } } ApplyNodeContainer(Space->RootNode, Space->Mode); } }
void UpdateSpaceOfScreen(space_info *Space, screen_info *Screen) { if(Space->RootNode) { if(Space->Settings.Mode == SpaceModeBSP) { SetRootNodeContainer(Screen, Space->RootNode); CreateNodeContainers(Screen, Space->RootNode, true); } else if(Space->Settings.Mode == SpaceModeMonocle) { link_node *Link = Space->RootNode->List; while(Link) { SetLinkNodeContainer(Screen, Link); Link = Link->Next; } } ApplyTreeNodeContainer(Space->RootNode); Space->NeedsUpdate = false; } }
tree_node *CreateTreeFromWindowIDList(screen_info *Screen, std::vector<window_info*> *WindowsPtr) { if(IsSpaceFloating(Screen->ActiveSpace)) return NULL; tree_node *RootNode = CreateRootNode(); SetRootNodeContainer(Screen, RootNode); bool Result = false; space_info *Space = &Screen->Space[Screen->ActiveSpace]; if(Space->Mode == SpaceModeBSP) Result = CreateBSPTree(RootNode, Screen, WindowsPtr); else if(Space->Mode == SpaceModeMonocle) Result = CreateMonocleTree(RootNode, Screen, WindowsPtr); if(!Result) { free(RootNode); RootNode = NULL; } return RootNode; }