summaryrefslogtreecommitdiff
path: root/src/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.cpp')
-rw-r--r--src/window.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/window.cpp b/src/window.cpp
index 4c1b8d698..ff5ac700f 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -645,12 +645,14 @@ void Window::ReInit()
/** Find the Window whose parent pointer points to this window
* @param w parent Window to find child of
- * @return a Window pointer that is the child of w, or NULL otherwise */
-static Window *FindChildWindow(const Window *w)
+ * @param wc Window class of the window to remove; WC_INVALID if class does not matter
+ * @return a Window pointer that is the child of w, or NULL otherwise
+ */
+static Window *FindChildWindow(const Window *w, WindowClass wc)
{
Window *v;
FOR_ALL_WINDOWS_FROM_BACK(v) {
- if (v->parent == w) return v;
+ if ((wc == WC_INVALID || wc == v->window_class) && v->parent == w) return v;
}
return NULL;
@@ -658,13 +660,14 @@ static Window *FindChildWindow(const Window *w)
/**
* Delete all children a window might have in a head-recursive manner
+ * @param wc Window class of the window to remove; WC_INVALID if class does not matter
*/
-void Window::DeleteChildWindows() const
+void Window::DeleteChildWindows(WindowClass wc) const
{
- Window *child = FindChildWindow(this);
+ Window *child = FindChildWindow(this, wc);
while (child != NULL) {
delete child;
- child = FindChildWindow(this);
+ child = FindChildWindow(this, wc);
}
}