summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/containerbrowser.h5
-rw-r--r--ui/containeropenrequest.h47
-rw-r--r--view/macho/universaltransform.cpp9
3 files changed, 4 insertions, 57 deletions
diff --git a/ui/containerbrowser.h b/ui/containerbrowser.h
index b9ba278f..363e5446 100644
--- a/ui/containerbrowser.h
+++ b/ui/containerbrowser.h
@@ -15,7 +15,6 @@
#include <vector>
-class ContainerOpenRequest;
class ContainerTreeModel : public QAbstractItemModel
{
@@ -122,8 +121,4 @@ public:
bool openWithOptionsRequested() const { return m_openWithOptionsRequested; }
static std::vector<TransformContextRef> openContainerFile(const QString& path, bool forceShowDialog = false, bool* outOpenWithOptions = nullptr);
-
- // Show the container browser dialog for the given open request.
- // Returns the selected contexts, or empty if the user cancelled.
- static std::vector<TransformContextRef> showBrowser(ContainerOpenRequest& request, bool* outOpenWithOptions = nullptr);
};
diff --git a/ui/containeropenrequest.h b/ui/containeropenrequest.h
deleted file mode 100644
index 5067534d..00000000
--- a/ui/containeropenrequest.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#pragma once
-
-#include "uitypes.h"
-
-#include <optional>
-#include <string>
-#include <vector>
-
-
-// Captures user settings and intent for opening a container file, and provides
-// policy decisions (e.g. whether to show the container browser) after processing.
-class BINARYNINJAUIAPI ContainerOpenRequest
-{
-public:
- enum Action {
- Cancel,
- AutoOpen,
- BrowseContainer,
- SelectArchitecture,
- };
-
- explicit ContainerOpenRequest(const std::string& path, bool forceContainerBrowser = false);
-
- TransformSessionRef session() const { return m_session; }
-
- // Create the session, process it, and determine what action the caller
- // should take. Returns Cancel if the session could not be created.
- Action resolve();
-
- // Get the default selection from a processed session. If no selection has
- // been made (e.g. because the session auto-opened), selects the current leaf.
- std::vector<TransformContextRef> selectedContexts();
-
- // When the container is a universal binary, the available architectures and the
- // index of the preferred one (if any).
- const std::vector<TransformContextRef>& architectureContexts() const { return m_archContexts; }
- std::optional<size_t> preferredArchitectureIndex() const { return m_preferredArch; }
-
-private:
- Action resolveUniversal(TransformContextRef universalCtx);
-
- TransformSessionRef m_session;
- std::vector<TransformContextRef> m_archContexts;
- std::optional<size_t> m_preferredArch;
- bool m_forceContainerBrowser = false;
- bool m_autoOpen = false;
-};
diff --git a/view/macho/universaltransform.cpp b/view/macho/universaltransform.cpp
index 33164215..3309d853 100644
--- a/view/macho/universaltransform.cpp
+++ b/view/macho/universaltransform.cpp
@@ -266,20 +266,19 @@ bool UniversalTransform::DecodeWithContext(Ref<TransformContext> context, const
architectures.push_back(archName);
}
- // TODO: It is surprising that this is UniversalTransform's responsibility.
- if (!BinaryNinja::IsUIEnabled())
+ if (!context->IsInteractive())
{
- // When headless, filter to the preferred architecture if one is configured.
vector<string> archPref = context->GetSettings()->Get<vector<string>>("files.universal.architecturePreference");
if (auto result = find_first_of(archPref.begin(), archPref.end(), architectures.begin(), architectures.end()); result != archPref.end())
{
+ // Filter to preferred architecture to support container auto-open policy
size_t archIndex = find(architectures.begin(), architectures.end(), *result) - architectures.begin();
context->SetAvailableFiles({architectures[archIndex]});
return false;
}
- // Load the first architecture if no preference is found.
- if (archPref.empty() && architectures.size())
+ // Preserve original headless load behavior when no architecturePreference is specified
+ if (!BinaryNinja::IsUIEnabled() && archPref.empty() && architectures.size())
{
context->SetAvailableFiles({architectures[0]});
return false;