summaryrefslogtreecommitdiff
path: root/src/Window.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-06-01 17:18:55 +0000
committerDana Jansens <danakj@orodu.net>2002-06-01 17:18:55 +0000
commit4e0fde35ac60dcf36c3180b1606abba84ccace34 (patch)
tree83f0ec9cb5e86e5bd722f44aeece767447aeefe8 /src/Window.cc
parent20bac0772c548fe1e41eed21d55849bad2f34b2f (diff)
make all parents/transients that are related have the same sticky state.
Diffstat (limited to 'src/Window.cc')
-rw-r--r--src/Window.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Window.cc b/src/Window.cc
index 80fe0816..d3369244 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -254,6 +254,11 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
frame.rect.width(), frame.rect.height());
}
+ // get sticky state from our parent window if we've got one
+ if (isTransient() && client.transient_for != (BlackboxWindow *) ~0ul &&
+ client.transient_for->isStuck() != flags.stuck)
+ stick();
+
if (flags.shaded) {
flags.shaded = False;
shade();
@@ -1609,6 +1614,9 @@ void BlackboxWindow::shade(void) {
}
+/*
+ * (Un)Sticks a window and its relatives.
+ */
void BlackboxWindow::stick(void) {
if (flags.stuck) {
blackbox_attrib.flags ^= AttribOmnipresent;
@@ -1628,6 +1636,16 @@ void BlackboxWindow::stick(void) {
setState(current_state);
}
+ // go up the chain
+ if (isTransient() && client.transient_for != (BlackboxWindow *) ~0ul &&
+ client.transient_for->isStuck() != flags.stuck)
+ client.transient_for->stick();
+ // go down the chain
+ BlackboxWindowList::iterator it;
+ const BlackboxWindowList::iterator end = client.transientList.end();
+ for (it = client.transientList.begin(); it != end; ++it)
+ if ((*it)->isStuck() != flags.stuck)
+ (*it)->stick();
}