libsysprof-ui: try harder to setup best-fit on load

This commit is contained in:
Christian Hergert
2019-05-17 11:02:28 -07:00
parent d03aa85864
commit 71b981aac1

View File

@ -61,6 +61,8 @@ typedef struct
GtkStackSwitcher *stack_switcher;
guint busy;
guint needs_fit : 1;
} SysprofCaptureViewPrivate;
typedef struct
@ -94,6 +96,17 @@ load_async_free (gpointer data)
}
}
static gboolean
do_best_fit_in_idle (gpointer user_data)
{
SysprofCaptureView *self = user_data;
if (gtk_widget_get_visible (GTK_WIDGET (self)))
sysprof_capture_view_fit_to_width (self);
return G_SOURCE_REMOVE;
}
SysprofMarkStat *
_sysprof_mark_stat_new (const gchar *name)
{
@ -471,6 +484,8 @@ sysprof_capture_view_scan_finish (SysprofCaptureView *self,
add_marks_to_details (self);
priv->needs_fit = TRUE;
return g_task_propagate_boolean (G_TASK (result), error);
}
@ -716,17 +731,6 @@ set_use_underline_cb (GtkWidget *widget,
}
}
static gboolean
do_best_fit_in_idle (gpointer user_data)
{
SysprofCaptureView *self = user_data;
if (gtk_widget_get_visible (GTK_WIDGET (self)))
sysprof_capture_view_fit_to_width (self);
return G_SOURCE_REMOVE;
}
static void
sysprof_capture_view_map (GtkWidget *widget)
{
@ -737,7 +741,7 @@ sysprof_capture_view_map (GtkWidget *widget)
GTK_WIDGET_CLASS (sysprof_capture_view_parent_class)->map (widget);
if (priv->reader != NULL)
if (priv->needs_fit)
g_timeout_add_full (G_PRIORITY_LOW,
25,
do_best_fit_in_idle,
@ -950,11 +954,22 @@ sysprof_capture_view_fit_to_width (SysprofCaptureView *self)
g_return_if_fail (SYSPROF_IS_CAPTURE_VIEW (self));
if (priv->reader == NULL)
return;
duration = priv->features.end_time - priv->features.begin_time;
g_print ("DURATION: %ld\n", duration);
if (duration <= 0)
return;
priv->needs_fit = FALSE;
/* Trim a bit off the width to avoid drawing past edges */
gtk_widget_get_allocation (GTK_WIDGET (self), &alloc);
width = MAX (100, alloc.width - 25);
duration = priv->features.end_time - priv->features.begin_time;
zoom = sysprof_zoom_manager_fit_zoom_for_duration (priv->zoom_manager, duration, width);
sysprof_zoom_manager_set_zoom (priv->zoom_manager, zoom);
}