From 581a96616a5b23926da6068ae61beb00be559fe8 Mon Sep 17 00:00:00 2001 From: Philippe Saint-Pierre Date: Thu, 5 Jan 2012 21:44:11 -0500 Subject: [PATCH] Tracker: Fix inconsistent "Open parent" behaviour 1. When in /boot, you couldn't go to the parent (which is fine by itself), but the menu item wasn't disabled. 2. In Single Window Browsing, doing "Open parent" wasn't respecting that setting and was opening new windows. 3. In filepanel, when navigating to Desktop folder, the "Go to parent" was still proposed even though it would do nothing choosing it. 4. Opening a Pose in Single Window Browsing was repopulating the menus and putting the shortcuts again. That was an issue if Navigator bar was used since it conflicts with its shortcuts. Fixing ticket #6851. --- src/kits/tracker/ContainerWindow.cpp | 21 ++++++++++++++++++++- src/kits/tracker/PoseView.cpp | 12 ++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/kits/tracker/ContainerWindow.cpp b/src/kits/tracker/ContainerWindow.cpp index fb065e8b48..1642c10af9 100644 --- a/src/kits/tracker/ContainerWindow.cpp +++ b/src/kits/tracker/ContainerWindow.cpp @@ -1547,6 +1547,7 @@ BContainerWindow::MessageReceived(BMessage *message) TrackerSettings settings; if (settings.ShowNavigator() || settings.ShowFullPathInTitleBar()) SetPathWatchingEnabled(true); + SetSingleWindowBrowseShortcuts(settings.SingleWindowBrowse()); // Update draggable folder icon BView *view = FindView("MenuBar"); @@ -1631,6 +1632,7 @@ BContainerWindow::MessageReceived(BMessage *message) SetPathWatchingEnabled(true); if (IsPathWatchingEnabled() && !(settings.ShowNavigator() || settings.ShowFullPathInTitleBar())) SetPathWatchingEnabled(false); + SetSingleWindowBrowseShortcuts(settings.SingleWindowBrowse()); break; case kDontMoveFilesToTrashChanged: @@ -3069,7 +3071,24 @@ BContainerWindow::UpdateMenu(BMenu *menu, UpdateMenuContext context) SetArrangeMenu(menu); SetPasteItem(menu); - EnableNamedMenuItem(menu, kOpenParentDir, !TargetModel()->IsRoot()); + + BEntry entry(TargetModel()->EntryRef()); + BDirectory parent; + entry_ref ref; + BEntry root("/"); + + bool parentIsRoot = (entry.GetParent(&parent) == B_OK + && parent.GetEntry(&entry) == B_OK + && entry.GetRef(&ref) == B_OK + && entry == root); + + EnableNamedMenuItem(menu, kOpenParentDir, !TargetModel()->IsDesktop() + && !TargetModel()->IsRoot() + && (!parentIsRoot + || TrackerSettings().SingleWindowBrowse() + || TrackerSettings().ShowDisksIcon() + || (modifiers() & B_CONTROL_KEY) != 0)); + EnableNamedMenuItem(menu, kEmptyTrash, count > 0); EnableNamedMenuItem(menu, B_SELECT_ALL, count > 0); diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index bd4d11323d..6d5d92eadb 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -8051,7 +8051,9 @@ BPoseView::OpenParent() return; BEntry root("/"); - if (!TrackerSettings().ShowDisksIcon() && entry == root + if (!TrackerSettings().SingleWindowBrowse() + && !TrackerSettings().ShowNavigator() + && !TrackerSettings().ShowDisksIcon() && entry == root && (modifiers() & B_CONTROL_KEY) == 0) return; @@ -8072,7 +8074,13 @@ BPoseView::OpenParent() sizeof (node_ref)); } - be_app->PostMessage(&message); + + if (TrackerSettings().SingleWindowBrowse()) { + BMessage msg(kSwitchDirectory); + msg.AddRef("refs", &ref); + Window()->PostMessage(&msg); + } else + be_app->PostMessage(&message); }