mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-10-22 10:46:04 +03:00
Improve color scheme change detection
* Fix pieces bars won't correctly detect color scheme change with Qt 6.8. * Update RSS article content view on color scheme changed. PR #21625. Closes #21327.
This commit is contained in:
parent
ab8d0d1dae
commit
3ab9fe55e5
3 changed files with 91 additions and 60 deletions
|
@ -42,7 +42,6 @@
|
|||
#include "base/indexrange.h"
|
||||
#include "base/path.h"
|
||||
#include "base/utils/misc.h"
|
||||
#include "gui/uithememanager.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -119,13 +118,7 @@ PiecesBar::PiecesBar(QWidget *parent)
|
|||
: QWidget(parent)
|
||||
{
|
||||
setMouseTracking(true);
|
||||
|
||||
updateColorsImpl();
|
||||
connect(UIThemeManager::instance(), &UIThemeManager::themeChanged, this, [this]
|
||||
{
|
||||
updateColors();
|
||||
redraw();
|
||||
});
|
||||
}
|
||||
|
||||
void PiecesBar::setTorrent(const BitTorrent::Torrent *torrent)
|
||||
|
@ -143,12 +136,19 @@ void PiecesBar::clear()
|
|||
|
||||
bool PiecesBar::event(QEvent *e)
|
||||
{
|
||||
if (e->type() == QEvent::ToolTip)
|
||||
const QEvent::Type eventType = e->type();
|
||||
if (eventType == QEvent::ToolTip)
|
||||
{
|
||||
showToolTip(static_cast<QHelpEvent *>(e));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (eventType == QEvent::PaletteChange)
|
||||
{
|
||||
updateColors();
|
||||
redraw();
|
||||
}
|
||||
|
||||
return base::event(e);
|
||||
}
|
||||
|
||||
|
|
|
@ -126,6 +126,8 @@ RSSWidget::RSSWidget(IGUIApplication *app, QWidget *parent)
|
|||
, this, &RSSWidget::handleSessionProcessingStateChanged);
|
||||
connect(RSS::Session::instance()->rootFolder(), &RSS::Folder::unreadCountChanged
|
||||
, this, &RSSWidget::handleUnreadCountChanged);
|
||||
|
||||
m_ui->textBrowser->installEventFilter(this);
|
||||
}
|
||||
|
||||
RSSWidget::~RSSWidget()
|
||||
|
@ -494,14 +496,76 @@ void RSSWidget::handleCurrentArticleItemChanged(QListWidgetItem *currentItem, QL
|
|||
article->markAsRead();
|
||||
}
|
||||
|
||||
if (!currentItem) return;
|
||||
if (!currentItem)
|
||||
return;
|
||||
|
||||
auto *article = m_articleListWidget->getRSSArticle(currentItem);
|
||||
renderArticle(article);
|
||||
}
|
||||
|
||||
void RSSWidget::saveSlidersPosition()
|
||||
{
|
||||
// Remember sliders positions
|
||||
Preferences *const pref = Preferences::instance();
|
||||
pref->setRssSideSplitterState(m_ui->splitterSide->saveState());
|
||||
pref->setRssMainSplitterState(m_ui->splitterMain->saveState());
|
||||
}
|
||||
|
||||
void RSSWidget::restoreSlidersPosition()
|
||||
{
|
||||
const Preferences *const pref = Preferences::instance();
|
||||
const QByteArray stateSide = pref->getRssSideSplitterState();
|
||||
if (!stateSide.isEmpty())
|
||||
m_ui->splitterSide->restoreState(stateSide);
|
||||
const QByteArray stateMain = pref->getRssMainSplitterState();
|
||||
if (!stateMain.isEmpty())
|
||||
m_ui->splitterMain->restoreState(stateMain);
|
||||
}
|
||||
|
||||
void RSSWidget::updateRefreshInterval(int val) const
|
||||
{
|
||||
RSS::Session::instance()->setRefreshInterval(val);
|
||||
}
|
||||
|
||||
void RSSWidget::on_rssDownloaderBtn_clicked()
|
||||
{
|
||||
auto *downloader = new AutomatedRssDownloader(this);
|
||||
downloader->setAttribute(Qt::WA_DeleteOnClose);
|
||||
downloader->open();
|
||||
}
|
||||
|
||||
void RSSWidget::handleSessionProcessingStateChanged(bool enabled)
|
||||
{
|
||||
m_ui->labelWarn->setVisible(!enabled);
|
||||
}
|
||||
|
||||
void RSSWidget::handleUnreadCountChanged()
|
||||
{
|
||||
emit unreadCountUpdated(RSS::Session::instance()->rootFolder()->unreadCount());
|
||||
}
|
||||
|
||||
bool RSSWidget::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
if ((obj == m_ui->textBrowser) && (event->type() == QEvent::PaletteChange))
|
||||
{
|
||||
QListWidgetItem *currentItem = m_articleListWidget->currentItem();
|
||||
if (currentItem)
|
||||
{
|
||||
const RSS::Article *article = m_articleListWidget->getRSSArticle(currentItem);
|
||||
renderArticle(article);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void RSSWidget::renderArticle(const RSS::Article *article) const
|
||||
{
|
||||
Q_ASSERT(article);
|
||||
|
||||
const QString highlightedBaseColor = m_ui->textBrowser->palette().color(QPalette::Highlight).name();
|
||||
const QString highlightedBaseTextColor = m_ui->textBrowser->palette().color(QPalette::HighlightedText).name();
|
||||
const QString alternateBaseColor = m_ui->textBrowser->palette().color(QPalette::AlternateBase).name();
|
||||
const QString highlightedBaseColor = m_ui->textBrowser->palette().color(QPalette::Active, QPalette::Highlight).name();
|
||||
const QString highlightedBaseTextColor = m_ui->textBrowser->palette().color(QPalette::Active, QPalette::HighlightedText).name();
|
||||
const QString alternateBaseColor = m_ui->textBrowser->palette().color(QPalette::Active, QPalette::AlternateBase).name();
|
||||
|
||||
QString html =
|
||||
u"<div style='border: 2px solid red; margin-left: 5px; margin-right: 5px; margin-bottom: 5px;'>" +
|
||||
|
@ -549,44 +613,3 @@ void RSSWidget::handleCurrentArticleItemChanged(QListWidgetItem *currentItem, QL
|
|||
html += u"</div>";
|
||||
m_ui->textBrowser->setHtml(html);
|
||||
}
|
||||
|
||||
void RSSWidget::saveSlidersPosition()
|
||||
{
|
||||
// Remember sliders positions
|
||||
Preferences *const pref = Preferences::instance();
|
||||
pref->setRssSideSplitterState(m_ui->splitterSide->saveState());
|
||||
pref->setRssMainSplitterState(m_ui->splitterMain->saveState());
|
||||
}
|
||||
|
||||
void RSSWidget::restoreSlidersPosition()
|
||||
{
|
||||
const Preferences *const pref = Preferences::instance();
|
||||
const QByteArray stateSide = pref->getRssSideSplitterState();
|
||||
if (!stateSide.isEmpty())
|
||||
m_ui->splitterSide->restoreState(stateSide);
|
||||
const QByteArray stateMain = pref->getRssMainSplitterState();
|
||||
if (!stateMain.isEmpty())
|
||||
m_ui->splitterMain->restoreState(stateMain);
|
||||
}
|
||||
|
||||
void RSSWidget::updateRefreshInterval(int val) const
|
||||
{
|
||||
RSS::Session::instance()->setRefreshInterval(val);
|
||||
}
|
||||
|
||||
void RSSWidget::on_rssDownloaderBtn_clicked()
|
||||
{
|
||||
auto *downloader = new AutomatedRssDownloader(this);
|
||||
downloader->setAttribute(Qt::WA_DeleteOnClose);
|
||||
downloader->open();
|
||||
}
|
||||
|
||||
void RSSWidget::handleSessionProcessingStateChanged(bool enabled)
|
||||
{
|
||||
m_ui->labelWarn->setVisible(!enabled);
|
||||
}
|
||||
|
||||
void RSSWidget::handleUnreadCountChanged()
|
||||
{
|
||||
emit unreadCountUpdated(RSS::Session::instance()->rootFolder()->unreadCount());
|
||||
}
|
||||
|
|
|
@ -40,6 +40,11 @@ class QTreeWidgetItem;
|
|||
class ArticleListWidget;
|
||||
class FeedListWidget;
|
||||
|
||||
namespace RSS
|
||||
{
|
||||
class Article;
|
||||
}
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class RSSWidget;
|
||||
|
@ -85,6 +90,9 @@ private slots:
|
|||
void handleUnreadCountChanged();
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
void renderArticle(const RSS::Article *article) const;
|
||||
|
||||
Ui::RSSWidget *m_ui = nullptr;
|
||||
ArticleListWidget *m_articleListWidget = nullptr;
|
||||
FeedListWidget *m_feedListWidget = nullptr;
|
||||
|
|
Loading…
Reference in a new issue