summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kicker/kicker/ui/k_new_mnu.cpp2
-rw-r--r--kicker/kicker/ui/kickoff_bar.cpp64
-rw-r--r--kicker/kicker/ui/kickoff_bar.h1
3 files changed, 53 insertions, 14 deletions
diff --git a/kicker/kicker/ui/k_new_mnu.cpp b/kicker/kicker/ui/k_new_mnu.cpp
index 52dd4e729..df777fda7 100644
--- a/kicker/kicker/ui/k_new_mnu.cpp
+++ b/kicker/kicker/ui/k_new_mnu.cpp
@@ -3327,7 +3327,7 @@ TQSize KMenu::sizeHint() const
TQSize KMenu::minimumSizeHint() const
{
TQSize minsize;
- minsize.setWidth( minsize.width() + m_tabBar->sizeHint().width() );
+ minsize.setWidth( minsize.width() + m_tabBar->minimumSizeHint().width() );
minsize.setWidth( QMAX( minsize.width(),
m_search->minimumSize().width() ) );
minsize.setWidth( QMAX( minsize.width(),
diff --git a/kicker/kicker/ui/kickoff_bar.cpp b/kicker/kicker/ui/kickoff_bar.cpp
index 0383c0144..994300c0d 100644
--- a/kicker/kicker/ui/kickoff_bar.cpp
+++ b/kicker/kicker/ui/kickoff_bar.cpp
@@ -128,39 +128,77 @@ TQSize KickoffTabBar::sizeHint() const
return s;
}
-void KickoffTabBar::layoutTabs()
+TQSize KickoffTabBar::minimumSizeHint() const
{
- TQTabBar::layoutTabs();
+ TQSize s;
TQFontMetrics fm = fontMetrics();
int fh = ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + 4;
int hframe = style().pixelMetric( TQStyle::PM_TabBarTabHSpace, this );
int vframe = style().pixelMetric( TQStyle::PM_TabBarTabVSpace, this );
- int overlap = style().pixelMetric( TQStyle::PM_TabBarTabOverlap, this );
- TQSize s;
- for (int t = 0; t < count(); ++t)
- {
+ for (int t = 0; t < count(); ++t) {
TQTab* tab = tabAt(t);
- if (tab->iconSet())
+ if (tab->iconSet()) {
s = s.expandedTo(tab->iconSet()->pixmap(TQIconSet::Large, TQIconSet::Normal).size());
+ }
}
- int x = 0;
+ // Every tab must have identical height and width.
+ // We check every tab minimum height and width and we keep the
+ // biggest one as reference. Smaller tabs will be expanded to match
+ // the same size.
+ int mw = 0;
+ int mh = 0;
for (int t = 0; t < count(); ++t) {
TQTab* tab = tabAt(TQApplication::reverseLayout() ? count() - t - 1 : t);
+
+ // Checks tab minimum height
int h = fh;
- if (tab->iconSet())
+ if (tab->iconSet()) {
h += 4 + s.height() + 4;
- TQRect r = tab->rect();
+ }
+ h += ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe;
+ // Checks tab minimum width (font)
int fw = fm.size( TQt::SingleLine|TQt::ShowPrefix, tab->text() ).width();
+
+ // Checks tab minimum width (icon)
int iw = 0;
- if ( tab->iconSet() != 0 )
+ if ( tab->iconSet()) {
iw = tab->iconSet()->pixmap( TQIconSet::Large, TQIconSet::Normal ).width();
- int w = QMAX(iw, fw + 6 + 6 ) + hframe;
- h += ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe;
+ }
+
+ // Final width for this tab
+ int w = QMAX(iw, fw) + hframe;
+
+ mw = QMAX(mw, w);
+ mh = QMAX(mh, h);
+ }
+
+ s.setWidth(mw * count());
+ s.setHeight(mh);
+ return (s);
+}
+
+void KickoffTabBar::layoutTabs()
+{
+ TQSize s;
+ TQSize st = minimumSizeHint();
+
+ TQTabBar::layoutTabs();
+ int overlap = style().pixelMetric( TQStyle::PM_TabBarTabOverlap, this );
+
+ int x = 0;
+ int h = st.height();
+
+ for (int t = 0; t < count(); ++t) {
+ TQTab* tab = tabAt(TQApplication::reverseLayout() ? count() - t - 1 : t);
+
+ int w = QMAX(st.width() / count(), parentWidget()->width() / count());
+
+ TQRect r = tab->rect();
tab->setRect(TQRect(TQPoint(x, 0), style().tqsizeFromContents(TQStyle::CT_TabBarTab, this,
TQSize(w, h), TQStyleOption(tab))));
x += tab->rect().width() - overlap;
diff --git a/kicker/kicker/ui/kickoff_bar.h b/kicker/kicker/ui/kickoff_bar.h
index 2330ffe39..941f1144f 100644
--- a/kicker/kicker/ui/kickoff_bar.h
+++ b/kicker/kicker/ui/kickoff_bar.h
@@ -33,6 +33,7 @@ public:
void deactivateTabs(bool b);
virtual TQSize sizeHint() const;
+ virtual TQSize minimumSizeHint() const;
protected:
virtual void paint(TQPainter*, TQTab*, bool) const;