From 8ab4d9f7875894eb4a86214c3e8a2472fc2ae33d Mon Sep 17 00:00:00 2001 From: michael starke Date: Mon, 1 Sep 2014 19:06:36 +0200 Subject: [PATCH] Searchbar should work better with wrong selections --- MacPass/ContextBar.xib | 2 +- MacPass/MPContextBarViewController.m | 1 + MacPass/MPDocument+Search.m | 15 +++++------ MacPass/MPEntrySearchContext.h | 39 ++++++++++++++-------------- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/MacPass/ContextBar.xib b/MacPass/ContextBar.xib index 5621f982..226cf117 100644 --- a/MacPass/ContextBar.xib +++ b/MacPass/ContextBar.xib @@ -103,7 +103,7 @@ - + diff --git a/MacPass/MPContextBarViewController.m b/MacPass/MPContextBarViewController.m index 66a1163f..984635f8 100644 --- a/MacPass/MPContextBarViewController.m +++ b/MacPass/MPContextBarViewController.m @@ -82,6 +82,7 @@ typedef NS_ENUM(NSUInteger, MPContextTab) { [specialMenu addItemWithTitle:NSLocalizedString(@"SELECT_FILTER_WITH_DOTS", "") action:NULL keyEquivalent:@""]; [[specialMenu itemAtIndex:0] setEnabled:NO]; [[specialMenu itemAtIndex:0] setTag:MPEntrySearchNone]; + [[specialMenu itemAtIndex:0] setAction:@selector(toggleSearchFlags:)]; for(NSInteger iIndex = 0; iIndex < [titles count]; iIndex++) { NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[iIndex] action:@selector(toggleSearchFlags:) keyEquivalent:@""]; [item setTag:specialTags[iIndex]]; diff --git a/MacPass/MPDocument+Search.m b/MacPass/MPDocument+Search.m index 288016dc..faed64a8 100644 --- a/MacPass/MPDocument+Search.m +++ b/MacPass/MPDocument+Search.m @@ -70,7 +70,6 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul } - (void)toggleSearchFlags:(id)sender { - static MPEntrySearchFlags oldFlags; if(![sender respondsToSelector:@selector(tag)]) { return; // We need to read the button tag } @@ -79,23 +78,21 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul } MPEntrySearchFlags toggleFlag = [sender tag]; MPEntrySearchFlags newFlags = MPEntrySearchNone; - BOOL isDoublePasswordFlag = (toggleFlag == MPEntrySearchDoublePasswords); - BOOL isExpiredFlag = (toggleFlag == MPEntrySearchExpiredEntries); + BOOL isSingleFlag = toggleFlag & MPEntrySearchSingleFlags; NSButton *button = sender; switch([button state]) { case NSOffState: - toggleFlag ^= MPEntrySearchAllFlags; - newFlags = isDoublePasswordFlag ? oldFlags : (self.searchContext.searchFlags & toggleFlag); + toggleFlag ^= MPEntrySearchAllCombineableFlags; + newFlags = isSingleFlag ? MPEntrySearchNone : (self.searchContext.searchFlags & toggleFlag); break; case NSOnState: - if(isDoublePasswordFlag || isExpiredFlag ) { - oldFlags = self.searchContext.searchFlags; - newFlags = toggleFlag;//MPEntrySearchDoublePasswords; + if(isSingleFlag ) { + newFlags = toggleFlag; // This has to be either expired or double passwords } else { /* always mask the double passwords in case another button was pressed */ - self.searchContext.searchFlags &= ((MPEntrySearchDoublePasswords | MPEntrySearchExpiredEntries) ^ MPEntrySearchAllFlags); newFlags = self.searchContext.searchFlags | toggleFlag; + newFlags &= (MPEntrySearchSingleFlags ^ MPEntrySearchAllFlags); } break; default: diff --git a/MacPass/MPEntrySearchContext.h b/MacPass/MPEntrySearchContext.h index 370d9a8d..67278696 100644 --- a/MacPass/MPEntrySearchContext.h +++ b/MacPass/MPEntrySearchContext.h @@ -9,29 +9,30 @@ #import typedef NS_OPTIONS(NSUInteger, MPEntrySearchFlags) { - MPEntrySearchNone = 0, - MPEntrySearchUrls = (1<<0), - MPEntrySearchUsernames = (1<<1), - MPEntrySearchTitles = (1<<2), - MPEntrySearchPasswords = (1<<3), - MPEntrySearchNotes = (1<<4), - MPEntrySearchAllAttributes = (1<<5), + MPEntrySearchNone = 0, + MPEntrySearchUrls = (1<<0), + MPEntrySearchUsernames = (1<<1), + MPEntrySearchTitles = (1<<2), + MPEntrySearchPasswords = (1<<3), + MPEntrySearchNotes = (1<<4), + MPEntrySearchAllAttributes = (1<<5), /* The following two flags should be used like enums. They are not intented to be used in conjunktion with any other flag */ - MPEntrySearchDoublePasswords = (1<<6), - MPEntrySearchExpiredEntries = (1<<7), - /* All search flags that are combineable combined */ - MPEntrySearchAllFlags = (MPEntrySearchDoublePasswords | - MPEntrySearchExpiredEntries | - MPEntrySearchNotes | - MPEntrySearchPasswords | - MPEntrySearchTitles | - MPEntrySearchUrls | - MPEntrySearchUsernames | - MPEntrySearchAllAttributes ) + MPEntrySearchDoublePasswords = (1<<6), + MPEntrySearchExpiredEntries = (1<<7), + /* All combinebale search flags combined */ + MPEntrySearchAllCombineableFlags = (MPEntrySearchDoublePasswords | + MPEntrySearchExpiredEntries | + MPEntrySearchNotes | + MPEntrySearchPasswords | + MPEntrySearchTitles | + MPEntrySearchUrls | + MPEntrySearchUsernames | + MPEntrySearchAllAttributes), + MPEntrySearchSingleFlags = (MPEntrySearchDoublePasswords | MPEntrySearchExpiredEntries), + MPEntrySearchAllFlags = (MPEntrySearchAllCombineableFlags | MPEntrySearchSingleFlags ) }; - /* Wrap serach criteria to be able to store them */ @interface MPEntrySearchContext : NSObject