[PATCH] Add a gradient background to spoke headers (mizmo, clumens).

Chris Lumens clumens at redhat.com
Tue Dec 11 22:11:55 UTC 2012


The idea here is that by adding a gradient up top, the "Done" button looks
more like it belongs with the header than with the widgets down in the
spoke.  It also subtly makes the spoke look like a subpart of the hub.

Adding this required adding an additional internal widget, which means also
changing all existing glade files to include this internal widget.  Make sure
to build new glade support and install locally (or use the proper makefile
targets) before editing.
---
 data/pixmaps/anaconda_spoke_header.png        | Bin 0 -> 185 bytes
 pyanaconda/ui/gui/hubs/progress.glade         |  14 +++++---
 pyanaconda/ui/gui/hubs/summary.glade          |  14 +++++---
 pyanaconda/ui/gui/spokes/custom.glade         |  28 +++++++++-------
 pyanaconda/ui/gui/spokes/datetime_spoke.glade |  20 +++++++-----
 pyanaconda/ui/gui/spokes/keyboard.glade       |  10 ++++--
 pyanaconda/ui/gui/spokes/network.glade        |  30 +++++++++++-------
 pyanaconda/ui/gui/spokes/password.glade       |  16 ++++++----
 pyanaconda/ui/gui/spokes/software.glade       |  10 ++++--
 pyanaconda/ui/gui/spokes/source.glade         |  10 ++++--
 pyanaconda/ui/gui/spokes/storage.glade        |  10 ++++--
 pyanaconda/ui/gui/spokes/welcome.glade        |  44 +++++++++++++++-----------
 scripts/makeupdates                           |   2 ++
 widgets/glade/AnacondaWidgets.xml             |  12 +++++--
 widgets/src/BaseWindow.c                      |  26 +++++++++++++--
 widgets/src/BaseWindow.h                      |   1 +
 widgets/src/SpokeWindow.c                     |  34 +++++++++++++++++++-
 17 files changed, 198 insertions(+), 83 deletions(-)
 create mode 100644 data/pixmaps/anaconda_spoke_header.png

