From 3bbcd3540e772335f491d49e916ba2e3b2635507 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 4 Jan 2007 02:53:26 +0000 Subject: this seems to be a change that will affect a lot of things, so it should wait until after 1.0, even though I think it's important --- ChangeLog | 4 ---- src/Window.cc | 53 ++++++++++++----------------------------------------- 2 files changed, 12 insertions(+), 45 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4ac4991..ae88888 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,6 @@ (Format: Year/Month/Day) Changes for 1.0rc3: *07/01/04: - * ICCCM compliance updates -- see Section 4.1.4 (Mark) - - Set IconicState on all unmapped clients - - Unmap all clients when set to IconicState - Window.cc * Move minimized windows to the back of the focused list (Mark) Window.cc FocusControl.cc/hh *07/01/03: diff --git a/src/Window.cc b/src/Window.cc index 9d79deb..53ec88d 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -1536,7 +1536,6 @@ void FluxboxWindow::hide(bool interrupt_moving) { menu().hide(); frame().hide(); - setState(IconicState,false); } void FluxboxWindow::show() { @@ -1555,6 +1554,8 @@ void FluxboxWindow::iconify() { iconic = true; + setState(IconicState, false); + hide(true); screen().focusControl().setFocusBack(this); @@ -1896,10 +1897,16 @@ void FluxboxWindow::shade() { shaded = false; m_blackbox_attrib.flags ^= ATTRIB_SHADED; m_blackbox_attrib.attrib ^= ATTRIB_SHADED; + + if (m_initialized) + setState(NormalState, false); } else { shaded = true; m_blackbox_attrib.flags |= ATTRIB_SHADED; m_blackbox_attrib.attrib |= ATTRIB_SHADED; + // shading is the same as iconic + if (m_initialized) + setState(IconicState, false); } } @@ -2241,29 +2248,10 @@ void FluxboxWindow::setState(unsigned long new_state, bool setting_up) { state[0] = (unsigned long) m_current_state; state[1] = (unsigned long) None; - FbTk::ChangeProperty chg(display, FbAtoms::instance()->getWMStateAtom(), - PropModeReplace, (unsigned char *)state, 2); - - ClientList::iterator it = m_clientlist.begin(); - ClientList::iterator it_end = m_clientlist.end(); - for (; it != it_end; ++it) { - chg(*it); - - // ICCCM Section 4.1.4: - // Once a client's window has left the Withdrawn state, the - // window will be mapped if it is in the Normal state and the - // window will be unmapped if it is in the Iconic state. - // Reparenting window managers must unmap the client's window when - // it is in the Iconic state, even if an ancestor window being - // unmapped renders the client's window unviewable. Conversely, if a - // reparenting window manager renders the client's window unviewable - // by unmapping an ancestor, the client's window is by definition in - // the Iconic state and must also be unmapped. - if (new_state == IconicState) - (*it)->hide(); - else if (new_state == NormalState) - (*it)->show(); - } + for_each(m_clientlist.begin(), m_clientlist.end(), + FbTk::ChangeProperty(display, FbAtoms::instance()->getWMStateAtom(), + PropModeReplace, + (unsigned char *)state, 2)); saveBlackboxAttribs(); //notify state changed @@ -2578,23 +2566,6 @@ void FluxboxWindow::unmapNotifyEvent(XUnmapEvent &ue) { if (client == 0) return; - Atom atom_return; - bool ret = false; - int foo; - unsigned long *state, ulfoo, nitems; - if (client->property(FbAtoms::instance()->getWMStateAtom(), - 0l, 2l, false, FbAtoms::instance()->getWMStateAtom(), - &atom_return, &foo, &nitems, &ulfoo, - (unsigned char **) &state) && state) { - - if (nitems >= 1 && static_cast(state[0]) != WithdrawnState); - ret = true; - - XFree(static_cast(state)); - if (ret) - return; - } - #ifdef DEBUG cerr<<__FILE__<<"("<<__FUNCTION__<<"): 0x"<window()<