Fixes #1116965, shadwd windows on restart: shaded icons behaved badly on restart, they went into a real stupid state: somehow shaded, but at the same time iconic, so you werent able to unshade, resize them properly. i fixed that by applying NormalState on shutdowntime (see FluxboxWindow::restore(), unshading a shaded frame to get good window dimensions and on init() i mark the window initialized and connect it to Fluxbox::attachSignals() a bit later.
mathias mathias
2 files changed,
14 insertions(+),
16 deletions(-)
M
src/Window.cc
→
src/Window.cc
@@ -504,19 +504,8 @@ decorations.tab = false; //no tab for this window
} associateClientWindow(true, wattrib.x, wattrib.y, wattrib.width, wattrib.height); - - - Fluxbox::instance()->attachSignals(*this); - - // this window is managed, we are now allowed to modify actual state - m_initialized = true; - - - applyDecorations(true); - grabButtons(); - restoreAttributes(); if (m_workspace_number < 0 || m_workspace_number >= screen().getCount())@@ -548,8 +537,6 @@ wattrib.width = 1;
if (wattrib.height <= 0) wattrib.height = 1; - - // if we're a transient then we should be on the same layer as our parent if (m_client->isTransient() && m_client->transientFor()->fbwindow() &&@@ -569,13 +556,10 @@
if (!place_window) moveResize(frame().x(), frame().y(), frame().width(), frame().height()); - - screen().getWorkspace(m_workspace_number)->addWindow(*this, place_window); setWorkspace(m_workspace_number); - if (shaded) { // start shaded shaded = false; shade();@@ -594,6 +578,10 @@ stuck = false;
stick(); deiconify(); //we're omnipresent and visible } + + Fluxbox::instance()->attachSignals(*this); + // this window is managed, we are now allowed to modify actual state + m_initialized = true; sendConfigureNotify(); // no focus default@@ -3545,6 +3533,14 @@ return;
#ifdef DEBUG cerr<<"restore("<<remap<<")"<<endl; #endif // DEBUG + + if (isShaded()) { + if (!isIconic()) + setState(NormalState, false); + if (frame().isShaded()) + frame().shade(); + } + while (!clientList().empty()) { restore(clientList().back(), remap); // deleting winClient removes it from the clientList