tree_node *GetNearestLeafNodeNeighbour(tree_node *Node) { if(Node && IsLeafNode(Node)) return IsLeftChild(Node) ? GetNearestTreeNodeToTheRight(Node) : GetNearestTreeNodeToTheLeft(Node); return NULL; }
void RemovePseudoNode() { ax_display *Display = AXLibMainDisplay(); space_info *SpaceInfo = &WindowTree[Display->Space->Identifier]; if(!FocusedApplication) return; ax_window *Window = FocusedApplication->Focus; if(!Window) return; tree_node *Node = GetTreeNodeFromWindowID(SpaceInfo->RootNode, Window->ID); if(Node && Node->Parent) { tree_node *Parent = Node->Parent; tree_node *PseudoNode = IsLeftChild(Node) ? Parent->RightChild : Parent->LeftChild; if(!PseudoNode || !IsLeafNode(PseudoNode) || PseudoNode->WindowID != 0) return; Parent->WindowID = Node->WindowID; Parent->LeftChild = NULL; Parent->RightChild = NULL; free(Node); free(PseudoNode); ApplyTreeNodeContainer(Parent); } }