diff options
| author | Brian Potchik <brian@vector35.com> | 2024-09-05 08:11:28 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2024-09-05 08:11:28 -0400 |
| commit | fde5ba7b66ccb5f927f6a8290d5e74bf93097ed6 (patch) | |
| tree | b89dabaf9851a9bc56aea5e009267f845b4c732d | |
| parent | 029fa6704ad29b40cbd3265caaa8e3b03a640d12 (diff) | |
Fix crash and UI lag for the address/find dialogs.
| -rw-r--r-- | ui/addressdialog.h | 21 | ||||
| -rw-r--r-- | ui/getsymbolslistthread.h | 19 |
2 files changed, 18 insertions, 22 deletions
diff --git a/ui/addressdialog.h b/ui/addressdialog.h index f250409d..253969f0 100644 --- a/ui/addressdialog.h +++ b/ui/addressdialog.h @@ -37,7 +37,7 @@ class BINARYNINJAUIAPI AddressDialogWithPreview : public QDialog QTimer* m_updateTimer; QStringList m_historyEntries; int m_historySize; - GetSymbolsListThread* m_updateThread; + GetSymbolsListThread* m_updateThread = nullptr; QColor m_defaultColor; QFont m_defaultFont; QString m_prompt; @@ -46,9 +46,8 @@ class BINARYNINJAUIAPI AddressDialogWithPreview : public QDialog bool m_resultAmbiguous = false; void commitHistory(); - void customEvent(QEvent* event); - private Q_SLOTS: +private Q_SLOTS: void updateTimerEvent(); void accepted(); void updateRelativeState(int state); @@ -56,10 +55,11 @@ class BINARYNINJAUIAPI AddressDialogWithPreview : public QDialog void updatePreviewText(); void updatePreviewWithText(QString data); - public: +public: AddressDialogWithPreview(QWidget* parent, BinaryViewRef view, uint64_t here, const QString& title = "Go to Address", const QString& prompt = "Enter Expression", bool defaultToCurrent = false); ~AddressDialogWithPreview(); + uint64_t getOffset() const { return m_addr; } }; @@ -88,18 +88,19 @@ class BINARYNINJAUIAPI FileOffsetDialogWithPreview : public QDialog void commitHistory(); - private Q_SLOTS: +private Q_SLOTS: void updateTimerEvent(); void accepted(); void updatePreview(); void updatePreviewText(); void updatePreview(QString data); - public: +public: FileOffsetDialogWithPreview(QWidget* parent, BinaryViewRef view, uint64_t here, const QString& title = "Go to File Offset", const QString& prompt = "Enter Expression", bool defaultToCurrent = false); ~FileOffsetDialogWithPreview() {} + uint64_t getOffset() const { return m_fileOffset; } }; @@ -122,7 +123,7 @@ class BINARYNINJAUIAPI AddUserXrefDialog : public QDialog QTimer* m_updateTimer; QStringList m_historyEntries; int m_historySize; - GetSymbolsListThread* m_updateThread; + GetSymbolsListThread* m_updateThread = nullptr; QColor m_defaultColor; QFont m_defaultFont; QString m_prompt; @@ -131,21 +132,21 @@ class BINARYNINJAUIAPI AddUserXrefDialog : public QDialog bool m_resultAmbiguous = false; void commitHistory(); - void customEvent(QEvent* event); - private Q_SLOTS: +private Q_SLOTS: void updateTimerEvent(); void accepted(); void updatePreview(); void updatePreviewText(); void updatePreviewWithText(QString data); - public: +public: AddUserXrefDialog(QWidget* parent, BinaryViewRef view, uint64_t here = 0, size_t size = 0, const QString& title = "Add User Type Field Cross Reference", const QString& sizeTitle = "Size of Reference (optional)", const QString& prompt = "Enter Expression", bool defaultToCurrent = false); ~AddUserXrefDialog(); + uint64_t getOffset() const { return m_addr; } size_t getSize() const { return m_size; } };
\ No newline at end of file diff --git a/ui/getsymbolslistthread.h b/ui/getsymbolslistthread.h index 73c97962..30236367 100644 --- a/ui/getsymbolslistthread.h +++ b/ui/getsymbolslistthread.h @@ -2,7 +2,6 @@ #ifndef BINARYNINJAUI_BINDINGS #include <QtCore/QThread> - #include <QtCore/QEvent> #endif #include "binaryninjaapi.h" #include "uitypes.h" @@ -21,22 +20,18 @@ class BINARYNINJAUIAPI GetSymbolsListThread : public QThread { Q_OBJECT - QStringList m_allSymbols; - std::function<void()> m_completeFunc; - std::mutex m_mutex; - bool m_done; BinaryViewRef m_view; + QStringList m_symbolsList; + QStringList m_additionalListEntries; - protected: +protected: virtual void run() override; - public: - GetSymbolsListThread(BinaryViewRef view, const std::function<void()>& completeFunc); +public: + GetSymbolsListThread(BinaryViewRef view, QStringList additionalListEntries); void cancel(); - static int m_eventType; - int GetEventType() { return GetSymbolsListThread::m_eventType; } - - const QStringList& getSymbols() const { return m_allSymbols; } +signals: + void symbolsListReady(const QStringList& symbolsList); }; #endif |
