From e05fb7b3e36c052baf0dd607ddeb22c0a2b5cbde Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:47:04 +0200 Subject: Adding upstream version 43.2. Signed-off-by: Daniel Baumann --- .../pages/software/gis-software-page.c | 179 +++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 gnome-initial-setup/pages/software/gis-software-page.c (limited to 'gnome-initial-setup/pages/software/gis-software-page.c') diff --git a/gnome-initial-setup/pages/software/gis-software-page.c b/gnome-initial-setup/pages/software/gis-software-page.c new file mode 100644 index 0000000..b68d143 --- /dev/null +++ b/gnome-initial-setup/pages/software/gis-software-page.c @@ -0,0 +1,179 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +/* + * Copyright (C) 2016, 2021 Red Hat + * + * 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 2 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 . + * + * Written by: + * Matthias Clasen + * Kalev Lember + * Michael Catanzaro + */ + +/* SOFTWARE pages {{{1 */ + +#define PAGE_ID "software" + +#include "config.h" +#include "software-resources.h" +#include "gis-software-page.h" + +#include +#include +#include + +#include "gis-page-header.h" + +struct _GisSoftwarePagePrivate +{ + GtkWidget *header; + GtkWidget *enable_disable_button; + gboolean enabled; +}; + +typedef struct _GisSoftwarePagePrivate GisSoftwarePagePrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (GisSoftwarePage, gis_software_page, GIS_TYPE_PAGE); + +static void +gis_software_page_constructed (GObject *object) +{ + GisSoftwarePage *page = GIS_SOFTWARE_PAGE (object); + + G_OBJECT_CLASS (gis_software_page_parent_class)->constructed (object); + + gis_page_set_complete (GIS_PAGE (page), TRUE); +} + +/* Distro-specific stuff is isolated here so that the rest of this page can be + * used by other distros. Feel free to add your distro here. + */ +static char * +find_fedora_third_party (void) +{ + return g_find_program_in_path ("fedora-third-party"); +} + +static gboolean +should_show_software_page (void) +{ + g_autofree char *has_fedora_third_party = find_fedora_third_party (); + return has_fedora_third_party != NULL; +} + +static gboolean +gis_software_page_apply (GisPage *gis_page, + GCancellable *cancellable) +{ + GisSoftwarePage *page = GIS_SOFTWARE_PAGE (gis_page); + GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page); + g_autofree char *program = NULL; + g_autoptr (GError) error = NULL; + + program = find_fedora_third_party (); + + if (program) + { + const char *arg1; + + if (priv->enabled) + arg1 = "enable"; + else + arg1 = "disable"; + + gis_pkexec (program, arg1, "root", &error); + if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning ("%s failed: %s", program, error->message); + } + + return FALSE; +} + +static void +gis_software_page_locale_changed (GisPage *gis_page) +{ + GisSoftwarePage *page = GIS_SOFTWARE_PAGE (gis_page); + GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page); + + gis_page_set_title (GIS_PAGE (page), _("Third-Party Repositories")); + g_object_set (priv->header, "subtitle", _("Third-party repositories provide access to additional software from selected external sources, including popular apps and drivers that are important for some devices. Some proprietary software is included."), NULL); +} + +static void +enabled_state_changed (GisSoftwarePage *page) +{ + GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page); + + if (priv->enabled) + { + gtk_button_set_label (GTK_BUTTON (priv->enable_disable_button), _("_Disable Third-Party Repositories")); + gtk_widget_remove_css_class (priv->enable_disable_button, "suggested-action"); + } + else + { + gtk_button_set_label (GTK_BUTTON (priv->enable_disable_button), _("_Enable Third-Party Repositories")); + gtk_widget_add_css_class (priv->enable_disable_button, "suggested-action"); + } +} + +static gboolean +enable_disable_button_clicked_cb (GtkButton *button, + GisSoftwarePage *page) +{ + GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page); + priv->enabled = !priv->enabled; + enabled_state_changed (page); + return GDK_EVENT_STOP; +} + +static void +gis_software_page_class_init (GisSoftwarePageClass *klass) +{ + GisPageClass *page_class = GIS_PAGE_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), "/org/gnome/initial-setup/gis-software-page.ui"); + gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisSoftwarePage, header); + gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisSoftwarePage, enable_disable_button); + gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), enable_disable_button_clicked_cb); + + page_class->page_id = PAGE_ID; + page_class->locale_changed = gis_software_page_locale_changed; + page_class->apply = gis_software_page_apply; + object_class->constructed = gis_software_page_constructed; +} + +static void +gis_software_page_init (GisSoftwarePage *page) +{ + g_resources_register (software_get_resource ()); + g_type_ensure (GIS_TYPE_PAGE_HEADER); + + gtk_widget_init_template (GTK_WIDGET (page)); + enabled_state_changed (page); +} + +GisPage * +gis_prepare_software_page (GisDriver *driver) +{ + GisPage *page = NULL; + if (should_show_software_page ()) + { + page = g_object_new (GIS_TYPE_SOFTWARE_PAGE, + "driver", driver, + NULL); + } + + return page; +} -- cgit v1.2.3