From dd54780d5e929c9af82d476f93e9b0ee9f65962f Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 30 Mar 2024 18:47:50 -0400 Subject: [PATCH] Ladybird/Qt: Place the tab audio state button on the right on macOS On macOS, the "close tab" button is on the left, so we should place the audio state button on the right to avoid conflict. Rather than an OS ifdef, we do this by detecting if the left side is occupied. --- Ladybird/Qt/BrowserWindow.cpp | 18 +++++++++++++----- Ladybird/Qt/BrowserWindow.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index 4b617c0542f..e2a9850fbdf 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -650,11 +650,12 @@ void BrowserWindow::tab_favicon_changed(int index, QIcon const& icon) void BrowserWindow::tab_audio_play_state_changed(int index, Web::HTML::AudioPlayState play_state) { auto* tab = verify_cast(m_tabs_container->widget(index)); + auto position = audio_button_position_for_tab(index); switch (play_state) { case Web::HTML::AudioPlayState::Paused: if (tab->view().page_mute_state() == Web::HTML::MuteState::Unmuted) - m_tabs_container->tabBar()->setTabButton(index, QTabBar::LeftSide, nullptr); + m_tabs_container->tabBar()->setTabButton(index, position, nullptr); break; case Web::HTML::AudioPlayState::Playing: @@ -663,23 +664,23 @@ void BrowserWindow::tab_audio_play_state_changed(int index, Web::HTML::AudioPlay button->setFlat(true); button->resize({ 20, 20 }); - connect(button, &QPushButton::clicked, this, [this, tab]() { + connect(button, &QPushButton::clicked, this, [this, tab, position]() { tab->view().toggle_page_mute_state(); auto index = tab_index(tab); switch (tab->view().audio_play_state()) { case Web::HTML::AudioPlayState::Paused: - m_tabs_container->tabBar()->setTabButton(index, QTabBar::LeftSide, nullptr); + m_tabs_container->tabBar()->setTabButton(index, position, nullptr); break; case Web::HTML::AudioPlayState::Playing: - auto* button = m_tabs_container->tabBar()->tabButton(index, QTabBar::LeftSide); + auto* button = m_tabs_container->tabBar()->tabButton(index, position); verify_cast(button)->setIcon(icon_for_page_mute_state(*tab)); button->setToolTip(tool_tip_for_page_mute_state(*tab)); break; } }); - m_tabs_container->tabBar()->setTabButton(index, QTabBar::LeftSide, button); + m_tabs_container->tabBar()->setTabButton(index, position, button); break; } } @@ -708,6 +709,13 @@ QString BrowserWindow::tool_tip_for_page_mute_state(Tab& tab) const VERIFY_NOT_REACHED(); } +QTabBar::ButtonPosition BrowserWindow::audio_button_position_for_tab(int tab_index) const +{ + if (m_tabs_container->tabBar()->tabButton(tab_index, QTabBar::LeftSide)) + return QTabBar::RightSide; + return QTabBar::LeftSide; +} + void BrowserWindow::open_next_tab() { if (m_tabs_container->count() <= 1) diff --git a/Ladybird/Qt/BrowserWindow.h b/Ladybird/Qt/BrowserWindow.h index 4d364a4788c..619588384f4 100644 --- a/Ladybird/Qt/BrowserWindow.h +++ b/Ladybird/Qt/BrowserWindow.h @@ -130,6 +130,7 @@ private: QIcon icon_for_page_mute_state(Tab&) const; QString tool_tip_for_page_mute_state(Tab&) const; + QTabBar::ButtonPosition audio_button_position_for_tab(int tab_index) const; QScreen* m_current_screen; double m_device_pixel_ratio { 0 };