diff options
Diffstat (limited to 'src/Window.cc')
-rw-r--r-- | src/Window.cc | 73 |
1 files changed, 8 insertions, 65 deletions
diff --git a/src/Window.cc b/src/Window.cc index 8ad1762..29acd3b 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -303,6 +303,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbTk::XLayer &layer): | |||
303 | m_resize_corner(RIGHTBOTTOM) { | 303 | m_resize_corner(RIGHTBOTTOM) { |
304 | 304 | ||
305 | m_theme.reconfigSig().attach(this); | 305 | m_theme.reconfigSig().attach(this); |
306 | m_frame.frameExtentSig().attach(this); | ||
306 | 307 | ||
307 | init(); | 308 | init(); |
308 | 309 | ||
@@ -501,7 +502,7 @@ void FluxboxWindow::init() { | |||
501 | setOnHead(screen().getCurrHead()); | 502 | setOnHead(screen().getCurrHead()); |
502 | 503 | ||
503 | // we must do this now, or else resizing may not work properly | 504 | // we must do this now, or else resizing may not work properly |
504 | applyDecorations(true); | 505 | applyDecorations(); |
505 | 506 | ||
506 | Fluxbox::instance()->attachSignals(*this); | 507 | Fluxbox::instance()->attachSignals(*this); |
507 | 508 | ||
@@ -601,7 +602,7 @@ void FluxboxWindow::init() { | |||
601 | gettimeofday(&now, NULL); | 602 | gettimeofday(&now, NULL); |
602 | m_creation_time = now.tv_sec; | 603 | m_creation_time = now.tv_sec; |
603 | 604 | ||
604 | sendConfigureNotify(); | 605 | frame().frameExtentSig().notify(); |
605 | 606 | ||
606 | setupWindow(); | 607 | setupWindow(); |
607 | 608 | ||
@@ -3015,74 +3016,16 @@ void FluxboxWindow::update(FbTk::Subject *subj) { | |||
3015 | } else if (subj == &m_theme.reconfigSig()) { | 3016 | } else if (subj == &m_theme.reconfigSig()) { |
3016 | frame().reconfigure(); | 3017 | frame().reconfigure(); |
3017 | reconfigTheme(); | 3018 | reconfigTheme(); |
3019 | } else if (m_initialized && subj == &m_frame.frameExtentSig()) { | ||
3020 | Fluxbox::instance()->updateFrameExtents(*this); | ||
3021 | sendConfigureNotify(); | ||
3018 | } | 3022 | } |
3019 | } | 3023 | } |
3020 | 3024 | ||
3021 | // commit current decoration values to actual displayed things | 3025 | // commit current decoration values to actual displayed things |
3022 | void FluxboxWindow::applyDecorations(bool initial) { | 3026 | void FluxboxWindow::applyDecorations() { |
3023 | frame().clientArea().setBorderWidth(0); // client area bordered by other things | ||
3024 | |||
3025 | unsigned int border_width = 0; | ||
3026 | if (decorations.border) | ||
3027 | border_width = frame().theme()->border().width(); | ||
3028 | |||
3029 | bool client_move = false; | ||
3030 | |||
3031 | // borderWidth setting handles its own gravity | ||
3032 | if (initial || frame().window().borderWidth() != border_width) { | ||
3033 | client_move = true; | ||
3034 | frame().setBorderWidth(border_width); | ||
3035 | } | ||
3036 | |||
3037 | int grav_x=0, grav_y=0; | ||
3038 | // negate gravity | ||
3039 | frame().gravityTranslate(grav_x, grav_y, -m_client->gravity(), m_client->old_bw, false); | ||
3040 | |||
3041 | // tab deocration only affects if we're external | ||
3042 | // must do before the setTabMode in case it goes | ||
3043 | // to external and is meant to be hidden | ||
3044 | if (decorations.tab) | ||
3045 | client_move |= frame().showTabs(); | ||
3046 | else | ||
3047 | client_move |= frame().hideTabs(); | ||
3048 | |||
3049 | // we rely on frame not doing anything if it is already shown/hidden | ||
3050 | if (decorations.titlebar) { | ||
3051 | bool change = frame().showTitlebar(); | ||
3052 | client_move |= change; | ||
3053 | if (screen().getDefaultInternalTabs()) { | ||
3054 | client_move |= frame().setTabMode(FbWinFrame::INTERNAL); | ||
3055 | } else { | ||
3056 | client_move |= frame().setTabMode(FbWinFrame::EXTERNAL); | ||
3057 | } | ||
3058 | } else { | ||
3059 | client_move |= frame().hideTitlebar(); | ||
3060 | if (decorations.tab) | ||
3061 | client_move |= frame().setTabMode(FbWinFrame::EXTERNAL); | ||
3062 | } | ||
3063 | |||
3064 | if (decorations.handle) { | ||
3065 | client_move |= frame().showHandle(); | ||
3066 | } else | ||
3067 | client_move |= frame().hideHandle(); | ||
3068 | |||
3069 | // apply gravity once more | ||
3070 | frame().gravityTranslate(grav_x, grav_y, m_client->gravity(), m_client->old_bw, false); | ||
3071 | |||
3072 | // if the location changes, shift it | ||
3073 | if (grav_x != 0 || grav_y != 0) { | ||
3074 | move(grav_x + frame().x(), grav_y + frame().y()); | ||
3075 | client_move = true; | ||
3076 | } | ||
3077 | |||
3078 | frame().setDecorationMask(decorationMask()); | 3027 | frame().setDecorationMask(decorationMask()); |
3079 | frame().reconfigure(); | 3028 | frame().applyDecorations(); |
3080 | if (client_move) | ||
3081 | Fluxbox::instance()->updateFrameExtents(*this); | ||
3082 | |||
3083 | if (!initial && client_move) | ||
3084 | sendConfigureNotify(); | ||
3085 | |||
3086 | } | 3029 | } |
3087 | 3030 | ||
3088 | void FluxboxWindow::toggleDecoration() { | 3031 | void FluxboxWindow::toggleDecoration() { |