all repos — fluxbox @ 51ce17d9fe75ee5828cfca144e43548cfa3d2da6

custom fork of the fluxbox windowmanager

transient fixes
fluxgen fluxgen
commit

51ce17d9fe75ee5828cfca144e43548cfa3d2da6

parent

92fbd4b4c5404c0d8c62e9778327f8ddde78052d

1 files changed, 26 insertions(+), 20 deletions(-)

jump to
M src/Window.ccsrc/Window.cc

@@ -22,7 +22,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Window.cc,v 1.82 2002/09/08 23:47:03 fluxgen Exp $ +// $Id: Window.cc,v 1.83 2002/09/10 10:55:34 fluxgen Exp $ #include "Window.hh"

@@ -301,7 +301,7 @@

XMapSubwindows(display, frame.window); if (decorations.menu) - windowmenu = new Windowmenu(this); + windowmenu = new Windowmenu(*this); if (workspace_number < 0 || workspace_number >= screen->getCount()) screen->getCurrentWorkspace()->addWindow(this, place_window);

@@ -373,9 +373,15 @@ }

if (client.transient_for != 0) { + if (client.transient_for == this) { + client.transient_for = 0; + } + fluxbox->setFocusedWindow(client.transient_for); - client.transient_for->client.transients.remove(this); - client.transient_for = 0; + if (client.transient_for) { + client.transient_for->client.transients.remove(this); + client.transient_for = 0; + } } while (!client.transients.empty()) {

@@ -1598,7 +1604,7 @@ iconic = true;

screen->getWorkspace(workspace_number)->removeWindow(this); - if (transient && client.transient_for) { + if (client.transient_for) { if (! client.transient_for->iconic) client.transient_for->iconify(); }

@@ -2373,9 +2379,9 @@

void FluxboxWindow::showMenu(int mx, int my) { windowmenu->move(mx, my); windowmenu->show(); - XRaiseWindow(display, windowmenu->windowID()); - XRaiseWindow(display, windowmenu->getSendToMenu()->windowID()); - XRaiseWindow(display, windowmenu->getSendGroupToMenu()->windowID()); + windowmenu->raise(); + windowmenu->getSendToMenu().raise(); + windowmenu->getSendGroupToMenu().raise(); } void FluxboxWindow::restoreGravity() {

@@ -3489,32 +3495,31 @@ client.transient_for = 0;

// determine if this is a transient window Window win; - if (!XGetTransientForHint(display, client.window, &win)) { - client.transient_for = 0; + if (!XGetTransientForHint(display, client.window, &win)) return; - } - if (win == client.window) return; - if (win == screen->getRootWindow()) + if (win == screen->getRootWindow() && win != 0) { modal = true; + return; + } client.transient_for = Fluxbox::instance()->searchWindow(win); - if (client.transient_for != 0 && - client.window_group != None && win == client.window_group) { - - FluxboxWindow *leader = Fluxbox::instance()->searchGroup(win, this); - if (leader != 0) - client.transient_for = leader; - return; + if (client.transient_for != 0 && + client.window_group != None && win == client.window_group) { + client.transient_for = Fluxbox::instance()->searchGroup(win, this); } // make sure we don't have deadlock loop in transient chain for (FluxboxWindow *w = this; w != 0; w = w->client.transient_for) { if (w == w->client.transient_for) { w->client.transient_for = 0; +#ifdef DEBUG + cerr<<"w = client.transient_for"; +#endif // DEBUG + break; } }

@@ -3524,6 +3529,7 @@ // make sure we only have on instance of this

client.transient_for->client.transients.unique(); stuck = client.transient_for->stuck; } + } void FluxboxWindow::restore(bool remap) {