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>
<content_rating type="oars-1.1" />
<releases>
<release version="4.0.4" date="2021-10-15"/>
<release version="4.0.4" date="2021-10-19"/>
</releases>
<content_rating type="oars-1.0">
<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) {
statusBar()->showProgressFeeds(int((current * 100.0) / total),
//: Text display in status bar when particular feed is updated.
tr("Fetched '%1'").arg(TextFactory::shorten(feed->title())));
feed->title());
}
void FormMain::updateMessageButtonsAvailability() {

View file

@ -27,7 +27,8 @@
#include <QTimer>
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_proxyModel = qApp->feedReader()->messagesProxyModel();
@ -351,9 +352,13 @@ void MessagesView::initializeContextMenu() {
}
void MessagesView::mousePressEvent(QMouseEvent* event) {
m_processingMouse = true;
m_processingAnyMouseButton = true;
m_processingRightMouseButton = event->button() == Qt::MouseButton::RightButton;
QTreeView::mousePressEvent(event);
m_processingMouse = false;
m_processingAnyMouseButton = false;
m_processingRightMouseButton = false;
switch (event->button()) {
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
// wasn't changed by "mark selected messages unread" action.
if (!m_processingRightMouseButton) {
m_sourceModel->setMessageRead(mapped_current_index.row(), RootItem::ReadStatus::Read);
message.m_isRead = true;
}
emit currentMessageChanged(message, m_sourceModel->loadedItem());
}
@ -428,7 +435,7 @@ void MessagesView::selectionChanged(const QItemSelection& selected, const QItemS
setCurrentIndex({});
}
if (!m_processingMouse &&
if (!m_processingAnyMouseButton &&
qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()) {
scrollTo(currentIndex(), QAbstractItemView::ScrollHint::PositionAtCenter);
}
@ -616,7 +623,7 @@ void MessagesView::selectNextItem() {
setCurrentIndex(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::PositionAtTop);
@ -632,7 +639,7 @@ void MessagesView::selectPreviousItem() {
setCurrentIndex(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::PositionAtTop);
@ -664,7 +671,7 @@ void MessagesView::selectNextUnreadItem() {
qApp->processEvents();
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::PositionAtTop);
@ -692,7 +699,7 @@ void MessagesView::searchMessages(const QString& pattern) {
else {
// Scroll to selected message, it could become scrolled out due to filter change.
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::EnsureVisible);
}

View file

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

View file

@ -5,26 +5,44 @@
#include "definitions/definitions.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 {
qint64 totalSteps = qint64(maximum()) - minimum();
qint64 total_steps = qint64(maximum()) - minimum();
QString result = format();
QLocale locale;
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()));
// 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
// 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));
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));
return result;

View file

@ -9,6 +9,11 @@ class ProgressBarWithText : public QProgressBar {
public:
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;
};

View file

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