X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/42eabfd7f44835017b331f5ed9670d8cde35d7e1..7fe2807d48006b2191dfe8b1985176cd378e80c3:/disobedience/queue-generic.c diff --git a/disobedience/queue-generic.c b/disobedience/queue-generic.c index 82bd939..2f8aa70 100644 --- a/disobedience/queue-generic.c +++ b/disobedience/queue-generic.c @@ -763,6 +763,7 @@ GtkWidget *init_queuelike(struct queuelike *ql) { /* The selection should support multiple things being selected */ ql->selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(ql->view)); + g_object_ref(ql->selection); gtk_tree_selection_set_mode(ql->selection, GTK_SELECTION_MULTIPLE); /* Catch button presses */ @@ -824,7 +825,8 @@ GtkWidget *init_queuelike(struct queuelike *ql) { /* TODO style? */ - ql->init(ql); + if(ql->init) + ql->init(ql); /* Update display text when lookups complete */ event_register("lookups-completed", queue_lookups_completed, ql); @@ -834,6 +836,31 @@ GtkWidget *init_queuelike(struct queuelike *ql) { return scrolled; } +/** @brief Destroy a queuelike + * @param ql Queuelike to destroy + * + * Returns @p ql to its initial state. + */ +void destroy_queuelike(struct queuelike *ql) { + if(ql->store) { + g_object_unref(ql->store); + ql->store = NULL; + } + if(ql->view) { + gtk_object_destroy(GTK_OBJECT(ql->view)); + ql->view = NULL; + } + if(ql->menu) { + gtk_object_destroy(GTK_OBJECT(ql->menu)); + ql->menu = NULL; + } + if(ql->selection) { + g_object_unref(ql->selection); + ql->selection = NULL; + } + ql->q = NULL; +} + /* Local Variables: c-basic-offset:2