From 3da13b803853a36868b667a0377237fef9e48e02 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sat, 7 Apr 2012 20:20:39 -0400 Subject: [PATCH] Fix typeahead cancellation in file panels. - Add accessor to PoseView that reports whether the view is currently typeahead filtering. - Use said accessor in the file panel's filter in order to detect whether to tell the latter to cancel filtering vs closing the panel. Fixes #8140. --- src/kits/tracker/FilePanelPriv.cpp | 4 +++- src/kits/tracker/PoseView.cpp | 9 ++++++++- src/kits/tracker/PoseView.h | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/kits/tracker/FilePanelPriv.cpp b/src/kits/tracker/FilePanelPriv.cpp index ccf4d0bf05..9b360c76fb 100644 --- a/src/kits/tracker/FilePanelPriv.cpp +++ b/src/kits/tracker/FilePanelPriv.cpp @@ -101,7 +101,7 @@ GetLinkFlavor(const Model *model, bool resolve = true) static filter_result -key_down_filter(BMessage *message, BHandler **, BMessageFilter *filter) +key_down_filter(BMessage *message, BHandler **handler, BMessageFilter *filter) { TFilePanel *panel = dynamic_cast(filter->Looper()); ASSERT(panel); @@ -119,6 +119,8 @@ key_down_filter(BMessage *message, BHandler **, BMessageFilter *filter) if (!modifier && key == B_ESCAPE) { if (view->ActivePose()) view->CommitActivePose(false); + else if (view->IsFiltering()) + filter->Looper()->PostMessage(B_CANCEL, *handler); else filter->Looper()->PostMessage(kCancelButton); return B_SKIP_MESSAGE; diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 6d5d92eadb..4dd85b59c8 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -2413,7 +2413,7 @@ BPoseView::MessageReceived(BMessage *message) if (PrimarySort() == attrHash) attrHash = 0; - + SetPrimarySort(attrHash); SetSecondarySort(0); Cleanup(true); @@ -9801,6 +9801,13 @@ BPoseView::StartFiltering() } +bool +BPoseView::IsFiltering() const +{ + return fFiltering; +} + + void BPoseView::StopFiltering() { diff --git a/src/kits/tracker/PoseView.h b/src/kits/tracker/PoseView.h index cfe4b5da73..65a7f6a802 100644 --- a/src/kits/tracker/PoseView.h +++ b/src/kits/tracker/PoseView.h @@ -402,6 +402,9 @@ class BPoseView : public BView { void StartWatchDateFormatChange(); void StopWatchDateFormatChange(); + // type ahead filtering + bool IsFiltering() const; + void UpdateDateColumns(BMessage *); virtual void AdaptToVolumeChange(BMessage *); virtual void AdaptToDesktopIntegrationChange(BMessage *);