X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2FWindow.cc;h=d33692449329e071432702f8407d03f3a5b6288a;hb=4e0fde35ac60dcf36c3180b1606abba84ccace34;hp=80fe08169fd3f4519117e20b245729afc9e4ff7b;hpb=e149ab6c299d96f0208b793b83f4c0d6f08a840f;p=chaz%2Fopenbox 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(); }