static void manager_log_closed_cb (LogviewManager *manager, LogviewLog *log, gpointer user_data) { LogviewLoglist *list = user_data; GtkTreeIter *iter; gboolean res; iter = logview_loglist_find_log (list, log); if (!iter) { return; } g_signal_handlers_disconnect_by_func (log, log_changed_cb, list); res = gtk_tree_store_remove (list->priv->model, iter); if (res) { GtkTreeSelection *selection; /* iter now points to the next valid row */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); gtk_tree_selection_select_iter (selection, iter); } else { /* FIXME: what shall we do here? */ } gtk_tree_iter_free (iter); }
static void log_changed_cb (LogviewLog *log, gpointer user_data) { LogviewLoglist *list = user_data; LogviewLog *active; GtkTreeIter *iter; active = logview_manager_get_active_log (list->priv->manager); if (log == active) { g_object_unref (active); return; } iter = logview_loglist_find_log (list, log); if (!iter) { return; } /* make the log bold in the list */ gtk_tree_store_set (list->priv->model, iter, LOG_WEIGHT, PANGO_WEIGHT_BOLD, LOG_WEIGHT_SET, TRUE, -1); gtk_tree_iter_free (iter); }
void logview_loglist_update_lines (LogviewLoglist *loglist, LogviewLog *log) { GSList *days; GtkTreeIter *parent; g_assert (LOGVIEW_IS_LOGLIST (loglist)); g_assert (LOGVIEW_IS_LOG (log)); days = logview_log_get_days_for_cached_lines (log); parent = logview_loglist_find_log (loglist, log); update_days_and_lines_for_log (loglist, parent, days); gtk_tree_iter_free (parent); }
static void manager_active_changed_cb (LogviewManager *manager, LogviewLog *log, LogviewLog *old_log, gpointer user_data) { LogviewLoglist *list = user_data; GtkTreeIter * iter, sel_iter; GtkTreeSelection * selection; if (list->priv->selection && gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->model), &sel_iter, list->priv->selection)) { Day *day; iter = gtk_tree_iter_copy (&sel_iter); gtk_tree_model_get (GTK_TREE_MODEL (list->priv->model), iter, LOG_DAY, &day, -1); if (day) { g_signal_emit (list, signals[DAY_SELECTED], 0, day, NULL); } gtk_tree_path_free (list->priv->selection); list->priv->selection = NULL; } else { iter = logview_loglist_find_log (list, log); } if (!iter) { return; } selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); g_signal_handlers_block_by_func (selection, tree_selection_changed_cb, list); gtk_tree_selection_select_iter (selection, iter); g_signal_handlers_unblock_by_func (selection, tree_selection_changed_cb, list); gtk_tree_iter_free (iter); }