X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fscreen.cc;h=a7c72e2c4fff2fd956bb982fd8570d7d6e43d5a1;hb=d7cc09cebd23e052f230414f0ad7fb385e3cd2ef;hp=896f38081d15756f85a55fdeef1d16ab52a84a2e;hpb=33ddfc7664d5988c370303217e5f1e3fdb431dd9;p=chaz%2Fopenbox diff --git a/src/screen.cc b/src/screen.cc index 896f3808..a7c72e2c 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -502,9 +502,14 @@ void OBScreen::manageWindow(Window window) Openbox::instance->addClient(client->frame->grip_left(), client); Openbox::instance->addClient(client->frame->grip_right(), client); + bool shown = false; + // if on the current desktop.. (or all desktops) - if (client->desktop() == _desktop || client->desktop() == (signed)0xffffffff) + if (client->desktop() == _desktop || + client->desktop() == (signed)0xffffffff) { + shown = true; client->frame->show(); + } // XXX: handle any requested states such as maximized @@ -520,9 +525,11 @@ void OBScreen::manageWindow(Window window) Openbox::instance->bindings()->grabButtons(true, client); - // XXX: make this optional or more intelligent - if (client->normal()) - client->focus(); + if (shown) { + // XXX: make this optional or more intelligent + if (client->normal()) + client->focus(); + } // call the python NEWWINDOW binding EventData *data = new_event_data(window, EventNewWindow, 0); @@ -552,7 +559,7 @@ void OBScreen::unmanageWindow(OBClient *client) OBClient *newfocus = 0; OBClient::List::iterator it, end = _stacking.end(); for (it = _stacking.begin(); it != end; ++it) - if ((*it)->normal() && (*it)->focus()) { + if ((*it)->desktop() == _desktop && (*it)->normal() && (*it)->focus()) { newfocus = *it; break; } @@ -631,6 +638,8 @@ void OBScreen::changeDesktop(long desktop) if (!(desktop >= 0 && desktop < _num_desktops)) return; + printf("Moving to desktop %ld\n", desktop); + long old = _desktop; _desktop = desktop; @@ -639,6 +648,8 @@ void OBScreen::changeDesktop(long desktop) otk::OBProperty::Atom_Cardinal, _desktop); + if (old == _desktop) return; + OBClient::List::iterator it, end = clients.end(); for (it = clients.begin(); it != end; ++it) { if ((*it)->desktop() == old) { @@ -655,6 +666,8 @@ void OBScreen::changeNumDesktops(long num) if (!(num > 0)) return; + // XXX: move windows on desktops that will no longer exist! + _num_desktops = num; Openbox::instance->property()->set(_info->rootWindow(), otk::OBProperty::net_number_of_desktops,