--- installclasses/fedora.py | 2 +- iw/task_gui.py | 184 +++++++++++++++++++++----- ui/addrepo.glade | 326 +++++++++++++++++++++++++++++++++++----------- ui/tasksel.glade | 76 +++++++++++- 4 files changed, 474 insertions(+), 114 deletions(-) diff --git a/installclasses/fedora.py b/installclasses/fedora.py index 1517d03..78dcb53 100644 --- a/installclasses/fedora.py +++ b/installclasses/fedora.py @@ -20,7 +20,7 @@ from installclass import BaseInstallClass from rhpl.translate import N_,_ from constants import * -import os +import os, types import iutil import installmethod diff --git a/iw/task_gui.py b/iw/task_gui.py index 2312243..b481047 100644 --- a/iw/task_gui.py +++ b/iw/task_gui.py @@ -1,7 +1,7 @@ # # task_gui.py: Choose tasks for installation # -# Copyright (C) 2006 Red Hat, Inc. All rights reserved. +# Copyright (C) 2006, 2007 Red Hat, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -81,7 +81,7 @@ class TaskWindow(InstallWindow): def _setupRepo(self, repo): try: - self.backend.doRepoSetup(self.anaconda, repo.id, fatalerrors = False) + self.backend.doRepoSetup(self.anaconda, thisrepo = repo.id, fatalerrors = False) log.info("added repository %s with with source URL %s" % (repo.name, repo.baseurl[0])) except yum.Errors.RepoError, e: self.intf.messageWindow(_("Error"), @@ -102,72 +102,182 @@ class TaskWindow(InstallWindow): return True + def _validURL(self, url): + return len(url) > 0 and (url.startswith("http://") or + url.startswith("https://") or + url.startswith("ftp://")) + def _addRepo(self, *args): + repo = None + editing = False + if not network.hasActiveNetDev(): net = NetworkConfigurator(self.anaconda.id.network) ret = net.run() net.destroy() if ret == gtk.RESPONSE_CANCEL: return gtk.RESPONSE_CANCEL - - (dxml, dialog) = gui.getGladeWidget("addrepo.glade", "addRepoDialog") + + # If we were passed an extra argument, it's the repo store and we + # are editing an existing repo as opposed to adding a new one. + if len(args) > 1: + (model, iter) = args[1].get_selection().get_selected() + if iter: + repo = model.get_value(iter, 2) + editing = True + else: + return + + (self.dxml, dialog) = gui.getGladeWidget("addrepo.glade", "addRepoDialog") + nameEntry = self.dxml.get_widget("nameEntry") + baseurlButton = self.dxml.get_widget("baseurlButton") + baseurlEntry = self.dxml.get_widget("baseurlEntry") + mirrorlistButton = self.dxml.get_widget("mirrorlistButton") + mirrorlistEntry = self.dxml.get_widget("mirrorlistEntry") + proxyCheckbox = self.dxml.get_widget("proxyCheckbox") + proxyEntry = self.dxml.get_widget("proxyEntry") + proxyTable = self.dxml.get_widget("proxyTable") + usernameEntry = self.dxml.get_widget("usernameEntry") + passwordEntry = self.dxml.get_widget("passwordEntry") + + # If we are editing an existing repo, use the existing values to + # populate the UI. + # FIXME: this is yum specific + if editing: + nameEntry.set_text(repo.name) + + if repo.mirrorlist: + mirrorlistEntry.set_text(repo.mirrorlist) + mirrorlistButton.set_active(True) + else: + baseurlEntry.set_text(repo.baseurl[0]) + baseurlButton.set_active(True) + + if repo.proxy: + proxyCheckbox.set_active(True) + proxyTable.set_sensitive(True) + proxyEntry.set_text(repo.proxy) + usernameEntry.set_text(repo.proxy_username) + passwordEntry.set_text(repo.proxy_password) + gui.addFrame(dialog) - lbl = dxml.get_widget("descLabel") + # Initialize UI elements that should be sensitive or not. + self._proxyToggled() + self._radioChanged() + + proxyCheckbox.connect("toggled", self._proxyToggled) + baseurlButton.connect("toggled", self._radioChanged) + + lbl = self.dxml.get_widget("descLabel") txt = lbl.get_text() lbl.set_text(txt %(productName,)) - + dialog.show_all() while 1: rc = dialog.run() if rc == gtk.RESPONSE_CANCEL: break - - reponame = dxml.get_widget("nameEntry").get_text() + + reponame = nameEntry.get_text() reponame.strip() if len(reponame) == 0: self.intf.messageWindow(_("Invalid Repository Name"), _("You must provide a repository name.")) continue - repourl = dxml.get_widget("urlEntry").get_text() + if baseurlButton.get_active(): + repourl = baseurlEntry.get_text() + else: + repourl = mirrorlistEntry.get_text() + repourl.strip() - if (len(repourl) == 0 or not - (repourl.startswith("http://") or - repourl.startswith("ftp://"))): + if not self._validURL(repourl): self.intf.messageWindow(_("Invalid Repository URL"), - _("You must provide an HTTP or FTP " - "URL to a repository.")) + _("You must provide an HTTP, HTTPS, " + "or FTP URL to a repository.")) continue + proxy = None + proxy_username = None + proxy_password = None + + if proxyCheckbox.get_active(): + proxy = proxyEntry.get_text() + proxy.strip() + if not self._validURL(proxy): + self.intf.messageWindow(_("Invalid Proxy URL"), + _("You must provide an HTTP, HTTPS, " + "or FTP URL to a proxy.")) + continue + + proxy_username = usernameEntry.get_text() + proxy_password = passwordEntry.get_text() + + # Don't create a new repo object if we are editing. # FIXME: this is yum specific - repo = AnacondaYumRepo(uri=repourl, repoid=reponame) + if editing: + if baseurlButton.get_active(): + repo.baseurl = [repourl] + else: + repo.mirrorlist = repourl + + repo.repoid = reponame.replace(" ", "") + else: + repoid = reponame.replace(" ", "") + + if baseurlButton.get_active(): + repo = AnacondaYumRepo(uri=repourl, repoid=repoid) + else: + repo = AnacondaYumRepo(mirrorlist=repourl, repoid=repoid) + repo.name = reponame repo.basecachedir = self.backend.ayum.conf.cachedir + + if proxy: + repo.proxy = proxy + repo.proxy_username = proxy_username + repo.proxy_password = proxy_password + repo.enable() - try: - self.backend.ayum.repos.add(repo) - except yum.Errors.DuplicateRepoError, e: - self.intf.messageWindow(_("Error"), - _("The repository %s has already been added. Please " - "choose a different repository name and " - "URL.") % reponame, type="ok", custom_icon="error") - continue + if not editing: + try: + self.backend.ayum.repos.add(repo) + except yum.Errors.DuplicateRepoError, e: + self.intf.messageWindow(_("Error"), + _("The repository %s has already been added. Please " + "choose a different repository name and " + "URL.") % reponame, type="ok", custom_icon="error") + continue if not self._setupRepo(repo): continue - s = self.xml.get_widget("repoList").get_model() - s.append([repo.isEnabled(), repo.name, repo]) - self.repos[repo.name] = (repo.baseurl[0], None) + if not editing: + s = self.xml.get_widget("repoList").get_model() + s.append([repo.isEnabled(), repo.name, repo]) break dialog.destroy() return rc + def _radioChanged(self, *args): + baseurlButton = self.dxml.get_widget("baseurlButton") + baseurlEntry = self.dxml.get_widget("baseurlEntry") + mirrorlistEntry = self.dxml.get_widget("mirrorlistEntry") + + active = baseurlButton.get_active() + baseurlEntry.set_sensitive(active) + mirrorlistEntry.set_sensitive(not active) + + def _proxyToggled(self, *args): + table = self.dxml.get_widget("proxyTable") + checkbox = self.dxml.get_widget("proxyCheckbox") + table.set_sensitive(checkbox.get_active()) + def _taskToggled(self, data, row, store): i = store.get_iter(int(row)) val = store.get_value(i, 0) @@ -183,7 +293,7 @@ class TaskWindow(InstallWindow): net.destroy() if ret == gtk.RESPONSE_CANCEL: return - + store.set_value(i, 0, not val) def _createTaskStore(self): @@ -207,7 +317,7 @@ class TaskWindow(InstallWindow): continue store.append([self.groupsInstalled(grps), _(txt), grps]) - return len(store) + return tl def _createRepoStore(self): store = gtk.ListStore(gobject.TYPE_BOOLEAN, @@ -225,14 +335,11 @@ class TaskWindow(InstallWindow): col.set_clickable(False) tl.append_column(col) - for (reponame, uri) in self.repos.items(): - repoid = reponame.replace(" ", "") - if not self.backend.ayum.repos.repos.has_key(repoid): - continue - repo = self.backend.ayum.repos.repos[repoid] + for (reponame, repo) in self.repos.repos.items(): store.append([repo.isEnabled(), repo.name, repo]) - - + + return tl + def getScreen (self, anaconda): self.intf = anaconda.intf self.dispatch = anaconda.dispatch @@ -257,14 +364,17 @@ class TaskWindow(InstallWindow): else: self.xml.get_widget("customRadio").set_active(False) - if self._createTaskStore() == 0: + self.ts = self._createTaskStore() + self.rs = self._createRepoStore() + + if len(self.ts.get_model()) == 0: self.xml.get_widget("cbVBox").hide() self.xml.get_widget("mainLabel").hide() - self._createRepoStore() if not anaconda.id.instClass.allowExtraRepos: vbox.remove(self.xml.get_widget("addRepoBox")) self.xml.get_widget("addRepoButton").connect("clicked", self._addRepo) + self.xml.get_widget("editRepoButton").connect("clicked", self._addRepo, self.rs) return vbox diff --git a/ui/addrepo.glade b/ui/addrepo.glade index 3ab7e6a..0317700 100644 --- a/ui/addrepo.glade +++ b/ui/addrepo.glade @@ -4,11 +4,11 @@ <glade-interface> <widget class="GtkDialog" id="addRepoDialog"> + <property name="width_request">440</property> <property name="title" translatable="yes" context="yes">Add Repository</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER</property> <property name="modal">False</property> - <property name="default_width">320</property> <property name="default_height">260</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> @@ -44,75 +44,13 @@ </child> <child> - <widget class="GtkButton" id="addRepoButton"> + <widget class="GtkButton" id="okButton"> <property name="visible">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="response_id">-5</property> - - <child> - <widget class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes" context="yes">_Add repository</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> </widget> </child> </widget> @@ -157,6 +95,62 @@ </child> <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkLabel" id="nameLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes" context="yes"><b>Repository _name:</b></property> + <property name="use_underline">True</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="nameEntry"> + <property name="visible">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">â?¢</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> <widget class="GtkTable" id="table1"> <property name="visible">True</property> <property name="n_rows">2</property> @@ -166,9 +160,131 @@ <property name="column_spacing">6</property> <child> - <widget class="GtkLabel" id="nameLabel"> + <widget class="GtkRadioButton" id="baseurlButton"> <property name="visible">True</property> - <property name="label" translatable="yes" context="yes"><b>Repository _name:</b></property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Repository _URL</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkRadioButton" id="mirrorlistButton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Repository _Mirror</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + <property name="group">baseurlButton</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="baseurlEntry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">â?¢</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="mirrorlistEntry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">â?¢</property> + <property name="activates_default">False</property> + </widget> + <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> + <property name="y_options"></property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="proxyCheckbox"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Proxy configuration</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkTable" id="proxyTable"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">12</property> + <property name="column_spacing">6</property> + + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes">Proxy U_RL:</property> <property name="use_underline">True</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -178,6 +294,7 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> + <property name="mnemonic_widget">proxyEntry</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> @@ -188,22 +305,25 @@ <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkLabel" id="urlLabel"> + <widget class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="label" translatable="yes" context="yes"><b>Repository _URL:</b></property> + <property name="label" translatable="yes">Proxy u_sername:</property> <property name="use_underline">True</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> - <property name="xalign">0.5</property> + <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> + <property name="mnemonic_widget">usernameEntry</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> @@ -214,12 +334,44 @@ <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkEntry" id="nameEntry"> + <widget class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">Proxy pass_word:</property> + <property name="use_underline">True</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="mnemonic_widget">passwordEntry</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="proxyEntry"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> @@ -233,12 +385,14 @@ <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkEntry" id="urlEntry"> + <widget class="GtkEntry" id="usernameEntry"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> @@ -252,13 +406,35 @@ <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="passwordEntry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">â?¢</property> + <property name="activates_default">False</property> + </widget> + <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> + <property name="y_options"></property> </packing> </child> </widget> <packing> <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="expand">True</property> + <property name="fill">True</property> </packing> </child> </widget> diff --git a/ui/tasksel.glade b/ui/tasksel.glade index 6dfaabd..c5b6cec 100644 --- a/ui/tasksel.glade +++ b/ui/tasksel.glade @@ -253,7 +253,7 @@ <widget class="GtkHButtonBox" id="hbuttonbox1"> <property name="visible">True</property> <property name="layout_style">GTK_BUTTONBOX_START</property> - <property name="spacing">0</property> + <property name="spacing">5</property> <child> <widget class="GtkButton" id="addRepoButton"> @@ -328,6 +328,80 @@ </child> </widget> </child> + + <child> + <widget class="GtkButton" id="editRepoButton"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + + <child> + <widget class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image2"> + <property name="visible">True</property> + <property name="stock">gtk-edit</property> + <property name="icon_size">4</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Modify repository</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + </child> </widget> <packing> <property name="padding">0</property> -- 1.5.3.7 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list