libsysprof-ui: reload logs when selection changes

This commit is contained in:
Christian Hergert
2019-05-26 23:44:13 -07:00
parent 5f3a9c0a72
commit 7a0b5ed404
3 changed files with 82 additions and 22 deletions

View File

@ -580,11 +580,12 @@ sysprof_capture_view_load_logs_cb (GObject *object,
GAsyncResult *result,
gpointer user_data)
{
g_autoptr(SysprofLogModel) model = NULL;
SysprofLogsView *logs_view = (SysprofLogsView *)object;
g_autoptr(GError) error = NULL;
g_autoptr(GTask) task = user_data;
LoadAsync *state;
g_assert (SYSPROF_IS_LOGS_VIEW (logs_view));
g_assert (G_IS_ASYNC_RESULT (result));
g_assert (G_IS_TASK (task));
@ -593,13 +594,8 @@ sysprof_capture_view_load_logs_cb (GObject *object,
g_assert (state->reader != NULL);
g_assert (state->n_active > 0);
if ((model = sysprof_log_model_new_finish (result, &error)))
{
SysprofCaptureView *self = g_task_get_source_object (task);
SysprofCaptureViewPrivate *priv = sysprof_capture_view_get_instance_private (self);
sysprof_logs_view_set_model (priv->logs_view, model);
}
if (!sysprof_logs_view_load_finish (logs_view, result, &error))
g_warning ("Failed to load logs: %s", error->message);
state->n_active--;
@ -646,11 +642,12 @@ sysprof_capture_view_load_scan_cb (GObject *object,
if (priv->features.has_logs)
{
state->n_active++;
sysprof_log_model_new_async (state->reader,
state->selection,
g_task_get_cancellable (task),
sysprof_capture_view_load_logs_cb,
g_object_ref (task));
sysprof_logs_view_load_async (priv->logs_view,
state->reader,
state->selection,
g_task_get_cancellable (task),
sysprof_capture_view_load_logs_cb,
g_object_ref (task));
}
sysprof_visualizer_view_set_reader (priv->visualizer_view, state->reader);
@ -765,6 +762,10 @@ sysprof_capture_view_selection_changed_cb (SysprofCaptureView *self,
priv->reader,
selection,
NULL, NULL, NULL);
sysprof_logs_view_load_async (priv->logs_view,
priv->reader,
selection,
NULL, NULL, NULL);
sysprof_marks_view_load_async (priv->marks_view,
priv->reader,
selection,

View File

@ -49,12 +49,64 @@ sysprof_logs_view_init (SysprofLogsView *self)
gtk_widget_init_template (GTK_WIDGET (self));
}
void
sysprof_logs_view_set_model (SysprofLogsView *self,
SysprofLogModel *model)
static void
sysprof_logs_view_load_cb (GObject *object,
GAsyncResult *result,
gpointer user_data)
{
g_return_if_fail (SYSPROF_IS_LOGS_VIEW (self));
g_return_if_fail (!model || SYSPROF_IS_LOG_MODEL (model));
g_autoptr(SysprofLogModel) model = NULL;
g_autoptr(GTask) task = user_data;
g_autoptr(GError) error = NULL;
gtk_tree_view_set_model (GTK_TREE_VIEW (self->tree_view), GTK_TREE_MODEL (model));
}
g_assert (G_IS_ASYNC_RESULT (result));
g_assert (G_IS_TASK (task));
if (!(model = sysprof_log_model_new_finish (result, &error)))
{
g_task_return_error (task, g_steal_pointer (&error));
}
else
{
SysprofLogsView *self;
self = g_task_get_source_object (task);
gtk_tree_view_set_model (GTK_TREE_VIEW (self->tree_view), GTK_TREE_MODEL (model));
g_task_return_boolean (task, TRUE);
}
}
void
sysprof_logs_view_load_async (SysprofLogsView *self,
SysprofCaptureReader *reader,
SysprofSelection *selection,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
g_autoptr(GTask) task = NULL;
g_return_if_fail (SYSPROF_IS_LOGS_VIEW (self));
g_return_if_fail (reader != NULL);
g_return_if_fail (!selection || SYSPROF_IS_SELECTION (selection));
g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_source_tag (task, sysprof_logs_view_load_async);
sysprof_log_model_new_async (reader,
selection,
cancellable,
sysprof_logs_view_load_cb,
g_steal_pointer (&task));
}
gboolean
sysprof_logs_view_load_finish (SysprofLogsView *self,
GAsyncResult *result,
GError **error)
{
g_return_val_if_fail (SYSPROF_IS_LOGS_VIEW (self), FALSE);
g_return_val_if_fail (G_IS_TASK (result), FALSE);
return g_task_propagate_boolean (G_TASK (result), error);
}

View File

@ -30,7 +30,14 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (SysprofLogsView, sysprof_logs_view, SYSPROF, LOGS_VIEW, GtkBin)
void sysprof_logs_view_set_model (SysprofLogsView *self,
SysprofLogModel *model);
void sysprof_logs_view_load_async (SysprofLogsView *self,
SysprofCaptureReader *reader,
SysprofSelection *selection,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean sysprof_logs_view_load_finish (SysprofLogsView *self,
GAsyncResult *result,
GError **error);
G_END_DECLS