diff options
Diffstat (limited to 'src/Window.cc')
-rw-r--r-- | src/Window.cc | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/Window.cc b/src/Window.cc index cd97f16..1781dbf 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.225 2003/09/11 21:30:20 rathnor Exp $ | 25 | // $Id: Window.cc,v 1.226 2003/09/12 22:48:49 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Window.hh" | 27 | #include "Window.hh" |
28 | 28 | ||
@@ -362,7 +362,7 @@ void FluxboxWindow::init() { | |||
362 | frame().gripLeft().setCursor(frame().theme().lowerLeftAngleCursor()); | 362 | frame().gripLeft().setCursor(frame().theme().lowerLeftAngleCursor()); |
363 | frame().gripRight().setCursor(frame().theme().lowerRightAngleCursor()); | 363 | frame().gripRight().setCursor(frame().theme().lowerRightAngleCursor()); |
364 | 364 | ||
365 | frame().resize(m_client->width(), m_client->height()); | 365 | |
366 | FbTk::TextButton *btn = new FbTk::TextButton(frame().label(), | 366 | FbTk::TextButton *btn = new FbTk::TextButton(frame().label(), |
367 | frame().theme().font(), | 367 | frame().theme().font(), |
368 | m_client->title()); | 368 | m_client->title()); |
@@ -385,6 +385,8 @@ void FluxboxWindow::init() { | |||
385 | 385 | ||
386 | frame().setEventHandler(*this); | 386 | frame().setEventHandler(*this); |
387 | 387 | ||
388 | frame().resize(m_client->width(), m_client->height()); | ||
389 | |||
388 | m_last_focus_time.tv_sec = m_last_focus_time.tv_usec = 0; | 390 | m_last_focus_time.tv_sec = m_last_focus_time.tv_usec = 0; |
389 | 391 | ||
390 | // display connection | 392 | // display connection |
@@ -510,6 +512,7 @@ void FluxboxWindow::init() { | |||
510 | if (!place_window) | 512 | if (!place_window) |
511 | moveResize(frame().x(), frame().y(), frame().width(), frame().height()); | 513 | moveResize(frame().x(), frame().y(), frame().width(), frame().height()); |
512 | 514 | ||
515 | |||
513 | screen().getWorkspace(m_workspace_number)->addWindow(*this, place_window); | 516 | screen().getWorkspace(m_workspace_number)->addWindow(*this, place_window); |
514 | 517 | ||
515 | if (shaded) { // start shaded | 518 | if (shaded) { // start shaded |
@@ -549,6 +552,8 @@ void FluxboxWindow::init() { | |||
549 | 552 | ||
550 | if (m_shaped) | 553 | if (m_shaped) |
551 | shape(); | 554 | shape(); |
555 | |||
556 | |||
552 | } | 557 | } |
553 | 558 | ||
554 | /// apply shape to this window | 559 | /// apply shape to this window |
@@ -777,6 +782,8 @@ bool FluxboxWindow::removeClient(WinClient &client) { | |||
777 | 782 | ||
778 | m_labelbuttons.erase(&client); | 783 | m_labelbuttons.erase(&client); |
779 | 784 | ||
785 | frame().reconfigure(); | ||
786 | |||
780 | #ifdef DEBUG | 787 | #ifdef DEBUG |
781 | cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"] numClients = "<<numClients()<<endl; | 788 | cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"] numClients = "<<numClients()<<endl; |
782 | #endif // DEBUG | 789 | #endif // DEBUG |
@@ -811,7 +818,7 @@ void FluxboxWindow::nextClient() { | |||
811 | m_client = *it; | 818 | m_client = *it; |
812 | m_client->raise(); | 819 | m_client->raise(); |
813 | frame().setLabelButtonFocus(*m_labelbuttons[m_client]); | 820 | frame().setLabelButtonFocus(*m_labelbuttons[m_client]); |
814 | setInputFocus(); | 821 | frame().setFocus(setInputFocus()); |
815 | } | 822 | } |
816 | 823 | ||
817 | void FluxboxWindow::prevClient() { | 824 | void FluxboxWindow::prevClient() { |
@@ -830,7 +837,7 @@ void FluxboxWindow::prevClient() { | |||
830 | 837 | ||
831 | m_client->raise(); | 838 | m_client->raise(); |
832 | frame().setLabelButtonFocus(*m_labelbuttons[m_client]); | 839 | frame().setLabelButtonFocus(*m_labelbuttons[m_client]); |
833 | setInputFocus(); | 840 | frame().setFocus(setInputFocus()); |
834 | } | 841 | } |
835 | 842 | ||
836 | 843 | ||
@@ -908,8 +915,6 @@ void FluxboxWindow::associateClientWindow() { | |||
908 | 915 | ||
909 | frame().setClientWindow(*m_client); | 916 | frame().setClientWindow(*m_client); |
910 | frame().resizeForClient(m_client->width(), m_client->height()); | 917 | frame().resizeForClient(m_client->width(), m_client->height()); |
911 | // make sure the frame reconfigures | ||
912 | frame().reconfigure(); | ||
913 | } | 918 | } |
914 | 919 | ||
915 | 920 | ||
@@ -955,6 +960,8 @@ void FluxboxWindow::reconfigure() { | |||
955 | frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval()); | 960 | frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval()); |
956 | frame().setUpdateDelayTime(Fluxbox::instance()->getUpdateDelayTime()); | 961 | frame().setUpdateDelayTime(Fluxbox::instance()->getUpdateDelayTime()); |
957 | 962 | ||
963 | frame().reconfigure(); | ||
964 | |||
958 | m_windowmenu.reconfigure(); | 965 | m_windowmenu.reconfigure(); |
959 | 966 | ||
960 | } | 967 | } |
@@ -1100,9 +1107,10 @@ void FluxboxWindow::moveResize(int new_x, int new_y, | |||
1100 | new_width = width(); | 1107 | new_width = width(); |
1101 | new_height = height(); | 1108 | new_height = height(); |
1102 | } | 1109 | } |
1103 | frame().moveResize(new_x, new_y, new_width, new_height); | ||
1104 | 1110 | ||
1105 | setFocusFlag(focused); | 1111 | setFocusFlag(focused); |
1112 | frame().moveResize(new_x, new_y, new_width, new_height); | ||
1113 | |||
1106 | shaded = false; | 1114 | shaded = false; |
1107 | send_event = true; | 1115 | send_event = true; |
1108 | } else { | 1116 | } else { |
@@ -1258,13 +1266,8 @@ void FluxboxWindow::deiconify(bool reassoc, bool do_raise) { | |||
1258 | 1266 | ||
1259 | frame().show(); | 1267 | frame().show(); |
1260 | 1268 | ||
1261 | if (was_iconic && screen().doFocusNew()) { | 1269 | if (was_iconic && screen().doFocusNew()) |
1262 | setInputFocus(); | 1270 | setInputFocus(); |
1263 | } | ||
1264 | |||
1265 | if (focused != frame().focused()) | ||
1266 | frame().setFocus(focused); | ||
1267 | |||
1268 | 1271 | ||
1269 | if (reassoc && !m_client->transients.empty()) { | 1272 | if (reassoc && !m_client->transients.empty()) { |
1270 | // deiconify all transients | 1273 | // deiconify all transients |
@@ -1281,7 +1284,9 @@ void FluxboxWindow::deiconify(bool reassoc, bool do_raise) { | |||
1281 | } | 1284 | } |
1282 | } | 1285 | } |
1283 | } | 1286 | } |
1287 | |||
1284 | oplock = false; | 1288 | oplock = false; |
1289 | |||
1285 | if (do_raise) | 1290 | if (do_raise) |
1286 | raise(); | 1291 | raise(); |
1287 | } | 1292 | } |
@@ -1646,7 +1651,10 @@ void FluxboxWindow::setFocusFlag(bool focus) { | |||
1646 | } | 1651 | } |
1647 | 1652 | ||
1648 | installColormap(focus); | 1653 | installColormap(focus); |
1649 | frame().setFocus(focus); | 1654 | |
1655 | if (focus != frame().focused()) { | ||
1656 | frame().setFocus(focus); | ||
1657 | } | ||
1650 | 1658 | ||
1651 | if ((screen().isSloppyFocus() || screen().isSemiSloppyFocus()) | 1659 | if ((screen().isSloppyFocus() || screen().isSemiSloppyFocus()) |
1652 | && screen().doAutoRaise()) { | 1660 | && screen().doAutoRaise()) { |
@@ -1712,8 +1720,7 @@ void FluxboxWindow::saveBlackboxAttribs() { | |||
1712 | PropModeReplace, | 1720 | PropModeReplace, |
1713 | (unsigned char *)&m_blackbox_attrib, | 1721 | (unsigned char *)&m_blackbox_attrib, |
1714 | PropBlackboxAttributesElements | 1722 | PropBlackboxAttributesElements |
1715 | ) | 1723 | )); |
1716 | ); | ||
1717 | } | 1724 | } |
1718 | 1725 | ||
1719 | /** | 1726 | /** |
@@ -2013,11 +2020,10 @@ void FluxboxWindow::mapNotifyEvent(XMapEvent &ne) { | |||
2013 | 2020 | ||
2014 | setState(NormalState); | 2021 | setState(NormalState); |
2015 | 2022 | ||
2016 | if (client->isTransient() || screen().doFocusNew()) { | 2023 | if (client->isTransient() || screen().doFocusNew()) |
2017 | setCurrentClient(*client, true); | 2024 | setCurrentClient(*client, true); |
2018 | } | ||
2019 | else | 2025 | else |
2020 | setFocusFlag(false); | 2026 | setFocusFlag(false); |
2021 | 2027 | ||
2022 | iconic = false; | 2028 | iconic = false; |
2023 | 2029 | ||
@@ -2169,7 +2175,6 @@ void FluxboxWindow::exposeEvent(XExposeEvent &ee) { | |||
2169 | frame().exposeEvent(ee); | 2175 | frame().exposeEvent(ee); |
2170 | } | 2176 | } |
2171 | 2177 | ||
2172 | |||
2173 | void FluxboxWindow::configureRequestEvent(XConfigureRequestEvent &cr) { | 2178 | void FluxboxWindow::configureRequestEvent(XConfigureRequestEvent &cr) { |
2174 | WinClient *client = findClient(cr.window); | 2179 | WinClient *client = findClient(cr.window); |
2175 | if (client == 0) | 2180 | if (client == 0) |
@@ -2609,10 +2614,10 @@ void FluxboxWindow::applyDecorations(bool initial) { | |||
2609 | 2614 | ||
2610 | if (decorations.handle) { | 2615 | if (decorations.handle) { |
2611 | frame().showHandle(); | 2616 | frame().showHandle(); |
2612 | frame().reconfigure(); // show handle requires reconfigure | ||
2613 | } else | 2617 | } else |
2614 | frame().hideHandle(); | 2618 | frame().hideHandle(); |
2615 | 2619 | ||
2620 | frame().reconfigure(); | ||
2616 | } | 2621 | } |
2617 | 2622 | ||
2618 | void FluxboxWindow::toggleDecoration() { | 2623 | void FluxboxWindow::toggleDecoration() { |