Merge pull request #9785 from Dentomologist/fix_gamelist_grid_zoom_in

GameList: Fix grid mode zoom keybind inconsistency
This commit is contained in:
Léo Lam 2021-06-07 14:00:21 +02:00 committed by GitHub
commit edc18e60ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 2 deletions

View File

@ -96,12 +96,27 @@ GameList::GameList(QWidget* parent) : QStackedWidget(parent), m_model(this)
m_prefer_list = Settings::Instance().GetPreferredView();
ConsiderViewChange();
auto* zoom_in = new QShortcut(QKeySequence::ZoomIn, this);
auto* zoom_out = new QShortcut(QKeySequence::ZoomOut, this);
const auto* zoom_in = new QShortcut(QKeySequence::ZoomIn, this);
const auto* zoom_out = new QShortcut(QKeySequence::ZoomOut, this);
connect(zoom_in, &QShortcut::activated, this, &GameList::ZoomIn);
connect(zoom_out, &QShortcut::activated, this, &GameList::ZoomOut);
// On most keyboards the key to the left of the primary delete key represents 'plus' when shift is
// held and 'equal' when it isn't. By common convention, pressing control and that key is treated
// conceptually as 'control plus' (which is then interpreted as an appropriate zooming action)
// instead of the technically correct 'control equal'. Qt doesn't account for this convention so
// an alternate shortcut is needed to avoid counterintuitive behavior.
const auto* zoom_in_alternate = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Equal), this);
connect(zoom_in_alternate, &QShortcut::activated, this, &GameList::ZoomIn);
// The above correction introduces a different inconsistency: now zooming in can be done using
// conceptual 'control plus' or 'control shift plus', while zooming out can only be done using
// 'control minus'. Adding an alternate shortcut representing 'control shift minus' restores
// consistency.
const auto* zoom_out_alternate = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Underscore), this);
connect(zoom_out_alternate, &QShortcut::activated, this, &GameList::ZoomOut);
connect(&Settings::Instance(), &Settings::MetadataRefreshCompleted, this,
[this] { m_grid_proxy->invalidate(); });
}