summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Window.cc18
-rw-r--r--src/Window.hh1
2 files changed, 18 insertions, 1 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();
}
diff --git a/src/Window.hh b/src/Window.hh
index 038a58af..191e6592 100644
--- a/src/Window.hh
+++ b/src/Window.hh
@@ -331,7 +331,6 @@ public:
void remaximize(void);
void shade(void);
void stick(void);
- void unstick(void);
void reconfigure(void);
void updateFocusModel(void);
void installColormap(bool install);