aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkt <markt>2007-06-03 20:27:52 (GMT)
committermarkt <markt>2007-06-03 20:27:52 (GMT)
commit226ec5d3715e7433fa1933e0507ae20d20f0453f (patch)
tree6fcdd78626eadea02615faa5ff6d6110acc2a069
parentf9c5bfec0762d831ad8f9bf8f7940b64792909b0 (diff)
downloadfluxbox-226ec5d3715e7433fa1933e0507ae20d20f0453f.zip
fluxbox-226ec5d3715e7433fa1933e0507ae20d20f0453f.tar.bz2
send transient windows along with sendtoworkspace
-rw-r--r--ChangeLog3
-rw-r--r--src/Screen.cc46
-rw-r--r--src/fluxbox.cc3
3 files changed, 33 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e459b2..ccf534b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
1 (Format: Year/Month/Day) 1 (Format: Year/Month/Day)
2Changes for 1.0.0: 2Changes for 1.0.0:
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 625e412..3db8ddc 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -1199,31 +1199,41 @@ void BScreen::sendToWorkspace(unsigned int id, FluxboxWindow *win, bool changeWS
1199 1199
1200 FbTk::App::instance()->sync(false); 1200 FbTk::App::instance()->sync(false);
1201 1201
1202 if (win && &win->screen() == this && 1202 if (!win || &win->screen() != this || win->isStuck())
1203 (! win->isStuck())) { 1203 return;
1204 1204
1205 // if iconified, deiconify it before we send it somewhere 1205 // if iconified, deiconify it before we send it somewhere
1206 if (win->isIconic()) 1206 if (win->isIconic())
1207 win->deiconify(); 1207 win->deiconify();
1208 1208
1209 // if the window isn't on current workspace, hide it 1209 // if the window isn't on current workspace, hide it
1210 if (id != currentWorkspace()->workspaceID()) 1210 if (id != currentWorkspace()->workspaceID())
1211 win->withdraw(true); 1211 win->withdraw(true);
1212 1212
1213 windowMenu().hide(); 1213 windowMenu().hide();
1214 1214
1215 reassociateWindow(win, id, true); 1215 reassociateWindow(win, id, true);
1216 1216
1217 // if the window is on current workspace, show it. 1217 // if the window is on current workspace, show it.
1218 if (id == currentWorkspace()->workspaceID()) 1218 if (id == currentWorkspace()->workspaceID())
1219 win->deiconify(false, false); 1219 win->deiconify(false, false);
1220 1220
1221 // change workspace ? 1221 // change workspace ?
1222 if (changeWS && id != currentWorkspace()->workspaceID()) { 1222 if (changeWS && id != currentWorkspace()->workspaceID()) {
1223 changeWorkspaceID(id); 1223 changeWorkspaceID(id);
1224 win->setInputFocus(); 1224 win->setInputFocus();
1225 } 1225 }
1226 1226
1227 // send all the transients too
1228 FluxboxWindow::ClientList::iterator client_it = win->clientList().begin();
1229 FluxboxWindow::ClientList::iterator client_it_end = win->clientList().end();
1230 for (; client_it != client_it_end; ++client_it) {
1231 WinClient::TransientList::const_iterator it = (*client_it)->transientList().begin();
1232 WinClient::TransientList::const_iterator it_end = (*client_it)->transientList().end();
1233 for (; it != it_end; ++it) {
1234 if ((*it)->fbwindow())
1235 sendToWorkspace(id, (*it)->fbwindow(), false);
1236 }
1227 } 1237 }
1228 1238
1229} 1239}
diff --git a/src/fluxbox.cc b/src/fluxbox.cc
index ef747e6..352caf0 100644
--- a/src/fluxbox.cc
+++ b/src/fluxbox.cc
@@ -916,7 +916,8 @@ void Fluxbox::handleEvent(XEvent * const e) {
916#ifdef DEBUG 916#ifdef DEBUG
917 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl; 917 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl;
918#endif // DEBUG 918#endif // DEBUG
919 } else if (winclient && winclient == FocusControl::focusedWindow() && 919 } else if (winclient && (winclient == FocusControl::focusedWindow() ||
920 FocusControl::focusedWindow() == 0) &&
920 (winclient->fbwindow() == 0 921 (winclient->fbwindow() == 0
921 || !winclient->fbwindow()->isMoving())) { 922 || !winclient->fbwindow()->isMoving())) {
922 // we don't unfocus a moving window 923 // we don't unfocus a moving window