From e76bb4ae443d39158d0ba1427b3c228d97fab03b Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Sat, 8 Jul 2023 13:10:37 -0700 Subject: [PATCH] sysprof: implement metadata dialog So users can see what data is captured in the file and passed along. --- src/sysprof/meson.build | 1 + src/sysprof/sysprof-metadata-dialog.c | 129 +++++++++++++++++++++++++ src/sysprof/sysprof-metadata-dialog.h | 36 +++++++ src/sysprof/sysprof-metadata-dialog.ui | 108 +++++++++++++++++++++ src/sysprof/sysprof-window.c | 18 ++++ src/sysprof/sysprof-window.ui | 1 + src/sysprof/sysprof.gresource.xml | 1 + 7 files changed, 294 insertions(+) create mode 100644 src/sysprof/sysprof-metadata-dialog.c create mode 100644 src/sysprof/sysprof-metadata-dialog.h create mode 100644 src/sysprof/sysprof-metadata-dialog.ui diff --git a/src/sysprof/meson.build b/src/sysprof/meson.build index fb21b295..10504714 100644 --- a/src/sysprof/meson.build +++ b/src/sysprof/meson.build @@ -4,6 +4,7 @@ sysprof_sources = [ 'sysprof-files-dialog.c', 'sysprof-greeter.c', 'sysprof-recording-pad.c', + 'sysprof-metadata-dialog.c', 'sysprof-window.c', ] diff --git a/src/sysprof/sysprof-metadata-dialog.c b/src/sysprof/sysprof-metadata-dialog.c new file mode 100644 index 00000000..a57431e1 --- /dev/null +++ b/src/sysprof/sysprof-metadata-dialog.c @@ -0,0 +1,129 @@ +/* sysprof-metadata-dialog.c + * + * Copyright 2023 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "config.h" + +#include "sysprof-metadata-dialog.h" + +struct _SysprofMetadataDialog +{ + AdwWindow parent_instance; + + SysprofDocument *document; +}; + +enum { + PROP_0, + PROP_DOCUMENT, + N_PROPS +}; + +G_DEFINE_FINAL_TYPE (SysprofMetadataDialog, sysprof_metadata_dialog, ADW_TYPE_WINDOW) + +static GParamSpec *properties [N_PROPS]; + +static void +sysprof_metadata_dialog_dispose (GObject *object) +{ + SysprofMetadataDialog *self = (SysprofMetadataDialog *)object; + + gtk_widget_dispose_template (GTK_WIDGET (self), SYSPROF_TYPE_METADATA_DIALOG); + + g_clear_object (&self->document); + + G_OBJECT_CLASS (sysprof_metadata_dialog_parent_class)->dispose (object); +} + +static void +sysprof_metadata_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + SysprofMetadataDialog *self = SYSPROF_METADATA_DIALOG (object); + + switch (prop_id) + { + case PROP_DOCUMENT: + g_value_set_object (value, self->document); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +sysprof_metadata_dialog_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + SysprofMetadataDialog *self = SYSPROF_METADATA_DIALOG (object); + + switch (prop_id) + { + case PROP_DOCUMENT: + self->document = g_value_dup_object (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +sysprof_metadata_dialog_class_init (SysprofMetadataDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = sysprof_metadata_dialog_dispose; + object_class->get_property = sysprof_metadata_dialog_get_property; + object_class->set_property = sysprof_metadata_dialog_set_property; + + properties[PROP_DOCUMENT] = + g_param_spec_object ("document", NULL, NULL, + SYSPROF_TYPE_DOCUMENT, + (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/sysprof-metadata-dialog.ui"); + + g_type_ensure (SYSPROF_TYPE_DOCUMENT_METADATA); +} + +static void +sysprof_metadata_dialog_init (SysprofMetadataDialog *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); +} + +GtkWidget * +sysprof_metadata_dialog_new (SysprofDocument *document) +{ + g_return_val_if_fail (SYSPROF_IS_DOCUMENT (document), NULL); + + return g_object_new (SYSPROF_TYPE_METADATA_DIALOG, + "document", document, + NULL); +} + diff --git a/src/sysprof/sysprof-metadata-dialog.h b/src/sysprof/sysprof-metadata-dialog.h new file mode 100644 index 00000000..cab38a4f --- /dev/null +++ b/src/sysprof/sysprof-metadata-dialog.h @@ -0,0 +1,36 @@ +/* sysprof-metadata-dialog.h + * + * Copyright 2023 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#pragma once + +#include + +#include + +G_BEGIN_DECLS + +#define SYSPROF_TYPE_METADATA_DIALOG (sysprof_metadata_dialog_get_type()) + +G_DECLARE_FINAL_TYPE (SysprofMetadataDialog, sysprof_metadata_dialog, SYSPROF, METADATA_DIALOG, AdwWindow) + +GtkWidget *sysprof_metadata_dialog_new (SysprofDocument *document); + +G_END_DECLS + diff --git a/src/sysprof/sysprof-metadata-dialog.ui b/src/sysprof/sysprof-metadata-dialog.ui new file mode 100644 index 00000000..037dfd2a --- /dev/null +++ b/src/sysprof/sysprof-metadata-dialog.ui @@ -0,0 +1,108 @@ + + + + + diff --git a/src/sysprof/sysprof-window.c b/src/sysprof/sysprof-window.c index 3b625466..9dde2db6 100644 --- a/src/sysprof/sysprof-window.c +++ b/src/sysprof/sysprof-window.c @@ -25,6 +25,7 @@ #include #include "sysprof-files-dialog.h" +#include "sysprof-metadata-dialog.h" #include "sysprof-window.h" struct _SysprofWindow @@ -110,6 +111,22 @@ sysprof_window_show_embedded_files_action (GtkWidget *widget, gtk_window_present (GTK_WINDOW (dialog)); } +static void +sysprof_window_show_metadata_action (GtkWidget *widget, + const char *action_name, + GVariant *param) +{ + SysprofWindow *self = (SysprofWindow *)widget; + GtkWidget *dialog; + + g_assert (SYSPROF_IS_WINDOW (self)); + g_assert (SYSPROF_IS_DOCUMENT (self->document)); + + dialog = sysprof_metadata_dialog_new (self->document); + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (self)); + gtk_window_present (GTK_WINDOW (dialog)); +} + static void sysprof_window_set_document (SysprofWindow *self, SysprofDocument *document) @@ -205,6 +222,7 @@ sysprof_window_class_init (SysprofWindowClass *klass) gtk_widget_class_install_action (widget_class, "win.open-capture", NULL, sysprof_window_open_capture_action); gtk_widget_class_install_action (widget_class, "capture.show-embedded-files", NULL, sysprof_window_show_embedded_files_action); + gtk_widget_class_install_action (widget_class, "capture.show-metadata", NULL, sysprof_window_show_metadata_action); g_type_ensure (SYSPROF_TYPE_DOCUMENT); g_type_ensure (SYSPROF_TYPE_SESSION); diff --git a/src/sysprof/sysprof-window.ui b/src/sysprof/sysprof-window.ui index d6c78c2a..93760f8e 100644 --- a/src/sysprof/sysprof-window.ui +++ b/src/sysprof/sysprof-window.ui @@ -142,6 +142,7 @@ Show Embedded Metadata… + capture.show-metadata
diff --git a/src/sysprof/sysprof.gresource.xml b/src/sysprof/sysprof.gresource.xml index 53f801ac..dfd45854 100644 --- a/src/sysprof/sysprof.gresource.xml +++ b/src/sysprof/sysprof.gresource.xml @@ -5,6 +5,7 @@ gtk/menus.ui sysprof-files-dialog.ui sysprof-greeter.ui + sysprof-metadata-dialog.ui sysprof-recording-pad.ui sysprof-window.ui