[PATCH] Add a gradient background to spoke headers (mizmo, clumens).
by Chris Lumens
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@N?(olHy`uVBq!ia0vp^j6m$d!3HE98sfu%6kC$Fy9>jA5L~c#`DCC7XMsm#
zF;K^K5N34Jm|X!BWH0gbb!ET9!_8>L&5=-O1Qc@fba4!kxV-h8A=d!~0hf#C@BA;j
zr+C#YD%V_Wl7I`R*h@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
11 years, 4 months
[PATCH] Only allow changing filesystem type if the reformat combo is checked (#885906).
by Chris Lumens
We were doing fine at this except for one case, where the contents of the
customize combo are displayed for the first time.
---
pyanaconda/ui/gui/spokes/custom.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/pyanaconda/ui/gui/spokes/custom.py b/pyanaconda/ui/gui/spokes/custom.py
index 048b0dc..78047a9 100644
--- a/pyanaconda/ui/gui/spokes/custom.py
+++ b/pyanaconda/ui/gui/spokes/custom.py
@@ -2408,6 +2408,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
fsCombo.set_active(active_index)
fsCombo.set_sensitive(self._reformatCheckbox.get_sensitive() and
+ self._reformatCheckbox.get_active() and
fs_type_sensitive)
# end btrfs magic
--
1.7.11.2
11 years, 4 months
[PATCH] In interactive installs, default to bootloader in the MBR (#885284).
by Chris Lumens
---
data/interactive-defaults.ks | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/interactive-defaults.ks b/data/interactive-defaults.ks
index f692ccd..a8c2897 100644
--- a/data/interactive-defaults.ks
+++ b/data/interactive-defaults.ks
@@ -1,4 +1,5 @@
# Kickstart defaults file for an interative install.
# This is not loaded if a kickstart file is provided on the command line.
auth --enableshadow --passalgo=sha512
+bootloader --location=mbr
firstboot --enable
--
1.7.11.2
11 years, 4 months
[f18-branch/master] return to using lokkit for firewall setup (#885807)
by Brian C. Lane
From: "Brian C. Lane" <bcl(a)redhat.com>
firewalld has some issues, especially with minimal installs and dragging
in a bunch of X dependencies.
This returns to using lokkit for firewall. The differences from before are:
- require lokkit instead of system-config-firewall-base so that maybe
something else could provide lokkit with the same cmdline args.
- don't use -f which would override the selinux setting which we are
still setting directly.
---
anaconda.spec.in | 3 +--
pyanaconda/install.py | 2 +-
pyanaconda/kickstart.py | 24 ++++++++++++++++--------
3 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/anaconda.spec.in b/anaconda.spec.in
index 9637c6f..a665b59 100644
--- a/anaconda.spec.in
+++ b/anaconda.spec.in
@@ -43,7 +43,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%define sckeyboardver 1.3.1
%define libblkidver 2.17.1-1
%define fcoeutilsver 1.0.12-3.20100323git
-%define firewalldver 0.2.9-1
%define pythonurlgrabberver 3.9.1-5
%define utillinuxver 2.15.1
%define syslinuxver 3.73
@@ -121,7 +120,7 @@ Requires: dmidecode
Requires: python-pyblock >= %{pythonpyblockver}
Requires: libuser-python
Requires: authconfig
-Requires: firewalld >= %{firewalldver}
+Requires: lokkit
Requires: cryptsetup-luks
Requires: python-cryptsetup >= %{pythoncryptsetupver}
Requires: mdadm
diff --git a/pyanaconda/install.py b/pyanaconda/install.py
index 6754a0a..54defc9 100644
--- a/pyanaconda/install.py
+++ b/pyanaconda/install.py
@@ -120,7 +120,7 @@ def doInstall(storage, payload, ksdata, instClass):
# anaconda requires storage packages in order to make sure the target
# system is bootable and configurable, and some other packages in order
# to finish setting up the system.
- packages = storage.packages + ["authconfig", "firewalld"]
+ packages = storage.packages + ["authconfig", "lokkit"]
payload.preInstall(packages=packages, groups=payload.languageGroups(ksdata.lang.lang))
payload.install()
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index 1ec294a..6ef1e77 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -457,7 +457,7 @@ class Fcoe(commands.fcoe.F13_Fcoe):
class Firewall(commands.firewall.F14_Firewall):
def execute(self, storage, ksdata, instClass):
- args = []
+ args = ["--quiet", "--nostart"]
# enabled is None if neither --enable or --disable is passed
# default to enabled if nothing has been set.
if self.enabled == False:
@@ -477,14 +477,22 @@ class Firewall(commands.firewall.F14_Firewall):
for service in self.services:
args += [ "--service=%s" % (service,) ]
- cmd = "/usr/bin/firewall-offline-cmd"
- if not os.path.exists(ROOT_PATH+cmd):
- msg = _("%s is missing. Cannot setup firewall.") % (cmd,)
- raise KickstartError(msg)
+ cmd = "/usr/sbin/lokkit"
+ try:
+ if not os.path.exists(ROOT_PATH + "/etc/sysconfig/iptables"):
+ iutil.execWithRedirect(cmd, args,
+ stdout="/dev/tty5", stderr="/dev/tty5",
+ root=ROOT_PATH)
+ else:
+ log.error("/etc/sysconfig/iptables exists, skipping lokkit. "
+ "Would have run %s", args)
+ except (RuntimeError, OSError) as msg:
+ log.error ("lokkit run failed: %s", msg)
else:
- iutil.execWithRedirect(cmd, args,
- stdout="/dev/tty5", stderr="/dev/tty5",
- root=ROOT_PATH)
+ with open(ROOT_PATH + "/etc/sysconfig/system-config-firewall", "w") as f:
+ f.write("# system-config-firewall config written out by anaconda\n\n")
+ for arg in args[2:]:
+ f.write("%s\n" %(arg,))
class Firstboot(commands.firstboot.FC3_Firstboot):
def execute(self, *args):
--
1.8.0
11 years, 4 months
check software space needs against storage config
by David Lehman
This adds $SUBJECT in such a way as to make it easy to also add
other checks that must pass in order for installation to proceed
from the summary hub. Nothing is done in threads since this check
is a quick one. The check is only performed once all the spokes
are completed, and the hub's info text and continue button both
reflect the outcome of the check.
I did some pretty basic testing: start with a previous autopart
install w/ plain partitions, mark old /boot for reformat and set it
as /, save, observe warning text and continue button state, reenter
custom, switch / to /boot, mark old / for reformat and set mountpoint
to /, return to hub, observe window info cleared and continue button
sensitive.
The numbers in patch 1 are empirical, based on recent smoke composes
on x86_64.
11 years, 4 months
[pykickstart] [PATCH] Beware of possibly unicode strings (#876293)
by Vratislav Podzimek
__str__ method should return byte string, not unicode string. But
as we don't have a check in every KS_OBJECT.__str__ method, let's at
least add try-except block to prevent UnicodeDecodeError tracebacks.
Signed-off-by: Vratislav Podzimek <vpodzime(a)redhat.com>
---
pykickstart/base.py | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/pykickstart/base.py b/pykickstart/base.py
index 4ef442c..9079906 100644
--- a/pykickstart/base.py
+++ b/pykickstart/base.py
@@ -281,12 +281,20 @@ class BaseHandler(KickstartObject):
for prio in lst:
for obj in self._writeOrder[prio]:
- retval += obj.__str__()
+ obj_str = str(obj)
+ try:
+ retval += obj_str
+ except UnicodeDecodeError:
+ retval += obj_str.encode("utf-8")
for script in self.scripts:
- retval += script.__str__()
+ script_str = str(script)
+ try:
+ retval += script_str
+ except UnicodeDecodeError:
+ retval += script_str.encode("utf-8")
- retval += self.packages.__str__()
+ retval += str(self.packages)
return retval
--
1.7.11.7
11 years, 4 months
[master/f18-branch] [PATCH] Fix getting country layout variants
by Vratislav Podzimek
Commit 70e339b86b0d4a000e0e62253703ac4ca8618b74 introduced the bug
resulting in almost empty dictionary of country layout variants.
Iteration over countries uses the same _get_variant method as iteration
over languages, but comes afterwards. The check added in
70e339b86b0d4a000e0e62253703ac4ca8618b74 fails for almost every layout
that is processed in iteration over countries.
Signed-off-by: Vratislav Podzimek <vpodzime(a)redhat.com>
---
pyanaconda/keyboard.py | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py
index 828c709..7c00340 100755
--- a/pyanaconda/keyboard.py
+++ b/pyanaconda/keyboard.py
@@ -356,7 +356,7 @@ class XklWrapper(object):
#'grp' means that we want layout (group) switching options
self.configreg.foreach_option('grp', self._get_switch_option, None)
- def _get_variant(self, c_reg, item, subitem, dest):
+ def _get_variant(self, c_reg, item, subitem, lang):
if subitem:
name = item_str(item.name) + " (" + item_str(subitem.name) + ")"
description = item_str(subitem.description)
@@ -366,11 +366,13 @@ class XklWrapper(object):
#if this layout has already been added for some other language,
#do not add it again (would result in duplicates in our lists)
- if name not in self.name_to_show_str:
- if dest:
- self.name_to_show_str[name] = "%s (%s)" % (dest.encode("utf-8"),
+ if lang and name not in self.name_to_show_str:
+ self.name_to_show_str[name] = "%s (%s)" % (lang.encode("utf-8"),
description.encode("utf-8"))
-
+ self._variants_list.append(_Layout(name, description))
+ else:
+ #if lang is None, we are iterating over countries not languages
+ #and should just append the layout to the list
self._variants_list.append(_Layout(name, description))
def _get_language_variants(self, c_reg, item, user_data=None):
--
1.7.11.7
11 years, 4 months
[python-meh] [PATCH] Handle non-ascii dict keys and values correctly (#883641)
by Vratislav Podzimek
Also add such case to the handle_unicode unittest.
Signed-off-by: Vratislav Podzimek <vpodzime(a)redhat.com>
---
meh/dump.py | 4 ++++
tests/handle_unicode.py | 1 +
2 files changed, 5 insertions(+)
diff --git a/meh/dump.py b/meh/dump.py
index 6537990..81751d2 100644
--- a/meh/dump.py
+++ b/meh/dump.py
@@ -352,10 +352,14 @@ class ExceptionDump(object):
first = 0
if type(k) == types.StringType:
ret += "'%s': " % (k,)
+ elif type(k) == types.UnicodeType:
+ ret += "'%s': " % k.encode("utf-8")
else:
ret += "%s: " % (k,)
if __isSimpleType(v):
+ if type(v) == types.UnicodeType:
+ v = v.encode("utf-8")
ret += "%s" % (v,)
else:
ret += self._dumpClass(v, level + 1, parentkey = curkey, skipList=skipList)
diff --git a/tests/handle_unicode.py b/tests/handle_unicode.py
index 6ae67d7..65fc297 100644
--- a/tests/handle_unicode.py
+++ b/tests/handle_unicode.py
@@ -14,6 +14,7 @@ class UnicodeExample(object):
self.ascii_str = ASCII_STR
self.unicode_str = UNICODE_STR
self.encoded_str = self.unicode_str.encode("utf-8")
+ self.unicode_dict = { "úú" : "áá" }
class HandleUnicode_TestCase(BaseTestCase):
def setUp(self):
--
1.7.11.7
11 years, 4 months
[lorax] use correct variable for upgrade image on s390
by Dan Horák
---
share/s390.tmpl | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/share/s390.tmpl b/share/s390.tmpl
index 9380c75..b37237c 100644
--- a/share/s390.tmpl
+++ b/share/s390.tmpl
@@ -25,7 +25,7 @@ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/kernel.img
installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
## upgrader image
-installupgradeinitrd images-${basearch} ${kernel.upgrade.img} ${KERNELDIR}/upgrade.img
+installupgradeinitrd images-${basearch} ${kernel.upgrade.path} ${KERNELDIR}/upgrade.img
## s390 needs some extra boot config
createaddrsize ${INITRD_ADDRESS} ${outroot}/${BOOTDIR}/initrd.img ${outroot}/${BOOTDIR}/initrd.addrsize
--
1.7.7.6
11 years, 4 months
[master] Checkbutton for language-default layout only
by Vratislav Podzimek
This patch adds checkbutton as was suggested in the bugzilla discussion.
The result can be seen at [1]. I know the text is quite small, but I didn't
find ay way how to set attributes of the checkbutton's label. We could
either leave it as it is or use checkbutton with no label, add new label
next to it and wire click events on the label to checkbutton toggling.
[1] http://vpodzime.fedorapeople.org/welcome_spoke_new_checkbutton.png
Vratislav Podzimek (1):
Add checkbox for setting language default layout (#866887)
pyanaconda/ui/gui/spokes/welcome.glade | 17 ++++++++++++++
pyanaconda/ui/gui/spokes/welcome.py | 41 +++++++++++++++++++++++-----------
2 files changed, 45 insertions(+), 13 deletions(-)
--
1.7.11.7
11 years, 4 months