diff --git a/src/laybasic/laybasic/layNetlistBrowserDialog.cc b/src/laybasic/laybasic/layNetlistBrowserDialog.cc index 1bb06b7c0..111c16d63 100644 --- a/src/laybasic/laybasic/layNetlistBrowserDialog.cc +++ b/src/laybasic/laybasic/layNetlistBrowserDialog.cc @@ -772,10 +772,7 @@ NetlistBrowserDialog::update_content () m_reload_action->setEnabled (l2ndb != 0); browser_page->enable_updates (false); // Avoid building the internal lists several times ... - if (browser_page->db () != l2ndb) { - db_changed = true; - browser_page->set_db (l2ndb); - } + db_changed = browser_page->set_db (l2ndb); browser_page->set_max_shape_count (m_max_shape_count); browser_page->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern, m_marker_intensity, m_use_original_colors, m_auto_color_enabled ? &m_auto_colors : 0); browser_page->set_window (m_window, m_window_dim); diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.cc b/src/laybasic/laybasic/layNetlistBrowserPage.cc index ab7a020e8..c63bcade2 100644 --- a/src/laybasic/laybasic/layNetlistBrowserPage.cc +++ b/src/laybasic/laybasic/layNetlistBrowserPage.cc @@ -118,6 +118,7 @@ NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/) mp_view (0), m_cv_index (0), mp_plugin_root (0), + mp_last_db (0), m_history_ptr (0), m_signals_enabled (true), m_enable_updates (true), @@ -606,7 +607,7 @@ NetlistBrowserPage::rerun_macro () { BEGIN_PROTECTED - if (! mp_database->generator ().empty ()) { + if (mp_database.get () && ! mp_database->generator ().empty ()) { std::map add_pars; @@ -764,12 +765,14 @@ NetlistBrowserPage::show_all (bool f) } } -void +bool NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb) { - if (l2ndb == mp_database.get ()) { + // NOTE: mp_last_db mirrors mp_database, but does not automatically fall back to 0 when the DB is deleted. This way we can call + // set_db(0) with the correct behavior after the DB has been destroyed. + if (l2ndb == mp_last_db) { // not change - return; + return false; } if (mp_info_dialog) { @@ -779,6 +782,7 @@ NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb) db::LayoutVsSchematic *lvsdb = dynamic_cast (l2ndb); mp_database.reset (l2ndb); + mp_last_db = l2ndb; rerun_button->setEnabled (mp_database.get () && ! mp_database->generator ().empty ()); if (rerun_button->isEnabled ()) { @@ -807,6 +811,8 @@ NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb) setup_trees (); selection_changed_event (); + + return true; } void diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.h b/src/laybasic/laybasic/layNetlistBrowserPage.h index c5194bc44..59475d788 100644 --- a/src/laybasic/laybasic/layNetlistBrowserPage.h +++ b/src/laybasic/laybasic/layNetlistBrowserPage.h @@ -91,7 +91,7 @@ public: /** * @brief Attaches the page to a L2N DB */ - void set_db (db::LayoutToNetlist *database); + bool set_db(db::LayoutToNetlist *database); /** * @brief Gets the database the page is connected to @@ -228,6 +228,7 @@ private: unsigned int m_cv_index; lay::Dispatcher *mp_plugin_root; tl::weak_ptr mp_database; + db::LayoutToNetlist *mp_last_db; std::vector m_history; size_t m_history_ptr; bool m_signals_enabled;