[gnome-initial-setup/mcatanzaro/resurrect-software-page: 3/9] Revert "Remove obsolete Software page"




commit 7d727575910e2810652b23273112fd569761ddf4
Author: Michael Catanzaro <mcatanzaro redhat com>
Date:   Fri Jul 30 10:10:47 2021 -0500

    Revert "Remove obsolete Software page"
    
    This reverts commit 7451f79ec7d9dac266ee51674166b072083f7e92.
    
    This brings back the software page that was previously removed because
    it was broken for a long time, #59. I will be updating it in subsequent
    commits to actually work.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/merge_requests/121>

 gnome-initial-setup/gnome-initial-setup.c          |   2 +
 gnome-initial-setup/meson.build                    |   1 +
 gnome-initial-setup/pages/meson.build              |   1 +
 .../pages/software/gis-software-page.c             | 271 +++++++++++++++++++++
 .../pages/software/gis-software-page.h             |  58 +++++
 .../pages/software/gis-software-page.ui            | 156 ++++++++++++
 gnome-initial-setup/pages/software/meson.build     |  10 +
 .../pages/software/software.gresource.xml          |   6 +
 meson.build                                        |   6 +
 meson_options.txt                                  |   6 +
 po/POTFILES.in                                     |   2 +
 11 files changed, 519 insertions(+)
---
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index e68ebae1..a4c67110 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -38,6 +38,7 @@
 #include "pages/network/gis-network-page.h"
 #include "pages/timezone/gis-timezone-page.h"
 #include "pages/privacy/gis-privacy-page.h"
+#include "pages/software/gis-software-page.h"
 #include "pages/goa/gis-goa-page.h"
 #include "pages/account/gis-account-pages.h"
 #include "pages/parental-controls/gis-parental-controls-page.h"
