static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer user_data) { LogviewLoglist *list = user_data; GtkTreeModel *model; GtkTreeIter iter, parent; LogviewLog *log; gboolean is_bold, is_active; Day *day; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { return; } gtk_tree_model_get (model, &iter, LOG_OBJECT, &log, LOG_WEIGHT_SET, &is_bold, LOG_DAY, &day, -1); if (log) { is_active = logview_manager_log_is_active (list->priv->manager, log); if (is_active && list->priv->has_day_selection) { list->priv->has_day_selection = FALSE; g_signal_emit (list, signals[DAY_CLEARED], 0, NULL); } else if (!is_active) { logview_manager_set_active_log (list->priv->manager, log); } } else if (day) { list->priv->has_day_selection = TRUE; gtk_tree_model_iter_parent (model, &parent, &iter); gtk_tree_model_get (model, &parent, LOG_OBJECT, &log, -1); if (!logview_manager_log_is_active (list->priv->manager, log)) { save_day_selection (list, &iter); logview_manager_set_active_log (list->priv->manager, log); } else { g_signal_emit (list, signals[DAY_SELECTED], 0, day, NULL); } } if (is_bold) { gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LOG_WEIGHT_SET, FALSE, -1); } if (log) { g_object_unref (log); } }
static void add_log_from_gfile_internal (LogviewManager *manager, GFile *file, gboolean set_active, gboolean is_multiple) { char *file_uri; LogviewLog *log; CreateCBData *data; file_uri = g_file_get_uri (file); if (set_active == FALSE) { /* if it's the first log being added, set it as active anyway */ set_active = (manager->priv->logs == NULL); } if ((log = g_hash_table_lookup (manager->priv->logs, file_uri)) != NULL) { /* log already exists, don't load it */ if (set_active) { logview_manager_set_active_log (manager, log); } } else { data = g_slice_new0 (CreateCBData); data->manager = manager; data->set_active = set_active; data->is_multiple = is_multiple; data->file = g_object_ref (file); logview_log_create_from_gfile (file, create_log_cb, data); } g_free (file_uri); }
static void row_expanded_cb (GtkTreeView *view, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { LogviewLoglist *list = user_data; LogviewLog *log; gtk_tree_model_get (GTK_TREE_MODEL (list->priv->model), iter, LOG_OBJECT, &log, -1); if (!logview_manager_log_is_active (list->priv->manager, log)) { logview_manager_set_active_log (list->priv->manager, log); } g_object_unref (log); }
static void create_log_cb (LogviewLog *log, GError *error, gpointer user_data) { CreateCBData *data = user_data; if (log) { char *log_uri; LogviewPrefs *prefs; GFile *file; log_uri = logview_log_get_uri (log); /* creation went well, store the log and notify */ g_hash_table_insert (data->manager->priv->logs, log_uri, log); prefs = logview_prefs_get (); file = logview_log_get_gfile (log); logview_prefs_store_log (prefs, file); g_object_unref (file); g_signal_emit (data->manager, signals[LOG_ADDED], 0, log, NULL); if (data->set_active) { logview_manager_set_active_log (data->manager, log); } } else { char *path; /* notify the error */ path = g_file_get_path (data->file); if (!data->is_multiple) { logview_app_add_error (logview_app_get (), path, error->message); } else { char **error_arr = g_new0 (char *, 3); error_arr[0] = g_strdup (path); error_arr[1] = g_strdup (error->message); error_arr[2] = NULL; g_ptr_array_add (op->errors, error_arr); } g_free (path); } if (data->is_multiple) { op->current++; if (op->total == op->current) { logview_app_add_errors (logview_app_get (), op->errors); multiple_creation_op_free (op); op = NULL; } } g_object_unref (data->file); g_slice_free (CreateCBData, data); }