From 925b83a85a1431d391e2383137eb76f56cb08b5f Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 25 Apr 2022 18:59:55 -0400 Subject: [PATCH] HaikuDepot: Fix scrolling the list triggering "looping." If two PACKAGE_SELECTED messages were queued at once, then we would wind up in a loop between the two, triggering the "looping" behavior. Instead, do not send a PACKAGE_SELECTED message when programatically changing what package is selected, which is more efficient anyway. Fixes #11732. --- src/apps/haikudepot/ui/PackageListView.cpp | 10 +++++++++- src/apps/haikudepot/ui/PackageListView.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/apps/haikudepot/ui/PackageListView.cpp b/src/apps/haikudepot/ui/PackageListView.cpp index 9fe2496695..fe22dee5ae 100644 --- a/src/apps/haikudepot/ui/PackageListView.cpp +++ b/src/apps/haikudepot/ui/PackageListView.cpp @@ -857,7 +857,8 @@ PackageListView::PackageListView(Model* model) fModel(model), fPackageListener(new(std::nothrow) PackageListener(this)), fRowByNameTable(new RowByNameTable()), - fWorkStatusView(NULL) + fWorkStatusView(NULL), + fIgnoreSelectionChanged(false) { float scale = be_plain_font->Size() / 12.f; float spacing = be_control_look->DefaultItemSpacing() * 2; @@ -981,6 +982,9 @@ PackageListView::SelectionChanged() { BColumnListView::SelectionChanged(); + if (fIgnoreSelectionChanged) + return; + BMessage message(MSG_PACKAGE_SELECTED); PackageRow* selected = dynamic_cast(CurrentSelection()); @@ -1046,6 +1050,8 @@ PackageListView::RemovePackage(const PackageInfoRef& package) void PackageListView::SelectPackage(const PackageInfoRef& package) { + fIgnoreSelectionChanged = true; + PackageRow* row = _FindRow(package); BRow* selected = CurrentSelection(); if (row != selected) @@ -1055,6 +1061,8 @@ PackageListView::SelectPackage(const PackageInfoRef& package) SetFocusRow(row, false); ScrollTo(row); } + + fIgnoreSelectionChanged = false; } diff --git a/src/apps/haikudepot/ui/PackageListView.h b/src/apps/haikudepot/ui/PackageListView.h index 866721f9a6..2ffdffd7f1 100644 --- a/src/apps/haikudepot/ui/PackageListView.h +++ b/src/apps/haikudepot/ui/PackageListView.h @@ -57,6 +57,8 @@ private: RowByNameTable* fRowByNameTable; WorkStatusView* fWorkStatusView; + + bool fIgnoreSelectionChanged; }; #endif // PACKAGE_LIST_VIEW_H