do not mark message as read when right click with mouse

This commit is contained in:
Martin Rotter 2021-10-19 09:49:25 +02:00
parent 9855b8a523
commit e9a9b32335
7 changed files with 50 additions and 21 deletions

View file

@ -26,7 +26,7 @@
<url type="donation">https://github.com/sponsors/martinrotter</url> <url type="donation">https://github.com/sponsors/martinrotter</url>
<content_rating type="oars-1.1" /> <content_rating type="oars-1.1" />
<releases> <releases>
<release version="4.0.4" date="2021-10-15"/> <release version="4.0.4" date="2021-10-19"/>
</releases> </releases>
<content_rating type="oars-1.0"> <content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute> <content_attribute id="violence-cartoon">none</content_attribute>

View file

@ -407,9 +407,7 @@ void FormMain::onFeedUpdatesStarted() {
void FormMain::onFeedUpdatesProgress(const Feed* feed, int current, int total) { void FormMain::onFeedUpdatesProgress(const Feed* feed, int current, int total) {
statusBar()->showProgressFeeds(int((current * 100.0) / total), statusBar()->showProgressFeeds(int((current * 100.0) / total),
feed->title());
//: Text display in status bar when particular feed is updated.
tr("Fetched '%1'").arg(TextFactory::shorten(feed->title())));
} }
void FormMain::updateMessageButtonsAvailability() { void FormMain::updateMessageButtonsAvailability() {

View file

@ -27,7 +27,8 @@
#include <QTimer> #include <QTimer>
MessagesView::MessagesView(QWidget* parent) MessagesView::MessagesView(QWidget* parent)
: BaseTreeView(parent), m_contextMenu(nullptr), m_columnsAdjusted(false), m_processingMouse(false) { : BaseTreeView(parent), m_contextMenu(nullptr), m_columnsAdjusted(false), m_processingAnyMouseButton(false),
m_processingRightMouseButton(false) {
m_sourceModel = qApp->feedReader()->messagesModel(); m_sourceModel = qApp->feedReader()->messagesModel();
m_proxyModel = qApp->feedReader()->messagesProxyModel(); m_proxyModel = qApp->feedReader()->messagesProxyModel();
@ -351,9 +352,13 @@ void MessagesView::initializeContextMenu() {
} }
void MessagesView::mousePressEvent(QMouseEvent* event) { void MessagesView::mousePressEvent(QMouseEvent* event) {
m_processingMouse = true; m_processingAnyMouseButton = true;
m_processingRightMouseButton = event->button() == Qt::MouseButton::RightButton;
QTreeView::mousePressEvent(event); QTreeView::mousePressEvent(event);
m_processingMouse = false;
m_processingAnyMouseButton = false;
m_processingRightMouseButton = false;
switch (event->button()) { switch (event->button()) {
case Qt::MouseButton::LeftButton: { case Qt::MouseButton::LeftButton: {
@ -415,8 +420,10 @@ void MessagesView::selectionChanged(const QItemSelection& selected, const QItemS
// Set this message as read only if current item // Set this message as read only if current item
// wasn't changed by "mark selected messages unread" action. // wasn't changed by "mark selected messages unread" action.
m_sourceModel->setMessageRead(mapped_current_index.row(), RootItem::ReadStatus::Read); if (!m_processingRightMouseButton) {
message.m_isRead = true; m_sourceModel->setMessageRead(mapped_current_index.row(), RootItem::ReadStatus::Read);
message.m_isRead = true;
}
emit currentMessageChanged(message, m_sourceModel->loadedItem()); emit currentMessageChanged(message, m_sourceModel->loadedItem());
} }
@ -428,7 +435,7 @@ void MessagesView::selectionChanged(const QItemSelection& selected, const QItemS
setCurrentIndex({}); setCurrentIndex({});
} }
if (!m_processingMouse && if (!m_processingAnyMouseButton &&
qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()) { qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()) {
scrollTo(currentIndex(), QAbstractItemView::ScrollHint::PositionAtCenter); scrollTo(currentIndex(), QAbstractItemView::ScrollHint::PositionAtCenter);
} }
@ -616,7 +623,7 @@ void MessagesView::selectNextItem() {
setCurrentIndex(index_next); setCurrentIndex(index_next);
scrollTo(index_next, scrollTo(index_next,
!m_processingMouse && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool() !m_processingAnyMouseButton && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()
? QAbstractItemView::ScrollHint::PositionAtCenter ? QAbstractItemView::ScrollHint::PositionAtCenter
: QAbstractItemView::ScrollHint::PositionAtTop); : QAbstractItemView::ScrollHint::PositionAtTop);
@ -632,7 +639,7 @@ void MessagesView::selectPreviousItem() {
setCurrentIndex(index_previous); setCurrentIndex(index_previous);
scrollTo(index_previous, scrollTo(index_previous,
!m_processingMouse && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool() !m_processingAnyMouseButton && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()
? QAbstractItemView::ScrollHint::PositionAtCenter ? QAbstractItemView::ScrollHint::PositionAtCenter
: QAbstractItemView::ScrollHint::PositionAtTop); : QAbstractItemView::ScrollHint::PositionAtTop);
@ -664,7 +671,7 @@ void MessagesView::selectNextUnreadItem() {
qApp->processEvents(); qApp->processEvents();
scrollTo(next_unread, scrollTo(next_unread,
!m_processingMouse && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool() !m_processingAnyMouseButton && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()
? QAbstractItemView::ScrollHint::PositionAtCenter ? QAbstractItemView::ScrollHint::PositionAtCenter
: QAbstractItemView::ScrollHint::PositionAtTop); : QAbstractItemView::ScrollHint::PositionAtTop);
@ -692,7 +699,7 @@ void MessagesView::searchMessages(const QString& pattern) {
else { else {
// Scroll to selected message, it could become scrolled out due to filter change. // Scroll to selected message, it could become scrolled out due to filter change.
scrollTo(selectionModel()->selectedRows().at(0), scrollTo(selectionModel()->selectedRows().at(0),
!m_processingMouse && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool() !m_processingAnyMouseButton && qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()
? QAbstractItemView::ScrollHint::PositionAtCenter ? QAbstractItemView::ScrollHint::PositionAtCenter
: QAbstractItemView::ScrollHint::EnsureVisible); : QAbstractItemView::ScrollHint::EnsureVisible);
} }

View file

@ -107,7 +107,8 @@ class MessagesView : public BaseTreeView {
MessagesProxyModel* m_proxyModel; MessagesProxyModel* m_proxyModel;
MessagesModel* m_sourceModel; MessagesModel* m_sourceModel;
bool m_columnsAdjusted; bool m_columnsAdjusted;
bool m_processingMouse; bool m_processingAnyMouseButton;
bool m_processingRightMouseButton;
}; };
inline MessagesProxyModel* MessagesView::model() const { inline MessagesProxyModel* MessagesView::model() const {

View file

@ -5,26 +5,44 @@
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) {} ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) {
//setSizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
}
/*
QSize ProgressBarWithText::minimumSizeHint() const {
QString txt = text();
return QSize(fontMetrics().boundingRect(txt).width() + 32,
QProgressBar::minimumSizeHint().height());
}
QSize ProgressBarWithText::sizeHint() const {
QString txt = text();
return QSize(fontMetrics().boundingRect(txt).width() + 32,
QProgressBar::sizeHint().height());
}
*/
QString ProgressBarWithText::text() const { QString ProgressBarWithText::text() const {
qint64 totalSteps = qint64(maximum()) - minimum(); qint64 total_steps = qint64(maximum()) - minimum();
QString result = format(); QString result = format();
QLocale locale; QLocale locale;
locale.setNumberOptions(locale.numberOptions() | QLocale::OmitGroupSeparator); locale.setNumberOptions(locale.numberOptions() | QLocale::OmitGroupSeparator);
result.replace(QLatin1String("%m"), locale.toString(totalSteps)); result.replace(QLatin1String("%m"), locale.toString(total_steps));
result.replace(QLatin1String("%v"), locale.toString(value())); result.replace(QLatin1String("%v"), locale.toString(value()));
// If max and min are equal and we get this far, it means that the // If max and min are equal and we get this far, it means that the
// progress bar has one step and that we are on that step. Return // progress bar has one step and that we are on that step. Return
// 100% here in order to avoid division by zero further down. // 100% here in order to avoid division by zero further down.
if (totalSteps == 0) { if (total_steps == 0) {
result.replace(QLatin1String("%p"), locale.toString(100)); result.replace(QLatin1String("%p"), locale.toString(100));
return result; return result;
} }
const auto progress = static_cast<int>((qint64(value()) - minimum()) * 100.0 / totalSteps); const auto progress = static_cast<int>((qint64(value()) - minimum()) * 100.0 / total_steps);
result.replace(QLatin1String("%p"), locale.toString(progress)); result.replace(QLatin1String("%p"), locale.toString(progress));
return result; return result;

View file

@ -9,6 +9,11 @@ class ProgressBarWithText : public QProgressBar {
public: public:
explicit ProgressBarWithText(QWidget* parent = nullptr); explicit ProgressBarWithText(QWidget* parent = nullptr);
// NOTE: Can be uncommented (along with constructor code)
// to enable automatic fit-to-contents progress bars.
//virtual QSize minimumSizeHint() const;
//virtual QSize sizeHint() const;
virtual QString text() const; virtual QString text() const;
}; };

View file

@ -18,7 +18,7 @@ StatusBar::StatusBar(QWidget* parent) : QStatusBar(parent) {
m_barProgressFeeds = new ProgressBarWithText(this); m_barProgressFeeds = new ProgressBarWithText(this);
m_barProgressFeeds->setTextVisible(true); m_barProgressFeeds->setTextVisible(true);
m_barProgressFeeds->setFixedWidth(230); m_barProgressFeeds->setFixedWidth(250);
m_barProgressFeeds->setVisible(false); m_barProgressFeeds->setVisible(false);
m_barProgressFeeds->setObjectName(QSL("m_barProgressFeeds")); m_barProgressFeeds->setObjectName(QSL("m_barProgressFeeds"));