Skip to content

Commit ecd2766

Browse files
committed
Use different times for auto-expand vs. auto-collapse of sidebar items
This improves usability on laptop touchpads and other devices where accurate movements while holding down the mouse button are difficult.
1 parent 87ae4f0 commit ecd2766

8 files changed

Lines changed: 73 additions & 11 deletions

File tree

src/library/library.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,11 @@ void Library::bindSidebarWidget(WLibrarySidebar* pSidebarWidget) {
343343
m_pConfig->getValue(
344344
kSidebarHoverExpandDelayConfigKey,
345345
kSidebarHoverExpandDelayDefault);
346-
pSidebarWidget->slotSetExpandOnHoverDelay(sidebarHoverExpandDelay);
346+
const auto sidebarHoverCollapseDelay =
347+
m_pConfig->getValue(
348+
kSidebarHoverCollapseDelayConfigKey,
349+
kSidebarHoverCollapseDelayDefault);
350+
pSidebarWidget->slotSetExpandCollapseOnHoverDelay(sidebarHoverExpandDelay, sidebarHoverCollapseDelay);
347351

348352
m_pLibraryControl->bindSidebarWidget(pSidebarWidget);
349353

@@ -392,9 +396,9 @@ void Library::bindSidebarWidget(WLibrarySidebar* pSidebarWidget) {
392396
&WLibrarySidebar::slotSetFont);
393397

394398
connect(this,
395-
&Library::setSidebarHoverExpandDelay,
399+
&Library::setSidebarHoverDelay,
396400
pSidebarWidget,
397-
&WLibrarySidebar::slotSetExpandOnHoverDelay);
401+
&WLibrarySidebar::slotSetExpandCollapseOnHoverDelay);
398402

399403
for (const auto& feature : std::as_const(m_features)) {
400404
feature->bindSidebarWidget(pSidebarWidget);

src/library/library.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class Library: public QObject {
175175
void setTrackTableRowHeight(int rowHeight);
176176
void setSelectedClick(bool enable);
177177

178-
void setSidebarHoverExpandDelay(int delay);
178+
void setSidebarHoverDelay(int expandDelay, int collapseDelay);
179179

180180
void onTrackAnalyzerProgress(TrackId trackId, AnalyzerProgress analyzerProgress);
181181

src/library/library_prefs.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,8 @@ const ConfigKey mixxx::library::prefs::kSidebarHoverExpandDelayConfigKey =
129129
ConfigKey{
130130
mixxx::library::prefs::kConfigGroup,
131131
QStringLiteral("sidebar_hover_expand_delay")};
132+
133+
const ConfigKey mixxx::library::prefs::kSidebarHoverCollapseDelayConfigKey =
134+
ConfigKey{
135+
mixxx::library::prefs::kConfigGroup,
136+
QStringLiteral("sidebar_hover_collapse_delay")};

src/library/library_prefs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ const int kSidebarHoverExpandDelayDefault = 500; // ms
6666

6767
extern const ConfigKey kSidebarHoverExpandDelayConfigKey;
6868

69+
const int kSidebarHoverCollapseDelayDefault = 750; // ms
70+
71+
extern const ConfigKey kSidebarHoverCollapseDelayConfigKey;
72+
6973
} // namespace prefs
7074

7175
} // namespace library

src/preferences/dialog/dlgpreflibrary.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ void DlgPrefLibrary::slotResetToDefaults() {
300300
}
301301

302302
spinBox_sidebar_hover_expand_delay->setValue(kSidebarHoverExpandDelayDefault);
303+
spinBox_sidebar_hover_collapse_delay->setValue(kSidebarHoverCollapseDelayDefault);
303304

304305
checkBox_show_rhythmbox->setChecked(true);
305306
checkBox_show_banshee->setChecked(true);
@@ -464,6 +465,12 @@ void DlgPrefLibrary::slotUpdate() {
464465
kSidebarHoverExpandDelayConfigKey,
465466
kSidebarHoverExpandDelayDefault);
466467
spinBox_sidebar_hover_expand_delay->setValue(sidebarHoverExpandDelay);
468+
469+
const auto sidebarHoverCollapseDelay =
470+
m_pConfig->getValue(
471+
kSidebarHoverCollapseDelayConfigKey,
472+
kSidebarHoverCollapseDelayDefault);
473+
spinBox_sidebar_hover_collapse_delay->setValue(sidebarHoverCollapseDelay);
467474
}
468475

