Attempting to get rid of the BufferView cache stuff, I've had a look
at class LyX. It is simple enough to turn it into a singleton class
class LyX : boost::noncopyable {
static void init(int & argc, char * argv[]);
static LyX const & get();
private:
LyX(int & argc, char * argv[]);
};
namespace {
boost::scoped_ptr<LyX> singleton;
} // namespace anon
void LyX::init(int & argc, char * argv[]) {
BOOST_ASSERT(!singleton.get());
singleton.reset(new LyX(argc, argv));
}
LyX const & LyX::get() {
BOOST_ASSERT(singleton.get());
return *singleton.get();
}
But this doesn't actually help because it doesn't actually own any
LyXViews!
In fact, further investigation shows that we have lyx_gui::start:
namespace {
bool finished = false
} // namespace anon
void start(string const & batch, vector<string> const & files) {
...
XFormsView view(width, height);
view.show(xpos, ypos, "LyX");
view.init();
...
// enter the event loop
while (!finished) {
if (fl_check_forms() == FL_EVENT) {
XEvent ev;
fl_XNextEvent(&ev);
}
}
// FIXME: breaks emergencyCleanup
delete lyxsocket;
delete lyxserver;
}
I propose to store
std::list<boost::shared_ptr<LyXView> > lyxviews_;
within LyX and to continue the event loop with the equivalent of
while (!LyX::get().lyxviews_.empty())
Obviously, for now, there will only ever be one item in this list, but
at least this item would now be accessible.
Regards,
Angus