diff options
| author | Brian Potchik <brian@vector35.com> | 2022-04-20 10:37:14 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2022-04-20 10:37:14 -0400 |
| commit | 14d6187a02ba77f0941c0c9a4df4fd4a7826db6c (patch) | |
| tree | 4550c703e251e90c30d208cfbb41be4960fd90a3 | |
| parent | d21db5d448c8d4c50f982a5b05bd663e7448f639 (diff) | |
Fix initial navigation crash and object lifetime.
| -rw-r--r-- | ui/viewframe.h | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/ui/viewframe.h b/ui/viewframe.h index 28691d0a..b8707d8b 100644 --- a/ui/viewframe.h +++ b/ui/viewframe.h @@ -96,14 +96,6 @@ class TransformParameterDialog; class ViewPaneHeaderSubtypeWidget; // struct BinaryNinjaCore::LinearDisassemblyLine; -class View; -class InitialNavigation: public BinaryNinja::BinaryDataNotification -{ - View* m_view; - public: - InitialNavigation(View* view); - virtual void OnSymbolAdded(BinaryNinja::BinaryView* view, BinaryNinja::Symbol* symbol) override; -}; class BINARYNINJAUIAPI View { @@ -329,8 +321,25 @@ class BINARYNINJAUIAPI ViewContainer }; class SymbolsView; +class ViewFrame; class ViewPane; + +class InitialNavigation: public BinaryNinja::BinaryDataNotification +{ + ViewFrame* m_frame; + BinaryViewRef m_data; + + InitialNavigation() = delete; + +public: + InitialNavigation(ViewFrame* frame, BinaryViewRef data) : m_frame(frame), m_data(data) { m_data->RegisterNotification(this); } + ~InitialNavigation() { m_data->UnregisterNotification(this); } + + virtual void OnSymbolAdded(BinaryNinja::BinaryView* view, BinaryNinja::Symbol* symbol) override; +}; + + class BINARYNINJAUIAPI ViewFrame : public QWidget { Q_OBJECT @@ -342,7 +351,7 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget FileContext* m_context; bool m_fileContentsLock = true; // file contents protection from accidental modification in the UI - BinaryViewRef m_data; + BinaryViewRef m_data = nullptr; QWidget* m_view = nullptr; QWidget* m_viewContainer; QVBoxLayout* m_viewLayout; @@ -352,7 +361,7 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget bool m_graphViewPreferred = false; std::vector<QString> m_viewTypePriority; int m_preferredSyncGroup = 1; - InitialNavigation* m_initialNavigation; + InitialNavigation* m_initialNavigation = nullptr; UIActionHandler m_actionHandler; @@ -497,7 +506,6 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget void forceSyncFromView(); ViewFrame* getOtherPane(); - void UnRegisterInitialNavigation(); public Q_SLOTS: virtual void assemble(); |
