X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.cc;h=9fd1416e39d342fdf31096caeafb0ef7e2cb0930;hb=a765df7fa67ec4346179ade2cfb8f337286c88d7;hp=95c4987744059da73eaacf16b8aa9c750ed6fcae;hpb=02b9d474f1dad0fcb15f4832a582d99e51ee64b6;p=chaz%2Fopenbox diff --git a/src/client.cc b/src/client.cc index 95c49877..9fd1416e 100644 --- a/src/client.cc +++ b/src/client.cc @@ -39,33 +39,27 @@ Client::Client(int screen, Window window) // update EVERYTHING the first time!! - // we default to NormalState, visible + // defaults _wmstate = NormalState; - // start unfocused _focused = false; - // not a transient by default of course _transient_for = 0; - // pick a layer to start from _layer = Layer_Normal; - // default to not urgent _urgent = false; - // not positioned unless specified _positioned = false; - // nothing is disabled unless specified _disabled_decorations = 0; - // no modal children until they set themselves _modal_child = 0; + _group = None; + _desktop = 0; getArea(); getDesktop(); + getState(); // do this before updateTransientFor! (for _modal) + getShaped(); updateTransientFor(); getMwmHints(); getType(); // this can change the mwmhints for special cases - getState(); - getShaped(); - updateProtocols(); getGravity(); // get the attribute gravity @@ -105,10 +99,8 @@ Client::~Client() _transients.front()->_transient_for = 0; _transients.pop_front(); } - + // clean up parents reference to this - if (_modal) - setModal(false); if (_transient_for) _transient_for->_transients.remove(this); // remove from old parent @@ -825,6 +817,8 @@ Client *Client::findModalChild(Client *skip) const void Client::setModal(bool modal) { + if (modal == _modal) return; + if (modal) { Client *c = this; while (c->_transient_for) { @@ -1616,6 +1610,19 @@ void Client::disableDecorations(DecorationFlags flags) } +void Client::installColormap(bool install) const +{ + XWindowAttributes wa; + if (XGetWindowAttributes(**otk::display, _window, &wa)) { + printf("%snstalling Window Colormap 0x%lx!\n", install ? "I" : "Uni", _window); + if (install) + XInstallColormap(**otk::display, wa.colormap); + else + XUninstallColormap(**otk::display, wa.colormap); + } +} + + bool Client::focus() { // if we have a modal child, then focus it, not us