┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dolphintabbar.cpp42
-rw-r--r--src/dolphintabbar.h3
-rw-r--r--src/settings/dolphin_generalsettings.kcfg9
-rw-r--r--src/settings/interface/folderstabssettingspage.cpp18
-rw-r--r--src/settings/interface/folderstabssettingspage.h3
5 files changed, 74 insertions, 1 deletions
diff --git a/src/dolphintabbar.cpp b/src/dolphintabbar.cpp
index 4df25263f..b2a305a27 100644
--- a/src/dolphintabbar.cpp
+++ b/src/dolphintabbar.cpp
@@ -5,7 +5,7 @@
*/
#include "dolphintabbar.h"
-
+#include "dolphin_generalsettings.h"
#include <KLocalizedString>
#include <QDragEnterEvent>
@@ -53,6 +53,34 @@ DolphinTabBar::DolphinTabBar(QWidget *parent)
m_autoActivationTimer->setSingleShot(true);
m_autoActivationTimer->setInterval(800);
connect(m_autoActivationTimer, &QTimer::timeout, this, &DolphinTabBar::slotAutoActivationTimeout);
+ connect(GeneralSettings::self(), &GeneralSettings::tabBarChanged, this, &DolphinTabBar::slotTabBarChanged);
+
+ QTimer::singleShot(0, this, &DolphinTabBar::slotTabBarChanged);
+}
+
+QSize DolphinTabBar::tabSizeHint(int index) const
+{
+ if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize) {
+ QSize defaultSize = QTabBar::tabSizeHint(index);
+ defaultSize.setWidth(225);
+ return defaultSize;
+ } else if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FullWidth && count() > 0) {
+ QSize defaultSize = QTabBar::tabSizeHint(index);
+ defaultSize.setWidth(qMax(25, width() / count()));
+ return defaultSize;
+ }
+ return QTabBar::tabSizeHint(index);
+}
+
+QSize DolphinTabBar::minimumSizeHint() const
+{
+ QSize s = QTabBar::minimumSizeHint();
+
+ if (GeneralSettings::tabStyle() != GeneralSettings::EnumTabStyle::FixedSize) {
+ s.setWidth(0); // allow shrinking
+ }
+
+ return s;
}
void DolphinTabBar::dragEnterEvent(QDragEnterEvent *event)
@@ -190,6 +218,18 @@ void DolphinTabBar::contextMenuEvent(QContextMenuEvent *event)
QTabBar::contextMenuEvent(event);
}
+void DolphinTabBar::slotTabBarChanged()
+{
+ if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize) {
+ setExpanding(false);
+ setUsesScrollButtons(true);
+ } else if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FullWidth) {
+ setExpanding(true);
+ setUsesScrollButtons(false);
+ }
+ updateGeometry();
+}
+
void DolphinTabBar::slotAutoActivationTimeout()
{
if (m_autoActivationIndex >= 0) {
diff --git a/src/dolphintabbar.h b/src/dolphintabbar.h
index 1210b974e..54eeea774 100644
--- a/src/dolphintabbar.h
+++ b/src/dolphintabbar.h
@@ -24,6 +24,8 @@ Q_SIGNALS:
void tabRenamed(int index, const QString &label);
protected:
+ QSize tabSizeHint(int index) const override;
+ QSize minimumSizeHint() const override;
void dragEnterEvent(QDragEnterEvent *event) override;
void dragLeaveEvent(QDragLeaveEvent *event) override;
void dragMoveEvent(QDragMoveEvent *event) override;
@@ -39,6 +41,7 @@ protected:
private Q_SLOTS:
void slotAutoActivationTimeout();
+ void slotTabBarChanged();
private:
/**
diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg
index d515a573d..bb09cbaef 100644
--- a/src/settings/dolphin_generalsettings.kcfg
+++ b/src/settings/dolphin_generalsettings.kcfg
@@ -52,6 +52,15 @@
<default>true</default>
<emit signal="tabBarChanged" />
</entry>
+ <entry name="TabStyle" type="Enum">
+ <label>Tab style</label>
+ <choices>
+ <choice name="FullWidth" />
+ <choice name="FixedSize" />
+ </choices>
+ <default>0</default> <!--FullWidth -->
+ <emit signal="tabBarChanged" />
+ </entry>
<entry name="Version" type="Int">
<label>Internal config version of Dolphin, mainly Used to determine whether an updated version of Dolphin is running, so as to migrate config entries that were removed/renamed ...etc</label>
<default>0</default>
diff --git a/src/settings/interface/folderstabssettingspage.cpp b/src/settings/interface/folderstabssettingspage.cpp
index 5f7cbe76a..547241d0d 100644
--- a/src/settings/interface/folderstabssettingspage.cpp
+++ b/src/settings/interface/folderstabssettingspage.cpp
@@ -38,6 +38,8 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent)
, m_rememberOpenedTabsRadioButton(nullptr)
, m_alwaysShowTabBar(nullptr)
, m_showCloseButtonOnTabs(nullptr)
+ , m_tabStyleFullWidth(nullptr)
+ , m_tabStyleFixed(nullptr)
, m_openNewTabAfterLastTab(nullptr)
, m_openNewTabAfterCurrentTab(nullptr)
, m_splitView(nullptr)
@@ -124,6 +126,14 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent)
m_showCloseButtonOnTabs = new QCheckBox(i18nc("@option:check", "Show close button on tabs"));
topLayout->addRow(QString(), m_showCloseButtonOnTabs);
+ m_tabStyleFullWidth = new QRadioButton(i18nc("@option:radio width as in tab width", "Tabs span the available width"));
+ m_tabStyleFixed = new QRadioButton(i18nc("@option:radio size as in tab size", "Tabs have all the same fixed size"));
+ QButtonGroup *tabStyleGroup = new QButtonGroup(this);
+ tabStyleGroup->addButton(m_tabStyleFullWidth);
+ tabStyleGroup->addButton(m_tabStyleFixed);
+ topLayout->addRow(i18nc("@title:group", "Tab style: "), m_tabStyleFullWidth);
+ topLayout->addRow(QString(), m_tabStyleFixed);
+
m_openNewTabAfterCurrentTab = new QRadioButton(i18nc("option:radio", "After current tab"));
m_openNewTabAfterLastTab = new QRadioButton(i18nc("option:radio", "At end of tab bar"));
QButtonGroup *tabsBehaviorGroup = new QButtonGroup(this);
@@ -177,6 +187,9 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent)
connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed);
connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed);
+
+ connect(m_tabStyleFixed, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged);
+ connect(m_tabStyleFullWidth, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged);
}
FoldersTabsSettingsPage::~FoldersTabsSettingsPage() = default;
@@ -222,6 +235,8 @@ void FoldersTabsSettingsPage::applySettings()
settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked());
+ settings->setTabStyle(m_tabStyleFullWidth->isChecked() ? GeneralSettings::EnumTabStyle::FullWidth : GeneralSettings::EnumTabStyle::FixedSize);
+
settings->save();
}
@@ -305,6 +320,9 @@ void FoldersTabsSettingsPage::loadSettings()
m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab());
m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked());
+
+ m_tabStyleFixed->setChecked(GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize);
+ m_tabStyleFullWidth->setChecked(!m_tabStyleFixed->isChecked());
}
void FoldersTabsSettingsPage::showSetDefaultDirectoryError()
diff --git a/src/settings/interface/folderstabssettingspage.h b/src/settings/interface/folderstabssettingspage.h
index 894d69898..54cdceda6 100644
--- a/src/settings/interface/folderstabssettingspage.h
+++ b/src/settings/interface/folderstabssettingspage.h
@@ -59,6 +59,9 @@ private:
QCheckBox* m_alwaysShowTabBar;
QCheckBox* m_showCloseButtonOnTabs;
+ QRadioButton *m_tabStyleFullWidth;
+ QRadioButton *m_tabStyleFixed;
+
QRadioButton *m_openNewTabAfterLastTab;
QRadioButton *m_openNewTabAfterCurrentTab;