diff options
author | rathnor <rathnor> | 2003-05-26 04:24:24 (GMT) |
---|---|---|
committer | rathnor <rathnor> | 2003-05-26 04:24:24 (GMT) |
commit | b8802ad22a0b720143c0381cdac1beb10a7b5193 (patch) | |
tree | 8fbe3b4321240b98ab6532fcfcf45d504652d8ab /src/Window.cc | |
parent | bbaca5b43b1ef51c516f4fd1a75f5659767649c5 (diff) | |
download | fluxbox-b8802ad22a0b720143c0381cdac1beb10a7b5193.zip fluxbox-b8802ad22a0b720143c0381cdac1beb10a7b5193.tar.bz2 |
fix usage of decoration.border (incl xmms move bug)
add BORDER to help turn on borders to remember stuff
Diffstat (limited to 'src/Window.cc')
-rw-r--r-- | src/Window.cc | 80 |
1 files changed, 34 insertions, 46 deletions
diff --git a/src/Window.cc b/src/Window.cc index 320bd62..2101e0d 100644 --- a/src/Window.cc +++ b/src/Window.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: Window.cc,v 1.186 2003/05/24 13:02:49 fluxgen Exp $ | 25 | // $Id: Window.cc,v 1.187 2003/05/26 04:24:24 rathnor Exp $ |
26 | 26 | ||
27 | #include "Window.hh" | 27 | #include "Window.hh" |
28 | 28 | ||
@@ -502,7 +502,7 @@ void FluxboxWindow::init() { | |||
502 | 502 | ||
503 | grabButtons(); | 503 | grabButtons(); |
504 | 504 | ||
505 | positionWindows(); | 505 | applyDecorations(); |
506 | 506 | ||
507 | if (m_workspace_number < 0 || m_workspace_number >= screen().getCount()) | 507 | if (m_workspace_number < 0 || m_workspace_number >= screen().getCount()) |
508 | m_workspace_number = screen().currentWorkspaceID(); | 508 | m_workspace_number = screen().currentWorkspaceID(); |
@@ -839,10 +839,10 @@ void FluxboxWindow::grabButtons() { | |||
839 | 839 | ||
840 | 840 | ||
841 | void FluxboxWindow::reconfigure() { | 841 | void FluxboxWindow::reconfigure() { |
842 | 842 | ||
843 | upsize(); | 843 | upsize(); |
844 | 844 | ||
845 | positionWindows(); | 845 | applyDecorations(); |
846 | 846 | ||
847 | setFocusFlag(focused); | 847 | setFocusFlag(focused); |
848 | 848 | ||
@@ -856,32 +856,6 @@ void FluxboxWindow::reconfigure() { | |||
856 | 856 | ||
857 | } | 857 | } |
858 | 858 | ||
859 | |||
860 | void FluxboxWindow::positionWindows() { | ||
861 | |||
862 | frame().window().setBorderWidth(screen().rootTheme().borderWidth()); | ||
863 | frame().clientArea().setBorderWidth(0); // client area bordered by other things | ||
864 | |||
865 | frame().titlebar().setBorderWidth(screen().rootTheme().borderWidth()); | ||
866 | if (decorations.titlebar) { | ||
867 | frame().showTitlebar(); | ||
868 | } else { | ||
869 | frame().hideTitlebar(); | ||
870 | } | ||
871 | |||
872 | frame().handle().setBorderWidth(screen().rootTheme().borderWidth()); | ||
873 | frame().gripLeft().setBorderWidth(screen().rootTheme().borderWidth()); | ||
874 | frame().gripRight().setBorderWidth(screen().rootTheme().borderWidth()); | ||
875 | |||
876 | if (decorations.handle) | ||
877 | frame().showHandle(); | ||
878 | else | ||
879 | frame().hideHandle(); | ||
880 | |||
881 | frame().reconfigure(); | ||
882 | |||
883 | } | ||
884 | |||
885 | /// update current client title and title in our frame | 859 | /// update current client title and title in our frame |
886 | void FluxboxWindow::updateTitleFromClient() { | 860 | void FluxboxWindow::updateTitleFromClient() { |
887 | 861 | ||
@@ -1026,12 +1000,12 @@ void FluxboxWindow::getMWMHints() { | |||
1026 | Atom atom_return; | 1000 | Atom atom_return; |
1027 | unsigned long num, len; | 1001 | unsigned long num, len; |
1028 | Atom motif_wm_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False); | 1002 | Atom motif_wm_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False); |
1029 | if (!m_client->property(motif_wm_hints, 0, | 1003 | if (!(m_client->property(motif_wm_hints, 0, |
1030 | PropMwmHintsElements, false, | 1004 | PropMwmHintsElements, false, |
1031 | motif_wm_hints, &atom_return, | 1005 | motif_wm_hints, &atom_return, |
1032 | &format, &num, &len, | 1006 | &format, &num, &len, |
1033 | (unsigned char **) &m_client->mwm_hint) == Success && | 1007 | (unsigned char **) &m_client->mwm_hint) && |
1034 | m_client->mwm_hint) { | 1008 | m_client->mwm_hint)) { |
1035 | return; | 1009 | return; |
1036 | } | 1010 | } |
1037 | if (num != static_cast<unsigned int>(PropMwmHintsElements)) | 1011 | if (num != static_cast<unsigned int>(PropMwmHintsElements)) |
@@ -1182,18 +1156,18 @@ bool FluxboxWindow::setInputFocus() { | |||
1182 | //TODO hint skip focus | 1156 | //TODO hint skip focus |
1183 | if (((signed) (frame().x() + frame().width())) < 0) { | 1157 | if (((signed) (frame().x() + frame().width())) < 0) { |
1184 | if (((signed) (frame().y() + frame().height())) < 0) { | 1158 | if (((signed) (frame().y() + frame().height())) < 0) { |
1185 | moveResize(screen().rootTheme().borderWidth(), screen().rootTheme().borderWidth(), | 1159 | moveResize(frame().window().borderWidth(), frame().window().borderWidth(), |
1186 | frame().width(), frame().height()); | 1160 | frame().width(), frame().height()); |
1187 | } else if (frame().y() > (signed) screen().height()) { | 1161 | } else if (frame().y() > (signed) screen().height()) { |
1188 | moveResize(screen().rootTheme().borderWidth(), screen().height() - frame().height(), | 1162 | moveResize(frame().window().borderWidth(), screen().height() - frame().height(), |
1189 | frame().width(), frame().height()); | 1163 | frame().width(), frame().height()); |
1190 | } else { | 1164 | } else { |
1191 | moveResize(screen().rootTheme().borderWidth(), frame().y() + screen().rootTheme().borderWidth(), | 1165 | moveResize(frame().window().borderWidth(), frame().y() + frame().window().borderWidth(), |
1192 | frame().width(), frame().height()); | 1166 | frame().width(), frame().height()); |
1193 | } | 1167 | } |
1194 | } else if (frame().x() > (signed) screen().width()) { | 1168 | } else if (frame().x() > (signed) screen().width()) { |
1195 | if (((signed) (frame().y() + frame().height())) < 0) { | 1169 | if (((signed) (frame().y() + frame().height())) < 0) { |
1196 | moveResize(screen().width() - frame().width(), screen().rootTheme().borderWidth(), | 1170 | moveResize(screen().width() - frame().width(), frame().window().borderWidth(), |
1197 | frame().width(), frame().height()); | 1171 | frame().width(), frame().height()); |
1198 | } else if (frame().y() > (signed) screen().height()) { | 1172 | } else if (frame().y() > (signed) screen().height()) { |
1199 | moveResize(screen().width() - frame().width(), | 1173 | moveResize(screen().width() - frame().width(), |
@@ -1201,7 +1175,7 @@ bool FluxboxWindow::setInputFocus() { | |||
1201 | frame().width(), frame().height()); | 1175 | frame().width(), frame().height()); |
1202 | } else { | 1176 | } else { |
1203 | moveResize(screen().width() - frame().width(), | 1177 | moveResize(screen().width() - frame().width(), |
1204 | frame().y() + screen().rootTheme().borderWidth(), | 1178 | frame().y() + frame().window().borderWidth(), |
1205 | frame().width(), frame().height()); | 1179 | frame().width(), frame().height()); |
1206 | } | 1180 | } |
1207 | } | 1181 | } |
@@ -2360,8 +2334,8 @@ void FluxboxWindow::buttonPressEvent(XButtonEvent &be) { | |||
2360 | raise(); | 2334 | raise(); |
2361 | XAllowEvents(display, ReplayPointer, be.time); | 2335 | XAllowEvents(display, ReplayPointer, be.time); |
2362 | } else { | 2336 | } else { |
2363 | m_button_grab_x = be.x_root - frame().x() - screen().rootTheme().borderWidth(); | 2337 | m_button_grab_x = be.x_root - frame().x() - frame().window().borderWidth(); |
2364 | m_button_grab_y = be.y_root - frame().y() - screen().rootTheme().borderWidth(); | 2338 | m_button_grab_y = be.y_root - frame().y() - frame().window().borderWidth(); |
2365 | } | 2339 | } |
2366 | 2340 | ||
2367 | if (m_windowmenu.isVisible()) | 2341 | if (m_windowmenu.isVisible()) |
@@ -2398,7 +2372,7 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2398 | if (Fluxbox::instance()->getIgnoreBorder() | 2372 | if (Fluxbox::instance()->getIgnoreBorder() |
2399 | && !(me.state & Mod1Mask) // really should check for exact matches | 2373 | && !(me.state & Mod1Mask) // really should check for exact matches |
2400 | && !(isMoving() || isResizing())) { | 2374 | && !(isMoving() || isResizing())) { |
2401 | int borderw = screen().rootTheme().borderWidth(); | 2375 | int borderw = frame().window().borderWidth(); |
2402 | if (me.x_root < (frame().x() + borderw) || | 2376 | if (me.x_root < (frame().x() + borderw) || |
2403 | me.y_root < (frame().y() + borderw) || | 2377 | me.y_root < (frame().y() + borderw) || |
2404 | me.x_root > (frame().x() + (int)frame().width() + borderw) || | 2378 | me.x_root > (frame().x() + (int)frame().width() + borderw) || |
@@ -2430,8 +2404,8 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2430 | int dx = me.x_root - m_button_grab_x, | 2404 | int dx = me.x_root - m_button_grab_x, |
2431 | dy = me.y_root - m_button_grab_y; | 2405 | dy = me.y_root - m_button_grab_y; |
2432 | 2406 | ||
2433 | dx -= screen().rootTheme().borderWidth(); | 2407 | dx -= frame().window().borderWidth(); |
2434 | dy -= screen().rootTheme().borderWidth(); | 2408 | dy -= frame().window().borderWidth(); |
2435 | 2409 | ||
2436 | // Warp to next or previous workspace?, must have moved sideways some | 2410 | // Warp to next or previous workspace?, must have moved sideways some |
2437 | int moved_x = me.x_root - m_last_resize_x; | 2411 | int moved_x = me.x_root - m_last_resize_x; |
@@ -2561,8 +2535,8 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { | |||
2561 | // so we update drag'n'drop-rectangle | 2535 | // so we update drag'n'drop-rectangle |
2562 | int dx = me.x_root - 1, dy = me.y_root - 1; | 2536 | int dx = me.x_root - 1, dy = me.y_root - 1; |
2563 | 2537 | ||
2564 | dx -= screen().rootTheme().borderWidth(); | 2538 | dx -= frame().window().borderWidth(); |
2565 | dy -= screen().rootTheme().borderWidth(); | 2539 | dy -= frame().window().borderWidth(); |
2566 | 2540 | ||
2567 | if (screen().getEdgeSnapThreshold()) { | 2541 | if (screen().getEdgeSnapThreshold()) { |
2568 | int drx = screen().width() - (dx + 1); | 2542 | int drx = screen().width() - (dx + 1); |
@@ -2699,6 +2673,21 @@ void FluxboxWindow::setDecoration(Decoration decoration) { | |||
2699 | 2673 | ||
2700 | // commit current decoration values to actual displayed things | 2674 | // commit current decoration values to actual displayed things |
2701 | void FluxboxWindow::applyDecorations() { | 2675 | void FluxboxWindow::applyDecorations() { |
2676 | frame().clientArea().setBorderWidth(0); // client area bordered by other things | ||
2677 | |||
2678 | unsigned int borderW = 0; | ||
2679 | if (decorations.border) | ||
2680 | borderW = screen().rootTheme().borderWidth(); | ||
2681 | |||
2682 | if (frame().window().borderWidth() != borderW) { | ||
2683 | frame().window().setBorderWidth(borderW); | ||
2684 | frame().titlebar().setBorderWidth(borderW); | ||
2685 | frame().handle().setBorderWidth(borderW); | ||
2686 | frame().gripLeft().setBorderWidth(borderW); | ||
2687 | frame().gripRight().setBorderWidth(borderW); | ||
2688 | frame().reconfigure(); | ||
2689 | } | ||
2690 | |||
2702 | // we rely on frame not doing anything if it is already shown/hidden | 2691 | // we rely on frame not doing anything if it is already shown/hidden |
2703 | if (decorations.titlebar) | 2692 | if (decorations.titlebar) |
2704 | frame().showTitlebar(); | 2693 | frame().showTitlebar(); |
@@ -2710,7 +2699,6 @@ void FluxboxWindow::applyDecorations() { | |||
2710 | else | 2699 | else |
2711 | frame().hideHandle(); | 2700 | frame().hideHandle(); |
2712 | 2701 | ||
2713 | // is reconfigure needed here? | ||
2714 | } | 2702 | } |
2715 | 2703 | ||
2716 | void FluxboxWindow::toggleDecoration() { | 2704 | void FluxboxWindow::toggleDecoration() { |