diff --git a/data/pixmaps/anaconda_spoke_header.png b/data/pixmaps/anaconda_spoke_header.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1feefc063e86054e51c0cc2142291b529146ba3
GIT binary patch
literal 185
zcmeAS at N?(olHy`uVBq!ia0vp^j6m$d!3HE98sfu%6kC$Fy9>jA5L~c#`DCC7XMsm#
zF;K^K5N34Jm|X!BWH0gbb!ET9!_8>L&5=-O1Qc at fba4!kxV-h8A=d!~0hf#C at BA;j
zr+C#YD%V_Wl7I`R*h at PbiMEan3@K+c&cq7OdBM}K$2ehc<MnyvAKq`}XPq+Bb?epD
Z%yTd3&SigHco1kJgQu&X%Q~loCIFcrI=KJ<

literal 0
HcmV?d00001

diff --git a/pyanaconda/ui/gui/hubs/progress.glade b/pyanaconda/ui/gui/hubs/progress.glade
index 37bd0bb..11e29f5 100644
--- a/pyanaconda/ui/gui/hubs/progress.glade
+++ b/pyanaconda/ui/gui/hubs/progress.glade
@@ -11,11 +11,15 @@
       <object class="GtkBox" id="AnacondaHubWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaHubWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <child>
-              <placeholder/>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaHubWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaHubWindow-nav_area1">
+                <property name="can_focus">False</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
             </child>
           </object>
           <packing>
diff --git a/pyanaconda/ui/gui/hubs/summary.glade b/pyanaconda/ui/gui/hubs/summary.glade
index 2fd4065..36b7aef 100644
--- a/pyanaconda/ui/gui/hubs/summary.glade
+++ b/pyanaconda/ui/gui/hubs/summary.glade
@@ -13,11 +13,15 @@
       <object class="GtkBox" id="AnacondaHubWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaHubWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <child>
-              <placeholder/>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaHubWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaHubWindow-nav_area1">
+                <property name="can_focus">False</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
             </child>
           </object>
           <packing>
diff --git a/pyanaconda/ui/gui/spokes/custom.glade b/pyanaconda/ui/gui/spokes/custom.glade
index 67f41e5..9bf53d5 100644
--- a/pyanaconda/ui/gui/spokes/custom.glade
+++ b/pyanaconda/ui/gui/spokes/custom.glade
@@ -326,18 +326,22 @@ use.  Try something else?</property>
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <property name="margin_left">6</property>
-            <property name="margin_right">6</property>
-            <property name="margin_top">6</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
+        <child internal-child="nav_box">
+           <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+              <child internal-child="nav_area">
+                <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                  <property name="can_focus">False</property>
+                  <property name="margin_left">6</property>
+                  <property name="margin_right">6</property>
+                  <property name="margin_top">6</property>
+                </object>
+              </child>
+           </object>
+           <packing>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+             <property name="position">0</property>
+           </packing>
         </child>
         <child internal-child="alignment">
           <object class="GtkAlignment" id="AnacondaSpokeWindow-alignment1">
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.glade b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
index ecff051..d302645 100644
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.glade
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
@@ -35,14 +35,18 @@
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <property name="margin_left">6</property>
-            <property name="margin_right">6</property>
-            <property name="margin_top">6</property>
-            <property name="n_rows">2</property>
-            <property name="n_columns">2</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+                <property name="margin_left">6</property>
+                <property name="margin_right">6</property>
+                <property name="margin_top">6</property>
+                <property name="n_rows">2</property>
+                <property name="n_columns">2</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/keyboard.glade b/pyanaconda/ui/gui/spokes/keyboard.glade
index 5635a4b..7da18db 100644
--- a/pyanaconda/ui/gui/spokes/keyboard.glade
+++ b/pyanaconda/ui/gui/spokes/keyboard.glade
@@ -185,9 +185,13 @@
       <object class="GtkBox" id="AnacondaSpokeWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/network.glade b/pyanaconda/ui/gui/spokes/network.glade
index 27afea8..5fc0613 100644
--- a/pyanaconda/ui/gui/spokes/network.glade
+++ b/pyanaconda/ui/gui/spokes/network.glade
@@ -41,14 +41,18 @@
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area5">
-            <property name="can_focus">False</property>
-            <property name="margin_left">6</property>
-            <property name="margin_right">6</property>
-            <property name="margin_top">6</property>
-            <child>
-              <placeholder/>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaStandaloneWindow-nav_box5">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area5">
+                <property name="can_focus">False</property>
+                <property name="margin_left">6</property>
+                <property name="margin_right">6</property>
+                <property name="margin_top">6</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
             </child>
           </object>
           <packing>
@@ -109,9 +113,13 @@ updates available for you.</property>
       <object class="GtkBox" id="AnacondaSpokeWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/password.glade b/pyanaconda/ui/gui/spokes/password.glade
index 31f0740..043f0ad 100644
--- a/pyanaconda/ui/gui/spokes/password.glade
+++ b/pyanaconda/ui/gui/spokes/password.glade
@@ -13,12 +13,16 @@
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <property name="margin_left">6</property>
-            <property name="margin_right">6</property>
-            <property name="margin_top">6</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+                <property name="margin_left">6</property>
+                <property name="margin_right">6</property>
+                <property name="margin_top">6</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/software.glade b/pyanaconda/ui/gui/spokes/software.glade
index 4f049fb..676c14d 100644
--- a/pyanaconda/ui/gui/spokes/software.glade
+++ b/pyanaconda/ui/gui/spokes/software.glade
@@ -37,9 +37,13 @@
         <property name="hexpand">True</property>
         <property name="vexpand">True</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/source.glade b/pyanaconda/ui/gui/spokes/source.glade
index f80f2f8..07fc23d 100644
--- a/pyanaconda/ui/gui/spokes/source.glade
+++ b/pyanaconda/ui/gui/spokes/source.glade
@@ -830,9 +830,13 @@ TeXlive 2012 repository</col>
       <object class="GtkBox" id="AnacondaSpokeWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/storage.glade b/pyanaconda/ui/gui/spokes/storage.glade
index 68461f7..8d7c470 100644
--- a/pyanaconda/ui/gui/spokes/storage.glade
+++ b/pyanaconda/ui/gui/spokes/storage.glade
@@ -851,9 +851,13 @@
         <property name="vexpand">True</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/welcome.glade b/pyanaconda/ui/gui/spokes/welcome.glade
index f0c63d9..0dfbb3a 100644
--- a/pyanaconda/ui/gui/spokes/welcome.glade
+++ b/pyanaconda/ui/gui/spokes/welcome.glade
@@ -136,12 +136,16 @@
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <property name="margin_left">6</property>
-            <property name="margin_right">6</property>
-            <property name="margin_top">6</property>
+        <child internal-child="nav_box">
+          <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+            <child internal-child="nav_area">
+              <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+                <property name="can_focus">False</property>
+                <property name="margin_left">6</property>
+                <property name="margin_right">6</property>
+                <property name="margin_top">6</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -205,18 +209,22 @@
       <object class="GtkBox" id="AnacondaStandaloneWindow-main_box1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <child internal-child="nav_area">
-          <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area1">
-            <property name="can_focus">False</property>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
+        <child internal-child="nav_box">
+           <object class="GtkEventBox" id="AnacondaStandaloneWindow-nav_box1">
+              <child internal-child="nav_area">
+                <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area1">
+                  <property name="can_focus">False</property>
+                  <child>
+                    <placeholder/>
+                  </child>
+                </object>
+              </child>
+           </object>
+           <packing>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+             <property name="position">0</property>
+           </packing>
         </child>
         <child internal-child="alignment">
           <object class="GtkAlignment" id="AnacondaStandaloneWindow-alignment1">
diff --git a/scripts/makeupdates b/scripts/makeupdates
index 1c482a4..c69cd0a 100755
--- a/scripts/makeupdates
+++ b/scripts/makeupdates
@@ -165,6 +165,8 @@ def copyUpdatedFiles(tag, updates, cwd):
             install_to_dir(file, "usr/sbin")
         elif file == "data/70-anaconda.rules":
             install_to_dir(file, "lib/udev/rules.d")
+        elif file.startswith("data/pixmaps"):
+            install_to_dir(file, "usr/share/anaconda/pixmaps")
         elif file.startswith("data/ui/"):
             install_to_dir(file, "usr/share/anaconda/ui")
         elif file.startswith("data/post-scripts/"):
diff --git a/widgets/glade/AnacondaWidgets.xml b/widgets/glade/AnacondaWidgets.xml
index e0074cf..1ede275 100644
--- a/widgets/glade/AnacondaWidgets.xml
+++ b/widgets/glade/AnacondaWidgets.xml
@@ -38,7 +38,9 @@
 
             <internal-children>
                 <object name="main_box">
-                    <object name="nav_area" />
+                    <object name="nav_box">
+                        <object name="nav_area" />
+                    </object>
                     <object name="alignment">
                         <object name="action_area" />
                     </object>
@@ -58,7 +60,9 @@
 
             <internal-children>
                 <object name="main_box">
-                    <object name="nav_area" />
+                    <object name="nav_box">
+                        <object name="nav_area" />
+                    </object>
                     <object name="alignment">
                         <object name="action_area">
                             <object name="scrolled_window" />
@@ -80,7 +84,9 @@
 
             <internal-children>
                 <object name="main_box">
-                    <object name="nav_area" />
+                    <object name="nav_box">
+                        <object name="nav_area" />
+                    </object>
                     <object name="alignment">
                         <object name="action_area" />
                     </object>
diff --git a/widgets/src/BaseWindow.c b/widgets/src/BaseWindow.c
index 5105722..23b9998 100644
--- a/widgets/src/BaseWindow.c
+++ b/widgets/src/BaseWindow.c
@@ -90,7 +90,7 @@ struct _AnacondaBaseWindowPrivate {
     gboolean    is_beta, info_shown;
     GtkWidget  *main_box, *event_box, *info_bar;
     GtkWidget  *alignment;
-    GtkWidget  *nav_area, *action_area;
+    GtkWidget  *nav_box, *nav_area, *action_area;
     GtkWidget  *name_label, *distro_label, *beta_label;
 
     /* Untranslated versions of various things. */
@@ -209,13 +209,19 @@ static void anaconda_base_window_init(AnacondaBaseWindow *win) {
     /* Then the navigation area that sits as the first item in the main box
      * for every Window class.
      */
+
+    win->priv->nav_box = gtk_event_box_new();
+    gtk_widget_set_app_paintable(win->priv->nav_box, TRUE);
+    gtk_box_pack_start(GTK_BOX(win->priv->main_box), win->priv->nav_box, FALSE, FALSE, 0);
+
     win->priv->nav_area = gtk_grid_new();
     gtk_grid_set_row_homogeneous(GTK_GRID(win->priv->nav_area), FALSE);
     gtk_grid_set_column_homogeneous(GTK_GRID(win->priv->nav_area), FALSE);
     gtk_widget_set_margin_left(win->priv->nav_area, 6);
     gtk_widget_set_margin_right(win->priv->nav_area, 6);
     gtk_widget_set_margin_top(win->priv->nav_area, 6);
-    gtk_box_pack_start(GTK_BOX(win->priv->main_box), win->priv->nav_area, FALSE, FALSE, 0);
+
+    gtk_container_add(GTK_CONTAINER(win->priv->nav_box), win->priv->nav_area);
 
     /* Second in the main box is an alignment, because we want to be able
      * to control the amount of space the Window's content takes up on the
@@ -375,6 +381,20 @@ GtkWidget *anaconda_base_window_get_nav_area(AnacondaBaseWindow *win) {
 }
 
 /**
+ * anaconda_base_window_get_nav_area_background_window:
+ * @win: a #AnacondaBaseWindow
+ *
+ * Returns the event box that houses background window of the navigation area of @win.
+ *
+ * Returns: (transfer none): The event box
+ *
+ * Since: 1.0
+ */
+GtkWidget *anaconda_base_window_get_nav_area_background_window(AnacondaBaseWindow *win) {
+    return win->priv->nav_box;
+}
+
+/**
  * anaconda_base_window_get_main_box:
  * @win: a #AnacondaBaseWindow
  *
@@ -576,6 +596,8 @@ anaconda_base_window_buildable_get_internal_child (GtkBuildable *buildable,
         return G_OBJECT(anaconda_base_window_get_main_box(ANACONDA_BASE_WINDOW(buildable)));
     else if (!strcmp(childname, "nav_area"))
         return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->nav_area);
+    else if (!strcmp(childname, "nav_box"))
+        return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->nav_box);
     else if (!strcmp(childname, "alignment"))
         return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->alignment);
     else if (!strcmp(childname, "action_area"))
diff --git a/widgets/src/BaseWindow.h b/widgets/src/BaseWindow.h
index ef9c210..6c08ee8 100644
--- a/widgets/src/BaseWindow.h
+++ b/widgets/src/BaseWindow.h
@@ -80,6 +80,7 @@ GtkWidget  *anaconda_base_window_get_action_area   (AnacondaBaseWindow *win);
 GtkWidget  *anaconda_base_window_get_alignment     (AnacondaBaseWindow *win);
 GtkWidget  *anaconda_base_window_get_main_box      (AnacondaBaseWindow *win);
 GtkWidget  *anaconda_base_window_get_nav_area      (AnacondaBaseWindow *win);
+GtkWidget  *anaconda_base_window_get_nav_area_background_window (AnacondaBaseWindow *win);
 
 G_END_DECLS
 
diff --git a/widgets/src/SpokeWindow.c b/widgets/src/SpokeWindow.c
index bafc5ab..06c7819 100644
--- a/widgets/src/SpokeWindow.c
+++ b/widgets/src/SpokeWindow.c
@@ -124,12 +124,44 @@ GtkWidget *anaconda_spoke_window_new() {
 }
 
 static void anaconda_spoke_window_init(AnacondaSpokeWindow *win) {
-    GtkWidget *nav_area;
+    GError *error;
+    GtkWidget *nav_area, *nav_box;
+    GdkPixbuf *pixbuf;
+    cairo_surface_t *surface;
+    cairo_t *cr;
 
     win->priv = G_TYPE_INSTANCE_GET_PRIVATE(win,
                                             ANACONDA_TYPE_SPOKE_WINDOW,
                                             AnacondaSpokeWindowPrivate);
 
+    /* Set the background gradient in the header.  If we fail to load the
+     * background for any reason, just print an error message and display the
+     * header without an image.
+     */
+    error = NULL;
+    pixbuf = gdk_pixbuf_new_from_file ("/usr/share/anaconda/pixmaps/anaconda_spoke_header.png", &error);
+    if (!pixbuf) {
+        fprintf(stderr, "could not load header background: %s\n", error->message);
+        g_error_free(error);
+    } else {
+        nav_box = anaconda_base_window_get_nav_area_background_window(ANACONDA_BASE_WINDOW(win));
+        gtk_widget_set_size_request (nav_box, -1, gdk_pixbuf_get_height (pixbuf));
+        gtk_widget_realize(nav_box);
+
+        surface = gdk_window_create_similar_surface(gtk_widget_get_window(nav_box), CAIRO_CONTENT_COLOR_ALPHA,
+                                                   gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf));
+        cr = cairo_create(surface);
+
+        gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
+        cairo_paint(cr);
+        cairo_destroy(cr);
+        cairo_pattern_t *pattern = cairo_pattern_create_for_surface(surface);
+        cairo_surface_destroy(surface);
+
+        cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
+        gdk_window_set_background_pattern(gtk_widget_get_window(nav_box), pattern);
+    }
+
     /* Set some default properties. */
     gtk_window_set_modal(GTK_WINDOW(win), TRUE);
 
-- 
1.7.11.2



More information about the anaconda-patches mailing list