aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkt <markt>2007-06-03 20:17:06 (GMT)
committermarkt <markt>2007-06-03 20:17:06 (GMT)
commit64de0ae568c01adf839c4b73c6705caa40bb3c6a (patch)
tree534512df39899fefff93c131a651a907236f22a5
parent255d96ce45bad1ef93112d45eaadeaac61df1fd2 (diff)
downloadfluxbox-64de0ae568c01adf839c4b73c6705caa40bb3c6a.zip
fluxbox-64de0ae568c01adf839c4b73c6705caa40bb3c6a.tar.bz2
send transients along with window to other workspaces
-rw-r--r--ChangeLog3
-rw-r--r--src/Screen.cc38
-rw-r--r--src/fluxbox.cc3
3 files changed, 30 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index b1ef73a..a903f27 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
1 (Format: Year/Month/Day) 1 (Format: Year/Month/Day)
2Changes for 1.1: 2Changes for 1.1:
3*07/06/03: 3*07/06/03:
4 * Also send transient windows when sending a window to another workspace, bug
5 #1716900 (Mark)
6 Screen.cc
4 * Only change layer to normal when removing _NET_WM_STATE_{ABOVE,BELOW} if 7 * Only change layer to normal when removing _NET_WM_STATE_{ABOVE,BELOW} if
5 the window is actually above/below the normal layer (thanks Jim Ramsay) 8 the window is actually above/below the normal layer (thanks Jim Ramsay)
6 Ewmh.cc 9 Ewmh.cc
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