469476
void DlgPrefLibrary::slotCancel() {
@@ -684,8 +691,10 @@ void DlgPrefLibrary::slotApply() {
684691
ConfigValue(checkbox_played_track_color->isChecked()));
685692

686693
int sidebarHoverExpandDelay = spinBox_sidebar_hover_expand_delay->value();
694+
int sidebarHoverCollapseDelay = spinBox_sidebar_hover_collapse_delay->value();
687695
m_pConfig->setValue(kSidebarHoverExpandDelayConfigKey, sidebarHoverExpandDelay);
688-
emit m_pLibrary->setSidebarHoverExpandDelay(sidebarHoverExpandDelay);
696+
m_pConfig->setValue(kSidebarHoverCollapseDelayConfigKey, sidebarHoverCollapseDelay);
697+
emit m_pLibrary->setSidebarHoverDelay(sidebarHoverExpandDelay, sidebarHoverCollapseDelay);
689698

690699
// TODO(rryan): Don't save here.
691700
m_pConfig->save();

src/preferences/dialog/dlgpreflibrarydlg.ui

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,40 @@
444444
<string> ms</string>
445445
</property>
446446
<property name="toolTip">
447-
<string>The delay until sidebar items are expanded or collapsed hovered during drag'n'drop. -1 disables auto-expand.</string>
447+
<string>The delay until sidebar items are expanded hovered during drag'n'drop. -1 disables auto-expand.</string>
448+
</property>
449+
<property name="minimum">
450+
<number>-1</number>
451+
</property>
452+
<property name="maximum">
453+
<number>5000</number>
454+
</property>
455+
<property name="singleStep">
456+
<number>50</number>
457+
</property>
458+
</widget>
459+
</item>
460+
461+
<item row="1" column="0">
462+
<widget class="QLabel" name="label_sidebar_hover_collapse_delay">
463+
<property name="text">
464+
<string>Hover collapse delay:</string>
465+
</property>
466+
<property name="alignment">
467+
<set>Qt::AlignLeft|Qt::AlignVCenter</set>
468+
</property>
469+
<property name="buddy">
470+
<cstring>spinBox_sidebar_hover_collapse_delay</cstring>
471+
</property>
472+
</widget>
473+
</item>
474+
<item row="1" column="1" colspan="2">
475+
<widget class="QSpinBox" name="spinBox_sidebar_hover_collapse_delay">
476+
<property name="suffix">
477+
<string> ms</string>
478+
</property>
479+
<property name="toolTip">
480+
<string>The delay until sidebar items are collapsed hovered during drag'n'drop. -1 disables auto-expand.</string>
448481
</property>
449482
<property name="minimum">
450483
<number>-1</number>

src/widget/wlibrarysidebar.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
WLibrarySidebar::WLibrarySidebar(QWidget* parent)
1414
: QTreeView(parent),
1515
WBaseWidget(this),
16-
m_hoverExpandDelay(mixxx::library::prefs::kSidebarHoverExpandDelayDefault) {
16+
m_hoverExpandDelay(mixxx::library::prefs::kSidebarHoverExpandDelayDefault),
17+
m_hoverCollapseDelay(mixxx::library::prefs::kSidebarHoverCollapseDelayDefault) {
1718
qRegisterMetaType<FocusWidget>("FocusWidget");
1819
//Set some properties
1920
setHeaderHidden(true);
@@ -136,6 +137,11 @@ void WLibrarySidebar::dragMoveEvent(QDragMoveEvent* pEvent) {
136137

137138
if (m_autoExpandIndex != index) {
138139
m_autoExpandIndex = index;
140+
if (isExpanded(index)) {
141+
setAutoExpandDelay(m_hoverCollapseDelay);
142+
} else {
143+
setAutoExpandDelay(m_hoverExpandDelay);
144+
}
139145
// QTreeView::dragMoveEvent just restarts the autoExpand timer
140146
// and then calls QAbstractItemView::dragMoveEvent
141147
setSourceOfCurrentDragDropEvent(pEvent->source());
@@ -477,7 +483,7 @@ void WLibrarySidebar::slotSetFont(const QFont& font) {
477483
setIconSize(QSize(iconSize, iconSize));
478484
}
479485

480-
void WLibrarySidebar::slotSetExpandOnHoverDelay(int delay) {
481-
m_hoverExpandDelay = delay;
482-
setAutoExpandDelay(m_hoverExpandDelay);
486+
void WLibrarySidebar::slotSetExpandCollapseOnHoverDelay(int expandDelay, int collapseDelay) {
487+
m_hoverExpandDelay = expandDelay;
488+
m_hoverCollapseDelay = collapseDelay;
483489
}

src/widget/wlibrarysidebar.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class WLibrarySidebar : public QTreeView, public WBaseWidget {
3333
void selectIndex(const QModelIndex& index, bool scrollToIndex = true);
3434
void selectChildIndex(const QModelIndex&, bool selectItem = true);
3535
void slotSetFont(const QFont& font);
36-
void slotSetExpandOnHoverDelay(int delay);
36+
void slotSetExpandCollapseOnHoverDelay(int expandDelay, int collapseDelay);
3737

3838
signals:
3939
void rightClicked(const QPoint&, const QModelIndex&);
@@ -53,5 +53,6 @@ class WLibrarySidebar : public QTreeView, public WBaseWidget {
5353
void setSourceOfCurrentDragDropEvent(QObject* pSource);
5454

5555
int m_hoverExpandDelay;
56+
int m_hoverCollapseDelay;
5657
QModelIndex m_autoExpandIndex;
5758
};

0 commit comments

Comments
 (0)