On Tue, Mar 2, 2010 at 1:30 AM, Abdelrazak Younes <you...@lyx.org> wrote: > Problem is you are returning a pointer for a local variable... This is wrong > as the model should be persistent of course. So you need to somewhat cache > the buffer language model:
Thanks. > +QAbstractItemModel * GuiApplication::languageModel(Buffer const * buffer) > +{ > + if (!buffer) > + return 0; > + QSortFilterProxyModel * model = > d->buffer_language_models_.value(buffer, 0); > + if (!model) { > + model = new QSortFilterProxyModel(this); > + d->buffer_language_models_[buffer] = model; > + } > + updateLanguageModel(model, buffer->getLanguages()); > + return model; Wouldn't this leak memory when a Buffer is closed? In Java this would be solved using Weak References but don't I think we have those in C++ unless we use a custom memory manager. How would we solve this in LyX? From a memory management point of view it would make sense to put buffer_language_models_ in Buffer, but presumably not from a separation of GUI POV. -- John C. McCabe-Dansted