aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Screen.cc49
-rw-r--r--src/Screen.hh4
2 files changed, 44 insertions, 9 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index f942837..d5d8ebe 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Screen.cc,v 1.29 2002/02/21 12:03:40 fluxgen Exp $ 25// $Id: Screen.cc,v 1.30 2002/02/26 22:25:20 fluxgen Exp $
26 26
27// stupid macros needed to access some functions in version 2 of the GNU C 27// stupid macros needed to access some functions in version 2 of the GNU C
28// library 28// library
@@ -815,6 +815,40 @@ void BScreen::changeWorkspaceID(int id) {
815 updateNetizenCurrentWorkspace(); 815 updateNetizenCurrentWorkspace();
816} 816}
817 817
818void BScreen::sendToWorkspace(int id) {
819 BScreen::sendToWorkspace(id, true);
820}
821
822void BScreen::sendToWorkspace(int id, bool changeWS) {
823 FluxboxWindow *win;
824 if (! current_workspace || id >= workspacesList.size() || id < 0)
825 return;
826
827 if (id != current_workspace->getWorkspaceID()) {
828 XSync(fluxbox->getXDisplay(), True);
829
830 win = fluxbox->getFocusedWindow();
831
832 if (win && win->getScreen() == this &&
833 (! win->isStuck())) {
834
835 if ( win->getTab() ) {
836 Tab *tab = win->getTab();
837 tab->disconnect();
838 tab->setPosition();
839 }
840
841 win->withdraw();
842 BScreen::reassociateWindow(win, id, True);
843 if (changeWS) {
844 BScreen::changeWorkspaceID(id);
845 win->setInputFocus();
846 }
847 }
848
849 }
850}
851
818 852
819void BScreen::addNetizen(Netizen *n) { 853void BScreen::addNetizen(Netizen *n) {
820 netizenList.push_back(n); 854 netizenList.push_back(n);
@@ -967,9 +1001,9 @@ void BScreen::updateNetizenConfigNotify(XEvent *e) {
967 1001
968 1002
969void BScreen::raiseWindows(Window *workspace_stack, int num) { 1003void BScreen::raiseWindows(Window *workspace_stack, int num) {
970 Window session_stack[(num + workspacesList.size() + rootmenuList.size() + 30)];
971 int i = 0;
972 1004
1005 Window session_stack[(num + workspacesList.size() + rootmenuList.size() + 30)];
1006 int i = 0;
973 XRaiseWindow(getBaseDisplay()->getXDisplay(), iconmenu->getWindowID()); 1007 XRaiseWindow(getBaseDisplay()->getXDisplay(), iconmenu->getWindowID());
974 session_stack[i++] = iconmenu->getWindowID(); 1008 session_stack[i++] = iconmenu->getWindowID();
975 1009
@@ -986,11 +1020,11 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
986 session_stack[i++] = configmenu->getTabmenu()->getWindowID(); 1020 session_stack[i++] = configmenu->getTabmenu()->getWindowID();
987 session_stack[i++] = configmenu->getWindowID(); 1021 session_stack[i++] = configmenu->getWindowID();
988 1022
989#ifdef SLIT 1023 #ifdef SLIT
990 session_stack[i++] = slit->getMenu()->getDirectionmenu()->getWindowID(); 1024 session_stack[i++] = slit->getMenu()->getDirectionmenu()->getWindowID();
991 session_stack[i++] = slit->getMenu()->getPlacementmenu()->getWindowID(); 1025 session_stack[i++] = slit->getMenu()->getPlacementmenu()->getWindowID();
992 session_stack[i++] = slit->getMenu()->getWindowID(); 1026 session_stack[i++] = slit->getMenu()->getWindowID();
993#endif // SLIT 1027 #endif // SLIT
994 1028
995 session_stack[i++] = 1029 session_stack[i++] =
996 toolbar->getMenu()->getPlacementmenu()->getWindowID(); 1030 toolbar->getMenu()->getPlacementmenu()->getWindowID();
@@ -1006,10 +1040,10 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
1006 if (toolbar->isOnTop()) 1040 if (toolbar->isOnTop())
1007 session_stack[i++] = toolbar->getWindowID(); 1041 session_stack[i++] = toolbar->getWindowID();
1008 1042
1009#ifdef SLIT 1043 #ifdef SLIT
1010 if (slit->isOnTop()) 1044 if (slit->isOnTop())
1011 session_stack[i++] = slit->getWindowID(); 1045 session_stack[i++] = slit->getWindowID();
1012#endif // SLIT 1046 #endif // SLIT
1013 1047
1014 int k=num; 1048 int k=num;
1015 while (k--) 1049 while (k--)
@@ -1019,7 +1053,6 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
1019 1053
1020} 1054}
1021 1055
1022
1023#ifdef HAVE_STRFTIME 1056#ifdef HAVE_STRFTIME
1024void BScreen::saveStrftimeFormat(char *format) { 1057void BScreen::saveStrftimeFormat(char *format) {
1025 if (resource.strftime_format) 1058 if (resource.strftime_format)
diff --git a/src/Screen.hh b/src/Screen.hh
index 6df6ca0..d7634a5 100644
--- a/src/Screen.hh
+++ b/src/Screen.hh
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Screen.hh,v 1.20 2002/02/20 23:04:35 fluxgen Exp $ 25// $Id: Screen.hh,v 1.21 2002/02/26 22:25:53 fluxgen Exp $
26 26
27#ifndef SCREEN_HH 27#ifndef SCREEN_HH
28#define SCREEN_HH 28#define SCREEN_HH
@@ -199,6 +199,8 @@ public:
199 void removeIcon(FluxboxWindow *); 199 void removeIcon(FluxboxWindow *);
200 void getNameOfWorkspace(int, char **); 200 void getNameOfWorkspace(int, char **);
201 void changeWorkspaceID(int); 201 void changeWorkspaceID(int);
202 void sendToWorkspace(int);
203 void sendToWorkspace(int, bool);
202 void raiseWindows(Window *, int); 204 void raiseWindows(Window *, int);
203 void reassociateWindow(FluxboxWindow *, int, Bool); 205 void reassociateWindow(FluxboxWindow *, int, Bool);
204 void prevFocus(void); 206 void prevFocus(void);