mirror of https://github.com/KLayout/klayout.git
WIP: avoid a segfault when closing tab while dragging an instance.
This commit is contained in:
parent
649d6da1b8
commit
1ea29dd9f3
|
|
@ -579,13 +579,18 @@ void
|
||||||
EditorOptionsInst::update_cell_edits ()
|
EditorOptionsInst::update_cell_edits ()
|
||||||
{
|
{
|
||||||
db::Layout *layout = 0;
|
db::Layout *layout = 0;
|
||||||
|
lay::LayoutView *view = lay::LayoutView::current ();
|
||||||
|
|
||||||
// find the layout the cell has to be looked up: that is either the layout of the current instance or
|
// find the layout the cell has to be looked up: that is either the layout of the current instance or
|
||||||
// the library selected
|
// the library selected
|
||||||
if (mp_ui->lib_cbx->current_library ()) {
|
if (mp_ui->lib_cbx->current_library ()) {
|
||||||
layout = &mp_ui->lib_cbx->current_library ()->layout ();
|
layout = &mp_ui->lib_cbx->current_library ()->layout ();
|
||||||
} else {
|
} else if (view && view->cellview (m_cv_index).is_valid ()) {
|
||||||
layout = &lay::LayoutView::current ()->cellview (m_cv_index)->layout ();
|
layout = &view->cellview (m_cv_index)->layout ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! layout) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<bool, db::pcell_id_type> pc = layout->pcell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ());
|
std::pair<bool, db::pcell_id_type> pc = layout->pcell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ());
|
||||||
|
|
|
||||||
|
|
@ -403,11 +403,10 @@ activate_service (lay::LayoutView *view, const lay::PluginDeclaration *pd, bool
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @@@ TODO: this is very inefficient as each "activate" will regenerate the tabs
|
// TODO: this is very inefficient as each "activate" will regenerate the tabs
|
||||||
for (std::vector<edt::EditorOptionsPage *>::const_iterator op = eo_pages->pages ().begin (); op != eo_pages->pages ().end (); ++op) {
|
for (std::vector<edt::EditorOptionsPage *>::const_iterator op = eo_pages->pages ().begin (); op != eo_pages->pages ().end (); ++op) {
|
||||||
(*op)->activate (((*op)->plugin_declaration () == pd || ! (*op)->plugin_declaration ()) && active);
|
(*op)->activate (((*op)->plugin_declaration () == pd || ! (*op)->plugin_declaration ()) && active);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -537,12 +537,11 @@ MainWindow::MainWindow (QApplication *app, lay::Plugin *plugin_parent, const cha
|
||||||
m_libs_visible = true;
|
m_libs_visible = true;
|
||||||
|
|
||||||
mp_eo_dock_widget = new QDockWidget (QObject::tr ("Editor Options"), this);
|
mp_eo_dock_widget = new QDockWidget (QObject::tr ("Editor Options"), this);
|
||||||
mp_eo_dock_widget->hide ();
|
|
||||||
mp_eo_dock_widget->setObjectName (QString::fromUtf8 ("eo_dock_widget"));
|
mp_eo_dock_widget->setObjectName (QString::fromUtf8 ("eo_dock_widget"));
|
||||||
mp_eo_stack = new ControlWidgetStack (mp_eo_dock_widget, "eo_stack");
|
mp_eo_stack = new ControlWidgetStack (mp_eo_dock_widget, "eo_stack");
|
||||||
mp_eo_dock_widget->setWidget (mp_eo_stack);
|
mp_eo_dock_widget->setWidget (mp_eo_stack);
|
||||||
connect (mp_eo_dock_widget, SIGNAL (visibilityChanged (bool)), this, SLOT (dock_widget_visibility_changed (bool)));
|
connect (mp_eo_dock_widget, SIGNAL (visibilityChanged (bool)), this, SLOT (dock_widget_visibility_changed (bool)));
|
||||||
m_eo_visible = false;
|
m_eo_visible = true;
|
||||||
|
|
||||||
mp_bm_dock_widget = new QDockWidget (QObject::tr ("Bookmarks"), this);
|
mp_bm_dock_widget = new QDockWidget (QObject::tr ("Bookmarks"), this);
|
||||||
mp_bm_dock_widget->setObjectName (QString::fromUtf8 ("bookmarks_dock_widget"));
|
mp_bm_dock_widget->setObjectName (QString::fromUtf8 ("bookmarks_dock_widget"));
|
||||||
|
|
@ -939,6 +938,7 @@ MainWindow::show ()
|
||||||
void
|
void
|
||||||
MainWindow::close_all ()
|
MainWindow::close_all ()
|
||||||
{
|
{
|
||||||
|
cancel ();
|
||||||
mp_layer_toolbox->set_view (0);
|
mp_layer_toolbox->set_view (0);
|
||||||
|
|
||||||
// try a smooth shutdown of the current view
|
// try a smooth shutdown of the current view
|
||||||
|
|
@ -1151,9 +1151,18 @@ MainWindow::config_finalize ()
|
||||||
// Not set the window state: this ensures we have handled cfg_window_geometry
|
// Not set the window state: this ensures we have handled cfg_window_geometry
|
||||||
// before we restore the state
|
// before we restore the state
|
||||||
if (! m_config_window_state.empty ()) {
|
if (! m_config_window_state.empty ()) {
|
||||||
|
|
||||||
QByteArray state = QByteArray::fromBase64 (m_config_window_state.c_str ());
|
QByteArray state = QByteArray::fromBase64 (m_config_window_state.c_str ());
|
||||||
m_config_window_state.clear ();
|
m_config_window_state.clear ();
|
||||||
|
|
||||||
|
bool eo_visible = m_eo_visible;
|
||||||
|
|
||||||
restoreState (state);
|
restoreState (state);
|
||||||
|
|
||||||
|
// Keep the editor options visibility state
|
||||||
|
m_eo_visible = eo_visible;
|
||||||
|
show_dock_widget (mp_eo_dock_widget, m_eo_visible);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the default grids menu if necessary
|
// Update the default grids menu if necessary
|
||||||
|
|
@ -3025,6 +3034,8 @@ MainWindow::close_view (int index)
|
||||||
{
|
{
|
||||||
if (view (index)) {
|
if (view (index)) {
|
||||||
|
|
||||||
|
cancel ();
|
||||||
|
|
||||||
// this suppresses view_selected events that would otherwise be created
|
// this suppresses view_selected events that would otherwise be created
|
||||||
bool f = m_disable_tab_selected;
|
bool f = m_disable_tab_selected;
|
||||||
m_disable_tab_selected = true;
|
m_disable_tab_selected = true;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue