[gnome-control-center] info: Add panel chooser, graphics tab



commit c32ce5ee9d9e763f3ca780a464d7a19d7bfee3b7
Author: Colin Walters <walters verbum org>
Date:   Thu Feb 10 14:13:28 2011 -0500

    info: Add panel chooser, graphics tab
    
    This is work towards implementing
    http://live.gnome.org/Design/SystemSettings/SystemInformation
    
    Implemented in this patch is some cleanup and parts of the
    Graphics tab.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=642068

 panels/info/Makefile.am     |    1 +
 panels/info/cc-info-panel.c |  372 +++++++++++++++-----
 panels/info/info.ui         |  834 +++++++++++++++++++++++++++----------------
 3 files changed, 822 insertions(+), 385 deletions(-)
---
diff --git a/panels/info/Makefile.am b/panels/info/Makefile.am
index cc1733c..c359069 100644
--- a/panels/info/Makefile.am
+++ b/panels/info/Makefile.am
@@ -8,6 +8,7 @@ INCLUDES = 						\
 	-DGNOMELOCALEDIR="\"$(datadir)/locale\""	\
 	-DGNOMECC_DATA_DIR="\"$(pkgdatadir)\""		\
 	-DDATADIR="\"$(datadir)\""			\
+	-DLIBEXECDIR="\"$(libexecdir)\""		\
 	$(NULL)
 
 ccpanelsdir = $(PANELS_DIR)
diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c
index 507816e..4c8ed3d 100644
--- a/panels/info/cc-info-panel.c
+++ b/panels/info/cc-info-panel.c
@@ -33,6 +33,9 @@
 #include <glibtop/mem.h>
 #include <glibtop/sysinfo.h>
 
+#define GNOME_SESSION_MANAGER_SCHEMA        "org.gnome.desktop.session"
+#define KEY_SESSION_NAME          "session-name"
+
 #define WID(b, w) (GtkWidget *) gtk_builder_get_object (b, w)
 
 G_DEFINE_DYNAMIC_TYPE (CcInfoPanel, cc_info_panel, CC_TYPE_PANEL)
@@ -46,6 +49,10 @@ struct _CcInfoPanelPrivate
   char          *gnome_version;
   char          *gnome_distributor;
   char          *gnome_date;
+
+  GDBusConnection     *session_bus;
+  GDBusProxy    *session_manager_proxy;
+  GSettings     *session_settings;
 };
 
 typedef struct
@@ -162,6 +169,68 @@ load_gnome_version (char **version,
   return ret;
 };
 
+typedef struct
+{
+  char *regex;
+  char *replacement;
+} ReplaceStrings;
+
+static char *
+prettify_info (const char *info)
+{
+  char *pretty;
+  int   i;
+  static const ReplaceStrings rs[] = {
+    { "Mesa DRI ", ""},
+    { "Intel[(]R[)]", "Intel<sup>\302\256</sup>"},
+    { "Core[(]TM[)]", "Core<sup>\342\204\242</sup>"},
+    { "Atom[(]TM[)]", "Atom<sup>\342\204\242</sup>"},
+    { "Graphics Controller", "Graphics"},
+  };
+
+  pretty = g_markup_escape_text (info, -1);
+
+  for (i = 0; i < G_N_ELEMENTS (rs); i++)
+    {
+      GError *error;
+      GRegex *re;
+      char   *new;
+
+      error = NULL;
+
+      re = g_regex_new (rs[i].regex, 0, 0, &error);
+      if (re == NULL)
+        {
+          g_warning ("Error building regex: %s", error->message);
+          g_error_free (error);
+          continue;
+        }
+
+      new = g_regex_replace_literal (re,
+                                     pretty,
+                                     -1,
+                                     0,
+                                     rs[i].replacement,
+                                     0,
+                                     &error);
+
+      g_regex_unref (re);
+
+      if (error != NULL)
+        {
+          g_warning ("Error replacing %s: %s", rs[i].regex, error->message);
+          g_error_free (error);
+          continue;
+        }
+
+      g_free (pretty);
+      pretty = new;
+    }
+
+  return pretty;
+}
+
+
 static char *
 get_graphics_info_lspci (void)
 {
@@ -169,6 +238,7 @@ get_graphics_info_lspci (void)
   GRegex     *re;
   GMatchInfo *match_info;
   char       *output;
+  char       *result;
   GString    *info;
 
   info = g_string_new (NULL);
@@ -207,8 +277,10 @@ get_graphics_info_lspci (void)
 
  out:
   g_free (output);
+  result = prettify_info (info->str);
+  g_string_free (info, TRUE);
 
-  return g_string_free (info, FALSE);
+  return result;
 }
 
 static char *
@@ -218,6 +290,7 @@ get_graphics_info_glxinfo (void)
   GRegex     *re;
   GMatchInfo *match_info;
   char       *output;
+  char       *result;
   GString    *info;
 
   info = g_string_new (NULL);
@@ -255,83 +328,81 @@ get_graphics_info_glxinfo (void)
 
  out:
   g_free (output);
+  result = prettify_info (info->str);
+  g_string_free (info, TRUE);
 
-  return g_string_free (info, FALSE);
+  return result;
 }
 
-typedef struct
-{
-  char *regex;
-  char *replacement;
-} ReplaceStrings;
-
 static char *
-prettify_info (const char *info)
+get_graphics_info (void)
 {
-  char *pretty;
-  int   i;
-  static const ReplaceStrings rs[] = {
-    { "Mesa DRI ", ""},
-    { "Intel[(]R[)]", "Intel<sup>\302\256</sup>"},
-    { "Core[(]TM[)]", "Core<sup>\342\204\242</sup>"},
-    { "Atom[(]TM[)]", "Atom<sup>\342\204\242</sup>"},
-    { "Graphics Controller", "Graphics"},
-  };
+  gchar *info;
 
-  pretty = g_markup_escape_text (info, -1);
-
-  for (i = 0; i < G_N_ELEMENTS (rs); i++)
-    {
-      GError *error;
-      GRegex *re;
-      char   *new;
-
-      error = NULL;
+  info = get_graphics_info_glxinfo ();
+  if (info == NULL)
+    info = get_graphics_info_lspci ();
 
-      re = g_regex_new (rs[i].regex, 0, 0, &error);
-      if (re == NULL)
-        {
-          g_warning ("Error building regex: %s", error->message);
-          g_error_free (error);
-          continue;
-        }
+  return info;
+}
 
-      new = g_regex_replace_literal (re,
-                                     pretty,
-                                     -1,
-                                     0,
-                                     rs[i].replacement,
-                                     0,
-                                     &error);
+static gboolean
+get_is_graphics_accelerated (void)
+{
+  GError *error = NULL;
+  gchar *is_accelerated_binary;
+  gchar *argv[2];
+  gint estatus;
 
-      g_regex_unref (re);
+  is_accelerated_binary = g_build_filename (LIBEXECDIR, "gnome-session-is-accelerated", NULL);
 
-      if (error != NULL)
-        {
-          g_warning ("Error replacing %s: %s", rs[i].regex, error->message);
-          g_error_free (error);
-          continue;
-        }
+  error = NULL;
+  argv[0] = is_accelerated_binary;
+  argv[G_N_ELEMENTS(argv)] = NULL;
 
-      g_free (pretty);
-      pretty = new;
-    }
+  g_spawn_sync (NULL, argv, NULL, G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
+                NULL, NULL, NULL, NULL, &estatus, &error);
+  if (error != NULL || estatus != 0)
+    return FALSE;
+  else
+    return TRUE;
 
-  return pretty;
 }
 
 static char *
-get_graphics_info (void)
+get_graphics_experience (CcInfoPanel  *self)
 {
-  char *info;
+  GError *error = NULL;
+  GVariant *reply, *reply_bool;
+  gboolean is_fallback;
+  gchar *experience_str;
+
+  if (!(reply = g_dbus_connection_call_sync (self->priv->session_bus,
+                                             "org.gnome.SessionManager",
+                                             "/org/gnome/SessionManager",
+                                             "org.freedesktop.DBus.Properties",
+                                             "Get",
+                                             g_variant_new ("(ss)", "org.gnome.SessionManager", "fallback"),
+                                             (GVariantType*)"v",
+                                             0,
+                                             -1,
+                                             NULL, &error)))
+    {
+      g_warning ("Failed to get fallback mode: %s", error->message);
+      g_clear_error (&error);
+      return NULL;
+    }
 
-  info = get_graphics_info_glxinfo ();
-  if (info == NULL)
-    info = get_graphics_info_lspci ();
+  g_variant_get (reply, "v", &reply_bool);
+  is_fallback = g_variant_get_boolean (reply_bool);
+  experience_str = g_strdup (is_fallback ? _("Fallback") : _("Default"));
+  g_variant_unref (reply_bool);
+  g_variant_unref (reply);
 
-  return info;
+  return experience_str;
 }
 
+
 static void
 cc_info_panel_get_property (GObject    *object,
                             guint       property_id,
@@ -602,32 +673,141 @@ get_cpu_info (const glibtop_sysinfo *info)
 }
 
 static void
-cc_info_panel_init (CcInfoPanel *self)
+on_section_changed (GtkTreeSelection  *selection,
+                    gpointer           data)
 {
-  GError     *error;
-  GtkWidget  *widget;
-  gboolean    res;
-  glibtop_mem mem;
-  const glibtop_sysinfo *info;
-  char       *text;
-  char       *pretty;
+  CcInfoPanel *self = CC_INFO_PANEL (data);
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  GtkTreePath *path;
+  gint *indices;
+  int index;
 
-  self->priv = INFO_PANEL_PRIVATE (self);
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+    return;
 
-  self->priv->builder = gtk_builder_new ();
+  path = gtk_tree_model_get_path (model, &iter);
 
-  error = NULL;
-  gtk_builder_add_from_file (self->priv->builder,
-                             GNOMECC_UI_DIR "/info.ui",
-                             &error);
+  indices = gtk_tree_path_get_indices (path);
+  index = indices[0];
 
-  if (error != NULL)
+  if (index >= 0)
     {
-      g_warning ("Could not load interface file: %s", error->message);
-      g_error_free (error);
-      return;
+      g_object_set (G_OBJECT (WID (self->priv->builder, "notebook")),
+                    "page", index, NULL);
     }
 
+  gtk_tree_path_free (path);
+}
+
+static gboolean
+switch_fallback_get_mapping (GValue    *value,
+                             GVariant  *variant,
+                             gpointer   data)
+{
+  const char *setting = g_variant_get_string (variant, NULL);
+  g_value_set_boolean (value, strcmp (setting, "gnome") != 0);
+  return TRUE;
+}
+
+static GVariant *
+switch_fallback_set_mapping (const GValue        *value,
+                             const GVariantType  *expected_type,
+                             gpointer             data)
+{
+  gboolean is_set = g_value_get_boolean (value);
+  return g_variant_new_string (is_set ? "gnome-fallback" : "gnome");
+}
+
+static void
+info_panel_setup_graphics (CcInfoPanel  *self)
+{
+  GtkWidget *widget;
+  GtkSwitch *sw;
+  gchar *text;
+  
+  text = get_graphics_info ();
+  widget = WID (self->priv->builder, "graphics_chipset_label");
+  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
+  g_free (text);
+
+  text = NULL;
+  widget = WID (self->priv->builder, "graphics_driver_label");
+  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
+  g_free (text);
+
+  text = get_graphics_experience (self);
+  widget = WID (self->priv->builder, "graphics_experience_label");
+  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
+  g_free (text);
+
+  widget = WID (self->priv->builder, "graphics_fallback_switch_box");
+  sw = GTK_SWITCH (gtk_switch_new ());
+  g_settings_bind_with_mapping (self->priv->session_settings, KEY_SESSION_NAME,
+                                sw, "active", 0,
+                                switch_fallback_get_mapping,
+                                switch_fallback_set_mapping, self, NULL);
+  gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (sw));
+  gtk_widget_show_all (GTK_WIDGET (sw));
+}
+
+static void
+info_panel_setup_selector (CcInfoPanel  *self)
+{
+  GtkTreeView *view;
+  GtkListStore *model;
+  GtkTreeSelection *selection;
+  GtkTreeViewColumn *column;
+  GtkCellRenderer *renderer;
+  GtkTreeIter iter;
+  int section_name_column = 0;
+
+  view = GTK_TREE_VIEW (WID (self->priv->builder, "overview_treeview"));
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+
+  model = gtk_list_store_new (1, G_TYPE_STRING);
+  gtk_tree_view_set_model (view, GTK_TREE_MODEL (model));
+  g_object_unref (model);
+
+  renderer = gtk_cell_renderer_text_new ();
+  g_object_set (renderer,
+                "width-chars", 20,
+                "ellipsize", PANGO_ELLIPSIZE_END,
+                NULL);
+  column = gtk_tree_view_column_new_with_attributes (_("Section"),
+                                                     renderer,
+                                                     "text", section_name_column,
+                                                     NULL);
+  gtk_tree_view_append_column (view, column);
+
+
+  gtk_list_store_append (model, &iter);
+  gtk_list_store_set (model, &iter, section_name_column,
+                      _("Overview"),
+                      -1);
+  gtk_tree_selection_select_iter (selection, &iter);
+
+  gtk_list_store_append (model, &iter);
+  gtk_list_store_set (model, &iter, section_name_column,
+                      _("Graphics"),
+                      -1);
+
+  g_signal_connect (selection, "changed",
+                    G_CALLBACK (on_section_changed), self);
+  on_section_changed (selection, self);
+
+  gtk_widget_show_all (GTK_WIDGET (view));
+}
+
+static void
+info_panel_setup_overview (CcInfoPanel  *self)
+{
+  GtkWidget  *widget;
+  gboolean    res;
+  glibtop_mem mem;
+  const glibtop_sysinfo *info;
+  char       *text;
+
   res = load_gnome_version (&self->priv->gnome_version,
                             &self->priv->gnome_distributor,
                             &self->priv->gnome_date);
@@ -649,9 +829,7 @@ cc_info_panel_init (CcInfoPanel *self)
 
   widget = WID (self->priv->builder, "processor_label");
   text = get_cpu_info (info);
-  pretty = prettify_info (text);
-  gtk_label_set_markup (GTK_LABEL (widget), pretty ? pretty : "");
-  g_free (pretty);
+  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
   g_free (text);
 
   widget = WID (self->priv->builder, "os_type_label");
@@ -665,16 +843,44 @@ cc_info_panel_init (CcInfoPanel *self)
   g_free (text);
 
   text = get_graphics_info ();
-  pretty = prettify_info (text);
   widget = WID (self->priv->builder, "graphics_label");
-  gtk_label_set_markup (GTK_LABEL (widget), pretty ? pretty : "");
+  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
   g_free (text);
-  g_free (pretty);
 
-  widget = WID (self->priv->builder, "info_vbox");
+  widget = WID (self->priv->builder, "info_paned");
   gtk_widget_reparent (widget, (GtkWidget *) self);
 }
 
+static void
+cc_info_panel_init (CcInfoPanel *self)
+{
+  GError *error = NULL;
+
+  self->priv = INFO_PANEL_PRIVATE (self);
+
+  self->priv->builder = gtk_builder_new ();
+
+  self->priv->session_settings = g_settings_new (GNOME_SESSION_MANAGER_SCHEMA);
+
+  self->priv->session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+  g_assert (self->priv->session_bus);
+
+  gtk_builder_add_from_file (self->priv->builder,
+                             GNOMECC_UI_DIR "/info.ui",
+                             &error);
+
+  if (error != NULL)
+    {
+      g_warning ("Could not load interface file: %s", error->message);
+      g_error_free (error);
+      return;
+    }
+
+  info_panel_setup_selector (self);
+  info_panel_setup_overview (self);
+  info_panel_setup_graphics (self);
+}
+
 void
 cc_info_panel_register (GIOModule *module)
 {
diff --git a/panels/info/info.ui b/panels/info/info.ui
index 66db5ee..f07eb63 100644
--- a/panels/info/info.ui
+++ b/panels/info/info.ui
@@ -4,351 +4,581 @@
   <object class="GtkWindow" id="window1">
     <property name="can_focus">False</property>
     <child>
-      <object class="GtkVBox" id="info_vbox">
+      <object class="GtkHPaned" id="info_paned">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="border_width">10</property>
-        <property name="spacing">12</property>
+        <property name="can_focus">True</property>
         <child>
-          <object class="GtkAlignment" id="alignment1">
+          <object class="GtkHBox" id="hbox1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="top_padding">20</property>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkTreeView" id="overview_treeview">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">18</property>
+                <property name="can_focus">True</property>
+                <property name="headers_visible">False</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection1"/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="resize">False</property>
+            <property name="shrink">True</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkVBox" id="info_vbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">10</property>
+            <property name="spacing">12</property>
+            <child>
+              <object class="GtkNotebook" id="notebook">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="show_tabs">False</property>
+                <property name="show_border">False</property>
                 <child>
-                  <object class="GtkImage" id="system_image">
+                  <object class="GtkAlignment" id="overview_container">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="pixbuf">GnomeLogoVerticalMedium.svg</property>
+                    <property name="top_padding">20</property>
+                    <child>
+                      <object class="GtkVBox" id="vbox1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">18</property>
+                        <child>
+                          <object class="GtkImage" id="system_image">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="pixbuf">GnomeLogoVerticalMedium.svg</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="version_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Version 3.0</property>
+                            <property name="selectable">True</property>
+                            <attributes>
+                              <attribute name="scale" value="1.25"/>
+                            </attributes>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkTable" id="table1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="n_rows">6</property>
+                            <property name="n_columns">3</property>
+                            <property name="column_spacing">12</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkLabel" id="label4">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Device name:</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label5">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Memory:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label6">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Processor:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label7">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">OS type:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label8">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Disk:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" id="entry1">
+                                <property name="can_focus">True</property>
+                                <property name="no_show_all">True</property>
+                                <property name="invisible_char">â??</property>
+                                <property name="width_chars">12</property>
+                                <property name="invisible_char_set">True</property>
+                                <property name="caps_lock_warning">False</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="memory_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="processor_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="os_type_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="disk_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label9">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label10">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label11">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label12">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label13">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label14">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Graphics:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label15">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="graphics_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
-                <child>
-                  <object class="GtkLabel" id="version_label">
+                <child type="tab">
+                  <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label">Version 3.0</property>
-                    <property name="selectable">True</property>
-                    <attributes>
-                      <attribute name="scale" value="1.25"/>
-                    </attributes>
+                    <property name="label" translatable="yes">page 1</property>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkTable" id="table1">
+                  <object class="GtkHBox" id="graphics_detail_container">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="n_rows">6</property>
-                    <property name="n_columns">3</property>
-                    <property name="column_spacing">12</property>
-                    <property name="row_spacing">5</property>
-                    <child>
-                      <object class="GtkLabel" id="label1">
-                        <property name="can_focus">False</property>
-                        <property name="no_show_all">True</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Device name:</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label2">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Memory:</property>
-                      </object>
-                      <packing>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label3">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Processor:</property>
-                      </object>
-                      <packing>
-                        <property name="top_attach">2</property>
-                        <property name="bottom_attach">3</property>
-                      </packing>
-                    </child>
                     <child>
-                      <object class="GtkLabel" id="label4">
+                      <object class="GtkAlignment" id="alignment4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">OS type:</property>
-                      </object>
-                      <packing>
-                        <property name="top_attach">4</property>
-                        <property name="bottom_attach">5</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label5">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Disk:</property>
-                      </object>
-                      <packing>
-                        <property name="top_attach">5</property>
-                        <property name="bottom_attach">6</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="entry1">
-                        <property name="can_focus">True</property>
-                        <property name="no_show_all">True</property>
-                        <property name="invisible_char">â??</property>
-                        <property name="width_chars">12</property>
-                        <property name="caps_lock_warning">False</property>
+                        <property name="top_padding">20</property>
+                        <child>
+                          <object class="GtkTable" id="table2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">center</property>
+                            <property name="valign">center</property>
+                            <property name="n_rows">4</property>
+                            <property name="n_columns">3</property>
+                            <property name="column_spacing">12</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkLabel" id="label17">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Chipset:</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label18">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Driver:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label19">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Experience:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="graphics_chipset_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="graphics_driver_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="graphics_experience_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Unknown</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label22">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label23">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label24">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label">    </property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label16">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">1</property>
+                                <property name="label" translatable="yes">Always Use Fallback:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="graphics_fallback_switch_box">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">center</property>
+                                <property name="valign">center</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                        </child>
                       </object>
                       <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="memory_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label">Unknown</property>
-                        <property name="selectable">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="processor_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label">Unknown</property>
-                        <property name="selectable">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="top_attach">2</property>
-                        <property name="bottom_attach">3</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="os_type_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label">Unknown</property>
-                        <property name="selectable">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="top_attach">4</property>
-                        <property name="bottom_attach">5</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="disk_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label">Unknown</property>
-                        <property name="selectable">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="top_attach">5</property>
-                        <property name="bottom_attach">6</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label6">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label7">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label8">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">2</property>
-                        <property name="bottom_attach">3</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label9">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">4</property>
-                        <property name="bottom_attach">5</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label10">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">5</property>
-                        <property name="bottom_attach">6</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label11">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Graphics:</property>
-                      </object>
-                      <packing>
-                        <property name="top_attach">3</property>
-                        <property name="bottom_attach">4</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label12">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">    </property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">3</property>
-                        <property name="bottom_attach">4</property>
-                        <property name="x_options">GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="graphics_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label">Unknown</property>
-                        <property name="selectable">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="top_attach">3</property>
-                        <property name="bottom_attach">4</property>
-                      </packing>
+                      <placeholder/>
                     </child>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">page 2</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">page 3</property>
+                  </object>
+                  <packing>
                     <property name="position">2</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
               </object>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkHButtonBox" id="hbuttonbox1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="button1">
-                <property name="label" translatable="yes">Update Available</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="no_show_all">True</property>
-                <property name="use_action_appearance">False</property>
-              </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
-                <property name="secondary">True</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="more_info_button">
-                <property name="label" translatable="yes">More Info</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="no_show_all">True</property>
-                <property name="use_action_appearance">False</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">1</property>
+            <property name="resize">False</property>
+            <property name="shrink">True</property>
           </packing>
         </child>
       </object>



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