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

Reply via email to