memprofpage: port to GTK 4

This commit is contained in:
Christian Hergert
2021-09-30 18:17:30 -07:00
parent 0de9db52da
commit 6cc12c0779
2 changed files with 33 additions and 50 deletions

View File

@ -58,10 +58,10 @@ typedef struct
GtkTreeViewColumn *function_size_column; GtkTreeViewColumn *function_size_column;
GtkCellRendererText *function_size_cell; GtkCellRendererText *function_size_cell;
GtkStack *stack; GtkStack *stack;
GtkRadioButton *summary; GtkCheckButton *summary;
GtkRadioButton *all_allocs; GtkCheckButton *all_allocs;
GtkRadioButton *temp_allocs; GtkCheckButton *temp_allocs;
GtkRadioButton *leaked_allocs_button; GtkCheckButton *leaked_allocs_button;
GtkLabel *temp_allocs_count; GtkLabel *temp_allocs_count;
GtkLabel *num_allocs; GtkLabel *num_allocs;
GtkLabel *leaked_allocs; GtkLabel *leaked_allocs;
@ -173,6 +173,7 @@ update_summary (SysprofMemprofPage *self,
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
SysprofMemprofStats stats; SysprofMemprofStats stats;
g_autoptr(GString) str = NULL; g_autoptr(GString) str = NULL;
GtkWidget *child;
g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
g_assert (SYSPROF_IS_MEMPROF_PROFILE (profile)); g_assert (SYSPROF_IS_MEMPROF_PROFILE (profile));
@ -193,9 +194,8 @@ update_summary (SysprofMemprofPage *self,
gtk_label_set_label (priv->temp_allocs_count, str->str); gtk_label_set_label (priv->temp_allocs_count, str->str);
g_string_truncate (str, 0); g_string_truncate (str, 0);
gtk_container_foreach (GTK_CONTAINER (priv->by_size), while ((child = gtk_widget_get_first_child (GTK_WIDGET (priv->by_size))))
(GtkCallback)gtk_widget_destroy, gtk_list_box_remove (priv->by_size, child);
NULL);
for (guint i = 0; i < G_N_ELEMENTS (stats.by_size); i++) for (guint i = 0; i < G_N_ELEMENTS (stats.by_size); i++)
{ {
@ -266,13 +266,11 @@ update_summary (SysprofMemprofPage *self,
gtk_level_bar_set_value (GTK_LEVEL_BAR (prog), gtk_level_bar_set_value (GTK_LEVEL_BAR (prog),
stats.by_size[i].n_allocs); stats.by_size[i].n_allocs);
gtk_container_add (GTK_CONTAINER (row), box); gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), box);
gtk_container_add (GTK_CONTAINER (box), title); gtk_box_append (GTK_BOX (box), title);
gtk_container_add (GTK_CONTAINER (box), prog); gtk_box_append (GTK_BOX (box), prog);
gtk_container_add (GTK_CONTAINER (box), subtitle); gtk_box_append (GTK_BOX (box), subtitle);
gtk_container_add (GTK_CONTAINER (priv->by_size), row); gtk_list_box_append (priv->by_size, row);
gtk_widget_show_all (row);
} }
} }
@ -845,7 +843,6 @@ descendants_view_move_cursor_cb (GtkTreeView *descendants_view,
} }
} }
#if 0
static void static void
copy_tree_view_selection_cb (GtkTreeModel *model, copy_tree_view_selection_cb (GtkTreeModel *model,
GtkTreePath *path, GtkTreePath *path,
@ -887,7 +884,7 @@ static void
copy_tree_view_selection (GtkTreeView *tree_view) copy_tree_view_selection (GtkTreeView *tree_view)
{ {
g_autoptr(GString) str = NULL; g_autoptr(GString) str = NULL;
GtkClipboard *clipboard; GdkClipboard *clipboard;
g_assert (GTK_IS_TREE_VIEW (tree_view)); g_assert (GTK_IS_TREE_VIEW (tree_view));
@ -896,25 +893,25 @@ copy_tree_view_selection (GtkTreeView *tree_view)
copy_tree_view_selection_cb, copy_tree_view_selection_cb,
str); str);
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view), GDK_SELECTION_CLIPBOARD); clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view));
gtk_clipboard_set_text (clipboard, str->str, str->len); gdk_clipboard_set_text (clipboard, str->str);
} }
/* use widget action */
static void static void
sysprof_memprof_page_copy_cb (GtkWidget *widget, sysprof_memprof_page_copy_cb (GtkWidget *widget,
SysprofMemprofPage *self) const char *action_name,
GVariant *param)
{ {
SysprofMemprofPage *self = (SysprofMemprofPage *)widget;
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
GtkWidget *toplevel;
GtkWidget *focus; GtkWidget *focus;
GtkRoot *toplevel;
g_assert (GTK_IS_WIDGET (widget));
g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
if (!(toplevel = gtk_widget_get_toplevel (widget)) || if (!(toplevel = gtk_widget_get_root (widget)) ||
!GTK_IS_WINDOW (toplevel) || !GTK_IS_ROOT (toplevel) ||
!(focus = gtk_window_get_focus (GTK_WINDOW (toplevel)))) !(focus = gtk_root_get_focus (toplevel)))
return; return;
if (focus == GTK_WIDGET (priv->descendants_view)) if (focus == GTK_WIDGET (priv->descendants_view))
@ -924,7 +921,6 @@ sysprof_memprof_page_copy_cb (GtkWidget *widget,
else if (focus == GTK_WIDGET (priv->functions_view)) else if (focus == GTK_WIDGET (priv->functions_view))
copy_tree_view_selection (priv->functions_view); copy_tree_view_selection (priv->functions_view);
} }
#endif
static void static void
sysprof_memprof_page_generate_cb (GObject *object, sysprof_memprof_page_generate_cb (GObject *object,
@ -1017,14 +1013,14 @@ do_allocs (SysprofMemprofPage *self,
static void static void
mode_notify_active (SysprofMemprofPage *self, mode_notify_active (SysprofMemprofPage *self,
GParamSpec *pspec, GParamSpec *pspec,
GtkRadioButton *button) GtkCheckButton *button)
{ {
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
g_assert (GTK_IS_RADIO_BUTTON (button)); g_assert (GTK_IS_CHECK_BUTTON (button));
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) if (gtk_check_button_get_active (GTK_CHECK_BUTTON (button)))
{ {
if (button == priv->summary) if (button == priv->summary)
do_allocs (self, SYSPROF_MEMPROF_MODE_SUMMARY); do_allocs (self, SYSPROF_MEMPROF_MODE_SUMMARY);
@ -1108,7 +1104,6 @@ sysprof_memprof_page_class_init (SysprofMemprofPageClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
SysprofPageClass *page_class = SYSPROF_PAGE_CLASS (klass); SysprofPageClass *page_class = SYSPROF_PAGE_CLASS (klass);
GtkBindingSet *bindings;
object_class->finalize = sysprof_memprof_page_finalize; object_class->finalize = sysprof_memprof_page_finalize;
object_class->get_property = sysprof_memprof_page_get_property; object_class->get_property = sysprof_memprof_page_get_property;
@ -1155,24 +1150,12 @@ sysprof_memprof_page_class_init (SysprofMemprofPageClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, leaked_allocs_button); gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, leaked_allocs_button);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, peak_allocs); gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, peak_allocs);
bindings = gtk_binding_set_by_class (klass); gtk_widget_class_install_action (widget_class, "page.copy", NULL, sysprof_memprof_page_copy_cb);
gtk_binding_entry_add_signal (bindings, GDK_KEY_Left, GDK_MOD1_MASK, "go-previous", 0);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_c, GDK_CONTROL_MASK, "page.copy", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_Left, GDK_ALT_MASK, "go-previous", NULL);
g_type_ensure (SYSPROF_TYPE_CELL_RENDERER_PERCENT); g_type_ensure (SYSPROF_TYPE_CELL_RENDERER_PERCENT);
#if 0
/* Use class shortcut/actions */
DzlShortcutController *controller;
controller = dzl_shortcut_controller_find (GTK_WIDGET (self));
dzl_shortcut_controller_add_command_callback (controller,
"org.gnome.sysprof3.capture.copy",
"<Control>c",
DZL_SHORTCUT_PHASE_BUBBLE,
(GtkCallback) sysprof_memprof_page_copy_cb,
self,
NULL);
#endif
} }
static void static void

View File

@ -19,7 +19,7 @@
<class name="linked"/> <class name="linked"/>
</style> </style>
<child> <child>
<object class="GtkRadioButton" id="summary"> <object class="GtkCheckButton" id="summary">
<property name="label" translatable="yes">Summary</property> <property name="label" translatable="yes">Summary</property>
<property name="draw-indicator">false</property> <property name="draw-indicator">false</property>
<property name="visible">true</property> <property name="visible">true</property>
@ -27,7 +27,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkRadioButton" id="all_allocs"> <object class="GtkCheckButton" id="all_allocs">
<property name="label" translatable="yes">All Allocations</property> <property name="label" translatable="yes">All Allocations</property>
<property name="draw-indicator">false</property> <property name="draw-indicator">false</property>
<property name="visible">true</property> <property name="visible">true</property>
@ -36,7 +36,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkRadioButton" id="temp_allocs"> <object class="GtkCheckButton" id="temp_allocs">
<property name="label" translatable="yes">Temporary Allocations</property> <property name="label" translatable="yes">Temporary Allocations</property>
<property name="draw-indicator">false</property> <property name="draw-indicator">false</property>
<property name="visible">true</property> <property name="visible">true</property>