aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Screen.cc38
-rw-r--r--src/fluxbox.cc3
2 files changed, 27 insertions, 14 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index 096286b..dbf2ce6 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -1267,24 +1267,36 @@ void BScreen::sendToWorkspace(unsigned int id, FluxboxWindow *win, bool changeWS
1267 if (!win) 1267 if (!win)
1268 win = FocusControl::focusedFbWindow(); 1268 win = FocusControl::focusedFbWindow();
1269 1269
1270 FbTk::App::instance()->sync(false); 1270 if (!win || &win->screen() != this)
1271 1271 return;
1272 if (win && &win->screen() == this) {
1273 1272
1274 windowMenu().hide(); 1273 FbTk::App::instance()->sync(false);
1275 1274
1276 reassociateWindow(win, id, true); 1275 windowMenu().hide();
1276 reassociateWindow(win, id, true);
1277 1277
1278 // change workspace ? 1278 // change workspace ?
1279 if (changeWS) 1279 if (changeWS)
1280 changeWorkspaceID(id); 1280 changeWorkspaceID(id);
1281 1281
1282 // if the window is on current workspace, show it; else hide it. 1282 // if the window is on current workspace, show it; else hide it.
1283 if (id == currentWorkspace()->workspaceID()) 1283 if (id == currentWorkspace()->workspaceID() && !win->isIconic())
1284 win->deiconify(false, false); 1284 win->deiconify(false, false);
1285 else 1285 else {
1286 win->withdraw(true); 1286 win->withdraw(true);
1287 FocusControl::revertFocus(*this);
1288 }
1287 1289
1290 // send all the transients too
1291 FluxboxWindow::ClientList::iterator client_it = win->clientList().begin();
1292 FluxboxWindow::ClientList::iterator client_it_end = win->clientList().end();
1293 for (; client_it != client_it_end; ++client_it) {
1294 WinClient::TransientList::const_iterator it = (*client_it)->transientList().begin();
1295 WinClient::TransientList::const_iterator it_end = (*client_it)->transientList().end();
1296 for (; it != it_end; ++it) {
1297 if ((*it)->fbwindow())
1298 sendToWorkspace(id, (*it)->fbwindow(), false);
1299 }
1288 } 1300 }
1289 1301
1290} 1302}
diff --git a/src/fluxbox.cc b/src/fluxbox.cc
index 25924c3..5210def 100644
--- a/src/fluxbox.cc
+++ b/src/fluxbox.cc
@@ -919,7 +919,8 @@ void Fluxbox::handleEvent(XEvent * const e) {
919#ifdef DEBUG 919#ifdef DEBUG
920 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl; 920 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl;
921#endif // DEBUG 921#endif // DEBUG
922 } else if (winclient && winclient == FocusControl::focusedWindow() && 922 } else if (winclient && (winclient == FocusControl::focusedWindow() ||
923 FocusControl::focusedWindow() == 0) &&
923 (winclient->fbwindow() == 0 924 (winclient->fbwindow() == 0
924 || !winclient->fbwindow()->isMoving())) { 925 || !winclient->fbwindow()->isMoving())) {
925 // we don't unfocus a moving window 926 // we don't unfocus a moving window