@@ -70,6 +71,7 @@ static PageData page_table[] = {
   PAGE (network,  FALSE),
   PAGE (privacy,  FALSE),
   PAGE (timezone, TRUE),
+  PAGE (software, TRUE),
   PAGE (goa,      FALSE),
   PAGE (account,  TRUE),
   PAGE (password, TRUE),
diff --git a/gnome-initial-setup/meson.build b/gnome-initial-setup/meson.build
index 75c44831..a23b160c 100644
--- a/gnome-initial-setup/meson.build
+++ b/gnome-initial-setup/meson.build
@@ -52,6 +52,7 @@ dependencies = [
     dependency ('webkit2gtk-4.0', version: '>= 2.26.0'),
     cheese_dep,
     cheese_gtk_dep,
+    pkgkit_dep,
     ibus_dep,
     libmalcontent_dep,
     libmalcontent_ui_dep,
diff --git a/gnome-initial-setup/pages/meson.build b/gnome-initial-setup/pages/meson.build
index 45f77d72..32305018 100644
--- a/gnome-initial-setup/pages/meson.build
+++ b/gnome-initial-setup/pages/meson.build
@@ -7,6 +7,7 @@ pages = [
    'privacy',
    'goa',
    'password',
+   'software',
    'summary',
    'welcome',
 ]
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 00000000..62fc90dc
--- /dev/null
+++ b/gnome-initial-setup/pages/software/gis-software-page.c
@@ -0,0 +1,271 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2016 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 <http://www.gnu.org/licenses/>.
+ *
+ * Written by:
+ *     Matthias Clasen <mclasen redhat com>
+ *     Kalev Lember <klember redhat com>
+ */
+
+/* SOFTWARE pages {{{1 */
+
+#define PAGE_ID "software"
+
+#include "config.h"
+#include "software-resources.h"
+#include "gis-software-page.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+#ifdef ENABLE_SOFTWARE_SOURCES
+#define I_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE
+#include <packagekit-glib2/packagekit.h>
+#endif
+
+#include "gis-page-header.h"
+
+struct _GisSoftwarePagePrivate
+{
+  GtkWidget *more_popover;
+  GtkWidget *proprietary_switch;
+  GtkWidget *header;
+
+  GSettings *software_settings;
+  guint enable_count;
+#ifdef ENABLE_SOFTWARE_SOURCES
+  PkTask *task;
+#endif
+};
+
+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);
+  GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_software_page_parent_class)->constructed (object);
+
+  priv->software_settings = g_settings_new ("org.gnome.software");
+#ifdef ENABLE_SOFTWARE_SOURCES
+  priv->task = pk_task_new ();
+#endif
+
+  gtk_switch_set_active (GTK_SWITCH (priv->proprietary_switch),
+                         g_settings_get_boolean (priv->software_settings, "show-nonfree-software"));
+
+  gis_page_set_complete (GIS_PAGE (page), TRUE);
+
+  gtk_widget_show (GTK_WIDGET (page));
+}
+
+static void
+gis_software_page_dispose (GObject *object)
+{
+  GisSoftwarePage *page = GIS_SOFTWARE_PAGE (object);
+  GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page);
+
+  g_clear_object (&priv->software_settings);
+#ifdef ENABLE_SOFTWARE_SOURCES
+  g_clear_object (&priv->task);
+#endif
+
+  G_OBJECT_CLASS (gis_software_page_parent_class)->dispose (object);
+}
+
+#ifdef ENABLE_SOFTWARE_SOURCES
+static void
+repo_enabled_cb (GObject      *source,
+                 GAsyncResult *res,
+                 gpointer      data)
+{
+  GisSoftwarePage *page = GIS_SOFTWARE_PAGE (data);
+  GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page);
+  g_autoptr(GError) error = NULL;
+  g_autoptr(PkResults) results = NULL;
+
+  results = pk_client_generic_finish (PK_CLIENT (source),
+                                      res,
+                                      &error);
+  if (!results)
+    {
+      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        return;
+#if PK_CHECK_VERSION(1,1,4)
+      if (!g_error_matches (error, PK_CLIENT_ERROR, 0xff + PK_ERROR_ENUM_REPO_ALREADY_SET))
+#endif
+        g_critical ("Failed to enable repository: %s", error->message);
+    }
+
+  priv->enable_count--;
+  if (priv->enable_count == 0)
+    {
+      /* all done */
+      gis_page_apply_complete (GIS_PAGE (page), TRUE);
+    }
+}
+#endif
+
+gboolean
+enable_repos (GisSoftwarePage *page,
+              gchar **repo_ids,
+              gboolean enable,
+              GCancellable *cancellable)
+{
+#ifdef ENABLE_SOFTWARE_SOURCES
+  GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page);
+  guint i;
+
+  /* enable each repo */
+  for (i = 0; repo_ids[i] != NULL; i++)
+    {
+      g_debug ("%s proprietary software source: %s", enable ? "Enable" : "Disable", repo_ids[i]);
+
+      priv->enable_count++;
+      pk_client_repo_enable_async (PK_CLIENT (priv->task),
+                                   repo_ids[i],
+                                   enable,
+                                   cancellable,
+                                   NULL, NULL,
+                                   repo_enabled_cb,
+                                   page);
+    }
+#endif
+
+  return TRUE;
+}
+
+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);
+  gboolean enable;
+  g_auto(GStrv) repo_ids = NULL;
+
+  enable = gtk_switch_get_active (GTK_SWITCH (priv->proprietary_switch));
+
+  g_debug ("%s proprietary software repositories", enable ? "Enable" : "Disable");
+
+  g_settings_set_boolean (priv->software_settings, "show-nonfree-software", enable);
+  /* don't prompt for the same thing again in gnome-software */
+  g_settings_set_boolean (priv->software_settings, "show-nonfree-prompt", FALSE);
+
+  repo_ids = g_settings_get_strv (priv->software_settings, "nonfree-sources");
+  if (repo_ids == NULL || g_strv_length (repo_ids) == 0)
+    return FALSE;
+
+  return enable_repos (page, repo_ids, enable, cancellable);
+}
+
+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);
+  g_autoptr(GString) str = g_string_new (NULL);
+
+  gis_page_set_title (GIS_PAGE (page), _("Software Repositories"));
+
+  g_string_append (str,
+                   /* TRANSLATORS: this is the third party repositories info bar. */
+                   _("Access additional software from selected third party sources."));
+  g_string_append (str, " ");
+  g_string_append (str,
+                   /* TRANSLATORS: this is the third party repositories info bar. */
+                   _("Some of this software is proprietary and therefore has restrictions on use, sharing, 
and access to source code."));
+  g_object_set (priv->header, "subtitle", str->str, NULL);
+}
+
+static gboolean
+activate_link (const char *label,
+               const char *uri,
+               gpointer    data)
+{
+  GisSoftwarePage *page = GIS_SOFTWARE_PAGE (data);
+  GisSoftwarePagePrivate *priv = gis_software_page_get_instance_private (page);
+
+  gtk_widget_show (priv->more_popover);
+
+  return TRUE;
+}
+
+static gboolean
+state_set (GtkSwitch *sw,
+           gboolean   state,
+           gpointer   data)
+{
+  gtk_switch_set_state (sw, state);
+
+  return TRUE;
+}
+
+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, more_popover);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisSoftwarePage, 
proprietary_switch);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisSoftwarePage, header);
+  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), activate_link);
+  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), state_set);
+
+  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;
+  object_class->dispose = gis_software_page_dispose;
+}
+
+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));
+}
+
+GisPage *
+gis_prepare_software_page (GisDriver *driver)
+{
+  GisPage *page = NULL;
+
+#ifdef ENABLE_SOFTWARE_SOURCES
+  GSettingsSchemaSource *source;
+  GSettingsSchema *schema;
+
+  source = g_settings_schema_source_get_default ();
+  schema = g_settings_schema_source_lookup (source, "org.gnome.software", TRUE);
+  if (schema != NULL && g_settings_schema_has_key (schema, "show-nonfree-software"))
+    page = g_object_new (GIS_TYPE_SOFTWARE_PAGE,
+                         "driver", driver,
+                         NULL);
+
+  if (schema != NULL)
+    g_settings_schema_unref (schema);
+#endif
+
+  return page;
+}
diff --git a/gnome-initial-setup/pages/software/gis-software-page.h 
b/gnome-initial-setup/pages/software/gis-software-page.h
new file mode 100644
index 00000000..8d152454
--- /dev/null
+++ b/gnome-initial-setup/pages/software/gis-software-page.h
@@ -0,0 +1,58 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.
+ *
+ * Written by:
+ *     Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __GIS_SOFTWARE_PAGE_H__
+#define __GIS_SOFTWARE_PAGE_H__
+
+#include <glib-object.h>
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+#define GIS_TYPE_SOFTWARE_PAGE               (gis_software_page_get_type ())
+#define GIS_SOFTWARE_PAGE(obj)                           (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GIS_TYPE_SOFTWARE_PAGE, GisSoftwarePage))
+#define GIS_SOFTWARE_PAGE_CLASS(klass)                   (G_TYPE_CHECK_CLASS_CAST ((klass),  
GIS_TYPE_SOFTWARE_PAGE, GisSoftwarePageClass))
+#define GIS_IS_SOFTWARE_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIS_TYPE_SOFTWARE_PAGE))
+#define GIS_IS_SOFTWARE_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GIS_TYPE_SOFTWARE_PAGE))
+#define GIS_SOFTWARE_PAGE_GET_CLASS(obj)                 (G_TYPE_INSTANCE_GET_CLASS ((obj),  
GIS_TYPE_SOFTWARE_PAGE, GisSoftwarePageClass))
+
+typedef struct _GisSoftwarePage        GisSoftwarePage;
+typedef struct _GisSoftwarePageClass   GisSoftwarePageClass;
+
+struct _GisSoftwarePage
+{
+  GisPage parent;
+};
+
+struct _GisSoftwarePageClass
+{
+  GisPageClass parent_class;
+};
+
+GType gis_software_page_get_type (void);
+
+GisPage *gis_prepare_software_page (GisDriver *driver);
+
+G_END_DECLS
+
+#endif /* __GIS_SOFTWARE_PAGE_H__ */
+
diff --git a/gnome-initial-setup/pages/software/gis-software-page.ui 
b/gnome-initial-setup/pages/software/gis-software-page.ui
new file mode 100644
index 00000000..0e669b34
--- /dev/null
+++ b/gnome-initial-setup/pages/software/gis-software-page.ui
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="GisSoftwarePage" parent="GisPage">
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="halign">center</property>
+        <property name="valign">fill</property>
+        <child>
+          <object class="GisPageHeader" id="header">
+            <property name="visible">True</property>
+            <property name="margin_top">24</property>
+            <property name="title" translatable="yes">Additional Software Repositories</property>
+            <property name="icon_name">folder-download-symbolic</property>
+            <property name="show_icon" bind-source="GisSoftwarePage" bind-property="small-screen" 
bind-flags="invert-boolean|sync-create"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="more_label">
+            <property name="visible">True</property>
+            <property name="margin-top">15</property>
+            <property name="halign">center</property>
+            <property name="max-width-chars">50</property>
+            <property name="use-markup">True</property>
+            <property name="label" translatable="yes">&lt;a href="more"&gt;Find out 
moreā€¦&lt;/a&gt;</property>
+            <signal name="activate-link" handler="activate_link"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="margin-top">40</property>
+            <property name="orientation">horizontal</property>
+            <property name="homogeneous">True</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Third Party Repositories</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="proprietary_switch">
+                <property name="halign">end</property>
+                <property name="visible">True</property>
+                <signal name="state-set" handler="state_set"/>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
+            <property name="valign">end</property>
+            <property name="halign">center</property>
+            <property name="spacing">64</property>
+            <property name="margin_bottom">64</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="pixel_size">64</property>
+                <property name="opacity">0.5</property>
+                <property name="icon_name">web-browser-symbolic</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+            </child>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="pixel_size">64</property>
+                <property name="opacity">0.5</property>
+                <property name="icon_name">text-editor-symbolic</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+            </child>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="pixel_size">64</property>
+                <property name="opacity">0.5</property>
+                <property name="icon_name">help-faq-symbolic</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+            </child>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="pixel_size">64</property>
+                <property name="opacity">0.5</property>
+                <property name="icon_name">input-gaming-symbolic</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="pack-type">end</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </template>
+  <object class="GtkPopover" id="more_popover">
+    <property name="relative-to">more_label</property>
+    <property name="position">bottom</property>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">1</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="max-width-chars">40</property>
+            <property name="margin-top">20</property>
+            <property name="margin-start">20</property>
+            <property name="margin-end">20</property>
+            <property name="margin-bottom">10</property>
+            <property name="wrap">True</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Proprietary software typically has restrictions on how 
it can be used and on access to source code. This prevents anyone but the software owner from inspecting, 
improving or learning from its code.</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="max-width-chars">40</property>
+            <property name="wrap">True</property>
+            <property name="xalign">0</property>
+            <property name="margin-start">20</property>
+            <property name="margin-end">20</property>
+            <property name="margin-bottom">20</property>
+            <property name="label" translatable="yes">In contrast, Free Software can be freely run, copied, 
distributed, studied and modified.</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/pages/software/meson.build b/gnome-initial-setup/pages/software/meson.build
new file mode 100644
index 00000000..c464ec76
--- /dev/null
+++ b/gnome-initial-setup/pages/software/meson.build
@@ -0,0 +1,10 @@
+sources += gnome.compile_resources(
+    'software-resources',
+    files('software.gresource.xml'),
+    c_name: 'software'
+)
+
+sources += files(
+    'gis-software-page.c',
+    'gis-software-page.h'
+)
diff --git a/gnome-initial-setup/pages/software/software.gresource.xml 
b/gnome-initial-setup/pages/software/software.gresource.xml
new file mode 100644
index 00000000..1f8384c0
--- /dev/null
+++ b/gnome-initial-setup/pages/software/software.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/initial-setup">
+    <file preprocess="xml-stripblanks" alias="gis-software-page.ui">gis-software-page.ui</file>
+  </gresource>
+</gresources>
diff --git a/meson.build b/meson.build
index 6f129697..7ca342c8 100644
--- a/meson.build
+++ b/meson.build
@@ -54,6 +54,12 @@ cheese_gtk_dep = dependency ('cheese-gtk',
                          required: get_option('cheese'))
 conf.set('HAVE_CHEESE', cheese_dep.found() and cheese_gtk_dep.found())
 
