Projects
openEuler:Mainline
sysprof
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 2
View file
_service:tar_scm:sysprof.spec
Changed
@@ -1,22 +1,39 @@ -%global glib2_version 2.67.4 +%global glib2_version 2.73.0 Name: sysprof -Version: 3.44.0 +Version: 3.46.0 Release: 1 Summary: A system-wide Linux profiler License: GPLv3+ URL: http://www.sysprof.com -Source0: https://download.gnome.org/sources/sysprof/3.44/sysprof-%{version}.tar.xz - -BuildRequires: gcc gcc-c++ gettext itstool meson json-glib-devel libunwind-devel -BuildRequires: libdazzle-devel systemd-devel polkit-devel libappstream-glib desktop-file-utils -BuildRequires: glib2-devel >= %{glib2_version} pkgconfig(gtk+-3.0) >= 3.22.0 +Source0: https://download.gnome.org/sources/sysprof/3.46/sysprof-%{version}.tar.xz + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: gettext +BuildRequires: itstool +BuildRequires: meson +BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gio-unix-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(gtk4) +BuildRequires: pkgconfig(json-glib-1.0) +BuildRequires: pkgconfig(libadwaita-1) +BuildRequires: pkgconfig(libdazzle-1.0) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(libunwind-generic) +BuildRequires: pkgconfig(polkit-gobject-1) +BuildRequires: pkgconfig(systemd) +BuildRequires: libappstream-glib desktop-file-utils Requires: glib2%{?_isa} >= %{glib2_version} Requires: hicolor-icon-theme Requires: %{name}-cli%{?_isa} = %{version}-%{release} Requires: libsysprof-ui%{?_isa} = %{version}-%{release} +Provides: %{name}-agent%{?_isa} = %{version}-%{release} + %description Sysprof is a sampling CPU profiler for Linux that collects accurate. @@ -47,6 +64,7 @@ %prep %autosetup -p1 + %build %meson %meson_build @@ -63,10 +81,11 @@ %license COPYING %doc NEWS AUTHORS %{_bindir}/sysprof -%{_datadir}/applications/org.gnome.Sysprof3.desktop -%{_datadir}/glib-2.0/schemas/org.gnome.sysprof3.gschema.xml +%{_bindir}/sysprof-agent +%{_datadir}/applications/org.gnome.Sysprof.desktop +#%%{_datadir}/glib-2.0/schemas/org.gnome.sysprof3.gschema.xml %{_datadir}/icons/hicolor/*/*/* -%{_datadir}/metainfo/org.gnome.Sysprof3.appdata.xml +%{_datadir}/metainfo/org.gnome.Sysprof.appdata.xml %{_datadir}/mime/packages/sysprof-mime.xml %files cli -f %{name}.lang @@ -76,6 +95,7 @@ %{_libdir}/libsysprof-memory-4.so %{_libdir}/libsysprof-speedtrack-4.so %{_libexecdir}/sysprofd +%{_datadir}/dbus-1/interfaces/org.gnome.Sysprof.Agent.xml %{_datadir}/dbus-1/interfaces/org.gnome.Sysprof2.xml %{_datadir}/dbus-1/interfaces/org.gnome.Sysprof3.Profiler.xml %{_datadir}/dbus-1/interfaces/org.gnome.Sysprof3.Service.xml @@ -89,20 +109,25 @@ %files -n libsysprof-ui %license COPYING -%{_libdir}/libsysprof-ui-4.so +%{_libdir}/libsysprof-ui-5.so %files devel %license src/libsysprof-capture/COPYING %{_includedir}/sysprof-4/ +%{_includedir}/sysprof-ui-5/ %{_libdir}/pkgconfig/sysprof-4.pc %{_libdir}/pkgconfig/sysprof-capture-4.pc -%{_libdir}/pkgconfig/sysprof-ui-4.pc +#%%{_libdir}/pkgconfig/sysprof-ui-4.pc +%{_libdir}/pkgconfig/sysprof-ui-5.pc %{_libdir}/libsysprof-capture-4.a %files help %doc README.md %changelog +* Mon Jan 02 2023 lin zhang <lin.zhang@turbolinux.com.cn> - 3.46.0-1 +- Update to 3.46.0 + * Wed Apr 20 2022 dillon chen <dillon.chen@gmail.com> - 3.44.0-1 - Update to 3.44.0 @@ -113,4 +138,4 @@ - upgrade to 3.38.1 * Sat Sep 19 2020 chengguipeng<chengguipeng1@huawei.com> - 3.36.0-1 -- Package init +- Package init
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="tar_scm"> <param name="scm">git</param> <param name="url">git@gitee.com:src-openeuler/sysprof.git</param> - <param name="revision">a8640507467f6d19de6e55f7a40ddcd642525510</param> + <param name="revision">master</param> <param name="exclude">*</param> <param name="extract">*</param> </service>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/build-aux/flatpak/org.gnome.Sysprof3.json
Deleted
@@ -1,133 +0,0 @@ -{ - "app-id" : "org.gnome.Sysprof3", - "runtime" : "org.gnome.Platform", - "runtime-version" : "master", - "sdk" : "org.gnome.Sdk", - "command" : "sysprof", - "tags" : - "nightly" - , - "desktop-file-name-prefix" : "(Nightly) ", - "finish-args" : - "--require-version=0.10.0", - "--allow=devel", - "--share=ipc", - "--socket=x11", - "--socket=wayland", - "--talk-name=org.gtk.vfs.*", - "--system-talk-name=org.freedesktop.PolicyKit1", - "--system-talk-name=org.gnome.Sysprof3", - "--filesystem=home", - "--filesystem=host", - "--filesystem=xdg-run/dconf", - "--filesystem=~/.config/dconf:ro", - "--talk-name=ca.desrt.dconf", - "--env=DCONF_USER_CONFIG_DIR=.config/dconf" - , - "build-options" : { - "cflags" : "-O2 -g", - "cxxflags" : "-O2 -g", - "env" : { - "V" : "1" - } - }, - "cleanup" : - "/include", - "/lib/pkgconfig", - "/share/pkgconfig", - "/share/aclocal", - "/man", - "/share/man", - "/share/gtk-doc", - "/share/doc", - "/share/vala", - "/share/bash-completions", - "*.la", - "*.a" - , - "modules" : - { - "name": "intltool", - "cleanup": "*" , - "sources": - { - "type": "archive", - "url": "https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz", - "sha256": "67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd" - } - - }, - { - "name" : "polkit", - "config-opts" : - "--disable-polkitd", - "--disable-man-pages", - "--disable-introspection", - "--disable-examples", - "--disable-gtk-doc", - "--disable-libelogind", - "--disable-libsystemd-login", - "--with-systemdsystemunitdir=no", - "--with-authdb=dummy", - "--with-authfw=none" - , - "rm-configure" : true, - "cleanup" : - "/bin/*", - "/etc/pam.d", - "/etc/dbus-1", - "/share/dbus-1/system-services/*", - "/share/polkit-1/actions/*", - "/lib/polkit-1" - , - "sources" : - { - "type" : "archive", - "url" : "https://www.freedesktop.org/software/polkit/releases/polkit-0.116.tar.gz", - "sha256" : "88170c9e711e8db305a12fdb8234fac5706c61969b94e084d0f117d8ec5d34b1" - }, - { - "type" : "patch", - "path" : "polkit-build-Add-option-to-build-without-polkitd.patch" - }, - { - "type" : "file", - "path" : "polkit-autogen", - "dest-filename" : "autogen.sh" - } - - }, - { - "name" : "libdazzle", - "config-opts" : - "--libdir=/app/lib", - "--buildtype=debugoptimized" - , - "buildsystem" : "meson", - "builddir" : true, - "sources" : - { - "type" : "git", - "url" : "https://gitlab.gnome.org/GNOME/libdazzle.git" - } - - }, - { - "name" : "sysprof", - "config-opts" : - "--libdir=/app/lib", - "--buildtype=debugoptimized", - "-Denable_gtk=true", - "-Dwith_sysprofd=host" - , - "buildsystem" : "meson", - "builddir" : true, - "sources" : - { - "type" : "git", - "url" : "https://gitlab.gnome.org/GNOME/sysprof.git" - } - - } - -}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/build-aux/meson
Deleted
-(directory)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/build-aux/meson/post_install.sh
Deleted
@@ -1,24 +0,0 @@ -#!/bin/sh - -if -z $MESON_INSTALL_PREFIX ; then - echo 'This is meant to be ran from Meson only!' - exit 1 -fi - -if -z $DESTDIR ; then - - echo 'Compiling GSchema' - glib-compile-schemas "$MESON_INSTALL_PREFIX/share/glib-2.0/schemas" - echo 'Updating mime database' - update-mime-database "$MESON_INSTALL_PREFIX/share/mime" - - if -e "$MESON_INSTALL_PREFIX/bin/sysprof" ; then - - echo 'Updating icon cache' - gtk-update-icon-cache -qtf "$MESON_INSTALL_PREFIX/share/icons/hicolor" - echo 'Updating desktop database' - update-desktop-database -q "$MESON_INSTALL_PREFIX/share/applications" - - fi - -fi
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/icons/scalable/apps
Deleted
-(directory)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/org.gnome.Sysprof3.appdata.xml.in
Deleted
@@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<component type="desktop-application"> - <id>org.gnome.Sysprof3.desktop</id> - <translation type="gettext">sysprof</translation> - <name>Sysprof</name> - <summary>Profile an application or entire system</summary> - <project_license>GPL-3.0+</project_license> - <project_group>GNOME</project_group> - <developer_name>The GNOME Foundation</developer_name> - - <description> - <p>Sysprof allows you to profile applications to aid in debugging and optimization.</p> - </description> - - <url type="homepage">https://wiki.gnome.org/Apps/Sysprof</url> - <url type="bugtracker">https://gitlab.gnome.org/GNOME/sysprof/issues</url> - <url type="donation">https://www.gnome.org/friends</url> - - <screenshots> - <screenshot type="default"> - <image>https://git.gnome.org/browse/sysprof/plain/data/screenshots/sysprof-main-window.png</image> - </screenshot> - </screenshots> - - <kudos> - <kudo>AppMenu</kudo> - <kudo>HiDpiIcon</kudo> - <kudo>ModernToolkit</kudo> - <kudo>UserDocs</kudo> - </kudos> - - <provides> - <binary>sysprof</binary> - <binary>sysprof-cli</binary> - <dbus type="system">org.gnome.Sysprof2</dbus> - <dbus type="system">org.gnome.Sysprof3</dbus> - </provides> - - <releases> - <release version="3.44.0" date="2022-03-18"/> - <release version="3.43.90" date="2022-03-07"/> - <release version="3.42.1" date="2021-11-04"/> - <release version="3.42.0" date="2021-09-21"/> - </releases> - - <metadata_license>CC0-1.0</metadata_license> - <update_contact>chergert_AT_redhat.com</update_contact> -</component>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/org.gnome.Sysprof3.desktop.in
Deleted
@@ -1,14 +0,0 @@ -Desktop Entry -Version=1.0 -Name=Sysprof -GenericName=Profiler -Comment=Profile an application or entire system. -Exec=sysprof %u -TryExec=sysprof -# Translators: Do NOT translate or transliterate this text (this is an icon file name)! -Icon=org.gnome.Sysprof -StartupNotify=true -Terminal=false -Type=Application -Categories=GNOME;GTK;Development; -MimeType=application/x-sysprof-capture;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/org.gnome.sysprof3.gschema.xml
Deleted
@@ -1,34 +0,0 @@ -<schemalist> - <schema id="org.gnome.sysprof3" path="/org/gnome/sysprof/" gettext-domain="sysprof"> - <key name="window-size" type="(ii)"> - <default>(-1, -1)</default> - <summary>Window size</summary> - <description>Window size (width and height).</description> - </key> - <key name="window-position" type="(ii)"> - <default>(-1,-1)</default> - <summary>Window position</summary> - <description>Window position (x and y).</description> - </key> - <key name="window-maximized" type="b"> - <default>true</default> - <summary>Window maximized</summary> - <description>Window maximized state</description> - </key> - <key name="last-spawn-argv" type="s"> - <default>''</default> - <summary>Last Spawn Program</summary> - <description>The last spawned program, which will be set in the UI upon restart of the application.</description> - </key> - <key name="last-spawn-inherit-env" type="b"> - <default>true</default> - <summary>Last Spawn Inherit Environment</summary> - <description>If the last spawned environment inherits the parent environment.</description> - </key> - <key name="last-spawn-env" type="as"> - <default></default> - <summary>Last Spawn Environment</summary> - <description>The last spawned environment, which will be set in the UI upon restart of the application.</description> - </key> - </schema> -</schemalist>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-time-label.ui
Deleted
@@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> -<interface> - <requires lib="gtk+" version="3.0"/> - <template class="SysprofTimeLabel" parent="GtkBox"> - <property name="can_focus">False</property> - <property name="spacing">2</property> - <child type="center"> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label">:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="minute"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label">00</property> - <property name="width_chars">2</property> - <property name="xalign">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="second"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label">00</property> - <property name="width_chars">2</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">4</property> - </packing> - </child> - </template> -</interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-window-settings.c
Deleted
@@ -1,175 +0,0 @@ -/* sysprof-window-settings.c - * - * Copyright 2016 Christian Hergert <chergert@redhat.com> - * - * 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 <http://www.gnu.org/licenses/>. - */ - -#include "sysprof-window.h" -#include "sysprof-window-settings.h" - -#define WINDOW_MIN_WIDTH 1200 -#define WINDOW_MIN_HEIGHT 700 -#define SAVE_TIMEOUT_SECS 1 - -static GSettings *settings; - -static gboolean -sysprof_window_settings__window_save_settings_cb (gpointer data) -{ - GtkWindow *window = data; - GdkRectangle geom; - gboolean maximized; - - g_assert (GTK_IS_WINDOW (window)); - g_assert (G_IS_SETTINGS (settings)); - - g_object_set_data (G_OBJECT (window), "SETTINGS_HANDLER_ID", NULL); - - gtk_window_get_size (window, &geom.width, &geom.height); - gtk_window_get_position (window, &geom.x, &geom.y); - maximized = gtk_window_is_maximized (window); - - g_settings_set (settings, "window-size", "(ii)", geom.width, geom.height); - g_settings_set (settings, "window-position", "(ii)", geom.x, geom.y); - g_settings_set_boolean (settings, "window-maximized", maximized); - - return G_SOURCE_REMOVE; -} - -static gboolean -sysprof_window_settings__window_configure_event (GtkWindow *window, - GdkEventConfigure *event) -{ - guint handler; - - g_assert (GTK_IS_WINDOW (window)); - g_assert (event != NULL); - g_assert (G_IS_SETTINGS (settings)); - - handler = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "SETTINGS_HANDLER_ID")); - - if (handler == 0) - { - handler = g_timeout_add_seconds (SAVE_TIMEOUT_SECS, - sysprof_window_settings__window_save_settings_cb, - window); - g_object_set_data (G_OBJECT (window), "SETTINGS_HANDLER_ID", GINT_TO_POINTER (handler)); - } - - return GDK_EVENT_PROPAGATE; -} - -static void -sysprof_window_settings__window_realize (GtkWindow *window) -{ - GtkApplication *app; - GdkRectangle geom = { 0 }; - gboolean maximized = FALSE; - GList *list; - guint count = 0; - - g_assert (GTK_IS_WINDOW (window)); - g_assert (G_IS_SETTINGS (settings)); - - g_settings_get (settings, "window-position", "(ii)", &geom.x, &geom.y); - g_settings_get (settings, "window-size", "(ii)", &geom.width, &geom.height); - g_settings_get (settings, "window-maximized", "b", &maximized); - - geom.width = MAX (geom.width, WINDOW_MIN_WIDTH); - geom.height = MAX (geom.height, WINDOW_MIN_HEIGHT); - gtk_window_set_default_size (window, geom.width, geom.height); - - /* - * If there are other windows currently visible other than this one, - * then ignore positioning and let the window manager decide. - */ - count = 0; - app = GTK_APPLICATION (g_application_get_default ()); - list = gtk_application_get_windows (app); - for (; list != NULL; list = list->next) - { - GtkWindow *ele = list->data; - - if (SYSPROF_IS_WINDOW (ele) && (ele != window) && - gtk_widget_get_visible (GTK_WIDGET (window))) - count++; - } - - if (count == 0) - gtk_window_move (window, geom.x, geom.y); - - if (maximized) - gtk_window_maximize (window); -} - -static void -sysprof_window_settings__window_destroy (GtkWindow *window) -{ - guint handler; - - g_assert (GTK_IS_WINDOW (window)); - g_assert (G_IS_SETTINGS (settings)); - - handler = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "SETTINGS_HANDLER_ID")); - - if (handler != 0) - { - g_source_remove (handler); - g_object_set_data (G_OBJECT (window), "SETTINGS_HANDLER_ID", NULL); - } - - g_signal_handlers_disconnect_by_func (window, - G_CALLBACK (sysprof_window_settings__window_configure_event), - NULL); - - g_signal_handlers_disconnect_by_func (window, - G_CALLBACK (sysprof_window_settings__window_destroy), - NULL); - - g_signal_handlers_disconnect_by_func (window, - G_CALLBACK (sysprof_window_settings__window_realize), - NULL); - - g_object_unref (settings); -} - -void -sysprof_window_settings_register (GtkWindow *window) -{ - if (settings == NULL) - { - settings = g_settings_new ("org.gnome.sysprof3"); - g_object_add_weak_pointer (G_OBJECT (settings), (gpointer *)&settings); - } - else - { - g_object_ref (settings); - } - - g_signal_connect (window, - "configure-event", - G_CALLBACK (sysprof_window_settings__window_configure_event), - NULL); - - g_signal_connect (window, - "destroy", - G_CALLBACK (sysprof_window_settings__window_destroy), - NULL); - - g_signal_connect (window, - "realize", - G_CALLBACK (sysprof_window_settings__window_realize), - NULL); -}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-window-settings.h
Deleted
@@ -1,30 +0,0 @@ -/* sysprof-window-settings.h - * - * Copyright 2016 Christian Hergert <chergert@redhat.com> - * - * 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 <http://www.gnu.org/licenses/>. - */ - -#ifndef SYSPROF_WINDOW_SETTINGS_H -#define SYSPROF_WINDOW_SETTINGS_H - -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -void sysprof_window_settings_register (GtkWindow *window); - -G_END_DECLS - -#endif /* SYSPROF_WINDOW_SETTINGS_H */
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/theme/Adwaita-shared.css
Deleted
@@ -1,18 +0,0 @@ -/* development styles */ -window.development-version headerbar { - background: transparent -gtk-icontheme("system-run-symbolic") 80% 0/128px 128px no-repeat, - linear-gradient(to left, - mix(@theme_fg_color, @theme_bg_color, 0.5) 0%, - @theme_bg_color 25%); - color: alpha(@theme_fg_color, 0.2); -} - -window.development-version headerbar box label { - color: @theme_fg_color; -} - -button.sysprofprofilermenubutton.popup.suggested-action:checked { - background: shade(@theme_selected_bg_color,0.9); - border: 1px solid shade(@theme_selected_bg_color, 0.8); - color: alpha(@theme_selected_fg_color,0.9); -}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/ui
Deleted
-(directory)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/ui/sysprof-window.ui
Deleted
@@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<interface> - <template class="SysprofWindow" parent="DzlApplicationWindow"> - <property name="default-height">750</property> - <property name="icon-name">org.gnome.Sysprof-symbolic</property> - <property name="show-menubar">false</property> - <child type="titlebar"> - <object class="GtkHeaderBar"> - <property name="show-close-button">true</property> - <property name="visible">true</property> - <property name="title" translatable="yes">Sysprof</property> - <child> - <object class="DzlMenuButton" id="menu_button"> - <property name="icon-name">open-menu-symbolic</property> - <property name="show-accels">true</property> - <property name="menu-id">win-menu</property> - <property name="visible">true</property> - <style> - <class name="image-button"/> - </style> - </object> - <packing> - <property name="pack-type">end</property> - </packing> - </child> - <child> - <object class="GtkButton" id="open_button"> - <property name="label" translatable="yes">_Open</property> - <property name="action-name">app.open-capture</property> - <property name="use-underline">true</property> - <property name="tooltip-text" translatable="yes">Open Recording… (Ctrl+O)</property> - <property name="visible">true</property> - </object> - <packing> - <property name="pack-type">start</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="stat_label"> - <property name="margin-end">12</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="pack-type">end</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - <child> - <object class="SysprofNotebook" id="notebook"> - <property name="visible">true</property> - <child> - <object class="SysprofDisplay"> - <property name="visible">true</property> - </object> - </child> - </object> - </child> - </template> -</interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/subprojects
Deleted
-(directory)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/subprojects/libdazzle.wrap
Deleted
@@ -1,5 +0,0 @@ -wrap-file -directory=libdazzle-3.35.3 -source_url=https://download.gnome.org/sources/libdazzle/3.35/libdazzle-3.35.3.tar.xz -source_filename=libdazzle-3.35.3.tar.xz -source_hash=df67f7a68096e4b33a70ee0bad14cd8a6778425deb087879b5cd8fef8f671304
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/.gitlab-ci.yml
Added
@@ -0,0 +1,20 @@ +include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml' + +flatpak: + extends: .flatpak + timeout: 60m + variables: + GIT_SUBMODULE_STRATEGY: normal + + # Replace with your manifest path + MANIFEST_PATH: "org.gnome.Sysprof.Devel.json" + RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo" + # Replace with your application name, as written in the manifest + FLATPAK_MODULE: "sysprof" + APP_ID: "org.gnome.Sysprof.Devel" + BUNDLE: "sysprof-git.flatpak" + +nightly: + extends: '.publish_nightly' + needs: + - 'flatpak'
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/NEWS -> _service:tar_scm:sysprof-3.46.0.tar.xz/NEWS
Changed
@@ -1,3 +1,42 @@ +Overview of changes in Sysprof 3.46.0 +===================================== + + * sysprof-cli is now statically linked + * sysprof-agent now has a --decode option to decode symbols at the end + of a capture, similar to what sysprof-cli can do. + * A crash in the Elf symbol resolver has been fixed. + * Translation updates + +Overview of changes in Sysprof 3.45.1 +===================================== + +This release of Sysprof is a development release and is not intended for +end users. + + * Addition of sysprof-agent to aid in cross-container profiling and + instrumentation. (Use -Dagent=(true|false) to control + * Additional porting to libadwaita + * Remove unused settings schemas + * Nightly Flatpak builds now use org.gnome.Sysprof.Devel as the + application-id + * The application now uses org.gnome.Sysprof as the application-id + instead of org.gnome.Sysprof3. + * Icon updates + * Translation updates + +Overview of changes in Sysprof 3.45.0 +===================================== + +This release of Sysprof is a development release and is not intended for +end users. + + * Initial port to GTK 4 + * A number of build configuration options where simplified and will need + changing by distributions to match the new, more consistent, naming. + * Libadwaita has been added as a dependency + * The profiler assistant has received styling changes + * libsysprof-ui had it's ABI bumped to libsysprof-ui-5 which targets GTK 4. + Overview of changes in Sysprof 3.44.0 =====================================
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/README.md -> _service:tar_scm:sysprof-3.46.0.tar.xz/README.md
Changed
@@ -24,9 +24,9 @@ ---------------- You need some packages installed. The package names may vary depending on your -distribution, the following command works on Fedora 25: +distribution, the following command works on Fedora 36: - sudo dnf install gcc gcc-c++ ninja-build gtk3-devel + sudo dnf install gcc gcc-c++ ninja-build gtk4-devel libadwaita-devel Then do the following:
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/config.h.meson -> _service:tar_scm:sysprof-3.46.0.tar.xz/config.h.meson
Changed
@@ -1,5 +1,9 @@ #mesondefine API_VERSION_S +#mesondefine APP_ID + +#mesondefine APP_ID_S + #mesondefine DEBUGDIR #mesondefine DEVELOPMENT_BUILD
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/icons/meson.build
Added
@@ -0,0 +1,7 @@ +icondir = join_paths(datadir, 'icons/hicolor') + +foreach kind: 'scalable', 'symbolic' + install_subdir(kind, install_dir: icondir) +endforeach + +install_data('@0@.svg'.format(app_id), install_dir: join_paths(icondir, 'scalable/apps'))
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/icons/org.gnome.Sysprof.Devel.svg
Added
@@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg height="128px" viewBox="0 0 128 128" width="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <linearGradient id="a" gradientTransform="matrix(0.755256 0.352182 -0.633927 1.359462 157.24072 -248.021909)" gradientUnits="userSpaceOnUse" x1="58" x2="70" y1="189" y2="189"> + <stop offset="0" stop-color="#77767b"/> + <stop offset="0.0889297" stop-color="#9a9996"/> + <stop offset="0.4" stop-color="#deddda"/> + <stop offset="0.8" stop-color="#a9a8a9"/> + <stop offset="1" stop-color="#77767b"/> + </linearGradient> + <filter id="b" height="100%" width="100%" x="0%" y="0%"> + <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> + </filter> + <mask id="c"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="d"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="e"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <radialGradient id="f" cx="63.678799" cy="186.932092" gradientUnits="userSpaceOnUse" r="16"> + <stop offset="0" stop-color="#77767b"/> + <stop offset="0.729" stop-color="#77767b"/> + <stop offset="0.81" stop-color="#abaaa9"/> + <stop offset="0.9" stop-color="#c0bfbc"/> + <stop offset="1" stop-color="#77767b"/> + </radialGradient> + <linearGradient id="g" gradientUnits="userSpaceOnUse" x1="60" x2="68" y1="27.986841" y2="27.986841"> + <stop offset="0" stop-color="#9a9996"/> + <stop offset="0.119491" stop-color="#c0bfbc"/> + <stop offset="0.350902" stop-color="#deddda"/> + <stop offset="0.601801" stop-color="#d2d1ce"/> + <stop offset="0.852699" stop-color="#bbbab7"/> + <stop offset="1" stop-color="#9a9996"/> + </linearGradient> + <linearGradient id="h" gradientUnits="userSpaceOnUse" x1="58" x2="70" y1="17.130838" y2="17.130838"> + <stop offset="0" stop-color="#77767b"/> + <stop offset="0.075" stop-color="#9a9996"/> + <stop offset="0.445" stop-color="#deddda"/> + <stop offset="0.8335" stop-color="#b9b8b8"/> + <stop offset="1" stop-color="#77767b"/> + </linearGradient> + <radialGradient id="i" cx="64.000008" cy="75.832742" gradientUnits="userSpaceOnUse" r="46"> + <stop offset="0" stop-color="#5e5c64"/> + <stop offset="0.73913" stop-color="#c0bfbc"/> + <stop offset="0.895652" stop-color="#deddda"/> + <stop offset="1" stop-color="#77767b"/> + </radialGradient> + <linearGradient id="j" gradientTransform="matrix(0 1.117647 -1.117647 0 343.411774 6.601425)" gradientUnits="userSpaceOnUse" x1="30" x2="98" y1="250" y2="250"> + <stop offset="0" stop-color="#7a8599"/> + <stop offset="1" stop-color="#a4acb7"/> + </linearGradient> + <linearGradient id="k" gradientTransform="matrix(0.965926 -0.258819 0.258819 0.965926 -0 -171.869163)" gradientUnits="userSpaceOnUse" x1="4.879063" x2="-11.685356" y1="229.0681" y2="290.88736"> + <stop offset="0" stop-color="#ffffff"/> + <stop offset="1" stop-color="#f6f5f4"/> + </linearGradient> + <mask id="l"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="m"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="n"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="o"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <mask id="p"> + <g filter="url(#b)"> + <rect fill-opacity="0.05" height="128" width="128"/> + </g> + </mask> + <mask id="q"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="r"> + <rect height="152" width="192"/> + </clipPath> + <g id="s" clip-path="url(#r)"> + <path d="m 94.214844 39.390625 l -3.378906 7.25 l -1.8125 -0.84375 l 3.378906 -7.25 z m 0 0"/> + </g> + <mask id="t"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="u"> + <rect height="152" width="192"/> + </clipPath> + <g id="v" clip-path="url(#u)"> + <path d="m 97.839844 41.082031 l -3.378906 7.25 l -1.8125 -0.84375 l 3.378906 -7.253906 z m 0 0"/> + </g> + <mask id="w"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="x"> + <rect height="152" width="192"/> + </clipPath> + <g id="y" clip-path="url(#x)"> + <path d="m 101.464844 42.773438 l -3.378906 7.25 l -1.8125 -0.847657 l 3.378906 -7.25 z m 0 0"/> + </g> + <mask id="z"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="A"> + <rect height="152" width="192"/> + </clipPath> + <g id="B" clip-path="url(#A)"> + <path d="m 68 38.128906 h 8 v 2 h -8 z m 0 0"/> + </g> + <mask id="C"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="D"> + <rect height="152" width="192"/> + </clipPath> + <g id="E" clip-path="url(#D)"> + <path d="m 70 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <mask id="F"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="G"> + <rect height="152" width="192"/> + </clipPath> + <g id="H" clip-path="url(#G)"> + <path d="m 74 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <mask id="I"> + <g filter="url(#b)"> + <rect fill-opacity="0.2" height="128" width="128"/> + </g> + </mask> + <clipPath id="J"> + <rect height="152" width="192"/> + </clipPath> + <g id="K" clip-path="url(#J)"> + <path d="m 78 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <mask id="L"> + <g filter="url(#b)"> + <rect fill-opacity="0.05" height="128" width="128"/> + </g> + </mask> + <clipPath id="M"> + <rect height="152" width="192"/> + </clipPath> + <g id="N" clip-path="url(#M)"> + <path d="m 73.375 58.15625 c -3.605469 -0.136719 -7.210938 0.265625 -10.691406 1.199219 c -15.863282 4.273437 -26.820313 18.738281 -26.636719 35.164062 c 0.699219 -15.679687 11.476563 -29.09375 26.636719 -33.164062 c 19.203125 -5.144531 38.945312 6.253906 44.089844 25.457031 c 0.765624 2.914062 1.160156 5.914062 1.179687 8.929688 c 0.167969 -3.683594 -0.230469 -7.367188 -1.179687 -10.929688 c -4.085938 -15.246094 -17.625 -26.054688 -33.398438 -26.65625 z m 0 0"/> + </g> + <clipPath id="O"> + <rect height="128" width="128"/> + </clipPath> + <clipPath id="P"> + <rect height="128" width="128"/> + </clipPath> + <mask id="Q"> + <g clip-path="url(#P)" filter="url(#b)"> + <g clip-path="url(#O)"> + <path d="m 84.402344 22.546875 l 9.0625 4.226563 l -6.339844 13.59375 l -9.0625 -4.226563 z m 0 0" fill="url(#a)"/> + <use mask="url(#q)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#s"/> + <use mask="url(#t)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#v"/> + <use mask="url(#w)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#y"/> + <path d="m 78 188.128906 c 0 7.734375 -6.269531 14 -14 14 s -14 -6.265625 -14 -14 c 0 -7.730468 6.269531 -14 14 -14 s 14 6.269532 14 14 z m 0 0" fill="none" stroke="url(#f)" stroke-linejoin="round" stroke-width="4" transform="matrix(1 0 0 1 0 -172)"/> + <path d="m 60 18.128906 h 8 v 20 h -8 z m 0 0" fill="url(#g)"/> + <path d="m 58 12.128906 h 12 v 10 h -12 z m 0 0" fill="url(#h)"/> + <path d="m 110 78.128906 c 0 25.40625 -20.59375 46 -46 46 s -46 -20.59375 -46 -46 c 0 -25.402344 20.59375 -46 46 -46 s 46 20.597656 46 46 z m 0 0" fill="url(#i)"/> + <path d="m 64 116.128906 c -20.988281 0 -38 -17.011718 -38 -38 c 0 -20.984375 17.011719 -38 38 -38 s 38 17.015625 38 38 c 0 20.988282 -17.011719 38 -38 38 z m 0 0" fill="url(#j)"/> + <path d="m 98.773438 68.8125 c 5.144531 19.207031 -6.25 38.945312 -25.457032 44.089844 c -19.203125 5.148437 -38.945312 -6.25 -44.089844 -25.453125 c -5.144531 -19.207031 6.25 -38.945313 25.457032 -44.089844 c 19.203125 -5.148437 38.945312 6.25 44.089844 25.453125 z m 0 0" fill="url(#k)"/> + <path d="m 63 45.128906 l -0.746094 27.203125 c -2.632812 0.691407 -4.25 3.074219 -4.253906 5.796875 c 0.003906 2.480469 1.53125 4.703125 3.84375 5.59375 l -0.21875 3.902344 c 0 0.847656 0.453125 1.632812 1.1875 2.054688 c 0.734375 0.425781 1.640625 0.425781 2.375 0 c 0.734375 -0.421876 1.1875 -1.207032 1.1875 -2.054688 l -0.21875 -3.898438 c 2.316406 -0.890624 3.84375 -3.113281 3.84375 -5.597656 c -0.003906 -2.722656 -1.707031 -5.101562 -4.34375 -5.796875 l -0.65625 -27.203125 z m 1 29 c 2.210938 0 4 1.792969 4 4 c 0 2.210938 -1.789062 4 -4 4 s -4 -1.789062 -4 -4 c 0 -2.207031 1.789062 -4 4 -4 z m 0 0" fill="#414045"/> + <use mask="url(#z)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#B"/> + <use mask="url(#C)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#E"/> + <use mask="url(#F)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#H"/> + <use mask="url(#I)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#K"/> + <use mask="url(#L)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#N"/> + </g> + </g> + </mask> + <mask id="R"> + <g filter="url(#b)"> + <rect fill-opacity="0.8" height="128" width="128"/> + </g> + </mask> + <linearGradient id="S" gradientTransform="matrix(0 0.37 -0.98462 0 295.38501 -30.360001)" gradientUnits="userSpaceOnUse" x1="300" x2="428" y1="235" y2="235"> + <stop offset="0" stop-color="#f9f06b"/> + <stop offset="1" stop-color="#f5c211"/> + </linearGradient> + <clipPath id="T"> + <rect height="128" width="128"/> + </clipPath> + <clipPath id="U"> + <rect height="128" width="128"/> + </clipPath> + </defs> + <path d="m 84.402344 22.546875 l 9.0625 4.226563 l -6.339844 13.59375 l -9.0625 -4.226563 z m 0 0" fill="url(#a)"/> + <use mask="url(#c)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#s"/> + <use mask="url(#d)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#v"/> + <use mask="url(#e)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#y"/> + <path d="m 78 188.128906 c 0 7.734375 -6.269531 14 -14 14 s -14 -6.265625 -14 -14 c 0 -7.730468 6.269531 -14 14 -14 s 14 6.269532 14 14 z m 0 0" fill="none" stroke="url(#f)" stroke-linejoin="round" stroke-width="4" transform="matrix(1 0 0 1 0 -172)"/> + <path d="m 60 18.128906 h 8 v 20 h -8 z m 0 0" fill="url(#g)"/> + <path d="m 58 12.128906 h 12 v 10 h -12 z m 0 0" fill="url(#h)"/> + <path d="m 110 78.128906 c 0 25.40625 -20.59375 46 -46 46 s -46 -20.59375 -46 -46 c 0 -25.402344 20.59375 -46 46 -46 s 46 20.597656 46 46 z m 0 0" fill="url(#i)"/> + <path d="m 64 116.128906 c -20.988281 0 -38 -17.011718 -38 -38 c 0 -20.984375 17.011719 -38 38 -38 s 38 17.015625 38 38 c 0 20.988282 -17.011719 38 -38 38 z m 0 0" fill="url(#j)"/> + <path d="m 98.773438 68.8125 c 5.144531 19.207031 -6.25 38.945312 -25.457032 44.089844 c -19.203125 5.148437 -38.945312 -6.25 -44.089844 -25.453125 c -5.144531 -19.207031 6.25 -38.945313 25.457032 -44.089844 c 19.203125 -5.148437 38.945312 6.25 44.089844 25.453125 z m 0 0" fill="url(#k)"/> + <path d="m 63 45.128906 l -0.746094 27.203125 c -2.632812 0.691407 -4.25 3.074219 -4.253906 5.796875 c 0.003906 2.480469 1.53125 4.703125 3.84375 5.59375 l -0.21875 3.902344 c 0 0.847656 0.453125 1.632812 1.1875 2.054688 c 0.734375 0.425781 1.640625 0.425781 2.375 0 c 0.734375 -0.421876 1.1875 -1.207032 1.1875 -2.054688 l -0.21875 -3.898438 c 2.316406 -0.890624 3.84375 -3.113281 3.84375 -5.597656 c -0.003906 -2.722656 -1.707031 -5.101562 -4.34375 -5.796875 l -0.65625 -27.203125 z m 1 29 c 2.210938 0 4 1.792969 4 4 c 0 2.210938 -1.789062 4 -4 4 s -4 -1.789062 -4 -4 c 0 -2.207031 1.789062 -4 4 -4 z m 0 0" fill="#414045"/> + <use mask="url(#l)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#B"/> + <use mask="url(#m)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#E"/> + <use mask="url(#n)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#H"/> + <use mask="url(#o)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#K"/> + <use mask="url(#p)" transform="matrix(1 0 0 1 -8 -16)" xlink:href="#N"/> + <g clip-path="url(#U)" mask="url(#Q)"> + <g clip-path="url(#T)" mask="url(#R)"> + <path d="m 128 80.640625 v 47.359375 h -128 v -47.359375 z m 0 0" fill="url(#S)"/> + <path d="m 13.308594 80.640625 l 47.355468 47.359375 h 21.214844 l -47.359375 -47.359375 z m 42.421875 0 l 47.363281 47.359375 h 21.214844 l -47.363282 -47.359375 z m 42.429687 0 l 29.839844 29.839844 v -21.210938 l -8.628906 -8.628906 z m -98.160156 7.90625 v 21.214844 l 18.238281 18.238281 h 21.214844 z m 0 0"/> + </g> + </g> +</svg>
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/icons/org.gnome.Sysprof.Source.svg
Added
@@ -0,0 +1,1854 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + inkscape:export-ydpi="96" + inkscape:export-xdpi="96" + inkscape:export-filename="Template.png" + width="192" + height="152" + id="svg11300" + sodipodi:version="0.32" + inkscape:version="1.2 (dc2aedaf03, 2022-05-15)" + sodipodi:docname="org.gnome.Sysprof.Source.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + version="1.0" + style="display:inline;enable-background:new" + viewBox="0 0 192 152" + xml:space="preserve" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"><title + id="title4162">Adwaita Icon Template</title><defs + id="defs3"><linearGradient + y2="236" + x2="96" + y1="236" + x1="32" + gradientTransform="translate(604.81684,170.58641)" + gradientUnits="userSpaceOnUse" + id="linearGradient1099" + xlink:href="#linearGradient1036" /><linearGradient + id="linearGradient1036"><stop + id="stop1032" + offset="0" + style="stop-color:#d5d3cf;stop-opacity:1;" /><stop + id="stop1034" + offset="1" + style="stop-color:#f6f5f4;stop-opacity:1" /></linearGradient><radialGradient + r="32" + fy="-76" + fx="-244" + cy="-76" + cx="-244" + gradientTransform="matrix(0.88333331,0,0,0.88333331,-460.35018,463.11973)" + gradientUnits="userSpaceOnUse" + id="radialGradient1103" + xlink:href="#linearGradient1069" /><linearGradient + id="linearGradient1069"><stop + id="stop1065" + offset="0" + style="stop-color:#d5d3cf;stop-opacity:1" /><stop + id="stop1067-1" + offset="1" + style="stop-color:#949390;stop-opacity:1" /></linearGradient><linearGradient + gradientUnits="userSpaceOnUse" + y2="232" + x2="64" + y1="262.5" + x1="64" + id="linearGradient1027" + xlink:href="#linearGradient1025" + gradientTransform="translate(-470.5864,432.81685)" /><linearGradient + id="linearGradient1025"><stop + id="stop1021" + offset="0" + style="stop-color:#9a9996;stop-opacity:1" /><stop + id="stop1023" + offset="1" + style="stop-color:#77767b;stop-opacity:1" /></linearGradient><inkscape:path-effect + effect="spiro" + id="path-effect35304-9" + is_visible="true" /><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath1609-7"><path + sodipodi:nodetypes="cccccc" + inkscape:connector-curvature="0" + id="path1611-5" + d="m 252,116 28,-28 v -8 h -36 v 36 z" + style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></clipPath><linearGradient + id="linearGradient1697"><stop + id="stop1685" + offset="0" + style="stop-color:#deddda;stop-opacity:1" /><stop + style="stop-color:#eeeeec;stop-opacity:1" + offset="0.04545455" + id="stop1687" /><stop + id="stop1689" + offset="0.09090909" + style="stop-color:#deddda;stop-opacity:1" /><stop + style="stop-color:#deddda;stop-opacity:1" + offset="0.90909094" + id="stop1691" /><stop + id="stop1693" + offset="0.95454544" + style="stop-color:#eeeeec;stop-opacity:1" /><stop + id="stop1695" + offset="1" + style="stop-color:#c0bfbc;stop-opacity:1" /></linearGradient><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath1289"><path + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 64,-148 h 64 l 64,-64 64,64 h 192 c 17.728,0 32,14.272 32,32 v 288 c 0,17.728 -14.272,32 -32,32 H 256 l -64,-64 -64,64 H 64 C 46.272,204 32,189.728 32,172 v -288 c 0,-17.728 14.408898,-34.19889 32,-32 z" + id="path1291" + inkscape:connector-curvature="0" + sodipodi:nodetypes="scccsssscccssss" /></clipPath><linearGradient + id="paint3_linear-2-6-5" + x2="1" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0,6,-12,0,-64,209.99687)"><stop + stop-color="#C01C27" + id="stop91-0-7-4" /><stop + offset="1" + stop-color="#E01B24" + id="stop93-2-5-7" /></linearGradient><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath1609"><path + sodipodi:nodetypes="cccccc" + inkscape:connector-curvature="0" + id="path1611" + d="m 252,116 28,-28 v -8 h -36 v 36 z" + style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></clipPath><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1544" + id="linearGradient1546" + x1="12" + y1="64" + x2="116" + y2="64" + gradientUnits="userSpaceOnUse" /><linearGradient + inkscape:collect="always" + id="linearGradient1544"><stop + style="stop-color:#f5b212;stop-opacity:1;" + offset="0" + id="stop1540" /><stop + id="stop1552" + offset="0.03378323" + style="stop-color:#ffd469;stop-opacity:0.99607843" /><stop + style="stop-color:#f5b212;stop-opacity:0.99215686;" + offset="0.06490385" + id="stop1554" /><stop + id="stop1550" + offset="0.89428228" + style="stop-color:#f5b212;stop-opacity:0.94901961;" /><stop + id="stop1548" + offset="0.9554742" + style="stop-color:#ffd776;stop-opacity:0.94901961" /><stop + style="stop-color:#f5b212;stop-opacity:0.94957983" + offset="1" + id="stop1542" /></linearGradient><radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1686" + id="radialGradient1688" + cx="62.975918" + cy="186.01036" + fx="62.975918" + fy="186.01036" + r="52" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.312227,0,0,1,-82.5907,0)" /><linearGradient + inkscape:collect="always" + id="linearGradient1686"><stop + style="stop-color:#f9f06b;stop-opacity:1" + offset="0" + id="stop1682" /><stop + style="stop-color:#f8e45c;stop-opacity:1" + offset="1" + id="stop1684" /></linearGradient><radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1325" + id="radialGradient1327" + cx="64" + cy="267.70789" + fx="64" + fy="267.70789" + r="46" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.0406179,0,0,1.3526206,-130.59955,-94.107222)" /><linearGradient + inkscape:collect="always" + id="linearGradient1325"><stop + style="stop-color:#fbf495;stop-opacity:1" + offset="0" + id="stop1321" /><stop + id="stop1329" + offset="0.59426469" + style="stop-color:#f9f06b;stop-opacity:1" /><stop + style="stop-color:#f5c211;stop-opacity:1" + offset="1" + id="stop1323" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1147" + id="linearGradient1336" + gradientUnits="userSpaceOnUse" + x1="58" + y1="189" + x2="70" + y2="189" + gradientTransform="matrix(0.83333333,0,0,1.5,41.666667,-92)" /><linearGradient + inkscape:collect="always" + id="linearGradient1147"><stop + style="stop-color:#77767b;stop-opacity:1" + offset="0" + id="stop1139" /><stop + id="stop1141" + offset="0.08892972" + style="stop-color:#9a9996;stop-opacity:1" /><stop + style="stop-color:#deddda;stop-opacity:1" + offset="0.39999998" + id="stop1143" /><stop + id="stop1149" + offset="0.80000001" + style="stop-color:#a9a8a9;stop-opacity:1;" /><stop + style="stop-color:#77767b;stop-opacity:1" + offset="1" + id="stop1145" /></linearGradient><radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4933" + id="radialGradient1136" + cx="63.678799" + cy="186.80125" + fx="63.678799" + fy="186.80125" + r="16" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.1308375)" /><linearGradient + id="linearGradient4933" + inkscape:collect="always"><stop + id="stop4925" + offset="0" + style="stop-color:#77767b;stop-opacity:1" /><stop + style="stop-color:#77767b;stop-opacity:1" + offset="0.72899997" + id="stop4927" /><stop + id="stop1137" + offset="0.81" + style="stop-color:#abaaa9;stop-opacity:1;" /><stop + id="stop4929" + offset="0.89999998" + style="stop-color:#c0bfbc;stop-opacity:1" /><stop + id="stop4931" + offset="1" + style="stop-color:#77767b;stop-opacity:1" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1150" + id="linearGradient1102" + x1="60" + y1="199.856" + x2="68" + y2="199.856" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.1308375)" /><linearGradient + id="linearGradient1150" + inkscape:collect="always"><stop + id="stop1142" + offset="0" + style="stop-color:#9a9996;stop-opacity:1" /><stop + style="stop-color:#c0bfbc;stop-opacity:1" + offset="0.11949085" + id="stop1144" /><stop + id="stop1146" + offset="0.35090223" + style="stop-color:#deddda;stop-opacity:1" /><stop + style="stop-color:#d2d1ce;stop-opacity:1;" + offset="0.60180056" + id="stop1153" /><stop + style="stop-color:#bbbab7;stop-opacity:1;" + offset="0.85269886" + id="stop1151" /><stop + id="stop1148" + offset="1" + style="stop-color:#9a9996;stop-opacity:1" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1326" + id="linearGradient1120" + x1="58" + y1="189" + x2="70" + y2="189" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.1308375)" /><linearGradient + id="linearGradient1326" + inkscape:collect="always"><stop + id="stop1318" + offset="0" + style="stop-color:#77767b;stop-opacity:1" /><stop + style="stop-color:#9a9996;stop-opacity:1" + offset="0.075" + id="stop1320" /><stop + id="stop1322" + offset="0.44499999" + style="stop-color:#deddda;stop-opacity:1" /><stop + style="stop-color:#b9b8b8;stop-opacity:1;" + offset="0.83350003" + id="stop1155" /><stop + id="stop1324" + offset="1" + style="stop-color:#77767b;stop-opacity:1" /></linearGradient><radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4923" + id="radialGradient902" + cx="64.000008" + cy="247.7019" + fx="64.000008" + fy="247.7019" + r="46" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.1308375)" /><linearGradient + inkscape:collect="always" + id="linearGradient4923"><stop + style="stop-color:#5e5c64;stop-opacity:1;" + offset="0" + id="stop4915" /><stop + id="stop4917" + offset="0.73913044" + style="stop-color:#c0bfbc;stop-opacity:1" /><stop + style="stop-color:#deddda;stop-opacity:1" + offset="0.89565217" + id="stop4919" /><stop + style="stop-color:#77767b;stop-opacity:1" + offset="1" + id="stop4921" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1306" + id="linearGradient926" + x1="30" + y1="250" + x2="98" + y2="250" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1176469,0,0,1.1176469,178.60142,-343.41176)" /><linearGradient + inkscape:collect="always" + id="linearGradient1306"><stop + style="stop-color:#7a8599;stop-opacity:1" + offset="0" + id="stop1302" /><stop + style="stop-color:#a4acb7;stop-opacity:1" + offset="1" + id="stop1304" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1140" + id="linearGradient1142" + x1="4.8790631" + y1="229.0681" + x2="-11.685356" + y2="290.88736" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.03386315,0.1263789)" /><linearGradient + inkscape:collect="always" + id="linearGradient1140"><stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop1136" /><stop + style="stop-color:#f6f5f4;stop-opacity:1" + offset="1" + id="stop1138" /></linearGradient><linearGradient + id="linearGradient7212" + inkscape:swatch="solid"><stop + id="stop7214" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /></linearGradient></defs><sodipodi:namedview + stroke="#ef2929" + fill="#f57900" + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.25490196" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8284271" + inkscape:cx="-16.018274" + inkscape:cy="11.797527" + inkscape:current-layer="layer9" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:showpageshadow="false" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + width="400px" + height="300px" + inkscape:snap-nodes="true" + inkscape:snap-bbox="true" + objecttolerance="7" + gridtolerance="12" + guidetolerance="13" + inkscape:window-maximized="1" + inkscape:pagecheckerboard="false" + showguides="false" + inkscape:guide-bbox="true" + inkscape:locked="false" + inkscape:measure-start="0,0" + inkscape:measure-end="0,0" + inkscape:object-nodes="true" + inkscape:bbox-nodes="true" + inkscape:snap-global="true" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + showborder="true" + inkscape:snap-center="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-midpoints="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-text-baseline="true" + borderlayer="true" + inkscape:deskcolor="#d1d1d1"><inkscape:grid + type="xygrid" + id="grid5883" + spacingx="2" + spacingy="2" + enabled="true" + visible="true" + empspacing="4" + originx="8" + originy="8" /><sodipodi:guide + position="72,16" + orientation="0,1" + id="guide1073" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="20,72" + orientation="1,0" + id="guide1075" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,112" + orientation="0,1" + id="guide1099" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,136" + orientation="0,1" + id="guide993" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="112,72" + orientation="1,0" + id="guide995" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="8.0000001,72" + orientation="1,0" + id="guide867" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="128,72" + orientation="1,0" + id="guide869" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,124" + orientation="0,1" + id="guide871" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><inkscape:grid + type="xygrid" + id="grid873" + spacingx="1" + spacingy="1" + empspacing="8" + color="#000000" + opacity="0.49019608" + empcolor="#000000" + empopacity="0.08627451" + dotted="true" + originx="8" + originy="8" /><sodipodi:guide + position="32,72" + orientation="1,0" + id="guide877" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="124,72" + orientation="1,0" + id="guide879" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,128" + orientation="0,1" + id="guide881" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,20" + orientation="0,1" + id="guide883" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="16,72" + orientation="1,0" + id="guide885" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="136,72" + orientation="1,0" + id="guide887" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,8" + orientation="0,1" + id="guide897" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,32" + orientation="0,1" + id="guide899" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="264,264" + orientation="-0.70710678,0.70710678" + id="guide950" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /><sodipodi:guide + position="72,72" + orientation="0.70710678,0.70710678" + id="guide952" + inkscape:locked="false" + inkscape:label="" + inkscape:color="rgb(0,0,255)" /></sodipodi:namedview><metadata + id="metadata4"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>GNOME Design Team</dc:title></cc:Agent></dc:creator><dc:source /><cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /><dc:title>Adwaita Icon Template</dc:title><dc:subject><rdf:Bag /></dc:subject><dc:date /><dc:rights><cc:Agent><dc:title /></cc:Agent></dc:rights><dc:publisher><cc:Agent><dc:title /></cc:Agent></dc:publisher><dc:identifier /><dc:relation /><dc:language /><dc:coverage /><dc:description /><dc:contributor><cc:Agent><dc:title /></cc:Agent></dc:contributor></cc:Work><cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"><cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires + rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires + rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /><cc:requires + rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF></metadata><g + id="layer1" + inkscape:label="App Icon" + inkscape:groupmode="layer" + style="display:inline" + transform="translate(8,-156)"><g + inkscape:groupmode="layer" + id="layer4" + inkscape:label="template" + style="display:inline" + sodipodi:insensitive="true"><rect + inkscape:label="0" + y="172" + x="9.2651362e-08" + height="128" + width="128" + id="hicolor" + style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" /><rect + style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" + id="symbolic" + width="16" + height="16" + x="160" + y="172" + inkscape:label="0" /></g><g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="baseplate" + style="display:inline" + sodipodi:insensitive="true"><g + style="display:inline;fill:#000000;enable-background:new" + transform="matrix(7.9911709,0,0,8.0036407,-167.7909,-4846.0776)" + id="g12027" + inkscape:export-xdpi="12" + inkscape:export-ydpi="12" /><rect + style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" + id="128" + width="128" + height="128" + x="9.2651362e-08" + y="172" + inkscape:label="0" /><g + id="g883" + style="fill:none;fill-opacity:0.25098;stroke:#a579b3;stroke-opacity:1" + transform="translate(-24,24)" /><g + id="g900" + style="fill:none;fill-opacity:0.25098;stroke:#a579b3;stroke-opacity:1" + transform="translate(-24,24)" /><rect + inkscape:label="" + y="172" + x="160" + height="16" + width="16" + id="16" + style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" /><text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new" + x="0" + y="167" + id="text863" + inkscape:label="icon-name"><tspan + style="font-size:4px;stroke-width:0.332649" + sodipodi:role="line" + id="tspan861" + x="0" + y="167">Hicolor</tspan></text><text + inkscape:label="icon-name" + id="text867" + y="167" + x="160" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new" + xml:space="preserve"><tspan + y="167" + x="160" + id="tspan865" + sodipodi:role="line" + style="font-size:4px;stroke-width:0.332649">Symbolic</tspan></text></g><g + inkscape:groupmode="layer" + id="layer9" + inkscape:label="icons" + style="display:inline"><g + style="display:inline;enable-background:new" + id="g4178" + transform="translate(260,0.13084)" + inkscape:label="digital"><g + id="g3960"><path + inkscape:connector-curvature="0" + style="display:inline;opacity:1;vector-effect:none;fill:#1d7c51;fill-opacity:1;stroke:none;stroke-width:4.01436;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 13.277344,201.9043 v 3.99999 l 78.78125,78.78126 c 9.523506,-5.25573 17.377126,-13.08363 22.664066,-22.58985 z" + id="rect2115-4-1" + sodipodi:nodetypes="ccccc" /><path + inkscape:connector-curvature="0" + style="display:inline;opacity:1;vector-effect:none;fill:#26a269;fill-opacity:1;stroke:none;stroke-width:4.01436;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="M 35.941406,7.3144531 A 58,58 0 0 0 13.277344,29.904297 l 78.78125,78.781253 A 58,58 0 0 0 114.72266,86.095703 Z" + transform="translate(0,172)" + id="rect2115-4" /></g><g + id="g3964"><path + inkscape:connector-curvature="0" + style="display:inline;opacity:1;vector-effect:none;fill:#1d7c51;fill-opacity:1;stroke:none;stroke-width:4.01436;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 114.72266,201.9043 v 3.99999 L 35.94141,284.68555 C 26.417904,279.42982 18.564284,271.60192 13.277344,262.0957 Z" + id="rect2115-4-1-1" + sodipodi:nodetypes="ccccc" /><path + inkscape:connector-curvature="0" + style="display:inline;opacity:1;vector-effect:none;fill:#26a269;fill-opacity:1;stroke:none;stroke-width:4.01436;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 92.058598,179.31445 a 58,58 0 0 1 22.664062,22.58984 L 35.94141,280.68555 A 58,58 0 0 1 13.277344,258.0957 Z" + id="rect2115-4-7" /></g><rect + ry="0" + rx="0" + y="176" + x="56" + height="48" + width="16" + id="rect1274" + style="opacity:1;vector-effect:none;fill:#26a269;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" /><path + sodipodi:nodetypes="sccscsccs" + inkscape:connector-curvature="0" + id="rect1110-8-3-2" + transform="translate(0,172)" + d="M 64,12 C 35.281193,12 12,35.281193 12,64 v 44 c 0,4.432 3.568,8 8,8 h 44 44 c 4.432,0 8,-3.568 8,-8 V 64 C 116,35.281193 92.718807,12 64,12 Z" + style="display:inline;opacity:1;fill:url(#linearGradient1546);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="sccscsccs" + inkscape:connector-curvature="0" + id="rect1110-8-3-2-6" + d="m 64,178 c -28.718807,0 -52,23.28119 -52,52 v 44 c 0,4.432 3.568,8 8,8 h 44 44 c 4.432,0 8,-3.568 8,-8 v -44 c 0,-28.71881 -23.281193,-52 -52,-52 z" + style="display:inline;opacity:1;fill:url(#radialGradient1688);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><g + id="g3183"><circle + style="display:inline;opacity:1;vector-effect:none;fill:#f6d32d;fill-opacity:1;stroke:none;stroke-width:2.5034;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + id="path1240-2-4" + cx="64" + cy="232" + r="46" /><circle + style="display:inline;opacity:1;vector-effect:none;fill:url(#radialGradient1327);fill-opacity:1;stroke:none;stroke-width:2.5034;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + id="path1240-2" + cx="64" + cy="230" + r="46" /></g><g + id="g2402"><circle + style="opacity:1;vector-effect:none;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:2.06803;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" + id="path1240" + cx="64" + cy="230" + r="38" /><rect + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:2.34547;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + id="rect2076" + width="32" + height="4" + x="48" + y="256" + rx="0" + ry="0" /><rect + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:1.6585;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + id="rect2076-4-4" + width="16" + height="4" + x="56" + y="196" + rx="0" + ry="0" /><g + id="g2145" + transform="translate(8)"><rect + ry="0" + rx="0" + y="204" + x="34" + height="2" + width="10" + id="rect2076-4" + style="display:inline;opacity:1;vector-effect:none;fill:#5e5c64;fill-opacity:1;stroke:none;stroke-width:0.927127;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="2" + rx="2" + y="199" + x="37" + height="4" + width="4" + id="rect2123" + style="opacity:1;vector-effect:none;fill:#e01b24;fill-opacity:1;stroke:none;stroke-width:1.96865;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" /></g><g + style="display:inline;enable-background:new" + id="g2145-3" + transform="translate(42)"><rect + ry="0" + rx="0" + y="204" + x="34" + height="2" + width="10" + id="rect2076-4-1" + style="display:inline;opacity:1;vector-effect:none;fill:#5e5c64;fill-opacity:1;stroke:none;stroke-width:0.927127;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="2" + rx="2" + y="199" + x="37" + height="4" + width="4" + id="rect2123-7" + style="opacity:1;vector-effect:none;fill:#e01b24;fill-opacity:1;stroke:none;stroke-width:1.96865;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" /></g><g + id="g3374" + style="display:inline;enable-background:new"><rect + style="opacity:1;vector-effect:none;fill:#c0bfbc;fill-opacity:1;stroke:none;stroke-width:2.00378;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" + id="rect1257" + width="64" + height="42" + x="32" + y="210" + rx="4" + ry="4" /><g + style="display:inline;opacity:0.1;fill:#000000;enable-background:new" + id="g1800-1" + transform="translate(0,2)"><g + transform="translate(-44,2)" + id="g1844-9-2-8" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-7" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-92" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-0" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-2" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-3" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-34,2)" + id="g1844-9-2-9-59" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-22" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-8" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-9" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-7" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-3" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-24,2)" + id="g1844-9-2-9-5-1" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-2" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-9" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-3" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-1" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-9" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-14,2)" + id="g1844-9-2-9-5-2-7" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-8" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-4" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-5" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-0" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-3" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-4,2)" + id="g1844-9-2-9-5-2-6-1" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-0" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-6" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-3" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-2" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-0" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(6,2)" + id="g1844-9-2-9-5-2-6-8-1" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-6-5" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-8-5" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-8-4" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-4-7" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-3-6" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-1-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-44,22)" + id="g1844-9-2-6-6" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-4-9" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-9-3" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-5-7" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-0-4" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-87-5" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-1-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-34,22)" + id="g1844-9-2-9-7-5" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-2-4" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-7-7" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-2-4" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-2-4" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-1-3" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-0-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-24,22)" + id="g1844-9-2-9-5-6-7" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-1-8" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-5-6" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-9-8" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-4-8" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-0-4" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-9-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-14,22)" + id="g1844-9-2-9-5-2-1-1" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-7-4" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-7-9" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-1-2" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-1-0" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-9-6" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-7-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-4,22)" + id="g1844-9-2-9-5-2-6-7-9" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-67-2" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-3-6" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-6-6" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-5-4" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-6-9" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-3-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(6,22)" + id="g1844-9-2-9-5-2-6-8-9-0" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-6-4-4" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-8-8-8" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-8-1-7" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-4-2-1" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-3-9-7" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-1-3-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><rect + ry="0" + rx="0" + y="228" + x="74" + height="2" + width="2" + id="rect1860-3-7" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="0" + rx="0" + y="248" + x="74" + height="2" + width="2" + id="rect1860-85-2" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-2" + d="m 74,212 h 1.53125 L 74,214 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-5-6" + d="m 54,212 h 2 l -2,2 z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-5-9-1" + d="m 54,232 h 2 l -2,2 z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-8-0" + d="m 76,212 h 1.53125 L 76,214 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-4-6" + d="m 74,232 h 1.53125 L 74,234 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-8-8-1" + d="m 76,232 h 1.53125 L 76,234 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /></g><g + id="g2391" + style="fill:#000000"><g + transform="translate(-44,22)" + id="g1844-9-2-6" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-4" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-9" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-5" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-0" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-87" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-34,22)" + id="g1844-9-2-9-7" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-2" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-7" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-2" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-2" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-1" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-24,22)" + id="g1844-9-2-9-5-6" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-1" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-5" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-9" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-4" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-0" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-9" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-14,22)" + id="g1844-9-2-9-5-2-1" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-7" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-7" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-1" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-1" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-9" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-4,22)" + id="g1844-9-2-9-5-2-6-7" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-67" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-3" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-6" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-5" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-6" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(6,22)" + id="g1844-9-2-9-5-2-6-8-9" + style="display:inline;fill:#000000;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-6-4" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-8-8" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-8-1" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-4-2" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-3-9" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-1-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><rect + ry="0" + rx="0" + y="248" + x="74" + height="2" + width="2" + id="rect1860-85" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-5-9" + d="m 54,232 h 2 l -2,2 z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-4" + d="m 74,232 h 1.53125 L 74,234 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-8-8" + d="m 76,232 h 1.53125 L 76,234 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /></g><g + id="g2343" + style="fill:#3d3846"><g + transform="translate(-44,2)" + id="g1844-9-2" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-34,2)" + id="g1844-9-2-9" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-24,2)" + id="g1844-9-2-9-5" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-14,2)" + id="g1844-9-2-9-5-2" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6" + d="m 86,215 2,-2 v 5.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5" + d="m 85,214 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4" + d="m 82,215 -2,-2 v 5.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(-4,2)" + id="g1844-9-2-9-5-2-6" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><g + transform="translate(6,2)" + id="g1844-9-2-9-5-2-6-8" + style="display:inline;fill:#3d3846;enable-background:new"><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-4-4-6-4-8-3-0-0-5-6" + d="m 86,221.25 2,-2 V 225 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-9-9-1-3-6-6-8" + d="m 86,216 2,-2 v 4.75 l -2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-0-7-39-0-7-9-6-1-9-8" + d="m 85,224 2,2 h -6 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-1-1-3-6-4-9-3-4-1-5-3-4" + d="m 85,215 2,-2 h -6 l 2,2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="rect2822-6-81-4-56-0-7-1-8-6-4-4-3" + d="m 82,216 -2,-2 v 4.75 l 2,-2 z" + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:0.0451928px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + d="m 82,221.25 -2,-2 V 225 l 2,-2 z" + id="rect2822-4-4-6-6-7-2-4-3-7-5-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /></g><rect + ry="0" + rx="0" + y="228" + x="74" + height="2" + width="2" + id="rect1860-3" + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1" + d="m 74,212 h 1.53125 L 74,214 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-5" + d="m 54,212 h 2 l -2,2 z" + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="rect1860-6-6-1-8" + d="m 76,212 h 1.53125 L 76,214 Z" + style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:1.88603;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + id="rect1257-5" + transform="translate(0,172)" + d="m 36,38 c -2.216,0 -4,1.784 -4,4 v 2 c 0,-2.216 1.784,-4 4,-4 h 56 c 2.216,0 4,1.784 4,4 v -2 c 0,-2.216 -1.784,-4 -4,-4 z" + style="display:inline;opacity:0.1;vector-effect:none;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:2.00378;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.948819;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" + inkscape:connector-curvature="0" /></g></g></g></g><g + id="g12485" + inkscape:label="analog" + style="display:inline;enable-background:new"><g + style="display:inline;enable-background:new" + id="g1342" + transform="rotate(25,63.417438,176.64947)" + inkscape:transform-center-y="-46.674851" + inkscape:transform-center-x="-21.764841"><rect + style="opacity:1;vector-effect:none;fill:url(#linearGradient1336);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1328" + width="10" + height="15" + x="90" + y="184" /><rect + y="-92" + x="184" + height="2" + width="8" + id="rect1330" + style="opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="rotate(90)" /><rect + transform="rotate(90)" + style="opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1332" + width="8" + height="2" + x="184" + y="-96" /><rect + y="-100" + x="184" + height="2" + width="8" + id="rect1334" + style="opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="rotate(90)" /></g><circle + r="14" + cy="188.13084" + cx="64" + id="circle882" + style="display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:url(#radialGradient1136);stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" /><rect + style="display:inline;vector-effect:none;fill:url(#linearGradient1102);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="rect872" + width="8" + height="20" + x="60" + y="190.13084" /><rect + style="display:inline;vector-effect:none;fill:url(#linearGradient1120);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="rect876" + width="12" + height="10" + x="58" + y="184.13084" /><circle + style="display:inline;vector-effect:none;fill:url(#radialGradient902);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="path870" + cx="64" + cy="250.13084" + r="46" + inkscape:transform-center-x="-1.6398402e-05" + inkscape:transform-center-y="5.4552015e-06" /><circle + r="38" + cy="-64" + cx="250.13084" + id="circle878" + style="display:inline;vector-effect:none;fill:url(#linearGradient926);fill-opacity:1;stroke:none;stroke-width:2.23529;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + transform="rotate(90)" /><circle + style="display:inline;vector-effect:none;fill:url(#linearGradient1142);fill-opacity:1;stroke:none;stroke-width:2.4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="circle880" + transform="rotate(-15)" + r="36" + cy="258.17224" + cx="-2.9193678" /><path + style="display:inline;fill:#414045;fill-opacity:1;stroke:none;stroke-width:1.18687px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" + d="m 63,217.13084 -0.744411,27.20117 c -2.635974,0.69197 -4.253526,3.07355 -4.255589,5.79883 0.003,2.47901 1.530352,4.70091 3.84375,5.5918 l -0.2168,3.90234 c -6.02e-4,0.84811 0.451335,1.63211 1.18555,2.05664 0.734758,0.42451 1.640242,0.42451 2.375,0 0.734215,-0.42453 1.186152,-1.20853 1.18555,-2.05664 l -0.2168,-3.89648 c 2.315395,-0.89166 3.84313,-3.11651 3.84375,-5.59766 -0.0029,-2.72456 -1.708704,-5.1051 -4.343977,-5.79688 L 65,217.13084 Z m 1,29 c 2.209139,0 4,1.79086 4,4 0,2.20914 -1.790861,4 -4,4 -2.209139,0 -4,-1.79086 -4,-4 0,-2.20914 1.790861,-4 4,-4 z" + id="path886" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccsssss" /><rect + style="display:inline;opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="rect1152" + width="8" + height="2" + x="60" + y="194.13084" /><rect + y="-62" + x="184.13084" + height="2" + width="8" + id="rect1154" + style="display:inline;opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + transform="rotate(90)" /><rect + transform="rotate(90)" + style="display:inline;opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + id="rect1156" + width="8" + height="2" + x="184.13084" + y="-66" /><rect + y="-70" + x="184.13084" + height="2" + width="8" + id="rect1158" + style="display:inline;opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + transform="rotate(90)" /><path + style="display:inline;opacity:0.05;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" + d="m 65.375,214.15623 a 36,36 0 0 0 -10.693359,1.20117 36,36 0 0 0 -26.634766,35.16211 36,36 0 0 1 26.634766,-33.16211 36,36 0 0 1 44.091797,25.45508 36,36 0 0 1 1.179687,8.92969 A 36,36 0 0 0 98.773438,240.81248 36,36 0 0 0 65.375,214.15623 Z" + id="circle1128" /></g><g + id="layer9-3" + inkscape:label="apps" + style="display:inline" + transform="translate(-363.0002,276)"><path + style="color:#000000;fill:#bebebe;-inkscape-stroke:none" + d="m 531,-103 c -4.12944,0 -7.5,3.37056 -7.5,7.5 0,4.129439 3.37056,7.5 7.5,7.5 4.12944,0 7.5,-3.370561 7.5,-7.5 0,-4.12944 -3.37056,-7.5 -7.5,-7.5 z m 0,2.14258 c 2.97135,0 5.35742,2.386067 5.35742,5.35742 0,2.971352 -2.38607,5.357422 -5.35742,5.357422 -2.97135,0 -5.35742,-2.38607 -5.35742,-5.357422 0,-2.971353 2.38607,-5.35742 5.35742,-5.35742 z" + id="path9349" /></g><g + id="g13272" + inkscape:label="apps" + style="display:inline" + transform="translate(-321.64302,277)"><path + inkscape:connector-curvature="0" + d="m 531.0002,-100 c -2.76142,0 -5,2.23858 -5,5 0,2.76142 2.23858,5 5,5 2.76142,0 5,-2.23858 5,-5 0,-2.76142 -2.23858,-5 -5,-5 z m 0,1 0.28516,3.04297 A 1,1 0 0 1 532.0002,-95 a 1,1 0 0 1 -0.54297,0.88867 l 0.0527,0.55274 c 0.0442,0.35355 -0.21646,0.62421 -0.50977,0.60351 -0.25733,-0.0182 -0.55067,-0.29415 -0.48438,-0.60351 l 0.0488,-0.54297 A 1,1 0 0 1 530.0002,-95 a 1,1 0 0 1 0.73047,-0.96289 z" + id="path13264" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" /><rect + height="1" + id="rect13266" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" + width="2" + x="530.00018" + y="-102" /><path + inkscape:connector-curvature="0" + d="m 531.02734,-104.49805 c -0.686,0 -1.37137,0.23238 -1.92773,0.69922 -1.11273,0.93369 -1.3962,2.54088 -0.66992,3.79883 l 0.86523,-0.5 c -0.48695,-0.84343 -0.29879,-1.90523 0.44727,-2.53125 0.74605,-0.62602 1.82425,-0.62602 2.57031,0 0.74606,0.62602 0.93422,1.68782 0.44727,2.53125 l 0.86523,0.5 c 0.72628,-1.25795 0.4428,-2.86514 -0.66992,-3.79883 -0.55636,-0.46684 -1.24174,-0.69922 -1.92774,-0.69922 z" + id="path13268" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" /><rect + height="1" + id="rect13270" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" + transform="rotate(46.327753)" + width="2" + x="296.77777" + y="-456.22092" /></g><path + id="path15731" + style="color:#000000;fill:#bebebe;stroke-width:2;stroke-linecap:round" + d="m 168,176.03271 c -0.55228,0 -1,0.44772 -1,1 v 2.20167 c -0.61711,0.35628 -0.99804,1.01399 -1,1.72656 0.002,0.71257 0.38289,1.37028 1,1.72656 v 0.27344 c 0,0.55228 0.44772,1 1,1 0.55228,0 1,-0.44772 1,-1 v -0.27344 c 0.61711,-0.35628 0.99804,-1.01399 1,-1.72656 -5.6e-4,-0.71397 -0.38169,-1.37349 -1,-1.73047 v -2.19776 c 0,-0.55228 -0.44772,-1 -1,-1 z m 0,3.92823 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55228,0 -1,-0.44772 -1,-1 0,-0.55228 0.44772,-1 1,-1 z" + sodipodi:nodetypes="sscccssscccsssssss" /><rect + style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000" + id="rect16419" + width="4" + height="2" + x="166" + y="172" + inkscape:transform-center-x="0.019897461" + inkscape:transform-center-y="-7.9920655" + rx="1" + ry="1" /><rect + style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000" + id="rect18631" + width="4" + height="2.7805424" + x="244.76883" + y="0.18064249" + inkscape:transform-center-x="-5.6371748" + inkscape:transform-center-y="-5.6653126" + transform="rotate(45)" + rx="1" + ry="1" /></g><g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="grid" + style="display:inline" + sodipodi:insensitive="true"><circle + cx="64.000031" + cy="236" + r="59.504131" + id="circle2892" + style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="7.9292889" + rx="8.701004" + y="180.49496" + x="20.495007" + height="111.01005" + width="87.009987" + id="rect2894" + style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="7.9238095" + rx="7.9238095" + y="184.49524" + x="12.495266" + height="103.00952" + width="103.00952" + id="rect2896" + style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><rect + ry="8.701005" + rx="7.9292889" + y="200.49496" + x="8.4950066" + height="87.010048" + width="111.01004" + id="rect2898" + style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" /><path + inkscape:connector-curvature="0" + id="path2900" + d="M 2.6203015e-5,288.99999 H 128.00003" + style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" /></g></g></svg>
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/icons/org.gnome.Sysprof.svg
Changed
(renamed from data/icons/scalable/apps/org.gnome.Sysprof.svg)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/icons/symbolic/apps/org.gnome.Sysprof-symbolic.svg -> _service:tar_scm:sysprof-3.46.0.tar.xz/data/icons/symbolic/apps/org.gnome.Sysprof-symbolic.svg
Changed
@@ -1,30 +1,100 @@ -<?xml version='1.0' encoding='UTF-8' standalone='no'?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='sysprof-symbolic.svg' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='0.91 r13725' width='16' xmlns='http://www.w3.org/2000/svg'> - <metadata id='metadata90'> - <rdf:RDF> - <cc:Work rdf:about=''> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/> - <dc:title>Gnome Symbolic Icon Theme</dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' borderopacity='1' inkscape:current-layer='layer9' inkscape:cx='9.9751016' inkscape:cy='-7.30721' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:object-nodes='false' inkscape:object-paths='false' objecttolerance='10' pagecolor='#555753' inkscape:pageopacity='1' inkscape:pageshadow='2' showborder='false' showgrid='false' showguides='true' inkscape:snap-bbox='true' inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-nodes='true' inkscape:snap-others='true' inkscape:snap-to-guides='true' inkscape:window-height='1250' inkscape:window-maximized='0' inkscape:window-width='1590' inkscape:window-x='150' inkscape:window-y='153' inkscape:zoom='1'> - <inkscape:grid empspacing='2' enabled='true' id='grid4866' originx='-282' originy='-322' snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/> - </sodipodi:namedview> - <title id='title9167'>Gnome Symbolic Icon Theme</title> - <defs id='defs7386'> - <linearGradient id='linearGradient7212' osb:paint='solid'> - <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/> - </linearGradient> - </defs> - <g inkscape:groupmode='layer' id='layer9' inkscape:label='apps' style='display:inline' transform='translate(-523.0002,105)'> - - <path inkscape:connector-curvature='0' d='m 531.0002,-100 c -2.76142,0 -5,2.23858 -5,5 0,2.76142 2.23858,5 5,5 2.76142,0 5,-2.23858 5,-5 0,-2.76142 -2.23858,-5 -5,-5 z m 0,1 0.28516,3.04297 A 1,1 0 0 1 532.0002,-95 a 1,1 0 0 1 -0.54297,0.88867 l 0.0527,0.55274 c 0.0442,0.35355 -0.21646,0.62421 -0.50977,0.60351 -0.25733,-0.0182 -0.55067,-0.29415 -0.48438,-0.60351 l 0.0488,-0.54297 A 1,1 0 0 1 530.0002,-95 a 1,1 0 0 1 0.73047,-0.96289 L 531.0002,-99 Z' id='path9349' style='color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new'/> - <rect height='1' id='rect9351' style='color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new' width='2' x='530.00018' y='-102'/> - <path inkscape:connector-curvature='0' d='m 531.02734,-104.49805 c -0.686,0 -1.37137,0.23238 -1.92773,0.69922 -1.11273,0.93369 -1.3962,2.54088 -0.66992,3.79883 l 0.86523,-0.5 c -0.48695,-0.84343 -0.29879,-1.90523 0.44727,-2.53125 0.74605,-0.62602 1.82425,-0.62602 2.57031,0 0.74606,0.62602 0.93422,1.68782 0.44727,2.53125 l 0.86523,0.5 c 0.72628,-1.25795 0.4428,-2.86514 -0.66992,-3.79883 -0.55636,-0.46684 -1.24174,-0.69922 -1.92774,-0.69922 z' id='path9353' style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new'/> - <rect height='1' id='rect9373' style='color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new' transform='matrix(0.69053214,0.72330171,-0.72330171,0.69053214,0,0)' width='2' x='296.77777' y='-456.22092'/> - </g> +<?xml version="1.0" encoding="UTF-8"?> +<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <filter id="a" height="100%" width="100%" x="0%" y="0%"> + <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> + </filter> + <mask id="b"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="c"> + <rect height="152" width="192"/> + </clipPath> + <mask id="d"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="e"> + <rect height="152" width="192"/> + </clipPath> + <mask id="f"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="g"> + <rect height="152" width="192"/> + </clipPath> + <mask id="h"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="i"> + <rect height="152" width="192"/> + </clipPath> + <mask id="j"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="k"> + <rect height="152" width="192"/> + </clipPath> + <mask id="l"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="m"> + <rect height="152" width="192"/> + </clipPath> + <mask id="n"> + <g filter="url(#a)"> + <rect fill-opacity="0.2" height="16" width="16"/> + </g> + </mask> + <clipPath id="o"> + <rect height="152" width="192"/> + </clipPath> + <mask id="p"> + <g filter="url(#a)"> + <rect fill-opacity="0.05" height="16" width="16"/> + </g> + </mask> + <clipPath id="q"> + <rect height="152" width="192"/> + </clipPath> + <g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 94.214844 39.390625 l -3.378906 7.25 l -1.8125 -0.84375 l 3.378906 -7.25 z m 0 0"/> + </g> + <g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 97.839844 41.082031 l -3.378906 7.25 l -1.8125 -0.84375 l 3.378906 -7.253906 z m 0 0"/> + </g> + <g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 101.464844 42.773438 l -3.378906 7.25 l -1.8125 -0.847657 l 3.378906 -7.25 z m 0 0"/> + </g> + <g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 68 38.128906 h 8 v 2 h -8 z m 0 0"/> + </g> + <g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 70 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 74 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 78 28.128906 v 8 h -2 v -8 z m 0 0"/> + </g> + <g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -168 -16)"> + <path d="m 73.375 58.15625 c -3.605469 -0.136719 -7.210938 0.265625 -10.691406 1.199219 c -15.863282 4.273437 -26.820313 18.738281 -26.636719 35.164062 c 0.699219 -15.679687 11.476563 -29.09375 26.636719 -33.164062 c 19.203125 -5.144531 38.945312 6.253906 44.089844 25.457031 c 0.765624 2.914062 1.160156 5.914062 1.179687 8.929688 c 0.167969 -3.683594 -0.230469 -7.367188 -1.179687 -10.929688 c -4.085938 -15.246094 -17.625 -26.054688 -33.398438 -26.65625 z m 0 0"/> + </g> + <g fill="#bebebe"> + <path d="m 8 1 c -4.128906 0 -7.5 3.371094 -7.5 7.5 s 3.371094 7.5 7.5 7.5 s 7.5 -3.371094 7.5 -7.5 s -3.371094 -7.5 -7.5 -7.5 z m 0 2.144531 c 2.972656 0 5.355469 2.382813 5.355469 5.355469 s -2.382813 5.359375 -5.355469 5.359375 s -5.359375 -2.386719 -5.359375 -5.359375 s 2.386719 -5.355469 5.359375 -5.355469 z m 0 0"/> + <path d="m 8 4.03125 c -0.550781 0 -1 0.449219 -1 1 v 2.203125 c -0.617188 0.355469 -0.996094 1.015625 -1 1.726563 c 0.003906 0.710937 0.382812 1.371093 1 1.726562 v 0.273438 c 0 0.550781 0.449219 1 1 1 s 1 -0.449219 1 -1 v -0.273438 c 0.617188 -0.355469 0.996094 -1.015625 1 -1.726562 c 0 -0.714844 -0.382812 -1.375 -1 -1.730469 v -2.199219 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 3.929688 c 0.550781 0 1 0.449218 1 1 c 0 0.550781 -0.449219 1 -1 1 s -1 -0.449219 -1 -1 c 0 -0.550782 0.449219 -1 1 -1 z m 0 0"/> + <path d="m 7 0 h 2 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 h -2 c -0.550781 0 -1 -0.449219 -1 -1 s 0.449219 -1 1 -1 z m 0 0"/> + <path d="m 13.65625 1.914062 l 1.414062 1.414063 c 0.390626 0.390625 0.390626 1.023437 0 1.414063 l -0.550781 0.550781 c -0.390625 0.390625 -1.023437 0.390625 -1.414062 0 l -1.414063 -1.414063 c -0.390625 -0.390625 -0.390625 -1.023437 0 -1.414062 l 0.550782 -0.550782 c 0.390624 -0.390624 1.023437 -0.390624 1.414062 0 z m 0 0"/> + </g> </svg>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/data/meson.build
Changed
@@ -1,35 +1,34 @@ -if get_option('enable_gtk') and get_option('libsysprof') - +if get_option('gtk') and get_option('libsysprof') install_data('sysprof-mime.xml', install_dir: join_paths(datadir, 'mime/packages') ) - install_data('org.gnome.sysprof3.gschema.xml', - install_dir: join_paths(datadir, 'glib-2.0/schemas') + appdata_in = configure_file( + input: 'org.gnome.Sysprof.appdata.xml.in.in', + output: 'org.gnome.Sysprof.appdata.xml.in', + configuration: config_h, ) - i18n.merge_file( - input: 'org.gnome.Sysprof3.appdata.xml.in', - output: 'org.gnome.Sysprof3.appdata.xml', + input: appdata_in, + output: '@0@.appdata.xml'.format(app_id), po_dir: podir, install: true, install_dir: join_paths(datadir, 'metainfo') ) + desktop_in = configure_file( + input: 'org.gnome.Sysprof.desktop.in.in', + output: 'org.gnome.Sysprof.desktop.in', + configuration: config_h, + ) i18n.merge_file( - input: 'org.gnome.Sysprof3.desktop.in', - output: 'org.gnome.Sysprof3.desktop', + input: desktop_in, + output: '@0@.desktop'.format(app_id), type: 'desktop', po_dir: podir, install: true, install_dir: join_paths(datadir, 'applications') ) - icon_sizes = 'scalable', 'symbolic' - foreach size: icon_sizes - install_subdir('icons/' + size, - install_dir: join_paths(datadir, 'icons/hicolor') - ) - endforeach - + subdir('icons') endif
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/org.gnome.Sysprof.appdata.xml.in.in
Added
@@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<component type="desktop-application"> + <id>@APP_ID@.desktop</id> + <translation type="gettext">sysprof</translation> + <name>Sysprof</name> + <summary>Profile an application or entire system</summary> + <project_license>GPL-3.0+</project_license> + <project_group>GNOME</project_group> + <developer_name>The GNOME Foundation</developer_name> + + <description> + <p>Sysprof allows you to profile applications to aid in debugging and optimization.</p> + </description> + + <url type="homepage">https://wiki.gnome.org/Apps/Sysprof</url> + <url type="bugtracker">https://gitlab.gnome.org/GNOME/sysprof/issues</url> + <url type="donation">https://www.gnome.org/friends</url> + + <screenshots> + <screenshot type="default"> + <image>https://git.gnome.org/browse/sysprof/plain/data/screenshots/sysprof-main-window.png</image> + </screenshot> + </screenshots> + + <kudos> + <kudo>AppMenu</kudo> + <kudo>HiDpiIcon</kudo> + <kudo>ModernToolkit</kudo> + <kudo>UserDocs</kudo> + </kudos> + + <provides> + <binary>sysprof</binary> + <binary>sysprof-agent</binary> + <binary>sysprof-cli</binary> + <dbus type="system">org.gnome.Sysprof2</dbus> + <dbus type="system">org.gnome.Sysprof3</dbus> + </provides> + + <releases> + <release version="3.45.0" date="2022-07-11"/> + </releases> + + <metadata_license>CC0-1.0</metadata_license> + <update_contact>chergert_AT_redhat.com</update_contact> +</component>
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/data/org.gnome.Sysprof.desktop.in.in
Added
@@ -0,0 +1,14 @@ +Desktop Entry +Version=1.0 +Name=Sysprof +GenericName=Profiler +Comment=Profile an application or entire system. +Exec=sysprof %u +TryExec=sysprof +# Translators: Do NOT translate or transliterate this text (this is an icon file name)! +Icon=@APP_ID@ +StartupNotify=true +Terminal=false +Type=Application +Categories=GNOME;GTK;Development; +MimeType=application/x-sysprof-capture;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/data/sysprof-mime.xml -> _service:tar_scm:sysprof-3.46.0.tar.xz/data/sysprof-mime.xml
Changed
@@ -3,5 +3,6 @@ <mime-type type="application/x-sysprof-capture"> <comment>Sysprof Capture</comment> <glob pattern="*.syscap"/> + <generic-icon name="org.gnome.Sysprof"/> </mime-type> </mime-info>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/examples/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/examples/meson.build
Changed
@@ -1,7 +1,3 @@ -if get_option('enable_examples') - app = executable('example-app', 'app.c', dependencies: dependency('glib-2.0'), libsysprof_capture_dep, ) - -endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/help/LINGUAS -> _service:tar_scm:sysprof-3.46.0.tar.xz/help/LINGUAS
Changed
@@ -4,6 +4,7 @@ de el es +id pl pt_BR sv
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/help/id
Added
+(directory)
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/help/id/id.po
Added
@@ -0,0 +1,453 @@ +# Indonesian translation for sysprof. +# Copyright (C) 2022 sysprof's COPYRIGHT HOLDER +# This file is distributed under the same license as the sysprof package. +# Andika Triwidada <andika@gmail.com>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: sysprof sysprof-3-44\n" +"POT-Creation-Date: 2022-05-09 02:14+0000\n" +"PO-Revision-Date: 2022-07-03 15:36+0700\n" +"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Last-Translator: Andika Triwidada <andika@gmail.com>\n" +"X-Generator: Poedit 3.0\n" + +#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2 +msgctxt "_" +msgid "translator-credits" +msgstr "Andika Triwidada <andika@gmail.com>, 2022" + +#. (itstool) path: credit/name +#: C/introduction.page:15 +msgid "Christian Hergert" +msgstr "Christian Hergert" + +#. (itstool) path: credit/years +#: C/introduction.page:17 +msgid "2016" +msgstr "2016" + +#. (itstool) path: info/desc +#: C/introduction.page:22 +msgid "Welcome to <app>Sysprof</app>!" +msgstr "Selamat datang di <app>Sysprof</app>!" + +#. (itstool) path: page/title +#: C/introduction.page:25 +msgid "Introduction" +msgstr "Pengantar" + +#. (itstool) path: page/p +#: C/introduction.page:27 +msgid "" +"<app>Sysprof</app> is a system profiler for Linux that targets the GNOME " +"desktop." +msgstr "" +"<app>Sysprof</app> adalah profiler sistem untuk Linux yang menargetkan " +"desktop GNOME." + +#. (itstool) path: info/desc +#: C/introduction.page:33 +msgid "Differences between tracing and sampling" +msgstr "Perbedaan antara tracing dan sampling" + +#. (itstool) path: section/title +#: C/introduction.page:35 +msgid "What is a Profiler?" +msgstr "Apa itu Profiler?" + +#. (itstool) path: section/p +#: C/introduction.page:37 +msgid "" +"A profiler is an application that records information about an application " +"or system while it runs. That information can be explored to gain insight " +"into how the application could be changed to perform better." +msgstr "" +"Profiler adalah aplikasi yang merekam informasi tentang aplikasi atau sistem " +"saat dijalankan. Informasi itu dapat dieksplorasi untuk mendapatkan wawasan " +"tentang bagaimana aplikasi dapat diubah agar berkinerja lebih baik." + +#. (itstool) path: section/p +#: C/introduction.page:42 +msgid "" +"Two common categories of software profilers exist, commonly referred to as " +"either tracing or sampling profilers. What is meant by tracing profiler is " +"that every function call executed by the program is known to the profiler. A " +"sampling profiler works by inspecting the state of the program on a regular " +"frequency and therefore does not see every function call executed by the " +"program." +msgstr "" +"Ada dua kategori umum profiler perangkat lunak, yang biasa disebut sebagai " +"profiler pelacakan atau pengambilan sampel. Yang dimaksud dengan tracing " +"profiler adalah bahwa setiap panggilan fungsi yang dijalankan oleh program " +"diketahui oleh profiler. Profiler pengambilan sampel bekerja dengan " +"memeriksa keadaan program pada frekuensi reguler dan oleh karena itu tidak " +"melihat setiap panggilan fungsi yang dijalankan oleh program." + +#. (itstool) path: section/p +#: C/introduction.page:49 +msgid "" +"Both tracing and sampling profilers have their advantages. A notable " +"advantage of a sampling profiler is that the overhead is much less than that " +"of a tracing profiler, making it easier to use for software that requires " +"interactivity." +msgstr "" +"Baik profiler tracing maupun sampling memiliki kelebihan masing-masing. " +"Keuntungan penting dari profiler pengambilan sampel adalah bahwa overhead " +"jauh lebih sedikit daripada profiler pelacakan, sehingga lebih mudah " +"digunakan untuk perangkat lunak yang memerlukan interaktivitas." + +#. (itstool) path: section/p +#: C/introduction.page:54 +msgid "<app>Sysprof</app> is a sampling profiler." +msgstr "<app>Sysprof</app> adalah profiler sampling." + +#. (itstool) path: page/title +#. (itstool) path: section/title +#: C/profiling.page:6 C/index.page:15 +msgid "Profiling" +msgstr "Memprofil" + +#. (itstool) path: section/title +#: C/profiling.page:12 +msgid "How to profile your system" +msgstr "Cara membuat profil sistem Anda" + +#. (itstool) path: section/p +#: C/profiling.page:13 +msgid "" +"When <app>Sysprof</app> profiles your system, it records stack information " +"for all applications executing, including the Linux kernel. This can " +"sometimes be confusing if you only want to look at a single process. If your " +"application does not interact much with the host system, you may have more " +"success by using <app>Sysprof</app> to <link href=\"profiling#new-process-" +"profiling\">spawn a new process</link>." +msgstr "" +"Ketika <app>Sysprof</app> membuat profil sistem Anda, ia merekam informasi " +"stack untuk semua aplikasi yang dijalankan, termasuk kernel Linux. Ini " +"terkadang bisa membingungkan jika Anda hanya ingin melihat satu proses. Jika " +"aplikasi Anda tidak banyak berinteraksi dengan sistem host, Anda mungkin " +"lebih sukses dengan menggunakan <app>Sysprof</app> untuk <link href=" +"\"profiling#new-process-profiling\">men-spawn proses baru</link>." + +#. (itstool) path: section/p +#: C/profiling.page:20 +msgid "" +"To profile your entire system, ensure the target button is set to <em>All " +"Processes</em> and click <em>Record</em>." +msgstr "" +"Untuk membuat profil seluruh sistem Anda, pastikan tombol target diatur ke " +"<em>Semua Proses</em> dan klik <em>Rekam</em>." + +#. (itstool) path: section/p +#: C/profiling.page:23 +msgid "" +"At this point, you may be asked to <em>authorize</em> access to profile the " +"system. This is required as the Linux kernel's perf implementation requires " +"root to perform whole-system profiling." +msgstr "" +"Pada titik ini, Anda mungkin diminta untuk <em>mengotorisasi</em> akses ke " +"profil sistem. Ini diperlukan karena implementasi perf kernel Linux " +"memerlukan root untuk melakukan pembuatan profil seluruh sistem." + +#. (itstool) path: section/p +#: C/profiling.page:27 +msgid "" +"During the profiling session, you will see the number of seconds the profile " +"has been active. Clicking the <em>Record</em> button again will stop the " +"profiling session. Afterwhich, the callgraph will be displayed." +msgstr "" +"Selama sesi pembuatan profil, Anda akan melihat berapa detik profil telah " +"aktif. Mengklik tombol <em>Rekam</em> lagi akan menghentikan sesi pembuatan " +"profil. Setelah itu, grafik pemanggilan akan ditampilkan." + +#. (itstool) path: note/p +#: C/profiling.page:33 +msgid "" +"If you find that the <app>sysprof</app> application is showing up in your " +"profiling callgraph, you might consider recording the profiling session with " +"<cmd>sysprof-cli</cmd>. This is a command line program that will capture " +"your profiling session to disk to be viewed at a later time." +msgstr "" +"Jika Anda menemukan bahwa aplikasi <app>sysprof</app> muncul di grafik " +"pemanggilan profiling Anda, Anda dapat mempertimbangkan untuk merekam sesi " +"pembuatan profil dengan <cmd>sysprof-cli</cmd>. Ini adalah program baris " +"perintah yang akan menangkap sesi pembuatan profil Anda ke disk untuk " +"dilihat di lain waktu." + +#. (itstool) path: section/p +#: C/profiling.page:39 C/profiling.page:62 +msgid "" +"See <link href=\"profiling#interpreting-results\">interpreting results</" +"link> for more guidance." +msgstr "" +"Lihat <link href=\"profiling#interpreting-results\">menafsirkan hasil</link> " +"untuk panduan selengkapnya." + +#. (itstool) path: section/title +#: C/profiling.page:48 +msgid "Profile an existing process" +msgstr "Membuat profil proses yang sudah ada" + +#. (itstool) path: section/p +#: C/profiling.page:49 +msgid "" +"With <app>Sysprof</app>, you can profile one or more existing processes on " +"your system. First, select the <em>profiling target</em> button next to the " +"<em>Record</em> button. Select <em>Existing Process</em> in the popover that " +"is displayed. Next, select as many processes as you'd like to profile. " +"Processes selected for profiling will have a checkmark next to their name." +msgstr "" +"Dengan <app>Sysprof</app>, Anda dapat membuat profil satu atau beberapa " +"proses yang ada di sistem Anda. Pertama, pilih tombol <em>target pembuatan " +"profil</em> di sebelah tombol <em>Rekam</em>. Pilih <em>Proses yang Ada</em> " +"di popover yang ditampilkan. Selanjutnya, pilih proses sebanyak yang ingin " +"Anda buat profilnya. Proses yang dipilih untuk pembuatan profil akan " +"memiliki tanda centang di samping namanya." + +#. (itstool) path: section/p +#: C/profiling.page:56 +msgid "" +"After selecting your target processes, click the <em>Record</em> button to " +"start profiling." +msgstr "" +"Setelah memilih proses target Anda, klik tombol <em>Rekam</em> untuk memulai " +"pembuatan profil." + +#. (itstool) path: section/p +#: C/profiling.page:59 +msgid "" +"When you have completed, click the <em>Record</em> button again to stop " +"profiling." +msgstr "" +"Setelah selesai, klik tombol <em>Rekam</em> lagi untuk menghentikan " +"pembuatan profil." + +#. (itstool) path: section/title +#: C/profiling.page:71 +msgid "Profile a new process" +msgstr "Membuat profil proses baru" + +#. (itstool) path: section/p +#: C/profiling.page:73 +msgid "" +"Often times, you may need to spawn a new process to profile. First, select " +"the <em>profiling target</em> button next to the <em>Record</em> button. " +"Next, select <em>New Process</em> and fill out the necessary information to " +"spawn the process." +msgstr "" +"Sering kali, Anda mungkin perlu men-spawn proses baru untukk dibuat " +"profilnya. Pertama, pilih tombol <em>target pembuatan profil</em> di sebelah " +"tombol <em>Rekam</em>. Selanjutnya, pilih <em>Proses Baru</em> dan isi " +"informasi yang diperlukan untuk men-spawn proses." + +#. (itstool) path: note/p +#: C/profiling.page:79 +msgid "" +"If you are spawning a process that requires access to your current display, " +"such as a GTK+ application, you will want to make sure <em>Inherit current " +"environment</em> is set." +msgstr "" +"Jika Anda men-spawn proses yang memerlukan akses ke tampilan Anda saat ini, " +"seperti aplikasi GTK+, Anda akan ingin memastikan <em>Mewarisi lingkungan " +"saat ini</em> diatur." + +#. (itstool) path: section/title +#: C/profiling.page:90 +msgid "Profiling with the sysprof-cli command line tool" +msgstr "Pembuatan profil dengan alat baris perintah sysprof-cli" + +#. (itstool) path: section/p +#: C/profiling.page:92 +msgid "" +"For minimal overhead, you might consider using the <cmd>sysprof-cli</cmd> " +"command line tool. When run without any arguments, it will record your " +"entire system and save the output to <file>capture.syscap</file>. This file " +"can be opened with the <app>Sysprof</app> application to view the callgraph." +msgstr "" +"Untuk overhead minimal, Anda dapat mempertimbangkan untuk menggunakan alat " +"baris perintah <cmd>sysprof-cli</cmd>. Saat dijalankan tanpa argumen apa " +"pun, itu akan merekam seluruh sistem Anda dan menyimpan keluaran ke " +"<file>capture.syscap</file>. Berkas ini dapat dibuka dengan aplikasi " +"<app>Sysprof</app> untuk melihat grafik pemanggilan." + +#. (itstool) path: section/p +#: C/profiling.page:97 +msgid "" +"You can also attach to an existing process using <cmd>sysprof-cli -p pid</" +"cmd>." +msgstr "" +"Anda juga dapat mencantol ke proses yang ada menggunakan <cmd>sysprof-cli -p " +"pid</cmd>." + +#. (itstool) path: section/p +#: C/profiling.page:100 +msgid "" +"If you would like to spawn a new process, use <cmd>sysprof-cli -c 'command'</" +"cmd> to specify a command to be launched. The command will inherit the " +"current environment." +msgstr "" +"Jika Anda ingin men-spawn proses baru, gunakan <cmd>sysprof-cli -c " +"'perintah'</cmd> untuk menentukan perintah yang akan diluncurkan. Perintah " +"akan mewarisi lingkungan saat ini." + +#. (itstool) path: section/title +#: C/profiling.page:110 +msgid "Interpreting results" +msgstr "Menafsirkan hasil" + +#. (itstool) path: section/p +#: C/profiling.page:112 +msgid "" +"The profiling results in <app>Sysprof</app> are split into three sections. " +"On the top left is a list of all the functions profiled. They are sorted by " +"how often they were called during the recording." +msgstr "" +"Hasil profiling di <app>Sysprof</app> dibagi menjadi tiga bagian. Di kiri " +"atas adalah daftar semua fungsi yang diprofilkan. Mereka diurutkan " +"berdasarkan seberapa sering mereka dipanggil selama rekaman." + +#. (itstool) path: note/p +#: C/profiling.page:117 +msgid "" +"It is important to note that the amount of time spent in each function is " +"not captured. That would require a tracing profiler to accurately record. " +"The percentage is calculated by determining how often that function showed " +"up in the current stacktrace when a sample was recorded." +msgstr "" +"Penting untuk dicatat bahwa lama waktu yang dihabiskan dalam setiap fungsi " +"tidak ditangkap. Itu akan membutuhkan profiler pelacakan untuk merekam " +"secara akurat. Persentase dihitung dengan menentukan seberapa sering fungsi " +"tersebut muncul dalam stacktrace saat ini ketika sampel direkam." + +#. (itstool) path: section/p +#: C/profiling.page:123 +msgid "" +"After selecting a function from the functions list, all of the recorded " +"callers of that function will be displayed on the bottom left. They are also " +"sorted by the percentage of samples that included that function in the " +"stacktrace." +msgstr "" +"Setelah memilih fungsi dari daftar fungsi, semua pemanggil yang direkam dari " +"fungsi itu akan ditampilkan di kiri bawah. Mereka juga diurutkan berdasarkan " +"persentase sampel yang menyertakan fungsi itu dalam stacktrace." + +#. (itstool) path: section/p +#: C/profiling.page:128 +msgid "" +"On the right, are all of the decendants of a selected function. You can " +"select a function either from the functions list, or the callers list." +msgstr "" +"Di sebelah kanan, adalah semua turunan dari fungsi yang dipilih. Anda dapat " +"memilih fungsi baik dari daftar fungsi, atau daftar pemanggil." + +#. (itstool) path: section/p +#: C/profiling.page:131 +msgid "" +"You can jump into a function by activating a row in the tree of descendants " +"with a double-click or by pressing <key>Enter</key> or <key>Spacebar</key>." +msgstr "" +"Anda dapat melompat ke fungsi dengan mengaktifkan baris di pohon keturunan " +"dengan klik ganda atau dengan menekan <key>Enter</key> atau <key>Spasi</key>." + +#. (itstool) path: note/p +#: C/profiling.page:135 +msgid "" +"If you see <em>- - kernel - -</em> in your results, that means that the " +"application transitioned into or from the Linux kernel. There can be many " +"reasons for this such as a <em>syscall</em> or <em>signal</em>." +msgstr "" +"Jika Anda melihat <em>- - kernel - -</em> dalam hasil Anda, itu berarti " +"bahwa aplikasi beralih ke atau dari kernel Linux. Mungkin ada banyak alasan " +"untuk ini seperti <em>syscall</em> atau <em>signal</em>." + +#. (itstool) path: page/title +#: C/faq.page:9 +msgid "What does heap mean?" +msgstr "Apa yang dimaksud dengan heap?" + +#. (itstool) path: section/title +#: C/faq.page:12 +msgid "What does \"In file heap\" mean?" +msgstr "Apa arti \"Dalam berkas heap\"?" + +#. (itstool) path: section/p +#: C/faq.page:14 +msgid "" +"This means that sysprof believes a function was called from somewhere in the " +"program's heap (where <code>malloc</code> allocates memory) rather than the " +"code section (where executable code normally lives.) There are several " +"possible explanations." +msgstr "" +"Ini berarti bahwa sysprof percaya bahwa suatu fungsi dipanggil dari suatu " +"tempat di heap program (di mana <code>malloc</code> mengalokasikan memori) " +"daripada bagian kode (di mana kode yang dapat dieksekusi biasanya hidup.) " +"Ada beberapa kemungkinan penjelasan." + +#. (itstool) path: section/title +#: C/faq.page:22 +msgid "JIT (Just in Time) compilers" +msgstr "Kompiler JIT (Just in Time)" + +#. (itstool) path: section/p +#: C/faq.page:24 +msgid "" +"Languages like Java can generate executable code while a program is running " +"and store it in the heap. Sysprof is accurately reporting the situation in " +"this case." +msgstr "" +"Bahasa seperti Java dapat menghasilkan kode yang dapat dieksekusi saat " +"program sedang berjalan dan menyimpannya di heap. Sysprof secara akurat " +"melaporkan situasi dalam kasus ini." + +#. (itstool) path: section/title +#: C/faq.page:30 +msgid "Optimizing compilers" +msgstr "Mengoptimalkan kompiler" + +#. (itstool) path: section/p +#: C/faq.page:32 +msgid "" +"C and C++ compilers can optimize away information needed to determine a " +"function's caller, so it is mistaken for heap. You can still tell how " +"often each function is called by the program, but not always from where." +msgstr "" +"Kompiler C dan C++ dapat mengoptimalkan informasi yang diperlukan untuk " +"menentukan pemanggil fungsi, sehingga disalahartikan sebagai heap. Anda " +"masih dapat mengetahui seberapa sering setiap fungsi dipanggil oleh program, " +"tetapi tidak selalu dari mana." + +#. (itstool) path: note/p +#: C/faq.page:38 +msgid "" +"For gcc, the flag <code>-fno-omit-frame-pointer</code> will prevent this " +"optimization. The flag is not always needed, for example on x86_64 machines " +"it is only needed with -O3 optimization." +msgstr "" +"Untuk gcc, flag <code>-fno-omit-frame-pointer</code> akan mencegah " +"pengoptimalan ini. Flag tidak selalu diperlukan, misalnya pada mesin x86_64 " +"hanya diperlukan dengan optimasi -O3." + +#. (itstool) path: note/p +#: C/faq.page:44 +msgid "" +"To get the most detailed and accurate call tree from un-optimized code, use " +"these flags: <code>-ggdb -fno-omit-frame-pointer -O0</code>" +msgstr "" +"Untuk mendapatkan pohon panggilan yang paling rinci dan akurat dari kode " +"yang tidak dioptimalkan, gunakan flag ini: <code>-ggdb -fno-omit-frame-" +"pointer -O0</code>" + +#. (itstool) path: page/title +#: C/index.page:12 +msgid "Sysprof" +msgstr "Sysprof" + +#. (itstool) path: section/title +#: C/index.page:19 +msgid "Frequently Asked Questions" +msgstr "Pertanyaan Yang Sering Muncul"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/help/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/help/meson.build
Changed
@@ -1,7 +1,5 @@ -if get_option('help') - find_program('itstool', required: true) +find_program('itstool') - gnome.yelp('sysprof', - sources: 'index.page', 'introduction.page', 'profiling.page', 'faq.page', 'legal.xml', - ) -endif +gnome.yelp('sysprof', + sources: 'index.page', 'introduction.page', 'profiling.page', 'faq.page', 'legal.xml', +)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/help/uk/uk.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/help/uk/uk.po
Changed
@@ -2,21 +2,21 @@ # Copyright (C) 2020 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. # -# Yuri Chornoivan <yurchor@ukr.net>, 2020. +# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2022. msgid "" msgstr "" "Project-Id-Version: sysprof sysprof-3-36\n" -"POT-Creation-Date: 2020-03-29 15:01+0000\n" -"PO-Revision-Date: 2020-06-20 19:48+0300\n" +"POT-Creation-Date: 2022-07-11 20:12+0000\n" +"PO-Revision-Date: 2022-07-14 16:37+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: uk\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Lokalize 20.07.70\n" +"X-Generator: Lokalize 20.12.0\n" #. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2 msgctxt "_" @@ -24,83 +24,6 @@ msgstr "Юрій Чорноіван <yurchor@ukr.net>, 2020" #. (itstool) path: page/title -#: C/faq.page:9 -msgid "What does heap mean?" -msgstr "Що таке «купа»?" - -#. (itstool) path: section/title -#: C/faq.page:12 -msgid "What does \"In file heap\" mean?" -msgstr "Що означає «У файлі купа»?" - -#. (itstool) path: section/p -#: C/faq.page:14 -msgid "" -"This means that sysprof believes a function was called from somewhere in the " -"program's heap (where <code>malloc</code> allocates memory) rather than the " -"code section (where executable code normally lives.) There are several " -"possible explanations." -msgstr "" -"Це означає, що sysprof вважає, що функцію було викликано звідкись з купи" -" програми (області, де пам'ять розподіляє <code>malloc</code>), а не з" -" розділу коду (де зазвичай міститься виконуваний код). У цього може бути" -" декілька пояснень." - -#. (itstool) path: section/title -#: C/faq.page:22 -msgid "JIT (Just in Time) compilers" -msgstr "Компілятори JIT («на льоту»)" - -#. (itstool) path: section/p -#: C/faq.page:24 -msgid "" -"Languages like Java can generate executable code while a program is running " -"and store it in the heap. Sysprof is accurately reporting the situation in " -"this case." -msgstr "" -"Для мов, подібних до Java, можливе створення виконуваного коду безпосередньо" -" під час запуску програми із збереженням його у купі. Sysprof у цьому випадку" -" точно повідомляє про стан речей." - -#. (itstool) path: section/title -#: C/faq.page:30 -msgid "Optimizing compilers" -msgstr "Компілятори із оптимізацією" - -#. (itstool) path: section/p -#: C/faq.page:32 -msgid "" -"C and C++ compilers can optimize away information needed to determine a " -"function's caller, so it is mistaken for heap. You can still tell how " -"often each function is called by the program, but not always from where." -msgstr "" -"Компілятори C і C++ можуть оптимізувати (вилучати) дані, потрібні для" -" визначення джерела виклику функції, тому таке джерело для купи буде" -" помилковим. Ви зможете визначати, як часто викликається певна функція у" -" програмі, але не завжди зможете визначити, звідки її виликають." - -#. (itstool) path: note/p -#: C/faq.page:38 -msgid "" -"For gcc, the flag <code>-fno-omit-frame-pointer</code> will prevent this " -"optimization. The flag is not always needed, for example on x86_64 machines " -"it is only needed with -O3 optimization." -msgstr "" -"У gcc прапорець <code>-fno-omit-frame-pointer</code> вимикає оптимізацію" -" такого різновиду. Явним чином вказувати цей прапорець не завжди потрібно." -" Наприклад, на архітектурі x86_64 він потрібен лише із оптимізацією -O3." - -#. (itstool) path: note/p -#: C/faq.page:44 -msgid "" -"To get the most detailed and accurate call tree from un-optimized code, use " -"these flags: <code>-ggdb -fno-omit-frame-pointer -O0</code>" -msgstr "" -"Щоб отримати найдокладніше і найточніше дерево викликів з неоптимізованого" -" коду, скористайтеся такими прапорцями: <code>-ggdb -fno-omit-frame-pointer" -" -O0</code>" - -#. (itstool) path: page/title #: C/index.page:12 msgid "Sysprof" msgstr "Sysprof" @@ -142,8 +65,8 @@ "<app>Sysprof</app> is a system profiler for Linux that targets the GNOME " "desktop." msgstr "" -"<app>Sysprof</app> — засіб профілювання системи для Linux, який призначено" -" для стільничного середовища GNOME." +"<app>Sysprof</app> — засіб профілювання системи для Linux, який призначено " +"для стільничного середовища GNOME." #. (itstool) path: info/desc #: C/introduction.page:33 @@ -162,9 +85,9 @@ "or system while it runs. That information can be explored to gain insight " "into how the application could be changed to perform better." msgstr "" -"Засіб профілювання — програма, яка під час своєї роботи записує дані щодо" -" програми або системи. Ці дані можна вивчити для того, щоб змінити програму" -" так, щоб вона працювала оптимальніше." +"Засіб профілювання — програма, яка під час своєї роботи записує дані щодо " +"програми або системи. Ці дані можна вивчити для того, щоб змінити програму " +"так, щоб вона працювала оптимальніше." #. (itstool) path: section/p #: C/introduction.page:42 @@ -176,13 +99,13 @@ "frequency and therefore does not see every function call executed by the " "program." msgstr "" -"Існує дві загальні категорії засобів профілювання програмного забезпечення," -" які називають засобами профілювання із трасуванням та засоби профілювання із" -" вибірковим дослідженням. Це означає, що засіб профілювання із трасуванням" -" визначає параметри кожного виклику функції у програмі. Засіб профілювання із" -" вибірковим дослідженням працює шляхом вивчення стану програми із регулярною" -" частотою, тому не може визначити моменти виконання кожного виклику функції" -" програмі." +"Існує дві загальні категорії засобів профілювання програмного забезпечення, " +"які називають засобами профілювання із трасуванням та засоби профілювання із " +"вибірковим дослідженням. Це означає, що засіб профілювання із трасуванням " +"визначає параметри кожного виклику функції у програмі. Засіб профілювання із " +"вибірковим дослідженням працює шляхом вивчення стану програми із регулярною " +"частотою, тому не може визначити моменти виконання кожного виклику функції " +"програмі." #. (itstool) path: section/p #: C/introduction.page:49 @@ -192,11 +115,11 @@ "of a tracing profiler, making it easier to use for software that requires " "interactivity." msgstr "" -"У кожного з типів засобів профілювання, із трасуванням та із вибірковим" -" дослідженням, є свої переваги. Помітною перевагою засобу профілювання із" -" вибірковим дослідженням є те, що накладні витрати ресурсів системи у ньому є" -" набагато меншими за витрати у засобі профілювання із трасуванням, що спрощує" -" його використання для програмного забезпечення, яке потребує інтерактивності." +"У кожного з типів засобів профілювання, із трасуванням та із вибірковим " +"дослідженням, є свої переваги. Помітною перевагою засобу профілювання із " +"вибірковим дослідженням є те, що накладні витрати ресурсів системи у ньому є " +"набагато меншими за витрати у засобі профілювання із трасуванням, що спрощує " +"його використання для програмного забезпечення, яке потребує інтерактивності." #. (itstool) path: section/p #: C/introduction.page:54 @@ -218,13 +141,13 @@ "success by using <app>Sysprof</app> to <link href=\"profiling#new-process-" "profiling\">spawn a new process</link>." msgstr "" -"Коли <app>Sysprof</app> виконує профілювання вашої системи, вона записує дані" -" стека для програм, які виконуються, включно із ядром Linux. Іноді," -" користуватися отриманими значенням незручно, якщо вам потрібні лише дані" -" окремого процесу. Якщо досліджувана програма не надто взаємодії із основною" -" системою, можливо, доцільнішим буде використання <app>Sysprof</app> для <" -"link href=\"profiling#new-process-" -"profiling\">породження нового процесу</link>." +"Коли <app>Sysprof</app> виконує профілювання вашої системи, вона записує " +"дані стека для програм, які виконуються, включно із ядром Linux. Іноді, " +"користуватися отриманими значенням незручно, якщо вам потрібні лише дані " +"окремого процесу. Якщо досліджувана програма не надто взаємодії із основною " +"системою, можливо, доцільнішим буде використання <app>Sysprof</app> для " +"<link href=\"profiling#new-process-profiling\">породження нового процесу</" +"link>." #. (itstool) path: section/p #: C/profiling.page:20 @@ -232,8 +155,8 @@ "To profile your entire system, ensure the target button is set to <em>All " "Processes</em> and click <em>Record</em>." msgstr "" -"Щоб виконати профілювання усієї системи, переконайтеся, що кнопку цілі" -" встановлено у значення <em>Усі процеси</em>, і натисніть <em>Записати</em>." +"Щоб виконати профілювання усієї системи, переконайтеся, що кнопку цілі " +"встановлено у значення <em>Усі процеси</em>, і натисніть <em>Записати</em>." #. (itstool) path: section/p #: C/profiling.page:23 @@ -242,10 +165,10 @@ "system. This is required as the Linux kernel's perf implementation requires " "root to perform whole-system profiling." msgstr "" -"На цьому кроці система може попросити вас пройти <em>уповноваження</em> для" -" доступу до профілювання системи. Таке уповноваження потрібне, оскільки" -" реалізація perf у ядрі Linux потребує прав доступу адміністратора (root) для" -" виконання профілювання на рівні усієї системи." +"На цьому кроці система може попросити вас пройти <em>уповноваження</em> для " +"доступу до профілювання системи. Таке уповноваження потрібне, оскільки " +"реалізація perf у ядрі Linux потребує прав доступу адміністратора (root) для " +"виконання профілювання на рівні усієї системи." #. (itstool) path: section/p #: C/profiling.page:27 @@ -254,9 +177,9 @@ "has been active. Clicking the <em>Record</em> button again will stop the " "profiling session. Afterwhich, the callgraph will be displayed." msgstr "" -"Під час сеансу профілювання ви побачите кількість секунд, протягом яких був" -" активним профіль. Повторне натискання кнопки <em>Записати</em> зупинить" -" сеанс профілювання. Після цього буде показано граф викликів." +"Під час сеансу профілювання ви побачите кількість секунд, протягом яких був " +"активним профіль. Повторне натискання кнопки <em>Записати</em> зупинить " +"сеанс профілювання. Після цього буде показано граф викликів." #. (itstool) path: note/p #: C/profiling.page:33 @@ -266,11 +189,11 @@ "<cmd>sysprof-cli</cmd>. This is a command line program that will capture " "your profiling session to disk to be viewed at a later time." msgstr "" -"Якщо у вашому графі викликів профілювання ви побачите пункт програми <app" -">sysprof</app>, вам варто спробувати записати сеанс профілювання за допомогою" -" програми <cmd>sysprof-cli</cmd>. Ця програма є засобом командного рядка," -" який виконає запис вашого сеансу профілювання на диск для подальшого" -" перегляду." +"Якщо у вашому графі викликів профілювання ви побачите пункт програми " +"<app>sysprof</app>, вам варто спробувати записати сеанс профілювання за " +"допомогою програми <cmd>sysprof-cli</cmd>. Ця програма є засобом командного " +"рядка, який виконає запис вашого сеансу профілювання на диск для подальшого " +"перегляду." #. (itstool) path: section/p #: C/profiling.page:39 C/profiling.page:62 @@ -278,8 +201,8 @@ "See <link href=\"profiling#interpreting-results\">interpreting results</" "link> for more guidance." msgstr "" -"Щоб дізнатися більше, ознайомтеся із розділом щодо <link" -" href=\"profiling#interpreting-results\">інтерпретації результатів</link>." +"Щоб дізнатися більше, ознайомтеся із розділом щодо <link href=" +"\"profiling#interpreting-results\">інтерпретації результатів</link>." #. (itstool) path: section/title #: C/profiling.page:48 @@ -295,13 +218,13 @@ "is displayed. Next, select as many processes as you'd like to profile. " "Processes selected for profiling will have a checkmark next to their name." msgstr "" -"За допомогою <app>Sysprof</app> ви зможете виконати профілювання одного або" -" декількох наявних процесів у вашій системі. Для початку, скористайтеся" -" кнопкою <em>ціль профілювання</em>, яку розташовано поруч із кнопкою <em" -">Записати</em>. На контекстній панелі, яку буде показано, виберіть пункт <em" -">Наявний процес</em>. Далі, виберіть процеси, які ви хочете профілювати." -" Перед пунктами процесів, які ви виберете для профілювання, буде показано" -" позначки." +"За допомогою <app>Sysprof</app> ви зможете виконати профілювання одного або " +"декількох наявних процесів у вашій системі. Для початку, скористайтеся " +"кнопкою <em>ціль профілювання</em>, яку розташовано поруч із кнопкою " +"<em>Записати</em>. На контекстній панелі, яку буде показано, виберіть пункт " +"<em>Наявний процес</em>. Далі, виберіть процеси, які ви хочете профілювати. " +"Перед пунктами процесів, які ви виберете для профілювання, буде показано " +"позначки." #. (itstool) path: section/p #: C/profiling.page:56 @@ -309,8 +232,8 @@ "After selecting your target processes, click the <em>Record</em> button to " "start profiling." msgstr "" -"Після вибору процесів-цілей натисніть кнопку <em>Записати</em>, щоб розпочати" -" профілювання." +"Після вибору процесів-цілей натисніть кнопку <em>Записати</em>, щоб " +"розпочати профілювання." #. (itstool) path: section/p #: C/profiling.page:59 @@ -318,8 +241,8 @@ "When you have completed, click the <em>Record</em> button again to stop " "profiling." msgstr "" -"У момент, коли профілювання слід завершити, натисніть кнопку <em>Записати</em" -"> ще раз, щоб припинити профілювання." +"У момент, коли профілювання слід завершити, натисніть кнопку <em>Записати</" +"em> ще раз, щоб припинити профілювання." #. (itstool) path: section/title #: C/profiling.page:71 @@ -334,10 +257,11 @@ "Next, select <em>New Process</em> and fill out the necessary information to " "spawn the process." msgstr "" -"Часто у вас може виникнути потреба у запуску нового процесу для профілювання." -" Спочатку натисніть кнопку <em>ціль профілювання</em>, яку розташовано поряд" -" із кнопкою <em>Записати</em>. Далі, виберіть <em>Новий процес</em> і" -" заповніть необхідні відомості щодо процесу, який слід запустити." +"Часто у вас може виникнути потреба у запуску нового процесу для " +"профілювання. Спочатку натисніть кнопку <em>ціль профілювання</em>, яку " +"розташовано поряд із кнопкою <em>Записати</em>. Далі, виберіть <em>Новий " +"процес</em> і заповніть необхідні відомості щодо процесу, який слід " +"запустити." #. (itstool) path: note/p #: C/profiling.page:79 @@ -346,9 +270,9 @@ "such as a GTK+ application, you will want to make sure <em>Inherit current " "environment</em> is set." msgstr "" -"Якщо ви запускаєте процес, який потребує доступу до вашого поточного дисплея," -" зокрема програму на основі GTK+, вам варто позначити пункт <em>Успадкувати" -" середовище</em>." +"Якщо ви запускаєте процес, який потребує доступу до вашого поточного " +"дисплея, зокрема програму на основі GTK+, вам варто позначити пункт " +"<em>Успадкувати середовище</em>." #. (itstool) path: section/title #: C/profiling.page:90 @@ -363,11 +287,11 @@ "entire system and save the output to <file>capture.syscap</file>. This file " "can be opened with the <app>Sysprof</app> application to view the callgraph." msgstr "" -"Для мінімізації накладних витрат вам варто скористатися засобом командного" -" рядка <cmd>sysprof-cli</cmd>. Якщо програму буде запущено без аргументів," -" вона запише дані усієї системи із збереже виведені дані до файла <file" -">capture.syscap</file>. Цей файл може бути відкрито за допомогою програми <" -"app>Sysprof</app> для перегляду графу викликів." +"Для мінімізації накладних витрат вам варто скористатися засобом командного " +"рядка <cmd>sysprof-cli</cmd>. Якщо програму буде запущено без аргументів, " +"вона запише дані усієї системи із збереже виведені дані до файла " +"<file>capture.syscap</file>. Цей файл може бути відкрито за допомогою " +"програми <app>Sysprof</app> для перегляду графу викликів." #. (itstool) path: section/p #: C/profiling.page:97 @@ -375,8 +299,8 @@ "You can also attach to an existing process using <cmd>sysprof-cli -p pid</" "cmd>." msgstr "" -"Ви також можете долучити програму до наявного процесу за допомогою команди <" -"cmd>sysprof-cli -p pid</cmd>." +"Ви також можете долучити програму до наявного процесу за допомогою команди " +"<cmd>sysprof-cli -p pid</cmd>." #. (itstool) path: section/p #: C/profiling.page:100 @@ -385,9 +309,9 @@ "cmd> to specify a command to be launched. The command will inherit the " "current environment." msgstr "" -"Якщо ви хочете запустити новий процес, скористайтеся командою <cmd" -">sysprof-cli -c 'команда'</cmd>, щоб вказати команду, яку буде запущено." -" Команда успадкує поточне середовище." +"Якщо ви хочете запустити новий процес, скористайтеся командою <cmd>sysprof-" +"cli -c 'команда'</cmd>, щоб вказати команду, яку буде запущено. Команда " +"успадкує поточне середовище." #. (itstool) path: section/title #: C/profiling.page:110 @@ -401,9 +325,9 @@ "On the top left is a list of all the functions profiled. They are sorted by " "how often they were called during the recording." msgstr "" -"Результати профілювання у <app>Sysprof</app> поділено на три розділи. У" -" верхній лівій частині буде показано список усіх профільованих функцій. Їх" -" буде упорядковано за частотою їхнього виклику під час записування даних." +"Результати профілювання у <app>Sysprof</app> поділено на три розділи. У " +"верхній лівій частині буде показано список усіх профільованих функцій. Їх " +"буде упорядковано за частотою їхнього виклику під час записування даних." #. (itstool) path: note/p #: C/profiling.page:117 @@ -413,11 +337,11 @@ "The percentage is calculated by determining how often that function showed " "up in the current stacktrace when a sample was recorded." msgstr "" -"Важливо зауважити, що обсяг часу, витрачений у кожній з функцій, не" -" записуватиметься. Для точного запису цих даних потрібен засіб профілювання" -" із трасуванням. Відсоток для кожної функції буде обчислено за тим, наскільки" -" часто цю функцію буде показано у поточному трасуванні стеку, коли було" -" записано вибірку даних." +"Важливо зауважити, що обсяг часу, витрачений у кожній з функцій, не " +"записуватиметься. Для точного запису цих даних потрібен засіб профілювання " +"із трасуванням. Відсоток для кожної функції буде обчислено за тим, наскільки " +"часто цю функцію буде показано у поточному трасуванні стеку, коли було " +"записано вибірку даних." #. (itstool) path: section/p #: C/profiling.page:123 @@ -427,10 +351,10 @@ "sorted by the percentage of samples that included that function in the " "stacktrace." msgstr "" -"Після вибору функції зі списку функцій усі дані із записаних джерел викликів" -" цієї функції буде показано у нижній лівій частині вікна. Їх також буде" -" упорядковано за відсотком вибірок, до трасування стеку яких включено цю" -" функцію." +"Після вибору функції зі списку функцій усі дані із записаних джерел викликів " +"цієї функції буде показано у нижній лівій частині вікна. Їх також буде " +"упорядковано за відсотком вибірок, до трасування стеку яких включено цю " +"функцію." #. (itstool) path: section/p #: C/profiling.page:128 @@ -438,8 +362,8 @@ "On the right, are all of the decendants of a selected function. You can " "select a function either from the functions list, or the callers list." msgstr "" -"Праворуч буде показано усі спадкоємців вибраної функції. Ви можете вибрати" -" функцію або зі списку функцій, або зі списку джерел виклику." +"Праворуч буде показано усі спадкоємців вибраної функції. Ви можете вибрати " +"функцію або зі списку функцій, або зі списку джерел виклику." #. (itstool) path: section/p #: C/profiling.page:131 @@ -447,9 +371,9 @@ "You can jump into a function by activating a row in the tree of descendants " "with a double-click or by pressing <key>Enter</key> or <key>Spacebar</key>." msgstr "" -"Ви можете перейти всередину функції активацією рядка у ієрархії спадкоємців" -" подвійним клацанням лівою кнопкою миші або натисканням клавіш <key>Enter<" -"/key> або <key>Пробіл</key>." +"Ви можете перейти всередину функції активацією рядка у ієрархії спадкоємців " +"подвійним клацанням лівою кнопкою миші або натисканням клавіш <key>Enter</" +"key> або <key>Пробіл</key>." #. (itstool) path: note/p #: C/profiling.page:135 @@ -458,6 +382,104 @@ "application transitioned into or from the Linux kernel. There can be many " "reasons for this such as a <em>syscall</em> or <em>signal</em>." msgstr "" -"Якщо ви бачите у результатах записи <em>- - kernel - -</em>, це означає, що" -" програма передає керування ядру Linux або навпаки. Для цього може бути" -" багато причин, зокрема <em>системний виклик</em> або <em>сигнал</em>." +"Якщо ви бачите у результатах записи <em>- - kernel - -</em>, це означає, що " +"програма передає керування ядру Linux або навпаки. Для цього може бути " +"багато причин, зокрема <em>системний виклик</em> або <em>сигнал</em>." + +#. (itstool) path: page/title +#: C/faq.page:9 +msgid "What does heap mean?" +msgstr "Що таке «купа»?" + +#. (itstool) path: section/title +#: C/faq.page:12 +msgid "What does \"In file heap\" mean?" +msgstr "Що означає «У файлі купа»?" + +#. (itstool) path: section/p +#: C/faq.page:14 +msgid "" +"This means that sysprof believes a function was called from somewhere in the " +"program's heap (where <code>malloc</code> allocates memory) rather than the " +"code section (where executable code normally lives.) There are several " +"possible explanations." +msgstr "" +"Це означає, що sysprof вважає, що функцію було викликано звідкись з купи " +"програми (області, де пам'ять розподіляє <code>malloc</code>), а не з " +"розділу коду (де зазвичай міститься виконуваний код). У цього може бути " +"декілька пояснень." + +#. (itstool) path: section/title +#: C/faq.page:22 +msgid "JIT (Just in Time) compilers" +msgstr "Компілятори JIT («на льоту»)" + +#. (itstool) path: section/p +#: C/faq.page:24 +msgid "" +"Languages like Java can generate executable code while a program is running " +"and store it in the heap. Sysprof is accurately reporting the situation in " +"this case." +msgstr "" +"Для мов, подібних до Java, можливе створення виконуваного коду безпосередньо " +"під час запуску програми із збереженням його у купі. Sysprof у цьому випадку " +"точно повідомляє про стан речей." + +#. (itstool) path: section/title +#: C/faq.page:30 +msgid "Optimizing compilers" +msgstr "Компілятори із оптимізацією" + +#. (itstool) path: section/p +#: C/faq.page:32 +msgid "" +"C and C++ compilers can optimize away information needed to determine a " +"function's caller, so it is mistaken for heap. You can still tell how " +"often each function is called by the program, but not always from where." +msgstr "" +"Компілятори C і C++ можуть оптимізувати (вилучати) дані, потрібні для " +"визначення джерела виклику функції, тому таке джерело для купи буде " +"помилковим. Ви зможете визначати, як часто викликається певна функція у " +"програмі, але не завжди зможете визначити, звідки її виликають." + +#. (itstool) path: note/p +#: C/faq.page:38 +msgid "" +"For gcc, the flag <code>-fno-omit-frame-pointer</code> will prevent this " +"optimization. The flag is not always needed, for example on x86_64 machines " +"it is only needed with -O3 optimization." +msgstr "" +"У gcc прапорець <code>-fno-omit-frame-pointer</code> вимикає оптимізацію " +"такого різновиду. Явним чином вказувати цей прапорець не завжди потрібно. " +"Наприклад, на архітектурі x86_64 він потрібен лише із оптимізацією -O3." + +#. (itstool) path: note/p +#: C/faq.page:44 +msgid "" +"To get the most detailed and accurate call tree from un-optimized code, use " +"these flags: <code>-ggdb -fno-omit-frame-pointer -O0</code>" +msgstr "" +"Щоб отримати найдокладніше і найточніше дерево викликів з неоптимізованого " +"коду, скористайтеся такими прапорцями: <code>-ggdb -fno-omit-frame-pointer -" +"O0</code>" + +#. (itstool) path: p/link +#: C/legal.xml:5 +msgid "Creative Commons Attribution-ShareAlike 4.0 International" +msgstr "Непортованої ліцензії Creative Commons Attribution-ShareAlike 4.0" + +#. (itstool) path: license/p +#: C/legal.xml:4 +msgid "This work is licensed under a <_:link-1/> license." +msgstr "Ця робота розповсюджується за умов дотримання <_:link-1/>." + +#. (itstool) path: license/p +#: C/legal.xml:8 +msgid "" +"As a special exception, the copyright holders give you permission to copy, " +"modify, and distribute the example code contained in this documentation " +"under the terms of your choosing, without restriction." +msgstr "" +"За виняткових обставин власники авторських прав можу надати вам дозвіл " +"копіювати, змінювати і розповсюджувати приклади коду, що містяться у цьому " +"документі, за довільних умов, без обмежень."
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/meson.build
Changed
@@ -1,34 +1,41 @@ project('sysprof', 'c', license: 'GPL3+', 'GPL2+', - version: '3.44.0', - meson_version: '>=0.51.0', + version: '3.46.0', + meson_version: '>=0.59.0', default_options: 'c_std=gnu11', 'cpp_std=c++11', 'warning_level=2', ) -symbolic_version = '42.0' +symbolic_version = '43.0' -gnome = import('gnome') +gnome = import('gnome', required: get_option('gtk')) pkgconfig = import('pkgconfig') i18n = import('i18n') +if get_option('development') + app_id = 'org.gnome.Sysprof.Devel' +else + app_id = 'org.gnome.Sysprof' +endif + libsysprof_api_version = 4 +libsysprof_ui_api_version = 5 + version_split = meson.project_version().split('.') datadir = get_option('datadir') datadir_for_pc_file = join_paths('${prefix}', datadir) -podir = join_paths(meson.source_root(), 'po') +podir = join_paths(meson.current_source_dir(), 'po') -glib_req_version = '>= 2.67.4' -gtk_req_version = '>= 3.22' +glib_req_version = '>= 2.73.0' +gtk_req_version = '>= 4.6' polkit_req_version = '>= 0.105' -dazzle_req_version = '>= 3.30.0' cc = meson.get_compiler('c') -if get_option('libsysprof') - add_languages('cpp') +if get_option('libsysprof') or get_option('agent') + add_languages('cpp', native: false) cxx = meson.get_compiler('cpp') endif @@ -44,6 +51,8 @@ config_h.set('PACKAGE_TARNAME', 'PACKAGE_STRING') config_h.set('PACKAGE', 'PACKAGE_NAME') config_h.set('VERSION', 'PACKAGE_VERSION') +config_h.set('APP_ID', app_id) +config_h.set_quoted('APP_ID_S', app_id) # Detect and set symbol visibility if get_option('default_library') != 'static' @@ -81,13 +90,17 @@ config_h.set10('HAVE_POLKIT', polkit_dep.found()) if get_option('libunwind') - libunwind_dep = dependency('libunwind-generic') + # Force libunwind usage if it's specified to avoid back compiles + # and backtrace() showing up in builds + libunwind_dep = dependency('libunwind-generic', required: true) config_h.set('ENABLE_LIBUNWIND', libunwind_dep.found()) config_h.set('HAVE_UNW_SET_CACHE_SIZE', libunwind_dep.found() and cc.has_header_symbol('libunwind.h', 'unw_set_cache_size', dependencies: libunwind_dep)) endif # Development build setup -config_h.set('DEVELOPMENT_BUILD', version_split1.to_int().is_odd()) +if get_option('development') + config_h.set10('DEVELOPMENT_BUILD', true) +endif has_use_clockid = cc.has_member('struct perf_event_attr', 'use_clockid', prefix: '#include <linux/perf_event.h>') has_clockid = cc.has_member('struct perf_event_attr', 'clockid', prefix: '#include <linux/perf_event.h>') @@ -191,21 +204,33 @@ return 0; } ''') - config_h.set10('HAVE_STDATOMIC_H', 1) + config_h.set10('HAVE_STDATOMIC_H', true) endif +needs_service_access = get_option('libsysprof') or get_option('agent') +install_service_files = needs_service_access or get_option('sysprofd') == 'bundled' + subdir('src') subdir('data') -subdir('examples') -subdir('help') subdir('po') +if get_option('help') + subdir('help') +endif + +if get_option('examples') + subdir('examples') +endif + configure_file( input: 'config.h.meson', output: 'config.h', configuration: config_h ) -if get_option('enable_gtk') - meson.add_install_script('build-aux/meson/post_install.sh') +if get_option('gtk') and gnome.found() + gnome.post_install( + gtk_update_icon_cache: true, + update_desktop_database: true + ) endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/meson_options.txt -> _service:tar_scm:sysprof-3.46.0.tar.xz/meson_options.txt
Changed
@@ -1,16 +1,24 @@ +# If this is a development build, which is used for our Flatpak build +# so that we have a different app-id (.Devel suffix) than the regular +# application. +option('development', type: 'boolean', value: 'false') + # Optionally disable the GTK application in case you're building the # sysprof-cli only for your platform. Might be useful in IoT or various # server scenarios. -option('enable_gtk', type: 'boolean') +option('gtk', type: 'boolean') # Disable libsysprof/ui (in situations you only want sysprof-capture) option('libsysprof', type: 'boolean') +# Allow disabling the installation of libsysprof-capture*.a +option('install-static', type: 'boolean') + # Optionally compile sysprofd, which is needed to get elevated privileges. # You only really want to ignore this if you are running from a container # and are talking to a host daemon. Also, if you're compiling for something # other than Linux to allow viewing syscap files. -option('with_sysprofd', type: 'combo', +option('sysprofd', type: 'combo', choices: 'host', 'bundled', 'none', value: 'bundled', ) @@ -35,12 +43,16 @@ # Optionally disable the tools (this is mostly only useful for building only # libsysprof-capture as a subproject) -option('enable_tools', type: 'boolean') +option('tools', type: 'boolean') # Optionally disable the tests (this is mostly only useful for building only # libsysprof-capture as a subproject) -option('enable_tests', type: 'boolean') +option('tests', type: 'boolean') # Optionally disable the examples (this is mostly only useful for building only # libsysprof-capture as a subproject) -option('enable_examples', type: 'boolean') +option('examples', type: 'boolean') + +# Optionally build the sysprof-agent tool to allow profiling inside of +# containers from external system +option('agent', type: 'boolean', description: 'Build the sysprof-agent utility')
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/org.gnome.Sysprof.Devel.json
Added
@@ -0,0 +1,123 @@ +{ + "app-id" : "org.gnome.Sysprof.Devel", + "runtime" : "org.gnome.Platform", + "runtime-version" : "master", + "sdk" : "org.gnome.Sdk", + "command" : "sysprof", + "tags" : + "nightly" + , + "desktop-file-name-suffix" : " (Nightly)", + "finish-args" : + "--require-version=1.0.0", + "--allow=devel", + "--talk-name=org.freedesktop.Flatpak", + "--device=dri", + "--share=ipc", + "--socket=fallback-x11", + "--socket=wayland", + "--socket=session-bus", + "--socket=system-bus", + "--filesystem=home", + "--filesystem=host", + "--share=network", + "--talk-name=org.gtk.vfs.*", + "--system-talk-name=org.freedesktop.PolicyKit1", + "--system-talk-name=org.gnome.Sysprof3", + "--system-talk-name=org.freedesktop.Avahi", + "--filesystem=xdg-run/gvfsd", + "--filesystem=/var/lib/flatpak" + , + "build-options" : { + "cflags" : "-O2 -g -fno-omit-frame-pointer", + "cxxflags" : "-O2 -g -fno-omit-frame-pointer" + }, + "cleanup" : + "/include", + "/lib/pkgconfig", + "/share/pkgconfig", + "/share/aclocal", + "/man", + "/share/man", + "/share/gtk-doc", + "/share/doc", + "/share/vala", + "/share/bash-completions", + "*.la", + "*.a" + , + "modules" : + { + "name": "intltool", + "cleanup": "*" , + "sources": + { + "type": "archive", + "url": "https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz", + "sha256": "67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd" + } + + }, + { + "name" : "polkit", + "config-opts" : + "--disable-polkitd", + "--disable-man-pages", + "--disable-introspection", + "--disable-examples", + "--disable-gtk-doc", + "--disable-libelogind", + "--disable-libsystemd-login", + "--with-systemdsystemunitdir=no", + "--with-authdb=dummy", + "--with-authfw=none" + , + "rm-configure" : true, + "cleanup" : + "/bin/*", + "/etc/pam.d", + "/etc/dbus-1", + "/share/dbus-1/system-services/*", + "/share/polkit-1/actions/*", + "/lib/polkit-1" + , + "sources" : + { + "type" : "archive", + "url" : "https://www.freedesktop.org/software/polkit/releases/polkit-0.116.tar.gz", + "sha256" : "88170c9e711e8db305a12fdb8234fac5706c61969b94e084d0f117d8ec5d34b1" + }, + { + "type" : "patch", + "path" : "build-aux/flatpak/polkit-build-Add-option-to-build-without-polkitd.patch" + }, + { + "type" : "file", + "path" : "build-aux/flatpak/polkit-autogen", + "dest-filename" : "autogen.sh" + } + + }, + { + "name" : "sysprof", + "config-opts" : + "--libdir=/app/lib", + "--buildtype=debugoptimized", + "-Dagent=true", + "-Ddevelopment=true", + "-Dlibsysprof=true", + "-Dgtk=true", + "-Dsysprofd=host" + , + "buildsystem" : "meson", + "builddir" : true, + "sources" : + { + "type" : "git", + "url" : "https://gitlab.gnome.org/GNOME/sysprof.git", + "branch" : "master" + } + + } + +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/POTFILES.in -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/POTFILES.in
Changed
@@ -1,8 +1,7 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -data/org.gnome.Sysprof3.appdata.xml.in -data/org.gnome.Sysprof3.desktop.in -data/org.gnome.sysprof3.gschema.xml +data/org.gnome.Sysprof.appdata.xml.in.in +data/org.gnome.Sysprof.desktop.in.in src/libsysprof/sysprof-callgraph-profile.c src/libsysprof/sysprof-perf-source.c src/libsysprof-ui/sysprof-battery-aid.c @@ -10,6 +9,7 @@ src/libsysprof-ui/sysprof-callgraph-page.c src/libsysprof-ui/sysprof-callgraph-page.ui src/libsysprof-ui/sysprof-cell-renderer-percent.c +src/libsysprof-ui/sysprof-cell-renderer-progress.c src/libsysprof-ui/sysprof-counters-aid.c src/libsysprof-ui/sysprof-cpu-aid.c src/libsysprof-ui/sysprof-depth-visualizer.c @@ -45,6 +45,6 @@ src/sysprof/gtk/menus.ui src/sysprof/sysprof-application.c src/sysprof/sysprof-window.c -src/sysprof/ui/sysprof-window.ui +src/sysprof/sysprof-window.ui src/tools/sysprof-cli.c src/tools/sysprof-profiler-ctl.c
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/da.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/da.po
Changed
@@ -6,19 +6,20 @@ msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2020-07-02 00:51+0000\n" -"PO-Revision-Date: 2020-10-10 00:00+0200\n" -"Last-Translator: scootergrisen\n" +"POT-Creation-Date: 2022-02-03 16:15+0000\n" +"PO-Revision-Date: 2022-03-27 16:44+0200\n" +"Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.3\n" #: data/org.gnome.Sysprof3.appdata.xml.in:5 #: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:12 +#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 msgid "Sysprof" msgstr "Sysprof" @@ -103,26 +104,26 @@ "Miljøet som sidst blev startet, som indstilles i brugerfladen når programmet " "genstartes." -#: src/libsysprof/sysprof-callgraph-profile.c:445 +#: src/libsysprof/sysprof-callgraph-profile.c:447 msgid "Sysprof was unable to generate a callgraph from the system capture." msgstr "Sysprof kunne ikke generere en kaldegraf fra systemoptagelsen." -#: src/libsysprof/sysprof-perf-source.c:476 +#: src/libsysprof/sysprof-perf-source.c:472 #, c-format msgid "Sysprof failed to find field “%s”." msgstr "Sysprof kunne ikke finde feltet “%s”." -#: src/libsysprof/sysprof-perf-source.c:489 +#: src/libsysprof/sysprof-perf-source.c:485 #, c-format msgid "Sysprof failed to parse offset for “%s”." msgstr "Sysprof kunne ikke fortolke forskydning for “%s”." -#: src/libsysprof/sysprof-perf-source.c:553 +#: src/libsysprof/sysprof-perf-source.c:549 #, c-format msgid "Sysprof failed to get perf_event ID." msgstr "Sysprof kunne ikke hente id for perf_event." -#: src/libsysprof/sysprof-perf-source.c:659 +#: src/libsysprof/sysprof-perf-source.c:655 #, c-format msgid "An error occurred while attempting to access performance counters" msgstr "Der opstod en fejl ved forsøg på at tilgå ydelsestællerne" @@ -159,35 +160,35 @@ msgstr "Kaldegraf" #: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:236 +#: src/libsysprof-ui/sysprof-memprof-page.ui:245 msgid "Functions" msgstr "Funktioner" #: src/libsysprof-ui/sysprof-callgraph-page.ui:43 #: src/libsysprof-ui/sysprof-callgraph-page.ui:104 #: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:253 -#: src/libsysprof-ui/sysprof-memprof-page.ui:315 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-memprof-page.ui:262 +#: src/libsysprof-ui/sysprof-memprof-page.ui:324 +#: src/libsysprof-ui/sysprof-memprof-page.ui:380 msgid "Self" msgstr "Eget" #: src/libsysprof-ui/sysprof-callgraph-page.ui:59 #: src/libsysprof-ui/sysprof-callgraph-page.ui:120 #: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:269 -#: src/libsysprof-ui/sysprof-memprof-page.ui:331 -#: src/libsysprof-ui/sysprof-memprof-page.ui:387 +#: src/libsysprof-ui/sysprof-memprof-page.ui:278 +#: src/libsysprof-ui/sysprof-memprof-page.ui:340 +#: src/libsysprof-ui/sysprof-memprof-page.ui:396 msgid "Total" msgstr "Samlet" #: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +#: src/libsysprof-ui/sysprof-memprof-page.ui:307 msgid "Callers" msgstr "Kaldere" #: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:362 +#: src/libsysprof-ui/sysprof-memprof-page.ui:371 msgid "Descendants" msgstr "Underordnede" @@ -205,12 +206,12 @@ msgstr "Sysprof er ved at oprette den valgte kaldegraf." #: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:433 +#: src/libsysprof-ui/sysprof-memprof-page.ui:442 msgid "Not Enough Samples" msgstr "Ikke nok datapunkter" #: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:434 +#: src/libsysprof-ui/sysprof-memprof-page.ui:443 msgid "More samples are necessary to display a callgraph." msgstr "Der skal være flere datapunkter for at kunne vise en kaldegraf." @@ -242,11 +243,11 @@ msgid "Processes" msgstr "Processer" -#: src/libsysprof-ui/sysprof-details-page.c:224 +#: src/libsysprof-ui/sysprof-details-page.c:220 msgid "Memory Capture" msgstr "Hukommelsesoptagelse" -#: src/libsysprof-ui/sysprof-details-page.c:238 +#: src/libsysprof-ui/sysprof-details-page.c:234 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf sekunder" @@ -290,7 +291,6 @@ msgstr "Tællere optaget" #: src/libsysprof-ui/sysprof-details-page.ui:151 -#| msgid "Counters Captured" msgid "Allocations Captured" msgstr "Allokeringer optaget" @@ -334,35 +334,33 @@ # scootergrisen: tjek at det er oversat korrekt #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:258 +#: src/libsysprof-ui/sysprof-display.c:265 #, c-format -#| msgctxt "shortcut window" -#| msgid "Recording" msgid "Recording at %s" msgstr "Optagelse %s" -#: src/libsysprof-ui/sysprof-display.c:262 +#: src/libsysprof-ui/sysprof-display.c:269 msgid "New Recording" msgstr "Ny optagelse" -#: src/libsysprof-ui/sysprof-display.c:1087 +#: src/libsysprof-ui/sysprof-display.c:1094 msgid "The recording could not be opened" msgstr "Optagelsen kunne ikke åbnes" -#: src/libsysprof-ui/sysprof-display.c:1210 +#: src/libsysprof-ui/sysprof-display.c:1217 msgid "Save Recording" msgstr "Gem optagelse" -#: src/libsysprof-ui/sysprof-display.c:1213 +#: src/libsysprof-ui/sysprof-display.c:1220 msgid "Save" msgstr "Gem" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1214 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 msgid "Cancel" msgstr "Annuller" -#: src/libsysprof-ui/sysprof-display.c:1240 +#: src/libsysprof-ui/sysprof-display.c:1247 #, c-format msgid "Failed to save recording: %s" msgstr "Kunne ikke gemme optagelse: %s" @@ -463,7 +461,6 @@ msgstr "Hukommelsesforbrug" #: src/libsysprof-ui/sysprof-memprof-aid.c:182 -#| msgid "Memory Usage" msgid "Memory" msgstr "Hukommelse" @@ -473,7 +470,6 @@ msgstr "Hukommelsesallokeringer" #: src/libsysprof-ui/sysprof-memprof-aid.c:224 -#| msgid "Launch Application" msgid "Track Allocations" msgstr "Spor allokeringer" @@ -495,21 +491,23 @@ msgid "Temporary Allocations" msgstr "Midlertidige allokeringer" -#: src/libsysprof-ui/sysprof-memprof-page.ui:402 +#: src/libsysprof-ui/sysprof-memprof-page.ui:49 +msgid "Leaked Allocations" +msgstr "Lækkede allokeringer" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:411 msgid "Size" msgstr "Størrelse" -#: src/libsysprof-ui/sysprof-memprof-page.ui:422 +#: src/libsysprof-ui/sysprof-memprof-page.ui:431 msgid "Analyzing Memory Allocations" msgstr "Analyserer hukommelsesallokeringer" -#: src/libsysprof-ui/sysprof-memprof-page.ui:423 -#| msgid "Sysprof is busy creating the selected callgraph." +#: src/libsysprof-ui/sysprof-memprof-page.ui:432 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof er ved at analysere hukommelsesallokeringer." #: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 -#| msgid "Memory Usage" msgid "Memory Used" msgstr "Hukommelse brugt" @@ -523,61 +521,61 @@ msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:104 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 msgid "Profilers" msgstr "Profileringer" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:207 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 msgid "" "Track application memory allocations (Sysprof must launch target application)" msgstr "" "Spor programmers hukommelsesallokeringer (Sysprof skal starte målprogrammet)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:215 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 msgid "Track slow operations on your applications main loop" msgstr "Spor langsomme handlinger i dine programmers hovedløkke" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:231 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 msgid "All Processes" msgstr "Alle processer" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:261 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 msgid "" "Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system system configurations." +"not be possible on some system configurations." msgstr "" "Medtag alle programmer og styresystemkerne i kaldegraf. På nogle " "systemkonfigurationer er det ikke muligt." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:289 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 msgid "Search Processes…" msgstr "Søg efter processer …" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:308 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 msgid "Loading Processes…" msgstr "Indlæser processer …" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:332 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 msgid "Launch Application" msgstr "Start program" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:361 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 msgid "Enable to launch a program of your choosing before profiling." msgstr "Starter et program, efter eget valgt, inden profilering." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:389 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 msgid "Command Line" msgstr "Kommandolinje" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:408 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 msgid "Environment" msgstr "Miljø" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:434 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:413 msgid "Inherit Environment" msgstr "Nedarv miljø" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:458 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:437 msgid "" "Enable to ensure your application shares the display, message-bus, and other " "desktop environment settings." @@ -585,11 +583,11 @@ "Aktivér, for at sikre at dit program deler skærmen, meddelelsesbussen og " "andre skrivebordsmiljøindstillinger." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:484 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:463 msgid "Allow CPU Throttling" msgstr "Tillad justering af CPU-hastighed" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:491 msgid "" "If disabled, your CPU will be placed in performance mode. It will be " "restored after profiling." @@ -597,7 +595,7 @@ "Hvis den er deaktiveret, så sættes din CPU i ydelsestilstand. Den sættes " "tilbage efter profilering." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:533 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 msgid "_Record" msgstr "_Optag" @@ -837,132 +835,130 @@ msgid "All Files" msgstr "Alle filer" -#: src/sysprof/ui/sysprof-window.ui:29 -#| msgid "Open" +#: src/sysprof/ui/sysprof-window.ui:28 msgid "_Open" msgstr "_Åbn" -#: src/sysprof/ui/sysprof-window.ui:32 -#| msgid "Open Recording…" +#: src/sysprof/ui/sysprof-window.ui:31 msgid "Open Recording… (Ctrl+O)" msgstr "Åbn optagelse … (Ctrl+O)" -#: src/tools/sysprof-cli.c:59 +#: src/tools/sysprof-cli.c:62 msgid "Stopping profiler. Press twice more ^C to force exit." -msgstr "Stopper profilering. Tryk to gange mere på ^C for at gennemtvinge afslutning." +msgstr "" +"Stopper profilering. Tryk to gange mere på ^C for at gennemtvinge afslutning." -#: src/tools/sysprof-cli.c:72 -#| msgid "Profilers" +#: src/tools/sysprof-cli.c:75 msgid "Profiler stopped." msgstr "Profilering stoppet." # scootergrisen: tjek oversættelsen af "filename arguments" -#: src/tools/sysprof-cli.c:105 +#: src/tools/sysprof-cli.c:108 msgid "--merge requires at least 2 filename arguments" msgstr "--merge kræver mindst 2 filnavnsargumenter" -#: src/tools/sysprof-cli.c:219 +#: src/tools/sysprof-cli.c:226 msgid "Disable CPU throttling while profiling" msgstr "Deaktivér justering af CPU-hastighed under profilering" -#: src/tools/sysprof-cli.c:220 +#: src/tools/sysprof-cli.c:227 msgid "Make sysprof specific to a task" msgstr "Gør sysprof specifik til en opgave" -#: src/tools/sysprof-cli.c:220 +#: src/tools/sysprof-cli.c:227 msgid "PID" msgstr "PID" -#: src/tools/sysprof-cli.c:221 +#: src/tools/sysprof-cli.c:228 msgid "Run a command and profile the process" msgstr "Kør en kommando og profilér processen" -#: src/tools/sysprof-cli.c:221 +#: src/tools/sysprof-cli.c:228 msgid "COMMAND" msgstr "KOMMANDO" -#: src/tools/sysprof-cli.c:222 +#: src/tools/sysprof-cli.c:229 msgid "" "Set environment variable for spawned process. Can be used multiple times." msgstr "Indstil miljøvariabel for startet proces. Kan bruges flere gange." -#: src/tools/sysprof-cli.c:222 +#: src/tools/sysprof-cli.c:229 msgid "VAR=VALUE" msgstr "VAR=VÆRDI" -#: src/tools/sysprof-cli.c:223 +#: src/tools/sysprof-cli.c:230 msgid "Force overwrite the capture file" msgstr "Tving overskrivning af optagelsesfilen" -#: src/tools/sysprof-cli.c:224 +#: src/tools/sysprof-cli.c:231 msgid "Disable recording of battery statistics" msgstr "Deaktivér optagelse af batteristatistik" -#: src/tools/sysprof-cli.c:225 +#: src/tools/sysprof-cli.c:232 msgid "Disable recording of CPU statistics" msgstr "Deaktivér optagelse af CPU-statistik" -#: src/tools/sysprof-cli.c:226 +#: src/tools/sysprof-cli.c:233 msgid "Disable recording of Disk statistics" msgstr "Deaktivér optagelse af diskstatistik" -#: src/tools/sysprof-cli.c:227 +#: src/tools/sysprof-cli.c:234 msgid "Do not record stacktraces using Linux perf" msgstr "Opret ikke stakspor med Linux perf" -#: src/tools/sysprof-cli.c:228 +#: src/tools/sysprof-cli.c:235 msgid "Do not append symbol name information from local machine" msgstr "Tilføj ikke information om symbolnavn fra lokal maskine" -#: src/tools/sysprof-cli.c:229 +#: src/tools/sysprof-cli.c:236 msgid "Disable recording of memory statistics" msgstr "Deaktivér optagelse af hukommelsesstatistik" -#: src/tools/sysprof-cli.c:230 +#: src/tools/sysprof-cli.c:237 msgid "Disable recording of network statistics" msgstr "Deaktivér optagelse af netværksstatistik" -#: src/tools/sysprof-cli.c:231 +#: src/tools/sysprof-cli.c:238 msgid "Set SYSPROF_TRACE_FD environment for subprocess" msgstr "Indstil SYSPROF_TRACE_FD-miljø for underproces" -#: src/tools/sysprof-cli.c:232 +#: src/tools/sysprof-cli.c:239 msgid "Set GJS_TRACE_FD environment to trace GJS processes" msgstr "Indstil GJS_TRACE_FD-miljø til sporing af GJS-processer" -#: src/tools/sysprof-cli.c:233 +#: src/tools/sysprof-cli.c:240 msgid "Set GTK_TRACE_FD environment to trace a GTK application" msgstr "Indstil GTK_TRACE_FD-miljø til sporing af et GTK-program" -#: src/tools/sysprof-cli.c:234 +#: src/tools/sysprof-cli.c:241 msgid "Include RAPL energy statistics" msgstr "Medtag statistik om RAPL-energi" -#: src/tools/sysprof-cli.c:235 +#: src/tools/sysprof-cli.c:242 msgid "Profile memory allocations and frees" msgstr "Profilér hukommelsesallokeringer og -frigivelser" -#: src/tools/sysprof-cli.c:236 +#: src/tools/sysprof-cli.c:243 msgid "Connect to org.gnome.Shell for profiler statistics" msgstr "Opret forbindelse til org.gnome.Shell for statistik om profilering" -#: src/tools/sysprof-cli.c:237 +#: src/tools/sysprof-cli.c:244 msgid "Track performance of the applications main loop" msgstr "Spor ydelsen af programmets hovedløkke" -#: src/tools/sysprof-cli.c:238 +#: src/tools/sysprof-cli.c:245 msgid "Merge all provided *.syscap files and write to stdout" msgstr "Sammenføj alle angivne *.syscap-filer og skriv til stdout" -#: src/tools/sysprof-cli.c:239 +#: src/tools/sysprof-cli.c:246 msgid "Print the sysprof-cli version and exit" msgstr "Udskriv sysprof-cli-versionen og afslut" -#: src/tools/sysprof-cli.c:272 +#: src/tools/sysprof-cli.c:279 msgid "CAPTURE_FILE -- COMMAND ARGS — Sysprof" msgstr "OPTAGELSESFIL -- KOMMANDO ARGUMENTER — Sysprof" -#: src/tools/sysprof-cli.c:275 +#: src/tools/sysprof-cli.c:282 msgid "" "\n" "Examples:\n" @@ -984,12 +980,12 @@ " # Sammenføj flere syscap-filer i én\n" " sysprof-cli --merge a.syscap b.syscap > c.syscap\n" -#: src/tools/sysprof-cli.c:308 +#: src/tools/sysprof-cli.c:315 msgid "Too many arguments were passed to sysprof-cli:" msgstr "Der blev givet for mange argumenter til sysprof-cli:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:365 +#: src/tools/sysprof-cli.c:374 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s findes. Brug --force til at overskrive\n"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/de.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/de.po
Changed
@@ -2,24 +2,25 @@ # Copyright (C) 2016 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. # -# Tim Sabsch <tim@sabsch.com>, 2018, 2020. +# Tim Sabsch <tim@sabsch.com>, 2018, 2020, 2022. # Mario Blättermann <mario.blaettermann@gmail.com>, 2016-2018, 2021. # Philipp Kiemle <philipp.kiemle@gmail.com>, 2021. +# Jürgen Benvenuti <gastornis@posteo.org>, 2022. # msgid "" msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-02-24 22:30+0000\n" -"PO-Revision-Date: 2021-02-25 23:08+0100\n" -"Last-Translator: Philipp Kiemle <philipp.kiemle@gmail.com>\n" +"POT-Creation-Date: 2022-05-09 02:14+0000\n" +"PO-Revision-Date: 2022-07-22 10:12+0200\n" +"Last-Translator: Tim Sabsch <tim@sabsch.com>\n" "Language-Team: German <gnome-de@gnome.org>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 3.1\n" #: data/org.gnome.Sysprof3.appdata.xml.in:5 #: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 @@ -29,7 +30,7 @@ #: data/org.gnome.Sysprof3.appdata.xml.in:6 msgid "Profile an application or entire system" -msgstr "Eine Anwendung oder ein gesamtes System analysieren" +msgstr "Ein Profil einer Anwendung oder ein gesamtes Systems erstellen" #: data/org.gnome.Sysprof3.appdata.xml.in:9 msgid "The GNOME Foundation" @@ -40,8 +41,8 @@ "Sysprof allows you to profile applications to aid in debugging and " "optimization." msgstr "" -"Sysprof ermöglicht Ihnen das Profiling von Anwendungen zwecks Fehlerdiagnose " -"und Optimierung." +"Sysprof ermöglicht Ihnen die Profilerstellung von Anwendungen zwecks " +"Fehlerdiagnose und Optimierung." #: data/org.gnome.Sysprof3.desktop.in:5 msgid "Profiler" @@ -49,7 +50,7 @@ #: data/org.gnome.Sysprof3.desktop.in:6 msgid "Profile an application or entire system." -msgstr "Eine Anwendung oder ein ganzes System analysieren." +msgstr "Ein Profil einer Anwendung oder eines ganzes System erstellen." #: data/org.gnome.sysprof3.gschema.xml:5 msgid "Window size" @@ -167,35 +168,35 @@ msgstr "Aufrufgraph" #: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:236 +#: src/libsysprof-ui/sysprof-memprof-page.ui:245 msgid "Functions" msgstr "Funktionen" #: src/libsysprof-ui/sysprof-callgraph-page.ui:43 #: src/libsysprof-ui/sysprof-callgraph-page.ui:104 #: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:253 -#: src/libsysprof-ui/sysprof-memprof-page.ui:315 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-memprof-page.ui:262 +#: src/libsysprof-ui/sysprof-memprof-page.ui:324 +#: src/libsysprof-ui/sysprof-memprof-page.ui:380 msgid "Self" msgstr "Selbst" #: src/libsysprof-ui/sysprof-callgraph-page.ui:59 #: src/libsysprof-ui/sysprof-callgraph-page.ui:120 #: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:269 -#: src/libsysprof-ui/sysprof-memprof-page.ui:331 -#: src/libsysprof-ui/sysprof-memprof-page.ui:387 +#: src/libsysprof-ui/sysprof-memprof-page.ui:278 +#: src/libsysprof-ui/sysprof-memprof-page.ui:340 +#: src/libsysprof-ui/sysprof-memprof-page.ui:396 msgid "Total" msgstr "Gesamt" #: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +#: src/libsysprof-ui/sysprof-memprof-page.ui:307 msgid "Callers" msgstr "Aufrufer" #: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:362 +#: src/libsysprof-ui/sysprof-memprof-page.ui:371 msgid "Descendants" msgstr "Nachfolger" @@ -214,12 +215,12 @@ "Sysprof ist damit beschäftigt, den ausgewählten Aufrufgraphen zu erstellen." #: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:433 +#: src/libsysprof-ui/sysprof-memprof-page.ui:442 msgid "Not Enough Samples" msgstr "Nicht genug Proben" #: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:434 +#: src/libsysprof-ui/sysprof-memprof-page.ui:443 msgid "More samples are necessary to display a callgraph." msgstr "" "Weitere Proben sind erforderlich, um einen Aufrufgraphen anzeigen zu können." @@ -342,33 +343,33 @@ msgstr "Aufnahme läuft …" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:258 +#: src/libsysprof-ui/sysprof-display.c:265 #, c-format msgid "Recording at %s" msgstr "Aufnahme vom %s" -#: src/libsysprof-ui/sysprof-display.c:262 +#: src/libsysprof-ui/sysprof-display.c:269 msgid "New Recording" msgstr "Neue Aufnahme" -#: src/libsysprof-ui/sysprof-display.c:1087 +#: src/libsysprof-ui/sysprof-display.c:1094 msgid "The recording could not be opened" msgstr "Die Aufnahme konnte nicht geöffnet werden" -#: src/libsysprof-ui/sysprof-display.c:1210 +#: src/libsysprof-ui/sysprof-display.c:1217 msgid "Save Recording" msgstr "Aufnahme speichern" -#: src/libsysprof-ui/sysprof-display.c:1213 +#: src/libsysprof-ui/sysprof-display.c:1220 msgid "Save" msgstr "Speichern" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1214 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 msgid "Cancel" msgstr "Abbrechen" -#: src/libsysprof-ui/sysprof-display.c:1240 +#: src/libsysprof-ui/sysprof-display.c:1247 #, c-format msgid "Failed to save recording: %s" msgstr "Fehler beim Speichern der Aufnahme: %s" @@ -393,8 +394,8 @@ #: src/libsysprof-ui/sysprof-failed-state-view.ui:39 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "" -"Es ist etwas unerwartet schief gelaufen beim Versuch Ihr System zu " -"analysieren." +"Es ist etwas unerwartet schief gelaufen beim Versuch, ein Profil Ihres " +"Systems zu erstellen." #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 @@ -481,7 +482,7 @@ msgstr "Zuweisungen nachvollziehen" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:234 +#: src/libsysprof-ui/sysprof-memprof-page.c:235 #, c-format msgid "> %s to %s" msgstr "> %s zu %s" @@ -492,21 +493,25 @@ #: src/libsysprof-ui/sysprof-memprof-page.ui:31 msgid "All Allocations" -msgstr "Alle Zuordnungen" +msgstr "Alle Zuweisungen" #: src/libsysprof-ui/sysprof-memprof-page.ui:40 msgid "Temporary Allocations" msgstr "Vorübergehende Zuweisungen" -#: src/libsysprof-ui/sysprof-memprof-page.ui:402 +#: src/libsysprof-ui/sysprof-memprof-page.ui:49 +msgid "Leaked Allocations" +msgstr "Speicherlecks" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:411 msgid "Size" msgstr "Größe" -#: src/libsysprof-ui/sysprof-memprof-page.ui:422 +#: src/libsysprof-ui/sysprof-memprof-page.ui:431 msgid "Analyzing Memory Allocations" msgstr "Analysieren von Speicherzuweisungen" -#: src/libsysprof-ui/sysprof-memprof-page.ui:423 +#: src/libsysprof-ui/sysprof-memprof-page.ui:432 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof ist damit beschäftigt, Speicherzuweisungen zu analysieren." @@ -546,7 +551,7 @@ #: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 msgid "" "Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system system configurations." +"not be possible on some system configurations." msgstr "" "Alle Anwendungen und den Betriebssystemkernel in den Aufrufgraphen " "einbeziehen. Dies ist gegebenenfalls nicht mit allen Systemkonfigurationen " @@ -651,7 +656,7 @@ #: src/sysprofd/org.gnome.sysprof3.policy.in:14 msgid "Authentication is required to profile the system." msgstr "" -"Es ist eine Authentifizierung erforderlich, um ein Profil des Systems zu " +"Es ist eine Legitimierung erforderlich, um ein Profil des Systems zu " "erstellen." #: src/sysprofd/org.gnome.sysprof3.policy.in:26 @@ -818,14 +823,15 @@ #: src/sysprof/sysprof-application.c:194 msgid "A system profiler" -msgstr "Eine System-Profiler" +msgstr "Ein System-Profiler" #: src/sysprof/sysprof-application.c:199 msgid "translator-credits" msgstr "" "Mario Blättermann <mario.blaettermann@gmail.com>\n" "Tim Sabsch <tim@sabsch.com>\n" -"Philipp Kiemle <philipp.kiemle@gmail.com>" +"Philipp Kiemle <philipp.kiemle@gmail.com>\n" +"Jürgen Benvenuti <gastornis@posteo.org>" #: src/sysprof/sysprof-application.c:205 msgid "Learn more about Sysprof" @@ -871,9 +877,10 @@ msgid "--merge requires at least 2 filename arguments" msgstr "»--merge« erfordert mindestens 2 Dateinamenargumente" +# s.o. #: src/tools/sysprof-cli.c:226 msgid "Disable CPU throttling while profiling" -msgstr "CPU-Drosselung während des Profilings deaktivieren" +msgstr "CPU-Drosselung während der Profilerstellung deaktivieren" # Task ist ein Begriff aus der Informatik #: src/tools/sysprof-cli.c:227 @@ -886,7 +893,7 @@ #: src/tools/sysprof-cli.c:228 msgid "Run a command and profile the process" -msgstr "Einen Befehl ausführen und den Prozess analysieren" +msgstr "Einen Befehl ausführen und ein Profil des Prozesses erstellen" #: src/tools/sysprof-cli.c:228 msgid "COMMAND" @@ -909,7 +916,7 @@ #: src/tools/sysprof-cli.c:231 msgid "Disable recording of battery statistics" -msgstr "Aufzeichnung von Batteriestatistiken deaktivieren" +msgstr "Aufzeichnung von Akkustatistiken deaktivieren" #: src/tools/sysprof-cli.c:232 msgid "Disable recording of CPU statistics" @@ -1019,7 +1026,7 @@ #: src/tools/sysprof-profiler-ctl.c:46 msgid "Connect to the session bus" -msgstr "Mit dem Session Bus verbinden" +msgstr "Mit dem Sitzungsbus verbinden" #: src/tools/sysprof-profiler-ctl.c:47 msgid "Connect to the given D-Bus address"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/id.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/id.po
Changed
@@ -2,13 +2,13 @@ # Copyright (C) 2017 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. # Andika Triwidada <atriwidada@gnome.org>, 2017. -# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2021. +# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2022. msgid "" msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-03-09 00:11+0000\n" -"PO-Revision-Date: 2021-03-14 19:21+0700\n" +"POT-Creation-Date: 2022-04-03 11:18+0000\n" +"PO-Revision-Date: 2022-04-19 10:31+0700\n" "Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n" "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" "Language: id\n" @@ -16,11 +16,11 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural= n!=1;\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0.1\n" #: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:208 +#: src/sysprof/sysprof-application.c:332 src/sysprof/sysprof-window.ui:9 msgid "Sysprof" msgstr "Sysprof" @@ -49,34 +49,10 @@ msgstr "Memantau profil suatu aplikasi atau seluruh sistem." #: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Ukuran jendela" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Ukuran jendela (lebar dan tinggi)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Posisi jendela" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Posisi jendela (x dan y)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Jendela termaksimalkan" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Keadaan jendela termaksimalkan" - -#: data/org.gnome.sysprof3.gschema.xml:20 msgid "Last Spawn Program" msgstr "Program yang Terakhir Di-spawn" -#: data/org.gnome.sysprof3.gschema.xml:21 +#: data/org.gnome.sysprof3.gschema.xml:6 msgid "" "The last spawned program, which will be set in the UI upon restart of the " "application." @@ -84,19 +60,19 @@ "Program yang terakhir di-spawn, yang akan ditata dalam UI saat start ulang " "aplikasi." -#: data/org.gnome.sysprof3.gschema.xml:25 +#: data/org.gnome.sysprof3.gschema.xml:10 msgid "Last Spawn Inherit Environment" msgstr "Lingkungan Warisan Spawn Terakhir" -#: data/org.gnome.sysprof3.gschema.xml:26 +#: data/org.gnome.sysprof3.gschema.xml:11 msgid "If the last spawned environment inherits the parent environment." msgstr "Apakah lingkungan yang di-spawn terakhir mewarisi lingkungan induk." -#: data/org.gnome.sysprof3.gschema.xml:30 +#: data/org.gnome.sysprof3.gschema.xml:15 msgid "Last Spawn Environment" msgstr "Lingkungan Spawn Terakhir" -#: data/org.gnome.sysprof3.gschema.xml:31 +#: data/org.gnome.sysprof3.gschema.xml:16 msgid "" "The last spawned environment, which will be set in the UI upon restart of " "the application." @@ -159,62 +135,70 @@ msgid "Callgraph" msgstr "Callgraph" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:236 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:220 msgid "Functions" msgstr "Fungsi" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:253 -#: src/libsysprof-ui/sysprof-memprof-page.ui:315 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:237 +#: src/libsysprof-ui/sysprof-memprof-page.ui:295 +#: src/libsysprof-ui/sysprof-memprof-page.ui:346 msgid "Self" msgstr "Self" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:269 -#: src/libsysprof-ui/sysprof-memprof-page.ui:331 -#: src/libsysprof-ui/sysprof-memprof-page.ui:387 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:253 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 +#: src/libsysprof-ui/sysprof-memprof-page.ui:362 msgid "Total" msgstr "Total" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:278 msgid "Callers" msgstr "Pemanggil" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:362 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:337 msgid "Descendants" msgstr "Turunan" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:309 msgid "Hits" msgstr "Hit" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Membuat Callgraph" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Sysprof sibuk menciptakan callgraph yang dipilih." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:433 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:401 msgid "Not Enough Samples" msgstr "Tidak Cukup Cuplikan" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:434 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:402 msgid "More samples are necessary to display a callgraph." msgstr "Perlu lebih cuplikan untuk menampilkan suatu callgraph." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 msgid "Counters" @@ -243,11 +227,11 @@ msgid "Processes" msgstr "Proses" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:237 msgid "Memory Capture" msgstr "Tangkapan Memori" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:251 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf detik" @@ -260,54 +244,54 @@ msgid "Captured at" msgstr "Ditangkap pada" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:49 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Durasi" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:63 msgid "CPU Model" msgstr "Model CPU" -#: src/libsysprof-ui/sysprof-details-page.ui:80 +#: src/libsysprof-ui/sysprof-details-page.ui:78 msgid "Samples Captured" msgstr "Cuplikan Yang Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:94 +#: src/libsysprof-ui/sysprof-details-page.ui:92 msgid "Marks Captured" msgstr "Mark Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:108 +#: src/libsysprof-ui/sysprof-details-page.ui:106 msgid "Processes Captured" msgstr "Proses Yang Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:122 +#: src/libsysprof-ui/sysprof-details-page.ui:120 msgid "Forks Captured" msgstr "Fork Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:136 +#: src/libsysprof-ui/sysprof-details-page.ui:134 msgid "Counters Captured" msgstr "Pencacah Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:151 +#: src/libsysprof-ui/sysprof-details-page.ui:149 msgid "Allocations Captured" msgstr "Alokasi Ditangkap" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:296 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Tandai" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:322 msgid "Min" msgstr "Min" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:335 msgid "Max" msgstr "Maks" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:348 msgid "Avg" msgstr "Rata-rata" @@ -324,72 +308,72 @@ msgid "Writes" msgstr "Tulis" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:227 msgid "Recording Failed" msgstr "Perekaman Gagal" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:232 msgid "Recording…" msgstr "Merekam…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:258 +#: src/libsysprof-ui/sysprof-display.c:263 #, c-format msgid "Recording at %s" msgstr "Merekam pada %s" -#: src/libsysprof-ui/sysprof-display.c:262 +#: src/libsysprof-ui/sysprof-display.c:267 msgid "New Recording" msgstr "Perekaman Baru" -#: src/libsysprof-ui/sysprof-display.c:1087 +#: src/libsysprof-ui/sysprof-display.c:1093 msgid "The recording could not be opened" msgstr "Rekaman tidak dapat dibuka" -#: src/libsysprof-ui/sysprof-display.c:1210 +#: src/libsysprof-ui/sysprof-display.c:1234 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Gagal menyimpan rekaman: %s" + +#: src/libsysprof-ui/sysprof-display.c:1267 msgid "Save Recording" msgstr "Simpan Rekaman" -#: src/libsysprof-ui/sysprof-display.c:1213 +#: src/libsysprof-ui/sysprof-display.c:1270 msgid "Save" msgstr "Simpan" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1214 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1271 src/sysprof/sysprof-window.c:310 msgid "Cancel" msgstr "Batal" -#: src/libsysprof-ui/sysprof-display.c:1240 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Gagal menyimpan rekaman: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Rincian" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Hapus variabel lingkungan" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 +#: src/libsysprof-ui/sysprof-environ-editor.c:72 msgid "New variable…" msgstr "Variabel baru…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 -msgid "Ouch, that hurt!" -msgstr "Aduh, sakit!" - -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:31 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "" "Sesuatu secara tak diduga mengacau ketika mencoba memantau profil sistem " "Anda." +#: src/libsysprof-ui/sysprof-failed-state-view.ui:41 +msgid "Ouch, that hurt!" +msgstr "Aduh, sakit!" + #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Pesan" @@ -421,7 +405,7 @@ msgstr "Log" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Waktu" @@ -433,20 +417,20 @@ msgid "Domain" msgstr "Domain" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Pengaturan waktu" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Grup" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Akhir" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Tidak Ada Pengaturan Waktu" @@ -472,32 +456,36 @@ msgstr "Alokasi Trek" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:234 +#: src/libsysprof-ui/sysprof-memprof-page.c:241 #, c-format msgid "> %s to %s" msgstr "> %s ke %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:21 msgid "Summary" msgstr "Ringkasan" -#: src/libsysprof-ui/sysprof-memprof-page.ui:31 +#: src/libsysprof-ui/sysprof-memprof-page.ui:27 msgid "All Allocations" msgstr "Semua Alokasi" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:34 msgid "Temporary Allocations" msgstr "Alokasi Temporer" -#: src/libsysprof-ui/sysprof-memprof-page.ui:402 +#: src/libsysprof-ui/sysprof-memprof-page.ui:41 +msgid "Leaked Allocations" +msgstr "Alokasi Bocor" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:377 msgid "Size" msgstr "Ukuran" -#: src/libsysprof-ui/sysprof-memprof-page.ui:422 +#: src/libsysprof-ui/sysprof-memprof-page.ui:394 msgid "Analyzing Memory Allocations" msgstr "Menganalisis Alokasi Memori" -#: src/libsysprof-ui/sysprof-memprof-page.ui:423 +#: src/libsysprof-ui/sysprof-memprof-page.ui:395 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof sibuk menganalisis alokasi memori." @@ -511,29 +499,29 @@ msgstr "Jaringan" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:92 msgid "Profilers" msgstr "Pembuat profil" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:188 msgid "" "Track application memory allocations (Sysprof must launch target application)" msgstr "" "Lacak alokasi memori aplikasi (Sysprof harus meluncurkan aplikasi target)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:196 msgid "Track slow operations on your applications main loop" msgstr "Lacak operasi lambat pada loop utama aplikasi Anda" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:212 msgid "All Processes" msgstr "Semua Proses" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:242 msgid "" "Include all applications and operating system kernel in callgraph. This may " "not be possible on some system configurations." @@ -541,28 +529,28 @@ "Sertakan semua aplikasi dan kernel sistem operasi dalam callgraph. Hal ini " "barangkali tidak mungkin pada beberapa konfigurasi sistem." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:270 msgid "Search Processes…" msgstr "Cari Proses…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:288 msgid "Loading Processes…" msgstr "Memuat Proses…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:312 msgid "Launch Application" msgstr "Luncurkan Aplikasi" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:341 msgid "Enable to launch a program of your choosing before profiling." msgstr "" "Fungsikan untuk meluncurkan program pilihan Anda sebelum membuat profil." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:369 msgid "Command Line" msgstr "Baris Perintah" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:388 msgid "Environment" msgstr "Lingkungan" @@ -603,31 +591,31 @@ msgid "Energy Usage (All)" msgstr "Penggunaan Energi (Semua)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "Tahukah Anda bahwa Anda dapat memakai <a href=\"help:sysprof\">sysprof-cli</" "a> untuk merekam?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Kejadian" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "_Berhenti Merekam" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Pilih untuk lebih banyak rincian" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Tampilkan grafik pelengkap" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 msgid "Instruments" msgstr "Instrumen" @@ -796,43 +784,43 @@ msgid "About Sysprof" msgstr "Tentang Sysprof" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:200 msgid "A system profiler" msgstr "Pembuat profil sistem" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:205 msgid "translator-credits" msgstr "" "Andika Triwidada <andika@gmail.com>, 2017-2020.\n" -"Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2021." +"Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2022." -#: src/sysprof/sysprof-application.c:205 +#: src/sysprof/sysprof-application.c:211 msgid "Learn more about Sysprof" msgstr "Pelajari lebih lanjut tentang Sysprof" #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:304 msgid "Open Capture…" msgstr "Buka Tangkapan…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:308 msgid "Open" msgstr "Buka" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:313 msgid "Sysprof Captures" msgstr "Tangkapan Sysprof" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:318 msgid "All Files" msgstr "Semua Berkas" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:33 msgid "_Open" msgstr "_Buka" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:36 msgid "Open Recording… (Ctrl+O)" msgstr "Buka Rekaman… (Ctrl+O)" @@ -979,7 +967,7 @@ msgstr "Terlalu banyak argumen yang disampaikan ke sysprof-cli:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s sudah ada. Gunakan —force untuk menimpa\n" @@ -1021,3 +1009,21 @@ msgstr "" "--dest=NAMA_BUS NAMABERKAS - menyambung ke pembuat profil sysprof yang " "tertanam" + +#~ msgid "Window size" +#~ msgstr "Ukuran jendela" + +#~ msgid "Window size (width and height)." +#~ msgstr "Ukuran jendela (lebar dan tinggi)." + +#~ msgid "Window position" +#~ msgstr "Posisi jendela" + +#~ msgid "Window position (x and y)." +#~ msgstr "Posisi jendela (x dan y)." + +#~ msgid "Window maximized" +#~ msgstr "Jendela termaksimalkan" + +#~ msgid "Window maximized state" +#~ msgstr "Keadaan jendela termaksimalkan"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/meson.build
Changed
@@ -2,5 +2,5 @@ i18n.gettext('sysprof-workaround', preset: 'glib', install: false) if get_option('libsysprof') -i18n.gettext('sysprof', preset: 'glib') + i18n.gettext('sysprof', preset: 'glib') endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/pl.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/pl.po
Changed
@@ -1,15 +1,15 @@ # Polish translation for sysprof. -# Copyright © 2016-2021 the sysprof authors. +# Copyright © 2016-2022 the sysprof authors. # This file is distributed under the same license as the sysprof package. -# Piotr Drąg <piotrdrag@gmail.com>, 2016-2021. -# Aviary.pl <community-poland@mozilla.org>, 2016-2021. +# Piotr Drąg <piotrdrag@gmail.com>, 2016-2022. +# Aviary.pl <community-poland@mozilla.org>, 2016-2022. # msgid "" msgstr "" "Project-Id-Version: sysprof\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-11-05 04:10+0000\n" -"PO-Revision-Date: 2021-11-07 13:47+0100\n" +"POT-Creation-Date: 2022-07-24 06:22+0000\n" +"PO-Revision-Date: 2022-07-24 16:52+0200\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Language-Team: Polish <community-poland@mozilla.org>\n" "Language: pl\n" @@ -19,21 +19,21 @@ "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -#: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof.appdata.xml.in.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:4 src/sysprof/sysprof-application.c:196 +#: src/sysprof/sysprof-application.c:321 src/sysprof/sysprof-window.ui:10 msgid "Sysprof" msgstr "Sysprof" -#: data/org.gnome.Sysprof3.appdata.xml.in:6 +#: data/org.gnome.Sysprof.appdata.xml.in.in:6 msgid "Profile an application or entire system" msgstr "Profilowanie programów lub całego systemu" -#: data/org.gnome.Sysprof3.appdata.xml.in:9 +#: data/org.gnome.Sysprof.appdata.xml.in.in:9 msgid "The GNOME Foundation" msgstr "Fundacja GNOME" -#: data/org.gnome.Sysprof3.appdata.xml.in:12 +#: data/org.gnome.Sysprof.appdata.xml.in.in:12 msgid "" "Sysprof allows you to profile applications to aid in debugging and " "optimization." @@ -41,70 +41,14 @@ "Sysprof umożliwia profilowanie programów, aby wspomóc debugowanie " "i optymalizację." -#: data/org.gnome.Sysprof3.desktop.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:5 msgid "Profiler" msgstr "Profiler" -#: data/org.gnome.Sysprof3.desktop.in:6 +#: data/org.gnome.Sysprof.desktop.in.in:6 msgid "Profile an application or entire system." msgstr "Profilowanie programu lub całego systemu" -#: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Rozmiar okna" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Rozmiar okna (szerokość i wysokość)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Położenie okna" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Położenie okna (na osi X i Y)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Maksymalizacja okna" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Stan maksymalizacji okna" - -#: data/org.gnome.sysprof3.gschema.xml:20 -msgid "Last Spawn Program" -msgstr "Ostatnio uruchomiony program" - -#: data/org.gnome.sysprof3.gschema.xml:21 -msgid "" -"The last spawned program, which will be set in the UI upon restart of the " -"application." -msgstr "" -"Ostatnio uruchomiony program, który zostanie ustawiony w interfejsie po " -"ponownym uruchomieniu." - -#: data/org.gnome.sysprof3.gschema.xml:25 -msgid "Last Spawn Inherit Environment" -msgstr "Ostatnio uruchomione środowisko dziedziczy środowisko" - -#: data/org.gnome.sysprof3.gschema.xml:26 -msgid "If the last spawned environment inherits the parent environment." -msgstr "Czy ostatnio uruchomione środowisko dziedziczy środowisko nadrzędne." - -#: data/org.gnome.sysprof3.gschema.xml:30 -msgid "Last Spawn Environment" -msgstr "Ostatnio uruchomione środowisko" - -#: data/org.gnome.sysprof3.gschema.xml:31 -msgid "" -"The last spawned environment, which will be set in the UI upon restart of " -"the application." -msgstr "" -"Ostatnio uruchomione środowisko, które zostanie ustawione w interfejsie po " -"ponownym uruchomieniu." - #: src/libsysprof/sysprof-callgraph-profile.c:447 msgid "Sysprof was unable to generate a callgraph from the system capture." msgstr "Nie można utworzyć wykresu wywołań z przechwytywania systemu." @@ -138,12 +82,12 @@ msgstr "Poziom naładowania akumulatora (wszystkie)" #: src/libsysprof-ui/sysprof-battery-aid.c:240 -#: src/libsysprof-ui/sysprof-counters-aid.c:282 msgid "Battery" msgstr "Akumulator" #: src/libsysprof-ui/sysprof-callgraph-aid.c:212 #: src/libsysprof-ui/sysprof-callgraph-aid.c:218 +#: src/libsysprof-ui/sysprof-details-page.ui:73 msgid "Stack Traces" msgstr "Ślady stosu" @@ -160,64 +104,74 @@ msgid "Callgraph" msgstr "Wykres wywołań" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:90 msgid "Functions" msgstr "Funkcje" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:107 +#: src/libsysprof-ui/sysprof-memprof-page.ui:165 +#: src/libsysprof-ui/sysprof-memprof-page.ui:216 msgid "Self" msgstr "Własne" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:123 +#: src/libsysprof-ui/sysprof-memprof-page.ui:181 +#: src/libsysprof-ui/sysprof-memprof-page.ui:232 msgid "Total" msgstr "Razem" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:148 msgid "Callers" msgstr "Wywołania" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:207 msgid "Descendants" msgstr "Elementy potomne" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:189 msgid "Hits" msgstr "Trafienia" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Tworzenie wykresu wywołań" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Trwa tworzenie wybranego wykresu wywołań." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:271 msgid "Not Enough Samples" msgstr "Za mało próbek" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:272 msgid "More samples are necessary to display a callgraph." msgstr "Do wyświetlenia wykresu wywołań potrzeba więcej próbek." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d%%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 +#: src/libsysprof-ui/sysprof-counters-aid.c:282 +#: src/libsysprof-ui/sysprof-details-page.ui:148 msgid "Counters" msgstr "Liczniki" @@ -241,74 +195,98 @@ msgstr "Użycie procesora (wszystkie)" #: src/libsysprof-ui/sysprof-cpu-aid.c:316 +#: src/libsysprof-ui/sysprof-details-page.ui:103 msgid "Processes" msgstr "Procesy" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:231 msgid "Memory Capture" msgstr "Przechwytywanie pamięci" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:245 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf s" -#: src/libsysprof-ui/sysprof-details-page.ui:21 -msgid "Filename" -msgstr "Nazwa pliku" +#: src/libsysprof-ui/sysprof-details-page.ui:8 +msgid "Capture" +msgstr "Przechwytywanie" + +#: src/libsysprof-ui/sysprof-details-page.ui:12 +msgid "Location" +msgstr "Położenie" -#: src/libsysprof-ui/sysprof-details-page.ui:35 -msgid "Captured at" -msgstr "Utworzono" +#: src/libsysprof-ui/sysprof-details-page.ui:26 +msgid "Recorded At" +msgstr "Nagrano" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:40 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Czas trwania" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:54 msgid "CPU Model" msgstr "Model procesora" -#: src/libsysprof-ui/sysprof-details-page.ui:80 -msgid "Samples Captured" -msgstr "Przechwycone próbki" +#: src/libsysprof-ui/sysprof-details-page.ui:69 +#: src/libsysprof-ui/sysprof-details-page.ui:164 +msgid "Statistics" +msgstr "Statystyki" -#: src/libsysprof-ui/sysprof-details-page.ui:94 -msgid "Marks Captured" -msgstr "Przechwycone oznaczenia" +#: src/libsysprof-ui/sysprof-details-page.ui:74 +msgid "Number of stack traces sampled for performance callgraphs" +msgstr "Liczba śladów stosu próbkowanych dla wykresów wywołań wydajności" -#: src/libsysprof-ui/sysprof-details-page.ui:108 -msgid "Processes Captured" -msgstr "Przechwycone procesy" +#: src/libsysprof-ui/sysprof-details-page.ui:88 +msgid "Marks" +msgstr "Oznaczenia" -#: src/libsysprof-ui/sysprof-details-page.ui:122 -msgid "Forks Captured" -msgstr "Przechwycone rozwidlenia" +#: src/libsysprof-ui/sysprof-details-page.ui:89 +msgid "Number of marks seen" +msgstr "Liczba widzianych oznaczeń" -#: src/libsysprof-ui/sysprof-details-page.ui:136 -msgid "Counters Captured" -msgstr "Przechwycone liczniki" +#: src/libsysprof-ui/sysprof-details-page.ui:104 +msgid "Number of processes seen" +msgstr "Liczba widzianych procesów" -#: src/libsysprof-ui/sysprof-details-page.ui:151 -msgid "Allocations Captured" -msgstr "Przechwycone przydziały" +#: src/libsysprof-ui/sysprof-details-page.ui:118 +msgid "Forks" +msgstr "Rozwidlenia" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:119 +msgid "Number of times a process forked" +msgstr "Ile razy proces uległ rozdzieleniu" + +#: src/libsysprof-ui/sysprof-details-page.ui:133 +#: src/libsysprof-ui/sysprof-memprof-aid.c:193 +#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 +msgid "Memory Allocations" +msgstr "Przydziały pamięci" + +#: src/libsysprof-ui/sysprof-details-page.ui:134 +msgid "Number of stack traces recorded for tracing memory allocations" +msgstr "Liczba śladów stosu nagranych do śledzenia przydziałów pamięci" + +#: src/libsysprof-ui/sysprof-details-page.ui:149 +msgid "Number of recorded counter values" +msgstr "Liczba nagranych wartości liczników" + +#: src/libsysprof-ui/sysprof-details-page.ui:176 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Oznaczenie" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:202 msgid "Min" msgstr "Minimum" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:215 msgid "Max" msgstr "Maksimum" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:228 msgid "Avg" msgstr "Średnia" @@ -325,70 +303,70 @@ msgid "Writes" msgstr "Zapisy" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:228 msgid "Recording Failed" msgstr "Nagranie się nie powiodło" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:233 msgid "Recording…" msgstr "Nagrywanie…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:264 #, c-format msgid "Recording at %s" msgstr "Nagranie z %s" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:268 msgid "New Recording" msgstr "Nowe nagranie" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1096 msgid "The recording could not be opened" msgstr "Nie można otworzyć nagrania" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1243 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Zapisanie nagrania się nie powiodło: %s" + +#: src/libsysprof-ui/sysprof-display.c:1276 msgid "Save Recording" msgstr "Zapis nagrania" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1279 msgid "Save" msgstr "Zapisz" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1280 src/sysprof/sysprof-window.c:285 msgid "Cancel" msgstr "Anuluj" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Zapisanie nagrania się nie powiodło: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Szczegóły" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Usuwa zmienną środowiskową" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 -msgid "New variable…" -msgstr "Nowa zmienna…" +#: src/libsysprof-ui/sysprof-environ-editor.c:72 +msgid "New environment variable…" +msgstr "Nowa zmienna środowiskowa…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:27 msgid "Ouch, that hurt!" msgstr "Auć, to bolało!" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:40 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "Coś się nie powiodło podczas profilowania systemu." #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Komunikat" @@ -420,7 +398,7 @@ msgstr "Dzienniki" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Czas" @@ -432,20 +410,20 @@ msgid "Domain" msgstr "Domena" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Czasy" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Grupa" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Koniec" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Brak dostępnych czasów" @@ -461,49 +439,66 @@ msgid "Memory" msgstr "Pamięć" -#: src/libsysprof-ui/sysprof-memprof-aid.c:193 -#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 -msgid "Memory Allocations" -msgstr "Przydziały pamięci" - #: src/libsysprof-ui/sysprof-memprof-aid.c:224 msgid "Track Allocations" msgstr "Śledzenie przydziałów" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:246 #, c-format msgid "> %s to %s" msgstr "> %s do %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 -msgid "Summary" -msgstr "Podsumowanie" +#: src/libsysprof-ui/sysprof-memprof-page.ui:16 +msgid "Number of Allocations" +msgstr "Liczba przydziałów" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:17 +msgid "Total number of allocation and free records" +msgstr "Całkowita liczba przydziałów i wolnych nagrań" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:30 +#: src/libsysprof-ui/sysprof-memprof-page.ui:318 +msgid "Leaked Allocations" +msgstr "Wyciekające przydziały" #: src/libsysprof-ui/sysprof-memprof-page.ui:31 -msgid "All Allocations" -msgstr "Wszystkie przydziały" +msgid "Number of allocations without a free record" +msgstr "Liczba przydziałów bez wolnego nagrania" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:44 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 msgid "Temporary Allocations" msgstr "Przydziały tymczasowe" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -msgid "Leaked Allocations" -msgstr "Wyciekające przydziały" +#: src/libsysprof-ui/sysprof-memprof-page.ui:45 +msgid "Number of allocations freed from similar stack trace" +msgstr "Liczba przydziałów uwolnionych z podobnego śladu stosu" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:59 +msgid "Allocations by Size" +msgstr "Przydziały według rozmiaru" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:247 msgid "Size" msgstr "Rozmiar" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:264 msgid "Analyzing Memory Allocations" msgstr "Analizowanie przydziałów pamięci" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:265 msgid "Sysprof is busy analyzing memory allocations." msgstr "Trwa analizowanie przydziałów pamięci." +#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +msgid "Summary" +msgstr "Podsumowanie" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:304 +msgid "All Allocations" +msgstr "Wszystkie przydziały" + #: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 msgid "Memory Used" msgstr "Użyta pamięć" @@ -514,66 +509,54 @@ msgstr "Sieć" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "Powłoka GNOME" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 -msgid "Profilers" -msgstr "Profilery" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 -msgid "" -"Track application memory allocations (Sysprof must launch target application)" -msgstr "" -"Śledzi przydziały pamięci programu (Sysprof musi uruchomić program docelowy)" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 -msgid "Track slow operations on your applications main loop" -msgstr "Śledzi wolne działania na pętli głównej programu" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:69 +msgid "Profiling Target" +msgstr "Cel profilowania" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 -msgid "All Processes" -msgstr "Wszystkie procesy" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:72 +msgid "Profile Entire System" +msgstr "Profilowanie całego systemu" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:73 msgid "" -"Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system configurations." +"Sysprof can generate callgraphs for one or more processes on your system." msgstr "" -"Wszystkie programy i jądro systemu operacyjnego na wykresie wywołań. Może to " -"nie być możliwe w przypadku niektórych konfiguracji komputera." +"Sysprof może utworzyć wykresy wywołań dla jednego lub więcej procesów " +"w systemie." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 -msgid "Search Processes…" -msgstr "Wyszukiwanie procesów…" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:84 +msgid "Search Processes" +msgstr "Wyszukiwanie procesów" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:99 msgid "Loading Processes…" msgstr "Wczytywanie procesów…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:114 msgid "Launch Application" msgstr "Uruchomienie programu" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 -msgid "Enable to launch a program of your choosing before profiling." +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:115 +msgid "" +"Sysprof can launch an application to be profiled. The profiler will " +"automatically stop when it exits." msgstr "" -"Włączenie umożliwi uruchomienie wybranego programu przed profilowaniem." +"Sysprof może uruchomić program do profilowania. Profiler zostanie " +"automatycznie zatrzymany po jego wyłączeniu." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:126 msgid "Command Line" msgstr "Wiersz poleceń" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 -msgid "Environment" -msgstr "Środowisko" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:413 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:135 msgid "Inherit Environment" msgstr "Dziedziczenie środowiska" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:437 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:136 msgid "" "Enable to ensure your application shares the display, message-bus, and other " "desktop environment settings." @@ -581,19 +564,37 @@ "Włączenie zapewni, że program współdzieli ekran, magistralę komunikatów " "i inne ustawienia środowiska." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:463 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:153 +msgid "Performance" +msgstr "Wydajność" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:156 msgid "Allow CPU Throttling" msgstr "Ograniczanie procesora" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:491 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:157 msgid "" -"If disabled, your CPU will be placed in performance mode. It will be " -"restored after profiling." +"When enabled, your system is allowed to scale CPU frequency as necessary." msgstr "" -"Wyłączenie spowoduje przejście procesora do trybu wydajności. Po ukończeniu " -"profilowania zostanie przywrócony zwykły tryb." +"Włączenie powoduje, że komputer może skalować częstotliwość procesora według " +"potrzeb." + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:172 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 +msgid "Instruments" +msgstr "Przyrządy" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:245 +msgid "" +"Track application memory allocations (Sysprof must launch target application)" +msgstr "" +"Śledzi przydziały pamięci programu (Sysprof musi uruchomić program docelowy)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:252 +msgid "Track slow operations on your applications main loop" +msgstr "Śledzi wolne działania na pętli głównej programu" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:265 msgid "_Record" msgstr "_Nagrywaj" @@ -606,34 +607,30 @@ msgid "Energy Usage (All)" msgstr "Użycie energii (wszystkie)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" -"Do profilowania można używać także polecenia <a href=\"help:sysprof" -"\">sysprof-cli</a>." +"Do profilowania można używać także polecenia <a href=\"help:" +"sysprof\">sysprof-cli</a>." -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Zdarzenia" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "_Zatrzymaj nagrywanie" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Zaznaczenie wyświetli więcej informacji" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Wyświetla wykresy uzupełniające" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 -msgid "Instruments" -msgstr "Przyrządy" - #: src/sysprofd/org.gnome.sysprof3.policy.in:13 msgid "Profile the system" msgstr "Profilowanie systemu" @@ -805,43 +802,39 @@ msgid "About Sysprof" msgstr "O programie" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:205 msgid "A system profiler" msgstr "Profiler systemu" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:206 msgid "translator-credits" msgstr "" -"Piotr Drąg <piotrdrag@gmail.com>, 2016-2021\n" -"Aviary.pl <community-poland@mozilla.org>, 2016-2021" - -#: src/sysprof/sysprof-application.c:205 -msgid "Learn more about Sysprof" -msgstr "Więcej informacji o Sysprof" +"Piotr Drąg <piotrdrag@gmail.com>, 2016-2022\n" +"Aviary.pl <community-poland@mozilla.org>, 2016-2022" #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:279 msgid "Open Capture…" msgstr "Otwarcie przechwytywania…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:283 msgid "Open" msgstr "Otwórz" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:288 msgid "Sysprof Captures" msgstr "Przechwytywania Sysprof" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:293 msgid "All Files" msgstr "Wszystkie pliki" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:34 msgid "_Open" msgstr "_Otwórz" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:37 msgid "Open Recording… (Ctrl+O)" msgstr "Otwiera nagranie… (Ctrl+O)" @@ -989,7 +982,7 @@ msgstr "Przekazano za dużo parametrów do polecenia sysprof-cli:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "Plik „%s” istnieje. Użycie opcji „--force” go zastąpi\n"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/pt_BR.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/pt_BR.po
Changed
@@ -2,40 +2,40 @@ # Copyright (C) 2022 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. # Rafael Fontenelle <rafaelff@gnome.org>, 2016-2020. -# Enrico Nicoletto <liverig@gmail.com>, 2016-2018, 2021. # Matheus Barbosa <mdpb.matheus@gmail.com>, 2022. +# Enrico Nicoletto <hiko@duck.com>, 2016-2018, 2021-2022. # msgid "" msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2022-01-19 20:27+0000\n" -"PO-Revision-Date: 2022-01-25 19:58-0300\n" -"Last-Translator: Matheus Barbosa <mdpb.matheus@gmail.com>\n" +"POT-Creation-Date: 2022-07-24 06:22+0000\n" +"PO-Revision-Date: 2022-09-07 20:38-0300\n" +"Last-Translator: Enrico Nicoletto <hiko@duck.com>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Gtranslator 40.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.0.1\n" "X-Project-Style: gnome\n" -#: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof.appdata.xml.in.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:4 src/sysprof/sysprof-application.c:196 +#: src/sysprof/sysprof-application.c:321 src/sysprof/sysprof-window.ui:10 msgid "Sysprof" msgstr "Sysprof" -#: data/org.gnome.Sysprof3.appdata.xml.in:6 +#: data/org.gnome.Sysprof.appdata.xml.in.in:6 msgid "Profile an application or entire system" msgstr "Perfile um aplicativo ou todo o sistema" -#: data/org.gnome.Sysprof3.appdata.xml.in:9 +#: data/org.gnome.Sysprof.appdata.xml.in.in:9 msgid "The GNOME Foundation" msgstr "A Fundação GNOME" -#: data/org.gnome.Sysprof3.appdata.xml.in:12 +#: data/org.gnome.Sysprof.appdata.xml.in.in:12 msgid "" "Sysprof allows you to profile applications to aid in debugging and " "optimization." @@ -43,70 +43,14 @@ "Sysprof permite que você crie perfis para aplicativos para auxiliar na " "depuração e otimização." -#: data/org.gnome.Sysprof3.desktop.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:5 msgid "Profiler" msgstr "Perfilador" -#: data/org.gnome.Sysprof3.desktop.in:6 +#: data/org.gnome.Sysprof.desktop.in.in:6 msgid "Profile an application or entire system." msgstr "Perfile um aplicativo ou todo o sistema." -#: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Tamanho da janela" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Tamanho da janela (largura e altura)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Posição da janela" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Posição da janela (x e y)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Janela maximizada" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Estado de janela maximizada" - -#: data/org.gnome.sysprof3.gschema.xml:20 -msgid "Last Spawn Program" -msgstr "Último programa aberto" - -#: data/org.gnome.sysprof3.gschema.xml:21 -msgid "" -"The last spawned program, which will be set in the UI upon restart of the " -"application." -msgstr "" -"O último programa aberto, o qual será definido na interface gráfica ao " -"reiniciar o aplicativo." - -#: data/org.gnome.sysprof3.gschema.xml:25 -msgid "Last Spawn Inherit Environment" -msgstr "Último ambiente herdado aberto" - -#: data/org.gnome.sysprof3.gschema.xml:26 -msgid "If the last spawned environment inherits the parent environment." -msgstr "Se o último ambiente aberto herda o ambiente pai." - -#: data/org.gnome.sysprof3.gschema.xml:30 -msgid "Last Spawn Environment" -msgstr "Último ambiente aberto" - -#: data/org.gnome.sysprof3.gschema.xml:31 -msgid "" -"The last spawned environment, which will be set in the UI upon restart of " -"the application." -msgstr "" -"O último ambiente aberto, o qual será definido na interface gráfica ao " -"reiniciar o aplicativo." - #: src/libsysprof/sysprof-callgraph-profile.c:447 msgid "Sysprof was unable to generate a callgraph from the system capture." msgstr "" @@ -141,12 +85,12 @@ msgstr "Carga de bateria (todas)" #: src/libsysprof-ui/sysprof-battery-aid.c:240 -#: src/libsysprof-ui/sysprof-counters-aid.c:282 msgid "Battery" msgstr "Bateria" #: src/libsysprof-ui/sysprof-callgraph-aid.c:212 #: src/libsysprof-ui/sysprof-callgraph-aid.c:218 +#: src/libsysprof-ui/sysprof-details-page.ui:73 msgid "Stack Traces" msgstr "Rastros de pilha" @@ -163,64 +107,74 @@ msgid "Callgraph" msgstr "Gráfico de chamadas" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:90 msgid "Functions" msgstr "Funções" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:107 +#: src/libsysprof-ui/sysprof-memprof-page.ui:165 +#: src/libsysprof-ui/sysprof-memprof-page.ui:216 msgid "Self" msgstr "Individual" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:123 +#: src/libsysprof-ui/sysprof-memprof-page.ui:181 +#: src/libsysprof-ui/sysprof-memprof-page.ui:232 msgid "Total" msgstr "Total" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:148 msgid "Callers" msgstr "Chamadores" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:207 msgid "Descendants" msgstr "Descendentes" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:189 msgid "Hits" msgstr "Acertos" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Gerando gráfico de chamadas" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Sysprof está ocupado criando o gráfico de chamadas selecionado." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:271 msgid "Not Enough Samples" msgstr "Amostras insuficientes" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:272 msgid "More samples are necessary to display a callgraph." msgstr "Mais amostras são necessárias para exibir um gráfico de chamadas." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 +#: src/libsysprof-ui/sysprof-counters-aid.c:282 +#: src/libsysprof-ui/sysprof-details-page.ui:148 msgid "Counters" msgstr "Contadores" @@ -244,74 +198,100 @@ msgstr "Uso de CPU (Todos)" #: src/libsysprof-ui/sysprof-cpu-aid.c:316 +#: src/libsysprof-ui/sysprof-details-page.ui:103 msgid "Processes" msgstr "Processos" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:231 msgid "Memory Capture" msgstr "Captura de memória" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:245 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf segundos" -#: src/libsysprof-ui/sysprof-details-page.ui:21 -msgid "Filename" -msgstr "Nome do arquivo" +#: src/libsysprof-ui/sysprof-details-page.ui:8 +msgid "Capture" +msgstr "Capturar" -#: src/libsysprof-ui/sysprof-details-page.ui:35 -msgid "Captured at" -msgstr "Capturado em" +#: src/libsysprof-ui/sysprof-details-page.ui:12 +msgid "Location" +msgstr "Local" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:26 +msgid "Recorded At" +msgstr "Registrado em" + +#: src/libsysprof-ui/sysprof-details-page.ui:40 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Duração" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:54 msgid "CPU Model" msgstr "Modelo de CPU" -#: src/libsysprof-ui/sysprof-details-page.ui:80 -msgid "Samples Captured" -msgstr "Amostras capturadas" +#: src/libsysprof-ui/sysprof-details-page.ui:69 +#: src/libsysprof-ui/sysprof-details-page.ui:164 +msgid "Statistics" +msgstr "Estatísticas" -#: src/libsysprof-ui/sysprof-details-page.ui:94 -msgid "Marks Captured" -msgstr "Marcas capturadas" +#: src/libsysprof-ui/sysprof-details-page.ui:74 +msgid "Number of stack traces sampled for performance callgraphs" +msgstr "" +"Número de rastros de pilha amostrados para gráfico de chamadas de desempenho" -#: src/libsysprof-ui/sysprof-details-page.ui:108 -msgid "Processes Captured" -msgstr "Processos capturados" +#: src/libsysprof-ui/sysprof-details-page.ui:88 +msgid "Marks" +msgstr "Marcas" -#: src/libsysprof-ui/sysprof-details-page.ui:122 -msgid "Forks Captured" -msgstr "Forks capturados" +#: src/libsysprof-ui/sysprof-details-page.ui:89 +msgid "Number of marks seen" +msgstr "Número de marcas vistas" -#: src/libsysprof-ui/sysprof-details-page.ui:136 -msgid "Counters Captured" -msgstr "Contadores capturados" +#: src/libsysprof-ui/sysprof-details-page.ui:104 +msgid "Number of processes seen" +msgstr "Número de processos vistos" -#: src/libsysprof-ui/sysprof-details-page.ui:151 -msgid "Allocations Captured" -msgstr "Alocações capturadas" +#: src/libsysprof-ui/sysprof-details-page.ui:118 +msgid "Forks" +msgstr "Bifurcações" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:119 +msgid "Number of times a process forked" +msgstr "Número de vezes que um processo bifurcou" + +#: src/libsysprof-ui/sysprof-details-page.ui:133 +#: src/libsysprof-ui/sysprof-memprof-aid.c:193 +#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 +msgid "Memory Allocations" +msgstr "Alocações de memória" + +#: src/libsysprof-ui/sysprof-details-page.ui:134 +msgid "Number of stack traces recorded for tracing memory allocations" +msgstr "" +"Número de rastros de pilha registrados para rastrear alocações de memória" + +#: src/libsysprof-ui/sysprof-details-page.ui:149 +msgid "Number of recorded counter values" +msgstr "Número de valores de contadores registrados" + +#: src/libsysprof-ui/sysprof-details-page.ui:176 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Marca" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:202 msgid "Min" msgstr "Mín" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:215 msgid "Max" msgstr "Máx" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:228 msgid "Avg" msgstr "Méd" @@ -328,70 +308,70 @@ msgid "Writes" msgstr "Escritas" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:228 msgid "Recording Failed" msgstr "Gravação falhou" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:233 msgid "Recording…" msgstr "Gravação…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:264 #, c-format msgid "Recording at %s" msgstr "Gravação em %s" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:268 msgid "New Recording" msgstr "Nova gravação" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1096 msgid "The recording could not be opened" msgstr "A gravação não pôde ser aberta" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1243 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Falha ao salvar a gravação: %s" + +#: src/libsysprof-ui/sysprof-display.c:1276 msgid "Save Recording" msgstr "Salvar gravação" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1279 msgid "Save" msgstr "Salvar" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1280 src/sysprof/sysprof-window.c:285 msgid "Cancel" msgstr "Cancelar" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Falha ao salvar a gravação: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Detalhes" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Remover variável de ambiente" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 -msgid "New variable…" -msgstr "Nova variável…" +#: src/libsysprof-ui/sysprof-environ-editor.c:72 +msgid "New environment variable…" +msgstr "Nova variável de ambiente…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:27 msgid "Ouch, that hurt!" msgstr "Ai, isso machuca!" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:40 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "Algum erro inesperado ocorreu enquanto tentava perfilar o seu sistema." #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Mensagem" @@ -423,7 +403,7 @@ msgstr "Logs" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Tempo" @@ -435,20 +415,20 @@ msgid "Domain" msgstr "Domínio" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Tempos" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Grupo" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Fim" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Nenhum tempo disponível" @@ -464,49 +444,66 @@ msgid "Memory" msgstr "Memória" -#: src/libsysprof-ui/sysprof-memprof-aid.c:193 -#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 -msgid "Memory Allocations" -msgstr "Alocações de memória" - #: src/libsysprof-ui/sysprof-memprof-aid.c:224 msgid "Track Allocations" msgstr "Rastrear alocações" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:246 #, c-format msgid "> %s to %s" msgstr "> %s para %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 -msgid "Summary" -msgstr "Resumo" +#: src/libsysprof-ui/sysprof-memprof-page.ui:16 +msgid "Number of Allocations" +msgstr "Número de alocações" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:17 +msgid "Total number of allocation and free records" +msgstr "Número total de alocações e registros livres" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:30 +#: src/libsysprof-ui/sysprof-memprof-page.ui:318 +msgid "Leaked Allocations" +msgstr "Alocações vazadas" #: src/libsysprof-ui/sysprof-memprof-page.ui:31 -msgid "All Allocations" -msgstr "Todas alocações" +msgid "Number of allocations without a free record" +msgstr "Número de alocações sem um registro livre" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:44 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 msgid "Temporary Allocations" msgstr "Alocações temporárias" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -msgid "Leaked Allocations" -msgstr "Alocações vazadas" +#: src/libsysprof-ui/sysprof-memprof-page.ui:45 +msgid "Number of allocations freed from similar stack trace" +msgstr "Número de alocações liberadas de rastros de pilha similar" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:59 +msgid "Allocations by Size" +msgstr "Alocações por tamanho" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:247 msgid "Size" msgstr "Tamanho" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:264 msgid "Analyzing Memory Allocations" msgstr "Analisando alocações de memória" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:265 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof está ocupado analisando alocações de memória." +#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +msgid "Summary" +msgstr "Resumo" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:304 +msgid "All Allocations" +msgstr "Todas alocações" + #: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 msgid "Memory Used" msgstr "Memória usada" @@ -517,66 +514,54 @@ msgstr "Rede" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 -msgid "Profilers" -msgstr "Perfiladores" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:69 +msgid "Profiling Target" +msgstr "Alvo de Perfilamento" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 -msgid "" -"Track application memory allocations (Sysprof must launch target application)" -msgstr "" -"Rastreia alocações de memória do aplicativo (Sysprof deve iniciar o " -"aplicativo alvo)" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:72 +msgid "Profile Entire System" +msgstr "Perfilar Sistema Inteiro" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 -msgid "Track slow operations on your applications main loop" -msgstr "Rastreia operações lentas no loop principal do aplicativo" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 -msgid "All Processes" -msgstr "Todos processos" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:73 msgid "" -"Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system configurations." +"Sysprof can generate callgraphs for one or more processes on your system." msgstr "" -"Inclui todos os aplicativos e o kernel do sistema operacional no gráfico de " -"chamada. Isso pode não ser possível em algumas configurações do sistema." +"Sysprof pode gerar um gráfico de chamadas para um ou mais processos em seu " +"sistema." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 -msgid "Search Processes…" -msgstr "Pesquisar processos…" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:84 +msgid "Search Processes" +msgstr "Pesquisar processos" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:99 msgid "Loading Processes…" msgstr "Carregando processos…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:114 msgid "Launch Application" msgstr "Iniciar aplicativo" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 -msgid "Enable to launch a program of your choosing before profiling." -msgstr "Habilite para iniciar um programa de sua escolha antes de perfilar." +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:115 +msgid "" +"Sysprof can launch an application to be profiled. The profiler will " +"automatically stop when it exits." +msgstr "" +"Sysprof pode executar um aplicativo a ser perfilado. O perfilador irá parar " +"automaticamente quando o app encerrar." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:126 msgid "Command Line" msgstr "Linha de comando" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 -msgid "Environment" -msgstr "Ambiente" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:413 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:135 msgid "Inherit Environment" msgstr "Herdar ambiente" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:437 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:136 msgid "" "Enable to ensure your application shares the display, message-bus, and other " "desktop environment settings." @@ -584,19 +569,38 @@ "Habilite para garantir que seu aplicativo compartilhe a tela, barramento de " "mensagens e outras configurações do ambiente de desktop." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:463 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:153 +msgid "Performance" +msgstr "Desempenho" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:156 msgid "Allow CPU Throttling" msgstr "Permitir a limitação de CPU" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:491 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:157 msgid "" -"If disabled, your CPU will be placed in performance mode. It will be " -"restored after profiling." +"When enabled, your system is allowed to scale CPU frequency as necessary." msgstr "" -"Se desativado, sua CPU será colocada no modo de desempenho. Ela será " -"restaurada após perfilamento." +"Quando habilitado, seu sistema terá permissão para escalar a frequência da " +"CPU conforme necessário." + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:172 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 +msgid "Instruments" +msgstr "Instrumentos" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:245 +msgid "" +"Track application memory allocations (Sysprof must launch target application)" +msgstr "" +"Rastreia alocações de memória do aplicativo (Sysprof deve iniciar o " +"aplicativo alvo)" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:252 +msgid "Track slow operations on your applications main loop" +msgstr "Rastreia operações lentas no loop principal do aplicativo" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:265 msgid "_Record" msgstr "G_ravar" @@ -609,34 +613,30 @@ msgid "Energy Usage (All)" msgstr "Uso de energia (todos)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "Você sabia que você pode usar o <a href=\"help:sysprof\">sysprof-cli</a> " "para gravar?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Eventos" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "_Parar gravação" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Selecione para mais detalhes" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Exibe gráficos suplementares" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 -msgid "Instruments" -msgstr "Instrumentos" - #: src/sysprofd/org.gnome.sysprof3.policy.in:13 msgid "Profile the system" msgstr "Perfilar o sistema" @@ -807,43 +807,39 @@ msgid "About Sysprof" msgstr "Sobre o Sysprof" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:205 msgid "A system profiler" msgstr "Um perfilador de sistema" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:206 msgid "translator-credits" msgstr "" -"Enrico Nicoletto <liverig@gmail.com>, 2016-2017\n" +"Enrico Nicoletto <hiko@duck.com>, 2016-2017, 2022\n" "Rafael Fontenelle <rafaelff@gnome.org>, 2016-2018" -#: src/sysprof/sysprof-application.c:205 -msgid "Learn more about Sysprof" -msgstr "Aprenda mais sobre o Sysprof" - #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:279 msgid "Open Capture…" msgstr "Abrir captura…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:283 msgid "Open" msgstr "Abrir" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:288 msgid "Sysprof Captures" msgstr "Capturas do Sysprof" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:293 msgid "All Files" msgstr "Todos arquivos" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:34 msgid "_Open" msgstr "_Abrir" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:37 msgid "Open Recording… (Ctrl+O)" msgstr "Abrir gravação… (Ctrl+O)" @@ -858,7 +854,7 @@ #: src/tools/sysprof-cli.c:108 msgid "--merge requires at least 2 filename arguments" -msgstr "--merge requer pelo menos 2 argumentos de nome de arquivo." +msgstr "--merge requer pelo menos 2 argumentos de nome de arquivo" #: src/tools/sysprof-cli.c:226 msgid "Disable CPU throttling while profiling" @@ -990,7 +986,7 @@ msgstr "Argumentos demais foram passados para o sysprof-cli:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s existe. Use --force para sobrescrevê-lo\n" @@ -1032,131 +1028,3 @@ msgstr "" "--dest=NOME_BARRAMENTO NOME-DE-ARQUIVO - conecta a um perfilador sysprof " "embutido" - -#~ msgid "Zoom Out" -#~ msgstr "Reduz" - -#~ msgid "Resize to Fit" -#~ msgstr "Redimensiona para caber" - -#~ msgid "Zoom In" -#~ msgstr "Amplia" - -#~ msgid "_Callgraph" -#~ msgstr "Gráfico de _chamadas" - -#~ msgid "Something went wrong" -#~ msgstr "Algo deu errado" - -#~ msgid "Sysprof failed to access the requested performance data." -#~ msgstr "Sysprof falhou em acessar os dados de desempenho requisitados." - -#~ msgid "Welcome to Sysprof" -#~ msgstr "Bem-vindo ao Sysprof" - -#~ msgid "Start profiling your system with the <b>Record</b> button above" -#~ msgstr "Comece a perfilar o seu sistema com o botão <b>Gravar</b> acima" - -#~ msgid "Cumulative" -#~ msgstr "Cumulativo" - -#~ msgid "Search" -#~ msgstr "Pesquisar" - -#~ msgid "Key" -#~ msgstr "Chave" - -#~ msgid "Value" -#~ msgstr "Valor" - -#~ msgid "New Process" -#~ msgstr "Novo processo" - -#~ msgid "00:00" -#~ msgstr "00:00" - -#~ msgid "" -#~ "Sysprof requires authorization to access your computers performance " -#~ "counters." -#~ msgstr "" -#~ "Sysprof requer autorização para acessar os contadores de desempenho de " -#~ "seus computadores." - -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "FPS" -#~ msgstr "FPS" - -#~ msgid "%u Process" -#~ msgid_plural "%u Processes" -#~ msgstr0 "%u processo" -#~ msgstr1 "%u processos" - -#~ msgid "The command line arguments provided are invalid" -#~ msgstr "Os argumentos de linha de comando fornecidos são inválidos" - -#~ msgid "Not running" -#~ msgstr "Ocioso" - -#~ msgid "_Close" -#~ msgstr "_Fechar" - -#~ msgid "Zoom out (Ctrl+-)" -#~ msgstr "Reduzir (Ctrl+-)" - -#~ msgid "Reset zoom level (Ctrl+0)" -#~ msgstr "Redefinir nível de ampliação (Ctrl+0)" - -#~ msgid "Zoom in (Ctrl++)" -#~ msgstr "Ampliar (Ctrl++)" - -#~ msgctxt "menu label" -#~ msgid "Open Capture…" -#~ msgstr "Abrir captura…" - -#~ msgid "Save As…" -#~ msgstr "Salvar como…" - -#~ msgid "Screenshot" -#~ msgstr "Captura de tela" - -#~ msgid "Samples: %u" -#~ msgstr "Exemplos: %u" - -#~ msgid "%s — %s" -#~ msgstr "%s — %s" - -#~ msgid "Record" -#~ msgstr "Gravar" - -#~ msgid "Stop" -#~ msgstr "Parar" - -#~ msgid "Building profile…" -#~ msgstr "Construindo perfil…" - -#~ msgid "Stopping…" -#~ msgstr "Parando…" - -#~ msgid "Save Capture As…" -#~ msgstr "Salvar captura como…" - -#~ msgid "An error occurred while attempting to save your capture: %s" -#~ msgstr "Ocorreu um erro enquanto tentava salvar sua captura: %s" - -#~ msgid "The file “%s” could not be opened. Only local files are supported." -#~ msgstr "" -#~ "O arquivo “%s” não pôde ser aberto. Há suporte apenas a arquivos locais." - -#~ msgid "sysprof" -#~ msgstr "sysprof" - -#~ msgid "About" -#~ msgstr "Sobre" - -#~ msgid "_Quit" -#~ msgstr "_Sair" - -#~ msgid "%s - %s" -#~ msgstr "%s - %s"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/sr.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/sr.po
Changed
@@ -1,26 +1,27 @@ # Serbian translation for sysprof. # Copyright © 2016 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. -# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016–2021. +# Мирослав Николић <miroslavnikolić@rocketmail.com>, 2016–2022. +# msgid "" msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-11-05 04:10+0000\n" -"PO-Revision-Date: 2021-12-30 14:02+0200\n" -"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" -"Language-Team: Serbian <(nothing)>\n" +"POT-Creation-Date: 2022-05-17 22:46+0000\n" +"PO-Revision-Date: 2022-06-18 10:00+0200\n" +"Last-Translator: Мирослав Николић <miroslavnikolić@rocketmail.com>\n" +"Language-Team: Serbian <српски <gnome-sr@googlegroups.org>>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" -"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" "X-Project-Style: gnome\n" #: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:208 +#: src/sysprof/sysprof-application.c:332 src/sysprof/sysprof-window.ui:9 msgid "Sysprof" msgstr "Профилатор система" @@ -49,34 +50,10 @@ msgstr "Профилишите неки програм или читав систем." #: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Величина прозора" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Величина прозора (ширина и висина)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Положај прозора" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Положај прозора (водоравно и усправно)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Увећан прозор" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Стање увећаног прозора" - -#: data/org.gnome.sysprof3.gschema.xml:20 msgid "Last Spawn Program" msgstr "Последњи изрођени програм" -#: data/org.gnome.sysprof3.gschema.xml:21 +#: data/org.gnome.sysprof3.gschema.xml:6 msgid "" "The last spawned program, which will be set in the UI upon restart of the " "application." @@ -84,19 +61,19 @@ "Последњи изрођени програм, који ће бити подешен у корисничком сучељу након " "поновног покретања програма." -#: data/org.gnome.sysprof3.gschema.xml:25 +#: data/org.gnome.sysprof3.gschema.xml:10 msgid "Last Spawn Inherit Environment" msgstr "Последње изрођено наслеђује окружење" -#: data/org.gnome.sysprof3.gschema.xml:26 +#: data/org.gnome.sysprof3.gschema.xml:11 msgid "If the last spawned environment inherits the parent environment." msgstr "Да ли последње изрођено окружење наслеђује родитељско окружење." -#: data/org.gnome.sysprof3.gschema.xml:30 +#: data/org.gnome.sysprof3.gschema.xml:15 msgid "Last Spawn Environment" msgstr "Последње изрођено окружење" -#: data/org.gnome.sysprof3.gschema.xml:31 +#: data/org.gnome.sysprof3.gschema.xml:16 msgid "" "The last spawned environment, which will be set in the UI upon restart of " "the application." @@ -161,62 +138,70 @@ msgid "Callgraph" msgstr "График позива" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:220 msgid "Functions" msgstr "Функције" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:237 +#: src/libsysprof-ui/sysprof-memprof-page.ui:295 +#: src/libsysprof-ui/sysprof-memprof-page.ui:346 msgid "Self" msgstr "Једна" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:253 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 +#: src/libsysprof-ui/sysprof-memprof-page.ui:362 msgid "Total" msgstr "Укупно" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:278 msgid "Callers" msgstr "Позивачи" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:337 msgid "Descendants" msgstr "Наследници" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:309 msgid "Hits" msgstr "Погодака" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Стварам график позива" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Профилатор система је заузет стварањем изабраног графика позива." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:401 msgid "Not Enough Samples" msgstr "Нема довољно узорака" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:402 msgid "More samples are necessary to display a callgraph." msgstr "Још узорака је потребно за приказ графика позива." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 msgid "Counters" @@ -245,11 +230,11 @@ msgid "Processes" msgstr "Процеси" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:237 msgid "Memory Capture" msgstr "Снимак меморије" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:251 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf секунде" @@ -262,54 +247,54 @@ msgid "Captured at" msgstr "Снимљено у" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:49 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Трајање" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:63 msgid "CPU Model" msgstr "Модел процесора" -#: src/libsysprof-ui/sysprof-details-page.ui:80 +#: src/libsysprof-ui/sysprof-details-page.ui:78 msgid "Samples Captured" msgstr "Снимљених узорака" -#: src/libsysprof-ui/sysprof-details-page.ui:94 +#: src/libsysprof-ui/sysprof-details-page.ui:92 msgid "Marks Captured" msgstr "Снимљених ознака" -#: src/libsysprof-ui/sysprof-details-page.ui:108 +#: src/libsysprof-ui/sysprof-details-page.ui:106 msgid "Processes Captured" msgstr "Снимљених процеса" -#: src/libsysprof-ui/sysprof-details-page.ui:122 +#: src/libsysprof-ui/sysprof-details-page.ui:120 msgid "Forks Captured" msgstr "Снимљених клонова" -#: src/libsysprof-ui/sysprof-details-page.ui:136 +#: src/libsysprof-ui/sysprof-details-page.ui:134 msgid "Counters Captured" msgstr "Снимљених бројача" -#: src/libsysprof-ui/sysprof-details-page.ui:151 +#: src/libsysprof-ui/sysprof-details-page.ui:149 msgid "Allocations Captured" msgstr "Снимљених додељивања" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:296 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Ознака" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:322 msgid "Min" msgstr "Најмање" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:335 msgid "Max" msgstr "Највише" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:348 msgid "Avg" msgstr "Просек" @@ -326,71 +311,71 @@ msgid "Writes" msgstr "Писања" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:227 msgid "Recording Failed" msgstr "Снимање није успело" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:232 msgid "Recording…" msgstr "Снимам…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:263 #, c-format msgid "Recording at %s" msgstr "Снимам у %s" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:267 msgid "New Recording" msgstr "Нови снимак" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1093 msgid "The recording could not be opened" msgstr "Не могу да отворим снимак" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1240 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Нисам успео да сачувам снимак: %s" + +#: src/libsysprof-ui/sysprof-display.c:1273 msgid "Save Recording" msgstr "Сачувај снимак" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1276 msgid "Save" msgstr "Сачувај" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1277 src/sysprof/sysprof-window.c:310 msgid "Cancel" msgstr "Откажи" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Нисам успео да сачувам снимак: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Детаљи" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Уклони променљиву окружења" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 +#: src/libsysprof-ui/sysprof-environ-editor.c:72 msgid "New variable…" msgstr "Нова променљива…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 -msgid "Ouch, that hurt!" -msgstr "Јао, што ово боли!" - -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:31 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "" "Нешто је неочекивано пошло наопако када сам покушао да профилишем ваш систем." +#: src/libsysprof-ui/sysprof-failed-state-view.ui:41 +msgid "Ouch, that hurt!" +msgstr "Јао, што ово боли!" + #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Порука" @@ -422,7 +407,7 @@ msgstr "Дневници" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Време" @@ -434,20 +419,20 @@ msgid "Domain" msgstr "Домен" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Трајања" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Група" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Крај" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Нису доступна временска трајања" @@ -473,37 +458,36 @@ msgstr "Расподела стазе" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:241 #, c-format msgid "> %s to %s" msgstr "> %s до %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:21 msgid "Summary" msgstr "Извештај" -#: src/libsysprof-ui/sysprof-memprof-page.ui:31 +#: src/libsysprof-ui/sysprof-memprof-page.ui:27 msgid "All Allocations" msgstr "Све расподеле" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:34 msgid "Temporary Allocations" msgstr "Привремене расподеле" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -#| msgid "Track Allocations" +#: src/libsysprof-ui/sysprof-memprof-page.ui:41 msgid "Leaked Allocations" msgstr "Истекле расподеле" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:377 msgid "Size" msgstr "Величина" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:394 msgid "Analyzing Memory Allocations" msgstr "Анализирам расподелу меморије" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:395 msgid "Sysprof is busy analyzing memory allocations." msgstr "Профилатор система је заузет анализом расподеле меморије." @@ -517,30 +501,30 @@ msgstr "Мрежа" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "Гномова шкољка" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:92 msgid "Profilers" msgstr "Профилатори" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:188 msgid "" "Track application memory allocations (Sysprof must launch target application)" msgstr "" "Пратите расподелу меморије програма (Профилатор система мора да покрене " "циљни програм)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:196 msgid "Track slow operations on your applications main loop" msgstr "Пратите споре радње на главној петљи ваших програма" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:212 msgid "All Processes" msgstr "Сви процеси" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:242 msgid "" "Include all applications and operating system kernel in callgraph. This may " "not be possible on some system configurations." @@ -548,27 +532,27 @@ "Укључите све програме и кернел оперативног система у график позива. Ово неће " "бити могуће на неким подешавањима система." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:270 msgid "Search Processes…" msgstr "Тражи процесе…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:288 msgid "Loading Processes…" msgstr "учитавам процесе…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:312 msgid "Launch Application" msgstr "Покрени програм" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:341 msgid "Enable to launch a program of your choosing before profiling." msgstr "Укључите да покренете програм по вашем избору пре профилисања." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:369 msgid "Command Line" msgstr "Линија наредби" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:388 msgid "Environment" msgstr "Окружење" @@ -609,31 +593,31 @@ msgid "Energy Usage (All)" msgstr "Коришћење напајања (све)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "Да ли знате да можете користити „<a href=\"help:sysprof\">sysprof-cli</a>“ " "за снимање?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Догађаји" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "_Заустави снимање" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Изаберите за више појединости" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Прикажи додатне графике" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 msgid "Instruments" msgstr "Инструменти" @@ -804,44 +788,44 @@ msgid "About Sysprof" msgstr "О Профилатору система" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:200 msgid "A system profiler" msgstr "Профилатор система" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:205 msgid "translator-credits" msgstr "" "Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "\n" "http://prevod.org — преводи на српски језик" -#: src/sysprof/sysprof-application.c:205 +#: src/sysprof/sysprof-application.c:211 msgid "Learn more about Sysprof" msgstr "Сазнајте више о Профилатору система" #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:304 msgid "Open Capture…" msgstr "Отвори снимак…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:308 msgid "Open" msgstr "Отвори" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:313 msgid "Sysprof Captures" msgstr "Снимци програма" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:318 msgid "All Files" msgstr "Све датотеке" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:33 msgid "_Open" msgstr "_Отвори" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:36 msgid "Open Recording… (Ctrl+O)" msgstr "Отвори снимак… (Ctrl+O)" @@ -989,7 +973,7 @@ msgstr "Превише аргумената је прослеђено конзолном програму:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "„%s“ је изашао. Користите „--force“ да препишете\n" @@ -1032,6 +1016,24 @@ "--dest=НАЗИВ_САБИРНИЦЕ ДАТОТЕКА – повезује се на угнежденог профилатора " "„sysprof“-а" +#~ msgid "Window size" +#~ msgstr "Величина прозора" + +#~ msgid "Window size (width and height)." +#~ msgstr "Величина прозора (ширина и висина)." + +#~ msgid "Window position" +#~ msgstr "Положај прозора" + +#~ msgid "Window position (x and y)." +#~ msgstr "Положај прозора (водоравно и усправно)." + +#~ msgid "Window maximized" +#~ msgstr "Увећан прозор" + +#~ msgid "Window maximized state" +#~ msgstr "Стање увећаног прозора" + #~ msgid "sysprof" #~ msgstr "sysprof"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/sv.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/sv.po
Changed
@@ -1,7 +1,7 @@ # Swedish translation for sysprof. -# Copyright © 2016-2021 sysprof's COPYRIGHT HOLDER +# Copyright © 2016-2022 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. -# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2016, 2018, 2019, 2020, 2021. +# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2016, 2018, 2019, 2020, 2021, 2022. # Josef Andersson <l10nl18nsweja@gmail.com>, 2017. # Luna Jernberg <droidbittin@gmail.com>, 2021. # @@ -9,32 +9,32 @@ msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-11-05 12:43+0000\n" -"PO-Revision-Date: 2021-11-06 12:05+0100\n" -"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n" +"POT-Creation-Date: 2022-07-23 11:09+0000\n" +"PO-Revision-Date: 2022-09-11 21:38+0200\n" +"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.0\n" +"X-Generator: Poedit 3.1.1\n" -#: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof.appdata.xml.in.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:4 src/sysprof/sysprof-application.c:196 +#: src/sysprof/sysprof-application.c:321 src/sysprof/sysprof-window.ui:10 msgid "Sysprof" msgstr "Sysprof" -#: data/org.gnome.Sysprof3.appdata.xml.in:6 +#: data/org.gnome.Sysprof.appdata.xml.in.in:6 msgid "Profile an application or entire system" msgstr "Profilera ett program eller hela systemet" -#: data/org.gnome.Sysprof3.appdata.xml.in:9 +#: data/org.gnome.Sysprof.appdata.xml.in.in:9 msgid "The GNOME Foundation" msgstr "GNOME Foundation" -#: data/org.gnome.Sysprof3.appdata.xml.in:12 +#: data/org.gnome.Sysprof.appdata.xml.in.in:12 msgid "" "Sysprof allows you to profile applications to aid in debugging and " "optimization." @@ -42,70 +42,14 @@ "Sysprof låter dig profilera program för att hjälpa till med felsökning och " "optimering." -#: data/org.gnome.Sysprof3.desktop.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:5 msgid "Profiler" msgstr "Profilerare" -#: data/org.gnome.Sysprof3.desktop.in:6 +#: data/org.gnome.Sysprof.desktop.in.in:6 msgid "Profile an application or entire system." msgstr "Profilera ett program eller hela systemet." -#: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Fönsterstorlek" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Fönsterstorlek (bredd och höjd)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Fönsterposition" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Fönsterposition (x och y)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Fönster maximerat" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Maximerat tillstånd för fönster" - -#: data/org.gnome.sysprof3.gschema.xml:20 -msgid "Last Spawn Program" -msgstr "Senast startade program" - -#: data/org.gnome.sysprof3.gschema.xml:21 -msgid "" -"The last spawned program, which will be set in the UI upon restart of the " -"application." -msgstr "" -"Det senast startade programmet, vilket kommer ställas in i " -"användargränssnittet då programmet startas om." - -#: data/org.gnome.sysprof3.gschema.xml:25 -msgid "Last Spawn Inherit Environment" -msgstr "Senast startad ärver miljö" - -#: data/org.gnome.sysprof3.gschema.xml:26 -msgid "If the last spawned environment inherits the parent environment." -msgstr "Om den senast startade miljön ärver den överordnade miljön." - -#: data/org.gnome.sysprof3.gschema.xml:30 -msgid "Last Spawn Environment" -msgstr "Senast startade miljö" - -#: data/org.gnome.sysprof3.gschema.xml:31 -msgid "" -"The last spawned environment, which will be set in the UI upon restart of " -"the application." -msgstr "" -"Den senast startade miljön, vilken kommer ställas in i användargränssnittet " -"då programmet startas om." - #: src/libsysprof/sysprof-callgraph-profile.c:447 msgid "Sysprof was unable to generate a callgraph from the system capture." msgstr "Sysprof kunde inte skapa en anropsgraf från systemfångsten." @@ -139,86 +83,96 @@ msgstr "Batteriladdning (Alla)" #: src/libsysprof-ui/sysprof-battery-aid.c:240 -#: src/libsysprof-ui/sysprof-counters-aid.c:282 msgid "Battery" msgstr "Batteri" #: src/libsysprof-ui/sysprof-callgraph-aid.c:212 #: src/libsysprof-ui/sysprof-callgraph-aid.c:218 +#: src/libsysprof-ui/sysprof-details-page.ui:73 msgid "Stack Traces" msgstr "Stackspår" #: src/libsysprof-ui/sysprof-callgraph-aid.c:226 msgid "Stack Traces (In Kernel)" -msgstr "Stackspår (I kärna)" +msgstr "Stackspår (i kärna)" #: src/libsysprof-ui/sysprof-callgraph-aid.c:234 msgid "Stack Traces (In User)" -msgstr "Stackspår (I användare)" +msgstr "Stackspår (i användare)" #: src/libsysprof-ui/sysprof-callgraph-aid.c:243 #: src/libsysprof-ui/sysprof-callgraph-aid.c:273 msgid "Callgraph" msgstr "Anropsgraf" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:90 msgid "Functions" msgstr "Funktioner" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:107 +#: src/libsysprof-ui/sysprof-memprof-page.ui:165 +#: src/libsysprof-ui/sysprof-memprof-page.ui:216 msgid "Self" msgstr "Själv" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:123 +#: src/libsysprof-ui/sysprof-memprof-page.ui:181 +#: src/libsysprof-ui/sysprof-memprof-page.ui:232 msgid "Total" msgstr "Totalt" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:148 msgid "Callers" msgstr "Anropare" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:207 msgid "Descendants" msgstr "Ättlingar" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:189 msgid "Hits" msgstr "Träffar" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Genererar anropsgraf" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Sysprof är upptaget med att skapa vald anropsgraf." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:271 msgid "Not Enough Samples" msgstr "För få samplingar" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:272 msgid "More samples are necessary to display a callgraph." msgstr "Fler samplingar är nödvändiga för att skapa en anropsgraf." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 +#: src/libsysprof-ui/sysprof-counters-aid.c:282 +#: src/libsysprof-ui/sysprof-details-page.ui:148 msgid "Counters" msgstr "Räknare" @@ -233,83 +187,107 @@ #: src/libsysprof-ui/sysprof-cpu-aid.c:218 msgid "CPU Frequency (All)" -msgstr "Processorfrekvens (Alla)" +msgstr "Processorfrekvens (alla)" #. Translators: CPU is the processor. #: src/libsysprof-ui/sysprof-cpu-aid.c:227 #: src/libsysprof-ui/sysprof-cpu-aid.c:250 msgid "CPU Usage (All)" -msgstr "Processoranvändning (Alla)" +msgstr "Processoranvändning (alla)" #: src/libsysprof-ui/sysprof-cpu-aid.c:316 +#: src/libsysprof-ui/sysprof-details-page.ui:103 msgid "Processes" msgstr "Processer" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:231 msgid "Memory Capture" msgstr "Minnesfångst" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:245 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf sekunder" -#: src/libsysprof-ui/sysprof-details-page.ui:21 -msgid "Filename" -msgstr "Filnamn" +#: src/libsysprof-ui/sysprof-details-page.ui:8 +msgid "Capture" +msgstr "Fångst" -#: src/libsysprof-ui/sysprof-details-page.ui:35 -msgid "Captured at" -msgstr "Fångat" +#: src/libsysprof-ui/sysprof-details-page.ui:12 +msgid "Location" +msgstr "Plats" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:26 +msgid "Recorded At" +msgstr "Inspelad" + +#: src/libsysprof-ui/sysprof-details-page.ui:40 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Längd" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:54 msgid "CPU Model" msgstr "Processormodell" -#: src/libsysprof-ui/sysprof-details-page.ui:80 -msgid "Samples Captured" -msgstr "Samplingar fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:69 +#: src/libsysprof-ui/sysprof-details-page.ui:164 +msgid "Statistics" +msgstr "Statistik" + +#: src/libsysprof-ui/sysprof-details-page.ui:74 +msgid "Number of stack traces sampled for performance callgraphs" +msgstr "Antalet stackspår som provtagits för prestandaanropsgrafer" + +#: src/libsysprof-ui/sysprof-details-page.ui:88 +msgid "Marks" +msgstr "Märken" + +#: src/libsysprof-ui/sysprof-details-page.ui:89 +msgid "Number of marks seen" +msgstr "Antalet märken som setts" -#: src/libsysprof-ui/sysprof-details-page.ui:94 -msgid "Marks Captured" -msgstr "Märken fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:104 +msgid "Number of processes seen" +msgstr "Antalet processer som setts" -#: src/libsysprof-ui/sysprof-details-page.ui:108 -msgid "Processes Captured" -msgstr "Processer fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:118 +msgid "Forks" +msgstr "Fork-anrop" -#: src/libsysprof-ui/sysprof-details-page.ui:122 -msgid "Forks Captured" -msgstr "Fork-anrop fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:119 +msgid "Number of times a process forked" +msgstr "Antalet gånger en process har förgrenats med fork" -#: src/libsysprof-ui/sysprof-details-page.ui:136 -msgid "Counters Captured" -msgstr "Räknare fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:133 +#: src/libsysprof-ui/sysprof-memprof-aid.c:193 +#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 +msgid "Memory Allocations" +msgstr "Minnesallokeringar" -#: src/libsysprof-ui/sysprof-details-page.ui:151 -msgid "Allocations Captured" -msgstr "Allokeringar fångade" +#: src/libsysprof-ui/sysprof-details-page.ui:134 +msgid "Number of stack traces recorded for tracing memory allocations" +msgstr "Antalet stackspår som inspelats för spårning av minnesallokeringar" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:149 +msgid "Number of recorded counter values" +msgstr "Antalet inspelade räknarvärden" + +#: src/libsysprof-ui/sysprof-details-page.ui:176 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Märke" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:202 msgid "Min" msgstr "Min" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:215 msgid "Max" msgstr "Max" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:228 msgid "Avg" msgstr "Mdl" @@ -326,70 +304,70 @@ msgid "Writes" msgstr "Skrivningar" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:228 msgid "Recording Failed" msgstr "Inspelning misslyckades" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:233 msgid "Recording…" msgstr "Spelar in…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:264 #, c-format msgid "Recording at %s" msgstr "Inspelning från %s" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:268 msgid "New Recording" msgstr "Ny inspelning" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1096 msgid "The recording could not be opened" msgstr "Inspelningen kunde inte öppnas" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1243 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Misslyckades med att spara inspelning: %s" + +#: src/libsysprof-ui/sysprof-display.c:1276 msgid "Save Recording" msgstr "Spara inspelning" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1279 msgid "Save" msgstr "Spara" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1280 src/sysprof/sysprof-window.c:285 msgid "Cancel" msgstr "Avbryt" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Misslyckades med att spara inspelning: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Detaljer" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Ta bort miljövariabel" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 -msgid "New variable…" -msgstr "Ny variabel…" +#: src/libsysprof-ui/sysprof-environ-editor.c:72 +msgid "New environment variable…" +msgstr "Ny miljövariabel…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:27 msgid "Ouch, that hurt!" msgstr "Aj, det där gjorde ont!" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:40 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "Något gick oväntat fel då ditt system skulle profileras." #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Meddelande" @@ -421,7 +399,7 @@ msgstr "Loggar" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Tid" @@ -433,20 +411,20 @@ msgid "Domain" msgstr "Domän" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Tidsvärden" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Grupp" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Slut" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Inga tidsvärden tillgängliga" @@ -462,49 +440,66 @@ msgid "Memory" msgstr "Minne" -#: src/libsysprof-ui/sysprof-memprof-aid.c:193 -#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 -msgid "Memory Allocations" -msgstr "Minnesallokeringar" - #: src/libsysprof-ui/sysprof-memprof-aid.c:224 msgid "Track Allocations" msgstr "Spåra allokeringar" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:246 #, c-format msgid "> %s to %s" msgstr "> %s till %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 -msgid "Summary" -msgstr "Sammanfattning" +#: src/libsysprof-ui/sysprof-memprof-page.ui:16 +msgid "Number of Allocations" +msgstr "Antal allokeringar" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:17 +msgid "Total number of allocation and free records" +msgstr "Totala antalet allokeringar och frigöranden" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:30 +#: src/libsysprof-ui/sysprof-memprof-page.ui:318 +msgid "Leaked Allocations" +msgstr "Läckta allokeringar" #: src/libsysprof-ui/sysprof-memprof-page.ui:31 -msgid "All Allocations" -msgstr "Alla allokeringar" +msgid "Number of allocations without a free record" +msgstr "Antal allokeringar utan ett frigörande" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:44 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 msgid "Temporary Allocations" msgstr "Tillfälliga allokeringar" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -msgid "Leaked Allocations" -msgstr "Läckta allokeringar" +#: src/libsysprof-ui/sysprof-memprof-page.ui:45 +msgid "Number of allocations freed from similar stack trace" +msgstr "Antal allokeringar frigjorda från liknande stackspår" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:59 +msgid "Allocations by Size" +msgstr "Allokeringar efter storlek" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:247 msgid "Size" msgstr "Storlek" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:264 msgid "Analyzing Memory Allocations" msgstr "Analyserar minnesallokeringar" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:265 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof är upptaget med att analysera minnesallokeringar." +#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +msgid "Summary" +msgstr "Sammanfattning" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:304 +msgid "All Allocations" +msgstr "Alla allokeringar" + #: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 msgid "Memory Used" msgstr "Minne använt" @@ -515,65 +510,53 @@ msgstr "Nätverk" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 -msgid "Profilers" -msgstr "Profilerare" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:69 +msgid "Profiling Target" +msgstr "Profileringsmål" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 -msgid "" -"Track application memory allocations (Sysprof must launch target application)" -msgstr "" -"Spåra minnesallokeringar för program (Sysprof måste starta målprogrammet)" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 -msgid "Track slow operations on your applications main loop" -msgstr "Spåra långsamma operationer på ditt programs huvudslinga" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:72 +msgid "Profile Entire System" +msgstr "Profilera hela systemet" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 -msgid "All Processes" -msgstr "Alla processer" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:73 msgid "" -"Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system configurations." +"Sysprof can generate callgraphs for one or more processes on your system." msgstr "" -"Inkludera alla program och operativsystemets kärna i anropsgraf. Detta är " -"kanske inte möjligt för vissa systeminställningar." +"Sysprof kan skapa anropsgrafer för en eller flera processer på ditt system." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 -msgid "Search Processes…" -msgstr "Sök processer…" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:84 +msgid "Search Processes" +msgstr "Sök processer" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:99 msgid "Loading Processes…" msgstr "Läser in processer…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:114 msgid "Launch Application" msgstr "Starta program" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 -msgid "Enable to launch a program of your choosing before profiling." -msgstr "Aktivera körning av ett valfritt program innan profilering." +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:115 +msgid "" +"Sysprof can launch an application to be profiled. The profiler will " +"automatically stop when it exits." +msgstr "" +"Sysprof kan starta ett program som ska profileras. Profileraren kommer " +"automatiskt stoppas när det avslutas." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:126 msgid "Command Line" msgstr "Kommandorad" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 -msgid "Environment" -msgstr "Miljö" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:413 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:135 msgid "Inherit Environment" msgstr "Ärv miljö" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:437 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:136 msgid "" "Enable to ensure your application shares the display, message-bus, and other " "desktop environment settings." @@ -581,19 +564,35 @@ "Aktivera för att säkerställa att ditt program delar display, meddelandebuss " "och andra skrivbordsmiljöinställningar." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:463 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:153 +msgid "Performance" +msgstr "Prestanda" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:156 msgid "Allow CPU Throttling" msgstr "Tillåt processorstrypning" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:491 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:157 +msgid "" +"When enabled, your system is allowed to scale CPU frequency as necessary." +msgstr "När aktiverat får ditt system skala processorfrekvens efter behov." + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:172 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 +msgid "Instruments" +msgstr "Instrument" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:245 msgid "" -"If disabled, your CPU will be placed in performance mode. It will be " -"restored after profiling." +"Track application memory allocations (Sysprof must launch target application)" msgstr "" -"Om inaktiverad kommer din processor att placeras i prestandaläge. Den kommer " -"att återställas efter profilering." +"Spåra minnesallokeringar för program (Sysprof måste starta målprogrammet)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:252 +msgid "Track slow operations on your applications main loop" +msgstr "Spåra långsamma operationer på ditt programs huvudslinga" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:265 msgid "_Record" msgstr "_Spela in" @@ -606,34 +605,30 @@ msgid "Energy Usage (All)" msgstr "Energianvändning (Alla)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "Visste du att du kan använda <a href=\"help:sysprof\">sysprof-cli</a> för " "att spela in?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Händelser" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "_Sluta spela in" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Välj för mer detaljer" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Visa stöddiagram" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 -msgid "Instruments" -msgstr "Instrument" - #: src/sysprofd/org.gnome.sysprof3.policy.in:13 msgid "Profile the system" msgstr "Profilera systemet" @@ -799,11 +794,11 @@ msgid "About Sysprof" msgstr "Om Sysprof" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:205 msgid "A system profiler" msgstr "En systemprofilerare" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:206 msgid "translator-credits" msgstr "" "Anders Jonsson <anders.jonsson@norsjovallen.se>\n" @@ -811,33 +806,29 @@ "Skicka synpunkter på översättningen till\n" "<tp-sv@listor.tp-sv.se>." -#: src/sysprof/sysprof-application.c:205 -msgid "Learn more about Sysprof" -msgstr "Lär dig mer om Sysprof" - #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:279 msgid "Open Capture…" msgstr "Öppna fångst…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:283 msgid "Open" msgstr "Öppna" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:288 msgid "Sysprof Captures" msgstr "Sysprof-fångster" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:293 msgid "All Files" msgstr "Alla filer" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:34 msgid "_Open" msgstr "Ö_ppna" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:37 msgid "Open Recording… (Ctrl+O)" msgstr "Öppna inspelning… (Ctrl+O)" @@ -982,7 +973,7 @@ msgstr "För många argument skickades till sysprof-cli:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s existerar. Använd --force för att skriva över\n" @@ -1024,6 +1015,100 @@ msgstr "" "--dest=BUSSNAMN FILNAMN - anslut till en inbäddad sysprof-profilerare" +#~ msgid "Last Spawn Program" +#~ msgstr "Senast startade program" + +#~ msgid "" +#~ "The last spawned program, which will be set in the UI upon restart of the " +#~ "application." +#~ msgstr "" +#~ "Det senast startade programmet, vilket kommer ställas in i " +#~ "användargränssnittet då programmet startas om." + +#~ msgid "Last Spawn Inherit Environment" +#~ msgstr "Senast startad ärver miljö" + +#~ msgid "If the last spawned environment inherits the parent environment." +#~ msgstr "Om den senast startade miljön ärver den överordnade miljön." + +#~ msgid "Last Spawn Environment" +#~ msgstr "Senast startade miljö" + +#~ msgid "" +#~ "The last spawned environment, which will be set in the UI upon restart of " +#~ "the application." +#~ msgstr "" +#~ "Den senast startade miljön, vilken kommer ställas in i " +#~ "användargränssnittet då programmet startas om." + +#~ msgid "Filename" +#~ msgstr "Filnamn" + +#~ msgid "Samples Captured" +#~ msgstr "Samplingar fångade" + +#~ msgid "Marks Captured" +#~ msgstr "Märken fångade" + +#~ msgid "Processes Captured" +#~ msgstr "Processer fångade" + +#~ msgid "Forks Captured" +#~ msgstr "Fork-anrop fångade" + +#~ msgid "Counters Captured" +#~ msgstr "Räknare fångade" + +#~ msgid "Learn more about Sysprof" +#~ msgstr "Lär dig mer om Sysprof" + +#~ msgid "New variable…" +#~ msgstr "Ny variabel…" + +#~ msgid "Profilers" +#~ msgstr "Profilerare" + +#~ msgid "All Processes" +#~ msgstr "Alla processer" + +#~ msgid "" +#~ "Include all applications and operating system kernel in callgraph. This " +#~ "may not be possible on some system configurations." +#~ msgstr "" +#~ "Inkludera alla program och operativsystemets kärna i anropsgraf. Detta är " +#~ "kanske inte möjligt för vissa systeminställningar." + +#~ msgid "Enable to launch a program of your choosing before profiling." +#~ msgstr "Aktivera körning av ett valfritt program innan profilering." + +#~ msgid "Environment" +#~ msgstr "Miljö" + +#~ msgid "" +#~ "If disabled, your CPU will be placed in performance mode. It will be " +#~ "restored after profiling." +#~ msgstr "" +#~ "Om inaktiverad kommer din processor att placeras i prestandaläge. Den " +#~ "kommer att återställas efter profilering." + +#~ msgid "Window size" +#~ msgstr "Fönsterstorlek" + +#~ msgid "Window size (width and height)." +#~ msgstr "Fönsterstorlek (bredd och höjd)." + +#~ msgid "Window position" +#~ msgstr "Fönsterposition" + +#~ msgid "Window position (x and y)." +#~ msgstr "Fönsterposition (x och y)." + +#~ msgid "Window maximized" +#~ msgstr "Fönster maximerat" + +#~ msgid "Window maximized state" +#~ msgstr "Maximerat tillstånd för fönster" + #~ msgid "Cumulative" #~ msgstr "Kumulativt" @@ -1099,9 +1184,6 @@ #~ msgid "%s — %s" #~ msgstr "%s — %s" -#~ msgid "Record" -#~ msgstr "Spela in" - #~ msgid "Stop" #~ msgstr "Stoppa"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/uk.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/uk.po
Changed
@@ -2,37 +2,38 @@ # Copyright (C) 2020 sysprof's COPYRIGHT HOLDER # This file is distributed under the same license as the sysprof package. # -# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2021. +# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2021, 2022. msgid "" msgstr "" "Project-Id-Version: sysprof sysprof-3-36\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-11-05 04:10+0000\n" -"PO-Revision-Date: 2021-11-05 08:57+0200\n" +"POT-Creation-Date: 2022-07-23 11:09+0000\n" +"PO-Revision-Date: 2022-07-24 09:21+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 20.12.0\n" -#: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof.appdata.xml.in.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:4 src/sysprof/sysprof-application.c:196 +#: src/sysprof/sysprof-application.c:321 src/sysprof/sysprof-window.ui:10 msgid "Sysprof" msgstr "Sysprof" -#: data/org.gnome.Sysprof3.appdata.xml.in:6 +#: data/org.gnome.Sysprof.appdata.xml.in.in:6 msgid "Profile an application or entire system" msgstr "Профілювання програми або усієї системи" -#: data/org.gnome.Sysprof3.appdata.xml.in:9 +#: data/org.gnome.Sysprof.appdata.xml.in.in:9 msgid "The GNOME Foundation" msgstr "Фундація GNOME" -#: data/org.gnome.Sysprof3.appdata.xml.in:12 +#: data/org.gnome.Sysprof.appdata.xml.in.in:12 msgid "" "Sysprof allows you to profile applications to aid in debugging and " "optimization." @@ -40,70 +41,14 @@ "За допомогою Sysprof ви зможете профілювати програми з метою діагностики та " "оптимізації." -#: data/org.gnome.Sysprof3.desktop.in:5 +#: data/org.gnome.Sysprof.desktop.in.in:5 msgid "Profiler" msgstr "Profiler" -#: data/org.gnome.Sysprof3.desktop.in:6 +#: data/org.gnome.Sysprof.desktop.in.in:6 msgid "Profile an application or entire system." msgstr "Профілювання програми або усієї системи." -#: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "Розмір вікна" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "Розмір вікна (ширина і висота)." - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "Розташування вікна" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "Розташування вікна (x та y)." - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "Вікно розгорнуто" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "Стан розгорнутого вікна" - -#: data/org.gnome.sysprof3.gschema.xml:20 -msgid "Last Spawn Program" -msgstr "Остання запущена програма" - -#: data/org.gnome.sysprof3.gschema.xml:21 -msgid "" -"The last spawned program, which will be set in the UI upon restart of the " -"application." -msgstr "" -"Остання запущена програма, яку буде встановлено у інтерфейсі користувача " -"після перезапуску програми." - -#: data/org.gnome.sysprof3.gschema.xml:25 -msgid "Last Spawn Inherit Environment" -msgstr "Остання запущена успадковує середовище" - -#: data/org.gnome.sysprof3.gschema.xml:26 -msgid "If the last spawned environment inherits the parent environment." -msgstr "Чи успадковує остання запущена програма батьківське середовище." - -#: data/org.gnome.sysprof3.gschema.xml:30 -msgid "Last Spawn Environment" -msgstr "Середовище останньої запущеної" - -#: data/org.gnome.sysprof3.gschema.xml:31 -msgid "" -"The last spawned environment, which will be set in the UI upon restart of " -"the application." -msgstr "" -"Середовище останньої запущеної програми, яке буде встановлено у інтерфейсі " -"користувача після перезапуску програми." - #: src/libsysprof/sysprof-callgraph-profile.c:447 msgid "Sysprof was unable to generate a callgraph from the system capture." msgstr "Sysprof не вдалося створити граф викликів із записаних даних системи." @@ -138,12 +83,12 @@ msgstr "Заряд акумулятора (усе)" #: src/libsysprof-ui/sysprof-battery-aid.c:240 -#: src/libsysprof-ui/sysprof-counters-aid.c:282 msgid "Battery" msgstr "Акумулятор" #: src/libsysprof-ui/sysprof-callgraph-aid.c:212 #: src/libsysprof-ui/sysprof-callgraph-aid.c:218 +#: src/libsysprof-ui/sysprof-details-page.ui:73 msgid "Stack Traces" msgstr "Трасування стека" @@ -160,64 +105,74 @@ msgid "Callgraph" msgstr "Граф викликів" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:90 msgid "Functions" msgstr "Функції" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:107 +#: src/libsysprof-ui/sysprof-memprof-page.ui:165 +#: src/libsysprof-ui/sysprof-memprof-page.ui:216 msgid "Self" msgstr "Набутий" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:123 +#: src/libsysprof-ui/sysprof-memprof-page.ui:181 +#: src/libsysprof-ui/sysprof-memprof-page.ui:232 msgid "Total" msgstr "Разом" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:148 msgid "Callers" msgstr "Зовнішні виклики" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:207 msgid "Descendants" msgstr "Похідні" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:189 msgid "Hits" msgstr "Вдалі спроби" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "Створюємо граф викликів" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Sysprof зайнято створенням вибраного графу викликів." -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:271 msgid "Not Enough Samples" msgstr "Недостатньо зразків" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:272 msgid "More samples are necessary to display a callgraph." msgstr "Для показу графу викликів потрібно більше зразків." +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 +#: src/libsysprof-ui/sysprof-counters-aid.c:282 +#: src/libsysprof-ui/sysprof-details-page.ui:148 msgid "Counters" msgstr "Лічильники" @@ -241,74 +196,103 @@ msgstr "Вжиток процесора (усе)" #: src/libsysprof-ui/sysprof-cpu-aid.c:316 +#: src/libsysprof-ui/sysprof-details-page.ui:103 msgid "Processes" msgstr "Процеси" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:231 msgid "Memory Capture" msgstr "Захоплення даних пам'яті" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:245 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf секунд" -#: src/libsysprof-ui/sysprof-details-page.ui:21 -msgid "Filename" -msgstr "Назва файла" +#: src/libsysprof-ui/sysprof-details-page.ui:8 +#| msgid "Captured at" +msgid "Capture" +msgstr "Захоплення" + +#: src/libsysprof-ui/sysprof-details-page.ui:12 +#| msgid "Duration" +msgid "Location" +msgstr "Місце" -#: src/libsysprof-ui/sysprof-details-page.ui:35 -msgid "Captured at" -msgstr "Захоплено о" +#: src/libsysprof-ui/sysprof-details-page.ui:26 +#| msgid "Record Again" +msgid "Recorded At" +msgstr "Час запису" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:40 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "Тривалість" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:54 msgid "CPU Model" msgstr "Модель процесора" -#: src/libsysprof-ui/sysprof-details-page.ui:80 -msgid "Samples Captured" -msgstr "Захоплено зразків" +#: src/libsysprof-ui/sysprof-details-page.ui:69 +#: src/libsysprof-ui/sysprof-details-page.ui:164 +msgid "Statistics" +msgstr "Статистика" + +#: src/libsysprof-ui/sysprof-details-page.ui:74 +msgid "Number of stack traces sampled for performance callgraphs" +msgstr "Кількість вибірок трасування стека для графів викликів швидкодії" + +#: src/libsysprof-ui/sysprof-details-page.ui:88 +#| msgid "Mark" +msgid "Marks" +msgstr "Позначки" -#: src/libsysprof-ui/sysprof-details-page.ui:94 -msgid "Marks Captured" -msgstr "Захоплено позначок" +#: src/libsysprof-ui/sysprof-details-page.ui:89 +msgid "Number of marks seen" +msgstr "Кількість видимих позначок" -#: src/libsysprof-ui/sysprof-details-page.ui:108 -msgid "Processes Captured" -msgstr "Захоплено процесів" +#: src/libsysprof-ui/sysprof-details-page.ui:104 +msgid "Number of processes seen" +msgstr "Кількість видимих процесів" -#: src/libsysprof-ui/sysprof-details-page.ui:122 -msgid "Forks Captured" -msgstr "Захоплено відгалужень" +#: src/libsysprof-ui/sysprof-details-page.ui:118 +msgid "Forks" +msgstr "Відгалуження" -#: src/libsysprof-ui/sysprof-details-page.ui:136 -msgid "Counters Captured" -msgstr "Захоплено лічильників" +#: src/libsysprof-ui/sysprof-details-page.ui:119 +msgid "Number of times a process forked" +msgstr "Кількість відгалужень процесу" + +#: src/libsysprof-ui/sysprof-details-page.ui:133 +#: src/libsysprof-ui/sysprof-memprof-aid.c:193 +#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 +msgid "Memory Allocations" +msgstr "Розміщення у пам'яті" + +#: src/libsysprof-ui/sysprof-details-page.ui:134 +msgid "Number of stack traces recorded for tracing memory allocations" +msgstr "" +"Кількість трасувань стека, які записано для трасування розміщення у пам'яті" -#: src/libsysprof-ui/sysprof-details-page.ui:151 -msgid "Allocations Captured" -msgstr "Захоплено розміщень" +#: src/libsysprof-ui/sysprof-details-page.ui:149 +msgid "Number of recorded counter values" +msgstr "Кількість записаних значень лічильника" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:176 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "Позначка" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:202 msgid "Min" msgstr "Мін." -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:215 msgid "Max" msgstr "Макс." -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:228 msgid "Avg" msgstr "Сер." @@ -325,71 +309,71 @@ msgid "Writes" msgstr "Записи" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:228 msgid "Recording Failed" msgstr "Не вдалося записати" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:233 msgid "Recording…" msgstr "Записування…" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:264 #, c-format msgid "Recording at %s" msgstr "Записано о %s" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:268 msgid "New Recording" msgstr "Новий запис" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1096 msgid "The recording could not be opened" msgstr "Не вдалося відкрити запис" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1243 +#, c-format +msgid "Failed to save recording: %s" +msgstr "Не вдалося зберегти запис: %s" + +#: src/libsysprof-ui/sysprof-display.c:1276 msgid "Save Recording" msgstr "Зберегти запис" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1279 msgid "Save" msgstr "Зберегти" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1280 src/sysprof/sysprof-window.c:285 msgid "Cancel" msgstr "Скасувати" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "Не вдалося зберегти запис: %s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "Подробиці" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "Вилучити змінну середовища" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 -msgid "New variable…" -msgstr "Створити змінну…" +#: src/libsysprof-ui/sysprof-environ-editor.c:72 +msgid "New environment variable…" +msgstr "Створити змінну середовища…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:27 msgid "Ouch, that hurt!" msgstr "Йой, боляче!" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:40 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "" "Під час спроби профілювання вашої системи сталося щось неочікувано погане." #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "Повідомлення" @@ -421,7 +405,7 @@ msgstr "Журнали" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "Час" @@ -433,20 +417,20 @@ msgid "Domain" msgstr "Домен" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "Хронометражі" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "Група" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "Кінець" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "Немає доступних хронометражів" @@ -462,50 +446,69 @@ msgid "Memory" msgstr "Пам'ять" -#: src/libsysprof-ui/sysprof-memprof-aid.c:193 -#: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 -msgid "Memory Allocations" -msgstr "Розміщення у пам'яті" - #: src/libsysprof-ui/sysprof-memprof-aid.c:224 msgid "Track Allocations" msgstr "Стежити за розміщеннями" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:246 #, c-format msgid "> %s to %s" msgstr "> від %s до %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 -msgid "Summary" -msgstr "Резюме" +#: src/libsysprof-ui/sysprof-memprof-page.ui:16 +#| msgid "Memory Allocations" +msgid "Number of Allocations" +msgstr "Кількість розміщень" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:17 +#| msgid "Profile memory allocations and frees" +msgid "Total number of allocation and free records" +msgstr "Загальна кількість записів розміщення і вивільнення" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:30 +#: src/libsysprof-ui/sysprof-memprof-page.ui:318 +msgid "Leaked Allocations" +msgstr "Розміщення з витоками" #: src/libsysprof-ui/sysprof-memprof-page.ui:31 -msgid "All Allocations" -msgstr "Усі розміщення" +msgid "Number of allocations without a free record" +msgstr "Кількість розміщень без запису звільнення" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:44 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 msgid "Temporary Allocations" msgstr "Тимчасові розміщення" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -#| msgid "Track Allocations" -msgid "Leaked Allocations" -msgstr "Розміщення з витоками" +#: src/libsysprof-ui/sysprof-memprof-page.ui:45 +msgid "Number of allocations freed from similar stack trace" +msgstr "Кількість вивільнених розміщень з подібного трасування стека" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:59 +#| msgid "Allocations Captured" +msgid "Allocations by Size" +msgstr "Розміщення за розміром" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:247 msgid "Size" msgstr "Розмір" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:264 msgid "Analyzing Memory Allocations" msgstr "Аналізуємо розміщення у пам'яті" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:265 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof зайнято аналізом розміщення даних у пам'яті." +#: src/libsysprof-ui/sysprof-memprof-page.ui:298 +msgid "Summary" +msgstr "Резюме" + +#: src/libsysprof-ui/sysprof-memprof-page.ui:304 +msgid "All Allocations" +msgstr "Усі розміщення" + #: src/libsysprof-ui/sysprof-memprof-visualizer.c:113 msgid "Memory Used" msgstr "Використано пам'яті" @@ -516,66 +519,54 @@ msgstr "Мережа" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 -msgid "Profilers" -msgstr "Засоби профілювання" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:69 +msgid "Profiling Target" +msgstr "Профілювання цілі" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 -msgid "" -"Track application memory allocations (Sysprof must launch target application)" -msgstr "" -"Стежити за розміщенням програмою даних у пам'яті (Sysprof має запустити " -"цільову програму)" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 -msgid "Track slow operations on your applications main loop" -msgstr "Стежити за повільними діями у основному циклі ваших програм" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:72 +msgid "Profile Entire System" +msgstr "Профілювання усієї системи" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 -msgid "All Processes" -msgstr "Усі процеси" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:73 msgid "" -"Include all applications and operating system kernel in callgraph. This may " -"not be possible on some system configurations." +"Sysprof can generate callgraphs for one or more processes on your system." msgstr "" -"Включити до графу викликів усі програми і ядро операційної системи. Це може " -"бути неможливим у деяких конфігураціях системи." +"Sysprof може створювати графи викликів для одного або декількох процесів у " +"вашій системі." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 -msgid "Search Processes…" -msgstr "Пошук процесів…" +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:84 +msgid "Search Processes" +msgstr "Пошук процесів" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:99 msgid "Loading Processes…" msgstr "Завантажуємо процеси…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:114 msgid "Launch Application" msgstr "Запустити програму" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 -msgid "Enable to launch a program of your choosing before profiling." -msgstr "Увімкнути запуск вибраної вами програми до профілювання." +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:115 +msgid "" +"Sysprof can launch an application to be profiled. The profiler will " +"automatically stop when it exits." +msgstr "" +"Sysprof може запускати програми для профілювання. Засіб профілювання " +"автоматично припинить роботу, якщо він працює." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:126 msgid "Command Line" msgstr "Командний рядок" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 -msgid "Environment" -msgstr "Середовище" - -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:413 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:135 msgid "Inherit Environment" msgstr "Успадкувати середовище" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:437 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:136 msgid "" "Enable to ensure your application shares the display, message-bus, and other " "desktop environment settings." @@ -583,19 +574,38 @@ "Увімкніть, щоб забезпечити успадкування вашою програмою дисплея, шини " "повідомлень та інших параметрів стільничного середовища." -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:463 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:153 +msgid "Performance" +msgstr "Швидкодія" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:156 msgid "Allow CPU Throttling" msgstr "Дозволити дроселювання процесора" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:491 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:157 +msgid "" +"When enabled, your system is allowed to scale CPU frequency as necessary." +msgstr "" +"Якщо позначено, вашій системі буде дозволено масштабувати частоту процесора, " +"якщо це буде потрібно." + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:172 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 +msgid "Instruments" +msgstr "Інструменти" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:245 msgid "" -"If disabled, your CPU will be placed in performance mode. It will be " -"restored after profiling." +"Track application memory allocations (Sysprof must launch target application)" msgstr "" -"Якщо вимкнено, ваш процесор буде переведено у режим максимальної швидкодії. " -"Стан процесора буде відновлено після профілювання." +"Стежити за розміщенням програмою даних у пам'яті (Sysprof має запустити " +"цільову програму)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:512 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:252 +msgid "Track slow operations on your applications main loop" +msgstr "Стежити за повільними діями у основному циклі ваших програм" + +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:265 msgid "_Record" msgstr "_Записати" @@ -608,34 +618,30 @@ msgid "Energy Usage (All)" msgstr "Споживання енергії (усе)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "Чи знали ви, що ви можете скористатися <a href=\"help:sysprof\">sysprof-cli</" "a> для записування?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "Події" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "З_упинити запис" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "Виберіть, щоб переглянути подробиці" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "Показати допоміжні графи" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 -msgid "Instruments" -msgstr "Інструменти" - #: src/sysprofd/org.gnome.sysprof3.policy.in:13 msgid "Profile the system" msgstr "Профілювання системи" @@ -803,41 +809,37 @@ msgid "About Sysprof" msgstr "Про Sysprof" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:205 msgid "A system profiler" msgstr "Засіб профілювання системи" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:206 msgid "translator-credits" msgstr "Юрій Чорноіван <yurchor@ukr.net>" -#: src/sysprof/sysprof-application.c:205 -msgid "Learn more about Sysprof" -msgstr "Дізнатися більше про Sysprof" - #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:279 msgid "Open Capture…" msgstr "Відкриття захоплення…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:283 msgid "Open" msgstr "Відкрити" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:288 msgid "Sysprof Captures" msgstr "захоплення Sysprof" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:293 msgid "All Files" msgstr "усі файли" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:34 msgid "_Open" msgstr "Від_крити" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:37 msgid "Open Recording… (Ctrl+O)" msgstr "Відкрити записане… (Ctrl+O)" @@ -988,7 +990,7 @@ msgstr "sysprof-cli передано забагато аргументів:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s вже існує. Скорисайтеся --force, щоб його перезаписати.\n" @@ -1030,3 +1032,97 @@ msgstr "" "--dest=НАЗВА_ШИНИ НАЗВА_ФАЙЛА - з'єднатися із вбудованим засобом " "профілювання sysprof" + +#~ msgid "Last Spawn Program" +#~ msgstr "Остання запущена програма" + +#~ msgid "" +#~ "The last spawned program, which will be set in the UI upon restart of the " +#~ "application." +#~ msgstr "" +#~ "Остання запущена програма, яку буде встановлено у інтерфейсі користувача " +#~ "після перезапуску програми." + +#~ msgid "Last Spawn Inherit Environment" +#~ msgstr "Остання запущена успадковує середовище" + +#~ msgid "If the last spawned environment inherits the parent environment." +#~ msgstr "Чи успадковує остання запущена програма батьківське середовище." + +#~ msgid "Last Spawn Environment" +#~ msgstr "Середовище останньої запущеної" + +#~ msgid "" +#~ "The last spawned environment, which will be set in the UI upon restart of " +#~ "the application." +#~ msgstr "" +#~ "Середовище останньої запущеної програми, яке буде встановлено у " +#~ "інтерфейсі користувача після перезапуску програми." + +#~ msgid "Filename" +#~ msgstr "Назва файла" + +#~ msgid "Samples Captured" +#~ msgstr "Захоплено зразків" + +#~ msgid "Marks Captured" +#~ msgstr "Захоплено позначок" + +#~ msgid "Processes Captured" +#~ msgstr "Захоплено процесів" + +#~ msgid "Forks Captured" +#~ msgstr "Захоплено відгалужень" + +#~ msgid "Counters Captured" +#~ msgstr "Захоплено лічильників" + +#~ msgid "Learn more about Sysprof" +#~ msgstr "Дізнатися більше про Sysprof" + +#~ msgid "New variable…" +#~ msgstr "Створити змінну…" + +#~ msgid "Profilers" +#~ msgstr "Засоби профілювання" + +#~ msgid "All Processes" +#~ msgstr "Усі процеси" + +#~ msgid "" +#~ "Include all applications and operating system kernel in callgraph. This " +#~ "may not be possible on some system configurations." +#~ msgstr "" +#~ "Включити до графу викликів усі програми і ядро операційної системи. Це " +#~ "може бути неможливим у деяких конфігураціях системи." + +#~ msgid "Enable to launch a program of your choosing before profiling." +#~ msgstr "Увімкнути запуск вибраної вами програми до профілювання." + +#~ msgid "Environment" +#~ msgstr "Середовище" + +#~ msgid "" +#~ "If disabled, your CPU will be placed in performance mode. It will be " +#~ "restored after profiling." +#~ msgstr "" +#~ "Якщо вимкнено, ваш процесор буде переведено у режим максимальної " +#~ "швидкодії. Стан процесора буде відновлено після профілювання." + +#~ msgid "Window size" +#~ msgstr "Розмір вікна" + +#~ msgid "Window size (width and height)." +#~ msgstr "Розмір вікна (ширина і висота)." + +#~ msgid "Window position" +#~ msgstr "Розташування вікна" + +#~ msgid "Window position (x and y)." +#~ msgstr "Розташування вікна (x та y)." + +#~ msgid "Window maximized" +#~ msgstr "Вікно розгорнуто" + +#~ msgid "Window maximized state" +#~ msgstr "Стан розгорнутого вікна"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/po/zh_CN.po -> _service:tar_scm:sysprof-3.46.0.tar.xz/po/zh_CN.po
Changed
@@ -9,20 +9,20 @@ msgstr "" "Project-Id-Version: sysprof master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/sysprof/issues\n" -"POT-Creation-Date: 2021-11-05 04:10+0000\n" -"PO-Revision-Date: 2022-02-03 10:56+0800\n" +"POT-Creation-Date: 2022-04-03 12:00+0000\n" +"PO-Revision-Date: 2022-04-13 20:54+0800\n" "Last-Translator: lumingzh <lumingzh@qq.com>\n" "Language-Team: Chinese - China <i18n-zh@googlegroups.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 41.0\n" +"X-Generator: Gtranslator 42.0\n" "Plural-Forms: nplurals=1; plural=0\n" #: data/org.gnome.Sysprof3.appdata.xml.in:5 -#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:202 -#: src/sysprof/sysprof-application.c:329 src/sysprof/ui/sysprof-window.ui:11 +#: data/org.gnome.Sysprof3.desktop.in:4 src/sysprof/sysprof-application.c:208 +#: src/sysprof/sysprof-application.c:332 src/sysprof/sysprof-window.ui:9 msgid "Sysprof" msgstr "Sysprof" @@ -49,52 +49,28 @@ msgstr "对应用程序或整个系统进行性能分析。" #: data/org.gnome.sysprof3.gschema.xml:5 -msgid "Window size" -msgstr "窗口大小" - -#: data/org.gnome.sysprof3.gschema.xml:6 -msgid "Window size (width and height)." -msgstr "窗口大小(宽度和高度)。" - -#: data/org.gnome.sysprof3.gschema.xml:10 -msgid "Window position" -msgstr "窗口位置" - -#: data/org.gnome.sysprof3.gschema.xml:11 -msgid "Window position (x and y)." -msgstr "窗口位置(x 和 y)。" - -#: data/org.gnome.sysprof3.gschema.xml:15 -msgid "Window maximized" -msgstr "窗口最大化" - -#: data/org.gnome.sysprof3.gschema.xml:16 -msgid "Window maximized state" -msgstr "窗口最大化状态" - -#: data/org.gnome.sysprof3.gschema.xml:20 msgid "Last Spawn Program" msgstr "上一次生成的程序" -#: data/org.gnome.sysprof3.gschema.xml:21 +#: data/org.gnome.sysprof3.gschema.xml:6 msgid "" "The last spawned program, which will be set in the UI upon restart of the " "application." msgstr "上一次生成的程序,会被设置于重新启动应用程序后的用户界面中。" -#: data/org.gnome.sysprof3.gschema.xml:25 +#: data/org.gnome.sysprof3.gschema.xml:10 msgid "Last Spawn Inherit Environment" msgstr "上一次生成继承环境" -#: data/org.gnome.sysprof3.gschema.xml:26 +#: data/org.gnome.sysprof3.gschema.xml:11 msgid "If the last spawned environment inherits the parent environment." msgstr "上一次生成的环境是否继承上层环境。" -#: data/org.gnome.sysprof3.gschema.xml:30 +#: data/org.gnome.sysprof3.gschema.xml:15 msgid "Last Spawn Environment" msgstr "上一次生成的环境" -#: data/org.gnome.sysprof3.gschema.xml:31 +#: data/org.gnome.sysprof3.gschema.xml:16 msgid "" "The last spawned environment, which will be set in the UI upon restart of " "the application." @@ -155,62 +131,70 @@ msgid "Callgraph" msgstr "调用图" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:27 -#: src/libsysprof-ui/sysprof-memprof-page.ui:245 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:220 msgid "Functions" msgstr "函数" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:43 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:104 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:159 -#: src/libsysprof-ui/sysprof-memprof-page.ui:262 -#: src/libsysprof-ui/sysprof-memprof-page.ui:324 -#: src/libsysprof-ui/sysprof-memprof-page.ui:380 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:39 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:96 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:147 +#: src/libsysprof-ui/sysprof-memprof-page.ui:237 +#: src/libsysprof-ui/sysprof-memprof-page.ui:295 +#: src/libsysprof-ui/sysprof-memprof-page.ui:346 msgid "Self" msgstr "自身" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:59 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:120 -#: src/libsysprof-ui/sysprof-callgraph-page.ui:175 -#: src/libsysprof-ui/sysprof-memprof-page.ui:278 -#: src/libsysprof-ui/sysprof-memprof-page.ui:340 -#: src/libsysprof-ui/sysprof-memprof-page.ui:396 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:55 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:112 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:163 +#: src/libsysprof-ui/sysprof-memprof-page.ui:253 +#: src/libsysprof-ui/sysprof-memprof-page.ui:311 +#: src/libsysprof-ui/sysprof-memprof-page.ui:362 msgid "Total" msgstr "总计" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:88 -#: src/libsysprof-ui/sysprof-memprof-page.ui:307 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:80 +#: src/libsysprof-ui/sysprof-memprof-page.ui:278 msgid "Callers" msgstr "调用者" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:151 -#: src/libsysprof-ui/sysprof-memprof-page.ui:371 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:139 +#: src/libsysprof-ui/sysprof-memprof-page.ui:337 msgid "Descendants" msgstr "后代" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:190 -#: src/libsysprof-ui/sysprof-details-page.ui:322 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:178 +#: src/libsysprof-ui/sysprof-details-page.ui:309 msgid "Hits" msgstr "采样数" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:213 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:198 msgid "Generating Callgraph" msgstr "生成调用图" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:214 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:199 msgid "Sysprof is busy creating the selected callgraph." msgstr "Sysprof 正在创建选定的调用图。" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:224 -#: src/libsysprof-ui/sysprof-memprof-page.ui:442 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:205 +#: src/libsysprof-ui/sysprof-memprof-page.ui:401 msgid "Not Enough Samples" msgstr "样本不足" -#: src/libsysprof-ui/sysprof-callgraph-page.ui:225 -#: src/libsysprof-ui/sysprof-memprof-page.ui:443 +#: src/libsysprof-ui/sysprof-callgraph-page.ui:206 +#: src/libsysprof-ui/sysprof-memprof-page.ui:402 msgid "More samples are necessary to display a callgraph." msgstr "需要更多样本才能显示调用图。" +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:102 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:292 +#: src/libsysprof-ui/sysprof-cell-renderer-progress.c:322 +#, c-format +msgctxt "progress bar label" +msgid "%d %%" +msgstr "%d %%" + #: src/libsysprof-ui/sysprof-counters-aid.c:221 #: src/libsysprof-ui/sysprof-counters-aid.c:226 msgid "Counters" @@ -239,11 +223,11 @@ msgid "Processes" msgstr "进程" -#: src/libsysprof-ui/sysprof-details-page.c:220 +#: src/libsysprof-ui/sysprof-details-page.c:237 msgid "Memory Capture" msgstr "内存采集" -#: src/libsysprof-ui/sysprof-details-page.c:234 +#: src/libsysprof-ui/sysprof-details-page.c:251 #, c-format msgid "%0.4lf seconds" msgstr "%0.4lf 秒" @@ -256,54 +240,54 @@ msgid "Captured at" msgstr "采集于" -#: src/libsysprof-ui/sysprof-details-page.ui:50 -#: src/libsysprof-ui/sysprof-marks-page.ui:95 -#: src/libsysprof-ui/sysprof-marks-page.ui:215 +#: src/libsysprof-ui/sysprof-details-page.ui:49 +#: src/libsysprof-ui/sysprof-marks-page.ui:90 +#: src/libsysprof-ui/sysprof-marks-page.ui:196 msgid "Duration" msgstr "持续时间" -#: src/libsysprof-ui/sysprof-details-page.ui:65 +#: src/libsysprof-ui/sysprof-details-page.ui:63 msgid "CPU Model" msgstr "CPU 型号" -#: src/libsysprof-ui/sysprof-details-page.ui:80 +#: src/libsysprof-ui/sysprof-details-page.ui:78 msgid "Samples Captured" msgstr "已采集的样本" -#: src/libsysprof-ui/sysprof-details-page.ui:94 +#: src/libsysprof-ui/sysprof-details-page.ui:92 msgid "Marks Captured" msgstr "已采集的标记" -#: src/libsysprof-ui/sysprof-details-page.ui:108 +#: src/libsysprof-ui/sysprof-details-page.ui:106 msgid "Processes Captured" msgstr "已采集的进程" -#: src/libsysprof-ui/sysprof-details-page.ui:122 +#: src/libsysprof-ui/sysprof-details-page.ui:120 msgid "Forks Captured" msgstr "已采集的分支" -#: src/libsysprof-ui/sysprof-details-page.ui:136 +#: src/libsysprof-ui/sysprof-details-page.ui:134 msgid "Counters Captured" msgstr "已采集的计数器" -#: src/libsysprof-ui/sysprof-details-page.ui:151 +#: src/libsysprof-ui/sysprof-details-page.ui:149 msgid "Allocations Captured" msgstr "已采集的分配" -#: src/libsysprof-ui/sysprof-details-page.ui:309 -#: src/libsysprof-ui/sysprof-marks-page.ui:52 +#: src/libsysprof-ui/sysprof-details-page.ui:296 +#: src/libsysprof-ui/sysprof-marks-page.ui:50 msgid "Mark" msgstr "标记" -#: src/libsysprof-ui/sysprof-details-page.ui:335 +#: src/libsysprof-ui/sysprof-details-page.ui:322 msgid "Min" msgstr "最小" -#: src/libsysprof-ui/sysprof-details-page.ui:348 +#: src/libsysprof-ui/sysprof-details-page.ui:335 msgid "Max" msgstr "最大" -#: src/libsysprof-ui/sysprof-details-page.ui:361 +#: src/libsysprof-ui/sysprof-details-page.ui:348 msgid "Avg" msgstr "平均" @@ -320,70 +304,70 @@ msgid "Writes" msgstr "写入" -#: src/libsysprof-ui/sysprof-display.c:229 +#: src/libsysprof-ui/sysprof-display.c:227 msgid "Recording Failed" msgstr "记录失败" -#: src/libsysprof-ui/sysprof-display.c:234 +#: src/libsysprof-ui/sysprof-display.c:232 msgid "Recording…" msgstr "正在记录……" #. translators: %s is replaced with locale specific time of recording -#: src/libsysprof-ui/sysprof-display.c:265 +#: src/libsysprof-ui/sysprof-display.c:263 #, c-format msgid "Recording at %s" msgstr "%s 时的记录" -#: src/libsysprof-ui/sysprof-display.c:269 +#: src/libsysprof-ui/sysprof-display.c:267 msgid "New Recording" msgstr "新建记录" -#: src/libsysprof-ui/sysprof-display.c:1094 +#: src/libsysprof-ui/sysprof-display.c:1093 msgid "The recording could not be opened" msgstr "无法打开记录" -#: src/libsysprof-ui/sysprof-display.c:1217 +#: src/libsysprof-ui/sysprof-display.c:1234 +#, c-format +msgid "Failed to save recording: %s" +msgstr "无法保存记录:%s" + +#: src/libsysprof-ui/sysprof-display.c:1267 msgid "Save Recording" msgstr "保存记录" -#: src/libsysprof-ui/sysprof-display.c:1220 +#: src/libsysprof-ui/sysprof-display.c:1270 msgid "Save" msgstr "保存" #. Translators: This is a button. -#: src/libsysprof-ui/sysprof-display.c:1221 src/sysprof/sysprof-window.c:279 +#: src/libsysprof-ui/sysprof-display.c:1271 src/sysprof/sysprof-window.c:310 msgid "Cancel" msgstr "取消" -#: src/libsysprof-ui/sysprof-display.c:1247 -#, c-format -msgid "Failed to save recording: %s" -msgstr "无法保存记录:%s" - -#: src/libsysprof-ui/sysprof-display.ui:49 -#: src/libsysprof-ui/sysprof-marks-page.ui:19 +#: src/libsysprof-ui/sysprof-display.ui:36 +#: src/libsysprof-ui/sysprof-marks-page.ui:16 msgid "Details" msgstr "详细信息" -#: src/libsysprof-ui/sysprof-environ-editor-row.ui:58 +#: src/libsysprof-ui/sysprof-environ-editor-row.ui:29 msgid "Remove environment variable" msgstr "移除环境变量" -#: src/libsysprof-ui/sysprof-environ-editor.c:71 +#: src/libsysprof-ui/sysprof-environ-editor.c:72 msgid "New variable…" msgstr "新建变量…" -#: src/libsysprof-ui/sysprof-failed-state-view.ui:22 -msgid "Ouch, that hurt!" -msgstr "出错了!" - -#: src/libsysprof-ui/sysprof-failed-state-view.ui:39 +#: src/libsysprof-ui/sysprof-failed-state-view.ui:31 msgid "Something unexpectedly went wrong while trying to profile your system." msgstr "尝试对您的系统进行性能分析时发生了意外错误。" +#: src/libsysprof-ui/sysprof-failed-state-view.ui:41 +msgid "Ouch, that hurt!" +msgstr "出错了!" + #: src/libsysprof-ui/sysprof-log-model.c:210 #: src/libsysprof-ui/sysprof-logs-page.ui:58 -#: src/libsysprof-ui/sysprof-marks-page.ui:109 +#: src/libsysprof-ui/sysprof-marks-page.ui:103 msgid "Message" msgstr "消息" @@ -415,7 +399,7 @@ msgstr "日志" #: src/libsysprof-ui/sysprof-logs-page.ui:15 -#: src/libsysprof-ui/sysprof-marks-page.ui:67 +#: src/libsysprof-ui/sysprof-marks-page.ui:64 msgid "Time" msgstr "时间" @@ -427,20 +411,20 @@ msgid "Domain" msgstr "域" -#: src/libsysprof-ui/sysprof-marks-aid.c:237 -#: src/libsysprof-ui/sysprof-marks-aid.c:242 +#: src/libsysprof-ui/sysprof-marks-aid.c:408 +#: src/libsysprof-ui/sysprof-marks-aid.c:413 msgid "Timings" msgstr "定时" -#: src/libsysprof-ui/sysprof-marks-page.ui:38 +#: src/libsysprof-ui/sysprof-marks-page.ui:37 msgid "Group" msgstr "组" -#: src/libsysprof-ui/sysprof-marks-page.ui:81 +#: src/libsysprof-ui/sysprof-marks-page.ui:77 msgid "End" msgstr "结束" -#: src/libsysprof-ui/sysprof-marks-page.ui:245 +#: src/libsysprof-ui/sysprof-marks-page.ui:234 msgid "No Timings Available" msgstr "无可用定时" @@ -466,37 +450,36 @@ msgstr "跟踪分配" #. translators: %s is replaced with the the lower and upper bound memory sizes in bytes -#: src/libsysprof-ui/sysprof-memprof-page.c:235 +#: src/libsysprof-ui/sysprof-memprof-page.c:241 #, c-format msgid "> %s to %s" msgstr "> %s 到 %s" -#: src/libsysprof-ui/sysprof-memprof-page.ui:23 +#: src/libsysprof-ui/sysprof-memprof-page.ui:21 msgid "Summary" msgstr "概要" -#: src/libsysprof-ui/sysprof-memprof-page.ui:31 +#: src/libsysprof-ui/sysprof-memprof-page.ui:27 msgid "All Allocations" msgstr "全部分配" -#: src/libsysprof-ui/sysprof-memprof-page.ui:40 +#: src/libsysprof-ui/sysprof-memprof-page.ui:34 msgid "Temporary Allocations" msgstr "临时分配" -#: src/libsysprof-ui/sysprof-memprof-page.ui:49 -#| msgid "Track Allocations" +#: src/libsysprof-ui/sysprof-memprof-page.ui:41 msgid "Leaked Allocations" msgstr "泄漏分配" -#: src/libsysprof-ui/sysprof-memprof-page.ui:411 +#: src/libsysprof-ui/sysprof-memprof-page.ui:377 msgid "Size" msgstr "大小" -#: src/libsysprof-ui/sysprof-memprof-page.ui:431 +#: src/libsysprof-ui/sysprof-memprof-page.ui:394 msgid "Analyzing Memory Allocations" msgstr "分析内存分配" -#: src/libsysprof-ui/sysprof-memprof-page.ui:432 +#: src/libsysprof-ui/sysprof-memprof-page.ui:395 msgid "Sysprof is busy analyzing memory allocations." msgstr "Sysprof 正在分析内存分配。" @@ -510,58 +493,55 @@ msgstr "网络" #. translators: "Compositor" means desktop compositor, gnome-shell/mutter in particular -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:27 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:26 msgid "GNOME Shell" msgstr "GNOME Shell" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:90 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:92 msgid "Profilers" msgstr "性能分析器" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:186 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:188 msgid "" "Track application memory allocations (Sysprof must launch target application)" msgstr "跟踪应用程序的内存分配(Sysprof 必须启动目标应用程序)" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:194 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:196 msgid "Track slow operations on your applications main loop" msgstr "跟踪您的应用程序主循环上的慢速操作" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:210 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:212 msgid "All Processes" msgstr "全部进程" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:240 -#| msgid "" -#| "Include all applications and operating system kernel in callgraph. This " -#| "may not be possible on some system system configurations." +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:242 msgid "" "Include all applications and operating system kernel in callgraph. This may " "not be possible on some system configurations." msgstr "" "在调用图中包含全部应用程序和操作系统内核。这在某些系统配置上可能无法实现。" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:268 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:270 msgid "Search Processes…" msgstr "搜索进程…" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:287 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:288 msgid "Loading Processes…" msgstr "正在载入进程……" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:311 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:312 msgid "Launch Application" msgstr "启动应用程序" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:340 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:341 msgid "Enable to launch a program of your choosing before profiling." msgstr "启用此选项以便在性能分析前启动您选择的程序。" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:368 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:369 msgid "Command Line" msgstr "命令行" -#: src/libsysprof-ui/sysprof-profiler-assistant.ui:387 +#: src/libsysprof-ui/sysprof-profiler-assistant.ui:388 msgid "Environment" msgstr "环境" @@ -598,30 +578,30 @@ msgid "Energy Usage (All)" msgstr "电量用量(全部)" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:32 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:35 msgid "" "Did you know you can use <a href=\"help:sysprof\">sysprof-cli</a> to record?" msgstr "" "您知道您可以使用 <a href=\"help:sysprof\">sysprof-cli</a> 来进行记录吗?" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:47 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:50 msgid "Events" msgstr "事件" -#: src/libsysprof-ui/sysprof-recording-state-view.ui:73 +#: src/libsysprof-ui/sysprof-recording-state-view.ui:76 msgid "_Stop Recording" msgstr "停止记录 (_S)" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:119 -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:54 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:136 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 msgid "Select for more details" msgstr "选择更多详细信息" -#: src/libsysprof-ui/sysprof-visualizer-group-header.c:141 +#: src/libsysprof-ui/sysprof-visualizer-group-header.c:158 msgid "Display supplemental graphs" msgstr "显示补充图表" -#: src/libsysprof-ui/sysprof-visualizers-frame.ui:41 +#: src/libsysprof-ui/sysprof-visualizers-frame.ui:27 msgid "Instruments" msgstr "仪表" @@ -790,41 +770,41 @@ msgid "About Sysprof" msgstr "关于 Sysprof" -#: src/sysprof/sysprof-application.c:194 +#: src/sysprof/sysprof-application.c:200 msgid "A system profiler" msgstr "系统性能分析器" -#: src/sysprof/sysprof-application.c:199 +#: src/sysprof/sysprof-application.c:205 msgid "translator-credits" msgstr "Damned <damnedlies@163.com>, 2020." -#: src/sysprof/sysprof-application.c:205 +#: src/sysprof/sysprof-application.c:211 msgid "Learn more about Sysprof" msgstr "了解关于 Sysprof 的更多信息" #. Translators: This is a window title. -#: src/sysprof/sysprof-window.c:273 +#: src/sysprof/sysprof-window.c:304 msgid "Open Capture…" msgstr "打开采集文件…" #. Translators: This is a button. -#: src/sysprof/sysprof-window.c:277 +#: src/sysprof/sysprof-window.c:308 msgid "Open" msgstr "打开" -#: src/sysprof/sysprof-window.c:284 +#: src/sysprof/sysprof-window.c:313 msgid "Sysprof Captures" msgstr "Sysprof 采集文件" -#: src/sysprof/sysprof-window.c:289 +#: src/sysprof/sysprof-window.c:318 msgid "All Files" msgstr "全部文件" -#: src/sysprof/ui/sysprof-window.ui:28 +#: src/sysprof/sysprof-window.ui:33 msgid "_Open" msgstr "打开 (_O)" -#: src/sysprof/ui/sysprof-window.ui:31 +#: src/sysprof/sysprof-window.ui:36 msgid "Open Recording… (Ctrl+O)" msgstr "打开记录… (Ctrl+O)" @@ -968,7 +948,7 @@ msgstr "向 sysprof-cli 传递的参数过多:" #. Translators: %s is a file name. -#: src/tools/sysprof-cli.c:374 +#: src/tools/sysprof-cli.c:376 #, c-format msgid "%s exists. Use --force to overwrite\n" msgstr "%s 已存在。使用 --force 进行覆盖\n" @@ -1008,3 +988,21 @@ #: src/tools/sysprof-profiler-ctl.c:79 msgid "--dest=BUS_NAME FILENAME - connect to an embedded sysprof profiler" msgstr "--dest=总线名称 文件名 - 连接到嵌入的 sysprof 性能分析器" + +#~ msgid "Window size" +#~ msgstr "窗口大小" + +#~ msgid "Window size (width and height)." +#~ msgstr "窗口大小(宽度和高度)。" + +#~ msgid "Window position" +#~ msgstr "窗口位置" + +#~ msgid "Window position (x and y)." +#~ msgstr "窗口位置(x 和 y)。" + +#~ msgid "Window maximized" +#~ msgstr "窗口最大化" + +#~ msgid "Window maximized state" +#~ msgstr "窗口最大化状态"
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-capture/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-capture/meson.build
Changed
@@ -1,3 +1,5 @@ +install_static = not meson.is_subproject() and get_option('install-static') + libsysprof_capture_headers = files( 'sysprof-address.h', 'sysprof-clock.h', @@ -50,7 +52,7 @@ dependencies: libsysprof_capture_deps, c_args: '-DSYSPROF_CAPTURE_COMPILATION' , install_dir: get_option('libdir'), - install: not meson.is_subproject(), + install: install_static, gnu_symbol_visibility: 'hidden', pic: true, ) @@ -63,7 +65,7 @@ include_directories: libsysprof_capture_include_dirs, ) -if not meson.is_subproject() +if install_static pkgconfig.generate( libsysprof_capture, subdirs: sysprof_header_subdir ,
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-capture/sysprof-version-macros.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-capture/sysprof-version-macros.h
Changed
@@ -90,6 +90,7 @@ #define SYSPROF_VERSION_3_36 (SYSPROF_ENCODE_VERSION (3, 36, 0)) #define SYSPROF_VERSION_3_38 (SYSPROF_ENCODE_VERSION (3, 38, 0)) #define SYSPROF_VERSION_3_40 (SYSPROF_ENCODE_VERSION (3, 40, 0)) +#define SYSPROF_VERSION_3_46 (SYSPROF_ENCODE_VERSION (3, 46, 0)) #if (SYSPROF_MINOR_VERSION == 99) # define SYSPROF_VERSION_CUR_STABLE (SYSPROF_ENCODE_VERSION (SYSPROF_MAJOR_VERSION + 1, 0, 0)) @@ -217,3 +218,17 @@ #else # define SYSPROF_AVAILABLE_IN_3_40 _SYSPROF_EXTERN #endif + +#if SYSPROF_VERSION_MIN_REQUIRED >= SYSPROF_VERSION_3_46 +# define SYSPROF_DEPRECATED_IN_3_46 SYSPROF_DEPRECATED +# define SYSPROF_DEPRECATED_IN_3_46_FOR(f) SYSPROF_DEPRECATED_FOR(f) +#else +# define SYSPROF_DEPRECATED_IN_3_46 _SYSPROF_EXTERN +# define SYSPROF_DEPRECATED_IN_3_46_FOR(f) _SYSPROF_EXTERN +#endif + +#if SYSPROF_VERSION_MAX_ALLOWED < SYSPROF_VERSION_3_46 +# define SYSPROF_AVAILABLE_IN_3_46 SYSPROF_UNAVAILABLE(3, 46) +#else +# define SYSPROF_AVAILABLE_IN_3_46 _SYSPROF_EXTERN +#endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/css/SysprofDisplay-shared.css -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/css/SysprofDisplay-shared.css
Changed
@@ -1,7 +1,3 @@ -SysprofDisplay dzlmultipaned { - -DzlMultiPaned-handle-size: 0; - } - SysprofVisualizer { background: @content_view_bg; } @@ -34,11 +30,11 @@ background: transparent; } -SysprofVisualizersFrame scrollbar.horizontal contents trough { +SysprofVisualizersFrame scrollbar.horizontal range trough { background: transparent; } -SysprofVisualizersFrame scrollbar.horizontal contents trough slider { +SysprofVisualizersFrame scrollbar.horizontal range trough slider { margin-left: 1px; margin-right: 1px; padding: 6px; @@ -81,10 +77,6 @@ border-color: @borders; } -SysprofDisplay > dzlmultipaned > :nth-child(2) { - border-top: 1px solid @borders; - } - SysprofVisualizersFrame .selection { border-radius: 3px; background-color: alpha(@theme_selected_bg_color, 0.35);
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/css/SysprofProfilerAssistant-shared.css
Added
@@ -0,0 +1,7 @@ +sysprofaidicon image.right.top { + border-radius: 9999px; + background-color: @theme_selected_bg_color; + color: @theme_selected_fg_color; + padding: 2px; + margin: 0px; +}
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-handle-private.h
Added
@@ -0,0 +1,35 @@ +/* egg-handle.h + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#pragma once + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define EGG_TYPE_HANDLE (egg_handle_get_type()) + +G_DECLARE_FINAL_TYPE (EggHandle, egg_handle, EGG, HANDLE, GtkWidget) + +GtkWidget *egg_handle_new (GtkPositionType position); +void egg_handle_set_position (EggHandle *self, + GtkPositionType position); + +G_END_DECLS
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-handle.c
Added
@@ -0,0 +1,145 @@ +/* egg-handle.c + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#include "config.h" + +#include "egg-handle-private.h" + +#define EXTRA_SIZE 8 + +struct _EggHandle +{ + GtkWidget parent_instance; + GtkWidget *separator; + GtkPositionType position : 3; +}; + +G_DEFINE_TYPE (EggHandle, egg_handle, GTK_TYPE_WIDGET) + +static gboolean +egg_handle_contains (GtkWidget *widget, + double x, + double y) +{ + EggHandle *self = (EggHandle *)widget; + graphene_rect_t area; + + g_assert (EGG_IS_HANDLE (self)); + + if (!gtk_widget_compute_bounds (GTK_WIDGET (self->separator), + GTK_WIDGET (self), + &area)) + return FALSE; + + switch (self->position) + { + case GTK_POS_LEFT: + area.origin.x -= EXTRA_SIZE; + area.size.width = EXTRA_SIZE; + break; + + case GTK_POS_RIGHT: + area.size.width = EXTRA_SIZE; + break; + + case GTK_POS_TOP: + area.origin.y -= EXTRA_SIZE; + area.size.height = EXTRA_SIZE; + break; + + case GTK_POS_BOTTOM: + area.size.height = EXTRA_SIZE; + break; + + default: + g_assert_not_reached (); + break; + } + + return graphene_rect_contains_point (&area, &GRAPHENE_POINT_INIT (x, y)); +} + +static void +egg_handle_dispose (GObject *object) +{ + EggHandle *self = (EggHandle *)object; + + g_clear_pointer (&self->separator, gtk_widget_unparent); + + G_OBJECT_CLASS (egg_handle_parent_class)->dispose (object); +} + +static void +egg_handle_class_init (EggHandleClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = egg_handle_dispose; + + widget_class->contains = egg_handle_contains; + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); +} + +static void +egg_handle_init (EggHandle *self) +{ + self->separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_parent (GTK_WIDGET (self->separator), GTK_WIDGET (self)); +} + +void +egg_handle_set_position (EggHandle *self, + GtkPositionType position) +{ + g_return_if_fail (EGG_IS_HANDLE (self)); + + self->position = position; + + switch (position) + { + case GTK_POS_LEFT: + case GTK_POS_RIGHT: + gtk_widget_set_cursor_from_name (GTK_WIDGET (self), "col-resize"); + gtk_orientable_set_orientation (GTK_ORIENTABLE (self->separator), GTK_ORIENTATION_VERTICAL); + break; + + case GTK_POS_TOP: + case GTK_POS_BOTTOM: + gtk_widget_set_cursor_from_name (GTK_WIDGET (self), "row-resize"); + gtk_orientable_set_orientation (GTK_ORIENTABLE (self->separator), GTK_ORIENTATION_HORIZONTAL); + break; + + default: + g_assert_not_reached (); + } +} + +GtkWidget * +egg_handle_new (GtkPositionType position) +{ + EggHandle *self; + + self = g_object_new (EGG_TYPE_HANDLE, NULL); + egg_handle_set_position (self, position); + + return GTK_WIDGET (self); +}
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-paned-private.h
Added
@@ -0,0 +1,48 @@ +/* egg-paned.h + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#pragma once + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define EGG_TYPE_PANED (egg_paned_get_type()) + +G_DECLARE_FINAL_TYPE (EggPaned, egg_paned, EGG, PANED, GtkWidget) + +GtkWidget *egg_paned_new (void); +void egg_paned_append (EggPaned *self, + GtkWidget *child); +void egg_paned_prepend (EggPaned *self, + GtkWidget *child); +void egg_paned_insert (EggPaned *self, + int position, + GtkWidget *child); +void egg_paned_insert_after (EggPaned *self, + GtkWidget *child, + GtkWidget *sibling); +void egg_paned_remove (EggPaned *self, + GtkWidget *child); +guint egg_paned_get_n_children (EggPaned *self); +GtkWidget *egg_paned_get_nth_child (EggPaned *self, + guint nth); + +G_END_DECLS
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-paned.c
Added
@@ -0,0 +1,593 @@ +/* egg-paned.c + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#include "config.h" + +#include <string.h> + +#include "egg-paned-private.h" +#include "egg-resizer-private.h" + +struct _EggPaned +{ + GtkWidget parent_instance; + GtkOrientation orientation; +}; + +static void buildable_iface_init (GtkBuildableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (EggPaned, egg_paned, GTK_TYPE_WIDGET, + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, buildable_iface_init) + G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) + +enum { + PROP_0, + N_PROPS, + + PROP_ORIENTATION, +}; + +static void +update_orientation (GtkWidget *widget, + GtkOrientation orientation) +{ + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + gtk_widget_remove_css_class (widget, "vertical"); + gtk_widget_add_css_class (widget, "horizontal"); + } + else + { + gtk_widget_remove_css_class (widget, "horizontal"); + gtk_widget_add_css_class (widget, "vertical"); + } + + gtk_accessible_update_property (GTK_ACCESSIBLE (widget), + GTK_ACCESSIBLE_PROPERTY_ORIENTATION, orientation, + -1); +} + +/** + * egg_paned_new: + * + * Create a new #EggPaned. + * + * Returns: (transfer full): a newly created #EggPaned + */ +GtkWidget * +egg_paned_new (void) +{ + return g_object_new (EGG_TYPE_PANED, NULL); +} + +static void +egg_paned_set_orientation (EggPaned *self, + GtkOrientation orientation) +{ + GtkPositionType pos; + + g_assert (EGG_IS_PANED (self)); + g_assert (orientation == GTK_ORIENTATION_HORIZONTAL || + orientation == GTK_ORIENTATION_VERTICAL); + + if (self->orientation == orientation) + return; + + self->orientation = orientation; + + if (self->orientation == GTK_ORIENTATION_HORIZONTAL) + pos = GTK_POS_LEFT; + else + pos = GTK_POS_TOP; + + for (GtkWidget *child = gtk_widget_get_last_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_prev_sibling (child)) + { + g_assert (EGG_IS_RESIZER (child)); + + egg_resizer_set_position (EGG_RESIZER (child), pos); + } + + update_orientation (GTK_WIDGET (self), self->orientation); + gtk_widget_queue_resize (GTK_WIDGET (self)); + g_object_notify (G_OBJECT (self), "orientation"); +} + +static void +egg_paned_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + EggPaned *self = (EggPaned *)widget; + + g_assert (EGG_IS_PANED (self)); + + *minimum = 0; + *natural = 0; + *minimum_baseline = -1; + *natural_baseline = -1; + + for (GtkWidget *child = gtk_widget_get_first_child (widget); + child != NULL; + child = gtk_widget_get_next_sibling (child)) + { + int child_min, child_nat; + + gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, NULL, NULL); + + if (orientation == self->orientation) + { + *minimum += child_min; + *natural += child_nat; + } + else + { + *minimum = MAX (*minimum, child_min); + *natural = MAX (*natural, child_nat); + } + } +} + +typedef struct +{ + GtkWidget *widget; + GtkRequisition min_request; + GtkRequisition nat_request; + GtkAllocation alloc; +} ChildAllocation; + +static void +egg_paned_size_allocate (GtkWidget *widget, + int width, + int height, + int baseline) +{ + EggPaned *self = (EggPaned *)widget; + ChildAllocation *allocs; + ChildAllocation *last_alloc = NULL; + GtkOrientation orientation; + guint n_children = 0; + guint n_expand = 0; + guint i; + int extra_width = width; + int extra_height = height; + int expand_width; + int expand_height; + int x, y; + + g_assert (EGG_IS_PANED (self)); + + GTK_WIDGET_CLASS (egg_paned_parent_class)->size_allocate (widget, width, height, baseline); + + n_children = egg_paned_get_n_children (self); + + if (n_children == 1) + { + GtkWidget *child = gtk_widget_get_first_child (widget); + GtkAllocation alloc = { 0, 0, width, height }; + + if (gtk_widget_get_visible (child)) + { + gtk_widget_size_allocate (child, &alloc, -1); + return; + } + } + + orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (self)); + allocs = g_newa (ChildAllocation, n_children); + memset (allocs, 0, sizeof *allocs * n_children); + + /* Give min size to each of the children */ + i = 0; + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child), i++) + { + ChildAllocation *child_alloc = &allocsi; + + if (!gtk_widget_get_visible (child)) + continue; + + gtk_widget_measure (child, GTK_ORIENTATION_HORIZONTAL, height, + &child_alloc->min_request.width, + &child_alloc->nat_request.width, + NULL, NULL); + gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL, width, + &child_alloc->min_request.height, + &child_alloc->nat_request.height, + NULL, NULL); + + child_alloc->alloc.width = child_alloc->min_request.width; + child_alloc->alloc.height = child_alloc->min_request.height; + + n_expand += gtk_widget_compute_expand (child, orientation); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + extra_width -= child_alloc->alloc.width; + child_alloc->alloc.height = height; + } + else + { + extra_height -= child_alloc->alloc.height; + child_alloc->alloc.width = width; + } + } + + /* Now try to distribute extra space for natural size */ + i = 0; + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child), i++) + { + ChildAllocation *child_alloc = &allocsi; + + if (!gtk_widget_get_visible (child)) + continue; + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + int taken = MIN (extra_width, child_alloc->nat_request.width - child_alloc->alloc.width); + + if (taken > 0) + { + child_alloc->alloc.width += taken; + extra_width -= taken; + } + } + else + { + int taken = MIN (extra_height, child_alloc->nat_request.height - child_alloc->alloc.height); + + if (taken > 0) + { + child_alloc->alloc.height += taken; + extra_height -= taken; + } + } + + last_alloc = child_alloc; + } + + /* Now give extra space for those that expand */ + expand_width = n_expand ? extra_width / n_expand : 0; + expand_height = n_expand ? extra_height / n_expand : 0; + i = n_children; + for (GtkWidget *child = gtk_widget_get_last_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_prev_sibling (child), i--) + { + ChildAllocation *child_alloc = &allocsi-1; + + if (!gtk_widget_get_visible (child)) + continue; + + if (!gtk_widget_compute_expand (child, orientation)) + continue; + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + child_alloc->alloc.width += expand_width; + extra_width -= expand_width; + } + else + { + child_alloc->alloc.height += expand_height; + extra_height -= expand_height; + } + } + + /* Give any leftover to the last visible child */ + if (last_alloc) + { + if (orientation == GTK_ORIENTATION_HORIZONTAL) + last_alloc->alloc.width += extra_width; + else + last_alloc->alloc.height += extra_height; + } + + i = 0; + x = 0; + y = 0; + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child), i++) + { + ChildAllocation *child_alloc = &allocsi; + + child_alloc->alloc.x = x; + child_alloc->alloc.y = y; + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + x += child_alloc->alloc.width; + else + y += child_alloc->alloc.height; + + gtk_widget_size_allocate (child, &child_alloc->alloc, -1); + } +} + +static void +egg_paned_dispose (GObject *object) +{ + EggPaned *self = (EggPaned *)object; + GtkWidget *child; + + child = gtk_widget_get_first_child (GTK_WIDGET (self)); + while (child) + { + GtkWidget *next = gtk_widget_get_next_sibling (child); + gtk_widget_unparent (child); + child = next; + } + + G_OBJECT_CLASS (egg_paned_parent_class)->dispose (object); +} + +static void +egg_paned_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EggPaned *self = EGG_PANED (object); + + switch (prop_id) + { + case PROP_ORIENTATION: + g_value_set_enum (value, self->orientation); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +egg_paned_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EggPaned *self = EGG_PANED (object); + + switch (prop_id) + { + case PROP_ORIENTATION: + egg_paned_set_orientation (self, g_value_get_enum (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +egg_paned_class_init (EggPanedClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = egg_paned_dispose; + object_class->get_property = egg_paned_get_property; + object_class->set_property = egg_paned_set_property; + + widget_class->measure = egg_paned_measure; + widget_class->size_allocate = egg_paned_size_allocate; + + g_object_class_override_property (object_class, PROP_ORIENTATION, "orientation"); + + gtk_widget_class_set_css_name (widget_class, "eggpaned"); +} + +static void +egg_paned_init (EggPaned *self) +{ + self->orientation = GTK_ORIENTATION_HORIZONTAL; + + update_orientation (GTK_WIDGET (self), self->orientation); +} + +static void +egg_paned_update_handles (EggPaned *self) +{ + GtkWidget *child; + + g_assert (EGG_IS_PANED (self)); + + for (child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child)) + { + GtkWidget *handle; + + g_assert (EGG_IS_RESIZER (child)); + + if ((handle = egg_resizer_get_handle (EGG_RESIZER (child)))) + gtk_widget_show (handle); + } + + if ((child = gtk_widget_get_last_child (GTK_WIDGET (self)))) + { + GtkWidget *handle = egg_resizer_get_handle (EGG_RESIZER (child)); + gtk_widget_hide (handle); + } +} + +void +egg_paned_remove (EggPaned *self, + GtkWidget *child) +{ + GtkWidget *resizer; + + g_return_if_fail (EGG_IS_PANED (self)); + g_return_if_fail (GTK_IS_WIDGET (child)); + + resizer = gtk_widget_get_ancestor (child, EGG_TYPE_RESIZER); + g_return_if_fail (resizer != NULL && + gtk_widget_get_parent (resizer) == GTK_WIDGET (self)); + gtk_widget_unparent (resizer); + egg_paned_update_handles (self); + gtk_widget_queue_resize (GTK_WIDGET (self)); +} + +void +egg_paned_insert (EggPaned *self, + int position, + GtkWidget *child) +{ + GtkPositionType pos; + GtkWidget *resizer; + + g_return_if_fail (EGG_IS_PANED (self)); + g_return_if_fail (GTK_IS_WIDGET (child)); + g_return_if_fail (gtk_widget_get_parent (child) == NULL); + + if (self->orientation == GTK_ORIENTATION_HORIZONTAL) + pos = GTK_POS_LEFT; + else + pos = GTK_POS_TOP; + + resizer = egg_resizer_new (pos); + egg_resizer_set_child (EGG_RESIZER (resizer), child); + + if (position < 0) + gtk_widget_insert_before (GTK_WIDGET (resizer), GTK_WIDGET (self), NULL); + else if (position == 0) + gtk_widget_insert_after (GTK_WIDGET (resizer), GTK_WIDGET (self), NULL); + else + { + GtkWidget *sibling = gtk_widget_get_first_child (GTK_WIDGET (self)); + + for (int i = position; i > 0 && sibling != NULL; i--) + sibling = gtk_widget_get_next_sibling (sibling); + + gtk_widget_insert_before (GTK_WIDGET (resizer), GTK_WIDGET (self), sibling); + } + + egg_paned_update_handles (self); + + gtk_widget_queue_resize (GTK_WIDGET (self)); +} + +void +egg_paned_append (EggPaned *self, + GtkWidget *child) +{ + egg_paned_insert (self, -1, child); +} + +void +egg_paned_prepend (EggPaned *self, + GtkWidget *child) +{ + egg_paned_insert (self, 0, child); +} + +void +egg_paned_insert_after (EggPaned *self, + GtkWidget *child, + GtkWidget *sibling) +{ + int position = 0; + + g_return_if_fail (EGG_IS_PANED (self)); + g_return_if_fail (GTK_IS_WIDGET (child)); + g_return_if_fail (!sibling || GTK_IS_WIDGET (sibling)); + + if (sibling == NULL) + { + egg_paned_prepend (self, child); + return; + } + + /* TODO: We should reverse insert() to call this */ + + for (GtkWidget *ancestor = gtk_widget_get_first_child (GTK_WIDGET (self)); + ancestor != NULL; + ancestor = gtk_widget_get_next_sibling (ancestor)) + { + position++; + + if (sibling == ancestor || gtk_widget_is_ancestor (sibling, ancestor)) + break; + } + + egg_paned_insert (self, position, child); +} + +guint +egg_paned_get_n_children (EggPaned *self) +{ + guint count = 0; + + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child)) + count++; + + return count; +} + +GtkWidget * +egg_paned_get_nth_child (EggPaned *self, + guint nth) +{ + g_return_val_if_fail (EGG_IS_PANED (self), NULL); + + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self)); + child != NULL; + child = gtk_widget_get_next_sibling (child)) + { + g_assert (EGG_IS_RESIZER (child)); + + if (nth == 0) + return egg_resizer_get_child (EGG_RESIZER (child)); + + nth--; + } + + return NULL; +} + +static void +egg_paned_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const char *type) +{ + if (GTK_IS_WIDGET (child)) + egg_paned_append (EGG_PANED (buildable), GTK_WIDGET (child)); + else + g_warning ("Cannot add child of type %s to %s", + G_OBJECT_TYPE_NAME (child), + G_OBJECT_TYPE_NAME (buildable)); +} + +static void +buildable_iface_init (GtkBuildableIface *iface) +{ + iface->add_child = egg_paned_add_child; +}
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-resizer-private.h
Added
@@ -0,0 +1,40 @@ +/* egg-resizer.h + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#pragma once + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define EGG_TYPE_RESIZER (egg_resizer_get_type()) + +G_DECLARE_FINAL_TYPE (EggResizer, egg_resizer, EGG, RESIZER, GtkWidget) + +GtkWidget *egg_resizer_new (GtkPositionType position); +GtkPositionType egg_resizer_get_position (EggResizer *self); +void egg_resizer_set_position (EggResizer *self, + GtkPositionType position); +GtkWidget *egg_resizer_get_child (EggResizer *self); +void egg_resizer_set_child (EggResizer *self, + GtkWidget *child); +GtkWidget *egg_resizer_get_handle (EggResizer *self); + +G_END_DECLS
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/egg-resizer.c
Added
@@ -0,0 +1,495 @@ +/* egg-resizer.c + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * This file is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This file 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 Lesser 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#include "config.h" + +#include "egg-handle-private.h" +#include "egg-resizer-private.h" + +#define HANDLE_SIZE 8 + +struct _EggResizer +{ + GtkWidget parent_instance; + + EggHandle *handle; + GtkWidget *child; + + double drag_orig_size; + double drag_position; + + GtkPositionType position : 3; +}; + +G_DEFINE_TYPE (EggResizer, egg_resizer, GTK_TYPE_WIDGET) + +enum { + PROP_0, + PROP_CHILD, + N_PROPS +}; + +static GParamSpec *properties N_PROPS; + +static void +egg_resizer_drag_begin_cb (EggResizer *self, + double start_x, + double start_y, + GtkGestureDrag *drag) +{ + GtkAllocation child_alloc; + GtkAllocation handle_alloc; + + g_assert (EGG_IS_RESIZER (self)); + g_assert (GTK_IS_GESTURE_DRAG (drag)); + + if (self->child == NULL) + return; + + switch (self->position) + { + case GTK_POS_LEFT: + if (start_x > gtk_widget_get_width (GTK_WIDGET (self)) - HANDLE_SIZE) + goto start_drag; + break; + + case GTK_POS_RIGHT: + if (start_x <= HANDLE_SIZE) + goto start_drag; + break; + + case GTK_POS_TOP: + if (start_y > gtk_widget_get_height (GTK_WIDGET (self)) - HANDLE_SIZE) + goto start_drag; + break; + + case GTK_POS_BOTTOM: + if (start_y <= HANDLE_SIZE) + goto start_drag; + break; + + default: + g_assert_not_reached (); + break; + } + + gtk_gesture_set_state (GTK_GESTURE (drag), + GTK_EVENT_SEQUENCE_DENIED); + + return; + +start_drag: + + gtk_widget_get_allocation (self->child, &child_alloc); + gtk_widget_get_allocation (GTK_WIDGET (self->handle), &handle_alloc); + + if (self->position == GTK_POS_LEFT || + self->position == GTK_POS_RIGHT) + { + self->drag_orig_size = child_alloc.width + handle_alloc.width; + gtk_widget_set_hexpand (self->child, FALSE); + } + else + { + self->drag_orig_size = child_alloc.height + handle_alloc.height; + gtk_widget_set_vexpand (self->child, FALSE); + } + + self->drag_position = self->drag_orig_size; + + gtk_widget_queue_resize (GTK_WIDGET (self)); +} + +static void +egg_resizer_drag_update_cb (EggResizer *self, + double offset_x, + double offset_y, + GtkGestureDrag *drag) +{ + g_assert (EGG_IS_RESIZER (self)); + g_assert (GTK_IS_GESTURE_DRAG (drag)); + + if (self->position == GTK_POS_LEFT) + self->drag_position = self->drag_orig_size + offset_x; + else if (self->position == GTK_POS_RIGHT) + self->drag_position = gtk_widget_get_width (GTK_WIDGET (self)) - offset_x; + else if (self->position == GTK_POS_TOP) + self->drag_position = self->drag_orig_size + offset_y; + else if (self->position == GTK_POS_BOTTOM) + self->drag_position = gtk_widget_get_height (GTK_WIDGET (self)) - offset_y; + + gtk_widget_queue_resize (GTK_WIDGET (self)); +} + +static void +egg_resizer_drag_end_cb (EggResizer *self, + double offset_x, + double offset_y, + GtkGestureDrag *drag) +{ + g_assert (EGG_IS_RESIZER (self)); + g_assert (GTK_IS_GESTURE_DRAG (drag)); +} + +GtkWidget * +egg_resizer_new (GtkPositionType position) +{ + EggResizer *self; + + self = g_object_new (EGG_TYPE_RESIZER, NULL); + self->position = position; + self->handle = EGG_HANDLE (egg_handle_new (position)); + gtk_widget_set_parent (GTK_WIDGET (self->handle), GTK_WIDGET (self)); + + return GTK_WIDGET (self); +} + +static void +egg_resizer_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + EggResizer *self = (EggResizer *)widget; + + g_assert (EGG_IS_RESIZER (self)); + + *minimum = 0; + *natural = 0; + *minimum_baseline = -1; + *natural_baseline = -1; + + if (self->child != NULL) + gtk_widget_measure (self->child, + orientation, + for_size, + minimum, natural, + NULL, NULL); + + if ((orientation == GTK_ORIENTATION_HORIZONTAL && + (self->position == GTK_POS_LEFT || + self->position == GTK_POS_RIGHT)) || + (orientation == GTK_ORIENTATION_VERTICAL && + (self->position == GTK_POS_TOP || + self->position == GTK_POS_BOTTOM))) + { + int handle_min, handle_nat; + + if (self->drag_position != 0) + { + if (self->drag_position > *minimum) + *natural = self->drag_position; + else if (self->drag_position < *minimum) + *natural = *minimum; + } + + if (gtk_widget_get_visible (GTK_WIDGET (self->handle))) + { + gtk_widget_measure (GTK_WIDGET (self->handle), + orientation, for_size, + &handle_min, &handle_nat, + NULL, NULL); + + *minimum += handle_min; + *natural += handle_nat; + } + } +} + +static void +egg_resizer_size_allocate (GtkWidget *widget, + int width, + int height, + int baseline) +{ + EggResizer *self = (EggResizer *)widget; + GtkOrientation orientation; + GtkAllocation child_alloc; + GtkAllocation handle_alloc; + int handle_min = 0, handle_nat = 0; + + g_assert (EGG_IS_RESIZER (self)); + + if (self->position == GTK_POS_LEFT || + self->position == GTK_POS_RIGHT) + orientation = GTK_ORIENTATION_HORIZONTAL; + else + orientation = GTK_ORIENTATION_VERTICAL; + + if (gtk_widget_get_visible (GTK_WIDGET (self->handle))) + gtk_widget_measure (GTK_WIDGET (self->handle), + orientation, + -1, + &handle_min, &handle_nat, + NULL, NULL); + + switch (self->position) + { + case GTK_POS_LEFT: + handle_alloc.x = width - handle_min; + handle_alloc.width = handle_min; + handle_alloc.y = 0; + handle_alloc.height = height; + child_alloc.x = 0; + child_alloc.y = 0; + child_alloc.width = width - handle_min; + child_alloc.height = height; + break; + + case GTK_POS_RIGHT: + handle_alloc.x = 0; + handle_alloc.width = handle_min; + handle_alloc.y = 0; + handle_alloc.height = height; + child_alloc.x = handle_min; + child_alloc.y = 0; + child_alloc.width = width - handle_min; + child_alloc.height = height; + break; + + case GTK_POS_TOP: + handle_alloc.x = 0; + handle_alloc.width = width; + handle_alloc.y = height - handle_min; + handle_alloc.height = handle_min; + child_alloc.x = 0; + child_alloc.y = 0; + child_alloc.width = width; + child_alloc.height = height - handle_min; + break; + + case GTK_POS_BOTTOM: + handle_alloc.x = 0; + handle_alloc.width = width; + handle_alloc.y = 0; + handle_alloc.height = handle_min; + child_alloc.x = 0; + child_alloc.y = handle_min; + child_alloc.width = width; + child_alloc.height = height - handle_min; + break; + + default: + g_assert_not_reached (); + } + + if (gtk_widget_get_mapped (GTK_WIDGET (self->handle))) + gtk_widget_size_allocate (GTK_WIDGET (self->handle), &handle_alloc, -1); + + if (self->child != NULL && + gtk_widget_get_mapped (self->child)) + gtk_widget_size_allocate (self->child, &child_alloc, -1); +} + +static void +egg_resizer_compute_expand (GtkWidget *widget, + gboolean *hexpand, + gboolean *vexpand) +{ + EggResizer *self = EGG_RESIZER (widget); + + if (self->child != NULL) + { + *hexpand = gtk_widget_compute_expand (self->child, GTK_ORIENTATION_HORIZONTAL); + *vexpand = gtk_widget_compute_expand (self->child, GTK_ORIENTATION_VERTICAL); + } + else + { + *hexpand = FALSE; + *vexpand = FALSE; + } +} + +static void +egg_resizer_dispose (GObject *object) +{ + EggResizer *self = (EggResizer *)object; + + if (self->handle) + gtk_widget_unparent (GTK_WIDGET (self->handle)); + self->handle = NULL; + + if (self->child) + gtk_widget_unparent (self->child); + self->child = NULL; + + G_OBJECT_CLASS (egg_resizer_parent_class)->dispose (object); +} + +static void +egg_resizer_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EggResizer *self = EGG_RESIZER (object); + + switch (prop_id) + { + case PROP_CHILD: + g_value_set_object (value, egg_resizer_get_child (self)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +egg_resizer_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EggResizer *self = EGG_RESIZER (object); + + switch (prop_id) + { + case PROP_CHILD: + egg_resizer_set_child (self, g_value_get_object (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +egg_resizer_class_init (EggResizerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = egg_resizer_dispose; + object_class->get_property = egg_resizer_get_property; + object_class->set_property = egg_resizer_set_property; + + widget_class->compute_expand = egg_resizer_compute_expand; + widget_class->measure = egg_resizer_measure; + widget_class->size_allocate = egg_resizer_size_allocate; + + properties PROP_CHILD = + g_param_spec_object ("child", + "Child", + "Child", + GTK_TYPE_WIDGET, + (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); + + gtk_widget_class_set_css_name (widget_class, "eggresizer"); +} + +static void +egg_resizer_init (EggResizer *self) +{ + GtkGesture *gesture; + + gesture = gtk_gesture_drag_new (); + gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_CAPTURE); + g_signal_connect_object (gesture, + "drag-begin", + G_CALLBACK (egg_resizer_drag_begin_cb), + self, + G_CONNECT_SWAPPED); + g_signal_connect_object (gesture, + "drag-update", + G_CALLBACK (egg_resizer_drag_update_cb), + self, + G_CONNECT_SWAPPED); + g_signal_connect_object (gesture, + "drag-end", + G_CALLBACK (egg_resizer_drag_end_cb), + self, + G_CONNECT_SWAPPED); + gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture)); +} + +/** + * egg_resizer_get_child: + * @self: a #EggResizer + * + * Gets the child widget of the resizer. + * + * Returns: (transfer none) (nullable): A #GtkWidget or %NULL + */ +GtkWidget * +egg_resizer_get_child (EggResizer *self) +{ + g_return_val_if_fail (EGG_IS_RESIZER (self), NULL); + + return self->child; +} + +void +egg_resizer_set_child (EggResizer *self, + GtkWidget *child) +{ + g_return_if_fail (EGG_IS_RESIZER (self)); + g_return_if_fail (!child || GTK_IS_WIDGET (child)); + + if (child == self->child) + return; + + g_clear_pointer (&self->child, gtk_widget_unparent); + + self->child = child; + + if (self->child != NULL) + gtk_widget_insert_before (self->child, + GTK_WIDGET (self), + GTK_WIDGET (self->handle)); + + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CHILD); +} + +GtkPositionType +egg_resizer_get_position (EggResizer *self) +{ + g_return_val_if_fail (EGG_IS_RESIZER (self), 0); + + return self->position; +} + +void +egg_resizer_set_position (EggResizer *self, + GtkPositionType position) +{ + g_return_if_fail (EGG_IS_RESIZER (self)); + + if (position != self->position) + { + self->position = position; + + egg_handle_set_position (self->handle, position); + gtk_widget_queue_resize (GTK_WIDGET (self)); + } +} + +GtkWidget * +egg_resizer_get_handle (EggResizer *self) +{ + g_return_val_if_fail (EGG_IS_RESIZER (self), NULL); + + return GTK_WIDGET (self->handle); +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/libsysprof-ui.gresource.xml -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/libsysprof-ui.gresource.xml
Changed
@@ -3,9 +3,10 @@ <gresource prefix="/org/gnome/sysprof"> <file compressed="true">css/SysprofEnvironEditor-shared.css</file> <file compressed="true">css/SysprofDisplay-shared.css</file> + <file compressed="true">css/SysprofProfilerAssistant-shared.css</file> <!-- Application icons --> - <file alias="icons/scalable/apps/org.gnome.Sysprof.svg">../../data/icons/scalable/apps/org.gnome.Sysprof.svg</file> + <file alias="icons/scalable/apps/org.gnome.Sysprof.svg">../../data/icons/org.gnome.Sysprof.svg</file> <file alias="icons/scalable/apps/org.gnome.Sysprof-symbolic.svg">../../data/icons/symbolic/apps/org.gnome.Sysprof-symbolic.svg</file> <file alias="icons/symbolic/apps/org.gnome.Sysprof-symbolic.svg">../../data/icons/symbolic/apps/org.gnome.Sysprof-symbolic.svg</file> </gresource> @@ -24,7 +25,6 @@ <file preprocess="xml-stripblanks">sysprof-profiler-assistant.ui</file> <file preprocess="xml-stripblanks">sysprof-recording-state-view.ui</file> <file preprocess="xml-stripblanks">sysprof-tab.ui</file> - <file preprocess="xml-stripblanks">sysprof-time-label.ui</file> <file preprocess="xml-stripblanks">sysprof-visualizers-frame.ui</file> </gresource> </gresources>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/meson.build
Changed
@@ -1,5 +1,3 @@ -if get_option('enable_gtk') and get_option('libsysprof') - libsysprof_ui_public_sources = 'sysprof-check.c', 'sysprof-display.c', @@ -13,6 +11,10 @@ libsysprof_ui_private_sources = + 'egg-handle.c', + 'egg-paned.c', + 'egg-resizer.c', + 'pointcache.c', 'rectangles.c', 'sysprof-aid.c', @@ -23,6 +25,7 @@ 'sysprof-callgraph-page.c', 'sysprof-cell-renderer-duration.c', 'sysprof-cell-renderer-percent.c', + 'sysprof-cell-renderer-progress.c', 'sysprof-color-cycle.c', 'sysprof-counters-aid.c', 'sysprof-cpu-aid.c', @@ -87,7 +90,8 @@ # Subset of dependencies used in generating the pkg-config file libsysprof_ui_pkg_deps = dependency('gio-2.0', version: glib_req_version), - dependency('gtk+-3.0', version: gtk_req_version), + dependency('gtk4', version: gtk_req_version), + dependency('libadwaita-1'), libsysprof_ui_deps = libsysprof_ui_pkg_deps + @@ -98,15 +102,8 @@ # dependency object libsysprof_ui_pkg_deps += libsysprof -dazzle_dep = dependency('libdazzle-1.0', version: dazzle_req_version, fallback: 'libdazzle', 'libdazzle_dep') -libsysprof_ui_deps += dazzle_dep - -if dazzle_dep.type_name() == 'pkgconfig' - libsysprof_ui_pkg_deps += dazzle_dep -endif - libsysprof_ui = shared_library( - 'sysprof-ui-@0@'.format(libsysprof_api_version), + 'sysprof-ui-@0@'.format(libsysprof_ui_api_version), libsysprof_ui_public_sources + libsysprof_ui_private_sources + libsysprof_ui_resources, dependencies: libsysprof_ui_deps + librax_dep, @@ -124,16 +121,14 @@ pkgconfig.generate( libsysprof_ui, - subdirs: sysprof_header_subdir , + subdirs: sysprof_ui_header_subdir , description: 'The UI library for GTK applications embedding sysprof', install_dir: join_paths(get_option('libdir'), 'pkgconfig'), - requires: 'gio-2.0', 'gtk+-3.0' , + requires: 'gio-2.0', 'gtk4' , libraries_private: libsysprof_ui_pkg_deps, variables: 'datadir=' + datadir_for_pc_file, , ) -install_headers(libsysprof_ui_public_headers, subdir: sysprof_header_subdir) - -endif +install_headers(libsysprof_ui_public_headers, subdir: sysprof_ui_header_subdir)
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-aid-icon.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-aid-icon.ui
Changed
@@ -1,62 +1,41 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk" version="4.0"/> <template class="SysprofAidIcon" parent="GtkFlowBoxChild"> - <property name="can_focus">False</property> - <child> + <property name="child"> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkOverlay"> <property name="halign">center</property> - <property name="visible">true</property> - <child> + <property name="child"> <object class="GtkImage" id="image"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="pixel_size">64</property> - <property name="width-request">92</property> - <property name="icon_name">org.gnome.Sysprof-symbolic</property> + <property name="pixel-size">48</property> + <property name="width-request">64</property> + <property name="icon-name">org.gnome.Sysprof-symbolic</property> </object> - </child> + </property> <child type="overlay"> <object class="GtkImage" id="check"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="pixel_size">16</property> - <property name="icon_name">object-select-symbolic</property> + <property name="pixel-size">14</property> + <property name="icon-name">object-select-symbolic</property> <property name="halign">end</property> <property name="valign">start</property> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkLabel" id="label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> + <property name="use-underline">1</property> <property name="justify">center</property> - <property name="wrap">True</property> - <property name="mnemonic_widget">SysprofAidIcon</property> - <property name="max_width_chars">12</property> + <property name="wrap">1</property> + <property name="mnemonic-widget">SysprofAidIcon</property> + <property name="max-width-chars">12</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> - </child> + </property> </template> </interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-battery-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-battery-aid.c
Changed
@@ -218,7 +218,7 @@ if (found > 0) sysprof_display_add_group (present->display, group); else - gtk_widget_destroy (GTK_WIDGET (group)); + g_object_unref (g_object_ref_sink (group)); } return counters != NULL;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-callgraph-page.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-callgraph-page.c
Changed
@@ -39,11 +39,12 @@ #include "config.h" -#include <dazzle.h> #include <glib/gi18n.h> #include "../stackstash.h" +#include "egg-paned-private.h" + #include "sysprof-callgraph-page.h" #include "sysprof-cell-renderer-percent.h" @@ -56,6 +57,9 @@ GtkTreeView *descendants_view; GtkTreeViewColumn *descendants_name_column; GtkStack *stack; + GtkWidget *empty_state; + GtkWidget *loading_state; + GtkWidget *callgraph; GQueue *history; @@ -208,7 +212,7 @@ gtk_tree_selection_select_iter (selection, &iter); } - gtk_stack_set_visible_child_name (priv->stack, "callgraph"); + gtk_stack_set_visible_child (priv->stack, priv->callgraph); g_clear_object (&functions); } @@ -220,7 +224,7 @@ g_return_if_fail (SYSPROF_IS_CALLGRAPH_PAGE (self)); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->empty_state); } static void @@ -239,7 +243,7 @@ gtk_tree_view_set_model (priv->functions_view, NULL); gtk_tree_view_set_model (priv->descendants_view, NULL); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->empty_state); } /** @@ -664,10 +668,12 @@ sysprof_callgraph_page_set_node (self, node); } -static void +static gboolean descendants_view_move_cursor_cb (GtkTreeView *descendants_view, GtkMovementStep step, int direction, + gboolean extend, + gboolean modify, gpointer user_data) { if (step == GTK_MOVEMENT_VISUAL_POSITIONS) @@ -680,15 +686,19 @@ { gtk_tree_view_expand_row (descendants_view, path, FALSE); g_signal_stop_emission_by_name (descendants_view, "move-cursor"); + return FALSE; } else if (direction == -1) { gtk_tree_view_collapse_row (descendants_view, path); g_signal_stop_emission_by_name (descendants_view, "move-cursor"); + return FALSE; } gtk_tree_path_free (path); } + + return TRUE; } static void @@ -732,7 +742,7 @@ copy_tree_view_selection (GtkTreeView *tree_view) { g_autoptr(GString) str = NULL; - GtkClipboard *clipboard; + GdkClipboard *clipboard; g_assert (GTK_IS_TREE_VIEW (tree_view)); @@ -741,24 +751,26 @@ copy_tree_view_selection_cb, str); - clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view), GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, str->str, str->len); + clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view)); + gdk_clipboard_set_text (clipboard, str->str); } static void -sysprof_callgraph_page_copy_cb (GtkWidget *widget, - SysprofCallgraphPage *self) +sysprof_callgraph_page_copy_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { + SysprofCallgraphPage *self = (SysprofCallgraphPage *)widget; SysprofCallgraphPagePrivate *priv = sysprof_callgraph_page_get_instance_private (self); - GtkWidget *toplevel; + GtkRoot *toplevel; GtkWidget *focus; g_assert (GTK_IS_WIDGET (widget)); g_assert (SYSPROF_IS_CALLGRAPH_PAGE (self)); - if (!(toplevel = gtk_widget_get_toplevel (widget)) || - !GTK_IS_WINDOW (toplevel) || - !(focus = gtk_window_get_focus (GTK_WINDOW (toplevel)))) + if (!(toplevel = gtk_widget_get_root (widget)) || + !GTK_IS_ROOT (toplevel) || + !(focus = gtk_root_get_focus (toplevel))) return; if (focus == GTK_WIDGET (priv->descendants_view)) @@ -891,7 +903,6 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); SysprofPageClass *page_class = SYSPROF_PAGE_CLASS (klass); - GtkBindingSet *bindings; object_class->finalize = sysprof_callgraph_page_finalize; object_class->get_property = sysprof_callgraph_page_get_property; @@ -926,10 +937,16 @@ gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, descendants_view); gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, descendants_name_column); gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, stack); + gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, callgraph); + gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, empty_state); + gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphPage, loading_state); - bindings = gtk_binding_set_by_class (klass); - gtk_binding_entry_add_signal (bindings, GDK_KEY_Left, GDK_MOD1_MASK, "go-previous", 0); + gtk_widget_class_install_action (widget_class, "page.copy", NULL, sysprof_callgraph_page_copy_cb); + 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 (EGG_TYPE_PANED); g_type_ensure (SYSPROF_TYPE_CELL_RENDERER_PERCENT); } @@ -937,7 +954,6 @@ sysprof_callgraph_page_init (SysprofCallgraphPage *self) { SysprofCallgraphPagePrivate *priv = sysprof_callgraph_page_get_instance_private (self); - DzlShortcutController *controller; GtkTreeSelection *selection; GtkCellRenderer *cell; @@ -945,7 +961,7 @@ gtk_widget_init_template (GTK_WIDGET (self)); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->loading_state); selection = gtk_tree_view_get_selection (priv->functions_view); @@ -991,16 +1007,6 @@ gtk_tree_selection_set_mode (gtk_tree_view_get_selection (priv->descendants_view), GTK_SELECTION_MULTIPLE); - - 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_callgraph_page_copy_cb, - self, - NULL); } typedef struct _Descendant Descendant; @@ -1287,7 +1293,7 @@ priv->loading--; if (priv->loading) - gtk_stack_set_visible_child_name (priv->stack, "loading"); + gtk_stack_set_visible_child (priv->stack, priv->loading_state); else - gtk_stack_set_visible_child_name (priv->stack, "callgraph"); + gtk_stack_set_visible_child (priv->stack, priv->callgraph); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-callgraph-page.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-callgraph-page.ui
Changed
@@ -2,23 +2,19 @@ <template class="SysprofCallgraphPage" parent="SysprofPage"> <child> <object class="GtkStack" id="stack"> - <property name="visible">true</property> <child> - <object class="GtkPaned"> + <object class="EggPaned" id="callgraph"> <property name="orientation">horizontal</property> - <property name="position">450</property> - <property name="visible">true</property> <child> - <object class="GtkPaned"> + <object class="EggPaned"> <property name="orientation">vertical</property> - <property name="visible">true</property> + <property name="width-request">400</property> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> + <property name="vexpand">true</property> <child> <object class="GtkTreeView" id="functions_view"> <property name="fixed-height-mode">true</property> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="function_name_column"> <property name="expand">true</property> @@ -70,16 +66,12 @@ </object> </child> </object> - <packing> - <property name="resize">true</property> - </packing> </child> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> + <property name="vexpand">true</property> <child> <object class="GtkTreeView" id="callers_view"> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="callers_name_column"> <property name="expand">true</property> @@ -131,18 +123,14 @@ </object> </child> </object> - <packing> - <property name="resize">true</property> - </packing> </child> </object> </child> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> + <property name="hexpand">true</property> <child> <object class="GtkTreeView" id="descendants_view"> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="descendants_name_column"> <property name="expand">true</property> @@ -203,31 +191,20 @@ </object> </child> </object> - <packing> - <property name="name">callgraph</property> - </packing> </child> <child> - <object class="DzlEmptyState"> + <object class="AdwStatusPage" id="loading_state"> <property name="icon-name">content-loading-symbolic</property> <property name="title" translatable="yes">Generating Callgraph</property> - <property name="subtitle" translatable="yes">Sysprof is busy creating the selected callgraph.</property> - <property name="visible">true</property> + <property name="description" translatable="yes">Sysprof is busy creating the selected callgraph.</property> </object> - <packing> - <property name="name">loading</property> - </packing> </child> <child> - <object class="DzlEmptyState"> + <object class="AdwStatusPage" id="empty_state"> <property name="icon-name">computer-fail-symbolic</property> <property name="title" translatable="yes">Not Enough Samples</property> - <property name="subtitle" translatable="yes">More samples are necessary to display a callgraph.</property> - <property name="visible">false</property> + <property name="description" translatable="yes">More samples are necessary to display a callgraph.</property> </object> - <packing> - <property name="name">empty-state</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-duration.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-duration.c
Changed
@@ -55,38 +55,87 @@ static GParamSpec *properties N_PROPS; +static inline void +rounded_rectangle (cairo_t *cr, + const GdkRectangle *rect, + int x_radius, + int y_radius) +{ + int x; + int y; + int width; + int height; + int x1, x2; + int y1, y2; + int xr1, xr2; + int yr1, yr2; + + g_assert (cr); + g_assert (rect); + + x = rect->x; + y = rect->y; + width = rect->width; + height = rect->height; + + x1 = x; + x2 = x1 + width; + y1 = y; + y2 = y1 + height; + + x_radius = MIN (x_radius, width / 2.0); + y_radius = MIN (y_radius, width / 2.0); + + xr1 = x_radius; + xr2 = x_radius / 2.0; + yr1 = y_radius; + yr2 = y_radius / 2.0; + + cairo_move_to (cr, x1 + xr1, y1); + cairo_line_to (cr, x2 - xr1, y1); + cairo_curve_to (cr, x2 - xr2, y1, x2, y1 + yr2, x2, y1 + yr1); + cairo_line_to (cr, x2, y2 - yr1); + cairo_curve_to (cr, x2, y2 - yr2, x2 - xr2, y2, x2 - xr1, y2); + cairo_line_to (cr, x1 + xr1, y2); + cairo_curve_to (cr, x1 + xr2, y2, x1, y2 - yr2, x1, y2 - yr1); + cairo_line_to (cr, x1, y1 + yr1); + cairo_curve_to (cr, x1, y1 + yr2, x1 + xr2, y1, x1 + xr1, y1); + cairo_close_path (cr); +} + static void -sysprof_cell_renderer_duration_render (GtkCellRenderer *renderer, - cairo_t *cr, - GtkWidget *widget, - const GdkRectangle *bg_area, - const GdkRectangle *cell_area, - GtkCellRendererState state) +sysprof_cell_renderer_duration_snapshot (GtkCellRenderer *renderer, + GtkSnapshot *snapshot, + GtkWidget *widget, + const GdkRectangle *bg_area, + const GdkRectangle *cell_area, + GtkCellRendererState state) { SysprofCellRendererDuration *self = (SysprofCellRendererDuration *)renderer; SysprofCellRendererDurationPrivate *priv = sysprof_cell_renderer_duration_get_instance_private (self); g_autoptr(GString) str = NULL; GtkStyleContext *style_context; + cairo_t *cr; gdouble x1, x2; GdkRGBA rgba; GdkRectangle r; gint64 duration; g_assert (SYSPROF_IS_CELL_RENDERER_DURATION (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); g_assert (GTK_IS_WIDGET (widget)); if (priv->zoom_manager == NULL) return; + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (cell_area->x, cell_area->y, cell_area->width, cell_area->height)); + style_context = gtk_widget_get_style_context (widget); if (priv->color_set) rgba = priv->color; else - gtk_style_context_get_color (style_context, - gtk_style_context_get_state (style_context), - &rgba); + gtk_style_context_get_color (style_context, &rgba); duration = sysprof_zoom_manager_get_duration_for_width (priv->zoom_manager, bg_area->width); @@ -108,7 +157,7 @@ if (r.width > 3) { - dzl_cairo_rounded_rectangle (cr, &r, 2, 2); + rounded_rectangle (cr, &r, 2, 2); cairo_fill (cr); } else if (r.width > 1) @@ -166,6 +215,8 @@ g_object_unref (layout); } + + cairo_destroy (cr); } static GtkSizeRequestMode @@ -342,7 +393,7 @@ cell_class->get_preferred_height_for_width = sysprof_cell_renderer_duration_get_preferred_height_for_width; cell_class->get_preferred_width = sysprof_cell_renderer_duration_get_preferred_width; cell_class->get_request_mode = sysprof_cell_renderer_duration_get_request_mode; - cell_class->render = sysprof_cell_renderer_duration_render; + cell_class->snapshot = sysprof_cell_renderer_duration_snapshot; /* Note we do not emit ::notify() for these properties */
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-percent.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-percent.c
Changed
@@ -37,7 +37,7 @@ N_PROPS }; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofCellRendererPercent, sysprof_cell_renderer_percent, GTK_TYPE_CELL_RENDERER_PROGRESS) +G_DEFINE_TYPE_WITH_PRIVATE (SysprofCellRendererPercent, sysprof_cell_renderer_percent, SYSPROF_TYPE_CELL_RENDERER_PROGRESS) static GParamSpec *properties N_PROPS;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-percent.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-percent.h
Changed
@@ -20,7 +20,7 @@ #pragma once -#include <gtk/gtk.h> +#include "sysprof-cell-renderer-progress.h" G_BEGIN_DECLS @@ -37,12 +37,12 @@ struct _SysprofCellRendererPercent { - GtkCellRendererProgress parent; + SysprofCellRendererProgress parent; }; struct _SysprofCellRendererPercentClass { - GtkCellRendererProgressClass parent_class; + SysprofCellRendererProgressClass parent_class; /*< private >*/ gpointer _reserved4;
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-progress.c
Added
@@ -0,0 +1,712 @@ +/* gtkcellrendererprogress.c + * Copyright (C) 2002 Naba Kumar <kh_naba@users.sourceforge.net> + * heavily modified by Jörgen Scheibengruber <mfcn@gmx.de> + * heavily modified by Marco Pesenti Gritti <marco@gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +/* + * Modified by the GTK+ Team and others 1997-2007. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#include "config.h" + +#include <glib/gi18n.h> +#include <stdlib.h> + +#include "sysprof-cell-renderer-progress.h" + + +enum +{ + PROP_0, + PROP_VALUE, + PROP_TEXT, + PROP_PULSE, + PROP_TEXT_XALIGN, + PROP_TEXT_YALIGN, + PROP_ORIENTATION, + PROP_INVERTED +}; + +struct _SysprofCellRendererProgressPrivate +{ + int value; + char *text; + char *label; + int min_h; + int min_w; + int pulse; + int offset; + float text_xalign; + float text_yalign; + GtkOrientation orientation; + gboolean inverted; +}; + +static void sysprof_cell_renderer_progress_finalize (GObject *object); +static void sysprof_cell_renderer_progress_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); +static void sysprof_cell_renderer_progress_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void sysprof_cell_renderer_progress_set_value (SysprofCellRendererProgress *cellprogress, + int value); +static void sysprof_cell_renderer_progress_set_text (SysprofCellRendererProgress *cellprogress, + const char *text); +static void sysprof_cell_renderer_progress_set_pulse (SysprofCellRendererProgress *cellprogress, + int pulse); +static void compute_dimensions (GtkCellRenderer *cell, + GtkWidget *widget, + const char *text, + int *width, + int *height); +static void sysprof_cell_renderer_progress_snapshot (GtkCellRenderer *cell, + GtkSnapshot *snapshot, + GtkWidget *widget, + const GdkRectangle *background_area, + const GdkRectangle *cell_area, + GtkCellRendererState flags); + + +G_DEFINE_TYPE_WITH_CODE (SysprofCellRendererProgress, sysprof_cell_renderer_progress, GTK_TYPE_CELL_RENDERER, + G_ADD_PRIVATE (SysprofCellRendererProgress) + G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) + +static void +recompute_label (SysprofCellRendererProgress *cellprogress) +{ + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + char *label; + + if (priv->text) + label = g_strdup (priv->text); + else if (priv->pulse < 0) + label = g_strdup_printf (C_("progress bar label", "%d %%"), priv->value); + else + label = NULL; + + g_free (priv->label); + priv->label = label; +} + +static void +sysprof_cell_renderer_progress_set_value (SysprofCellRendererProgress *cellprogress, + int value) +{ + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + if (priv->value != value) + { + priv->value = value; + recompute_label (cellprogress); + g_object_notify (G_OBJECT (cellprogress), "value"); + } +} + +static void +sysprof_cell_renderer_progress_set_text (SysprofCellRendererProgress *cellprogress, + const char *text) +{ + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + char *new_text; + + new_text = g_strdup (text); + g_free (priv->text); + priv->text = new_text; + recompute_label (cellprogress); + g_object_notify (G_OBJECT (cellprogress), "text"); +} + +static void +sysprof_cell_renderer_progress_set_pulse (SysprofCellRendererProgress *cellprogress, + int pulse) +{ + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + if (pulse != priv->pulse) + { + if (pulse <= 0) + priv->offset = 0; + else + priv->offset = pulse; + g_object_notify (G_OBJECT (cellprogress), "pulse"); + } + + priv->pulse = pulse; + recompute_label (cellprogress); +} + +static void +sysprof_cell_renderer_progress_finalize (GObject *object) +{ + SysprofCellRendererProgress *cellprogress = SYSPROF_CELL_RENDERER_PROGRESS (object); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + g_free (priv->text); + g_free (priv->label); + + G_OBJECT_CLASS (sysprof_cell_renderer_progress_parent_class)->finalize (object); +} + +static void +sysprof_cell_renderer_progress_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + SysprofCellRendererProgress *cellprogress = SYSPROF_CELL_RENDERER_PROGRESS (object); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + switch (param_id) + { + case PROP_VALUE: + g_value_set_int (value, priv->value); + break; + case PROP_TEXT: + g_value_set_string (value, priv->text); + break; + case PROP_PULSE: + g_value_set_int (value, priv->pulse); + break; + case PROP_TEXT_XALIGN: + g_value_set_float (value, priv->text_xalign); + break; + case PROP_TEXT_YALIGN: + g_value_set_float (value, priv->text_yalign); + break; + case PROP_ORIENTATION: + g_value_set_enum (value, priv->orientation); + break; + case PROP_INVERTED: + g_value_set_boolean (value, priv->inverted); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + } +} + +static void +sysprof_cell_renderer_progress_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + SysprofCellRendererProgress *cellprogress = SYSPROF_CELL_RENDERER_PROGRESS (object); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + switch (param_id) + { + case PROP_VALUE: + sysprof_cell_renderer_progress_set_value (cellprogress, + g_value_get_int (value)); + break; + case PROP_TEXT: + sysprof_cell_renderer_progress_set_text (cellprogress, + g_value_get_string (value)); + break; + case PROP_PULSE: + sysprof_cell_renderer_progress_set_pulse (cellprogress, + g_value_get_int (value)); + break; + case PROP_TEXT_XALIGN: + priv->text_xalign = g_value_get_float (value); + break; + case PROP_TEXT_YALIGN: + priv->text_yalign = g_value_get_float (value); + break; + case PROP_ORIENTATION: + if (priv->orientation != g_value_get_enum (value)) + { + priv->orientation = g_value_get_enum (value); + g_object_notify_by_pspec (object, pspec); + } + break; + case PROP_INVERTED: + if (priv->inverted != g_value_get_boolean (value)) + { + priv->inverted = g_value_get_boolean (value); + g_object_notify_by_pspec (object, pspec); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + } +} + +static void +compute_dimensions (GtkCellRenderer *cell, + GtkWidget *widget, + const char *text, + int *width, + int *height) +{ + PangoRectangle logical_rect; + PangoLayout *layout; + int xpad, ypad; + + layout = gtk_widget_create_pango_layout (widget, text); + pango_layout_get_pixel_extents (layout, NULL, &logical_rect); + + gtk_cell_renderer_get_padding (cell, &xpad, &ypad); + + if (width) + *width = logical_rect.width + xpad * 2; + + if (height) + *height = logical_rect.height + ypad * 2; + + g_object_unref (layout); +} + +static void +sysprof_cell_renderer_progress_get_preferred_width (GtkCellRenderer *cell, + GtkWidget *widget, + int *minimum, + int *natural) +{ + SysprofCellRendererProgress *self = SYSPROF_CELL_RENDERER_PROGRESS (cell); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (self); + int w, h; + int size; + + if (priv->min_w < 0) + { + char *text = g_strdup_printf (C_("progress bar label", "%d %%"), 100); + compute_dimensions (cell, widget, text, + &priv->min_w, + &priv->min_h); + g_free (text); + } + + compute_dimensions (cell, widget, priv->label, &w, &h); + + size = MAX (priv->min_w, w); + + if (minimum != NULL) + *minimum = size; + if (natural != NULL) + *natural = size; +} + +static void +sysprof_cell_renderer_progress_get_preferred_height (GtkCellRenderer *cell, + GtkWidget *widget, + int *minimum, + int *natural) +{ + SysprofCellRendererProgress *self = SYSPROF_CELL_RENDERER_PROGRESS (cell); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (self); + int w, h; + int size; + + if (priv->min_w < 0) + { + char *text = g_strdup_printf (C_("progress bar label", "%d %%"), 100); + compute_dimensions (cell, widget, text, + &priv->min_w, + &priv->min_h); + g_free (text); + } + + compute_dimensions (cell, widget, priv->label, &w, &h); + + size = MIN (priv->min_h, h); + + if (minimum != NULL) + *minimum = size; + if (natural != NULL) + *natural = size; +} + +static inline int +get_bar_size (int pulse, + int value, + int full_size) +{ + int bar_size; + + if (pulse < 0) + bar_size = full_size * MAX (0, value) / 100; + else if (pulse == 0) + bar_size = 0; + else if (pulse == G_MAXINT) + bar_size = full_size; + else + bar_size = MAX (2, full_size / 5); + + return bar_size; +} + +static inline int +get_bar_position (int start, + int full_size, + int bar_size, + int pulse, + int offset, + gboolean is_rtl) +{ + int position; + + if (pulse < 0 || pulse == 0 || pulse == G_MAXINT) + { + position = is_rtl ? (start + full_size - bar_size) : start; + } + else + { + position = (is_rtl ? offset + 12 : offset) % 24; + if (position > 12) + position = 24 - position; + position = start + full_size * position / 15; + } + + return position; +} + +static void +sysprof_cell_renderer_progress_snapshot (GtkCellRenderer *cell, + GtkSnapshot *snapshot, + GtkWidget *widget, + const GdkRectangle *background_area, + const GdkRectangle *cell_area, + GtkCellRendererState flags) +{ + SysprofCellRendererProgress *cellprogress = SYSPROF_CELL_RENDERER_PROGRESS (cell); + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + GtkStyleContext *context; + GtkBorder padding; + PangoLayout *layout; + PangoRectangle logical_rect; + int x, y, w, h, x_pos, y_pos, bar_position, bar_size, start, full_size; + int xpad, ypad; + GdkRectangle clip; + gboolean is_rtl; + + context = gtk_widget_get_style_context (widget); + is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL; + + gtk_cell_renderer_get_padding (cell, &xpad, &ypad); + x = cell_area->x + xpad; + y = cell_area->y + ypad; + w = cell_area->width - xpad * 2; + h = cell_area->height - ypad * 2; + + gtk_style_context_save (context); + gtk_style_context_add_class (context, "trough"); + + gtk_snapshot_render_background (snapshot, context, x, y, w, h); + gtk_snapshot_render_frame (snapshot, context, x, y, w, h); + + gtk_style_context_get_padding (context, &padding); + + x += padding.left; + y += padding.top; + w -= padding.left + padding.right; + h -= padding.top + padding.bottom; + + gtk_style_context_restore (context); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + clip.y = y; + clip.height = h; + + start = x; + full_size = w; + + bar_size = get_bar_size (priv->pulse, priv->value, full_size); + + if (!priv->inverted) + bar_position = get_bar_position (start, full_size, bar_size, + priv->pulse, priv->offset, is_rtl); + else + bar_position = get_bar_position (start, full_size, bar_size, + priv->pulse, priv->offset, !is_rtl); + + clip.width = bar_size; + clip.x = bar_position; + } + else + { + clip.x = x; + clip.width = w; + + start = y; + full_size = h; + + bar_size = get_bar_size (priv->pulse, priv->value, full_size); + + if (priv->inverted) + bar_position = get_bar_position (start, full_size, bar_size, + priv->pulse, priv->offset, TRUE); + else + bar_position = get_bar_position (start, full_size, bar_size, + priv->pulse, priv->offset, FALSE); + + clip.height = bar_size; + clip.y = bar_position; + } + + if (bar_size > 0) + { + gtk_style_context_save (context); + gtk_style_context_add_class (context, "progressbar"); + + gtk_snapshot_render_background (snapshot, context, clip.x, clip.y, clip.width, clip.height); + gtk_snapshot_render_frame (snapshot, context, clip.x, clip.y, clip.width, clip.height); + + gtk_style_context_restore (context); + } + + if (priv->label) + { + float text_xalign; + + layout = gtk_widget_create_pango_layout (widget, priv->label); + pango_layout_get_pixel_extents (layout, NULL, &logical_rect); + + if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_LTR) + text_xalign = 1.0 - priv->text_xalign; + else + text_xalign = priv->text_xalign; + + x_pos = x + padding.left + text_xalign * + (w - padding.left - padding.right - logical_rect.width); + + y_pos = y + padding.top + priv->text_yalign * + (h - padding.top - padding.bottom - logical_rect.height); + + gtk_snapshot_push_clip (snapshot, + &GRAPHENE_RECT_INIT( + clip.x, clip.y, + clip.width, clip.height + )); + + gtk_style_context_save (context); + gtk_style_context_add_class (context, "progressbar"); + + gtk_snapshot_render_layout (snapshot, context, + x_pos, y_pos, + layout); + + gtk_style_context_restore (context); + gtk_snapshot_pop (snapshot); + + gtk_style_context_save (context); + gtk_style_context_add_class (context, "trough"); + + if (bar_position > start) + { + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + clip.x = x; + clip.width = bar_position - x; + } + else + { + clip.y = y; + clip.height = bar_position - y; + } + + gtk_snapshot_push_clip (snapshot, + &GRAPHENE_RECT_INIT( + clip.x, clip.y, + clip.width, clip.height + )); + + gtk_snapshot_render_layout (snapshot, context, + x_pos, y_pos, + layout); + + gtk_snapshot_pop (snapshot); + } + + if (bar_position + bar_size < start + full_size) + { + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + clip.x = bar_position + bar_size; + clip.width = x + w - (bar_position + bar_size); + } + else + { + clip.y = bar_position + bar_size; + clip.height = y + h - (bar_position + bar_size); + } + + gtk_snapshot_push_clip (snapshot, + &GRAPHENE_RECT_INIT( + clip.x, clip.y, + clip.width, clip.height + )); + + gtk_snapshot_render_layout (snapshot, context, + x_pos, y_pos, + layout); + + gtk_snapshot_pop (snapshot); + } + + gtk_style_context_restore (context); + g_object_unref (layout); + } +} + +static void +sysprof_cell_renderer_progress_class_init (SysprofCellRendererProgressClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass); + + object_class->finalize = sysprof_cell_renderer_progress_finalize; + object_class->get_property = sysprof_cell_renderer_progress_get_property; + object_class->set_property = sysprof_cell_renderer_progress_set_property; + + cell_class->get_preferred_width = sysprof_cell_renderer_progress_get_preferred_width; + cell_class->get_preferred_height = sysprof_cell_renderer_progress_get_preferred_height; + cell_class->snapshot = sysprof_cell_renderer_progress_snapshot; + + /** + * SysprofCellRendererProgress:value: + * + * The "value" property determines the percentage to which the + * progress bar will be "filled in". + **/ + g_object_class_install_property (object_class, + PROP_VALUE, + g_param_spec_int ("value", + "Value", + "Value of the progress bar", + 0, 100, 0, + G_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); + + /** + * SysprofCellRendererProgress:text: + * + * The "text" property determines the label which will be drawn + * over the progress bar. Setting this property to %NULL causes the default + * label to be displayed. Setting this property to an empty string causes + * no label to be displayed. + **/ + g_object_class_install_property (object_class, + PROP_TEXT, + g_param_spec_string ("text", + "Text", + "Text on the progress bar", + NULL, + G_PARAM_READWRITE)); + + /** + * SysprofCellRendererProgress:pulse: + * + * Setting this to a non-negative value causes the cell renderer to + * enter "activity mode", where a block bounces back and forth to + * indicate that some progress is made, without specifying exactly how + * much. + * + * Each increment of the property causes the block to move by a little + * bit. + * + * To indicate that the activity has not started yet, set the property + * to zero. To indicate completion, set the property to %G_MAXINT. + */ + g_object_class_install_property (object_class, + PROP_PULSE, + g_param_spec_int ("pulse", + "Pulse", + "Set this to positive values to indicate that some progress is made, but you don’t know how much.", + -1, G_MAXINT, -1, + G_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); + + /** + * SysprofCellRendererProgress:text-xalign: + * + * The "text-xalign" property controls the horizontal alignment of the + * text in the progress bar. Valid values range from 0 (left) to 1 + * (right). Reserved for RTL layouts. + */ + g_object_class_install_property (object_class, + PROP_TEXT_XALIGN, + g_param_spec_float ("text-xalign", + "Text x alignment", + "The horizontal text alignment, from 0 (left) to 1 (right). Reversed for RTL layouts.", + 0.0, 1.0, 0.5, + G_PARAM_READWRITE)); + + /** + * SysprofCellRendererProgress:text-yalign: + * + * The "text-yalign" property controls the vertical alignment of the + * text in the progress bar. Valid values range from 0 (top) to 1 + * (bottom). + */ + g_object_class_install_property (object_class, + PROP_TEXT_YALIGN, + g_param_spec_float ("text-yalign", + "Text y alignment", + "The vertical text alignment, from 0 (top) to 1 (bottom).", + 0.0, 1.0, 0.5, + G_PARAM_READWRITE)); + + g_object_class_override_property (object_class, + PROP_ORIENTATION, + "orientation"); + + g_object_class_install_property (object_class, + PROP_INVERTED, + g_param_spec_boolean ("inverted", + "Inverted", + "Invert the direction in which the progress bar grows", + FALSE, + G_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); +} + +static void +sysprof_cell_renderer_progress_init (SysprofCellRendererProgress *cellprogress) +{ + SysprofCellRendererProgressPrivate *priv = sysprof_cell_renderer_progress_get_instance_private (cellprogress); + + priv->value = 0; + priv->text = NULL; + priv->label = NULL; + priv->min_w = -1; + priv->min_h = -1; + priv->pulse = -1; + priv->offset = 0; + + priv->text_xalign = 0.5; + priv->text_yalign = 0.5; + + priv->orientation = GTK_ORIENTATION_HORIZONTAL, + priv->inverted = FALSE; +} + +/** + * sysprof_cell_renderer_progress_new: + * + * Creates a new `SysprofCellRendererProgress`. + * + * Returns: the new cell renderer + **/ +GtkCellRenderer* +sysprof_cell_renderer_progress_new (void) +{ + return g_object_new (SYSPROF_TYPE_CELL_RENDERER_PROGRESS, NULL); +}
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cell-renderer-progress.h
Added
@@ -0,0 +1,53 @@ +/* gtkcellrendererprogress.h + * Copyright (C) 2002 Naba Kumar <kh_naba@users.sourceforge.net> + * modified by Jörgen Scheibengruber <mfcn@gmx.de> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +/* + * Modified by the GTK+ Team and others 1997-2004. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#pragma once + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define SYSPROF_TYPE_CELL_RENDERER_PROGRESS (sysprof_cell_renderer_progress_get_type ()) +#define SYSPROF_CELL_RENDERER_PROGRESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SYSPROF_TYPE_CELL_RENDERER_PROGRESS, SysprofCellRendererProgress)) +#define SYSPROF_IS_CELL_RENDERER_PROGRESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SYSPROF_TYPE_CELL_RENDERER_PROGRESS)) + +typedef struct _SysprofCellRendererProgress SysprofCellRendererProgress; +typedef struct _SysprofCellRendererProgressClass SysprofCellRendererProgressClass; +typedef struct _SysprofCellRendererProgressPrivate SysprofCellRendererProgressPrivate; + +struct _SysprofCellRendererProgress +{ + GtkCellRenderer parent_instance; +}; + +struct _SysprofCellRendererProgressClass +{ + GtkCellRendererClass parent_class; +}; + +GType sysprof_cell_renderer_progress_get_type (void) G_GNUC_CONST; +GtkCellRenderer *sysprof_cell_renderer_progress_new (void); + +G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-counters-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-counters-aid.c
Changed
@@ -279,6 +279,6 @@ static void sysprof_counters_aid_init (SysprofCountersAid *self) { - sysprof_aid_set_display_name (SYSPROF_AID (self), _("Battery")); - sysprof_aid_set_icon_name (SYSPROF_AID (self), "org.gnome.Sysprof3-symbolic"); + sysprof_aid_set_display_name (SYSPROF_AID (self), _("Counters")); + sysprof_aid_set_icon_name (SYSPROF_AID (self), "org.gnome.Sysprof-symbolic"); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-cpu-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-cpu-aid.c
Changed
@@ -221,7 +221,7 @@ "y-lower", 0.0, "y-upper", 100.0, NULL); - gtk_container_add (GTK_CONTAINER (freq), GTK_WIDGET (freq_row)); + sysprof_visualizer_group_insert (freq, freq_row, -1, FALSE); over_row = g_object_new (SYSPROF_TYPE_LINE_VISUALIZER, "title", _("CPU Usage (All)"), @@ -323,17 +323,17 @@ if (has_usage && !found_combined) sysprof_visualizer_group_insert (usage, over_row, 0, FALSE); else - gtk_widget_destroy (GTK_WIDGET (over_row)); + g_object_unref (g_object_ref_sink (over_row)); if (has_usage) sysprof_display_add_group (present->display, usage); else - gtk_widget_destroy (GTK_WIDGET (usage)); + g_object_unref (g_object_ref_sink (usage)); if (has_freq) sysprof_display_add_group (present->display, freq); else - gtk_widget_destroy (GTK_WIDGET (freq)); + g_object_unref (g_object_ref_sink (freq)); } return counters != NULL;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-depth-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-depth-visualizer.c
Changed
@@ -34,7 +34,8 @@ PointCache *points; guint reload_source; guint mode; - GtkAllocation last_alloc; + int last_width; + int last_height; guint reloading : 1; guint needs_reload : 1; }; @@ -238,34 +239,46 @@ } } -static gboolean -sysprof_depth_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_depth_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofDepthVisualizer *self = (SysprofDepthVisualizer *)widget; GtkAllocation alloc; GdkRectangle clip; const Point *points; - gboolean ret; + cairo_t *cr; guint n_points = 0; GdkRGBA user; GdkRGBA system; g_assert (SYSPROF_IS_DEPTH_VISUALIZER (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); - ret = GTK_WIDGET_CLASS (sysprof_depth_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_depth_visualizer_parent_class)->snapshot (widget, snapshot); if (self->points == NULL) - return ret; + return; gdk_rgba_parse (&user, "#1a5fb4"); gdk_rgba_parse (&system, "#3584e4"); gtk_widget_get_allocation (widget, &alloc); + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); + + /* FIXME: we should abstract visualizer drawing into regions so that we + * can still know the region we're drawing. + */ +#if 0 if (!gdk_cairo_get_clip_rectangle (cr, &clip)) - return ret; + return; +#else + clip.x = alloc.x = 0; + clip.y = alloc.y = 0; + clip.width = alloc.width; + clip.height = alloc.height; +#endif /* Draw user-space stacks */ if (self->mode != SYSPROF_DEPTH_VISUALIZER_KERNEL_ONLY && @@ -355,7 +368,7 @@ cairo_stroke (cr); } - return ret; + cairo_destroy (cr); } static gboolean @@ -372,25 +385,23 @@ { g_assert (SYSPROF_IS_DEPTH_VISUALIZER (self)); - if (self->reload_source) - g_source_remove (self->reload_source); - - self->reload_source = gdk_threads_add_idle (sysprof_depth_visualizer_do_reload, self); + g_clear_handle_id (&self->reload_source, g_source_remove); + self->reload_source = g_idle_add (sysprof_depth_visualizer_do_reload, self); } static void -sysprof_depth_visualizer_size_allocate (GtkWidget *widget, - GtkAllocation *alloc) +sysprof_depth_visualizer_size_allocate (GtkWidget *widget, + int width, + int height, + int baseline) { SysprofDepthVisualizer *self = (SysprofDepthVisualizer *)widget; - GTK_WIDGET_CLASS (sysprof_depth_visualizer_parent_class)->size_allocate (widget, alloc); - - if (alloc->width != self->last_alloc.x || - alloc->height != self->last_alloc.height) + if (width != self->last_width || height != self->last_height) { sysprof_depth_visualizer_queue_reload (SYSPROF_DEPTH_VISUALIZER (widget)); - self->last_alloc = *alloc; + self->last_width = width; + self->last_height = height; } } @@ -400,12 +411,7 @@ SysprofDepthVisualizer *self = (SysprofDepthVisualizer *)object; g_clear_pointer (&self->reader, sysprof_capture_reader_unref); - - if (self->reload_source) - { - g_source_remove (self->reload_source); - self->reload_source = 0; - } + g_clear_handle_id (&self->reload_source, g_source_remove); G_OBJECT_CLASS (sysprof_depth_visualizer_parent_class)->finalize (object); } @@ -419,7 +425,7 @@ object_class->finalize = sysprof_depth_visualizer_finalize; - widget_class->draw = sysprof_depth_visualizer_draw; + widget_class->snapshot = sysprof_depth_visualizer_snapshot; widget_class->size_allocate = sysprof_depth_visualizer_size_allocate; row_class->set_reader = sysprof_depth_visualizer_set_reader;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-details-page.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-details-page.c
Changed
@@ -22,7 +22,6 @@ #include "config.h" -#include <dazzle.h> #include <glib/gi18n.h> #include <string.h> @@ -31,10 +30,9 @@ struct _SysprofDetailsPage { - SysprofPage parent_instance; + GtkWidget parent_instance; /* Template Objects */ - DzlThreeGrid *three_grid; GtkListStore *marks_store; GtkTreeView *marks_view; GtkLabel *counters; @@ -51,7 +49,7 @@ guint next_row; }; -G_DEFINE_TYPE (SysprofDetailsPage, sysprof_details_page, GTK_TYPE_BIN) +G_DEFINE_TYPE (SysprofDetailsPage, sysprof_details_page, GTK_TYPE_WIDGET) #if GLIB_CHECK_VERSION(2, 56, 0) # define _g_date_time_new_from_iso8601 g_date_time_new_from_iso8601 @@ -77,11 +75,27 @@ #endif static void +sysprof_details_page_dispose (GObject *object) +{ + SysprofDetailsPage *self = (SysprofDetailsPage *)object; + GtkWidget *child; + + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); + + G_OBJECT_CLASS (sysprof_details_page_parent_class)->dispose (object); +} + +static void sysprof_details_page_class_init (SysprofDetailsPageClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = sysprof_details_page_dispose; gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-details-page.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, allocations); gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, counters); gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, cpu_label); @@ -94,9 +108,6 @@ gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, processes); gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, samples); gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, start_time); - gtk_widget_class_bind_template_child (widget_class, SysprofDetailsPage, three_grid); - - g_type_ensure (DZL_TYPE_THREE_GRID); } static void @@ -255,30 +266,6 @@ } void -sysprof_details_page_add_item (SysprofDetailsPage *self, - GtkWidget *left, - GtkWidget *center) -{ - g_return_if_fail (SYSPROF_IS_DETAILS_PAGE (self)); - g_return_if_fail (!left || GTK_IS_WIDGET (left)); - g_return_if_fail (!center || GTK_IS_WIDGET (center)); - - if (left) - gtk_container_add_with_properties (GTK_CONTAINER (self->three_grid), left, - "row", self->next_row, - "column", DZL_THREE_GRID_COLUMN_LEFT, - NULL); - - if (center) - gtk_container_add_with_properties (GTK_CONTAINER (self->three_grid), center, - "row", self->next_row, - "column", DZL_THREE_GRID_COLUMN_CENTER, - NULL); - - self->next_row++; -} - -void sysprof_details_page_add_mark (SysprofDetailsPage *self, const gchar *mark, gint64 min,
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-details-page.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-details-page.h
Changed
@@ -39,7 +39,7 @@ #define SYSPROF_TYPE_DETAILS_PAGE (sysprof_details_page_get_type()) -G_DECLARE_FINAL_TYPE (SysprofDetailsPage, sysprof_details_page, SYSPROF, DETAILS_PAGE, GtkBin) +G_DECLARE_FINAL_TYPE (SysprofDetailsPage, sysprof_details_page, SYSPROF, DETAILS_PAGE, GtkWidget) GtkWidget *sysprof_details_page_new (void); void sysprof_details_page_set_reader (SysprofDetailsPage *self, @@ -53,8 +53,5 @@ gint64 max, gint64 avg, gint64 hits); -void sysprof_details_page_add_item (SysprofDetailsPage *self, - GtkWidget *left, - GtkWidget *center); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-details-page.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-details-page.ui
Changed
@@ -1,308 +1,175 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.22"/> - <template class="SysprofDetailsPage" parent="GtkBin"> - <property name="can_focus">False</property> + <template class="SysprofDetailsPage" parent="GtkWidget"> <child> - <object class="GtkScrolledWindow"> - <property name="hscrollbar-policy">never</property> - <property name="propagate-natural-height">true</property> - <property name="visible">true</property> + <object class="AdwPreferencesPage"> <child> - <object class="DzlThreeGrid" id="three_grid"> - <property name="margin">36</property> - <property name="column-spacing">12</property> - <property name="row-spacing">6</property> - <property name="visible">true</property> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Capture</property> <child> - <object class="GtkLabel"> - <property name="visible">true</property> - <property name="label" translatable="yes">Filename</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">true</property> - <property name="label" translatable="yes">Captured at</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">1</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Duration</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">2</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">CPU Model</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">3</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="margin-top">12</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Samples Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">4</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Marks Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">5</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Processes Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">6</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Forks Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">7</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Counters Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">8</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="margin-bottom">12</property> - <property name="label" translatable="yes">Allocations Captured</property> - <property name="xalign">1</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">9</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="filename"> - <property name="width-chars">35</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Location</property> + <child type="suffix"> + <object class="GtkLabel" id="filename"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">1</property> - <property name="row">0</property> - </packing> </child> <child> - <object class="GtkLabel" id="start_time"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Recorded At</property> + <child type="suffix"> + <object class="GtkLabel" id="start_time"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">1</property> - </packing> </child> <child> - <object class="GtkLabel" id="duration"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Duration</property> + <child type="suffix"> + <object class="GtkLabel" id="duration"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">2</property> - </packing> </child> <child> - <object class="GtkLabel" id="cpu_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">end</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">CPU Model</property> + <child type="suffix"> + <object class="GtkLabel" id="cpu_label"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">3</property> - </packing> </child> + </object> + </child> + <child> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Statistics</property> <child> - <object class="GtkLabel" id="samples"> - <property name="margin-top">12</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Stack Traces</property> + <property name="subtitle" translatable="yes">Number of stack traces sampled for performance callgraphs</property> + <child type="suffix"> + <object class="GtkLabel" id="samples"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">4</property> - </packing> </child> <child> - <object class="GtkLabel" id="marks"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Marks</property> + <property name="subtitle" translatable="yes">Number of marks seen</property> + <child type="suffix"> + <object class="GtkLabel" id="marks"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">5</property> - </packing> </child> <child> - <object class="GtkLabel" id="processes"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Processes</property> + <property name="subtitle" translatable="yes">Number of processes seen</property> + <child type="suffix"> + <object class="GtkLabel" id="processes"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">6</property> - </packing> </child> <child> - <object class="GtkLabel" id="forks"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Forks</property> + <property name="subtitle" translatable="yes">Number of times a process forked</property> + <child type="suffix"> + <object class="GtkLabel" id="forks"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">7</property> - </packing> </child> <child> - <object class="GtkLabel" id="counters"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Memory Allocations</property> + <property name="subtitle" translatable="yes">Number of stack traces recorded for tracing memory allocations</property> + <child type="suffix"> + <object class="GtkLabel" id="allocations"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">8</property> - </packing> </child> <child> - <object class="GtkLabel" id="allocations"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="ellipsize">start</property> - <property name="margin-bottom">12</property> - <property name="xalign">0</property> - <property name="selectable">True</property> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Counters</property> + <property name="subtitle" translatable="yes">Number of recorded counter values</property> + <child type="suffix"> + <object class="GtkLabel" id="counters"> + <property name="hexpand">true</property> + <property name="xalign">1</property> + <property name="ellipsize">start</property> + <property name="selectable">true</property> + </object> + </child> </object> - <packing> - <property name="column">center</property> - <property name="row">9</property> - </packing> </child> + </object> + </child> + <child> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Statistics</property> <child> <object class="GtkFrame"> - <property name="visible">True</property> - <property name="shadow-type">in</property> - <property name="margin-bottom">12</property> <child> <object class="GtkTreeView" id="marks_view"> <property name="model">marks_store</property> <property name="width-request">500</property> <property name="height-request">100</property> <property name="enable-grid-lines">both</property> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn"> <property name="expand">true</property> @@ -372,10 +239,6 @@ </object> </child> </object> - <packing> - <property name="column">center</property> - <property name="row">10</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-diskstat-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-diskstat-aid.c
Changed
@@ -245,7 +245,7 @@ if (counters->len > 0) sysprof_display_add_group (present->display, group); else - gtk_widget_destroy (GTK_WIDGET (group)); + g_object_unref (g_object_ref_sink (group)); } return counters != NULL;
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-display-private.h
Added
@@ -0,0 +1,29 @@ +/* sysprof-display-private.h + * + * Copyright 2021 Christian Hergert <chergert@redhat.com> + * + * 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#pragma once + +#include "sysprof-display.h" + +G_BEGIN_DECLS + +void _sysprof_display_destroy (SysprofDisplay *self); + +G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-display.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-display.c
Changed
@@ -22,11 +22,12 @@ #include "config.h" -#include <dazzle.h> #include <glib/gi18n.h> +#include "egg-paned-private.h" + #include "sysprof-details-page.h" -#include "sysprof-display.h" +#include "sysprof-display-private.h" #include "sysprof-profiler-assistant.h" #include "sysprof-failed-state-view.h" #include "sysprof-recording-state-view.h" @@ -72,7 +73,7 @@ SysprofCaptureFlags flags; } SysprofDisplayPrivate; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofDisplay, sysprof_display, GTK_TYPE_BIN) +G_DEFINE_TYPE_WITH_PRIVATE (SysprofDisplay, sysprof_display, GTK_TYPE_WIDGET) enum { PROP_0, @@ -96,10 +97,7 @@ if ((parent = gtk_widget_get_parent (GTK_WIDGET (self))) && GTK_IS_NOTEBOOK (parent)) { g_autofree gchar *title = sysprof_display_dup_title (self); - - gtk_container_child_set (GTK_CONTAINER (parent), GTK_WIDGET (self), - "menu-label", title, - NULL); + gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (parent), GTK_WIDGET (self), title); } g_object_notify_by_pspec (G_OBJECT (self), properties PROP_TITLE); @@ -126,6 +124,7 @@ g_object_notify_by_pspec (G_OBJECT (self), properties PROP_RECORDING); g_object_notify_by_pspec (G_OBJECT (self), properties PROP_TITLE); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_REPLAY); } static void @@ -319,19 +318,17 @@ /* Opportunistically load pages */ if (priv->reader != NULL) { - GList *pages = gtk_container_get_children (GTK_CONTAINER (priv->pages)); - - for (const GList *iter = pages; iter; iter = iter->next) + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (priv->pages)); + child; + child = gtk_widget_get_next_sibling (child)) { - if (SYSPROF_IS_PAGE (iter->data)) - sysprof_page_load_async (iter->data, + if (SYSPROF_IS_PAGE (child)) + sysprof_page_load_async (SYSPROF_PAGE (child), priv->reader, selection, priv->filter, NULL, NULL, NULL); } - - g_list_free (pages); } } } @@ -372,15 +369,21 @@ } static void -sysprof_display_finalize (GObject *object) +sysprof_display_dispose (GObject *object) { SysprofDisplay *self = (SysprofDisplay *)object; SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self); + if (priv->stack) + { + gtk_widget_unparent (GTK_WIDGET (priv->stack)); + priv->stack = NULL; + } + g_clear_pointer (&priv->reader, sysprof_capture_reader_unref); g_clear_pointer (&priv->filter, sysprof_capture_condition_unref); - G_OBJECT_CLASS (sysprof_display_parent_class)->finalize (object); + G_OBJECT_CLASS (sysprof_display_parent_class)->dispose (object); } static void @@ -443,7 +446,7 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = sysprof_display_finalize; + object_class->dispose = sysprof_display_dispose; object_class->get_property = sysprof_display_get_property; object_class->set_property = sysprof_display_set_property; @@ -453,6 +456,7 @@ "/org/gnome/sysprof/css/SysprofDisplay-shared.css"); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-display.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "SysprofDisplay"); gtk_widget_class_bind_template_child_private (widget_class, SysprofDisplay, assistant); gtk_widget_class_bind_template_child_private (widget_class, SysprofDisplay, details); @@ -499,7 +503,7 @@ g_object_class_install_properties (object_class, N_PROPS, properties); - g_type_ensure (DZL_TYPE_MULTI_PANED); + g_type_ensure (EGG_TYPE_PANED); g_type_ensure (SYSPROF_TYPE_DETAILS_PAGE); g_type_ensure (SYSPROF_TYPE_FAILED_STATE_VIEW); g_type_ensure (SYSPROF_TYPE_PROFILER_ASSISTANT); @@ -552,7 +556,7 @@ if (priv->reader != NULL) _sysprof_visualizer_group_set_reader (group, priv->reader); - gtk_container_add (GTK_CONTAINER (priv->visualizers), GTK_WIDGET (group)); + sysprof_visualizers_frame_add_group (priv->visualizers, group); } void @@ -567,10 +571,7 @@ g_return_if_fail (SYSPROF_IS_PAGE (page)); title = sysprof_page_get_title (page); - - gtk_container_add_with_properties (GTK_CONTAINER (priv->pages), GTK_WIDGET (page), - "title", title, - NULL); + gtk_stack_add_titled (priv->pages, GTK_WIDGET (page), NULL, title); selection = sysprof_visualizers_frame_get_selection (priv->visualizers); @@ -869,6 +870,8 @@ (const SysprofMarkStat *)(gpointer)marks->data, marks->len); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_REPLAY); + return g_task_propagate_boolean (G_TASK (result), error); } @@ -933,7 +936,6 @@ SysprofCaptureReader *reader; SysprofSelection *selection; GCancellable *cancellable; - GList *pages; g_assert (SYSPROF_IS_DISPLAY (self)); g_assert (G_IS_ASYNC_RESULT (result)); @@ -956,17 +958,17 @@ sysprof_details_page_set_reader (priv->details, reader); /* Opportunistically load pages */ - pages = gtk_container_get_children (GTK_CONTAINER (priv->pages)); - for (const GList *iter = pages; iter; iter = iter->next) + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (priv->pages)); + child; + child = gtk_widget_get_next_sibling (child)) { - if (SYSPROF_IS_PAGE (iter->data)) - sysprof_page_load_async (iter->data, + if (SYSPROF_IS_PAGE (child)) + sysprof_page_load_async (SYSPROF_PAGE (child), reader, selection, priv->filter, NULL, NULL, NULL); } - g_list_free (pages); gtk_stack_set_visible_child_name (priv->stack, "view"); } @@ -1097,16 +1099,23 @@ error->message); g_signal_connect (dialog, "response", - G_CALLBACK (gtk_widget_destroy), + G_CALLBACK (gtk_window_destroy), NULL); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_window_present (GTK_WINDOW (dialog)); - gtk_widget_destroy (GTK_WIDGET (self)); + + _sysprof_display_destroy (self); return; } + /* Jump right to the "view" page to avoid a quick view of the + * assistants page when loading. + */ + if (g_strcmp0 ("assistant", gtk_stack_get_visible_child_name (priv->stack)) == 0) + gtk_stack_set_visible_child_name (priv->stack, "view"); + sysprof_display_load_async (self, reader, NULL, NULL, NULL); update_title_child_property (self); } @@ -1200,36 +1209,21 @@ return GTK_WIDGET (g_steal_pointer (&self)); } -void -sysprof_display_save (SysprofDisplay *self) +static void +on_save_response_cb (SysprofDisplay *self, + int res, + GtkFileChooserNative *chooser) { SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self); g_autoptr(GFile) file = NULL; - GtkFileChooserNative *native; - GtkWindow *parent; - gint res; - - g_return_if_fail (SYSPROF_IS_DISPLAY (self)); - g_return_if_fail (priv->reader != NULL); - - parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); - native = gtk_file_chooser_native_new (_("Save Recording"), - parent, - GTK_FILE_CHOOSER_ACTION_SAVE, - _("Save"), - _("Cancel")); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (native), TRUE); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (native), TRUE); - gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER (native), TRUE); - gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (native), "capture.syscap"); - - res = gtk_native_dialog_run (GTK_NATIVE_DIALOG (native)); + g_assert (SYSPROF_IS_DISPLAY (self)); + g_assert (GTK_IS_FILE_CHOOSER_NATIVE (chooser)); switch (res) { case GTK_RESPONSE_ACCEPT: - file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (native)); + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser)); if (g_file_is_native (file)) { @@ -1239,17 +1233,24 @@ if (!sysprof_capture_reader_save_as_with_error (priv->reader, path, &error)) { GtkWidget *msg; + GtkNative *root; - msg = gtk_message_dialog_new (parent, + root = gtk_widget_get_native (GTK_WIDGET (self)); + msg = gtk_message_dialog_new (GTK_WINDOW (root), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Failed to save recording: %s"), error->message); gtk_window_present (GTK_WINDOW (msg)); - g_signal_connect (msg, "response", G_CALLBACK (gtk_widget_destroy), NULL); + g_signal_connect (msg, "response", G_CALLBACK (gtk_window_destroy), NULL); } } + else + { + g_autofree char *uri = g_file_get_uri (file); + g_warning ("%s is not native, cannot open", uri); + } break; @@ -1258,7 +1259,35 @@ } g_object_notify_by_pspec (G_OBJECT (self), properties PROP_TITLE); - gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (native)); + gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (chooser)); +} + +void +sysprof_display_save (SysprofDisplay *self) +{ + SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self); + GtkFileChooserNative *native; + GtkNative *root; + + g_return_if_fail (SYSPROF_IS_DISPLAY (self)); + g_return_if_fail (priv->reader != NULL); + + root = gtk_widget_get_native (GTK_WIDGET (self)); + native = gtk_file_chooser_native_new (_("Save Recording"), + GTK_WINDOW (root), + GTK_FILE_CHOOSER_ACTION_SAVE, + _("Save"), + _("Cancel")); + gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER (native), TRUE); + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (native), "capture.syscap"); + + g_signal_connect_object (native, + "response", + G_CALLBACK (on_save_response_cb), + self, + G_CONNECT_SWAPPED); + + gtk_native_dialog_show (GTK_NATIVE_DIALOG (native)); } void @@ -1294,3 +1323,15 @@ selection = sysprof_visualizers_frame_get_selection (priv->visualizers); sysprof_selection_select_range (selection, begin_time, end_time); } + +void +_sysprof_display_destroy (SysprofDisplay *self) +{ + GtkWidget *parent; + + g_return_if_fail (SYSPROF_IS_DISPLAY (self)); + + if ((parent = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_NOTEBOOK))) + gtk_notebook_remove_page (GTK_NOTEBOOK (parent), + gtk_notebook_page_num (GTK_NOTEBOOK (parent), GTK_WIDGET (self))); +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-display.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-display.h
Changed
@@ -32,11 +32,11 @@ #define SYSPROF_TYPE_DISPLAY (sysprof_display_get_type()) SYSPROF_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (SysprofDisplay, sysprof_display, SYSPROF, DISPLAY, GtkBin) +G_DECLARE_DERIVABLE_TYPE (SysprofDisplay, sysprof_display, SYSPROF, DISPLAY, GtkWidget) struct _SysprofDisplayClass { - GtkBinClass parent_class; + GtkWidgetClass parent_class; /*< private >*/ gpointer _reserved16;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-display.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-display.ui
Changed
@@ -1,77 +1,69 @@ <?xml version="1.0" encoding="UTF-8"?> <interface> - <template class="SysprofDisplay" parent="GtkBin"> + <requires lib="gtk" version="4.0"/> + <template class="SysprofDisplay" parent="GtkWidget"> <child> <object class="GtkStack" id="stack"> - <property name="homogeneous">false</property> - <property name="visible">true</property> + <property name="hhomogeneous">0</property> + <property name="vhomogeneous">0</property> <child> - <object class="SysprofProfilerAssistant" id="assistant"> - <property name="visible">true</property> - </object> - <packing> + <object class="GtkStackPage"> <property name="name">assistant</property> - </packing> + <property name="child"> + <object class="SysprofProfilerAssistant" id="assistant"> + </object> + </property> + </object> </child> <child> - <object class="DzlMultiPaned"> - <property name="orientation">vertical</property> - <property name="visible">true</property> - <child> - <object class="GtkBox"> - <property name="vexpand">false</property> + <object class="GtkStackPage"> + <property name="name">view</property> + <property name="child"> + <object class="EggPaned"> <property name="orientation">vertical</property> - <property name="visible">true</property> <child> <object class="SysprofVisualizersFrame" id="visualizers"> - <property name="vexpand">true</property> - <property name="visible">true</property> + <property name="vexpand">false</property> </object> </child> <child> - <object class="GtkSeparator"> - <property name="orientation">horizontal</property> - <property name="visible">true</property> - </object> - </child> - </object> - </child> - <child> - <object class="GtkStack" id="pages"> - <property name="homogeneous">false</property> - <property name="vexpand">true</property> - <property name="visible">true</property> - <child> - <object class="SysprofDetailsPage" id="details"> - <property name="visible">true</property> + <object class="GtkStack" id="pages"> + <property name="hhomogeneous">0</property> + <property name="vhomogeneous">0</property> + <property name="vexpand">true</property> + <child> + <object class="GtkStackPage"> + <property name="title" translatable="yes">Details</property> + <property name="name">details</property> + <property name="child"> + <object class="SysprofDetailsPage" id="details"> + </object> + </property> + </object> + </child> </object> - <packing> - <property name="title" translatable="yes">Details</property> - <property name="name">details</property> - </packing> </child> </object> - </child> + </property> </object> - <packing> - <property name="name">view</property> - </packing> </child> <child> - <object class="SysprofRecordingStateView" id="recording_view"> - <property name="visible">true</property> - </object> - <packing> + <object class="GtkStackPage"> <property name="name">record</property> - </packing> + <property name="child"> + <object class="SysprofRecordingStateView" id="recording_view"> + </object> + </property> + </object> </child> <child> - <object class="SysprofFailedStateView" id="failed_view"> - <property name="visible">true</property> - </object> - <packing> + <object class="GtkStackPage"> <property name="name">failed</property> - </packing> + <property name="child"> + <object class="SysprofFailedStateView" id="failed_view"> + </object> + </property> + </object> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-duplex-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-duplex-visualizer.c
Changed
@@ -296,35 +296,37 @@ g_task_run_in_thread (task, sysprof_duplex_visualizer_worker); } -static gboolean -sysprof_duplex_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_duplex_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { static const gdouble dashes = { 1.0, 2.0 }; SysprofDuplexVisualizer *self = (SysprofDuplexVisualizer *)widget; PangoFontDescription *font_desc; GtkStyleContext *style_context; PangoLayout *layout; + cairo_t *cr; GtkAllocation alloc; - GdkRectangle clip; - gboolean ret; GdkRGBA fg; guint mid; g_assert (SYSPROF_IS_DUPLEX_VISUALIZER (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); + + /* FIXME: This should all be drawn offscreen and then drawn to the snapshot + * using GdkMemoryTexture so that we can avoid extra GPU uploads. + */ gtk_widget_get_allocation (widget, &alloc); - gdk_cairo_get_clip_rectangle (cr, &clip); mid = alloc.height / 2; - ret = GTK_WIDGET_CLASS (sysprof_duplex_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_duplex_visualizer_parent_class)->snapshot (widget, snapshot); + + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); style_context = gtk_widget_get_style_context (widget); - gtk_style_context_get_color (style_context, - gtk_style_context_get_state (style_context), - &fg); + gtk_style_context_get_color (style_context, &fg); fg.alpha *= 0.4; /* Draw our center line */ @@ -366,6 +368,7 @@ n_fpoints); /* Skip past data that we won't see anyway */ +#if 0 for (p = 0; p < n_fpoints; p++) { if (pointsp.x >= clip.x) @@ -373,7 +376,8 @@ } if (p >= n_fpoints) - return ret; + return; +#endif /* But get at least one data point to anchor out of view */ if (p > 0) @@ -398,8 +402,10 @@ last_x = pointsi.x; last_y = pointsi.y; +#if 0 if (pointsi.x > clip.x + clip.width) break; +#endif } cairo_line_to (cr, last_x, mid); @@ -436,6 +442,7 @@ points, n_fpoints); +#if 0 /* Skip past data that we won't see anyway */ for (p = 0; p < n_fpoints; p++) { @@ -445,6 +452,7 @@ if (p >= n_fpoints) return ret; +#endif /* But get at least one data point to anchor out of view */ if (p > 0) @@ -469,8 +477,10 @@ last_x = pointsi.x; last_y = pointsi.y; +#if 0 if (pointsi.x > clip.x + clip.width) break; +#endif } cairo_line_to (cr, last_x, mid); @@ -510,7 +520,7 @@ pango_font_description_free (font_desc); g_object_unref (layout); - return ret; + cairo_destroy (cr); } static void @@ -534,7 +544,7 @@ object_class->finalize = sysprof_duplex_visualizer_finalize; - widget_class->draw = sysprof_duplex_visualizer_draw; + widget_class->snapshot = sysprof_duplex_visualizer_snapshot; visualizer_class->set_reader = sysprof_duplex_visualizer_set_reader; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor-row.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor-row.c
Changed
@@ -127,9 +127,9 @@ } static void -sysprof_environ_editor_row_destroy (GtkWidget *widget) +sysprof_environ_editor_row_dispose (GObject *object) { - SysprofEnvironEditorRow *self = (SysprofEnvironEditorRow *)widget; + SysprofEnvironEditorRow *self = (SysprofEnvironEditorRow *)object; if (self->variable != NULL) { @@ -137,7 +137,7 @@ g_clear_object (&self->variable); } - GTK_WIDGET_CLASS (sysprof_environ_editor_row_parent_class)->destroy (widget); + G_OBJECT_CLASS (sysprof_environ_editor_row_parent_class)->dispose (object); } static void @@ -184,11 +184,10 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + object_class->dispose = sysprof_environ_editor_row_dispose; object_class->get_property = sysprof_environ_editor_row_get_property; object_class->set_property = sysprof_environ_editor_row_set_property; - widget_class->destroy = sysprof_environ_editor_row_destroy; - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-environ-editor-row.ui"); gtk_widget_class_bind_template_child (widget_class, SysprofEnvironEditorRow, delete_button); gtk_widget_class_bind_template_child (widget_class, SysprofEnvironEditorRow, key_entry);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor-row.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor-row.ui
Changed
@@ -1,78 +1,38 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.10"/> <template class="SysprofEnvironEditorRow" parent="GtkListBoxRow"> - <property name="can_focus">False</property> <child> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="spacing">12</property> <child> <object class="GtkEntry" id="key_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="margin_start">3</property> - <property name="has_frame">False</property> + <property name="margin-start">3</property> + <property name="has-frame">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkLabel" id="eq_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="label">=</property> <style> <class name="dim-label"/> </style> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkEntry" id="value_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> <property name="hexpand">True</property> - <property name="has_frame">False</property> + <property name="has-frame">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> <child> <object class="GtkButton" id="delete_button"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="receives_default">False</property> - <property name="tooltip_text" translatable="yes">Remove environment variable</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">list-remove-symbolic</property> - </object> - </child> + <property name="tooltip-text" translatable="yes">Remove environment variable</property> + <property name="icon-name">list-remove-symbolic</property> <style> <class name="image-button"/> <class name="flat"/> </style> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor.c
Changed
@@ -30,13 +30,14 @@ struct _SysprofEnvironEditor { - GtkListBox parent_instance; + GtkWidget parent_instance; + GtkListBox *list_box; SysprofEnviron *environ; GtkWidget *dummy_row; SysprofEnvironVariable *dummy; }; -G_DEFINE_TYPE (SysprofEnvironEditor, sysprof_environ_editor, GTK_TYPE_LIST_BOX) +G_DEFINE_TYPE (SysprofEnvironEditor, sysprof_environ_editor, GTK_TYPE_WIDGET) enum { PROP_0, @@ -68,8 +69,11 @@ g_assert (SYSPROF_IS_ENVIRON_EDITOR (self)); label = g_object_new (GTK_TYPE_LABEL, - "label", _("New variable…"), - "margin", 6, + "label", _("New environment variable…"), + "margin-start", 6, + "margin-end", 6, + "margin-top", 6, + "margin-bottom", 6, "visible", TRUE, "xalign", 0.0f, NULL); @@ -114,8 +118,7 @@ g_assert (SYSPROF_IS_ENVIRON_EDITOR (self)); g_assert (SYSPROF_IS_ENVIRON (self->environ)); - gtk_list_box_bind_model (GTK_LIST_BOX (self), NULL, NULL, NULL, NULL); - + gtk_list_box_bind_model (self->list_box, NULL, NULL, NULL, NULL); g_clear_object (&self->dummy); } @@ -125,12 +128,12 @@ g_assert (SYSPROF_IS_ENVIRON_EDITOR (self)); g_assert (SYSPROF_IS_ENVIRON (self->environ)); - gtk_list_box_bind_model (GTK_LIST_BOX (self), + gtk_list_box_bind_model (self->list_box, G_LIST_MODEL (self->environ), sysprof_environ_editor_create_row, self, NULL); self->dummy_row = sysprof_environ_editor_create_dummy_row (self); - gtk_container_add (GTK_CONTAINER (self), self->dummy_row); + gtk_list_box_append (self->list_box, self->dummy_row); } static void @@ -168,17 +171,19 @@ g_assert (SYSPROF_IS_ENVIRON_EDITOR (self)); g_assert (SYSPROF_IS_ENVIRON_VARIABLE (variable)); - gtk_container_foreach (GTK_CONTAINER (self), find_row_cb, &lookup); + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self->list_box)); + child; + child = gtk_widget_get_next_sibling (child)) + find_row_cb (child, &lookup); return lookup.row; } static void -sysprof_environ_editor_row_activated (GtkListBox *list_box, - GtkListBoxRow *row) +sysprof_environ_editor_row_activated (SysprofEnvironEditor *self, + GtkListBoxRow *row, + GtkListBox *list_box) { - SysprofEnvironEditor *self = (SysprofEnvironEditor *)list_box; - g_assert (GTK_IS_LIST_BOX (list_box)); g_assert (GTK_IS_LIST_BOX_ROW (row)); @@ -196,13 +201,19 @@ } static void -sysprof_environ_editor_destroy (GtkWidget *widget) +sysprof_environ_editor_dispose (GObject *object) { - SysprofEnvironEditor *self = (SysprofEnvironEditor *)widget; + SysprofEnvironEditor *self = (SysprofEnvironEditor *)object; - GTK_WIDGET_CLASS (sysprof_environ_editor_parent_class)->destroy (widget); + if (self->list_box) + { + gtk_widget_unparent (GTK_WIDGET (self->list_box)); + self->list_box = NULL; + } g_clear_object (&self->environ); + + G_OBJECT_CLASS (sysprof_environ_editor_parent_class)->dispose (object); } static void @@ -248,16 +259,12 @@ { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkListBoxClass *list_box_class = GTK_LIST_BOX_CLASS (klass); SysprofThemeManager *theme_manager = sysprof_theme_manager_get_default (); + object_class->dispose = sysprof_environ_editor_dispose; object_class->get_property = sysprof_environ_editor_get_property; object_class->set_property = sysprof_environ_editor_set_property; - widget_class->destroy = sysprof_environ_editor_destroy; - - list_box_class->row_activated = sysprof_environ_editor_row_activated; - properties PROP_ENVIRON = g_param_spec_object ("environ", "Environment", @@ -267,16 +274,26 @@ g_object_class_install_properties (object_class, N_PROPS, properties); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); + sysprof_theme_manager_register_resource (theme_manager, NULL, NULL, "/org/gnome/sysprof/css/SysprofEnvironEditor-shared.css"); } static void sysprof_environ_editor_init (SysprofEnvironEditor *self) { - gtk_list_box_set_selection_mode (GTK_LIST_BOX (self), GTK_SELECTION_NONE); + self->list_box = GTK_LIST_BOX (gtk_list_box_new ()); + gtk_widget_set_parent (GTK_WIDGET (self->list_box), GTK_WIDGET (self)); + + gtk_list_box_set_selection_mode (self->list_box, GTK_SELECTION_NONE); - gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self)), - "environ-editor"); + gtk_widget_add_css_class (GTK_WIDGET (self), "environ-editor"); + + g_signal_connect_object (self->list_box, + "row-activated", + G_CALLBACK (sysprof_environ_editor_row_activated), + self, + G_CONNECT_SWAPPED); } GtkWidget *
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-environ-editor.h
Changed
@@ -28,11 +28,11 @@ #define SYSPROF_TYPE_ENVIRON_EDITOR (sysprof_environ_editor_get_type()) -G_DECLARE_FINAL_TYPE (SysprofEnvironEditor, sysprof_environ_editor, SYSPROF, ENVIRON_EDITOR, GtkListBox) +G_DECLARE_FINAL_TYPE (SysprofEnvironEditor, sysprof_environ_editor, SYSPROF, ENVIRON_EDITOR, GtkWidget) GtkWidget *sysprof_environ_editor_new (void); SysprofEnviron *sysprof_environ_editor_get_environ (SysprofEnvironEditor *self); void sysprof_environ_editor_set_environ (SysprofEnvironEditor *self, - SysprofEnviron *environ); + SysprofEnviron *environ); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.c
Changed
@@ -22,7 +22,7 @@ #include "sysprof-failed-state-view.h" -G_DEFINE_TYPE (SysprofFailedStateView, sysprof_failed_state_view, GTK_TYPE_BIN) +G_DEFINE_TYPE (SysprofFailedStateView, sysprof_failed_state_view, GTK_TYPE_WIDGET) GtkWidget * sysprof_failed_state_view_new (void) @@ -31,10 +31,26 @@ } static void +sysprof_failed_state_view_dispose (GObject *object) +{ + SysprofFailedStateView *self = (SysprofFailedStateView *)object; + GtkWidget *child; + + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); + + G_OBJECT_CLASS (sysprof_failed_state_view_parent_class)->dispose (object); +} + +static void sysprof_failed_state_view_class_init (SysprofFailedStateViewClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + object_class->dispose = sysprof_failed_state_view_dispose; + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-failed-state-view.ui"); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.h
Changed
@@ -27,13 +27,11 @@ #define SYSPROF_TYPE_FAILED_STATE_VIEW (sysprof_failed_state_view_get_type()) -G_DECLARE_DERIVABLE_TYPE (SysprofFailedStateView, sysprof_failed_state_view, SYSPROF, FAILED_STATE_VIEW, GtkBin) +G_DECLARE_DERIVABLE_TYPE (SysprofFailedStateView, sysprof_failed_state_view, SYSPROF, FAILED_STATE_VIEW, GtkWidget) struct _SysprofFailedStateViewClass { - GtkBinClass parent; - - gpointer padding4; + GtkWidgetClass parent; }; GtkWidget *sysprof_failed_state_view_new (void);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-failed-state-view.ui
Changed
@@ -1,9 +1,14 @@ <?xml version="1.0"?> <interface> - <template class="SysprofFailedStateView" parent="GtkBin"> + <template class="SysprofFailedStateView" parent="GtkWidget"> + <property name="vexpand">true</property> + <property name="valign">center</property> <child> <object class="GtkBox"> - <property name="border-width">36</property> + <property name="margin-top">36</property> + <property name="margin-bottom">36</property> + <property name="margin-start">36</property> + <property name="margin-end">36</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <property name="visible">true</property> @@ -17,7 +22,7 @@ </style> </object> </child> - <child> + <child type="end"> <object class="GtkLabel"> <property name="label" translatable="yes">Ouch, that hurt!</property> <property name="visible">true</property> @@ -29,12 +34,8 @@ <attribute name="weight" value="bold"/> </attributes> </object> - <packing> - <property name="pack-type">end</property> - <property name="position">2</property> - </packing> </child> - <child> + <child type="end"> <object class="GtkLabel"> <property name="label" translatable="yes">Something unexpectedly went wrong while trying to profile your system.</property> <property name="use-markup">true</property> @@ -43,20 +44,6 @@ <class name="dim-label"/> </style> </object> - <packing> - <property name="pack-type">end</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="vexpand">true</property> - <property name="visible">true</property> - </object> - <packing> - <property name="position">0</property> - <property name="pack-type">end</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-line-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-line-visualizer.c
Changed
@@ -141,9 +141,9 @@ return ret; } -static gboolean -sysprof_line_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_line_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { static PangoAttrList *attrs = NULL; SysprofLineVisualizer *self = (SysprofLineVisualizer *)widget; @@ -151,28 +151,35 @@ g_autofree gchar *upper = NULL; GtkStyleContext *style_context; PangoLayout *layout; - GtkStateFlags flags; + cairo_t *cr; GtkAllocation alloc; GdkRectangle clip; GdkRGBA foreground; - gboolean ret; g_assert (SYSPROF_IS_LINE_VISUALIZER (widget)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); gtk_widget_get_allocation (widget, &alloc); - ret = GTK_WIDGET_CLASS (sysprof_line_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_line_visualizer_parent_class)->snapshot (widget, snapshot); if (priv->cache == NULL) - return ret; + return; +#if 0 if (!gdk_cairo_get_clip_rectangle (cr, &clip)) return ret; +#else + clip.x = 0; + clip.y = 0; + clip.width = alloc.width; + clip.height = alloc.height; +#endif + + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); style_context = gtk_widget_get_style_context (widget); - flags = gtk_widget_get_state_flags (widget); - gtk_style_context_get_color (style_context, flags, &foreground); + gtk_style_context_get_color (style_context, &foreground); for (guint line = 0; line < priv->lines->len; line++) { @@ -205,7 +212,7 @@ } if (p >= n_fpoints) - return ret; + goto cleanup; if (p > 0) p--; @@ -289,7 +296,8 @@ g_clear_object (&layout); } - return ret; +cleanup: + cairo_destroy (cr); } static void @@ -347,12 +355,10 @@ g_assert (SYSPROF_IS_LINE_VISUALIZER (self)); if (priv->queued_load == 0) - { - priv->queued_load = gdk_threads_add_idle_full (G_PRIORITY_LOW, - sysprof_line_visualizer_do_reload, - self, - NULL); - } + priv->queued_load = g_idle_add_full (G_PRIORITY_LOW, + sysprof_line_visualizer_do_reload, + self, + NULL); } static void @@ -390,11 +396,7 @@ g_clear_pointer (&priv->cache, point_cache_unref); g_clear_pointer (&priv->reader, sysprof_capture_reader_unref); - if (priv->queued_load != 0) - { - g_source_remove (priv->queued_load); - priv->queued_load = 0; - } + g_clear_handle_id (&priv->queued_load, g_source_remove); G_OBJECT_CLASS (sysprof_line_visualizer_parent_class)->finalize (object); } @@ -472,7 +474,7 @@ object_class->get_property = sysprof_line_visualizer_get_property; object_class->set_property = sysprof_line_visualizer_set_property; - widget_class->draw = sysprof_line_visualizer_draw; + widget_class->snapshot = sysprof_line_visualizer_snapshot; visualizer_class->set_reader = sysprof_line_visualizer_set_reader;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-mark-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-mark-visualizer.c
Changed
@@ -70,25 +70,27 @@ return SYSPROF_VISUALIZER (g_steal_pointer (&self)); } -static gboolean -sysprof_mark_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_mark_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofMarkVisualizer *self = (SysprofMarkVisualizer *)widget; SysprofVisualizer *vis = (SysprofVisualizer *)widget; + static const GdkRGBA black = {0,0,0,1}; + const GdkRGBA *rgba = &black; GHashTableIter iter; GtkAllocation alloc; gpointer k, v; - gboolean ret; - gint n_groups = 0; - gint y = 0; + int n_groups = 0; + int y = 0; g_assert (SYSPROF_IS_MARK_VISUALIZER (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); + + GTK_WIDGET_CLASS (sysprof_mark_visualizer_parent_class)->snapshot (widget, snapshot); - ret = GTK_WIDGET_CLASS (sysprof_mark_visualizer_parent_class)->draw (widget, cr); if (self->spans_by_group == NULL) - return ret; + return; gtk_widget_get_allocation (widget, &alloc); @@ -117,19 +119,14 @@ g_hash_table_iter_init (&iter, self->spans_by_group); while (g_hash_table_iter_next (&iter, &k, &v)) { - static const GdkRGBA black = {0, 0, 0, 1}; SysprofMarkTimeSpan *span; const gchar *group = k; const GArray *spans = v; - const GdkRGBA *rgba; const GdkRGBA *kindrgba; const GdkRGBA *grouprgba; if ((grouprgba = g_hash_table_lookup (self->rgba_by_group, group))) - { - rgba = grouprgba; - gdk_cairo_set_source_rgba (cr, rgba); - } + rgba = grouprgba; for (guint i = 0; i < spans->len; i++) { @@ -144,7 +141,6 @@ rgba = kindrgba; else if ((grouprgba = g_hash_table_lookup (self->rgba_by_group, group))) rgba = grouprgba; - gdk_cairo_set_source_rgba (cr, rgba); } x1 = span->x; @@ -180,31 +176,24 @@ break; } - cairo_rectangle (cr, x1, y, x2 - x1, RECT_HEIGHT); - - if (n_groups == 1) - cairo_fill (cr); + gtk_snapshot_append_color (snapshot, rgba, &GRAPHENE_RECT_INIT (x1, y, x2 - x1, RECT_HEIGHT)); } - if (n_groups > 1) - cairo_fill (cr); - y += RECT_HEIGHT + RECT_OVERLAP; } - - return ret; } static void -sysprof_mark_visualizer_size_allocate (GtkWidget *widget, - GtkAllocation *alloc) +sysprof_mark_visualizer_size_allocate (GtkWidget *widget, + int width, + int height, + int baseline) { SysprofMarkVisualizer *self = (SysprofMarkVisualizer *)widget; g_assert (SYSPROF_IS_MARK_VISUALIZER (self)); - g_assert (alloc != NULL); - GTK_WIDGET_CLASS (sysprof_mark_visualizer_parent_class)->size_allocate (widget, alloc); + GTK_WIDGET_CLASS (sysprof_mark_visualizer_parent_class)->size_allocate (widget, width, height, baseline); reset_positions (self); } @@ -230,7 +219,7 @@ object_class->finalize = sysprof_mark_visualizer_finalize; - widget_class->draw = sysprof_mark_visualizer_draw; + widget_class->snapshot = sysprof_mark_visualizer_snapshot; widget_class->size_allocate = sysprof_mark_visualizer_size_allocate; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-marks-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-marks-aid.c
Changed
@@ -47,6 +47,177 @@ G_DEFINE_TYPE (SysprofMarksAid, sysprof_marks_aid, SYSPROF_TYPE_AID) static void +rgb_to_hls (gdouble *r, + gdouble *g, + gdouble *b) +{ + gdouble min; + gdouble max; + gdouble red; + gdouble green; + gdouble blue; + gdouble h, l, s; + gdouble delta; + + red = *r; + green = *g; + blue = *b; + if (red > green) + { + if (red > blue) + max = red; + else + max = blue; + if (green < blue) + min = green; + else + min = blue; + } + else + { + if (green > blue) + max = green; + else + max = blue; + if (red < blue) + min = red; + else + min = blue; + } + l = (max + min) / 2; + s = 0; + h = 0; + if (max != min) + { + if (l <= 0.5) + s = (max - min) / (max + min); + else + s = (max - min) / (2 - max - min); + delta = max - min; + if (red == max) + h = (green - blue) / delta; + else if (green == max) + h = 2 + (blue - red) / delta; + else if (blue == max) + h = 4 + (red - green) / delta; + h *= 60; + if (h < 0.0) + h += 360; + } + *r = h; + *g = l; + *b = s; +} + +static void +hls_to_rgb (gdouble *h, + gdouble *l, + gdouble *s) +{ + gdouble hue; + gdouble lightness; + gdouble saturation; + gdouble m1, m2; + gdouble r, g, b; + + lightness = *l; + saturation = *s; + if (lightness <= 0.5) + m2 = lightness * (1 + saturation); + else + m2 = lightness + saturation - lightness * saturation; + m1 = 2 * lightness - m2; + if (saturation == 0) + { + *h = lightness; + *l = lightness; + *s = lightness; + } + else + { + hue = *h + 120; + while (hue > 360) + hue -= 360; + while (hue < 0) + hue += 360; + if (hue < 60) + r = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + r = m2; + else if (hue < 240) + r = m1 + (m2 - m1) * (240 - hue) / 60; + else + r = m1; + hue = *h; + while (hue > 360) + hue -= 360; + while (hue < 0) + hue += 360; + if (hue < 60) + g = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + g = m2; + else if (hue < 240) + g = m1 + (m2 - m1) * (240 - hue) / 60; + else + g = m1; + hue = *h - 120; + while (hue > 360) + hue -= 360; + while (hue < 0) + hue += 360; + if (hue < 60) + b = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + b = m2; + else if (hue < 240) + b = m1 + (m2 - m1) * (240 - hue) / 60; + else + b = m1; + *h = r; + *l = g; + *s = b; + } +} + +static void +rgba_shade (const GdkRGBA *rgba, + GdkRGBA *dst, + gdouble k) +{ + gdouble red; + gdouble green; + gdouble blue; + + red = rgba->red; + green = rgba->green; + blue = rgba->blue; + + rgb_to_hls (&red, &green, &blue); + + green *= k; + + if (green > 1.0) + green = 1.0; + else if (green < 0.0) + green = 0.0; + + blue *= k; + + if (blue > 1.0) + blue = 1.0; + else if (blue < 0.0) + blue = 0.0; + + hls_to_rgb (&red, &green, &blue); + + dst->red = red; + dst->green = green; + dst->blue = blue; + dst->alpha = rgba->alpha; +} + +static void present_free (gpointer data) { Present *p = data; @@ -275,7 +446,7 @@ if (!g_hash_table_contains (seen, GUINT_TO_POINTER (span->kind))) { - dzl_rgba_shade (&rgba, &kind_rgba, 1 + (ratio * span->kind)); + rgba_shade (&rgba, &kind_rgba, 1 + (ratio * span->kind)); g_hash_table_insert (seen, GUINT_TO_POINTER (span->kind), g_memdup2 (&kind_rgba, sizeof kind_rgba));
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-marks-page.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-marks-page.c
Changed
@@ -50,6 +50,8 @@ GtkLabel *end; GtkLabel *duration; GtkTextView *message; + GtkWidget *failed; + GtkWidget *marks; } SysprofMarksPagePrivate; enum { @@ -64,19 +66,21 @@ G_DEFINE_TYPE_WITH_PRIVATE (SysprofMarksPage, sysprof_marks_page, SYSPROF_TYPE_PAGE) static gboolean -sysprof_marks_page_tree_view_key_press_event_cb (SysprofMarksPage *self, - const GdkEventKey *key, - GtkTreeView *tree_view) +sysprof_marks_page_tree_view_key_press_event_cb (SysprofMarksPage *self, + guint keyval, + guint keycode, + GdkModifierType state, + GtkEventControllerKey *controller) { SysprofMarksPagePrivate *priv = sysprof_marks_page_get_instance_private (self); gint dir = 0; g_assert (SYSPROF_MARKS_PAGE (self)); - g_assert (key != NULL); + g_assert (GTK_IS_EVENT_CONTROLLER_KEY (controller)); - if (key->state == 0) + if ((state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_ALT_MASK)) == 0) { - switch (key->keyval) + switch (keyval) { case GDK_KEY_Left: dir = -1; @@ -308,9 +312,9 @@ gtk_tree_view_set_model (priv->tree_view, GTK_TREE_MODEL (model)); if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (model), NULL) == 0) - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->failed)); else - gtk_stack_set_visible_child_name (priv->stack, "marks"); + gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->marks)); g_task_return_boolean (task, TRUE); } @@ -515,6 +519,8 @@ gtk_widget_class_bind_template_child_private (widget_class, SysprofMarksPage, duration); gtk_widget_class_bind_template_child_private (widget_class, SysprofMarksPage, time); gtk_widget_class_bind_template_child_private (widget_class, SysprofMarksPage, message); + gtk_widget_class_bind_template_child_private (widget_class, SysprofMarksPage, marks); + gtk_widget_class_bind_template_child_private (widget_class, SysprofMarksPage, failed); properties PROP_KIND = g_param_spec_enum ("kind", NULL, NULL, @@ -536,6 +542,7 @@ sysprof_marks_page_init (SysprofMarksPage *self) { SysprofMarksPagePrivate *priv = sysprof_marks_page_get_instance_private (self); + GtkEventController *controller; priv->kind = SYSPROF_MARKS_MODEL_MARKS; @@ -544,11 +551,14 @@ gtk_tree_selection_set_mode (gtk_tree_view_get_selection (priv->tree_view), GTK_SELECTION_MULTIPLE); - g_signal_connect_object (priv->tree_view, - "key-press-event", + controller = gtk_event_controller_key_new (); + gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); + g_signal_connect_object (controller, + "key-pressed", G_CALLBACK (sysprof_marks_page_tree_view_key_press_event_cb), self, G_CONNECT_SWAPPED); + gtk_widget_add_controller (GTK_WIDGET (self), controller); g_signal_connect_object (priv->tree_view, "row-activated",
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-marks-page.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-marks-page.ui
Changed
@@ -3,22 +3,21 @@ <template class="SysprofMarksPage" parent="SysprofPage"> <child> <object class="GtkStack" id="stack"> - <property name="homogeneous">false</property> - <property name="visible">true</property> + <property name="hhomogeneous">false</property> + <property name="vhomogeneous">false</property> <child> - <object class="GtkBox"> + <object class="GtkBox" id="marks"> <property name="orientation">horizontal</property> - <property name="visible">true</property> <child> <object class="GtkBox" id="details_box"> <property name="orientation">vertical</property> - <property name="margin">6</property> - <property name="visible">true</property> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Details</property> <property name="xalign">0</property> - <property name="visible">true</property> + <property name="margin-top">6</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> <property name="margin-bottom">6</property> <attributes> <attribute name="weight" value="bold"/> @@ -30,164 +29,150 @@ <property name="hexpand">false</property> <property name="vexpand">true</property> <property name="margin-start">6</property> - <property name="visible">true</property> + <property name="margin-end">6</property> <property name="column-spacing">6</property> <property name="row-spacing">3</property> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Group</property> - <property name="visible">true</property> <property name="xalign">1</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">0</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">0</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Mark</property> - <property name="visible">true</property> <property name="xalign">1</property> <property name="yalign">0</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">1</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">1</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Time</property> - <property name="visible">true</property> <property name="xalign">1</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">2</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">2</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel"> <property name="label" translatable="yes">End</property> - <property name="visible">true</property> <property name="xalign">1</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">3</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">3</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Duration</property> - <property name="visible">true</property> <property name="xalign">1</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">4</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">4</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel"> <property name="label" translatable="yes">Message</property> - <property name="visible">true</property> <property name="xalign">1</property> <property name="yalign">0</property> <style> <class name="dim-label"/> </style> + <layout> + <property name="row">5</property> + <property name="column">0</property> + </layout> </object> - <packing> - <property name="top-attach">5</property> - <property name="left-attach">0</property> - </packing> </child> <child> <object class="GtkLabel" id="group"> - <property name="visible">true</property> <property name="xalign">0</property> <property name="wrap">true</property> + <layout> + <property name="row">0</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">0</property> - <property name="left-attach">1</property> - </packing> </child> <child> <object class="GtkLabel" id="mark"> - <property name="visible">true</property> <property name="xalign">0</property> <property name="max-width-chars">5</property> <property name="ellipsize">end</property> + <layout> + <property name="row">1</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">1</property> - <property name="left-attach">1</property> - </packing> </child> <child> <object class="GtkLabel" id="time"> - <property name="visible">true</property> <property name="xalign">0</property> + <layout> + <property name="row">2</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">2</property> - <property name="left-attach">1</property> - </packing> </child> <child> <object class="GtkLabel" id="end"> - <property name="visible">true</property> <property name="xalign">0</property> + <layout> + <property name="row">3</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">3</property> - <property name="left-attach">1</property> - </packing> </child> <child> <object class="GtkLabel" id="duration"> - <property name="visible">true</property> <property name="xalign">0</property> + <layout> + <property name="row">4</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">4</property> - <property name="left-attach">1</property> - </packing> </child> <child> <object class="GtkScrolledWindow"> <property name="hexpand">true</property> - <property name="shadow-type">in</property> - <property name="visible">true</property> <child> <object class="GtkTextView" id="message"> <property name="editable">false</property> - <property name="visible">true</property> </object> </child> + <layout> + <property name="row">5</property> + <property name="column">1</property> + </layout> </object> - <packing> - <property name="top-attach">5</property> - <property name="left-attach">1</property> - </packing> </child> </object> </child> @@ -196,20 +181,16 @@ <child> <object class="GtkSeparator"> <property name="orientation">vertical</property> - <property name="visible">true</property> </object> </child> <child> <object class="GtkScrolledWindow" id="scroller"> <property name="hscrollbar-policy">external</property> <property name="hexpand">true</property> - <property name="visible">true</property> <child> <object class="GtkTreeView" id="tree_view"> - <property name="headers-visible">false</property> <property name="enable-grid-lines">horizontal</property> <property name="has-tooltip">true</property> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="duration_column"> <property name="title" translatable="yes">Duration</property> @@ -235,20 +216,42 @@ </object> </child> </object> - <packing> - <property name="name">marks</property> - </packing> </child> <child> - <object class="DzlEmptyState"> - <property name="icon-name">computer-fail-symbolic</property> - <property name="title" translatable="yes">No Timings Available</property> - <property name="subtitle" translatable="yes">No timing data was found for the current selection</property> - <property name="visible">true</property> + <object class="GtkBox" id="failed"> + <property name="halign">center</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <property name="valign">center</property> + <child> + <object class="GtkImage"> + <property name="icon-name">computer-fail-symbolic</property> + <property name="pixel-size">128</property> + </object> + </child> + <child> + <object class="GtkLabel" id="title"> + <property name="label" translatable="yes">No Timings Available</property> + <style> + <class name="dim-label"/> + </style> + <attributes> + <attribute name="scale" value="2.0"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + <child> + <object class="GtkLabel" id="subtitle"> + <property name="label" translatable="yes">No timing data was found for the current selection</property> + <property name="use-markup">true</property> + <property name="wrap">true</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> </object> - <packing> - <property name="name">empty-state</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-memprof-page.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-memprof-page.c
Changed
@@ -39,11 +39,12 @@ #include "config.h" -#include <dazzle.h> #include <glib/gi18n.h> #include "../stackstash.h" +#include "egg-paned-private.h" + #include "sysprof-cell-renderer-percent.h" #include "sysprof-memprof-page.h" #include "sysprof-profile.h" @@ -59,15 +60,18 @@ GtkTreeViewColumn *function_size_column; GtkCellRendererText *function_size_cell; GtkStack *stack; - GtkRadioButton *summary; - GtkRadioButton *all_allocs; - GtkRadioButton *temp_allocs; - GtkRadioButton *leaked_allocs_button; + GtkToggleButton *summary; + GtkToggleButton *all_allocs; + GtkToggleButton *temp_allocs; + GtkToggleButton *leaked_allocs_button; GtkLabel *temp_allocs_count; GtkLabel *num_allocs; GtkLabel *leaked_allocs; - GtkLabel *peak_allocs; GtkListBox *by_size; + GtkWidget *callgraph; + GtkWidget *summary_page; + GtkWidget *loading_state; + GtkWidget *empty_state; GCancellable *cancellable; @@ -174,6 +178,7 @@ SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); SysprofMemprofStats stats; g_autoptr(GString) str = NULL; + GtkWidget *child; g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); g_assert (SYSPROF_IS_MEMPROF_PROFILE (profile)); @@ -194,9 +199,8 @@ gtk_label_set_label (priv->temp_allocs_count, str->str); g_string_truncate (str, 0); - gtk_container_foreach (GTK_CONTAINER (priv->by_size), - (GtkCallback)gtk_widget_destroy, - NULL); + while ((child = gtk_widget_get_first_child (GTK_WIDGET (priv->by_size)))) + gtk_list_box_remove (priv->by_size, child); for (guint i = 0; i < G_N_ELEMENTS (stats.by_size); i++) { @@ -220,7 +224,14 @@ title = gtk_label_new (NULL); subtitle = gtk_label_new (NULL); prog = gtk_level_bar_new_for_interval (0, stats.n_allocs); - box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3); + box = g_object_new (GTK_TYPE_BOX, + "orientation", GTK_ORIENTATION_VERTICAL, + "spacing", 6, + "margin-top", 6, + "margin-start", 6, + "margin-bottom", 6, + "margin-end", 6, + NULL); sizestr = g_format_size_full (stats.by_sizei.bucket, G_FORMAT_SIZE_IEC_UNITS); if (i == 0) @@ -237,7 +248,7 @@ gtk_label_set_label (GTK_LABEL (title), title_str); gtk_label_set_xalign (GTK_LABEL (title), 0); - dzl_gtk_widget_add_style_class (title, "dim-label"); + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (title)), "dim-label"); gtk_widget_set_margin_start (box, 6); gtk_widget_set_margin_end (box, 6); @@ -267,13 +278,11 @@ gtk_level_bar_set_value (GTK_LEVEL_BAR (prog), stats.by_sizei.n_allocs); - gtk_container_add (GTK_CONTAINER (row), box); - gtk_container_add (GTK_CONTAINER (box), title); - gtk_container_add (GTK_CONTAINER (box), prog); - gtk_container_add (GTK_CONTAINER (box), subtitle); - gtk_container_add (GTK_CONTAINER (priv->by_size), row); - - gtk_widget_show_all (row); + gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), box); + gtk_box_append (GTK_BOX (box), title); + gtk_box_append (GTK_BOX (box), prog); + gtk_box_append (GTK_BOX (box), subtitle); + gtk_list_box_append (priv->by_size, row); } } @@ -310,7 +319,7 @@ if (sysprof_memprof_profile_is_empty (profile)) { - gtk_stack_set_visible_child_name (priv->stack, "summary"); + gtk_stack_set_visible_child (priv->stack, priv->summary_page); return; } @@ -345,7 +354,7 @@ gtk_tree_selection_select_iter (selection, &iter); } - gtk_stack_set_visible_child_name (priv->stack, "callgraph"); + gtk_stack_set_visible_child (priv->stack, priv->callgraph); g_clear_object (&functions); } @@ -357,7 +366,7 @@ g_return_if_fail (SYSPROF_IS_MEMPROF_PAGE (self)); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->empty_state); } static void @@ -376,7 +385,7 @@ gtk_tree_view_set_model (priv->functions_view, NULL); gtk_tree_view_set_model (priv->descendants_view, NULL); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->empty_state); } /** @@ -887,7 +896,7 @@ copy_tree_view_selection (GtkTreeView *tree_view) { g_autoptr(GString) str = NULL; - GtkClipboard *clipboard; + GdkClipboard *clipboard; g_assert (GTK_IS_TREE_VIEW (tree_view)); @@ -896,24 +905,25 @@ copy_tree_view_selection_cb, str); - clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view), GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, str->str, str->len); + clipboard = gtk_widget_get_clipboard (GTK_WIDGET (tree_view)); + gdk_clipboard_set_text (clipboard, str->str); } static void -sysprof_memprof_page_copy_cb (GtkWidget *widget, - SysprofMemprofPage *self) +sysprof_memprof_page_copy_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { + SysprofMemprofPage *self = (SysprofMemprofPage *)widget; SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); - GtkWidget *toplevel; GtkWidget *focus; + GtkRoot *toplevel; - g_assert (GTK_IS_WIDGET (widget)); g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); - if (!(toplevel = gtk_widget_get_toplevel (widget)) || - !GTK_IS_WINDOW (toplevel) || - !(focus = gtk_window_get_focus (GTK_WINDOW (toplevel)))) + if (!(toplevel = gtk_widget_get_root (widget)) || + !GTK_IS_ROOT (toplevel) || + !(focus = gtk_root_get_focus (toplevel))) return; if (focus == GTK_WIDGET (priv->descendants_view)) @@ -973,7 +983,7 @@ else g_set_object (&priv->cancellable, cancellable); - gtk_stack_set_visible_child_name (priv->stack, "loading"); + gtk_stack_set_visible_child (priv->stack, priv->loading_state); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, sysprof_memprof_page_load_async); @@ -1015,12 +1025,12 @@ static void mode_notify_active (SysprofMemprofPage *self, GParamSpec *pspec, - GtkRadioButton *button) + GtkToggleButton *button) { SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); g_assert (SYSPROF_IS_MEMPROF_PAGE (self)); - g_assert (GTK_IS_RADIO_BUTTON (button)); + g_assert (GTK_IS_TOGGLE_BUTTON (button)); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) { @@ -1106,7 +1116,6 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); SysprofPageClass *page_class = SYSPROF_PAGE_CLASS (klass); - GtkBindingSet *bindings; object_class->finalize = sysprof_memprof_page_finalize; object_class->get_property = sysprof_memprof_page_get_property; @@ -1151,11 +1160,17 @@ gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, num_allocs); gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, leaked_allocs); 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, loading_state); + gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, empty_state); + gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, summary_page); + gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, callgraph); + + gtk_widget_class_install_action (widget_class, "page.copy", NULL, sysprof_memprof_page_copy_cb); - bindings = gtk_binding_set_by_class (klass); - 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 (EGG_TYPE_PANED); g_type_ensure (SYSPROF_TYPE_CELL_RENDERER_PERCENT); } @@ -1163,7 +1178,6 @@ sysprof_memprof_page_init (SysprofMemprofPage *self) { SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self); - DzlShortcutController *controller; GtkTreeSelection *selection; GtkCellRenderer *cell; @@ -1172,7 +1186,7 @@ gtk_widget_init_template (GTK_WIDGET (self)); - gtk_stack_set_visible_child_name (priv->stack, "empty-state"); + gtk_stack_set_visible_child (priv->stack, priv->empty_state); gtk_list_box_set_header_func (priv->by_size, sep_header_func, NULL, NULL); @@ -1246,16 +1260,6 @@ gtk_tree_selection_set_mode (gtk_tree_view_get_selection (priv->descendants_view), GTK_SELECTION_MULTIPLE); - - 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); } typedef struct _Descendant Descendant; @@ -1542,7 +1546,7 @@ priv->loading--; if (priv->loading) - gtk_stack_set_visible_child_name (priv->stack, "loading"); + gtk_stack_set_visible_child (priv->stack, priv->loading_state); else - gtk_stack_set_visible_child_name (priv->stack, "callgraph"); + gtk_stack_set_visible_child (priv->stack, priv->callgraph); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-memprof-page.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-memprof-page.ui
Changed
@@ -1,242 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> <interface> <template class="SysprofMemprofPage" parent="SysprofPage"> <child> <object class="GtkBox"> <property name="orientation">vertical</property> - <property name="visible">true</property> - <child> - <object class="GtkBox"> - <property name="orientation">horizontal</property> - <property name="visible">true</property> - <child type="center"> - <object class="GtkBox"> - <property name="margin-top">6</property> - <property name="margin-bottom">6</property> - <property name="orientation">horizontal</property> - <property name="homogeneous">true</property> - <property name="visible">true</property> - <style> - <class name="linked"/> - </style> - <child> - <object class="GtkRadioButton" id="summary"> - <property name="label" translatable="yes">Summary</property> - <property name="draw-indicator">false</property> - <property name="visible">true</property> - <property name="active">false</property> - </object> - </child> - <child> - <object class="GtkRadioButton" id="all_allocs"> - <property name="label" translatable="yes">All Allocations</property> - <property name="draw-indicator">false</property> - <property name="visible">true</property> - <property name="group">summary</property> - <property name="active">true</property> - </object> - </child> - <child> - <object class="GtkRadioButton" id="temp_allocs"> - <property name="label" translatable="yes">Temporary Allocations</property> - <property name="draw-indicator">false</property> - <property name="visible">true</property> - <property name="active">false</property> - <property name="group">summary</property> - </object> - </child> - <child> - <object class="GtkRadioButton" id="leaked_allocs_button"> - <property name="label" translatable="yes">Leaked Allocations</property> - <property name="draw-indicator">false</property> - <property name="visible">true</property> - <property name="active">false</property> - <property name="group">summary</property> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkSeparator"> - <property name="orientation">horizontal</property> - <property name="visible">true</property> - </object> - </child> <child> <object class="GtkStack" id="stack"> - <property name="visible">true</property> <child> - <object class="GtkScrolledWindow"> - <property name="hscrollbar-policy">never</property> - <property name="visible">true</property> + <object class="AdwPreferencesPage" id="summary_page"> <child> - <object class="GtkBox"> - <property name="margin">16</property> - <property name="orientation">vertical</property> - <property name="visible">true</property> + <object class="AdwPreferencesGroup"> <child> - <object class="DzlThreeGrid"> - <property name="expand">true</property> - <property name="row-spacing">6</property> - <property name="column-spacing">18</property> - <property name="visible">true</property> - <child> - <object class="GtkLabel"> - <property name="label">Peak Allocation</property> - <property name="halign">end</property> - <property name="visible">false</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="peak_allocs"> - <property name="xalign">0</property> - <property name="selectable">true</property> - <property name="visible">false</property> - </object> - <packing> - <property name="column">center</property> - <property name="row">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="label">Number of Allocations</property> - <property name="halign">end</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">1</property> - </packing> - </child> - <child> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Number of Allocations</property> + <property name="subtitle" translatable="yes">Total number of allocation and free records</property> + <child type="suffix"> <object class="GtkLabel" id="num_allocs"> - <property name="xalign">0</property> + <property name="hexpand">true</property> + <property name="xalign">1</property> <property name="selectable">true</property> - <property name="visible">true</property> - </object> - <packing> - <property name="column">center</property> - <property name="row">1</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="label">Leaked Allocations</property> - <property name="halign">end</property> - <property name="visible">false</property> - <style> - <class name="dim-label"/> - </style> </object> - <packing> - <property name="column">left</property> - <property name="row">2</property> - </packing> </child> - <child> + </object> + </child> + <child> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Leaked Allocations</property> + <property name="subtitle" translatable="yes">Number of allocations without a free record</property> + <child type="suffix"> <object class="GtkLabel" id="leaked_allocs"> - <property name="xalign">0</property> + <property name="hexpand">true</property> + <property name="xalign">1</property> <property name="selectable">true</property> - <property name="visible">false</property> </object> - <packing> - <property name="column">center</property> - <property name="row">2</property> - </packing> </child> - <child> - <object class="GtkLabel"> - <property name="label">Temporary Allocations</property> - <property name="halign">end</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">3</property> - </packing> - </child> - <child> + </object> + </child> + <child> + <object class="AdwActionRow"> + <property name="activatable">false</property> + <property name="title" translatable="yes">Temporary Allocations</property> + <property name="subtitle" translatable="yes">Number of allocations freed from similar stack trace</property> + <child type="suffix"> <object class="GtkLabel" id="temp_allocs_count"> - <property name="xalign">0</property> + <property name="hexpand">true</property> + <property name="xalign">1</property> <property name="selectable">true</property> - <property name="width-chars">50</property> - <property name="visible">true</property> </object> - <packing> - <property name="column">center</property> - <property name="row">3</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="label">Allocations by Size</property> - <property name="halign">end</property> - <property name="valign">start</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">4</property> - </packing> - </child> - <child> - <object class="GtkFrame"> - <property name="visible">true</property> - <child> - <object class="GtkListBox" id="by_size"> - <property name="visible">true</property> - </object> - </child> - </object> - <packing> - <property name="column">center</property> - <property name="row">4</property> - </packing> </child> </object> </child> </object> </child> + <child> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Allocations by Size</property> + <child> + <object class="GtkListBox" id="by_size"> + <style> + <class name="boxed-list"/> + </style> + </object> + </child> + </object> + </child> </object> - <packing> - <property name="name">summary</property> - </packing> </child> <child> - <object class="GtkPaned"> + <object class="EggPaned" id="callgraph"> <property name="orientation">horizontal</property> - <property name="position">450</property> - <property name="expand">true</property> - <property name="visible">true</property> + <property name="vexpand">true</property> <child> - <object class="GtkPaned"> + <object class="EggPaned"> + <property name="width-request">400</property> <property name="orientation">vertical</property> - <property name="visible">true</property> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> + <property name="vexpand">true</property> <child> <object class="GtkTreeView" id="functions_view"> <property name="fixed-height-mode">true</property> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="function_name_column"> <property name="expand">true</property> @@ -289,16 +134,12 @@ </object> </child> </object> - <packing> - <property name="resize">true</property> - </packing> </child> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> + <property name="vexpand">true</property> <child> <object class="GtkTreeView" id="callers_view"> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="callers_name_column"> <property name="expand">true</property> @@ -351,18 +192,13 @@ </object> </child> </object> - <packing> - <property name="resize">true</property> - </packing> </child> </object> </child> <child> <object class="GtkScrolledWindow"> - <property name="visible">true</property> <child> <object class="GtkTreeView" id="descendants_view"> - <property name="visible">true</property> <child> <object class="GtkTreeViewColumn" id="descendants_name_column"> <property name="expand">true</property> @@ -421,31 +257,70 @@ </object> </child> </object> - <packing> - <property name="name">callgraph</property> - </packing> </child> <child> - <object class="DzlEmptyState"> + <object class="AdwStatusPage" id="loading_state"> <property name="icon-name">content-loading-symbolic</property> <property name="title" translatable="yes">Analyzing Memory Allocations</property> - <property name="subtitle" translatable="yes">Sysprof is busy analyzing memory allocations.</property> - <property name="visible">true</property> + <property name="description" translatable="yes">Sysprof is busy analyzing memory allocations.</property> </object> - <packing> - <property name="name">loading</property> - </packing> </child> <child> - <object class="DzlEmptyState"> + <object class="AdwStatusPage" id="empty_state"> <property name="icon-name">computer-fail-symbolic</property> <property name="title" translatable="yes">Not Enough Samples</property> - <property name="subtitle" translatable="yes">More samples are necessary to display a callgraph.</property> - <property name="visible">false</property> + <property name="description" translatable="yes">More samples are necessary to display a callgraph.</property> + </object> + </child> + </object> + </child> + <child> + <object class="GtkSeparator"> + <property name="orientation">horizontal</property> + </object> + </child> + <child> + <object class="GtkCenterBox"> + <property name="orientation">horizontal</property> + <child type="center"> + <object class="GtkBox"> + <property name="margin-top">6</property> + <property name="margin-bottom">6</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> + <property name="orientation">horizontal</property> + <property name="homogeneous">true</property> + <style> + <class name="linked"/> + </style> + <child> + <object class="GtkToggleButton" id="summary"> + <property name="label" translatable="yes">Summary</property> + <property name="active">false</property> + </object> + </child> + <child> + <object class="GtkToggleButton" id="all_allocs"> + <property name="label" translatable="yes">All Allocations</property> + <property name="group">summary</property> + <property name="active">true</property> + </object> + </child> + <child> + <object class="GtkToggleButton" id="temp_allocs"> + <property name="label" translatable="yes">Temporary Allocations</property> + <property name="active">false</property> + <property name="group">summary</property> + </object> + </child> + <child> + <object class="GtkToggleButton" id="leaked_allocs_button"> + <property name="label" translatable="yes">Leaked Allocations</property> + <property name="active">false</property> + <property name="group">summary</property> + </object> + </child> </object> - <packing> - <property name="name">empty-state</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-memprof-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-memprof-visualizer.c
Changed
@@ -528,49 +528,46 @@ } static void -sysprof_memprof_visualizer_size_allocate (GtkWidget *widget, - GtkAllocation *alloc) +sysprof_memprof_visualizer_size_allocate (GtkWidget *widget, + int width, + int height, + int baseline) { - SysprofMemprofVisualizer *self = (SysprofMemprofVisualizer *)widget; - - g_assert (GTK_IS_WIDGET (widget)); - g_assert (alloc != NULL); - - GTK_WIDGET_CLASS (sysprof_memprof_visualizer_parent_class)->size_allocate (widget, alloc); - - sysprof_memprof_visualizer_queue_redraw (self); + sysprof_memprof_visualizer_queue_redraw (SYSPROF_MEMPROF_VISUALIZER (widget)); } static void -sysprof_memprof_visualizer_destroy (GtkWidget *widget) +sysprof_memprof_visualizer_dispose (GObject *object) { - SysprofMemprofVisualizer *self = (SysprofMemprofVisualizer *)widget; + SysprofMemprofVisualizer *self = (SysprofMemprofVisualizer *)object; g_clear_pointer (&self->reader, sysprof_capture_reader_unref); g_clear_pointer (&self->surface, cairo_surface_destroy); g_clear_handle_id (&self->queued_draw, g_source_remove); - GTK_WIDGET_CLASS (sysprof_memprof_visualizer_parent_class)->destroy (widget); + G_OBJECT_CLASS (sysprof_memprof_visualizer_parent_class)->dispose (object); } -static gboolean -sysprof_memprof_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_memprof_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofMemprofVisualizer *self = (SysprofMemprofVisualizer *)widget; - gboolean ret; g_assert (SYSPROF_IS_MEMPROF_VISUALIZER (self)); - g_assert (cr != NULL); + g_assert (GTK_IS_SNAPSHOT (snapshot)); - ret = GTK_WIDGET_CLASS (sysprof_memprof_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_memprof_visualizer_parent_class)->snapshot (widget, snapshot); if (self->surface != NULL) { + cairo_t *cr; GtkAllocation alloc; gtk_widget_get_allocation (widget, &alloc); + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); + cairo_save (cr); cairo_rectangle (cr, 0, 0, alloc.width, alloc.height); @@ -590,19 +587,21 @@ cairo_set_source_surface (cr, self->surface, 0, 0); cairo_paint (cr); cairo_restore (cr); - } - return ret; + cairo_destroy (cr); + } } static void sysprof_memprof_visualizer_class_init (SysprofMemprofVisualizerClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); SysprofVisualizerClass *visualizer_class = SYSPROF_VISUALIZER_CLASS (klass); - widget_class->destroy = sysprof_memprof_visualizer_destroy; - widget_class->draw = sysprof_memprof_visualizer_draw; + object_class->dispose = sysprof_memprof_visualizer_dispose; + + widget_class->snapshot = sysprof_memprof_visualizer_snapshot; widget_class->size_allocate = sysprof_memprof_visualizer_size_allocate; visualizer_class->set_reader = sysprof_memprof_visualizer_set_reader;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-netdev-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-netdev-aid.c
Changed
@@ -242,7 +242,7 @@ if (counters->len > 0) sysprof_display_add_group (present->display, group); else - gtk_widget_destroy (GTK_WIDGET (group)); + g_object_unref (g_object_ref_sink (group)); } return counters != NULL;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-notebook.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-notebook.c
Changed
@@ -29,10 +29,15 @@ typedef struct { + GtkNotebook *notebook; guint always_show_tabs : 1; } SysprofNotebookPrivate; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofNotebook, sysprof_notebook, GTK_TYPE_NOTEBOOK) +static void buildable_iface_init (GtkBuildableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (SysprofNotebook, sysprof_notebook, GTK_TYPE_WIDGET, + G_ADD_PRIVATE (SysprofNotebook) + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, buildable_iface_init)) enum { PROP_0, @@ -83,15 +88,16 @@ } static void -sysprof_notebook_page_added (GtkNotebook *notebook, - GtkWidget *child, - guint page_num) +sysprof_notebook_page_added (SysprofNotebook *self, + GtkWidget *child, + guint page_num, + GtkNotebook *notebook) { - SysprofNotebook *self = (SysprofNotebook *)notebook; SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); g_assert (SYSPROF_IS_NOTEBOOK (self)); g_assert (GTK_IS_WIDGET (child)); + g_assert (GTK_IS_NOTEBOOK (notebook)); gtk_notebook_set_show_tabs (notebook, (priv->always_show_tabs || @@ -107,13 +113,13 @@ g_signal_connect_object (child, "notify::can-replay", G_CALLBACK (sysprof_notebook_notify_can_replay_cb), - notebook, + self, G_CONNECT_SWAPPED); g_signal_connect_object (child, "notify::can-save", G_CALLBACK (sysprof_notebook_notify_can_save_cb), - notebook, + self, G_CONNECT_SWAPPED); g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CAN_REPLAY); @@ -125,15 +131,16 @@ } static void -sysprof_notebook_page_removed (GtkNotebook *notebook, - GtkWidget *child, - guint page_num) +sysprof_notebook_page_removed (SysprofNotebook *self, + GtkWidget *child, + guint page_num, + GtkNotebook *notebook) { - SysprofNotebook *self = (SysprofNotebook *)notebook; SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); g_assert (SYSPROF_IS_NOTEBOOK (self)); g_assert (GTK_IS_WIDGET (child)); + g_assert (GTK_IS_NOTEBOOK (notebook)); if (gtk_widget_in_destruction (GTK_WIDGET (notebook))) return; @@ -141,16 +148,16 @@ if (gtk_notebook_get_n_pages (notebook) == 0) { child = sysprof_display_new (); - gtk_container_add (GTK_CONTAINER (notebook), child); + gtk_notebook_append_page (notebook, child, NULL); gtk_widget_show (child); g_signal_handlers_disconnect_by_func (child, G_CALLBACK (sysprof_notebook_notify_can_save_cb), notebook); - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CAN_REPLAY); - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CAN_SAVE); - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CURRENT); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_REPLAY); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_SAVE); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CURRENT); } gtk_notebook_set_show_tabs (notebook, @@ -159,18 +166,33 @@ } static void -sysprof_notebook_switch_page (GtkNotebook *notebook, - GtkWidget *widget, - guint page) +sysprof_notebook_switch_page (SysprofNotebook *self, + GtkWidget *widget, + guint page, + GtkNotebook *notebook) { + g_assert (SYSPROF_IS_NOTEBOOK (self)); g_assert (GTK_IS_NOTEBOOK (notebook)); g_assert (GTK_IS_WIDGET (widget)); - GTK_NOTEBOOK_CLASS (sysprof_notebook_parent_class)->switch_page (notebook, widget, page); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_REPLAY); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CAN_SAVE); + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_CURRENT); +} - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CAN_REPLAY); - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CAN_SAVE); - g_object_notify_by_pspec (G_OBJECT (notebook), properties PROP_CURRENT); +static void +sysprof_notebook_dispose (GObject *object) +{ + SysprofNotebook *self = (SysprofNotebook *)object; + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + if (priv->notebook) + { + gtk_widget_unparent (GTK_WIDGET (priv->notebook)); + priv->notebook = NULL; + } + + G_OBJECT_CLASS (sysprof_notebook_parent_class)->dispose (object); } static void @@ -227,15 +249,12 @@ sysprof_notebook_class_init (SysprofNotebookClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkNotebookClass *notebook_class = GTK_NOTEBOOK_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + object_class->dispose = sysprof_notebook_dispose; object_class->get_property = sysprof_notebook_get_property; object_class->set_property = sysprof_notebook_set_property; - notebook_class->page_added = sysprof_notebook_page_added; - notebook_class->page_removed = sysprof_notebook_page_removed; - notebook_class->switch_page = sysprof_notebook_switch_page; - properties PROP_ALWAYS_SHOW_TABS = g_param_spec_boolean ("always-show-tabs", "Always Show Tabs", @@ -265,71 +284,86 @@ (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (object_class, N_PROPS, properties); + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void sysprof_notebook_init (SysprofNotebook *self) { - gtk_notebook_set_show_border (GTK_NOTEBOOK (self), FALSE); - gtk_notebook_set_scrollable (GTK_NOTEBOOK (self), TRUE); - gtk_notebook_popup_enable (GTK_NOTEBOOK (self)); + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + priv->notebook = GTK_NOTEBOOK (gtk_notebook_new ()); + gtk_widget_set_parent (GTK_WIDGET (priv->notebook), GTK_WIDGET (self)); + + gtk_notebook_set_show_border (priv->notebook, FALSE); + gtk_notebook_set_scrollable (priv->notebook, TRUE); + gtk_notebook_popup_enable (priv->notebook); + + g_signal_connect_object (priv->notebook, + "page-added", + G_CALLBACK (sysprof_notebook_page_added), + self, + G_CONNECT_SWAPPED); + + g_signal_connect_object (priv->notebook, + "page-removed", + G_CALLBACK (sysprof_notebook_page_removed), + self, + G_CONNECT_SWAPPED); + + g_signal_connect_object (priv->notebook, + "switch-page", + G_CALLBACK (sysprof_notebook_switch_page), + self, + G_CONNECT_SWAPPED | G_CONNECT_AFTER); } void sysprof_notebook_close_current (SysprofNotebook *self) { + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); gint page; g_return_if_fail (SYSPROF_IS_NOTEBOOK (self)); - if ((page = gtk_notebook_get_current_page (GTK_NOTEBOOK (self))) >= 0) - gtk_widget_destroy (gtk_notebook_get_nth_page (GTK_NOTEBOOK (self), page)); -} - -static void -find_empty_display_cb (GtkWidget *widget, - gpointer user_data) -{ - GtkWidget **display = user_data; - - g_assert (GTK_IS_WIDGET (widget)); - g_assert (display != NULL); - - if (*display != NULL) - return; - - if (SYSPROF_IS_DISPLAY (widget) && - sysprof_display_is_empty (SYSPROF_DISPLAY (widget))) - *display = widget; + if ((page = gtk_notebook_get_current_page (priv->notebook)) >= 0) + gtk_notebook_remove_page (priv->notebook, page); } void sysprof_notebook_open (SysprofNotebook *self, GFile *file) { - GtkWidget *display = NULL; - gint page; + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + SysprofDisplay *display = NULL; + int page; g_return_if_fail (SYSPROF_IS_NOTEBOOK (self)); g_return_if_fail (g_file_is_native (file)); - gtk_container_foreach (GTK_CONTAINER (self), - find_empty_display_cb, - &display); + for (page = 0; page < sysprof_notebook_get_n_pages (self); page++) + { + SysprofDisplay *child = sysprof_notebook_get_nth_page (self, page); + + if (sysprof_display_is_empty (child)) + { + display = child; + break; + } + } if (display == NULL) { - - display = sysprof_display_new (); - page = gtk_notebook_insert_page (GTK_NOTEBOOK (self), display, NULL, -1); - gtk_widget_show (display); + display = SYSPROF_DISPLAY (sysprof_display_new ()); + page = sysprof_notebook_append (self, display); } else { - page = gtk_notebook_page_num (GTK_NOTEBOOK (self), display); + page = gtk_notebook_page_num (priv->notebook, GTK_WIDGET (display)); } - gtk_notebook_set_current_page (GTK_NOTEBOOK (self), page); + sysprof_notebook_set_current_page (self, page); sysprof_display_open (SYSPROF_DISPLAY (display), file); } @@ -337,12 +371,13 @@ SysprofDisplay * sysprof_notebook_get_current (SysprofNotebook *self) { + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); gint page; g_assert (SYSPROF_IS_NOTEBOOK (self)); - if ((page = gtk_notebook_get_current_page (GTK_NOTEBOOK (self))) >= 0) - return SYSPROF_DISPLAY (gtk_notebook_get_nth_page (GTK_NOTEBOOK (self), page)); + if ((page = gtk_notebook_get_current_page (priv->notebook)) >= 0) + return SYSPROF_DISPLAY (gtk_notebook_get_nth_page (priv->notebook, page)); return NULL; } @@ -387,6 +422,7 @@ void sysprof_notebook_replay (SysprofNotebook *self) { + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); SysprofDisplay *display; SysprofDisplay *replay; gint page; @@ -401,15 +437,16 @@ g_return_if_fail (SYSPROF_IS_DISPLAY (replay)); gtk_widget_show (GTK_WIDGET (replay)); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (replay)); - page = gtk_notebook_page_num (GTK_NOTEBOOK (self), GTK_WIDGET (replay)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (self), page); + gtk_notebook_append_page (priv->notebook, GTK_WIDGET (replay), NULL); + page = gtk_notebook_page_num (priv->notebook, GTK_WIDGET (replay)); + gtk_notebook_set_current_page (priv->notebook, page); } void sysprof_notebook_add_profiler (SysprofNotebook *self, SysprofProfiler *profiler) { + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); GtkWidget *display; gint page; @@ -419,9 +456,9 @@ display = sysprof_display_new_for_profiler (profiler); gtk_widget_show (display); - gtk_container_add (GTK_CONTAINER (self), display); - page = gtk_notebook_page_num (GTK_NOTEBOOK (self), display); - gtk_notebook_set_current_page (GTK_NOTEBOOK (self), page); + gtk_notebook_append_page (priv->notebook, GTK_WIDGET (display), NULL); + page = gtk_notebook_page_num (priv->notebook, display); + gtk_notebook_set_current_page (priv->notebook, page); } gboolean @@ -447,9 +484,78 @@ if (always_show_tabs != priv->always_show_tabs) { priv->always_show_tabs = always_show_tabs; - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (self), + gtk_notebook_set_show_tabs (priv->notebook, (priv->always_show_tabs || - gtk_notebook_get_n_pages (GTK_NOTEBOOK (self)) > 1)); + gtk_notebook_get_n_pages (priv->notebook) > 1)); g_object_notify_by_pspec (G_OBJECT (self), properties PROP_ALWAYS_SHOW_TABS); } } + +static void +sysprof_notebook_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const char *type) +{ + SysprofNotebook *self = (SysprofNotebook *)buildable; + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + g_assert (SYSPROF_IS_NOTEBOOK (self)); + + if (SYSPROF_IS_DISPLAY (child)) + gtk_notebook_append_page (priv->notebook, GTK_WIDGET (child), NULL); + else + g_warning ("Cannot add child of type %s to %s", + G_OBJECT_TYPE_NAME (child), + G_OBJECT_TYPE_NAME (self)); +} + +static void +buildable_iface_init (GtkBuildableIface *iface) +{ + iface->add_child = sysprof_notebook_add_child; +} + +guint +sysprof_notebook_get_n_pages (SysprofNotebook *self) +{ + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + g_return_val_if_fail (SYSPROF_IS_NOTEBOOK (self), 0); + + return gtk_notebook_get_n_pages (priv->notebook); +} + +SysprofDisplay * +sysprof_notebook_get_nth_page (SysprofNotebook *self, + guint nth) +{ + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + g_return_val_if_fail (SYSPROF_IS_NOTEBOOK (self), NULL); + + return SYSPROF_DISPLAY (gtk_notebook_get_nth_page (priv->notebook, nth)); +} + +void +sysprof_notebook_set_current_page (SysprofNotebook *self, + int nth) +{ + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + g_return_if_fail (SYSPROF_IS_NOTEBOOK (self)); + + gtk_notebook_set_current_page (priv->notebook, nth); +} + +int +sysprof_notebook_append (SysprofNotebook *self, + SysprofDisplay *display) +{ + SysprofNotebookPrivate *priv = sysprof_notebook_get_instance_private (self); + + g_return_val_if_fail (SYSPROF_IS_NOTEBOOK (self), -1); + g_return_val_if_fail (SYSPROF_IS_DISPLAY (display), -1); + + return gtk_notebook_append_page (priv->notebook, GTK_WIDGET (display), NULL); +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-notebook.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-notebook.h
Changed
@@ -35,11 +35,11 @@ #define SYSPROF_TYPE_NOTEBOOK (sysprof_notebook_get_type()) SYSPROF_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (SysprofNotebook, sysprof_notebook, SYSPROF, NOTEBOOK, GtkNotebook) +G_DECLARE_DERIVABLE_TYPE (SysprofNotebook, sysprof_notebook, SYSPROF, NOTEBOOK, GtkWidget) struct _SysprofNotebookClass { - GtkNotebookClass parent_class; + GtkWidgetClass parent_class; /*< private >*/ gpointer _reserved16; @@ -70,5 +70,16 @@ SYSPROF_AVAILABLE_IN_ALL void sysprof_notebook_set_always_show_tabs (SysprofNotebook *self, gboolean always_show_tabs); +SYSPROF_AVAILABLE_IN_ALL +guint sysprof_notebook_get_n_pages (SysprofNotebook *self); +SYSPROF_AVAILABLE_IN_ALL +SysprofDisplay *sysprof_notebook_get_nth_page (SysprofNotebook *self, + guint nth); +SYSPROF_AVAILABLE_IN_ALL +void sysprof_notebook_set_current_page (SysprofNotebook *self, + int page); +SYSPROF_AVAILABLE_IN_ALL +int sysprof_notebook_append (SysprofNotebook *self, + SysprofDisplay *display); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-page.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-page.c
Changed
@@ -31,7 +31,7 @@ gchar *title; } SysprofPagePrivate; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofPage, sysprof_page, GTK_TYPE_BIN) +G_DEFINE_TYPE_WITH_PRIVATE (SysprofPage, sysprof_page, GTK_TYPE_WIDGET) enum { PROP_0, @@ -105,14 +105,18 @@ } static void -sysprof_page_finalize (GObject *object) +sysprof_page_dispose (GObject *object) { SysprofPage *self = (SysprofPage *)object; SysprofPagePrivate *priv = sysprof_page_get_instance_private (self); + GtkWidget *child; g_clear_pointer (&priv->title, g_free); - G_OBJECT_CLASS (sysprof_page_parent_class)->finalize (object); + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); + + G_OBJECT_CLASS (sysprof_page_parent_class)->dispose (object); } static void @@ -157,8 +161,9 @@ sysprof_page_class_init (SysprofPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = sysprof_page_finalize; + object_class->dispose = sysprof_page_dispose; object_class->get_property = sysprof_page_get_property; object_class->set_property = sysprof_page_set_property; @@ -173,11 +178,14 @@ (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (object_class, N_PROPS, properties); + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void sysprof_page_init (SysprofPage *self) { + gtk_widget_set_vexpand (GTK_WIDGET (self), TRUE); } /**
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-page.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-page.h
Changed
@@ -32,11 +32,11 @@ #define SYSPROF_TYPE_PAGE (sysprof_page_get_type()) SYSPROF_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (SysprofPage, sysprof_page, SYSPROF, PAGE, GtkBin) +G_DECLARE_DERIVABLE_TYPE (SysprofPage, sysprof_page, SYSPROF, PAGE, GtkWidget) struct _SysprofPageClass { - GtkBinClass parent_class; + GtkWidgetClass parent_class; void (*load_async) (SysprofPage *self, SysprofCaptureReader *reader,
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-process-model-row.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-process-model-row.ui
Changed
@@ -4,7 +4,10 @@ <child> <object class="GtkBox"> <property name="visible">true</property> - <property name="margin">6</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> + <property name="margin-top">6</property> + <property name="margin-bottom">6</property> <property name="spacing">6</property> <child> <object class="GtkImage" id="image">
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-procs-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-procs-visualizer.c
Changed
@@ -183,24 +183,24 @@ g_task_run_in_thread (task, discovery_worker); } -static gboolean -sysprof_procs_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_procs_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofProcsVisualizer *self = (SysprofProcsVisualizer *)widget; g_autofree SysprofVisualizerAbsolutePoint *points = NULL; - gboolean ret = GDK_EVENT_PROPAGATE; GtkAllocation alloc; GdkRGBA background; GdkRGBA foreground; const Point *fpoints; guint n_fpoints = 0; Discovery *d; + cairo_t *cr; gdouble last_x = 0; gdouble last_y = 0; g_assert (SYSPROF_IS_PROCS_VISUALIZER (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); gtk_widget_get_allocation (widget, &alloc); @@ -208,14 +208,17 @@ background = foreground; background.alpha *= .5; - ret = GTK_WIDGET_CLASS (sysprof_procs_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_procs_visualizer_parent_class)->snapshot (widget, snapshot); if (!(d = self->discovery) || d->cache == NULL) - return ret; + return; if (!(fpoints = point_cache_get_points (d->cache, 1, &n_fpoints))) - return ret; + return; + + /* This is all going to need offscreen drawing instead of new cairo every frame */ + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); points = g_new0 (SysprofVisualizerAbsolutePoint, n_fpoints); sysprof_visualizer_translate_points (SYSPROF_VISUALIZER (self), @@ -254,7 +257,7 @@ gdk_cairo_set_source_rgba (cr, &foreground); cairo_stroke (cr); - return ret; + cairo_destroy (cr); } static void @@ -276,7 +279,7 @@ object_class->finalize = sysprof_procs_visualizer_finalize; - widget_class->draw = sysprof_procs_visualizer_draw; + widget_class->snapshot = sysprof_procs_visualizer_snapshot; visualizer_class->set_reader = sysprof_procs_visualizer_set_reader; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.c
Changed
@@ -22,6 +22,7 @@ #include "config.h" +#include <adwaita.h> #include <sysprof.h> #include "sysprof-platform.h" @@ -32,6 +33,7 @@ #include "sysprof-model-filter.h" #include "sysprof-profiler-assistant.h" #include "sysprof-process-model-row.h" +#include "sysprof-theme-manager.h" #include "sysprof-ui-private.h" #include "sysprof-battery-aid.h" @@ -45,16 +47,15 @@ struct _SysprofProfilerAssistant { - GtkBin parent_instance; + GtkWidget parent_instance; SysprofProcessModel *process_model; /* Template Objects */ GtkSwitch *allow_throttling; GtkButton *record_button; - GtkEntry *command_line; + AdwEntryRow *command_line; GtkSearchEntry *search_entry; - GtkRevealer *process_revealer; GtkListBox *process_list_box; SysprofEnvironEditor *environ_editor; GtkFlowBox *aid_flow_box; @@ -70,7 +71,7 @@ static guint signals N_SIGNALS; -G_DEFINE_TYPE (SysprofProfilerAssistant, sysprof_profiler_assistant, GTK_TYPE_BIN) +G_DEFINE_TYPE (SysprofProfilerAssistant, sysprof_profiler_assistant, GTK_TYPE_WIDGET) /** * sysprof_profiler_assistant_new: @@ -111,12 +112,15 @@ } static void -sysprof_profiler_assistant_notify_reveal_child_cb (SysprofProfilerAssistant *self, - GParamSpec *pspec, - GtkRevealer *revealer) +sysprof_profiler_assistant_notify_active_cb (SysprofProfilerAssistant *self, + GParamSpec *pspec, + GtkSwitch *switch_) { g_assert (SYSPROF_IS_PROFILER_ASSISTANT (self)); - g_assert (GTK_IS_REVEALER (revealer)); + g_assert (GTK_IS_SWITCH (switch_)); + + if (gtk_switch_get_active (switch_)) + return; if (self->process_model == NULL) { @@ -152,15 +156,15 @@ gint argc; g_assert (SYSPROF_IS_PROFILER_ASSISTANT (self)); - g_assert (GTK_IS_ENTRY (entry)); + g_assert (ADW_IS_ENTRY_ROW (entry)); style_context = gtk_widget_get_style_context (GTK_WIDGET (entry)); - text = gtk_entry_get_text (entry); + text = gtk_editable_get_text (GTK_EDITABLE (entry)); if (text == NULL || text0 == 0 || g_shell_parse_argv (text, &argc, &argv, NULL)) - gtk_style_context_remove_class (style_context, GTK_STYLE_CLASS_ERROR); + gtk_style_context_remove_class (style_context, "error"); else - gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_ERROR); + gtk_style_context_add_class (style_context, "error"); } static void @@ -222,9 +226,10 @@ sysprof_profiler_set_writer (profiler, writer); /* Add pids to profiler */ - gtk_container_foreach (GTK_CONTAINER (self->process_list_box), - (GtkCallback) sysprof_profiler_assistant_foreach_cb, - profiler); + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self->process_list_box)); + child; + child = gtk_widget_get_next_sibling (child)) + sysprof_profiler_assistant_foreach_cb (child, profiler); /* Setup whole system profiling */ sysprof_profiler_set_whole_system (profiler, gtk_switch_get_active (self->whole_system_switch)); @@ -237,7 +242,7 @@ const gchar *command; gint argc; - command = gtk_entry_get_text (self->command_line); + command = gtk_editable_get_text (GTK_EDITABLE (self->command_line)); g_shell_parse_argv (command, &argc, &argv, NULL); sysprof_profiler_set_spawn (profiler, TRUE); @@ -269,9 +274,10 @@ sysprof_profiler_add_source (profiler, symbols_source); /* Now allow the aids to add their sources */ - gtk_container_foreach (GTK_CONTAINER (self->aid_flow_box), - (GtkCallback) sysprof_profiler_assistant_foreach_cb, - profiler); + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self->aid_flow_box)); + child; + child = gtk_widget_get_next_sibling (child)) + sysprof_profiler_assistant_foreach_cb (child, profiler); g_signal_emit (self, signals START_RECORDING, 0, profiler); } @@ -309,20 +315,20 @@ static void sysprof_profiler_assistant_search_changed_cb (SysprofProfilerAssistant *self, - GtkSearchEntry *search_entry) + GtkEditable *search_entry) { g_autoptr(SysprofModelFilter) filter = NULL; - const gchar *text; + const char *text; g_assert (SYSPROF_IS_PROFILER_ASSISTANT (self)); - g_assert (GTK_IS_SEARCH_ENTRY (search_entry)); + g_assert (GTK_IS_EDITABLE (search_entry)); if (self->process_model == NULL) return; sysprof_process_model_queue_reload (self->process_model); - text = gtk_entry_get_text (GTK_ENTRY (search_entry)); + text = gtk_editable_get_text (GTK_EDITABLE (search_entry)); if (text0 == 0) { @@ -345,21 +351,26 @@ } static void -sysprof_profiler_assistant_destroy (GtkWidget *widget) +sysprof_profiler_assistant_dispose (GObject *object) { - SysprofProfilerAssistant *self = (SysprofProfilerAssistant *)widget; + SysprofProfilerAssistant *self = (SysprofProfilerAssistant *)object; + GtkWidget *child; g_clear_object (&self->process_model); - GTK_WIDGET_CLASS (sysprof_profiler_assistant_parent_class)->destroy (widget); + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); + + G_OBJECT_CLASS (sysprof_profiler_assistant_parent_class)->dispose (object); } static void sysprof_profiler_assistant_class_init (SysprofProfilerAssistantClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->destroy = sysprof_profiler_assistant_destroy; + object_class->dispose = sysprof_profiler_assistant_dispose; /** * SysprofProfilerAssistant::start-recording: @@ -377,18 +388,23 @@ G_TYPE_NONE, 1, SYSPROF_TYPE_PROFILER); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-profiler-assistant.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, allow_throttling); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, aid_flow_box); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, command_line); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, environ_editor); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, process_list_box); - gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, process_revealer); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, record_button); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, whole_system_switch); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, launch_switch); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, inherit_switch); gtk_widget_class_bind_template_child (widget_class, SysprofProfilerAssistant, search_entry); + sysprof_theme_manager_register_resource (sysprof_theme_manager_get_default (), + NULL, + NULL, + "/org/gnome/sysprof/css/SysprofProfilerAssistant-shared.css"); + g_type_ensure (SYSPROF_TYPE_AID_ICON); g_type_ensure (SYSPROF_TYPE_BATTERY_AID); g_type_ensure (SYSPROF_TYPE_CALLGRAPH_AID); @@ -428,9 +444,9 @@ self, G_CONNECT_SWAPPED); - g_signal_connect_object (self->process_revealer, - "notify::reveal-child", - G_CALLBACK (sysprof_profiler_assistant_notify_reveal_child_cb), + g_signal_connect_object (self->whole_system_switch, + "notify::active", + G_CALLBACK (sysprof_profiler_assistant_notify_active_cb), self, G_CONNECT_SWAPPED); @@ -465,12 +481,12 @@ if (path == NULL || path0 == 0) { - gtk_entry_set_text (GTK_ENTRY (self->command_line), ""); + gtk_editable_set_text (GTK_EDITABLE (self->command_line), ""); gtk_switch_set_active (self->launch_switch, FALSE); } else { - gtk_entry_set_text (GTK_ENTRY (self->command_line), path); + gtk_editable_set_text (GTK_EDITABLE (self->command_line), path); gtk_switch_set_active (self->launch_switch, TRUE); gtk_widget_grab_focus (GTK_WIDGET (self->command_line)); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.h
Changed
@@ -28,7 +28,7 @@ #define SYSPROF_TYPE_PROFILER_ASSISTANT (sysprof_profiler_assistant_get_type()) -G_DECLARE_FINAL_TYPE (SysprofProfilerAssistant, sysprof_profiler_assistant, SYSPROF, PROFILER_ASSISTANT, GtkBin) +G_DECLARE_FINAL_TYPE (SysprofProfilerAssistant, sysprof_profiler_assistant, SYSPROF, PROFILER_ASSISTANT, GtkWidget) GtkWidget *sysprof_profiler_assistant_new (void); void sysprof_profiler_assistant_set_executable (SysprofProfilerAssistant *self,
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-profiler-assistant.ui
Changed
@@ -1,6 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <interface> - <requires lib="gtk+" version="3.22"/> <object class="SysprofCpuAid" id="cpu_aid"> <property name="icon-name">sysprof-cpu</property> </object> @@ -62,494 +61,219 @@ <object class="SysprofDiskstatSource"/> </child> </object> - <template class="SysprofProfilerAssistant" parent="GtkBin"> + <template class="SysprofProfilerAssistant" parent="GtkWidget"> <child> - <object class="GtkScrolledWindow"> - <property name="propagate-natural-width">true</property> - <property name="propagate-natural-height">true</property> - <property name="hscrollbar-policy">never</property> - <property name="visible">true</property> + <object class="AdwPreferencesPage"> <child> - <object class="GtkBox"> - <property name="margin">36</property> - <property name="spacing">12</property> - <property name="orientation">vertical</property> - <property name="visible">true</property> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Profiling Target</property> <child> - <object class="DzlThreeGrid" id="three_grid"> - <property name="column-spacing">12</property> - <property name="row-spacing">6</property> - <property name="visible">true</property> - <child> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <property name="visible">true</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Profilers</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - <attributes> - <attribute name="weight" value="bold"/> - <attribute name="scale" value="0.83333"/> - </attributes> - </object> - </child> - <child> - <object class="GtkFlowBox" id="aid_flow_box"> - <property name="activate-on-single-click">true</property> - <property name="column-spacing">24</property> - <property name="row-spacing">12</property> - <property name="max-children-per-line">4</property> - <property name="min-children-per-line">4</property> - <property name="halign">fill</property> - <property name="homogeneous">true</property> - <property name="selection-mode">single</property> - <property name="margin-top">12</property> - <property name="margin-bottom">24</property> - <property name="visible">true</property> - <child> - <object class="SysprofAidIcon"> - <property name="aid">callgraph_aid</property> - <property name="selected">true</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">cpu_aid</property> - <property name="selected">true</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">memory_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">mutter_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">gjs_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">app_aid</property> - <property name="selected">true</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">rapl_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">battery_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">network_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="aid">diskstat_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="tooltip-text" translatable="yes">Track application memory allocations (Sysprof must launch target application)</property> - <property name="aid">memprof_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="SysprofAidIcon"> - <property name="tooltip-text" translatable="yes">Track slow operations on your applications main loop</property> - <property name="aid">speedtrack_aid</property> - <property name="selected">false</property> - <property name="visible">true</property> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="column">center</property> - <property name="row">5</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label1"> - <property name="label" translatable="yes">All Processes</property> - <property name="xalign">1.0</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="column">left</property> - <property name="row">0</property> - </packing> - </child> - <child> + <object class="AdwExpanderRow" id="whole_system_row"> + <property name="title" translatable="yes">Profile Entire System</property> + <property name="subtitle" translatable="yes">Sysprof can generate callgraphs for one or more processes on your system.</property> + <property name="expanded" bind-source="whole_system_switch" bind-property="active" bind-flags="invert-boolean|bidirectional|sync-create"/> + <child type="action"> <object class="GtkSwitch" id="whole_system_switch"> <property name="active">true</property> - <property name="halign">start</property> + <property name="halign">end</property> <property name="valign">center</property> - <property name="visible">true</property> </object> - <packing> - <property name="column">center</property> - <property name="row">0</property> - </packing> </child> <child> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="visible">true</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Include all applications and operating system kernel in callgraph. This may not be possible on some system configurations.</property> - <property name="margin-bottom">6</property> - <property name="max-width-chars">10</property> - <property name="wrap">true</property> - <property name="visible">true</property> - <property name="xalign">0.0</property> - <attributes> - <attribute name="scale" value="0.8333"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> + <object class="AdwEntryRow" id="search_entry"> + <property name="title" translatable="yes">Search Processes</property> + </object> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="hscrollbar-policy">never</property> + <property name="min-content-height">175</property> + <property name="max-content-height">175</property> <child> - <object class="GtkRevealer" id="process_revealer"> - <property name="reveal-child" bind-source="whole_system_switch" bind-property="active" bind-flags="sync-create|invert-boolean"/> - <property name="visible">true</property> - <child> - <object class="GtkBox"> - <property name="margin-bottom">12</property> - <property name="orientation">vertical</property> - <property name="visible">true</property> + <object class="GtkListBox" id="process_list_box"> + <property name="selection-mode">none</property> + <child type="placeholder"> + <object class="GtkLabel"> + <property name="margin-start">12</property> + <property name="margin-end">12</property> + <property name="label" translatable="yes">Loading Processes…</property> + <property name="valign">center</property> <style> - <class name="linked"/> + <class name="dim-label"/> </style> - <child> - <object class="GtkSearchEntry" id="search_entry"> - <property name="placeholder-text" translatable="yes">Search Processes…</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="GtkScrolledWindow"> - <property name="shadow-type">in</property> - <property name="hscrollbar-policy">never</property> - <property name="min-content-height">175</property> - <property name="max-content-height">175</property> - <property name="visible">true</property> - <child> - <object class="GtkListBox" id="process_list_box"> - <property name="selection-mode">none</property> - <property name="visible">true</property> - <child type="placeholder"> - <object class="GtkLabel"> - <property name="margin-left">12</property> - <property name="margin-right">12</property> - <property name="label" translatable="yes">Loading Processes…</property> - <property name="valign">center</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - </object> - </child> - </object> - </child> </object> </child> </object> </child> </object> - <packing> - <property name="column">center</property> - <property name="row">1</property> - </packing> </child> - <child> - <object class="GtkLabel" id="label2"> - <property name="label" translatable="yes">Launch Application</property> - <property name="xalign">1.0</property> - <property name="valign">start</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> + </object> + </child> + <child> + <object class="AdwExpanderRow"> + <property name="title" translatable="yes">Launch Application</property> + <property name="subtitle" translatable="yes">Sysprof can launch an application to be profiled. The profiler will automatically stop when it exits.</property> + <property name="expanded" bind-source="launch_switch" bind-property="active" bind-flags="bidirectional|sync-create"/> + <child type="action"> + <object class="GtkSwitch" id="launch_switch"> + <property name="active">false</property> + <property name="halign">end</property> + <property name="valign">center</property> </object> - <packing> - <property name="column">left</property> - <property name="row">2</property> - </packing> </child> <child> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="width-request">500</property> - <property name="valign">start</property> - <property name="visible">true</property> - <child> - <object class="GtkSwitch" id="launch_switch"> - <property name="active">false</property> - <property name="halign">start</property> - <property name="valign">center</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Enable to launch a program of your choosing before profiling.</property> - <property name="margin-top">6</property> - <property name="margin-bottom">6</property> - <property name="max-width-chars">10</property> - <property name="wrap">true</property> - <property name="visible">true</property> - <property name="xalign">0.0</property> - <attributes> - <attribute name="scale" value="0.8333"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - <child> - <object class="GtkRevealer" id="launch_revealer"> - <property name="reveal-child" bind-source="launch_switch" bind-property="active" bind-flags="sync-create"/> - <property name="visible">true</property> - <child> - <object class="GtkBox"> - <property name="margin-top">6</property> - <property name="spacing">6</property> - <property name="margin-bottom">12</property> - <property name="orientation">vertical</property> - <property name="visible">true</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Command Line</property> - <property name="xalign">0.0</property> - <property name="visible">true</property> - <attributes> - <attribute name="scale" value="0.8333"/> - <attribute name="weight" value="bold"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - <child> - <object class="GtkEntry" id="command_line"> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Environment</property> - <property name="margin-top">12</property> - <property name="xalign">0.0</property> - <property name="visible">true</property> - <attributes> - <attribute name="scale" value="0.8333"/> - <attribute name="weight" value="bold"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - <child> - <object class="GtkFrame"> - <property name="shadow-type">in</property> - <property name="visible">true</property> - <child> - <object class="SysprofEnvironEditor" id="environ_editor"> - <property name="visible">true</property> - </object> - </child> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Inherit Environment</property> - <property name="margin-top">12</property> - <property name="max-width-chars">10</property> - <property name="wrap">true</property> - <property name="visible">true</property> - <property name="xalign">0.0</property> - <attributes> - <attribute name="scale" value="0.8333"/> - <attribute name="weight" value="bold"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - <child> - <object class="GtkSwitch" id="inherit_switch"> - <property name="active">true</property> - <property name="halign">start</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Enable to ensure your application shares the display, message-bus, and other desktop environment settings.</property> - <property name="margin-bottom">12</property> - <property name="max-width-chars">10</property> - <property name="wrap">true</property> - <property name="visible">true</property> - <property name="xalign">0.0</property> - <attributes> - <attribute name="scale" value="0.8333"/> - </attributes> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - </object> - </child> - </object> - </child> + <object class="AdwEntryRow" id="command_line"> + <property name="title" translatable="yes">Command Line</property> </object> - <packing> - <property name="column">center</property> - <property name="row">2</property> - </packing> </child> <child> - <object class="GtkLabel" id="label3"> - <property name="label" translatable="yes">Allow CPU Throttling</property> - <property name="xalign">1.0</property> - <property name="valign">start</property> - <property name="visible">true</property> - <style> - <class name="dim-label"/> - </style> + <object class="SysprofEnvironEditor" id="environ_editor"> </object> - <packing> - <property name="column">left</property> - <property name="row">3</property> - </packing> </child> <child> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <property name="visible">true</property> + <object class="AdwActionRow"> + <property name="title" translatable="yes">Inherit Environment</property> + <property name="subtitle" translatable="yes">Enable to ensure your application shares the display, message-bus, and other desktop environment settings.</property> + <property name="activatable-widget">inherit_switch</property> <child> - <object class="GtkSwitch" id="allow_throttling"> + <object class="GtkSwitch" id="inherit_switch"> <property name="active">true</property> - <property name="halign">start</property> + <property name="halign">end</property> <property name="valign">center</property> - <property name="visible">true</property> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">If disabled, your CPU will be placed in performance mode. It will be restored after profiling.</property> - <property name="max-width-chars">10</property> - <property name="wrap">true</property> - <property name="visible">true</property> - <property name="xalign">0.0</property> - <attributes> - <attribute name="scale" value="0.8333"/> - </attributes> - <style> - <class name="dim-label"/> - </style> </object> </child> </object> - <packing> - <property name="column">center</property> - <property name="row">3</property> - </packing> </child> + </object> + </child> + </object> + </child> + <child> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Performance</property> + <child> + <object class="AdwActionRow"> + <property name="title" translatable="yes">Allow CPU Throttling</property> + <property name="subtitle" translatable="yes">When enabled, your system is allowed to scale CPU frequency as necessary.</property> + <property name="activatable-widget">allow_throttling</property> <child> - <object class="GtkButton" id="record_button"> - <property name="label" translatable="yes">_Record</property> - <property name="use-underline">true</property> + <object class="GtkSwitch" id="allow_throttling"> + <property name="active">true</property> <property name="halign">end</property> - <property name="width-request">125</property> - <property name="visible">true</property> - <property name="margin-top">24</property> - <property name="margin-bottom">12</property> - <style> - <class name="suggested-action"/> - </style> + <property name="valign">center</property> </object> - <packing> - <property name="column">center</property> - <property name="row">4</property> - </packing> </child> </object> - <packing> - <property name="pack-type">start</property> - <property name="position">2</property> - </packing> + </child> + </object> + </child> + <child> + <object class="AdwPreferencesGroup"> + <property name="title" translatable="yes">Instruments</property> + <child> + <object class="GtkFlowBox" id="aid_flow_box"> + <property name="activate-on-single-click">true</property> + <property name="column-spacing">24</property> + <property name="row-spacing">12</property> + <property name="max-children-per-line">4</property> + <property name="min-children-per-line">4</property> + <property name="halign">fill</property> + <property name="homogeneous">true</property> + <property name="selection-mode">single</property> + <child> + <object class="SysprofAidIcon"> + <property name="aid">callgraph_aid</property> + <property name="selected">true</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">cpu_aid</property> + <property name="selected">true</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">memory_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">mutter_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">gjs_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">app_aid</property> + <property name="selected">true</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">rapl_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">battery_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">network_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="aid">diskstat_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="tooltip-text" translatable="yes">Track application memory allocations (Sysprof must launch target application)</property> + <property name="aid">memprof_aid</property> + <property name="selected">false</property> + </object> + </child> + <child> + <object class="SysprofAidIcon"> + <property name="tooltip-text" translatable="yes">Track slow operations on your applications main loop</property> + <property name="aid">speedtrack_aid</property> + <property name="selected">false</property> + </object> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="AdwPreferencesGroup"> + <child> + <object class="GtkButton" id="record_button"> + <property name="label" translatable="yes">_Record</property> + <property name="use-underline">true</property> + <property name="halign">end</property> + <property name="width-request">125</property> + <style> + <class name="suggested-action"/> + </style> + </object> </child> </object> </child> </object> </child> </template> - <object class="GtkSizeGroup"> - <property name="mode">vertical</property> - <widgets> - <widget name="label1"/> - <widget name="whole_system_switch"/> - </widgets> - </object> - <object class="GtkSizeGroup"> - <property name="mode">vertical</property> - <widgets> - <widget name="label2"/> - <widget name="label3"/> - <widget name="allow_throttling"/> - <widget name="launch_switch"/> - </widgets> - </object> </interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-rapl-aid.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-rapl-aid.c
Changed
@@ -227,7 +227,7 @@ if (found > 0) sysprof_display_add_group (present->display, energy); else - gtk_widget_destroy (GTK_WIDGET (energy)); + g_object_unref (g_object_ref_sink (energy)); } return counters != NULL;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.c
Changed
@@ -31,7 +31,7 @@ gulong notify_elapsed_handler; } SysprofRecordingStateViewPrivate; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofRecordingStateView, sysprof_recording_state_view, GTK_TYPE_BIN) +G_DEFINE_TYPE_WITH_PRIVATE (SysprofRecordingStateView, sysprof_recording_state_view, GTK_TYPE_WIDGET) enum { PROP_0, @@ -79,18 +79,22 @@ } static void -sysprof_recording_state_view_destroy (GtkWidget *widget) +sysprof_recording_state_view_dispose (GObject *object) { - SysprofRecordingStateView *self = (SysprofRecordingStateView *)widget; + SysprofRecordingStateView *self = (SysprofRecordingStateView *)object; SysprofRecordingStateViewPrivate *priv = sysprof_recording_state_view_get_instance_private (self); + GtkWidget *child; + + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); if (priv->profiler != NULL) { - g_signal_handler_disconnect (priv->profiler, priv->notify_elapsed_handler); + g_clear_signal_handler (&priv->notify_elapsed_handler, priv->profiler); g_clear_object (&priv->profiler); } - GTK_WIDGET_CLASS (sysprof_recording_state_view_parent_class)->destroy (widget); + G_OBJECT_CLASS (sysprof_recording_state_view_parent_class)->dispose (object); } static void @@ -138,11 +142,10 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + object_class->dispose = sysprof_recording_state_view_dispose; object_class->get_property = sysprof_recording_state_view_get_property; object_class->set_property = sysprof_recording_state_view_set_property; - widget_class->destroy = sysprof_recording_state_view_destroy; - properties PROP_PROFILER = g_param_spec_object ("profiler", "Profiler", @@ -153,6 +156,7 @@ g_object_class_install_properties (object_class, N_PROPS, properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-recording-state-view.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_bind_template_child_private (widget_class, SysprofRecordingStateView, elapsed); gtk_widget_class_bind_template_child_private (widget_class, SysprofRecordingStateView, samples);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.h
Changed
@@ -27,13 +27,11 @@ #define SYSPROF_TYPE_RECORDING_STATE_VIEW (sysprof_recording_state_view_get_type()) -G_DECLARE_DERIVABLE_TYPE (SysprofRecordingStateView, sysprof_recording_state_view, SYSPROF, RECORDING_STATE_VIEW, GtkBin) +G_DECLARE_DERIVABLE_TYPE (SysprofRecordingStateView, sysprof_recording_state_view, SYSPROF, RECORDING_STATE_VIEW, GtkWidget) struct _SysprofRecordingStateViewClass { - GtkBinClass parent; - - gpointer padding4; + GtkWidgetClass parent; }; GtkWidget *sysprof_recording_state_view_new (void);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-recording-state-view.ui
Changed
@@ -1,11 +1,14 @@ <?xml version="1.0"?> <interface> - <template class="SysprofRecordingStateView" parent="GtkBin"> + <template class="SysprofRecordingStateView" parent="GtkWidget"> <child> <object class="GtkBox"> <property name="width-request">500</property> <property name="halign">center</property> - <property name="border-width">36</property> + <property name="margin-start">36</property> + <property name="margin-end">36</property> + <property name="margin-top">36</property> + <property name="margin-bottom">36</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <property name="visible">true</property>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-scrollmap.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-scrollmap.c
Changed
@@ -28,7 +28,9 @@ struct _SysprofScrollmap { - GtkScrollbar parent_instance; + GtkWidget parent_instance; + + GtkWidget *scrollbar; gint64 begin_time; gint64 end_time; @@ -49,7 +51,7 @@ gint height; } Recalculate; -G_DEFINE_TYPE (SysprofScrollmap, sysprof_scrollmap, GTK_TYPE_SCROLLBAR) +G_DEFINE_TYPE (SysprofScrollmap, sysprof_scrollmap, GTK_TYPE_WIDGET) static void recalculate_free (gpointer data) @@ -152,68 +154,62 @@ return g_task_propagate_pointer (G_TASK (result), error); } -static void +static inline void draw_boxes (const GtkAllocation *alloc, - cairo_t *cr, - gint x, - gint n_boxes) + GtkSnapshot *snapshot, + int x, + int n_boxes, + const GdkRGBA *color) { - gint y; - - g_assert (cr != NULL); + int y = alloc->y + alloc->height - BOX_SIZE; - y = alloc->height - BOX_SIZE; - - for (gint i = 0; i < n_boxes; i++) + for (int i = 0; i < n_boxes; i++) { - cairo_rectangle (cr, x, y, BOX_SIZE, -BOX_SIZE); + gtk_snapshot_append_color (snapshot, color, &GRAPHENE_RECT_INIT (x, y, BOX_SIZE, -BOX_SIZE)); y -= (BOX_SIZE + 1); } - - cairo_fill (cr); } -static gboolean -sysprof_scrollmap_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_scrollmap_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofScrollmap *self = (SysprofScrollmap *)widget; GtkStyleContext *style_context; GtkAllocation alloc; GdkRGBA color; - gint max_boxes; + int max_boxes; g_assert (SYSPROF_IS_SCROLLMAP (self)); - g_assert (cr != NULL); + g_assert (GTK_IS_SNAPSHOT (snapshot)); if (self->buckets == NULL) goto chainup; gtk_widget_get_allocation (widget, &alloc); + + alloc.y += 3; + alloc.height -= 6; + max_boxes = alloc.height / (BOX_SIZE + 1) - 1; style_context = gtk_widget_get_style_context (widget); - gtk_style_context_get_color (style_context, - gtk_style_context_get_state (style_context), - &color); - gdk_cairo_set_source_rgba (cr, &color); + gtk_style_context_get_color (style_context, &color); for (guint i = 0; i < self->buckets->len; i++) { - gint n = g_array_index (self->buckets, gint, i); - gint x = 1 + i * (BOX_SIZE + 1); - gint b = max_boxes * (n / (gdouble)self->most); + int n = g_array_index (self->buckets, gint, i); + int x = 1 + i * (BOX_SIZE + 1); + int b = max_boxes * (n / (gdouble)self->most); -#if 1 if (n > 0) b = MAX (b, 1); -#endif - draw_boxes (&alloc, cr, x, b); + draw_boxes (&alloc, snapshot, x, b, &color); } chainup: - return GTK_WIDGET_CLASS (sysprof_scrollmap_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_scrollmap_parent_class)->snapshot (widget, snapshot); } static void @@ -246,14 +242,20 @@ } static void -sysprof_scrollmap_finalize (GObject *object) +sysprof_scrollmap_dispose (GObject *object) { SysprofScrollmap *self = (SysprofScrollmap *)object; + if (self->scrollbar) + { + gtk_widget_unparent (GTK_WIDGET (self->scrollbar)); + self->scrollbar = NULL; + } + g_clear_pointer (&self->buckets, g_array_unref); g_clear_pointer (&self->timings, g_array_unref); - G_OBJECT_CLASS (sysprof_scrollmap_parent_class)->finalize (object); + G_OBJECT_CLASS (sysprof_scrollmap_parent_class)->dispose (object); } static void @@ -262,14 +264,21 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = sysprof_scrollmap_finalize; + object_class->dispose = sysprof_scrollmap_dispose; - widget_class->draw = sysprof_scrollmap_draw; + widget_class->snapshot = sysprof_scrollmap_snapshot; + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); + gtk_widget_class_set_css_name (widget_class, "scrollmap"); } static void sysprof_scrollmap_init (SysprofScrollmap *self) { + self->scrollbar = g_object_new (GTK_TYPE_SCROLLBAR, + "orientation", GTK_ORIENTATION_HORIZONTAL, + NULL); + gtk_widget_set_parent (GTK_WIDGET (self->scrollbar), GTK_WIDGET (self)); } void @@ -304,3 +313,21 @@ sysprof_scrollmap_recalculate_cb, NULL); } + +void +sysprof_scrollmap_set_adjustment (SysprofScrollmap *self, + GtkAdjustment *adjustment) +{ + g_return_if_fail (SYSPROF_IS_SCROLLMAP (self)); + g_return_if_fail (!adjustment || GTK_IS_ADJUSTMENT (adjustment)); + + gtk_scrollbar_set_adjustment (GTK_SCROLLBAR (self->scrollbar), adjustment); +} + +GtkAdjustment * +sysprof_scrollmap_get_adjustment (SysprofScrollmap *self) +{ + g_return_val_if_fail (SYSPROF_IS_SCROLLMAP (self), NULL); + + return gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (self->scrollbar)); +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-scrollmap.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-scrollmap.h
Changed
@@ -26,12 +26,15 @@ #define SYSPROF_TYPE_SCROLLMAP (sysprof_scrollmap_get_type()) -G_DECLARE_FINAL_TYPE (SysprofScrollmap, sysprof_scrollmap, SYSPROF, SCROLLMAP, GtkScrollbar) +G_DECLARE_FINAL_TYPE (SysprofScrollmap, sysprof_scrollmap, SYSPROF, SCROLLMAP, GtkWidget) -void sysprof_scrollmap_set_timings (SysprofScrollmap *self, - GArray *timings); -void sysprof_scrollmap_set_time_range (SysprofScrollmap *self, - gint64 begin_time, - gint64 end_time); +GtkAdjustment *sysprof_scrollmap_get_adjustment (SysprofScrollmap *self); +void sysprof_scrollmap_set_adjustment (SysprofScrollmap *self, + GtkAdjustment *adjustment); +void sysprof_scrollmap_set_timings (SysprofScrollmap *self, + GArray *timings); +void sysprof_scrollmap_set_time_range (SysprofScrollmap *self, + gint64 begin_time, + gint64 end_time); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-tab.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-tab.c
Changed
@@ -22,14 +22,15 @@ #include "config.h" -#include "sysprof-display.h" +#include "sysprof-display-private.h" #include "sysprof-tab.h" #include "sysprof-ui-private.h" struct _SysprofTab { - GtkBox parent_instance; + GtkWidget parent_instance; + GtkWidget *center_box; GtkButton *close_button; GtkLabel *title; GtkImage *recording; @@ -37,7 +38,7 @@ SysprofDisplay *display; }; -G_DEFINE_TYPE (SysprofTab, sysprof_tab, GTK_TYPE_BOX) +G_DEFINE_TYPE (SysprofTab, sysprof_tab, GTK_TYPE_WIDGET) enum { PROP_0, @@ -62,18 +63,19 @@ g_assert (SYSPROF_IS_TAB (self)); g_assert (GTK_IS_BUTTON (button)); - if (self->display != NULL) - gtk_widget_destroy (GTK_WIDGET (self->display)); + if (self->display) + _sysprof_display_destroy (self->display); } static void -sysprof_tab_finalize (GObject *object) +sysprof_tab_dispose (GObject *object) { SysprofTab *self = (SysprofTab *)object; + g_clear_pointer (&self->center_box, gtk_widget_unparent); g_clear_weak_pointer (&self->display); - G_OBJECT_CLASS (sysprof_tab_parent_class)->finalize (object); + G_OBJECT_CLASS (sysprof_tab_parent_class)->dispose (object); } static void @@ -122,11 +124,13 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = sysprof_tab_finalize; + object_class->dispose = sysprof_tab_dispose; object_class->get_property = sysprof_tab_get_property; object_class->set_property = sysprof_tab_set_property; gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-tab.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); + gtk_widget_class_bind_template_child (widget_class, SysprofTab, center_box); gtk_widget_class_bind_template_child (widget_class, SysprofTab, close_button); gtk_widget_class_bind_template_child (widget_class, SysprofTab, recording); gtk_widget_class_bind_template_child (widget_class, SysprofTab, title);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-tab.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-tab.h
Changed
@@ -28,7 +28,7 @@ #define SYSPROF_TYPE_TAB (sysprof_tab_get_type()) -G_DECLARE_FINAL_TYPE (SysprofTab, sysprof_tab, SYSPROF, TAB, GtkBox) +G_DECLARE_FINAL_TYPE (SysprofTab, sysprof_tab, SYSPROF, TAB, GtkWidget) GtkWidget *sysprof_tab_new (SysprofDisplay *display);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-tab.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-tab.ui
Changed
@@ -1,60 +1,36 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.0"/> - <template class="SysprofTab" parent="GtkBox"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="spacing">6</property> + <template class="SysprofTab" parent="GtkWidget"> + <property name="hexpand">true</property> <child> - <object class="GtkImage" id="recording"> - <property name="visible">false</property> - <property name="icon-name">media-record-symbolic</property> - <property name="pixel-size">16</property> - <property name="hexpand">true</property> - <property name="halign">end</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - <property name="pack-type">start</property> - </packing> - </child> - <child type="center"> - <object class="GtkLabel" id="title"> - <property name="visible">True</property> - <property name="can_focus">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="close_button"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="receives_default">False</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <object class="GtkCenterBox" id="center_box"> + <child type="start"> + <object class="GtkImage" id="recording"> + <property name="visible">false</property> + <property name="icon-name">media-record-symbolic</property> + <property name="pixel-size">16</property> + <property name="hexpand">true</property> + <property name="halign">end</property> + </object> + </child> + <child type="center"> + <object class="GtkLabel" id="title"> + <property name="margin-start">6</property> + <property name="margin-end">6</property> + </object> + </child> + <child type="end"> + <object class="GtkButton" id="close_button"> + <property name="receives_default">False</property> <property name="icon_name">window-close-symbolic</property> + <style> + <class name="flat"/> + <class name="small-button"/> + <class name="image-button"/> + </style> </object> </child> - <style> - <class name="flat"/> - <class name="small-button"/> - </style> </object> - <packing> - <property name="pack-type">end</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </template> </interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-theme-manager.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-theme-manager.c
Changed
@@ -58,8 +58,8 @@ if (theme_resource->provider != NULL) { - gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), - GTK_STYLE_PROVIDER (theme_resource->provider)); + gtk_style_context_remove_provider_for_display (gdk_display_get_default (), + GTK_STYLE_PROVIDER (theme_resource->provider)); g_clear_object (&theme_resource->provider); } @@ -121,17 +121,17 @@ { theme_resource->provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (theme_resource->provider, theme_resource->resource); - gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), - GTK_STYLE_PROVIDER (theme_resource->provider), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1); + gtk_style_context_add_provider_for_display (gdk_display_get_default (), + GTK_STYLE_PROVIDER (theme_resource->provider), + GTK_STYLE_PROVIDER_PRIORITY_THEME+1); } } else { if (theme_resource->provider != NULL) { - gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), - GTK_STYLE_PROVIDER (theme_resource->provider)); + gtk_style_context_remove_provider_for_display (gdk_display_get_default (), + GTK_STYLE_PROVIDER (theme_resource->provider)); g_clear_object (&theme_resource->provider); } } @@ -146,10 +146,10 @@ g_assert (SYSPROF_IS_THEME_MANAGER (self)); if (self->reload_source == 0) - self->reload_source = gdk_threads_add_idle_full (G_PRIORITY_LOW, - sysprof_theme_manager_do_reload, - self, - NULL); + self->reload_source = g_idle_add_full (G_PRIORITY_LOW, + sysprof_theme_manager_do_reload, + self, + NULL); } static void @@ -181,7 +181,8 @@ { self->theme_resources = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, theme_resource_free); - gtk_icon_theme_add_resource_path (gtk_icon_theme_get_default (), "/org/gnome/sysprof/icons"); + gtk_icon_theme_add_resource_path (gtk_icon_theme_get_for_display (gdk_display_get_default ()), + "/org/gnome/sysprof/icons"); } /**
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-time-label.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-time-label.c
Changed
@@ -26,17 +26,37 @@ struct _SysprofTimeLabel { - GtkBox parent; - - GtkLabel *minutes; - GtkLabel *seconds; + GtkWidget parent_instance; + GtkCenterBox *box; + GtkLabel *minutes; + GtkLabel *seconds; }; -G_DEFINE_TYPE (SysprofTimeLabel, sysprof_time_label, GTK_TYPE_BOX) +G_DEFINE_TYPE (SysprofTimeLabel, sysprof_time_label, GTK_TYPE_WIDGET) + +static void +sysprof_time_label_dispose (GObject *object) +{ + SysprofTimeLabel *self = (SysprofTimeLabel *)object; + + if (self->box) + { + gtk_widget_unparent (GTK_WIDGET (self->box)); + self->box = NULL; + } + + G_OBJECT_CLASS (sysprof_time_label_parent_class)->dispose (object); +} static void sysprof_time_label_class_init (SysprofTimeLabelClass *klass) { + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = sysprof_time_label_dispose; + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void @@ -48,36 +68,32 @@ pango_attr_list_insert (attrs, pango_attr_scale_new (4)); pango_attr_list_insert (attrs, pango_attr_weight_new (PANGO_WEIGHT_BOLD)); - gtk_box_set_spacing (GTK_BOX (self), 3); + self->box = GTK_CENTER_BOX (gtk_center_box_new ()); + gtk_widget_set_parent (GTK_WIDGET (self->box), GTK_WIDGET (self)); self->minutes = g_object_new (GTK_TYPE_LABEL, "attributes", attrs, - "visible", TRUE, "xalign", 1.0f, + "hexpand", TRUE, NULL); - gtk_container_add_with_properties (GTK_CONTAINER (self), GTK_WIDGET (self->minutes), - "pack-type", GTK_PACK_START, - "expand", TRUE, - "fill", TRUE, - NULL); + gtk_center_box_set_start_widget (self->box, GTK_WIDGET (self->minutes)); sep = g_object_new (GTK_TYPE_LABEL, + "margin-start", 3, + "margin-end", 3, "attributes", attrs, "visible", TRUE, "label", ":", NULL); - gtk_box_set_center_widget (GTK_BOX (self), sep); + gtk_center_box_set_center_widget (self->box, sep); self->seconds = g_object_new (GTK_TYPE_LABEL, "attributes", attrs, "visible", TRUE, "xalign", 0.0f, + "hexpand", TRUE, NULL); - gtk_container_add_with_properties (GTK_CONTAINER (self), GTK_WIDGET (self->seconds), - "pack-type", GTK_PACK_END, - "expand", TRUE, - "fill", TRUE, - NULL); + gtk_center_box_set_end_widget (self->box, GTK_WIDGET (self->seconds)); } void
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-time-label.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-time-label.h
Changed
@@ -26,7 +26,7 @@ #define SYSPROF_TYPE_TIME_LABEL (sysprof_time_label_get_type()) -G_DECLARE_FINAL_TYPE (SysprofTimeLabel, sysprof_time_label, SYSPROF, TIME_LABEL, GtkBox) +G_DECLARE_FINAL_TYPE (SysprofTimeLabel, sysprof_time_label, SYSPROF, TIME_LABEL, GtkWidget) void sysprof_time_label_set_duration (SysprofTimeLabel *self, guint duration);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-time-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-time-visualizer.c
Changed
@@ -114,35 +114,39 @@ return ret; } -static gboolean -sysprof_time_visualizer_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_time_visualizer_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofTimeVisualizer *self = (SysprofTimeVisualizer *)widget; SysprofTimeVisualizerPrivate *priv = sysprof_time_visualizer_get_instance_private (self); GtkStyleContext *style_context; - GtkStateFlags flags; + cairo_t *cr; GtkAllocation alloc; - GdkRectangle clip; GdkRGBA foreground; - gboolean ret; g_assert (SYSPROF_IS_TIME_VISUALIZER (widget)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); gtk_widget_get_allocation (widget, &alloc); - ret = GTK_WIDGET_CLASS (sysprof_time_visualizer_parent_class)->draw (widget, cr); + GTK_WIDGET_CLASS (sysprof_time_visualizer_parent_class)->snapshot (widget, snapshot); if (priv->cache == NULL) - return ret; + return; +#if 0 if (!gdk_cairo_get_clip_rectangle (cr, &clip)) return ret; +#else + alloc.x = 0; + alloc.y = 0; +#endif style_context = gtk_widget_get_style_context (widget); - flags = gtk_widget_get_state_flags (widget); - gtk_style_context_get_color (style_context, flags, &foreground); + gtk_style_context_get_color (style_context, &foreground); + + cr = gtk_snapshot_append_cairo (snapshot, &GRAPHENE_RECT_INIT (0, 0, alloc.width, alloc.height)); gdk_cairo_set_source_rgba (cr, &foreground); @@ -187,7 +191,7 @@ } } - return ret; + cairo_destroy (cr); } static void @@ -243,10 +247,10 @@ if (priv->queued_load == 0) priv->queued_load = - gdk_threads_add_idle_full (G_PRIORITY_LOW, - sysprof_time_visualizer_do_reload, - self, - NULL); + g_idle_add_full (G_PRIORITY_LOW, + sysprof_time_visualizer_do_reload, + self, + NULL); } static void @@ -283,11 +287,7 @@ g_clear_pointer (&priv->cache, point_cache_unref); g_clear_pointer (&priv->reader, sysprof_capture_reader_unref); - if (priv->queued_load != 0) - { - g_source_remove (priv->queued_load); - priv->queued_load = 0; - } + g_clear_handle_id (&priv->queued_load, g_source_remove); G_OBJECT_CLASS (sysprof_time_visualizer_parent_class)->finalize (object); } @@ -301,7 +301,7 @@ object_class->finalize = sysprof_time_visualizer_finalize; - widget_class->draw = sysprof_time_visualizer_draw; + widget_class->snapshot = sysprof_time_visualizer_snapshot; visualizer_class->set_reader = sysprof_time_visualizer_set_reader; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-ui.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-ui.h
Changed
@@ -20,7 +20,7 @@ #pragma once -#include <dazzle.h> +#include <gtk/gtk.h> #include <sysprof.h> G_BEGIN_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-group-header.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-group-header.c
Changed
@@ -38,17 +38,28 @@ G_DEFINE_TYPE (SysprofVisualizerGroupHeader, sysprof_visualizer_group_header, GTK_TYPE_LIST_BOX_ROW) static void -sysprof_visualizer_group_header_finalize (GObject *object) +sysprof_visualizer_group_header_dispose (GObject *object) { - G_OBJECT_CLASS (sysprof_visualizer_group_header_parent_class)->finalize (object); + SysprofVisualizerGroupHeader *self = (SysprofVisualizerGroupHeader *)object; + + if (self->box) + { + gtk_widget_unparent (GTK_WIDGET (self->box)); + self->box = NULL; + } + + G_OBJECT_CLASS (sysprof_visualizer_group_header_parent_class)->dispose (object); } static void sysprof_visualizer_group_header_class_init (SysprofVisualizerGroupHeaderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = sysprof_visualizer_group_header_finalize; + object_class->dispose = sysprof_visualizer_group_header_dispose; + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void @@ -58,7 +69,7 @@ "orientation", GTK_ORIENTATION_VERTICAL, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->box)); + gtk_widget_set_parent (GTK_WIDGET (self->box), GTK_WIDGET (self)); } void @@ -68,8 +79,9 @@ GMenuModel *menu, GtkWidget *widget) { - GtkBox *box; GtkWidget *group; + GtkWidget *sibling; + GtkBox *box; g_return_if_fail (SYSPROF_IS_VISUALIZER_GROUP_HEADER (self)); g_return_if_fail (SYSPROF_IS_VISUALIZER (widget)); @@ -81,9 +93,11 @@ "visible", TRUE, NULL); g_object_bind_property (widget, "visible", box, "visible", G_BINDING_SYNC_CREATE); - gtk_container_add_with_properties (GTK_CONTAINER (self->box), GTK_WIDGET (box), - "position", position, - NULL); + + sibling = gtk_widget_get_first_child (GTK_WIDGET (self->box)); + for (; position > 1 && sibling; position--) + sibling = gtk_widget_get_next_sibling (sibling); + gtk_box_insert_child_after (self->box, GTK_WIDGET (box), sibling); if (title != NULL) { @@ -95,13 +109,16 @@ label = g_object_new (GTK_TYPE_LABEL, "attributes", attrs, "ellipsize", PANGO_ELLIPSIZE_MIDDLE, - "margin", 6, + "margin-top", 6, + "margin-bottom", 6, + "margin-start", 6, + "margin-end", 6, "hexpand", TRUE, "label", title, "visible", TRUE, "xalign", 0.0f, NULL); - gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (label)); + gtk_box_append (box, GTK_WIDGET (label)); pango_attr_list_unref (attrs); gtk_size_group_add_widget (size_group, widget); @@ -120,8 +137,8 @@ "pixel-size", 16, "visible", TRUE, NULL); - dzl_gtk_widget_add_style_class (GTK_WIDGET (image), "dim-label"); - gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (image)); + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (image)), "dim-label"); + gtk_box_append (box, GTK_WIDGET (image)); } if (menu != NULL) @@ -134,12 +151,11 @@ "icon-name", "view-more-symbolic", "visible", TRUE, NULL), - "margin-right", 6, + "margin-end", 6, "direction", GTK_ARROW_RIGHT, "halign", GTK_ALIGN_CENTER, "menu-model", menu, "tooltip-text", _("Display supplemental graphs"), - "use-popover", FALSE, "valign", GTK_ALIGN_CENTER, "visible", TRUE, NULL); @@ -148,7 +164,7 @@ gtk_style_context_add_class (style_context, "small-button"); gtk_style_context_add_class (style_context, "flat"); - gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (button)); + gtk_box_append (box, GTK_WIDGET (button)); } }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-group.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-group.c
Changed
@@ -22,7 +22,6 @@ #include "config.h" -#include <dazzle.h> #include <glib/gi18n.h> #include "sysprof-visualizer.h" @@ -159,21 +158,6 @@ } static void -sysprof_visualizer_group_add (GtkContainer *container, - GtkWidget *child) -{ - SysprofVisualizerGroup *self = (SysprofVisualizerGroup *)container; - - g_assert (SYSPROF_IS_VISUALIZER_GROUP (self)); - g_assert (GTK_IS_WIDGET (child)); - - if (SYSPROF_IS_VISUALIZER (child)) - sysprof_visualizer_group_insert (self, SYSPROF_VISUALIZER (child), -1, FALSE); - else - GTK_CONTAINER_CLASS (sysprof_visualizer_group_parent_class)->add (container, child); -} - -static void sysprof_visualizer_group_finalize (GObject *object) { SysprofVisualizerGroup *self = (SysprofVisualizerGroup *)object; @@ -186,7 +170,7 @@ g_clear_object (&priv->rows_menu); g_clear_object (&priv->actions); - dzl_clear_weak_pointer (&priv->header); + g_clear_weak_pointer (&priv->header); G_OBJECT_CLASS (sysprof_visualizer_group_parent_class)->finalize (object); } @@ -258,14 +242,11 @@ { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); object_class->finalize = sysprof_visualizer_group_finalize; object_class->get_property = sysprof_visualizer_group_get_property; object_class->set_property = sysprof_visualizer_group_set_property; - container_class->add = sysprof_visualizer_group_add; - properties PROP_HAS_PAGE = g_param_spec_boolean ("has-page", "Has Page", @@ -331,7 +312,7 @@ "orientation", GTK_ORIENTATION_VERTICAL, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (priv->visualizers)); + gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (self), GTK_WIDGET (priv->visualizers)); } void @@ -343,11 +324,10 @@ g_return_if_fail (SYSPROF_IS_VISUALIZER_GROUP (self)); g_return_if_fail (!header || SYSPROF_IS_VISUALIZER_GROUP_HEADER (header)); - if (dzl_set_weak_pointer (&priv->header, header)) + if (g_set_weak_pointer (&priv->header, header)) { if (header != NULL) { - GList *children; guint position = 0; gtk_widget_insert_action_group (GTK_WIDGET (header), @@ -355,11 +335,11 @@ G_ACTION_GROUP (priv->actions)); gtk_size_group_add_widget (priv->size_group, GTK_WIDGET (header)); - children = gtk_container_get_children (GTK_CONTAINER (priv->visualizers)); - - for (const GList *iter = children; iter; iter = iter->next) + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (priv->visualizers)); + child; + child = gtk_widget_get_next_sibling (child)) { - SysprofVisualizer *vis = iter->data; + SysprofVisualizer *vis = SYSPROF_VISUALIZER (child); const gchar *title; GMenuModel *menu = NULL; @@ -381,19 +361,10 @@ position++; } - - g_list_free (children); } } } -static void -sysprof_visualizer_group_set_reader_cb (SysprofVisualizer *visualizer, - SysprofCaptureReader *reader) -{ - sysprof_visualizer_set_reader (visualizer, reader); -} - void _sysprof_visualizer_group_set_reader (SysprofVisualizerGroup *self, SysprofCaptureReader *reader) @@ -403,9 +374,10 @@ g_return_if_fail (SYSPROF_IS_VISUALIZER_GROUP (self)); g_return_if_fail (reader != NULL); - gtk_container_foreach (GTK_CONTAINER (priv->visualizers), - (GtkCallback) sysprof_visualizer_group_set_reader_cb, - reader); + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (priv->visualizers)); + child; + child = gtk_widget_get_next_sibling (child)) + sysprof_visualizer_set_reader (SYSPROF_VISUALIZER (child), reader); } void @@ -415,13 +387,18 @@ gboolean can_toggle) { SysprofVisualizerGroupPrivate *priv = sysprof_visualizer_group_get_instance_private (self); + GtkWidget *sibling = NULL; g_return_if_fail (SYSPROF_IS_VISUALIZER_GROUP (self)); g_return_if_fail (SYSPROF_IS_VISUALIZER (visualizer)); - gtk_container_add_with_properties (GTK_CONTAINER (priv->visualizers), GTK_WIDGET (visualizer), - "position", position, - NULL); + sibling = gtk_widget_get_first_child (GTK_WIDGET (priv->visualizers)); + while (position > 1 && sibling) + { + sibling = gtk_widget_get_next_sibling (sibling); + position--; + } + gtk_box_insert_child_after (priv->visualizers, GTK_WIDGET (visualizer), sibling); if (can_toggle) {
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-ticks.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizer-ticks.c
Changed
@@ -135,10 +135,11 @@ static gboolean draw_ticks (SysprofVisualizerTicks *self, - cairo_t *cr, - GtkAllocation *area, - gint ticks, - gboolean label_mode) + GtkSnapshot *snapshot, + GtkAllocation *area, + gint ticks, + gboolean label_mode, + const GdkRGBA *color) { GtkAllocation alloc; gint64 begin_time, end_time; @@ -146,7 +147,7 @@ gint count = 0; g_assert (SYSPROF_IS_VISUALIZER_TICKS (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); g_assert (area != NULL); g_assert (ticks >= 0); g_assert (ticks < N_TICKS); @@ -195,12 +196,16 @@ if (x < (last_x2 + MIN_TICK_DISTANCE)) continue; - cairo_move_to (cr, (gint)x + 2.5 - (gint)half, 2); update_label_text (layout, t - begin_time, want_msec); pango_layout_get_pixel_size (layout, &w, &h); if (x + w <= alloc.width) - pango_cairo_show_layout (cr, layout); + { + gtk_snapshot_save (snapshot); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT ((int)x + 2.5 - (int)half, 2)); + gtk_snapshot_append_layout (snapshot, layout, color); + gtk_snapshot_restore (snapshot); + } last_x2 = x + w; } @@ -212,48 +217,44 @@ for (gint64 t = begin_time; t <= end_time; t += tick_sizingticks.span) { gdouble x = sysprof_visualizer_get_x_for_time (SYSPROF_VISUALIZER (self), t); - cairo_move_to (cr, (gint)x - .5 - (gint)half, alloc.height); - cairo_line_to (cr, (gint)x - .5 - (gint)half, alloc.height - tick_sizingticks.height); + + gtk_snapshot_append_color (snapshot, color, + &GRAPHENE_RECT_INIT ((int)x - .5 - (int)half, + alloc.height, + (int)x - .5 - (int)half + tick_sizingticks.width, + alloc.height - tick_sizingticks.height)); count++; } - - cairo_set_line_width (cr, tick_sizingticks.width); - cairo_stroke (cr); } return count > 2; } -static gboolean -sysprof_visualizer_ticks_draw (GtkWidget *widget, - cairo_t *cr) +static void +sysprof_visualizer_ticks_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { SysprofVisualizerTicks *self = SYSPROF_VISUALIZER_TICKS (widget); GtkStyleContext *style; GtkAllocation alloc; - GtkStateFlags state; gint64 timespan; GdkRGBA color; g_assert (SYSPROF_IS_VISUALIZER_TICKS (self)); - g_assert (cr != NULL); + g_assert (snapshot != NULL); timespan = sysprof_visualizer_get_duration (SYSPROF_VISUALIZER (self)); if (timespan == 0) - return GDK_EVENT_PROPAGATE; - - style = gtk_widget_get_style_context (widget); + return; gtk_widget_get_allocation (GTK_WIDGET (self), &alloc); alloc.x = 0; alloc.y = 0; - gtk_render_background (style, cr, 0, 0, alloc.width, alloc.height); - - state = gtk_widget_get_state_flags (widget); - gtk_style_context_get_color (style, state, &color); + style = gtk_widget_get_style_context (widget); + gtk_style_context_get_color (style, &color); - gdk_cairo_set_source_rgba (cr, &color); + gtk_snapshot_render_background (snapshot, style, 0, 0, alloc.width, alloc.height); /* * We need to discover up to what level we will draw tick marks. @@ -272,27 +273,32 @@ for (guint j = i; j > 0; j--) { - if (draw_ticks (self, cr, &alloc, j - 1, FALSE)) + if (draw_ticks (self, snapshot, &alloc, j - 1, FALSE, &color)) largest_match = j - 1; } if (largest_match != -1) - draw_ticks (self, cr, &alloc, largest_match, TRUE); + draw_ticks (self, snapshot, &alloc, largest_match, TRUE, &color); break; } - - return GDK_EVENT_PROPAGATE; } static void -sysprof_visualizer_ticks_get_preferred_height (GtkWidget *widget, - gint *min_height, - gint *nat_height) +sysprof_visualizer_ticks_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) { g_assert (SYSPROF_IS_VISUALIZER_TICKS (widget)); - *min_height = *nat_height = tick_sizing0.height + LABEL_HEIGHT_PX; + if (orientation == GTK_ORIENTATION_VERTICAL) + *minimum = *natural = tick_sizing0.height + LABEL_HEIGHT_PX; + else + *minimum = *natural = 0; } static void @@ -300,8 +306,8 @@ { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->draw = sysprof_visualizer_ticks_draw; - widget_class->get_preferred_height = sysprof_visualizer_ticks_get_preferred_height; + widget_class->snapshot = sysprof_visualizer_ticks_snapshot; + widget_class->measure = sysprof_visualizer_ticks_measure; gtk_widget_class_set_css_name (widget_class, "SysprofVisualizerTicks"); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizer.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizer.c
Changed
@@ -31,14 +31,9 @@ gint64 begin_time; gint64 end_time; gint64 duration; - - /* A cached allocation that has the borders subtracted so that - * we place the content within the expected area. - */ - GtkAllocation cache_alloc; } SysprofVisualizerPrivate; -G_DEFINE_TYPE_WITH_PRIVATE (SysprofVisualizer, sysprof_visualizer, DZL_TYPE_BIN) +G_DEFINE_TYPE_WITH_PRIVATE (SysprofVisualizer, sysprof_visualizer, GTK_TYPE_WIDGET) enum { PROP_0, @@ -50,53 +45,6 @@ static GParamSpec *properties N_PROPS; -static inline void -subtract_border (GtkAllocation *alloc, - GtkBorder *border) -{ -#if 0 - g_print ("Border; %d %d %d %d\n", border->top, border->left, border->bottom, border->right); -#endif - - alloc->x += border->left; - alloc->y += border->top; - alloc->width -= border->left + border->right; - alloc->height -= border->top + border->bottom; -} - -static void -adjust_alloc_for_borders (SysprofVisualizer *self, - GtkAllocation *alloc) -{ - GtkStyleContext *style_context; - GtkBorder border; - GtkStateFlags state; - - g_assert (SYSPROF_IS_VISUALIZER (self)); - g_assert (alloc != NULL); - - state = gtk_widget_get_state_flags (GTK_WIDGET (self)); - style_context = gtk_widget_get_style_context (GTK_WIDGET (self)); - gtk_style_context_get_border (style_context, state, &border); - - subtract_border (alloc, &border); -} - -static void -sysprof_visualizer_size_allocate (GtkWidget *widget, - GtkAllocation *alloc) -{ - SysprofVisualizer *self = (SysprofVisualizer *)widget; - SysprofVisualizerPrivate *priv = sysprof_visualizer_get_instance_private (self); - - g_assert (SYSPROF_IS_VISUALIZER (self)); - - GTK_WIDGET_CLASS (sysprof_visualizer_parent_class)->size_allocate (widget, alloc); - - priv->cache_alloc = *alloc; - adjust_alloc_for_borders (self, &priv->cache_alloc); -} - static void sysprof_visualizer_finalize (GObject *object) { @@ -175,8 +123,6 @@ object_class->get_property = sysprof_visualizer_get_property; object_class->set_property = sysprof_visualizer_set_property; - widget_class->size_allocate = sysprof_visualizer_size_allocate; - properties PROP_BEGIN_TIME = g_param_spec_int64 ("begin-time", "Begin Time", @@ -296,20 +242,21 @@ SysprofVisualizerAbsolutePoint *out_points, guint n_out_points) { - SysprofVisualizerPrivate *priv = sysprof_visualizer_get_instance_private (self); - const GtkAllocation *a; + int width; + int height; g_return_if_fail (SYSPROF_IS_VISUALIZER (self)); g_return_if_fail (in_points != NULL); g_return_if_fail (out_points != NULL); g_return_if_fail (n_in_points == n_out_points); - a = &priv->cache_alloc; + width = gtk_widget_get_width (GTK_WIDGET (self)); + height = gtk_widget_get_height (GTK_WIDGET (self)); for (guint i = 0; i < n_in_points; i++) { - out_pointsi.x = (in_pointsi.x * a->width); - out_pointsi.y = a->height - (ABS (in_pointsi.y) * a->height); + out_pointsi.x = (in_pointsi.x * width); + out_pointsi.y = height - (ABS (in_pointsi.y) * height); } } @@ -319,7 +266,7 @@ { SysprofVisualizerPrivate *priv = sysprof_visualizer_get_instance_private (self); - return ((time - priv->begin_time) / (gdouble)priv->duration) * priv->cache_alloc.width; + return ((time - priv->begin_time) / (gdouble)priv->duration) * gtk_widget_get_width (GTK_WIDGET (self)); } void
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizer.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizer.h
Changed
@@ -24,7 +24,7 @@ # error "Only <sysprof-ui.h> can be included directly." #endif -#include <dazzle.h> +#include <gtk/gtk.h> #include <sysprof.h> G_BEGIN_DECLS @@ -44,11 +44,11 @@ #define SYSPROF_TYPE_VISUALIZER (sysprof_visualizer_get_type()) SYSPROF_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (SysprofVisualizer, sysprof_visualizer, SYSPROF, VISUALIZER, DzlBin) +G_DECLARE_DERIVABLE_TYPE (SysprofVisualizer, sysprof_visualizer, SYSPROF, VISUALIZER, GtkWidget) struct _SysprofVisualizerClass { - DzlBinClass parent_class; + GtkWidgetClass parent_class; void (*set_reader) (SysprofVisualizer *self, SysprofCaptureReader *reader);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.c
Changed
@@ -30,7 +30,7 @@ struct _SysprofVisualizersFrame { - GtkBin parent_instance; + GtkWidget parent_instance; /* Drag selection tracking */ SysprofSelection *selection; @@ -65,13 +65,14 @@ { GtkListBox *list; GtkStyleContext *style_context; - cairo_t *cr; - GtkAllocation alloc; + GtkSnapshot *snapshot; + int width; + int height; gint64 begin_time; gint64 duration; } SelectionDraw; -G_DEFINE_TYPE (SysprofVisualizersFrame, sysprof_visualizers_frame, GTK_TYPE_BIN) +G_DEFINE_TYPE (SysprofVisualizersFrame, sysprof_visualizers_frame, GTK_TYPE_WIDGET) enum { PROP_0, @@ -115,16 +116,16 @@ g_assert (SYSPROF_IS_SELECTION (selection)); g_assert (draw != NULL); - g_assert (draw->cr != NULL); + g_assert (draw->snapshot != NULL); g_assert (GTK_IS_LIST_BOX (draw->list)); x = (range_begin - draw->begin_time) / (gdouble)draw->duration; x2 = (range_end - draw->begin_time) / (gdouble)draw->duration; - area.x = x * draw->alloc.width; - area.width = (x2 * draw->alloc.width) - area.x; + area.x = x * draw->width; + area.width = (x2 * draw->width) - area.x; area.y = 0; - area.height = draw->alloc.height; + area.height = draw->height; if (area.width < 0) { @@ -132,104 +133,106 @@ area.x -= area.width; } - gtk_render_background (draw->style_context, draw->cr, area.x + 2, area.y + 2, area.width - 4, area.height - 4); + gtk_snapshot_render_background (draw->snapshot, draw->style_context, area.x + 2, area.y + 2, area.width - 4, area.height - 4); } -static gboolean -visualizers_draw_after_cb (SysprofVisualizersFrame *self, - cairo_t *cr, - GtkListBox *list) +static void +sysprof_visualizers_frame_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) { + SysprofVisualizersFrame *self = (SysprofVisualizersFrame *)widget; SelectionDraw draw; + GtkAllocation alloc; g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (GTK_IS_LIST_BOX (list)); + g_assert (GTK_IS_SNAPSHOT (snapshot)); - draw.style_context = gtk_widget_get_style_context (GTK_WIDGET (list)); - draw.list = list; - draw.cr = cr; - draw.begin_time = self->begin_time; - draw.duration = sysprof_visualizer_get_duration (SYSPROF_VISUALIZER (self->ticks)); + GTK_WIDGET_CLASS (sysprof_visualizers_frame_parent_class)->snapshot (widget, snapshot); + draw.duration = sysprof_visualizer_get_duration (SYSPROF_VISUALIZER (self->ticks)); if (draw.duration == 0) - return GDK_EVENT_PROPAGATE; + return; - gtk_widget_get_allocation (GTK_WIDGET (list), &draw.alloc); + draw.style_context = gtk_widget_get_style_context (GTK_WIDGET (self->visualizers)); + draw.list = self->visualizers; + draw.snapshot = snapshot; + draw.begin_time = self->begin_time; + + gtk_widget_get_allocation (GTK_WIDGET (self->visualizers), &alloc); + draw.width = alloc.width; + draw.height = alloc.height; if (sysprof_selection_get_has_selection (self->selection) || self->button_pressed) { + double x, y; + + gtk_snapshot_save (snapshot); + gtk_widget_translate_coordinates (GTK_WIDGET (self->visualizers), + GTK_WIDGET (self), + 0, 0, &x, &y); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); + gtk_style_context_add_class (draw.style_context, "selection"); sysprof_selection_foreach (self->selection, draw_selection_cb, &draw); if (self->button_pressed) draw_selection_cb (self->selection, self->drag_begin_at, self->drag_selection_at, &draw); gtk_style_context_remove_class (draw.style_context, "selection"); - } - return GDK_EVENT_PROPAGATE; + gtk_snapshot_restore (snapshot); + } } static void -visualizers_realize_after_cb (SysprofVisualizersFrame *self, - GtkListBox *list) +visualizers_button_press_event_cb (SysprofVisualizersFrame *self, + int n_presses, + double x, + double y, + GtkGestureClick *gesture) { - GdkDisplay *display; - GdkWindow *window; - GdkCursor *cursor; + GdkModifierType state; + guint button; g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (GTK_IS_LIST_BOX (list)); - - window = gtk_widget_get_window (GTK_WIDGET (list)); - display = gdk_window_get_display (window); - cursor = gdk_cursor_new_from_name (display, "text"); - gdk_window_set_cursor (window, cursor); - g_clear_object (&cursor); -} + g_assert (GTK_IS_GESTURE_CLICK (gesture)); -static gboolean -visualizers_button_press_event_cb (SysprofVisualizersFrame *self, - GdkEventButton *ev, - GtkListBox *visualizers) -{ - g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (ev != NULL); - g_assert (GTK_IS_LIST_BOX (visualizers)); + button = gtk_gesture_single_get_button (GTK_GESTURE_SINGLE (gesture)); - if (ev->button != GDK_BUTTON_PRIMARY) + if (button != GDK_BUTTON_PRIMARY) { if (sysprof_selection_get_has_selection (self->selection)) - { - sysprof_selection_unselect_all (self->selection); - return GDK_EVENT_STOP; - } - - return GDK_EVENT_PROPAGATE; + sysprof_selection_unselect_all (self->selection); + return; } - if ((ev->state & GDK_SHIFT_MASK) == 0) + state = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (gesture)); + + if ((state & GDK_SHIFT_MASK) == 0) sysprof_selection_unselect_all (self->selection); self->button_pressed = TRUE; - self->drag_begin_at = get_time_from_x (self, ev->x); + self->drag_begin_at = get_time_from_x (self, x); self->drag_selection_at = self->drag_begin_at; - gtk_widget_queue_draw (GTK_WIDGET (visualizers)); - - return GDK_EVENT_PROPAGATE; + gtk_widget_queue_draw (GTK_WIDGET (self)); } -static gboolean +static void visualizers_button_release_event_cb (SysprofVisualizersFrame *self, - GdkEventButton *ev, - GtkListBox *list) + int n_release, + double x, + double y, + GtkGestureClick *gesture) { + guint button; + g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (ev != NULL); - g_assert (GTK_IS_LIST_BOX (list)); + g_assert (GTK_IS_GESTURE_CLICK (gesture)); + + button = gtk_gesture_single_get_button (GTK_GESTURE_SINGLE (gesture)); - if (!self->button_pressed || ev->button != GDK_BUTTON_PRIMARY) - return GDK_EVENT_PROPAGATE; + if (!self->button_pressed || button != GDK_BUTTON_PRIMARY) + return; self->button_pressed = FALSE; @@ -242,46 +245,33 @@ self->drag_selection_at = -1; } - gtk_widget_queue_draw (GTK_WIDGET (list)); - - return GDK_EVENT_STOP; + gtk_widget_queue_draw (GTK_WIDGET (self)); } -static gboolean -visualizers_motion_notify_event_cb (SysprofVisualizersFrame *self, - GdkEventMotion *ev, - GtkListBox *list) +static void +visualizers_motion_notify_event_cb (SysprofVisualizersFrame *self, + double x, + double y, + GtkEventControllerMotion *motion) { g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (ev != NULL); - g_assert (GTK_IS_LIST_BOX (list)); - - if (!self->button_pressed) - return GDK_EVENT_PROPAGATE; - - self->drag_selection_at = get_time_from_x (self, ev->x); + g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (motion)); - gtk_widget_queue_draw (GTK_WIDGET (list)); - - return GDK_EVENT_PROPAGATE; -} - -static void -set_children_width_request_cb (GtkWidget *widget, - gpointer data) -{ - gtk_widget_set_size_request (widget, GPOINTER_TO_INT (data), -1); + if (self->button_pressed) + { + self->drag_selection_at = get_time_from_x (self, x); + gtk_widget_queue_draw (GTK_WIDGET (self)); + } } static void -set_children_width_request (GtkContainer *container, - gint width) +set_children_width_request (GtkWidget *widget, + int width) { - g_assert (GTK_IS_CONTAINER (container)); - - gtk_container_foreach (container, - set_children_width_request_cb, - GINT_TO_POINTER (width)); + for (GtkWidget *child = gtk_widget_get_first_child (widget); + child; + child = gtk_widget_get_next_sibling (child)) + gtk_widget_set_size_request (child, width, -1); } static void @@ -297,8 +287,8 @@ duration = self->end_time - self->begin_time; data_width = sysprof_zoom_manager_get_width_for_duration (self->zoom_manager, duration); - set_children_width_request (GTK_CONTAINER (self->ticks_viewport), data_width); - set_children_width_request (GTK_CONTAINER (self->visualizers_viewport), data_width); + set_children_width_request (GTK_WIDGET (self->ticks_viewport), data_width); + set_children_width_request (GTK_WIDGET (self->visualizers_viewport), data_width); } static gint @@ -306,17 +296,16 @@ const gchar *title, gint priority) { - GList *list; gint pos = 0; if (title == NULL) return -1; - list = gtk_container_get_children (GTK_CONTAINER (self->visualizers)); - - for (const GList *iter = list; iter; iter = iter->next) + for (GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self->visualizers)); + child; + child = gtk_widget_get_next_sibling (child)) { - SysprofVisualizerGroup *group = iter->data; + SysprofVisualizerGroup *group = SYSPROF_VISUALIZER_GROUP (child); gint prio = sysprof_visualizer_group_get_priority (group); const gchar *item = sysprof_visualizer_group_get_title (group); @@ -327,41 +316,34 @@ pos++; } - g_list_free (list); - return pos; } -static void -sysprof_visualizers_frame_add (GtkContainer *container, - GtkWidget *child) +void +sysprof_visualizers_frame_add_group (SysprofVisualizersFrame *self, + SysprofVisualizerGroup *group) { - SysprofVisualizersFrame *self = (SysprofVisualizersFrame *)container; - - g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (GTK_IS_WIDGET (child)); - - if (SYSPROF_IS_VISUALIZER_GROUP (child)) - { - SysprofVisualizerGroupHeader *header; - const gchar *title = sysprof_visualizer_group_get_title (SYSPROF_VISUALIZER_GROUP (child)); - gint priority = sysprof_visualizer_group_get_priority (SYSPROF_VISUALIZER_GROUP (child)); - gint pos = find_pos (self, title, priority); + SysprofVisualizerGroupHeader *header; + const char *title; + int priority; + int pos; - gtk_list_box_insert (self->visualizers, child, pos); + g_return_if_fail (SYSPROF_IS_VISUALIZERS_FRAME (self)); + g_return_if_fail (SYSPROF_IS_VISUALIZER_GROUP (group)); - header = _sysprof_visualizer_group_header_new (); - g_object_set_data (G_OBJECT (header), "VISUALIZER_GROUP", child); - gtk_list_box_insert (self->groups, GTK_WIDGET (header), pos); - _sysprof_visualizer_group_set_header (SYSPROF_VISUALIZER_GROUP (child), header); - gtk_widget_show (GTK_WIDGET (header)); + title = sysprof_visualizer_group_get_title (group); + priority = sysprof_visualizer_group_get_priority (group); + pos = find_pos (self, title, priority); - sysprof_visualizers_frame_notify_zoom (self, NULL, self->zoom_manager); + gtk_list_box_insert (self->visualizers, GTK_WIDGET (group), pos); - return; - } + header = _sysprof_visualizer_group_header_new (); + g_object_set_data (G_OBJECT (header), "VISUALIZER_GROUP", group); + gtk_list_box_insert (self->groups, GTK_WIDGET (header), pos); + _sysprof_visualizer_group_set_header (group, header); + gtk_widget_show (GTK_WIDGET (header)); - GTK_CONTAINER_CLASS (sysprof_visualizers_frame_parent_class)->add (container, child); + sysprof_visualizers_frame_notify_zoom (self, NULL, self->zoom_manager); } static void @@ -392,27 +374,17 @@ } static void -sysprof_visualizers_frame_size_allocate (GtkWidget *widget, - GtkAllocation *alloc) -{ - SysprofVisualizersFrame *self = (SysprofVisualizersFrame *)widget; - - g_assert (SYSPROF_IS_VISUALIZERS_FRAME (self)); - g_assert (alloc != NULL); - - sysprof_scrollmap_set_time_range (self->hscrollbar, self->begin_time, self->end_time); - - GTK_WIDGET_CLASS (sysprof_visualizers_frame_parent_class)->size_allocate (widget, alloc); -} - -static void -sysprof_visualizers_frame_finalize (GObject *object) +sysprof_visualizers_frame_dispose (GObject *object) { SysprofVisualizersFrame *self = (SysprofVisualizersFrame *)object; + GtkWidget *child; + + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self)))) + gtk_widget_unparent (child); g_clear_object (&self->selection); - G_OBJECT_CLASS (sysprof_visualizers_frame_parent_class)->finalize (object); + G_OBJECT_CLASS (sysprof_visualizers_frame_parent_class)->dispose (object); } static void @@ -443,16 +415,14 @@ { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); - object_class->finalize = sysprof_visualizers_frame_finalize; + object_class->dispose = sysprof_visualizers_frame_dispose; object_class->get_property = sysprof_visualizers_frame_get_property; - widget_class->size_allocate = sysprof_visualizers_frame_size_allocate; - - container_class->add = sysprof_visualizers_frame_add; + widget_class->snapshot = sysprof_visualizers_frame_snapshot; gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sysprof-visualizers-frame.ui"); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "SysprofVisualizersFrame"); gtk_widget_class_bind_template_child (widget_class, SysprofVisualizersFrame, groups); gtk_widget_class_bind_template_child (widget_class, SysprofVisualizersFrame, hscrollbar); @@ -491,18 +461,43 @@ static void sysprof_visualizers_frame_init (SysprofVisualizersFrame *self) { + GtkEventController *controller; GtkAdjustment *hadj; GtkAdjustment *zadj; gtk_widget_init_template (GTK_WIDGET (self)); + gtk_widget_set_cursor_from_name (GTK_WIDGET (self->visualizers), "text"); + + controller = GTK_EVENT_CONTROLLER (gtk_gesture_click_new ()); + g_signal_connect_object (controller, + "pressed", + G_CALLBACK (visualizers_button_press_event_cb), + self, + G_CONNECT_SWAPPED); + g_signal_connect_object (controller, + "released", + G_CALLBACK (visualizers_button_release_event_cb), + self, + G_CONNECT_SWAPPED); + gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); + gtk_widget_add_controller (GTK_WIDGET (self->visualizers), controller); + + controller = gtk_event_controller_motion_new (); + g_signal_connect_object (controller, + "motion", + G_CALLBACK (visualizers_motion_notify_event_cb), + self, + G_CONNECT_SWAPPED); + gtk_widget_add_controller (GTK_WIDGET (self->visualizers), controller); + self->selection = g_object_new (SYSPROF_TYPE_SELECTION, NULL); zadj = sysprof_zoom_manager_get_adjustment (self->zoom_manager); hadj = gtk_scrolled_window_get_hadjustment (self->hscroller); gtk_scrolled_window_set_hadjustment (self->ticks_scroller, hadj); - gtk_range_set_adjustment (GTK_RANGE (self->hscrollbar), hadj); + sysprof_scrollmap_set_adjustment (self->hscrollbar, hadj); gtk_range_set_adjustment (GTK_RANGE (self->zoom_scale), zadj); gtk_widget_insert_action_group (GTK_WIDGET (self), @@ -521,36 +516,6 @@ self, G_CONNECT_SWAPPED); - g_signal_connect_object (self->visualizers, - "draw", - G_CALLBACK (visualizers_draw_after_cb), - self, - G_CONNECT_SWAPPED | G_CONNECT_AFTER); - - g_signal_connect_object (self->visualizers, - "realize", - G_CALLBACK (visualizers_realize_after_cb), - self, - G_CONNECT_SWAPPED | G_CONNECT_AFTER); - - g_signal_connect_object (self->visualizers, - "button-press-event", - G_CALLBACK (visualizers_button_press_event_cb), - self, - G_CONNECT_SWAPPED); - - g_signal_connect_object (self->visualizers, - "button-release-event", - G_CALLBACK (visualizers_button_release_event_cb), - self, - G_CONNECT_SWAPPED); - - g_signal_connect_object (self->visualizers, - "motion-notify-event", - G_CALLBACK (visualizers_motion_notify_event_cb), - self, - G_CONNECT_SWAPPED); - g_signal_connect_object (self->zoom_manager, "notify::zoom", G_CALLBACK (sysprof_visualizers_frame_notify_zoom), @@ -745,7 +710,7 @@ { g_return_val_if_fail (SYSPROF_IS_VISUALIZERS_FRAME (self), NULL); - return gtk_range_get_adjustment (GTK_RANGE (self->hscrollbar)); + return sysprof_scrollmap_get_adjustment (self->hscrollbar); } void
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.h
Changed
@@ -30,8 +30,10 @@ #define SYSPROF_TYPE_VISUALIZERS_FRAME (sysprof_visualizers_frame_get_type()) -G_DECLARE_FINAL_TYPE (SysprofVisualizersFrame, sysprof_visualizers_frame, SYSPROF, VISUALIZERS_FRAME, GtkBin) +G_DECLARE_FINAL_TYPE (SysprofVisualizersFrame, sysprof_visualizers_frame, SYSPROF, VISUALIZERS_FRAME, GtkWidget) +void sysprof_visualizers_frame_add_group (SysprofVisualizersFrame *self, + SysprofVisualizerGroup *group); SysprofSelection *sysprof_visualizers_frame_get_selection (SysprofVisualizersFrame *self); SysprofVisualizerGroup *sysprof_visualizers_frame_get_selected_group (SysprofVisualizersFrame *self); SysprofZoomManager *sysprof_visualizers_frame_get_zoom_manager (SysprofVisualizersFrame *self);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.ui -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof-ui/sysprof-visualizers-frame.ui
Changed
@@ -1,44 +1,31 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.22"/> - <template class="SysprofVisualizersFrame" parent="GtkBin"> - <property name="can_focus">False</property> + <template class="SysprofVisualizersFrame" parent="GtkWidget"> <child> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <child> <object class="GtkBox" id="box1"> <property name="width_request">125</property> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkBox"> + <object class="GtkCenterBox"> <property name="orientation">horizontal</property> <property name="visible">true</property> <property name="margin-top">3</property> <property name="margin-bottom">3</property> <property name="margin-start">7</property> <property name="margin-end">7</property> + <property name="hexpand">false</property> <style> <class name="left-column"/> </style> <child type="center"> <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_start">6</property> - <property name="margin_end">6</property> - <property name="margin_top">3</property> - <property name="margin_bottom">3</property> <property name="label" translatable="yes">Instruments</property> + <property name="hexpand">true</property> <style> <class name="dim-label"/> </style> @@ -47,12 +34,11 @@ </attributes> </object> </child> - <child> + <child type="end"> <object class="GtkButton"> <property name="action-name">display.page</property> <property name="action-target">'details'</property> <property name="tooltip-text" translatable="yes">Select for more details</property> - <property name="visible">true</property> <style> <class name="image-button"/> <class name="small-button"/> @@ -66,339 +52,170 @@ </object> </child> </object> - <packing> - <property name="pack-type">end</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkBox" id="ticks_box"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="vexpand">False</property> + <property name="vexpand">false</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow" id="ticks_scroller"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="hscrollbar_policy">external</property> - <property name="vscrollbar_policy">never</property> + <property name="hexpand">true</property> + <property name="vexpand">true</property> + <property name="hscrollbar-policy">external</property> + <property name="vscrollbar-policy">never</property> <child> <object class="GtkViewport" id="ticks_viewport"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="halign">start</property> - <property name="shadow_type">none</property> <style> <class name="visualizers"/> </style> <child> <object class="SysprofVisualizerTicks" id="ticks"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkScrolledWindow" id="vscroller"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="vexpand">True</property> - <property name="hscrollbar_policy">never</property> - <property name="propagate_natural_height">True</property> + <property name="vexpand">true</property> + <property name="hscrollbar-policy">never</property> + <property name="propagate-natural-height">true</property> <child> <object class="GtkViewport"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="shadow_type">none</property> <child> <object class="GtkBox"> <property name="orientation">horizontal</property> - <property name="visible">True</property> - <property name="can_focus">False</property> <child> <object class="GtkListBox" id="groups"> <property name="width_request">125</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">False</property> - <property name="selection_mode">single</property> + <property name="hexpand">false</property> + <property name="selection-mode">single</property> <style> <class name="left-column"/> <class name="visualizer-groups"/> </style> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkScrolledWindow" id="hscroller"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="hscrollbar_policy">external</property> - <property name="vscrollbar_policy">never</property> - <property name="propagate_natural_height">True</property> + <property name="hexpand">true</property> + <property name="hscrollbar-policy">external</property> + <property name="vscrollbar-policy">never</property> <child> <object class="GtkViewport" id="visualizers_viewport"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="shadow_type">none</property> <property name="halign">start</property> <style> <class name="visualizers"/> </style> <child> <object class="GtkListBox" id="visualizers"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="selection_mode">none</property> - <property name="activate_on_single_click">False</property> + <property name="activate_on_single_click">false</property> </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> <child> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <style> <class name="inline-toolbar"/> </style> <child> <object class="GtkBox" id="box2"> <property name="width_request">125</property> - <property name="visible">True</property> <property name="margin-start">6</property> <property name="margin-end">6</property> - <property name="can_focus">False</property> - <property name="hexpand">False</property> + <property name="hexpand">false</property> <style> <class name="left-column"/> </style> <child> <object class="GtkButton" id="zoom_out"> <property name="action-name">zoom.zoom-out</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="valign">center</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">zoom-out-symbolic</property> - </object> - </child> + <property name="icon_name">zoom-out-symbolic</property> <style> <class name="image-button"/> <class name="small-button"/> <class name="flat"/> </style> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkScale" id="zoom_scale"> <property name="width_request">175</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> + <property name="hexpand">true</property> <property name="round_digits">1</property> - <property name="draw_value">False</property> + <property name="draw_value">false</property> <marks> <mark value="0.0" position="bottom"/> </marks> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkButton" id="zoom_in"> <property name="action-name">zoom.zoom-in</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="relief">none</property> <property name="valign">center</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">zoom-in-symbolic</property> - </object> - </child> + <property name="icon-name">zoom-in-symbolic</property> <style> <class name="image-button"/> <class name="small-button"/> <class name="flat"/> </style> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="SysprofScrollmap" id="hscrollbar"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> + <property name="hexpand">true</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> </object> </child>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/meson.build
Changed
@@ -1,5 +1,3 @@ -if get_option('libsysprof') - libsysprof_c_args = '-DSYSPROF_COMPILATION' libsysprof_public_sources = @@ -168,6 +166,7 @@ include_directories: include_directories('.'), libsysprof_capture_include_dirs, ) +if get_option('libsysprof') libsysprof = shared_library('sysprof-@0@'.format(libsysprof_api_version), dependencies: libsysprof_deps + libsysprof_static_dep, install: true, @@ -193,7 +192,6 @@ ) install_headers(libsysprof_public_headers, subdir: sysprof_header_subdir) +endif subdir('preload') - -endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/preload/backtrace-helper.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/preload/backtrace-helper.h
Changed
@@ -39,10 +39,10 @@ #endif } -static gint -backtrace_func (SysprofCaptureAddress *addrs, - guint n_addrs, - gpointer user_data) +static int +backtrace_func (SysprofCaptureAddress *addrs, + guint n_addrs, + G_GNUC_UNUSED gpointer user_data) { #if defined(ENABLE_LIBUNWIND) # if GLIB_SIZEOF_VOID_P == 8 @@ -53,9 +53,9 @@ */ return unw_backtrace ((void **)addrs - 2, n_addrs) - 2; # else - static const gint skip = 2; + static const int skip = 2; void **stack = alloca (n_addrs * sizeof (gpointer)); - gint n = unw_backtrace (stack, n_addrs); + int n = unw_backtrace (stack, n_addrs); for (guint i = skip; i < n; i++) addrsi-skip = GPOINTER_TO_SIZE (stacki); return MAX (0, n - skip); @@ -65,9 +65,9 @@ /* See note on unw_backtrace() */ return backtrace ((void **)addrs - 2, n_addrs) - 2; # else /* GLIB_SIZEOF_VOID_P != 8 */ - static const gint skip = 2; + static const int skip = 2; void **stack = alloca (n_addrs * sizeof (gpointer)); - gint n = backtrace (stack, n_addrs); + int n = backtrace (stack, n_addrs); for (guint i = skip; i < n; i++) addrsi-skip = GPOINTER_TO_SIZE (stacki); return MAX (0, n - skip);
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/preload/sysprof-tracer.c
Added
@@ -0,0 +1,72 @@ +/* sysprof-tracer.c + * + * Copyright 2022 Christian Hergert <chergert@redhat.com> + * + * 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "config.h" + +#include <glib.h> +#include <sysprof-capture.h> +#include <unistd.h> + +#include "backtrace-helper.h" + +#include "gconstructor.h" + +#if defined (G_HAS_CONSTRUCTORS) +# ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA +# pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(collector_init_ctor) +# endif +G_DEFINE_CONSTRUCTOR(collector_init_ctor) +#else +# error Your platform/compiler is missing constructor support +#endif + +#ifndef __APPLE__ +# define profile_func_enter __cyg_profile_func_enter +# define profile_func_exit __cyg_profile_func_exit +#endif + +static void +collector_init_ctor (void) +{ + backtrace_init (); + sysprof_collector_init (); +} + +/* TODO: + * + * This is just an example. + * + * What we would really want to do is to have a new frame type for enter/exit + * tracing so that we can only push/pop the new address to the sample. Then + * when decoding it can recreate stack traces if necessary. + */ + +void +profile_func_enter (void *func, + void *call_site) +{ + sysprof_collector_sample (backtrace_func, NULL); +} + +void +profile_func_exit (void *func, + void *call_site) +{ +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-elf-symbol-resolver.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-elf-symbol-resolver.c
Changed
@@ -554,8 +554,10 @@ if (!(pi = g_hash_table_lookup (self->processes, GINT_TO_POINTER (pid)))) return FALSE; - map = sysprof_map_lookaside_lookup (pi->lookaside, address); - if G_UNLIKELY (map == NULL) + if (pi->lookaside == NULL) + return FALSE; + + if (!(map = sysprof_map_lookaside_lookup (pi->lookaside, address))) return FALSE; address -= map->start;
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-governor-source.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-governor-source.c
Changed
@@ -283,21 +283,14 @@ if (!sysprof_helpers_set_paranoid_finish (helpers, result, &old_governor, &error)) g_debug ("Failed to change event_perf_paranoid: %s", error->message); - if (!self->disable_governor) + if (!self->disable_governor || self->old_governor == NULL) sysprof_source_emit_finished (SYSPROF_SOURCE (self)); else - { - sysprof_helpers_set_governor_async (helpers, - self->old_governor, - NULL, - enable_governor_cb, - self); - - /* Can't use g_steal_pointer above, as that might set self = NULL before - * self->old_governor is evaluated → crash - */ - self = NULL; - } + sysprof_helpers_set_governor_async (helpers, + self->old_governor, + NULL, + enable_governor_cb, + g_object_ref (self)); } static void
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-local-profiler.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-local-profiler.c
Changed
@@ -91,6 +91,9 @@ /* If we should inherit the environment when spawning */ guint spawn_inherit_environ : 1; + /* If we should inherit stdin from our process */ + guint inherit_stdin : 1; + /* * If we should profile the entire system. Setting this results in pids * being ignored. This is primarily useful for UI to toggle on/off the @@ -114,6 +117,7 @@ enum { PROP_0, + PROP_INHERIT_STDIN, N_PROPS, PROP_ELAPSED, @@ -127,6 +131,15 @@ PROP_WHOLE_SYSTEM, }; +enum { + SUBPROCESS_SPAWNED, + SUBPROCESS_FINISHED, + N_SINGALS, +}; + +static GParamSpec *properties N_PROPS; +static guint signals N_SINGALS; + static inline gint _g_ptr_array_find (GPtrArray *ar, gpointer item) @@ -318,6 +331,10 @@ switch (prop_id) { + case PROP_INHERIT_STDIN: + g_value_set_boolean (value, priv->inherit_stdin); + break; + case PROP_ELAPSED: g_value_set_double (value, priv->timer ? g_timer_elapsed (priv->timer, NULL) : 0.0); break; @@ -370,6 +387,10 @@ switch (prop_id) { + case PROP_INHERIT_STDIN: + sysprof_local_profiler_set_inherit_stdin (self, g_value_get_boolean (value)); + break; + case PROP_WHOLE_SYSTEM: priv->whole_system = g_value_get_boolean (value); break; @@ -412,6 +433,44 @@ object_class->get_property = sysprof_local_profiler_get_property; object_class->set_property = sysprof_local_profiler_set_property; + /** + * SysprofLocalProfiler::subprocess-spawned: + * @self: a #SysprofLocalProfiler + * @subprocess: a #GSubprocess + * + * This signal is emitted when #SysprofLocalProfiler spawns a process. + * + * Since: 3.46 + */ + signals SUBPROCESS_SPAWNED = + g_signal_new ("subprocess-spawned", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 1, G_TYPE_SUBPROCESS); + + /** + * SysprofLocalProfiler::subprocess-finished: + * @self: a #SysprofLocalProfiler + * @subprocess: a #GSubprocess + * + * This signal is emitted when #SysprofLocalProfiler has determined that + * the subprocess either exited or was terminated by a signal. Use + * g_subprocess_get_if_exited() to determine if exited with exit code. + * + * Since: 3.46 + */ + signals SUBPROCESS_FINISHED = + g_signal_new ("subprocess-finished", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 1, G_TYPE_SUBPROCESS); + g_object_class_override_property (object_class, PROP_ELAPSED, "elapsed"); g_object_class_override_property (object_class, PROP_IS_MUTABLE, "is-mutable"); g_object_class_override_property (object_class, PROP_IS_RUNNING, "is-running"); @@ -422,6 +481,24 @@ g_object_class_override_property (object_class, PROP_SPAWN_INHERIT_ENVIRON, "spawn-inherit-environ"); g_object_class_override_property (object_class, PROP_WHOLE_SYSTEM, "whole-system"); + /** + * SysprofLocalProfiler:inherit-stdin: + * + * Sets the profiler to inherit stdin from the calling process when spawning + * the subprocess. This has no effect if the #SysprofLocalProfiler is not + * responsible for spawning the process. + * + * Since: 3.46 + */ + properties PROP_INHERIT_STDIN = + g_param_spec_boolean ("inherit-stdin", + "Inherit Stdin", + "If stdin of the calling process should be inherited by the spawned process", + FALSE, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); + g_type_ensure (SYSPROF_TYPE_GJS_SOURCE); #ifdef __linux__ g_type_ensure (SYSPROF_TYPE_HOSTINFO_SOURCE); @@ -531,6 +608,8 @@ if (!g_subprocess_wait_finish (subprocess, result, &error)) g_warning ("Wait on subprocess failed: %s", error->message); + g_signal_emit (self, signalsSUBPROCESS_FINISHED, 0, subprocess); + sysprof_local_profiler_stop (SYSPROF_PROFILER (self)); } @@ -561,8 +640,12 @@ g_autoptr(GPtrArray) env = g_ptr_array_new_with_free_func (g_free); g_autoptr(SysprofSpawnable) spawnable = sysprof_spawnable_new (); g_autoptr(GSubprocess) subprocess = NULL; + GSubprocessFlags flags = 0; GPid pid; + if (priv->inherit_stdin) + flags |= G_SUBPROCESS_FLAGS_STDIN_INHERIT; + if (priv->spawn_inherit_environ) { gchar **environ_ = g_get_environ (); @@ -611,12 +694,16 @@ else { const gchar *ident = g_subprocess_get_identifier (subprocess); + pid = atoi (ident); g_array_append_val (priv->pids, pid); + g_subprocess_wait_async (subprocess, NULL, sysprof_local_profiler_wait_cb, g_object_ref (self)); + + g_signal_emit (self, signalsSUBPROCESS_SPAWNED, 0, subprocess); } } @@ -1090,3 +1177,40 @@ return SYSPROF_PROFILER (g_steal_pointer (&self)); } + +/** + * sysprof_local_profiler_get_inherit_stdin: + * + * Since: 3.46 + */ +gboolean +sysprof_local_profiler_get_inherit_stdin (SysprofLocalProfiler *self) +{ + SysprofLocalProfilerPrivate *priv = sysprof_local_profiler_get_instance_private (self); + + g_return_val_if_fail (SYSPROF_IS_LOCAL_PROFILER (self), FALSE); + + return priv->inherit_stdin; +} + +/** + * sysprof_local_profiler_set_inherit_stdin: + * + * Since: 3.46 + */ +void +sysprof_local_profiler_set_inherit_stdin (SysprofLocalProfiler *self, + gboolean inherit_stdin) +{ + SysprofLocalProfilerPrivate *priv = sysprof_local_profiler_get_instance_private (self); + + g_return_if_fail (SYSPROF_IS_LOCAL_PROFILER (self)); + + inherit_stdin = !!inherit_stdin; + + if (priv->inherit_stdin != inherit_stdin) + { + priv->inherit_stdin = inherit_stdin; + g_object_notify_by_pspec (G_OBJECT (self), properties PROP_INHERIT_STDIN); + } +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-local-profiler.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-local-profiler.h
Changed
@@ -41,8 +41,11 @@ }; SYSPROF_AVAILABLE_IN_ALL -SysprofProfiler *sysprof_local_profiler_new (void); +SysprofProfiler *sysprof_local_profiler_new (void); SYSPROF_AVAILABLE_IN_ALL -SysprofProfiler *sysprof_local_profiler_new_replay (SysprofCaptureReader *reader); +SysprofProfiler *sysprof_local_profiler_new_replay (SysprofCaptureReader *reader); +SYSPROF_AVAILABLE_IN_3_46 +void sysprof_local_profiler_set_inherit_stdin (SysprofLocalProfiler *self, + gboolean inherit_stdin); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-spawnable.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-spawnable.c
Changed
@@ -34,12 +34,13 @@ struct _SysprofSpawnable { - GObject parent_instance; - GArray *fds; - GPtrArray *argv; - gchar **environ; - gchar *cwd; - gint next_fd; + GObject parent_instance; + GArray *fds; + GPtrArray *argv; + char **environ; + char *cwd; + gint next_fd; + GSubprocessFlags flags; }; G_DEFINE_TYPE (SysprofSpawnable, sysprof_spawnable, G_TYPE_OBJECT) @@ -57,6 +58,41 @@ return g_object_new (SYSPROF_TYPE_SPAWNABLE, NULL); } +/** + * sysprof_spawnable_get_flags: + * @self: a #SysprofSpawnable + * + * Gets the subprocess flags for spawning. + * + * Returns: the #GSubprocessFlags bitwise-or'd + * + * Since: 3.46 + */ +GSubprocessFlags +sysprof_spawnable_get_flags (SysprofSpawnable *self) +{ + g_return_val_if_fail (SYSPROF_IS_SPAWNABLE (self), 0); + + return self->flags; +} + +/** + * sysprof_spawnable_set_flags: + * @self: a #SysprofSpawnable + * + * Set the flags to use when spawning the process. + * + * Since: 3.46 + */ +void +sysprof_spawnable_set_flags (SysprofSpawnable *self, + GSubprocessFlags flags) +{ + g_return_if_fail (SYSPROF_IS_SPAWNABLE (self)); + + self->flags = flags; +} + static void fd_mapping_clear (gpointer data) { @@ -268,7 +304,7 @@ g_return_val_if_fail (SYSPROF_IS_SPAWNABLE (self), NULL); - launcher = g_subprocess_launcher_new (0); + launcher = g_subprocess_launcher_new (self->flags); g_subprocess_launcher_set_environ (launcher, self->environ);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/libsysprof/sysprof-spawnable.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/libsysprof/sysprof-spawnable.h
Changed
@@ -77,5 +77,10 @@ SYSPROF_AVAILABLE_IN_ALL GSubprocess *sysprof_spawnable_spawn (SysprofSpawnable *self, GError **error); +SYSPROF_AVAILABLE_IN_3_46 +GSubprocessFlags sysprof_spawnable_get_flags (SysprofSpawnable *self); +SYSPROF_AVAILABLE_IN_3_46 +void sysprof_spawnable_set_flags (SysprofSpawnable *self, + GSubprocessFlags flags); G_END_DECLS
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/meson.build
Changed
@@ -1,4 +1,5 @@ sysprof_header_subdir = 'sysprof-@0@'.format(libsysprof_api_version) +sysprof_ui_header_subdir = 'sysprof-ui-@0@'.format(libsysprof_ui_api_version) sysprof_version_conf = configuration_data() sysprof_version = meson.project_version().split('.') @@ -7,7 +8,7 @@ sysprof_version_conf.set('MICRO_VERSION', sysprof_version2) sysprof_version_conf.set('VERSION', meson.project_version()) -if get_option('with_sysprofd') == 'bundled' or get_option('libsysprof') +if needs_service_access ipc_profiler_src = gnome.gdbus_codegen('ipc-profiler', sources: 'org.gnome.Sysprof3.Profiler.xml', interface_prefix: 'org.gnome.Sysprof3.', @@ -26,34 +27,46 @@ namespace: 'IpcLegacy', ) - install_data('org.gnome.Sysprof3.Service.xml', - 'org.gnome.Sysprof2.xml', - install_dir: join_paths(datadir, 'dbus-1/interfaces'), + ipc_agent_src = gnome.gdbus_codegen('ipc-agent', + sources: 'org.gnome.Sysprof.Agent.xml', + interface_prefix: 'org.gnome.Sysprof.', + namespace: 'Ipc', ) endif -org_gnome_Sysprof3_Profiler_xml = files('org.gnome.Sysprof3.Profiler.xml') - -if get_option('libsysprof') - install_data(org_gnome_Sysprof3_Profiler_xml, +if install_service_files + install_data( + 'org.gnome.Sysprof2.xml', + 'org.gnome.Sysprof3.Profiler.xml', + 'org.gnome.Sysprof3.Service.xml', + 'org.gnome.Sysprof.Agent.xml' + , install_dir: join_paths(datadir, 'dbus-1/interfaces'), ) endif ipc_include_dirs = include_directories('.') -stackstash_sources = files( - 'stackstash.c', -) +stackstash_sources = files('stackstash.c') -helpers_sources = files( - 'helpers.c', -) +helpers_sources = files('helpers.c') subdir('libsysprof-capture') -subdir('sysprofd') -subdir('libsysprof') -subdir('libsysprof-ui') -subdir('sysprof') -subdir('tools') -subdir('tests') +if get_option('sysprofd') == 'bundled' + subdir('sysprofd') +endif +if get_option('libsysprof') or get_option('agent') + subdir('libsysprof') +endif +if get_option('gtk') and get_option('libsysprof') + subdir('libsysprof-ui') +endif +if get_option('gtk') and get_option('libsysprof') + subdir('sysprof') +endif +if get_option('tools') + subdir('tools') +endif +if get_option('tests') + subdir('tests') +endif
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/org.gnome.Sysprof.Agent.xml
Added
@@ -0,0 +1,36 @@ +<!DOCTYPE node PUBLIC + "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" > +<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"> + <!-- + Copyright 2022 Christian Hergert <chergert@redhat.com> + + 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 <http://www.gnu.org/licenses/>. + + SPDX-License-Identifier: GPL-3.0-or-later + --> + <interface name="org.gnome.Sysprof.Agent"> + <method name="ForceExit"/> + <method name="SendSignal"> + <arg name="signum" direction="in" type="i"> + <doc:doc><doc:summary>The signal number to deliver.</doc:summary></doc:doc> + </arg> + </method> + <signal name="Log"> + <arg name="message" direction="in" type="s"> + <doc:doc><doc:summary>The log message to be displayed.</doc:summary></doc:doc> + </arg> + </signal> + </interface> +</node>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/stackstash.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/stackstash.c
Changed
@@ -270,10 +270,16 @@ StackFunction func, gpointer data) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-pointer" + StackLink link; if (trace) + { + g_assert (trace->prev == NULL); trace->prev = &link; + } link.next = trace; link.prev = NULL; @@ -291,7 +297,12 @@ } if (trace) + { + g_assert (trace->prev == &link); trace->prev = NULL; + } + +#pragma GCC diagnostic pop } void
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/meson.build
Changed
@@ -1,10 +1,7 @@ -if get_option('enable_gtk') and get_option('libsysprof') - sysprof_sources = 'sysprof.c', 'sysprof-application.c', 'sysprof-window.c', - 'sysprof-window-settings.c', sysprof_resources = gnome.compile_resources('sysprof-resources', 'sysprof.gresource.xml', @@ -18,13 +15,11 @@ libsysprof_dep, libsysprof_ui_dep, dependency('pangoft2', required: false), + dependency('libadwaita-1', version: '>= 1.2.alpha'), sysprof = executable('sysprof', sysprof_resources + sysprof_sources, dependencies: sysprof_deps, - gui_app: true, install_dir: get_option('bindir'), install: true, ) - -endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-application.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof-application.c
Changed
@@ -27,10 +27,10 @@ struct _SysprofApplication { - DzlApplication parent_instance; + AdwApplication parent_instance; }; -G_DEFINE_TYPE (SysprofApplication, sysprof_application, DZL_TYPE_APPLICATION) +G_DEFINE_TYPE (SysprofApplication, sysprof_application, ADW_TYPE_APPLICATION) struct { const gchar *action_name; @@ -110,9 +110,6 @@ sysprof_application_startup (GApplication *application) { g_autoptr(GtkCssProvider) provider = NULL; -#ifdef DEVELOPMENT_BUILD - g_autoptr(GtkCssProvider) adwaita = NULL; -#endif g_assert (SYSPROF_IS_APPLICATION (application)); @@ -120,17 +117,9 @@ provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (provider, "/org/gnome/sysprof/theme/shared.css"); - gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), - GTK_STYLE_PROVIDER (provider), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - -#ifdef DEVELOPMENT_BUILD - adwaita = gtk_css_provider_new (); - gtk_css_provider_load_from_resource (adwaita, "/org/gnome/sysprof/theme/Adwaita-shared.css"); - gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), - GTK_STYLE_PROVIDER (adwaita), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); -#endif + gtk_style_context_add_provider_for_display (gdk_display_get_default (), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_THEME+1); for (guint i = 0; default_accelsi.action_name; i++) gtk_application_set_accels_for_action (GTK_APPLICATION (application), @@ -139,13 +128,30 @@ } static void +sysprof_application_window_added (GtkApplication *application, + GtkWindow *window) +{ + g_assert (SYSPROF_IS_APPLICATION (application)); + g_assert (GTK_IS_WINDOW (window)); + +#ifdef DEVELOPMENT_BUILD + gtk_widget_add_css_class (GTK_WIDGET (window), "devel"); +#endif + + GTK_APPLICATION_CLASS (sysprof_application_parent_class)->window_added (application, window); +} + +static void sysprof_application_class_init (SysprofApplicationClass *klass) { GApplicationClass *app_class = G_APPLICATION_CLASS (klass); + GtkApplicationClass *gtk_app_class = GTK_APPLICATION_CLASS (klass); app_class->open = sysprof_application_open; app_class->startup = sysprof_application_startup; app_class->activate = sysprof_application_activate; + + gtk_app_class->window_added = sysprof_application_window_added; } static void @@ -169,7 +175,6 @@ { GtkApplication *app = user_data; GtkWindow *best_toplevel = NULL; - GtkWindow *dialog; GList *windows; g_assert (G_IS_APPLICATION (app)); @@ -187,30 +192,20 @@ } } - dialog = g_object_new (GTK_TYPE_ABOUT_DIALOG, - "application", app, - "authors", sysprof_authors, - "artists", sysprof_artists, - "comments", _("A system profiler"), + adw_show_about_window(best_toplevel, + "application-name", _("Sysprof"), + "application-icon", APP_ID_S, + "version", "GNOME " SYMBOLIC_VERSION " (" PACKAGE_VERSION ")", "copyright", "Copyright 2004-2009 Søren Sandmann Pedersen\n" "Copyright 2016-2021 Christian Hergert", - "transient-for", best_toplevel, - "modal", TRUE, - "translator-credits", _("translator-credits"), + "issue-url", "https://gitlab.gnome.org/GNOME/sysprof/-/issues/new", "license-type", GTK_LICENSE_GPL_3_0, - "logo-icon-name", "org.gnome.Sysprof", - "program-name", _("Sysprof"), - "version", "GNOME " SYMBOLIC_VERSION " (" PACKAGE_VERSION ")", + "developers", sysprof_authors, + "artists", sysprof_artists, + "comments", _("A system profiler"), + "translator-credits", _("translator-credits"), "website", "https://wiki.gnome.org/Apps/Sysprof", - "website-label", _("Learn more about Sysprof"), NULL); - - g_signal_connect (dialog, - "response", - G_CALLBACK (gtk_widget_destroy), - NULL); - - gtk_window_present (dialog); } static void @@ -226,10 +221,7 @@ window = gtk_application_get_active_window (GTK_APPLICATION (self)); - gtk_show_uri_on_window (window, - "help:sysprof", - gtk_get_current_event_time (), - NULL); + gtk_show_uri (window, "help:sysprof", GDK_CURRENT_TIME); } static void @@ -337,7 +329,7 @@ sysprof_application_new (void) { return g_object_new (SYSPROF_TYPE_APPLICATION, - "application-id", "org.gnome.Sysprof3", + "application-id", APP_ID_S, "resource-base-path", "/org/gnome/sysprof", "flags", G_APPLICATION_HANDLES_OPEN, NULL);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-application.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof-application.h
Changed
@@ -18,13 +18,13 @@ #pragma once -#include <dazzle.h> +#include <adwaita.h> G_BEGIN_DECLS #define SYSPROF_TYPE_APPLICATION (sysprof_application_get_type()) -G_DECLARE_FINAL_TYPE (SysprofApplication, sysprof_application, SYSPROF, APPLICATION, DzlApplication) +G_DECLARE_FINAL_TYPE (SysprofApplication, sysprof_application, SYSPROF, APPLICATION, AdwApplication) SysprofApplication *sysprof_application_new (void);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-window.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof-window.c
Changed
@@ -29,16 +29,16 @@ struct _SysprofWindow { - DzlApplicationWindow parent_instance; + AdwApplicationWindow parent_instance; - DzlBindingGroup *bindings; + GBindingGroup *bindings; SysprofNotebook *notebook; GtkButton *open_button; GtkMenuButton *menu_button; }; -G_DEFINE_TYPE (SysprofWindow, sysprof_window, DZL_TYPE_APPLICATION_WINDOW) +G_DEFINE_TYPE (SysprofWindow, sysprof_window, ADW_TYPE_APPLICATION_WINDOW) /** * sysprof_window_new: @@ -63,9 +63,9 @@ g_assert (SYSPROF_IS_WINDOW (self)); g_assert (SYSPROF_IS_NOTEBOOK (notebook)); - dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "replay-capture", - "enabled", sysprof_notebook_get_can_replay (notebook), - NULL); + gtk_widget_action_set_enabled (GTK_WIDGET (self), + "win.replay-capture", + sysprof_notebook_get_can_replay (notebook)); } static void @@ -76,17 +76,17 @@ g_assert (SYSPROF_IS_WINDOW (self)); g_assert (SYSPROF_IS_NOTEBOOK (notebook)); - dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "save-capture", - "enabled", sysprof_notebook_get_can_save (notebook), - NULL); + gtk_widget_action_set_enabled (GTK_WIDGET (self), + "win.save-capture", + sysprof_notebook_get_can_save (notebook)); } static void -new_tab_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +new_tab_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; + SysprofWindow *self = (SysprofWindow *)widget; g_return_if_fail (SYSPROF_IS_WINDOW (self)); @@ -94,40 +94,37 @@ } static void -switch_tab_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +switch_tab_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; - gint page; + SysprofWindow *self = (SysprofWindow *)widget; + int page; g_return_if_fail (SYSPROF_IS_WINDOW (self)); g_return_if_fail (g_variant_is_of_type (param, G_VARIANT_TYPE_INT32)); page = g_variant_get_int32 (param); - gtk_notebook_set_current_page (GTK_NOTEBOOK (self->notebook), page - 1); + sysprof_notebook_set_current_page (self->notebook, page - 1); } static void -close_tab_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +close_tab_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; - GtkNotebook *notebook; + SysprofWindow *self = (SysprofWindow *)widget; g_return_if_fail (SYSPROF_IS_WINDOW (self)); - notebook = GTK_NOTEBOOK (self->notebook); - - if (gtk_notebook_get_n_pages (notebook) == 1) + if (sysprof_notebook_get_n_pages (self->notebook) == 1) { - GtkWidget *child = gtk_notebook_get_nth_page (notebook, 0); + SysprofDisplay *child = sysprof_notebook_get_nth_page (self->notebook, 0); if (SYSPROF_IS_DISPLAY (child) && sysprof_display_is_empty (SYSPROF_DISPLAY (child))) { - gtk_widget_destroy (GTK_WIDGET (self)); + gtk_window_destroy (GTK_WINDOW (self)); return; } } @@ -136,34 +133,37 @@ } static void -replay_capture_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +replay_capture_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; + SysprofWindow *self = (SysprofWindow *)widget; + g_return_if_fail (SYSPROF_IS_WINDOW (self)); + sysprof_notebook_replay (self->notebook); } static void -save_capture_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +save_capture_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; + SysprofWindow *self = (SysprofWindow *)widget; + g_return_if_fail (SYSPROF_IS_WINDOW (self)); + sysprof_notebook_save (self->notebook); } static void -stop_recording_cb (GSimpleAction *action, - GVariant *param, - gpointer user_data) +stop_recording_cb (GtkWidget *widget, + const char *action_name, + GVariant *param) { - SysprofWindow *self = user_data; + SysprofWindow *self = (SysprofWindow *)widget; SysprofDisplay *current; - g_assert (G_IS_SIMPLE_ACTION (action)); g_assert (SYSPROF_IS_WINDOW (self)); if ((current = sysprof_notebook_get_current (self->notebook))) @@ -175,7 +175,7 @@ { SysprofWindow *self = (SysprofWindow *)object; - dzl_binding_group_set_source (self->bindings, NULL); + g_binding_group_set_source (self->bindings, NULL); g_clear_object (&self->bindings); G_OBJECT_CLASS (sysprof_window_parent_class)->finalize (object); @@ -194,6 +194,15 @@ gtk_widget_class_bind_template_child (widget_class, SysprofWindow, open_button); gtk_widget_class_bind_template_child (widget_class, SysprofWindow, notebook); + gtk_widget_class_install_action (widget_class, "win.close-tab", NULL, close_tab_cb); + gtk_widget_class_install_action (widget_class, "win.new-tab", NULL, new_tab_cb); + gtk_widget_class_install_action (widget_class, "win.switch-tab", "i", switch_tab_cb); + gtk_widget_class_install_action (widget_class, "win.replay-capture", NULL, replay_capture_cb); + gtk_widget_class_install_action (widget_class, "win.save-capture", NULL, save_capture_cb); + gtk_widget_class_install_action (widget_class, "win.stop-recording", NULL, stop_recording_cb); + + gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Escape, 0, "win.stop-recording", NULL); + g_type_ensure (SYSPROF_TYPE_NOTEBOOK); g_type_ensure (SYSPROF_TYPE_DISPLAY); } @@ -201,22 +210,12 @@ static void sysprof_window_init (SysprofWindow *self) { - DzlShortcutController *controller; - static GActionEntry actions = { - { "close-tab", close_tab_cb }, - { "new-tab", new_tab_cb }, - { "switch-tab", switch_tab_cb, "i" }, - { "replay-capture", replay_capture_cb }, - { "save-capture", save_capture_cb }, - { "stop-recording", stop_recording_cb }, - }; + GMenu *menu; gtk_widget_init_template (GTK_WIDGET (self)); - g_action_map_add_action_entries (G_ACTION_MAP (self), - actions, - G_N_ELEMENTS (actions), - self); + menu = gtk_application_get_menu_by_id (GTK_APPLICATION (g_application_get_default ()), "win-menu"); + gtk_menu_button_set_menu_model (self->menu_button, G_MENU_MODEL (menu)); g_signal_connect_object (self->notebook, "notify::can-replay", @@ -230,24 +229,13 @@ self, G_CONNECT_SWAPPED); - self->bindings = dzl_binding_group_new (); - dzl_binding_group_bind (self->bindings, "title", self, "title", G_BINDING_SYNC_CREATE); + self->bindings = g_binding_group_new (); + g_binding_group_bind (self->bindings, "title", self, "title", G_BINDING_SYNC_CREATE); g_object_bind_property (self->notebook, "current", self->bindings, "source", G_BINDING_SYNC_CREATE); - controller = dzl_shortcut_controller_find (GTK_WIDGET (self)); - dzl_shortcut_controller_add_command_action (controller, - "org.gnome.sysprof3.stop-recording", - "Escape", - DZL_SHORTCUT_PHASE_BUBBLE, - "win.stop-recording"); - - dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "save-capture", - "enabled", FALSE, - NULL); - dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "replay-capture", - "enabled", FALSE, - NULL); + gtk_widget_action_set_enabled (GTK_WIDGET (self), "win.save-capture", FALSE); + gtk_widget_action_set_enabled (GTK_WIDGET (self), "win.replay-capture", FALSE); } void @@ -260,12 +248,30 @@ sysprof_notebook_open (self->notebook, file); } +static void +sysprof_window_open_from_dialog_cb (SysprofWindow *self, + int response, + GtkFileChooserNative *dialog) +{ + g_assert (SYSPROF_IS_WINDOW (self)); + g_assert (GTK_IS_FILE_CHOOSER_NATIVE (dialog)); + + if (response == GTK_RESPONSE_ACCEPT) + { + g_autoptr(GFile) file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + + if (g_file_is_native (file)) + sysprof_window_open (self, file); + } + + gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (dialog)); +} + void sysprof_window_open_from_dialog (SysprofWindow *self) { GtkFileChooserNative *dialog; GtkFileFilter *filter; - gint response; g_return_if_fail (SYSPROF_IS_WINDOW (self)); @@ -278,8 +284,6 @@ /* Translators: This is a button. */ _("Cancel")); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE); - filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("Sysprof Captures")); gtk_file_filter_add_pattern (filter, "*.syscap"); @@ -290,17 +294,13 @@ gtk_file_filter_add_pattern (filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); - response = gtk_native_dialog_run (GTK_NATIVE_DIALOG (dialog)); - - if (response == GTK_RESPONSE_ACCEPT) - { - g_autoptr(GFile) file = NULL; - - file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); - sysprof_window_open (self, file); - } + g_signal_connect_object (dialog, + "response", + G_CALLBACK (sysprof_window_open_from_dialog_cb), + self, + G_CONNECT_SWAPPED); - gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (dialog)); + gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog)); } void @@ -312,8 +312,6 @@ g_return_if_fail (SYSPROF_IS_WINDOW (self)); display = sysprof_display_new (); - page = gtk_notebook_insert_page (GTK_NOTEBOOK (self->notebook), display, NULL, -1); - gtk_widget_show (display); - - gtk_notebook_set_current_page (GTK_NOTEBOOK (self->notebook), page); + page = sysprof_notebook_append (self->notebook, SYSPROF_DISPLAY (display)); + sysprof_notebook_set_current_page (self->notebook, page); }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof-window.h -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof-window.h
Changed
@@ -20,7 +20,7 @@ #pragma once -#include <dazzle.h> +#include <adwaita.h> #include "sysprof-application.h" @@ -28,7 +28,7 @@ #define SYSPROF_TYPE_WINDOW (sysprof_window_get_type()) -G_DECLARE_FINAL_TYPE (SysprofWindow, sysprof_window, SYSPROF, WINDOW, DzlApplicationWindow) +G_DECLARE_FINAL_TYPE (SysprofWindow, sysprof_window, SYSPROF, WINDOW, AdwApplicationWindow) GtkWidget *sysprof_window_new (SysprofApplication *application); void sysprof_window_new_tab (SysprofWindow *self);
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof-window.ui
Added
@@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<interface> + <template class="SysprofWindow" parent="AdwApplicationWindow"> + <style> + <class name="org-gnome-Sysprof"/> + </style> + <property name="default-height">750</property> + <property name="default-width">700</property> + <property name="icon-name">org.gnome.Sysprof-symbolic</property> + <property name="title" translatable="yes">Sysprof</property> + <child> + <object class="GtkBox"> + <property name="orientation">vertical</property> + <child> + <object class="GtkHeaderBar"> + <property name="show-title-buttons">true</property> + <property name="visible">true</property> + <child type="end"> + <object class="GtkMenuButton" id="menu_button"> + <property name="visible">true</property> + <child> + <object class="GtkImage"> + <property name="icon-name">open-menu-symbolic</property> + <property name="visible">true</property> + </object> + </child> + <style> + <class name="image-button"/> + </style> + </object> + </child> + <child type="start"> + <object class="GtkButton" id="open_button"> + <property name="label" translatable="yes">_Open</property> + <property name="action-name">app.open-capture</property> + <property name="use-underline">true</property> + <property name="tooltip-text" translatable="yes">Open Recording… (Ctrl+O)</property> + <property name="visible">true</property> + </object> + </child> + <child type="end"> + <object class="GtkLabel" id="stat_label"> + <property name="margin-end">12</property> + <property name="xalign">1</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> + </object> + </child> + <child> + <object class="SysprofNotebook" id="notebook"> + <property name="vexpand">true</property> + <child> + <object class="SysprofDisplay"> + <property name="visible">true</property> + </object> + </child> + </object> + </child> + </object> + </child> + </template> +</interface>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/sysprof.gresource.xml -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/sysprof.gresource.xml
Changed
@@ -7,9 +7,9 @@ <!-- Theme overrides --> <file compressed="true">theme/shared.css</file> - <file compressed="true">theme/Adwaita-shared.css</file> + </gresource> - <!-- UI Files --> - <file preprocess="xml-stripblanks">ui/sysprof-window.ui</file> + <gresource prefix="/org/gnome/sysprof/ui"> + <file preprocess="xml-stripblanks">sysprof-window.ui</file> </gresource> </gresources>
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprof/theme/shared.css -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprof/theme/shared.css
Changed
@@ -1,16 +1,3 @@ -popover list row { - padding: 6px 10px 6px 10px; - border-bottom: 1px solid alpha(@borders, 0.2); -} - -popover list row:last-child { - border-bottom: none; -} - -popover scrolledwindow { - border-top: 1px solid alpha(@borders, 0.75); -} - visualizers list { background: @theme_bg_color; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/sysprofd/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/sysprofd/meson.build
Changed
@@ -1,5 +1,3 @@ -if get_option('with_sysprofd') == 'bundled' - sysprofd_sources = '../libsysprof/sysprof-kallsyms.c', 'sysprofd.c', @@ -36,7 +34,7 @@ systemdunitdir = get_option('systemdunitdir') if systemdunitdir == '' - systemdunitdir = dependency('systemd').get_pkgconfig_variable('systemdsystemunitdir') + systemdunitdir = dependency('systemd').get_variable(pkgconfig: 'systemdsystemunitdir') endif # @@ -96,5 +94,3 @@ configuration: sysprofdconf, install_dir: systemdunitdir, ) - -endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/tests/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/tests/meson.build
Changed
@@ -1,5 +1,3 @@ -if get_option('enable_tests') - test_env = 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), @@ -39,118 +37,112 @@ dependencies: test_capture_deps, ) - test('test-capture', test_capture, env: test_env) test('test-capture-cursor', test_capture_cursor, env: test_env) test('test-mapped-ring-buffer', test_mapped_ring_buffer, env: test_env) if get_option('libsysprof') + test_deps = + libsysprof_static_dep, + -test_deps = - libsysprof_static_dep, - - -test_addr_map = executable('test-addr-map', 'test-addr-map.c', - c_args: test_cflags, - dependencies: test_deps, -) - -test_addr_decode = executable('test-addr-decode', 'test-addr-decode.c', - c_args: test_cflags, - dependencies: test_deps, -) - -test_mountinfo = executable('test-mountinfo', 'test-mountinfo.c', - c_args: test_cflags, - dependencies: test_deps, -) - -test_flatpak = executable('test-flatpak', 'test-flatpak.c', - c_args: test_cflags, - dependencies: test_deps, -) - -test_resolvers = executable('test-resolvers', 'test-resolvers.c', - c_args: test_cflags, - dependencies: test_deps, -) - -allocs_by_size = executable('allocs-by-size', 'allocs-by-size.c', - c_args: test_cflags, - dependencies: test_deps, -) - -allocs_within_mark = executable('allocs-within-mark', 'allocs-within-mark.c', - c_args: test_cflags, - dependencies: test_deps, -) - -cross_thread_frees = executable('cross-thread-frees', 'cross-thread-frees.c', - c_args: test_cflags, - dependencies: test_deps, -) + test_addr_map = executable('test-addr-map', 'test-addr-map.c', + c_args: test_cflags, + dependencies: test_deps, + ) -memory_stack_stash = executable('memory-stack-stash', 'memory-stack-stash.c', - c_args: test_cflags, - dependencies: test_deps, -) + test_addr_decode = executable('test-addr-decode', 'test-addr-decode.c', + c_args: test_cflags, + dependencies: test_deps, + ) -read_build_id = executable('read-build-id', 'read-build-id.c', - c_args: test_cflags, - dependencies: test_deps, -) + test_mountinfo = executable('test-mountinfo', 'test-mountinfo.c', + c_args: test_cflags, + dependencies: test_deps, + ) -show_page_usage = executable('show-page-usage', 'show-page-usage.c', - c_args: test_cflags, - dependencies: test_deps + dependency('cairo'), -) + test_flatpak = executable('test-flatpak', 'test-flatpak.c', + c_args: test_cflags, + dependencies: test_deps, + ) -list_pid_maps = executable('list-all-maps', 'list-all-maps.c', - c_args: test_cflags, - dependencies: libsysprof_static_dep, - include_directories: include_directories('..'), -) + test_resolvers = executable('test-resolvers', 'test-resolvers.c', + c_args: test_cflags, + dependencies: test_deps, + ) -list_maps = executable('list-maps', 'list-maps.c', - c_args: test_cflags, - dependencies: libsysprof_static_dep, - include_directories: include_directories('..'), -) + allocs_by_size = executable('allocs-by-size', 'allocs-by-size.c', + c_args: test_cflags, + dependencies: test_deps, + ) -if get_option('enable_gtk') + allocs_within_mark = executable('allocs-within-mark', 'allocs-within-mark.c', + c_args: test_cflags, + dependencies: test_deps, + ) - test_ui_deps = - libsysprof_dep, - libsysprof_ui_dep, - dependency('gtk+-3.0', version: gtk_req_version), - dependency('libdazzle-1.0', version: dazzle_req_version, fallback: 'libdazzle', 'libdazzle_dep'), - dependency('pangoft2', required: false), - + cross_thread_frees = executable('cross-thread-frees', 'cross-thread-frees.c', + c_args: test_cflags, + dependencies: test_deps, + ) - test_model_filter = executable('test-model-filter', 'test-model-filter.c', + memory_stack_stash = executable('memory-stack-stash', 'memory-stack-stash.c', c_args: test_cflags, - dependencies: test_ui_deps, + dependencies: test_deps, ) - test_process_model = executable('test-process-model', 'test-process-model.c', + read_build_id = executable('read-build-id', 'read-build-id.c', c_args: test_cflags, - dependencies: test_ui_deps, + dependencies: test_deps, ) - test_zoom = executable('test-zoom', - 'test-zoom.c', '../libsysprof-ui/sysprof-zoom-manager.c', + show_page_usage = executable('show-page-usage', 'show-page-usage.c', c_args: test_cflags, - dependencies: test_ui_deps, + dependencies: test_deps + dependency('cairo'), ) - test_capture_view = executable('test-capture-view', 'test-capture-view.c', + list_pid_maps = executable('list-all-maps', 'list-all-maps.c', c_args: test_cflags, - dependencies: test_ui_deps, + dependencies: libsysprof_static_dep, + include_directories: include_directories('..'), ) - test('test-model-filter', test_model_filter, env: test_env) - test('test-zoom', test_zoom, env: test_env) + list_maps = executable('list-maps', 'list-maps.c', + c_args: test_cflags, + dependencies: libsysprof_static_dep, + include_directories: include_directories('..'), + ) -endif -endif + if get_option('gtk') + test_ui_deps = + libsysprof_dep, + libsysprof_ui_dep, + dependency('gtk4', version: gtk_req_version), + dependency('pangoft2', required: false), + + + test_model_filter = executable('test-model-filter', 'test-model-filter.c', + c_args: test_cflags, + dependencies: test_ui_deps, + ) + + test_process_model = executable('test-process-model', 'test-process-model.c', + c_args: test_cflags, + dependencies: test_ui_deps, + ) + + test_zoom = executable('test-zoom', + 'test-zoom.c', '../libsysprof-ui/sysprof-zoom-manager.c', + c_args: test_cflags, + dependencies: test_ui_deps, + ) + + test_capture_view = executable('test-capture-view', 'test-capture-view.c', + c_args: test_cflags, + dependencies: test_ui_deps, + ) + + test('test-model-filter', test_model_filter, env: test_env) + test('test-zoom', test_zoom, env: test_env) + endif endif
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/tests/test-capture-view.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/tests/test-capture-view.c
Changed
@@ -28,8 +28,9 @@ SysprofDisplay *view; SysprofCaptureReader *reader; g_autoptr(GError) error = NULL; + GMainLoop *main_loop; - gtk_init (&argc, &argv); + gtk_init (); if (argc != 2) { @@ -43,6 +44,8 @@ return 1; } + main_loop = g_main_loop_new (NULL, FALSE); + window = g_object_new (GTK_TYPE_WINDOW, "title", "SysprofDisplay", "default-width", 800, @@ -51,13 +54,13 @@ view = g_object_new (SYSPROF_TYPE_DISPLAY, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (view)); + gtk_window_set_child (GTK_WINDOW (window), GTK_WIDGET (view)); sysprof_display_load_async (view, reader, NULL, NULL, NULL); - g_signal_connect (window, "delete-event", gtk_main_quit, NULL); + g_signal_connect_swapped (window, "close-request", G_CALLBACK (g_main_loop_quit), main_loop); gtk_window_present (GTK_WINDOW (window)); - gtk_main (); + g_main_loop_run (main_loop); return 0; }
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/tests/test-process-model.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/tests/test-process-model.c
Changed
@@ -18,11 +18,11 @@ const gchar *needle = user_data; const gchar *command = sysprof_process_model_item_get_command_line (SYSPROF_PROCESS_MODEL_ITEM (object)); - return !!strstr (command, needle); + return needle == NULL || needle0 == 0 || strstr (command, needle) != NULL; } static void -on_entry_changed (GtkEntry *entry, +on_entry_changed (GtkEntry *entry, SysprofModelFilter *filter) { const gchar *text; @@ -30,10 +30,10 @@ g_assert (GTK_IS_ENTRY (entry)); g_assert (SYSPROF_IS_MODEL_FILTER (filter)); - text = gtk_entry_get_text (entry); + text = gtk_editable_get_text (GTK_EDITABLE (entry)); sysprof_model_filter_set_filter_func (filter, filter_cb, g_strdup (text), g_free); - //gtk_list_box_bind_model (GTK_LIST_BOX (list), G_LIST_MODEL (filter), create_row, NULL, NULL); + gtk_list_box_bind_model (GTK_LIST_BOX (list), G_LIST_MODEL (filter), create_row, NULL, NULL); } gint @@ -46,8 +46,11 @@ GtkWidget *box; GtkWidget *scroller; GtkWidget *entry; + GMainLoop *main_loop; + + gtk_init (); - gtk_init (&argc, &argv); + main_loop = g_main_loop_new (NULL, FALSE); window = g_object_new (GTK_TYPE_WINDOW, "title", "Sysprof Process List", @@ -59,23 +62,24 @@ "orientation", GTK_ORIENTATION_VERTICAL, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (window), box); + gtk_window_set_child (GTK_WINDOW (window), box); entry = g_object_new (GTK_TYPE_ENTRY, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (box), entry); + gtk_box_append (GTK_BOX (box), entry); scroller = g_object_new (GTK_TYPE_SCROLLED_WINDOW, "visible", TRUE, - "expand", TRUE, + "vexpand", TRUE, + "hexpand", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (box), scroller); + gtk_box_append (GTK_BOX (box), scroller); list = g_object_new (GTK_TYPE_LIST_BOX, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (scroller), list); + gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scroller), list); model = sysprof_process_model_new (); sysprof_process_model_set_no_proxy (model, TRUE); @@ -87,9 +91,9 @@ G_CALLBACK (on_entry_changed), filter); + g_signal_connect_swapped (window, "close-request", G_CALLBACK (g_main_loop_quit), main_loop); gtk_window_present (GTK_WINDOW (window)); - g_signal_connect (window, "delete-event", gtk_main_quit, NULL); - gtk_main (); + g_main_loop_run (main_loop); g_object_unref (model);
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/tools/meson.build -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/tools/meson.build
Changed
@@ -1,5 +1,3 @@ -if get_option('enable_tools') - tools_deps = dependency('glib-2.0'), libsysprof_capture_dep, @@ -7,14 +5,12 @@ tools_cflags = '-DSYSPROF_COMPILATION ' -if get_option('libsysprof') - sysprof_cli = executable('sysprof-cli', 'sysprof-cli.c', - dependencies: tools_deps + libsysprof_dep, polkit_dep, polkit_agent_dep, - c_args: tools_cflags, - install_dir: get_option('bindir'), - install: true, - ) -endif +sysprof_cli = executable('sysprof-cli', 'sysprof-cli.c', + dependencies: libsysprof_static_dep, polkit_dep, polkit_agent_dep, + c_args: tools_cflags, + install_dir: get_option('bindir'), + install: true, +) sysprof_cat = executable('sysprof-cat', 'sysprof-cat.c', dependencies: tools_deps, @@ -28,7 +24,7 @@ install: false, ) -if get_option('with_sysprofd') == 'bundled' or get_option('libsysprof') +if get_option('sysprofd') == 'bundled' or get_option('libsysprof') sysprof_profiler_ctl = executable('sysprof-profiler-ctl', 'sysprof-profiler-ctl.c', ipc_profiler_src , dependencies: tools_deps, dependency('gio-unix-2.0', version: glib_req_version) , @@ -43,4 +39,12 @@ install: false, ) +if get_option('agent') + sysprof_agent = executable('sysprof-agent', + 'sysprof-agent.c', ipc_agent_src, + dependencies: libsysprof_static_dep, + c_args: tools_cflags, + install_dir: get_option('bindir'), + install: true, + ) endif
View file
_service:tar_scm:sysprof-3.46.0.tar.xz/src/tools/sysprof-agent.c
Added
@@ -0,0 +1,678 @@ +/* sysprof-agent.c + * + * Copyright 2022 Christian Hergert <chergert@redhat.com> + * + * 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "config.h" + +#include <errno.h> +#include <stdlib.h> +#include <unistd.h> + +#include <glib-unix.h> +#include <gio/gunixinputstream.h> +#include <gio/gunixoutputstream.h> + +#include <sysprof.h> + +#include "ipc-agent.h" + +#define BUFFER_SIZE (4096L*16L) /* 64KB */ + +static gboolean forward_fd_func (const char *option_name, + const char *option_value, + gpointer data, + GError **error); + +static GMainLoop *main_loop; +static GSubprocess *subprocess; +static char *subprocess_ident; +static gboolean subprocess_finished; +static IpcAgent *service; +static int exit_code = EXIT_SUCCESS; +static int read_fd = -1; +static int write_fd = -1; +static int pty_fd = -1; +static char *directory; +static char *capture_filename; +static GArray *forward_fds; +static char **env; +static gboolean clear_env; +static gboolean aid_battery; +static gboolean aid_compositor; +static gboolean aid_cpu; +static gboolean aid_disk; +static gboolean aid_energy; +static gboolean aid_gjs; +static gboolean aid_memory; +static gboolean aid_memprof; +static gboolean aid_net; +static gboolean aid_perf; +static gboolean aid_tracefd; +static gboolean no_throttle; +static gboolean decode; +static const GOptionEntry options = { + { "read-fd", 0, 0, G_OPTION_ARG_INT, &read_fd, "The read side of the FD to use for D-Bus" }, + { "write-fd", 0, 0, G_OPTION_ARG_INT, &write_fd, "The write side of the FD to use for D-Bus" }, + { "forward-fd", 0, 0, G_OPTION_ARG_CALLBACK, forward_fd_func, "The FD to forward to the subprocess" }, + { "directory", 0, 0, G_OPTION_ARG_FILENAME, &directory, "The directory to run spawn the subprocess from", "PATH" }, + { "capture", 0, 0, G_OPTION_ARG_FILENAME, &capture_filename, "The filename to save the sysprof capture to", "PATH" }, + { "clear-env", 0, 0, G_OPTION_ARG_NONE, &clear_env, "Clear environment instead of inheriting" }, + { "decode", 0, 0, G_OPTION_ARG_NONE, &decode, "Decode symbols at the end of the recording" }, + { "env", 0, 0, G_OPTION_ARG_STRING_ARRAY, &env, "Add an environment variable to the spawned process", "KEY=VALUE" }, + { "cpu", 0, 0, G_OPTION_ARG_NONE, &aid_cpu, "Track CPU usage and frequency" }, + { "gjs", 0, 0, G_OPTION_ARG_NONE, &aid_gjs, "Record stack traces within GJS" }, + { "perf", 0, 0, G_OPTION_ARG_NONE, &aid_perf, "Record stack traces with perf" }, + { "memory", 0, 0, G_OPTION_ARG_NONE, &aid_memory, "Record basic system memory usage" }, + { "memprof", 0, 0, G_OPTION_ARG_NONE, &aid_memprof, "Record stack traces during memory allocations" }, + { "disk", 0, 0, G_OPTION_ARG_NONE, &aid_disk, "Record disk usage information" }, + { "net", 0, 0, G_OPTION_ARG_NONE, &aid_net, "Record network usage information" }, + { "energy", 0, 0, G_OPTION_ARG_NONE, &aid_energy, "Record energy usage using RAPL" }, + { "battery", 0, 0, G_OPTION_ARG_NONE, &aid_battery, "Record battery charge and discharge rates" }, + { "compositor", 0, 0, G_OPTION_ARG_NONE, &aid_compositor, "Record GNOME Shell compositor information" }, + { "no-throttle", 0, 0, G_OPTION_ARG_NONE, &no_throttle, "Disable CPU throttling" }, + { "tracefd", 0, 0, G_OPTION_ARG_NONE, &aid_tracefd, "Provide TRACEFD to subprocess" }, + { NULL } +}; + +G_GNUC_PRINTF (1, 2) +static void +message (const char *format, + ...) +{ + g_autofree char *formatted = NULL; + va_list args; + + if (service == NULL) + return; + + va_start (args, format); + formatted = g_strdup_vprintf (format, args); + va_end (args); + + ipc_agent_emit_log (service, formatted); +} + +#define GBP_TYPE_SPAWN_SOURCE (gbp_spawn_source_get_type()) +G_DECLARE_FINAL_TYPE (GbpSpawnSource, gbp_spawn_source, GBP, SPAWN_SOURCE, GObject) + +struct _GbpSpawnSource +{ + GObject parent_instance; +}; + +static void +gbp_spawn_source_modify_spawn (SysprofSource *source, + SysprofSpawnable *spawnable) +{ + g_assert (GBP_IS_SPAWN_SOURCE (source)); + g_assert (SYSPROF_IS_SPAWNABLE (spawnable)); + + if (forward_fds == NULL) + return; + + for (guint i = 0; i < forward_fds->len; i++) + { + int fd = g_array_index (forward_fds, int, i); + sysprof_spawnable_take_fd (spawnable, dup (fd), fd); + } + + if (pty_fd != -1) + { + sysprof_spawnable_take_fd (spawnable, dup (pty_fd), STDIN_FILENO); + sysprof_spawnable_take_fd (spawnable, dup (pty_fd), STDOUT_FILENO); + sysprof_spawnable_take_fd (spawnable, dup (pty_fd), STDERR_FILENO); + } +} + +static void +gbp_spawn_source_start (SysprofSource *source) +{ + sysprof_source_emit_ready (source); +} + +static void +gbp_spawn_source_stop (SysprofSource *source) +{ + sysprof_source_emit_finished (source); +} + +static void +spawn_source_init (SysprofSourceInterface *iface) +{ + iface->modify_spawn = gbp_spawn_source_modify_spawn; + iface->start = gbp_spawn_source_start; + iface->stop = gbp_spawn_source_stop; +} + +G_DEFINE_FINAL_TYPE_WITH_CODE (GbpSpawnSource, gbp_spawn_source, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (SYSPROF_TYPE_SOURCE, spawn_source_init)) + +static void +gbp_spawn_source_class_init (GbpSpawnSourceClass *klass) +{ +} + +static void +gbp_spawn_source_init (GbpSpawnSource *self) +{ +} + +#define IPC_TYPE_AGENT_IMPL (ipc_agent_impl_get_type()) +G_DECLARE_FINAL_TYPE (IpcAgentImpl, ipc_agent_impl, IPC, SYPSROF_IMPL, IpcAgentSkeleton) + +struct _IpcAgentImpl +{ + IpcAgentSkeleton parent_instance; +}; + +static gboolean +handle_force_exit (IpcAgent *sysprof, + GDBusMethodInvocation *invocation) +{ + if (subprocess && !subprocess_finished) + g_subprocess_force_exit (subprocess); + + ipc_agent_complete_force_exit (sysprof, invocation); + + return TRUE; +} + +static gboolean +handle_send_signal (IpcAgent *sysprof, + GDBusMethodInvocation *invocation, + int signum) +{ + if (subprocess && !subprocess_finished) + g_subprocess_send_signal (subprocess, signum); + + ipc_agent_complete_send_signal (sysprof, invocation); + + return TRUE; +} + +static void +service_iface_init (IpcAgentIface *iface) +{ + iface->handle_force_exit = handle_force_exit; + iface->handle_send_signal = handle_send_signal; +} + +G_DEFINE_FINAL_TYPE_WITH_CODE (IpcAgentImpl, ipc_agent_impl, IPC_TYPE_AGENT_SKELETON, + G_IMPLEMENT_INTERFACE (IPC_TYPE_AGENT, service_iface_init)) + +static void +ipc_agent_impl_class_init (IpcAgentImplClass *klass) +{ +} + +static void +ipc_agent_impl_init (IpcAgentImpl *self) +{ +} + +static gboolean +forward_fd_func (const char *option_name, + const char *option_value, + gpointer data, + GError **error) +{ + int fd; + + if (forward_fds == NULL) + forward_fds = g_array_new (FALSE, FALSE, sizeof (int)); + + errno = 0; + + if (!(fd = atoi (option_value)) && errno != 0) + { + int errsv = errno; + g_set_error (error, + G_IO_ERROR, + g_io_error_from_errno (errsv), + "--forward-fd must contain a file-descriptor: %s", + g_strerror (errsv)); + return FALSE; + } + + if (fd < 0) + { + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_INVAL, + "--forward-fd must be 0 or a positive integer"); + return FALSE; + } + + g_array_append_val (forward_fds, fd); + + return TRUE; +} + +G_GNUC_NULL_TERMINATED +static void +add_source (SysprofProfiler *profiler, + gboolean enabled, + GType source_type, + ...) +{ + g_autoptr(SysprofSource) source = NULL; + const char *first_property; + va_list args; + + g_assert (SYSPROF_IS_PROFILER (profiler)); + g_assert (g_type_is_a (source_type, SYSPROF_TYPE_SOURCE)); + + if (!enabled) + return; + + va_start (args, source_type); + first_property = va_arg (args, const char *); + if (first_property != NULL) + source = (SysprofSource *)g_object_new_valist (source_type, first_property, args); + else + source = g_object_new (source_type, NULL); + va_end (args); + + g_assert (!source || SYSPROF_IS_SOURCE (source)); + + if (source != NULL) + sysprof_profiler_add_source (profiler, source); + else + g_printerr ("Failed to create source of type \"%s\"\n", + g_type_name (source_type)); +} + +static void +profiler_failed_cb (SysprofProfiler *profiler, + const GError *error) +{ + g_assert (SYSPROF_IS_LOCAL_PROFILER (profiler)); + g_assert (error != NULL); + + g_printerr ("Profiling failed: %s", error->message); + exit_code = EXIT_FAILURE; + g_main_loop_quit (main_loop); +} + +static void +profiler_stopped_cb (SysprofProfiler *profiler) +{ + g_assert (SYSPROF_IS_LOCAL_PROFILER (profiler)); + + g_main_loop_quit (main_loop); +} + +static void +subprocess_spawned_cb (SysprofLocalProfiler *profiler, + GSubprocess *new_subprocess) +{ + g_assert (SYSPROF_IS_LOCAL_PROFILER (profiler)); + g_assert (G_IS_SUBPROCESS (new_subprocess)); + + g_set_object (&subprocess, new_subprocess); + + subprocess_ident = g_strdup (g_subprocess_get_identifier (subprocess)); + + message ("Created process %s", subprocess_ident); +} + +static void +subprocess_finished_cb (SysprofLocalProfiler *profiler, + GSubprocess *new_subprocess) +{ + g_assert (SYSPROF_IS_LOCAL_PROFILER (profiler)); + g_assert (G_IS_SUBPROCESS (new_subprocess)); + + subprocess_finished = TRUE; + + message ("Process %s exited", subprocess_ident); +} + +static void +split_argv (int argc, + char **argv, + int *our_argc, + char ***our_argv, + int *sub_argc, + char ***sub_argv) +{ + gboolean found_split = FALSE; + + *our_argc = 0; + *our_argv = g_new0 (char *, 1); + + *sub_argc = 0; + *sub_argv = g_new0 (char *, 1); + + for (int i = 0; i < argc; i++) + { + if (g_strcmp0 (argvi, "--") == 0) + { + found_split = TRUE; + } + else if (found_split) + { + (*sub_argv) = g_realloc_n (*sub_argv, *sub_argc + 2, sizeof (char *)); + (*sub_argv)*sub_argc = g_strdup (argvi); + (*sub_argv)*sub_argc+1 = NULL; + (*sub_argc)++; + } + else + { + (*our_argv) = g_realloc_n (*our_argv, *our_argc + 2, sizeof (char *)); + (*our_argv)*our_argc = g_strdup (argvi); + (*our_argv)*our_argc+1 = NULL; + (*our_argc)++; + } + } +} + +static void +warn_error (GError **error) +{ + if (*error) + { + g_warning ("%s", (*error)->message); + g_clear_error (error); + } +} + +static GDBusConnection * +create_connection (GIOStream *stream, + GError **error) +{ + GDBusConnection *ret; + + g_assert (G_IS_IO_STREAM (stream)); + g_assert (main_loop != NULL); + g_assert (error != NULL); + + if ((ret = g_dbus_connection_new_sync (stream, NULL, + G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING, + NULL, NULL, error))) + { + g_dbus_connection_set_exit_on_close (ret, FALSE); + g_signal_connect_swapped (ret, "closed", G_CALLBACK (g_main_loop_quit), main_loop); + } + + return ret; +} + +static gboolean +sigint_handler (gpointer user_data) +{ + SysprofProfiler *profiler = user_data; + + g_assert (SYSPROF_IS_PROFILER (profiler)); + + g_printerr ("\n" + "Profiler stopped, extracting symbols and appending to capture.\n" + "Press ^C again to force exit.\n"); + sysprof_profiler_stop (profiler); + return G_SOURCE_REMOVE; +} + +int +main (int argc, + char *argv) +{ + g_autoptr(SysprofCaptureWriter) writer = NULL; + g_autoptr(SysprofProfiler) profiler = NULL; + g_autoptr(GDBusConnection) connection = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + g_autoptr(GDBusConnection) system_bus = NULL; + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GError) error = NULL; + g_auto(GStrv) our_argv = NULL; + g_auto(GStrv) sub_argv = NULL; + GMainContext *main_context; + int our_argc = -1; + int sub_argc = -1; + + sysprof_clock_init (); + + g_set_prgname ("sysprof-agent"); + g_set_application_name ("sysprof-agent"); + + /* Ignore SIGPIPE as we're using pipes to IPC */ + signal (SIGPIPE, SIG_IGN); + + /* Split argv into pre/post -- command split */ + split_argv (argc, argv, &our_argc, &our_argv, &sub_argc, &sub_argv); + g_assert (our_argc >= 0); + g_assert (sub_argc >= 0); + + /* Parse command line options pre -- */ + context = g_option_context_new ("-- COMMAND"); + g_option_context_add_main_entries (context, options, NULL); + if (!g_option_context_parse (context, &our_argc, &our_argv, &error)) + { + g_printerr ("%s\n", error->message); + return EXIT_FAILURE; + } + + /* Make sure we have a filename to capture to */ + if (capture_filename == NULL) + { + g_printerr ("You must provide --capture=PATH\n"); + return EXIT_FAILURE; + } + + /* Setup main loop, we'll need it going forward for things + * like async D-Bus, waiting for child processes, etc. + */ + main_loop = g_main_loop_new (NULL, FALSE); + + /* First spin up our bus connections */ + if (!(session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error))) + warn_error (&error); + if (!(system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL))) + warn_error (&error); + + /* Now setup our private p2p D-Bus connection to the controller */ + if (read_fd != -1 || write_fd != -1) + { + g_autoptr(GIOStream) stream = NULL; + g_autoptr(GInputStream) in_stream = NULL; + g_autoptr(GOutputStream) out_stream = NULL; + + /* Both must be set, not just one side */ + if (read_fd == -1 || write_fd == -1) + { + g_printerr ("You must specify both --read-fd and --write-fd\n"); + return EXIT_FAILURE; + } + + /* We need these FDs non-blocking for async IO */ + if (!g_unix_set_fd_nonblocking (read_fd, TRUE, &error) || + !g_unix_set_fd_nonblocking (write_fd, TRUE, &error)) + { + g_printerr ("Failed to set FDs in nonblocking mode: %s\n", + error->message); + return EXIT_FAILURE; + } + + /* Create stream using FDs provided to us */ + in_stream = g_unix_input_stream_new (read_fd, FALSE); + out_stream = g_unix_output_stream_new (write_fd, FALSE); + stream = g_simple_io_stream_new (in_stream, out_stream); + + /* Create connection using our private stream from the controller */ + if (!(connection = create_connection (stream, &error))) + { + g_printerr ("Failed to setup P2P D-Bus connection: %s\n", + error->message); + return EXIT_FAILURE; + } + + /* Now export our service at "/" (but don't start processing messages + * until we start the profiler, further on. + */ + service = g_object_new (IPC_TYPE_AGENT_IMPL, NULL); + if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service), + connection, "/", &error)) + { + g_printerr ("Failed to export service over D-Bus connection: %s", + error->message); + return EXIT_FAILURE; + } + } + + /* Now start setting up our profiler */ + profiler = sysprof_local_profiler_new (); + + /* We might not even know our real subprocess in the case we are going + * through another indirection layer like flatpak-spawn, so just assume + * we're profiling the entire system as that will be necessary to include + * the PID we really care about. + */ + sysprof_profiler_set_whole_system (profiler, TRUE); + + /* If -- was ommitted or there are no commands, just profile the entire + * system without spawning anything. Really only useful when testing the + * agent without a D-Bus service. + */ + if (sub_argc >= 0) + { + sysprof_profiler_set_spawn (profiler, TRUE); + sysprof_profiler_set_spawn_inherit_environ (profiler, !clear_env); + sysprof_profiler_set_spawn_argv (profiler, (const char * const *)sub_argv); + sysprof_profiler_set_spawn_env (profiler, (const char * const *)env); + + if (directory != NULL) + sysprof_profiler_set_spawn_cwd (profiler, directory); + else + sysprof_profiler_set_spawn_cwd (profiler, "."); + } + + /* Now open the writer for our session */ + if (!(writer = sysprof_capture_writer_new (capture_filename, BUFFER_SIZE))) + { + int errsv = errno; + g_printerr ("Failed to open capture writer: %s\n", + g_strerror (errsv)); + return EXIT_FAILURE; + } + + /* Attach writer to the profiler */ + sysprof_profiler_set_writer (profiler, writer); + + /* Add all request sources */ + add_source (profiler, TRUE, GBP_TYPE_SPAWN_SOURCE, NULL); + add_source (profiler, TRUE, SYSPROF_TYPE_PROC_SOURCE, NULL); + add_source (profiler, TRUE, SYSPROF_TYPE_SYMBOLS_SOURCE, NULL); + add_source (profiler, aid_battery, SYSPROF_TYPE_BATTERY_SOURCE, NULL); + add_source (profiler, aid_compositor, SYSPROF_TYPE_PROXY_SOURCE, + "bus-type", G_BUS_TYPE_SESSION, + "bus-name", "org.gnome.Shell", + "object-path", "/org/gnome/Sysprof3/Profiler", + NULL); + add_source (profiler, aid_cpu, SYSPROF_TYPE_HOSTINFO_SOURCE, NULL); + add_source (profiler, aid_disk, SYSPROF_TYPE_DISKSTAT_SOURCE, NULL); + add_source (profiler, aid_energy, SYSPROF_TYPE_PROXY_SOURCE, + "bus-type", G_BUS_TYPE_SYSTEM, + "bus-name", "org.gnome.Sysprof3", + "object-path", "/org/gnome/Sysprof3/RAPL", + NULL); + add_source (profiler, aid_gjs, SYSPROF_TYPE_GJS_SOURCE, NULL); + add_source (profiler, aid_memory, SYSPROF_TYPE_MEMORY_SOURCE, NULL); + add_source (profiler, aid_memprof, SYSPROF_TYPE_MEMPROF_SOURCE, NULL); + add_source (profiler, aid_net, SYSPROF_TYPE_NETDEV_SOURCE, NULL); + add_source (profiler, aid_perf, SYSPROF_TYPE_PERF_SOURCE, NULL); + add_source (profiler, aid_tracefd, SYSPROF_TYPE_TRACEFD_SOURCE, + "envvar", "SYSPROF_TRACE_FD", + NULL); + add_source (profiler, no_throttle, SYSPROF_TYPE_GOVERNOR_SOURCE, + "disable-governor", TRUE, + NULL); + add_source (profiler, decode, SYSPROF_TYPE_SYMBOLS_SOURCE, NULL); + + /* Bail when we've failed or finished and track the subprocess + * so that we can deliver signals to it. + */ + g_signal_connect (profiler, + "failed", + G_CALLBACK (profiler_failed_cb), + NULL); + g_signal_connect (profiler, + "stopped", + G_CALLBACK (profiler_stopped_cb), + NULL); + g_signal_connect (profiler, + "subprocess-spawned", + G_CALLBACK (subprocess_spawned_cb), + NULL); + g_signal_connect (profiler, + "subprocess-finished", + G_CALLBACK (subprocess_finished_cb), + NULL); + + /* SIGINT (keyboard ^C) should stop the profiler and append symbols + * to the SysprofCaptureWriter. + */ + g_unix_signal_add (SIGINT, sigint_handler, profiler); + + /* Start the profiler */ + sysprof_profiler_start (profiler); + + /* Now tell the connection to start processing messages that are + * delivered from the controller, or signals destined back. + */ + if (connection != NULL) + g_dbus_connection_start_message_processing (connection); + + /* Wait for profiler to finish */ + g_main_loop_run (main_loop); + + /* Notify that some more work needs to proceed */ + message ("Extracting callgraph symbols"); + + /* Let anything in-flight finish */ + main_context = g_main_loop_get_context (main_loop); + while (g_main_context_pending (main_context)) + g_main_context_iteration (main_context, FALSE); + + /* Now make sure our bits are on disk */ + sysprof_capture_writer_flush (writer); + + /* Try to exit the same way as the subprocess did to propagate that + * back into Builder who is watching *this* process. + */ + if (subprocess_finished) + { + g_assert (G_IS_SUBPROCESS (subprocess)); + g_assert (g_subprocess_get_if_exited (subprocess) || + g_subprocess_get_if_signaled (subprocess)); + + if (g_subprocess_get_if_signaled (subprocess)) + { + int signum = g_subprocess_get_term_sig (subprocess); + /* Try to exit in the same manner, or SIGKILL if that doesn't + * work, or just EXIT_FAILURE as last resort. + */ + raise (signum); + raise (SIGKILL); + return EXIT_FAILURE; + } + + exit_code = g_subprocess_get_exit_status (subprocess); + } + + return exit_code; +}
View file
_service:tar_scm:sysprof-3.44.0.tar.xz/src/tools/sysprof-cli.c -> _service:tar_scm:sysprof-3.46.0.tar.xz/src/tools/sysprof-cli.c
Changed
@@ -22,13 +22,14 @@ #include <fcntl.h> #include <locale.h> -#include <glib-unix.h> -#include <glib/gi18n.h> -#include <glib/gstdio.h> #include <signal.h> #include <stdlib.h> #include <sys/types.h> -#include <signal.h> + +#include <glib-unix.h> +#include <glib/gi18n.h> +#include <glib/gstdio.h> + #include <sysprof.h> #if HAVE_POLKIT && HAVE_POLKIT_AGENT @@ -349,6 +350,8 @@ profiler = sysprof_local_profiler_new (); + sysprof_local_profiler_set_inherit_stdin (SYSPROF_LOCAL_PROFILER (profiler), TRUE); + g_signal_connect (profiler, "failed", G_CALLBACK (profiler_failed),
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2