UI/Qt: Integrate window controls into vertical tab toolbar
Move custom window controls into the navigation toolbar while vertical tabs are enabled. Remove the separate top row that only held them. Mark empty toolbar space as draggable so the unified row acts like the titlebar. Keep horizontal tab mode on the existing tab strip controls.
This commit is contained in:
parent
a0a3bfbee7
commit
a7e68ef1ae
6 changed files with 193 additions and 27 deletions
|
|
@ -54,6 +54,7 @@ namespace Ladybird {
|
|||
|
||||
static constexpr auto AUDIO_STATE_BUTTON_POSITION = QTabBar::LeftSide;
|
||||
static constexpr auto TAB_CLOSE_BUTTON_POSITION = QTabBar::RightSide;
|
||||
static constexpr auto WINDOW_DRAG_REGION_PROPERTY = "LadybirdWindowDragRegion";
|
||||
|
||||
static bool should_use_screen_signal_for_dpi_changes()
|
||||
{
|
||||
|
|
@ -1135,6 +1136,18 @@ bool BrowserWindow::eventFilter(QObject* object, QEvent* event)
|
|||
return true;
|
||||
}
|
||||
|
||||
auto is_empty_window_drag_region = widget->property(WINDOW_DRAG_REGION_PROPERTY).toBool()
|
||||
&& widget->childAt(mouse_event->position().toPoint()) == nullptr;
|
||||
if (is_empty_window_drag_region && !isFullScreen()) {
|
||||
if (event->type() == QEvent::MouseButtonDblClick) {
|
||||
toggle_window_maximized();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (start_window_move())
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isFullScreen() || widget != menuBar() || menuBar()->actionAt(mouse_event->position().toPoint()) != nullptr)
|
||||
return QMainWindow::eventFilter(object, event);
|
||||
|
||||
|
|
@ -1230,6 +1243,7 @@ void BrowserWindow::changeEvent(QEvent* event)
|
|||
update_tab_close_button_icons();
|
||||
} else if (event->type() == QEvent::WindowStateChange) {
|
||||
update_menu_bar_window_control_icons();
|
||||
m_tabs_container->update_window_button_icons();
|
||||
|
||||
QWindowStateChangeEvent* stateChangeEvent = static_cast<QWindowStateChangeEvent*>(event);
|
||||
bool was_fullscreen = stateChangeEvent->oldState() & Qt::WindowFullScreen;
|
||||
|
|
|
|||
|
|
@ -319,8 +319,11 @@ QString toolbar_container_style_sheet(QPalette const& palette)
|
|||
auto separator = dark
|
||||
? background_bottom
|
||||
: style_sheet_color(mix(chrome_background(palette), chrome_border(palette), 0.56));
|
||||
auto window_controls_separator = style_sheet_color(mix(chrome_active_tab_surface_bottom(palette), chrome_border(palette), dark ? 0.36 : 0.46));
|
||||
auto text = style_sheet_color(chrome_button_text(palette));
|
||||
auto disabled_text = style_sheet_color(chrome_muted_text(palette));
|
||||
auto close_hover = style_sheet_color(chrome_destructive_hover());
|
||||
auto close_text = style_sheet_color(chrome_destructive_text());
|
||||
|
||||
return qformatted(R"(
|
||||
QWidget#LadybirdToolbarContainer {{
|
||||
|
|
@ -360,8 +363,50 @@ QWidget#LadybirdNavigationToolbar QToolButton:disabled {{
|
|||
QWidget#LadybirdNavigationToolbar QToolButton::menu-indicator {{
|
||||
image: none;
|
||||
}}
|
||||
|
||||
QWidget#LadybirdToolbarWindowControlsSeparator {{
|
||||
background: {10};
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton,
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton {{
|
||||
color: {6};
|
||||
background: transparent;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
min-width: 38px;
|
||||
min-height: 38px;
|
||||
max-width: 38px;
|
||||
max-height: 38px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton:hover {{
|
||||
background: {2};
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton:pressed {{
|
||||
background: {3};
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton:hover {{
|
||||
color: {9};
|
||||
background: {8};
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton:pressed {{
|
||||
color: {9};
|
||||
background: {8};
|
||||
}}
|
||||
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton[pressedOutside="true"],
|
||||
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton[pressedOutside="true"] {{
|
||||
color: {6};
|
||||
background: transparent;
|
||||
}}
|
||||
)",
|
||||
background, background_bottom, surface_hover, surface_pressed, control_border, separator, text, disabled_text);
|
||||
background, background_bottom, surface_hover, surface_pressed, control_border, separator, text, disabled_text, close_hover, close_text, window_controls_separator);
|
||||
}
|
||||
|
||||
QString menu_bar_style_sheet(QPalette const& palette)
|
||||
|
|
@ -728,6 +773,7 @@ QWidget#LadybirdVerticalTabBar {{
|
|||
}}
|
||||
|
||||
QToolButton#LadybirdNewTabButton,
|
||||
QToolButton#LadybirdVerticalTabsToggleButton,
|
||||
QPushButton#LadybirdTabButton {{
|
||||
color: {5};
|
||||
background: transparent;
|
||||
|
|
@ -736,13 +782,15 @@ QPushButton#LadybirdTabButton {{
|
|||
padding: 0;
|
||||
}}
|
||||
|
||||
QToolButton#LadybirdNewTabButton {{
|
||||
QToolButton#LadybirdNewTabButton,
|
||||
QToolButton#LadybirdVerticalTabsToggleButton {{
|
||||
min-width: 30px;
|
||||
min-height: 30px;
|
||||
border-radius: 16px;
|
||||
}}
|
||||
|
||||
QToolButton#LadybirdNewTabButton[verticalTabsExpanded="true"] {{
|
||||
QToolButton#LadybirdNewTabButton[verticalTabsExpanded="true"],
|
||||
QToolButton#LadybirdVerticalTabsToggleButton[verticalTabsExpanded="true"] {{
|
||||
padding-left: 14px;
|
||||
text-align: left;
|
||||
}}
|
||||
|
|
@ -755,12 +803,14 @@ QPushButton#LadybirdTabButton {{
|
|||
}}
|
||||
|
||||
QToolButton#LadybirdNewTabButton:hover,
|
||||
QToolButton#LadybirdVerticalTabsToggleButton:hover,
|
||||
QPushButton#LadybirdTabButton:hover {{
|
||||
background: {2};
|
||||
border-color: {4};
|
||||
}}
|
||||
|
||||
QToolButton#LadybirdNewTabButton:pressed,
|
||||
QToolButton#LadybirdVerticalTabsToggleButton:pressed,
|
||||
QPushButton#LadybirdTabButton:pressed,
|
||||
QPushButton#LadybirdTabButton:checked {{
|
||||
background: {3};
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <UI/Qt/Menu.h>
|
||||
#include <UI/Qt/Settings.h>
|
||||
#include <UI/Qt/StringUtils.h>
|
||||
#include <UI/Qt/WindowControlButton.h>
|
||||
|
||||
#include <QColorDialog>
|
||||
#include <QFileDialog>
|
||||
|
|
@ -35,6 +36,8 @@
|
|||
|
||||
namespace Ladybird {
|
||||
|
||||
static constexpr auto WINDOW_DRAG_REGION_PROPERTY = "LadybirdWindowDragRegion";
|
||||
|
||||
class HamburgerButton final : public QToolButton {
|
||||
public:
|
||||
using QToolButton::QToolButton;
|
||||
|
|
@ -161,11 +164,41 @@ Tab::Tab(BrowserWindow* window, RefPtr<WebView::WebContentClient> parent_client,
|
|||
m_hamburger_button->setMenu(&m_window->hamburger_menu());
|
||||
connect_hamburger_menu();
|
||||
|
||||
m_toggle_vertical_tabs_expanded_action = create_application_action(*this, application.toggle_vertical_tabs_expanded_action());
|
||||
m_navigate_back_action = create_application_action(*this, view().navigate_back_action());
|
||||
m_navigate_forward_action = create_application_action(*this, view().navigate_forward_action());
|
||||
m_reload_action = create_application_action(*this, application.reload_action());
|
||||
|
||||
m_toolbar_window_controls_separator = new QWidget(m_toolbar);
|
||||
m_toolbar_window_controls_separator->setObjectName("LadybirdToolbarWindowControlsSeparator");
|
||||
m_toolbar_window_controls_separator->setFixedSize(1, 22);
|
||||
|
||||
m_toolbar_window_controls = new QWidget(m_toolbar);
|
||||
m_toolbar_window_controls->setObjectName("LadybirdToolbarWindowControls");
|
||||
auto* window_controls_layout = new QHBoxLayout(m_toolbar_window_controls);
|
||||
window_controls_layout->setSpacing(0);
|
||||
window_controls_layout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
m_minimize_window_button = new WindowControlButton("LadybirdWindowButton", "Minimize", { 16, 16 }, { 38, 38 }, m_toolbar_window_controls);
|
||||
m_maximize_window_button = new WindowControlButton("LadybirdWindowButton", "Maximize", { 16, 16 }, { 38, 38 }, m_toolbar_window_controls);
|
||||
m_close_window_button = new WindowControlButton("LadybirdCloseWindowButton", "Close", { 16, 16 }, { 38, 38 }, m_toolbar_window_controls);
|
||||
|
||||
window_controls_layout->addWidget(m_minimize_window_button);
|
||||
window_controls_layout->addWidget(m_maximize_window_button);
|
||||
window_controls_layout->addWidget(m_close_window_button);
|
||||
|
||||
QObject::connect(m_minimize_window_button, &QToolButton::clicked, this, [this] {
|
||||
m_window->showMinimized();
|
||||
});
|
||||
QObject::connect(m_maximize_window_button, &QToolButton::clicked, this, [this] {
|
||||
if (m_window->isMaximized())
|
||||
m_window->showNormal();
|
||||
else
|
||||
m_window->showMaximized();
|
||||
});
|
||||
QObject::connect(m_close_window_button, &QToolButton::clicked, this, [this] {
|
||||
m_window->close();
|
||||
});
|
||||
|
||||
recreate_toolbar_icons();
|
||||
|
||||
m_page_context_menu = create_context_menu(*this, view(), view().page_context_menu());
|
||||
|
|
@ -181,14 +214,17 @@ Tab::Tab(BrowserWindow* window, RefPtr<WebView::WebContentClient> parent_client,
|
|||
navigation_button_layout->addWidget(create_toolbar_button(*navigation_button_cluster, *m_navigate_forward_action));
|
||||
navigation_button_layout->addWidget(create_toolbar_button(*navigation_button_cluster, *m_reload_action));
|
||||
|
||||
toolbar_layout->addWidget(create_toolbar_button(*m_toolbar, *m_toggle_vertical_tabs_expanded_action), 0, Qt::AlignTop);
|
||||
toolbar_layout->addWidget(navigation_button_cluster, 0, Qt::AlignTop);
|
||||
m_location_edit->set_trailing_action(create_application_action(*m_location_edit, view().toggle_bookmark_action()));
|
||||
m_location_edit->set_zoom_action(create_application_action(*m_location_edit, view().reset_zoom_action(), IncludeActionIcon::No));
|
||||
toolbar_layout->addWidget(m_location_edit, 1);
|
||||
toolbar_layout->addWidget(m_hamburger_button, 0, Qt::AlignTop);
|
||||
toolbar_layout->addWidget(m_toolbar_window_controls_separator, 0, Qt::AlignVCenter);
|
||||
toolbar_layout->addWidget(m_toolbar_window_controls, 0, Qt::AlignVCenter);
|
||||
|
||||
update_chrome_style();
|
||||
set_toolbar_window_controls_visible(!Settings::the()->show_menubar() && WebView::Application::settings().tab_settings().vertical_tabs_enabled);
|
||||
set_toolbar_window_drag_enabled(WebView::Application::settings().tab_settings().vertical_tabs_enabled);
|
||||
|
||||
m_hamburger_button->setVisible(!Settings::the()->show_menubar());
|
||||
|
||||
|
|
@ -535,6 +571,26 @@ void Tab::set_window(BrowserWindow& window)
|
|||
recreate_toolbar_icons();
|
||||
}
|
||||
|
||||
void Tab::set_toolbar_window_controls_visible(bool visible)
|
||||
{
|
||||
m_toolbar_window_controls_separator->setVisible(visible);
|
||||
m_toolbar_window_controls->setVisible(visible);
|
||||
}
|
||||
|
||||
void Tab::set_toolbar_window_drag_enabled(bool enabled)
|
||||
{
|
||||
m_toolbar->setProperty(WINDOW_DRAG_REGION_PROPERTY, enabled);
|
||||
}
|
||||
|
||||
void Tab::update_window_control_icons()
|
||||
{
|
||||
auto is_maximized = m_window->isMaximized();
|
||||
m_minimize_window_button->setIcon(create_chrome_icon(ChromeIcon::WindowMinimize, palette()));
|
||||
m_maximize_window_button->setIcon(create_chrome_icon(is_maximized ? ChromeIcon::WindowRestore : ChromeIcon::WindowMaximize, palette()));
|
||||
m_maximize_window_button->setToolTip(is_maximized ? "Restore" : "Maximize");
|
||||
m_close_window_button->setIcon(create_chrome_icon(ChromeIcon::WindowClose, palette()));
|
||||
}
|
||||
|
||||
void Tab::connect_hamburger_menu()
|
||||
{
|
||||
QObject::connect(&m_window->hamburger_menu(), &QMenu::aboutToShow, m_hamburger_button, [this]() {
|
||||
|
|
@ -685,15 +741,11 @@ void Tab::update_chrome_style()
|
|||
|
||||
void Tab::recreate_toolbar_icons()
|
||||
{
|
||||
m_toggle_vertical_tabs_expanded_action->setIcon(create_chrome_icon(
|
||||
WebView::Application::the().toggle_vertical_tabs_expanded_action().engaged()
|
||||
? ChromeIcon::VerticalTabBarCollapse
|
||||
: ChromeIcon::VerticalTabBarExpand,
|
||||
palette()));
|
||||
m_navigate_back_action->setIcon(create_chrome_icon(ChromeIcon::Back, palette()));
|
||||
m_navigate_forward_action->setIcon(create_chrome_icon(ChromeIcon::Forward, palette()));
|
||||
m_reload_action->setIcon(create_chrome_icon(ChromeIcon::Reload, palette()));
|
||||
m_hamburger_button->setIcon(create_chrome_icon(ChromeIcon::Menu, palette()));
|
||||
update_window_control_icons();
|
||||
if (auto* action = m_location_edit->trailing_action()) {
|
||||
auto icon = view().toggle_bookmark_action().engaged() ? ChromeIcon::StarFilled : ChromeIcon::Star;
|
||||
action->setIcon(create_chrome_icon(icon, palette()));
|
||||
|
|
|
|||
10
UI/Qt/Tab.h
10
UI/Qt/Tab.h
|
|
@ -26,6 +26,7 @@ class QTimer;
|
|||
namespace Ladybird {
|
||||
|
||||
class BrowserWindow;
|
||||
class WindowControlButton;
|
||||
|
||||
class HyperlinkLabel final : public QLabel {
|
||||
Q_OBJECT
|
||||
|
|
@ -80,6 +81,9 @@ public:
|
|||
QToolButton* hamburger_button() const { return m_hamburger_button; }
|
||||
|
||||
void set_window(BrowserWindow&);
|
||||
void set_toolbar_window_controls_visible(bool);
|
||||
void set_toolbar_window_drag_enabled(bool);
|
||||
void update_window_control_icons();
|
||||
void update_hover_label();
|
||||
|
||||
bool url_is_hidden() const { return m_location_edit->url_is_hidden(); }
|
||||
|
|
@ -109,6 +113,11 @@ private:
|
|||
|
||||
QWidget* m_toolbar_container { nullptr };
|
||||
QWidget* m_toolbar { nullptr };
|
||||
QWidget* m_toolbar_window_controls_separator { nullptr };
|
||||
QWidget* m_toolbar_window_controls { nullptr };
|
||||
WindowControlButton* m_minimize_window_button { nullptr };
|
||||
WindowControlButton* m_maximize_window_button { nullptr };
|
||||
WindowControlButton* m_close_window_button { nullptr };
|
||||
BookmarksBar* m_bookmarks_bar { nullptr };
|
||||
QToolButton* m_hamburger_button { nullptr };
|
||||
LocationEdit* m_location_edit { nullptr };
|
||||
|
|
@ -130,7 +139,6 @@ private:
|
|||
QMenu* m_media_context_menu { nullptr };
|
||||
QMenu* m_select_dropdown { nullptr };
|
||||
|
||||
QAction* m_toggle_vertical_tabs_expanded_action { nullptr };
|
||||
QAction* m_navigate_back_action { nullptr };
|
||||
QAction* m_navigate_forward_action { nullptr };
|
||||
QAction* m_reload_action { nullptr };
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <UI/Qt/BrowserWindow.h>
|
||||
#include <UI/Qt/ChromeStyle.h>
|
||||
#include <UI/Qt/Icon.h>
|
||||
#include <UI/Qt/Menu.h>
|
||||
#include <UI/Qt/Tab.h>
|
||||
#include <UI/Qt/TabBar.h>
|
||||
#include <UI/Qt/WindowControlButton.h>
|
||||
|
|
@ -47,7 +48,6 @@ namespace Ladybird {
|
|||
static constexpr auto LADYBIRD_TAB_MIME_TYPE = "application/x-ladybird-tab";
|
||||
static constexpr int HORIZONTAL_TAB_STRIP_HEIGHT = 43;
|
||||
static constexpr int HORIZONTAL_TAB_HEIGHT = 36;
|
||||
static constexpr int VERTICAL_TAB_STRIP_HEIGHT = 40;
|
||||
static constexpr int VERTICAL_TAB_HEIGHT = 38;
|
||||
static constexpr int VERTICAL_TABS_COLLAPSED_WIDTH = 52;
|
||||
static constexpr int VERTICAL_TABS_EXPANDED_WIDTH = 248;
|
||||
|
|
@ -787,6 +787,14 @@ TabWidget::TabWidget(QWidget* parent)
|
|||
m_new_tab_button->setFocusPolicy(Qt::NoFocus);
|
||||
m_new_tab_button->setToolTip("New Tab");
|
||||
|
||||
m_toggle_vertical_tabs_expanded_action = create_application_action(*this, WebView::Application::the().toggle_vertical_tabs_expanded_action());
|
||||
m_toggle_vertical_tabs_expanded_button = new QToolButton(this);
|
||||
m_toggle_vertical_tabs_expanded_button->setObjectName("LadybirdVerticalTabsToggleButton");
|
||||
m_toggle_vertical_tabs_expanded_button->setDefaultAction(m_toggle_vertical_tabs_expanded_action);
|
||||
m_toggle_vertical_tabs_expanded_button->setIconSize(QSize(18, 18));
|
||||
m_toggle_vertical_tabs_expanded_button->setFixedSize(32, 32);
|
||||
m_toggle_vertical_tabs_expanded_button->setFocusPolicy(Qt::NoFocus);
|
||||
|
||||
m_minimize_window_button = new WindowControlButton("LadybirdWindowButton", "Minimize", { 18, 18 }, { 40, 40 }, this);
|
||||
m_maximize_window_button = new WindowControlButton("LadybirdWindowButton", "Maximize", { 18, 18 }, { 40, 40 }, this);
|
||||
m_close_window_button = new WindowControlButton("LadybirdCloseWindowButton", "Close", { 18, 18 }, { 40, 40 }, this);
|
||||
|
|
@ -853,6 +861,9 @@ void TabWidget::insert_tab(int index, Tab* widget, QString const& label)
|
|||
m_stacked_widget->insertWidget(index, widget);
|
||||
m_tab_bar->insertTab(index, label);
|
||||
|
||||
widget->set_toolbar_window_controls_visible(m_window_controls_visible && m_vertical_tabs_enabled);
|
||||
widget->set_toolbar_window_drag_enabled(m_vertical_tabs_enabled);
|
||||
|
||||
update_tab_layout();
|
||||
update_tab_button_visibility();
|
||||
}
|
||||
|
|
@ -913,9 +924,12 @@ void TabWidget::set_tab_bar_visible(bool visible)
|
|||
void TabWidget::set_window_controls_visible(bool visible)
|
||||
{
|
||||
m_window_controls_visible = visible;
|
||||
m_minimize_window_button->setVisible(visible);
|
||||
m_maximize_window_button->setVisible(visible);
|
||||
m_close_window_button->setVisible(visible);
|
||||
auto show_tab_strip_window_controls = visible && m_tab_bar->tab_layout() == TabLayout::Horizontal;
|
||||
m_minimize_window_button->setVisible(show_tab_strip_window_controls);
|
||||
m_maximize_window_button->setVisible(show_tab_strip_window_controls);
|
||||
m_close_window_button->setVisible(show_tab_strip_window_controls);
|
||||
for (int index = 0; index < m_stacked_widget->count(); ++index)
|
||||
tab(index)->set_toolbar_window_controls_visible(visible && m_vertical_tabs_enabled);
|
||||
update_tab_chrome_visibility();
|
||||
update_tab_layout();
|
||||
}
|
||||
|
|
@ -926,6 +940,10 @@ void TabWidget::set_vertical_tabs_enabled(bool enabled)
|
|||
return;
|
||||
|
||||
m_vertical_tabs_enabled = enabled;
|
||||
for (int index = 0; index < m_stacked_widget->count(); ++index) {
|
||||
tab(index)->set_toolbar_window_controls_visible(m_window_controls_visible && enabled);
|
||||
tab(index)->set_toolbar_window_drag_enabled(enabled);
|
||||
}
|
||||
rebuild_layout();
|
||||
}
|
||||
|
||||
|
|
@ -1058,7 +1076,6 @@ void TabWidget::rebuild_layout()
|
|||
if (m_tab_bar->tab_layout() != TabLayout::Horizontal) {
|
||||
rebuild_layout_for_vertical_tabs();
|
||||
|
||||
m_main_layout->addWidget(m_tab_bar_row);
|
||||
m_vertical_tabs_content_layout->addWidget(m_vertical_tab_bar_column);
|
||||
m_vertical_tabs_content_layout->addWidget(m_stacked_widget, 1);
|
||||
m_main_layout->addWidget(m_vertical_tabs_content, 1);
|
||||
|
|
@ -1106,14 +1123,6 @@ void TabWidget::rebuild_layout_for_vertical_tabs()
|
|||
clear_layout(*m_tab_bar_row_layout);
|
||||
clear_layout(*m_vertical_tab_bar_column_layout);
|
||||
|
||||
m_tab_bar_row->setMinimumHeight(VERTICAL_TAB_STRIP_HEIGHT);
|
||||
m_tab_bar_row_layout->setSpacing(0);
|
||||
m_tab_bar_row_layout->setContentsMargins(0, 0, 0, 0);
|
||||
m_tab_bar_row_layout->addStretch(1);
|
||||
m_tab_bar_row_layout->addWidget(m_minimize_window_button);
|
||||
m_tab_bar_row_layout->addWidget(m_maximize_window_button);
|
||||
m_tab_bar_row_layout->addWidget(m_close_window_button);
|
||||
|
||||
auto side_bar_width = m_vertical_tabs_expanded ? VERTICAL_TABS_EXPANDED_WIDTH : VERTICAL_TABS_COLLAPSED_WIDTH;
|
||||
m_vertical_tab_bar_column->setFixedWidth(side_bar_width);
|
||||
|
||||
|
|
@ -1125,22 +1134,41 @@ void TabWidget::rebuild_layout_for_vertical_tabs()
|
|||
m_new_tab_button->setProperty(VERTICAL_TABS_EXPANDED_PROPERTY, m_vertical_tabs_expanded);
|
||||
m_new_tab_button->style()->unpolish(m_new_tab_button);
|
||||
m_new_tab_button->style()->polish(m_new_tab_button);
|
||||
m_toggle_vertical_tabs_expanded_button->setProperty(VERTICAL_TABS_EXPANDED_PROPERTY, m_vertical_tabs_expanded);
|
||||
m_toggle_vertical_tabs_expanded_button->style()->unpolish(m_toggle_vertical_tabs_expanded_button);
|
||||
m_toggle_vertical_tabs_expanded_button->style()->polish(m_toggle_vertical_tabs_expanded_button);
|
||||
if (m_vertical_tabs_expanded) {
|
||||
m_new_tab_button->setFixedHeight(32);
|
||||
m_new_tab_button->setMinimumWidth(32);
|
||||
m_new_tab_button->setMaximumWidth(QWIDGETSIZE_MAX);
|
||||
m_new_tab_button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
|
||||
m_toggle_vertical_tabs_expanded_button->setText("Collapse Tabs");
|
||||
m_toggle_vertical_tabs_expanded_button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
||||
m_toggle_vertical_tabs_expanded_button->setFixedHeight(32);
|
||||
m_toggle_vertical_tabs_expanded_button->setMinimumWidth(32);
|
||||
m_toggle_vertical_tabs_expanded_button->setMaximumWidth(QWIDGETSIZE_MAX);
|
||||
m_toggle_vertical_tabs_expanded_button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
} else {
|
||||
m_new_tab_button->setFixedSize(32, 32);
|
||||
m_new_tab_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
|
||||
m_toggle_vertical_tabs_expanded_button->setText({});
|
||||
m_toggle_vertical_tabs_expanded_button->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||
m_toggle_vertical_tabs_expanded_button->setFixedSize(32, 32);
|
||||
m_toggle_vertical_tabs_expanded_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
}
|
||||
|
||||
Qt::Alignment new_tab_button_alignment {};
|
||||
if (!m_vertical_tabs_expanded)
|
||||
Qt::Alignment toggle_button_alignment {};
|
||||
if (!m_vertical_tabs_expanded) {
|
||||
new_tab_button_alignment = Qt::AlignHCenter;
|
||||
toggle_button_alignment = Qt::AlignHCenter;
|
||||
}
|
||||
m_vertical_tab_bar_column_layout->addWidget(m_tab_bar);
|
||||
m_vertical_tab_bar_column_layout->addWidget(m_new_tab_button, 0, new_tab_button_alignment);
|
||||
m_vertical_tab_bar_column_layout->addStretch(1);
|
||||
m_vertical_tab_bar_column_layout->addWidget(m_toggle_vertical_tabs_expanded_button, 0, toggle_button_alignment);
|
||||
}
|
||||
|
||||
void TabWidget::update_tab_layout()
|
||||
|
|
@ -1181,14 +1209,23 @@ void TabWidget::update_tab_button_visibility()
|
|||
|
||||
void TabWidget::update_tab_chrome_visibility()
|
||||
{
|
||||
auto show_top_row = m_tab_bar_visible && (m_tab_bar->tab_layout() == TabLayout::Horizontal || m_window_controls_visible);
|
||||
auto show_top_row = m_tab_bar_visible && m_tab_bar->tab_layout() == TabLayout::Horizontal;
|
||||
m_tab_bar_row->setVisible(show_top_row);
|
||||
m_vertical_tab_bar_column->setVisible(m_tab_bar_visible && m_tab_bar->tab_layout() != TabLayout::Horizontal);
|
||||
auto show_tab_strip_window_controls = m_window_controls_visible && m_tab_bar->tab_layout() == TabLayout::Horizontal;
|
||||
m_minimize_window_button->setVisible(show_tab_strip_window_controls);
|
||||
m_maximize_window_button->setVisible(show_tab_strip_window_controls);
|
||||
m_close_window_button->setVisible(show_tab_strip_window_controls);
|
||||
}
|
||||
|
||||
void TabWidget::recreate_icons()
|
||||
{
|
||||
m_new_tab_button->setIcon(create_chrome_icon(ChromeIcon::NewTab, palette()));
|
||||
m_toggle_vertical_tabs_expanded_action->setIcon(create_chrome_icon(
|
||||
WebView::Application::the().toggle_vertical_tabs_expanded_action().engaged()
|
||||
? ChromeIcon::VerticalTabBarCollapse
|
||||
: ChromeIcon::VerticalTabBarExpand,
|
||||
palette()));
|
||||
update_window_button_icons();
|
||||
}
|
||||
|
||||
|
|
@ -1211,6 +1248,9 @@ void TabWidget::update_window_button_icons()
|
|||
m_maximize_window_button->setIcon(create_chrome_icon(is_maximized ? ChromeIcon::WindowRestore : ChromeIcon::WindowMaximize, palette()));
|
||||
m_maximize_window_button->setToolTip(is_maximized ? "Restore" : "Maximize");
|
||||
m_close_window_button->setIcon(create_chrome_icon(ChromeIcon::WindowClose, palette()));
|
||||
|
||||
for (int index = 0; index < m_stacked_widget->count(); ++index)
|
||||
tab(index)->update_window_control_icons();
|
||||
}
|
||||
|
||||
void TabWidget::toggle_window_maximized()
|
||||
|
|
|
|||
|
|
@ -141,6 +141,7 @@ public:
|
|||
void set_tab_bar_visible(bool visible);
|
||||
void set_new_tab_action(QAction* action);
|
||||
void set_window_controls_visible(bool);
|
||||
void update_window_button_icons();
|
||||
void set_vertical_tabs_enabled(bool);
|
||||
void set_vertical_tabs_expanded(bool);
|
||||
void update_tab_button_visibility();
|
||||
|
|
@ -168,7 +169,6 @@ private:
|
|||
void update_tab_chrome_visibility();
|
||||
void recreate_icons();
|
||||
void update_chrome_style();
|
||||
void update_window_button_icons();
|
||||
void toggle_window_maximized();
|
||||
bool start_window_move();
|
||||
void accept_tab_drag(QDragMoveEvent*);
|
||||
|
|
@ -177,6 +177,7 @@ private:
|
|||
TabBar* m_tab_bar { nullptr };
|
||||
QStackedWidget* m_stacked_widget { nullptr };
|
||||
QToolButton* m_new_tab_button { nullptr };
|
||||
QToolButton* m_toggle_vertical_tabs_expanded_button { nullptr };
|
||||
QToolButton* m_minimize_window_button { nullptr };
|
||||
QToolButton* m_maximize_window_button { nullptr };
|
||||
QToolButton* m_close_window_button { nullptr };
|
||||
|
|
@ -187,6 +188,7 @@ private:
|
|||
QBoxLayout* m_tab_bar_row_layout { nullptr };
|
||||
QBoxLayout* m_vertical_tab_bar_column_layout { nullptr };
|
||||
QBoxLayout* m_vertical_tabs_content_layout { nullptr };
|
||||
QAction* m_toggle_vertical_tabs_expanded_action { nullptr };
|
||||
bool m_tab_bar_visible { true };
|
||||
bool m_window_controls_visible { true };
|
||||
bool m_vertical_tabs_enabled { false };
|
||||
|
|
|
|||
Loading…
Reference in a new issue