Attempted fix for idle_drop_window
random crashes (1/2)
This commit is contained in:
parent
1736b1d424
commit
2bca6395cc
@ -4700,7 +4700,7 @@ ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* b
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Glib::signal_idle ().connect (sigc::bind (&idle_drop_window, self));
|
me->_drop_window_connection = Glib::signal_idle ().connect (sigc::bind (&idle_drop_window, self)/*, G_PRIORITY_HIGH_IDLE*/);
|
||||||
}, this, pi->type ()));
|
}, this, pi->type ()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4719,8 +4719,11 @@ ProcessorWindowProxy::processor_going_away ()
|
|||||||
{
|
{
|
||||||
gui_connections.drop_connections ();
|
gui_connections.drop_connections ();
|
||||||
_unmap_connection.disconnect ();
|
_unmap_connection.disconnect ();
|
||||||
delete _window;
|
_drop_window_connection.disconnect ();
|
||||||
|
Gtk::Window* w = _window;
|
||||||
|
/* Unset _window, any allbacks triggered by `delete _window`, will see _window = 0; */
|
||||||
_window = 0;
|
_window = 0;
|
||||||
|
delete w;
|
||||||
WM::Manager::instance().remove (this);
|
WM::Manager::instance().remove (this);
|
||||||
/* should be no real reason to do this, since the object that would
|
/* should be no real reason to do this, since the object that would
|
||||||
send DropReferences is about to be deleted, but lets do it anyway.
|
send DropReferences is about to be deleted, but lets do it anyway.
|
||||||
@ -4777,6 +4780,7 @@ ProcessorWindowProxy::get (bool create)
|
|||||||
/* drop existing window - wrong type */
|
/* drop existing window - wrong type */
|
||||||
set_state_mask (Gtkmm2ext::WindowProxy::StateMask (state_mask () & ~WindowProxy::Size));
|
set_state_mask (Gtkmm2ext::WindowProxy::StateMask (state_mask () & ~WindowProxy::Size));
|
||||||
_unmap_connection.block ();
|
_unmap_connection.block ();
|
||||||
|
_drop_window_connection.disconnect ();
|
||||||
drop_window ();
|
drop_window ();
|
||||||
_unmap_connection.unblock ();
|
_unmap_connection.unblock ();
|
||||||
}
|
}
|
||||||
@ -4804,6 +4808,7 @@ ProcessorWindowProxy::show_the_right_window (bool show_not_toggle)
|
|||||||
/* drop existing window - wrong type */
|
/* drop existing window - wrong type */
|
||||||
set_state_mask (Gtkmm2ext::WindowProxy::StateMask (state_mask () & ~WindowProxy::Size));
|
set_state_mask (Gtkmm2ext::WindowProxy::StateMask (state_mask () & ~WindowProxy::Size));
|
||||||
_unmap_connection.block ();
|
_unmap_connection.block ();
|
||||||
|
_drop_window_connection.disconnect ();
|
||||||
drop_window ();
|
drop_window ();
|
||||||
_unmap_connection.unblock ();
|
_unmap_connection.unblock ();
|
||||||
}
|
}
|
||||||
|
@ -113,6 +113,7 @@ private:
|
|||||||
|
|
||||||
void processor_going_away ();
|
void processor_going_away ();
|
||||||
sigc::connection _unmap_connection;
|
sigc::connection _unmap_connection;
|
||||||
|
sigc::connection _drop_window_connection;
|
||||||
PBD::ScopedConnection going_away_connection;
|
PBD::ScopedConnection going_away_connection;
|
||||||
PBD::ScopedConnectionList gui_connections;
|
PBD::ScopedConnectionList gui_connections;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user