diff options
-rw-r--r-- | src/Screen.cc | 20 | ||||
-rw-r--r-- | src/Window.cc | 52 | ||||
-rw-r--r-- | src/Window.hh | 2 |
3 files changed, 21 insertions, 53 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index 07f55c4..e6d10ff 100644 --- a/src/Screen.cc +++ b/src/Screen.cc | |||
@@ -1113,6 +1113,12 @@ void BScreen::changeWorkspaceID(unsigned int id, bool revert) { | |||
1113 | 1113 | ||
1114 | FbTk::App::instance()->sync(false); | 1114 | FbTk::App::instance()->sync(false); |
1115 | 1115 | ||
1116 | FluxboxWindow *focused = FocusControl::focusedFbWindow(); | ||
1117 | |||
1118 | if (focused && focused->isMoving() && doOpaqueMove()) | ||
1119 | // don't reassociate if not opaque moving | ||
1120 | reassociateWindow(focused, id, true); | ||
1121 | |||
1116 | // set new workspace | 1122 | // set new workspace |
1117 | Workspace *old = currentWorkspace(); | 1123 | Workspace *old = currentWorkspace(); |
1118 | m_current_workspace = getWorkspace(id); | 1124 | m_current_workspace = getWorkspace(id); |
@@ -1120,15 +1126,6 @@ void BScreen::changeWorkspaceID(unsigned int id, bool revert) { | |||
1120 | // we show new workspace first in order to appear faster | 1126 | // we show new workspace first in order to appear faster |
1121 | currentWorkspace()->showAll(); | 1127 | currentWorkspace()->showAll(); |
1122 | 1128 | ||
1123 | FluxboxWindow *focused = FocusControl::focusedFbWindow(); | ||
1124 | |||
1125 | if (focused && focused->isMoving()) { | ||
1126 | if (doOpaqueMove()) | ||
1127 | reassociateWindow(focused, id, true); | ||
1128 | // don't reassociate if not opaque moving | ||
1129 | focused->pauseMoving(); | ||
1130 | } | ||
1131 | |||
1132 | // reassociate all windows that are stuck to the new workspace | 1129 | // reassociate all windows that are stuck to the new workspace |
1133 | Workspace::Windows wins = old->windowList(); | 1130 | Workspace::Windows wins = old->windowList(); |
1134 | Workspace::Windows::iterator it = wins.begin(); | 1131 | Workspace::Windows::iterator it = wins.begin(); |
@@ -1145,10 +1142,9 @@ void BScreen::changeWorkspaceID(unsigned int id, bool revert) { | |||
1145 | (*icon_it)->setWorkspace(id); | 1142 | (*icon_it)->setWorkspace(id); |
1146 | } | 1143 | } |
1147 | 1144 | ||
1148 | if (focused && focused->isMoving()) { | 1145 | if (focused && focused->isMoving() && doOpaqueMove()) |
1149 | focused->focus(); | 1146 | focused->focus(); |
1150 | focused->resumeMoving(); | 1147 | else if (revert) |
1151 | } else if (revert) | ||
1152 | FocusControl::revertFocus(*this); | 1148 | FocusControl::revertFocus(*this); |
1153 | 1149 | ||
1154 | old->hideAll(false); | 1150 | old->hideAll(false); |
diff --git a/src/Window.cc b/src/Window.cc index 8c50f39..e29e761 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -2462,6 +2462,14 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2462 | m_last_resize_x = me.x_root; | 2462 | m_last_resize_x = me.x_root; |
2463 | m_last_resize_y = me.y_root; | 2463 | m_last_resize_y = me.y_root; |
2464 | 2464 | ||
2465 | // undraw rectangle before warping workspaces | ||
2466 | if (!screen().doOpaqueMove()) { | ||
2467 | parent().drawRectangle(screen().rootTheme()->opGC(), | ||
2468 | m_last_move_x, m_last_move_y, | ||
2469 | frame().width() + 2*frame().window().borderWidth()-1, | ||
2470 | frame().height() + 2*frame().window().borderWidth()-1); | ||
2471 | } | ||
2472 | |||
2465 | if (moved_x && screen().isWorkspaceWarping()) { | 2473 | if (moved_x && screen().isWorkspaceWarping()) { |
2466 | unsigned int cur_id = screen().currentWorkspaceID(); | 2474 | unsigned int cur_id = screen().currentWorkspaceID(); |
2467 | unsigned int new_id = cur_id; | 2475 | unsigned int new_id = cur_id; |
@@ -2492,7 +2500,10 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2492 | XWarpPointer(display, None, me.root, 0, 0, 0, 0, | 2500 | XWarpPointer(display, None, me.root, 0, 0, 0, 0, |
2493 | m_last_resize_x, m_last_resize_y); | 2501 | m_last_resize_x, m_last_resize_y); |
2494 | 2502 | ||
2495 | screen().sendToWorkspace(new_id, this, true); | 2503 | if (screen().doOpaqueMove()) |
2504 | screen().sendToWorkspace(new_id, this, true); | ||
2505 | else | ||
2506 | screen().changeWorkspaceID(new_id, false); | ||
2496 | } | 2507 | } |
2497 | } | 2508 | } |
2498 | 2509 | ||
@@ -2505,12 +2516,7 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2505 | // dx = current left side, dy = current top | 2516 | // dx = current left side, dy = current top |
2506 | doSnapping(dx, dy); | 2517 | doSnapping(dx, dy); |
2507 | 2518 | ||
2508 | if (! screen().doOpaqueMove()) { | 2519 | if (!screen().doOpaqueMove()) { |
2509 | parent().drawRectangle(screen().rootTheme()->opGC(), | ||
2510 | m_last_move_x, m_last_move_y, | ||
2511 | frame().width() + 2*frame().window().borderWidth()-1, | ||
2512 | frame().height() + 2*frame().window().borderWidth()-1); | ||
2513 | |||
2514 | parent().drawRectangle(screen().rootTheme()->opGC(), | 2520 | parent().drawRectangle(screen().rootTheme()->opGC(), |
2515 | dx, dy, | 2521 | dx, dy, |
2516 | frame().width() + 2*frame().window().borderWidth()-1, | 2522 | frame().width() + 2*frame().window().borderWidth()-1, |
@@ -2874,38 +2880,6 @@ void FluxboxWindow::stopMoving(bool interrupted) { | |||
2874 | FbTk::App::instance()->sync(false); //make sure the redraw is made before we continue | 2880 | FbTk::App::instance()->sync(false); //make sure the redraw is made before we continue |
2875 | } | 2881 | } |
2876 | 2882 | ||
2877 | void FluxboxWindow::pauseMoving() { | ||
2878 | if (screen().doOpaqueMove()) { | ||
2879 | return; | ||
2880 | } | ||
2881 | |||
2882 | parent().drawRectangle(screen().rootTheme()->opGC(), | ||
2883 | m_last_move_x, m_last_move_y, | ||
2884 | frame().width() + 2*frame().window().borderWidth()-1, | ||
2885 | frame().height() + 2*frame().window().borderWidth()-1); | ||
2886 | |||
2887 | } | ||
2888 | |||
2889 | |||
2890 | void FluxboxWindow::resumeMoving() { | ||
2891 | if (screen().doOpaqueMove()) { | ||
2892 | return; | ||
2893 | } | ||
2894 | |||
2895 | if (m_workspace_number == screen().currentWorkspaceID()) { | ||
2896 | frame().show(); | ||
2897 | focus(); | ||
2898 | } | ||
2899 | |||
2900 | FbTk::App::instance()->sync(false); | ||
2901 | |||
2902 | parent().drawRectangle(screen().rootTheme()->opGC(), | ||
2903 | m_last_move_x, m_last_move_y, | ||
2904 | frame().width() + 2*frame().window().borderWidth()-1, | ||
2905 | frame().height() + 2*frame().window().borderWidth()-1); | ||
2906 | |||
2907 | } | ||
2908 | |||
2909 | /** | 2883 | /** |
2910 | * Helper function that snaps a window to another window | 2884 | * Helper function that snaps a window to another window |
2911 | * We snap if we're closer than the x/ylimits. | 2885 | * We snap if we're closer than the x/ylimits. |
diff --git a/src/Window.hh b/src/Window.hh index 27901d2..97ece55 100644 --- a/src/Window.hh +++ b/src/Window.hh | |||
@@ -297,8 +297,6 @@ public: | |||
297 | // popup menu on last button press position | 297 | // popup menu on last button press position |
298 | void popupMenu(); | 298 | void popupMenu(); |
299 | 299 | ||
300 | void pauseMoving(); | ||
301 | void resumeMoving(); | ||
302 | /** | 300 | /** |
303 | @name event handlers | 301 | @name event handlers |
304 | */ | 302 | */ |