diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/FbWinFrame.cc | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index f5916af..1ebb068 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: FbWinFrame.cc,v 1.79 2004/09/12 14:56:18 rathnor Exp $ | 22 | // $Id: FbWinFrame.cc,v 1.80 2004/10/10 16:12:48 akir Exp $ |
23 | 23 | ||
24 | #include "FbWinFrame.hh" | 24 | #include "FbWinFrame.hh" |
25 | 25 | ||
@@ -32,6 +32,7 @@ | |||
32 | #include "FbTk/Transparent.hh" | 32 | #include "FbTk/Transparent.hh" |
33 | #include "CompareWindow.hh" | 33 | #include "CompareWindow.hh" |
34 | #include "FbWinFrameTheme.hh" | 34 | #include "FbWinFrameTheme.hh" |
35 | #include "fluxbox.hh" | ||
35 | 36 | ||
36 | #ifdef SHAPE | 37 | #ifdef SHAPE |
37 | #include "Shape.hh" | 38 | #include "Shape.hh" |
@@ -296,7 +297,8 @@ void FbWinFrame::addLabelButton(FbTk::TextButton &btn) { | |||
296 | 297 | ||
297 | if (found_it != m_labelbuttons.end()) | 298 | if (found_it != m_labelbuttons.end()) |
298 | return; | 299 | return; |
299 | 300 | ||
301 | btn.setTextPadding(Fluxbox::instance()->getTabsPadding()); | ||
300 | m_labelbuttons.push_back(&btn); | 302 | m_labelbuttons.push_back(&btn); |
301 | 303 | ||
302 | if (currentLabel() == 0) | 304 | if (currentLabel() == 0) |
@@ -754,28 +756,60 @@ void FbWinFrame::redrawTitle() { | |||
754 | if (m_labelbuttons.empty()) | 756 | if (m_labelbuttons.empty()) |
755 | return; | 757 | return; |
756 | 758 | ||
757 | int button_width = label().width()/m_labelbuttons.size(); | 759 | int focus_button_min_percent = Fluxbox::instance()->getFocusedTabMinWidth(); |
758 | int rounding_error = label().width() - m_labelbuttons.size()*button_width; | 760 | int button_count = m_labelbuttons.size(); |
761 | int label_width = label().width(); | ||
762 | |||
763 | /* force sane value */ | ||
764 | if (focus_button_min_percent > 90) | ||
765 | focus_button_min_percent = 90; | ||
766 | if (focus_button_min_percent < 1) | ||
767 | focus_button_min_percent = 1; | ||
768 | |||
769 | int focus_button_width, unfocus_button_width; | ||
770 | if (100 < (focus_button_min_percent * button_count)) { | ||
771 | focus_button_width = label_width * focus_button_min_percent / 100; | ||
772 | if (button_count > 1) { | ||
773 | unfocus_button_width = label_width * | ||
774 | (100 - focus_button_min_percent) / (100 * (button_count - 1)); | ||
775 | } else { | ||
776 | /* should never happen */ | ||
777 | unfocus_button_width = 0; | ||
778 | } | ||
779 | } else { | ||
780 | focus_button_width = label_width / button_count; | ||
781 | unfocus_button_width = focus_button_width; | ||
782 | } | ||
783 | |||
784 | int rounding_error = label_width - focus_button_width - | ||
785 | ((button_count - 1) * unfocus_button_width); | ||
786 | |||
759 | //!! TODO: bevel | 787 | //!! TODO: bevel |
760 | //int border_width = m_labelbuttons.front()->window().borderWidth(); | 788 | //int border_width = m_labelbuttons.front()->window().borderWidth(); |
761 | int border_width = m_labelbuttons.empty() ? 0 : m_labelbuttons.front()->borderWidth(); | 789 | int border_width = m_labelbuttons.empty() ? 0 : m_labelbuttons.front()->borderWidth(); |
762 | 790 | ||
763 | LabelList::iterator btn_it = m_labelbuttons.begin(); | 791 | LabelList::iterator btn_it = m_labelbuttons.begin(); |
764 | LabelList::iterator btn_it_end = m_labelbuttons.end(); | 792 | LabelList::iterator btn_it_end = m_labelbuttons.end(); |
765 | int extra = 0; | 793 | int extra = 0, dx = 0; |
766 | for (unsigned int last_x = 0; | 794 | for (unsigned int last_x = 0; |
767 | btn_it != btn_it_end; | 795 | btn_it != btn_it_end; |
768 | ++btn_it, last_x += button_width + border_width + extra) { | 796 | ++btn_it, last_x += dx) { |
769 | // since we add border width pixel we should remove | 797 | |
770 | // the same size for inside width so we can fit all buttons into label | ||
771 | if (rounding_error != 0) { | 798 | if (rounding_error != 0) { |
772 | extra = 1; | 799 | extra = 1; |
773 | --rounding_error; | 800 | --rounding_error; |
774 | } else | 801 | } else |
775 | extra = 0; | 802 | extra = 0; |
776 | 803 | ||
804 | if (currentLabel() == *btn_it) { | ||
805 | dx = focus_button_width; | ||
806 | } else { | ||
807 | dx = unfocus_button_width; | ||
808 | } | ||
809 | dx += border_width + extra; | ||
810 | |||
777 | (*btn_it)->moveResize(last_x - border_width, - border_width, | 811 | (*btn_it)->moveResize(last_x - border_width, - border_width, |
778 | button_width + extra, | 812 | dx - border_width, |
779 | label().height() + border_width); | 813 | label().height() + border_width); |
780 | 814 | ||
781 | 815 | ||