+# Needed for the 'software' page
+pkgkit_dep = dependency ('packagekit-glib2',
+                         version: '>= 1.1.4',
+                         required: get_option('software-sources'))
+conf.set('ENABLE_SOFTWARE_SOURCES', pkgkit_dep.found())
+
 # Needed for the 'keyboard' page
 ibus_dep = dependency ('ibus-1.0',
                        version: '>= 1.4.99',
diff --git a/meson_options.txt b/meson_options.txt
index be386b59..ebe92a65 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -9,6 +9,12 @@ option('cheese',
        value: 'auto'
 )
 
+option('software-sources',
+       description: 'enable the Software Sources page',
+       type: 'feature',
+       value: 'auto'
+)
+
 option('ibus',
        description: 'enable support for IBus',
        type: 'feature',
diff --git a/po/POTFILES.in b/po/POTFILES.in
index cda56736..cf4eceed 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -32,6 +32,8 @@ gnome-initial-setup/pages/password/gis-password-page.ui
 gnome-initial-setup/pages/password/pw-utils.c
 gnome-initial-setup/pages/privacy/gis-privacy-page.c
 gnome-initial-setup/pages/privacy/gis-privacy-page.ui
+gnome-initial-setup/pages/software/gis-software-page.c
+gnome-initial-setup/pages/software/gis-software-page.ui
 gnome-initial-setup/pages/summary/gis-summary-page.c
 gnome-initial-setup/pages/summary/gis-summary-page.ui
 gnome-initial-setup/pages/timezone/gis-timezone-page.c


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]