gboolean XournalView::clearMemoryTimer(XournalView* widget) { XOJ_CHECK_TYPE_OBJ(widget, XournalView); GList* list = NULL; for (size_t i = 0; i < widget->viewPagesLen; i++) { PageView* v = widget->viewPages[i]; if (v->getLastVisibleTime() > 0) { list = g_list_insert_sorted(list, v, (GCompareFunc) pageViewCmpSize); } } int pixel = 2884560; int firstPages = 4; int i = 0; for (GList* l = list; l != NULL; l = l->next) { if (firstPages) { firstPages--; } else { PageView* v = (PageView*) l->data; if (pixel <= 0) { v->deleteViewBuffer(); } else { pixel -= v->getBufferPixels(); } } i++; } g_list_free(list); // call again return true; }