summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS7
-rw-r--r--SoftwareProperties/SoftwareProperties.py1
-rw-r--r--SoftwareProperties/aptsources.py2
-rw-r--r--SoftwareProperties/dialog_add.py14
-rw-r--r--SoftwareProperties/dialog_edit.py73
-rw-r--r--UpdateManager/Common/utils.py2
-rw-r--r--UpdateManager/UpdateManager.py12
-rw-r--r--data/SoftwareProperties.glade1
-rw-r--r--data/SoftwarePropertiesDialogs.glade50
-rw-r--r--data/UpdateManager.glade4
-rw-r--r--data/gnome-software-properties.glade2161
-rw-r--r--data/icons/16x16/apps/update-manager.pngbin0 -> 964 bytes
-rw-r--r--data/icons/22x22/apps/update-manager.pngbin0 -> 1464 bytes
-rw-r--r--data/icons/24x24/apps/update-manager.pngbin0 -> 1475 bytes
-rw-r--r--data/icons/48x48/apps/software-properties.png (renamed from data/update-manager.png)bin4009 -> 4009 bytes
-rw-r--r--data/icons/scalable/apps/update-manager.svg1519
-rw-r--r--data/software-properties.desktop.in (renamed from data/gnome-software-properties.desktop.in)4
-rw-r--r--data/update-manager-logo.pngbin8497 -> 0 bytes
-rw-r--r--data/update-manager.desktop.in2
-rw-r--r--debian/changelog6
-rwxr-xr-xdebian/rules1
-rw-r--r--po/POTFILES.in4
-rwxr-xr-xsetup.py26
-rw-r--r--software-properties (renamed from gnome-software-properties)0
-rw-r--r--src/Makefile.am10
-rw-r--r--src/aptsources.py.in442
-rw-r--r--src/dialog_add.py.in107
-rw-r--r--src/dialog_apt_key.py.in163
-rw-r--r--src/dialog_edit.py.in102
-rw-r--r--src/dialog_settings.py.in144
-rwxr-xr-xsrc/gnome-software-properties.in332
-rw-r--r--src/update-manager871
-rw-r--r--src/utils.py12
33 files changed, 1654 insertions, 4418 deletions
diff --git a/AUTHORS b/AUTHORS
index fcb5dd99..d12b5371 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -10,7 +10,10 @@ Jean Privat <privat@lirmm.fr>
Martin Willemoes Hansen <mwh@sysrq.dk>
Zygmunt Krynicki <zyga@www.suxx.pl>
-Technical Author:
-=================
+Technical Author
+================
Sean Wheller <sean@inwords.co.za>
+Icons
+=====
+Jakub Steiner <jimmac@novell.com>
diff --git a/SoftwareProperties/SoftwareProperties.py b/SoftwareProperties/SoftwareProperties.py
index aa3114f0..237ffbdd 100644
--- a/SoftwareProperties/SoftwareProperties.py
+++ b/SoftwareProperties/SoftwareProperties.py
@@ -57,6 +57,7 @@ CONF_MAP = {
class SoftwareProperties(SimpleGladeApp):
def __init__(self, datadir=None, options=None, parent=None):
+ gtk.window_set_default_icon_name("software-properties")
# FIXME: some saner way is needed here
if datadir == None:
diff --git a/SoftwareProperties/aptsources.py b/SoftwareProperties/aptsources.py
index 417563d4..133e9b3d 100644
--- a/SoftwareProperties/aptsources.py
+++ b/SoftwareProperties/aptsources.py
@@ -155,6 +155,8 @@ class SourceEntry:
return
# URI
self.uri = string.strip(pieces[1])
+ if len(self.uri) < 1:
+ self.invalid = True
# distro and components (optional)
# Directory or distro
self.dist = string.strip(pieces[2])
diff --git a/SoftwareProperties/dialog_add.py b/SoftwareProperties/dialog_add.py
index fbf741c5..b5fbe07f 100644
--- a/SoftwareProperties/dialog_add.py
+++ b/SoftwareProperties/dialog_add.py
@@ -172,13 +172,19 @@ class dialog_add:
self.selected_comps = []
vbox = self.gladexml.get_widget("vbox_comps")
vbox.foreach(self.get_enabled_comps)
+
# check if we are in 'add' or 'edit' mode
if self.source_entry:
# 'edit' - ode
- if not self.custom:
- entry = self._make_source_entry()
- if entry:
- self.sourceslist.list[self.source_entry_index] = entry
+ # check if there are no selected components
+ if len(self.selected_comps) < 1:
+ # remove the source
+ self.sourceslist.remove(self.source_entry)
+ else:
+ if not self.custom:
+ entry = self._make_source_entry()
+ if entry:
+ self.sourceslist.list[self.source_entry_index] = entry
else:
# 'add' mode
self.sourceslist.add(self.selected.type,
diff --git a/SoftwareProperties/dialog_edit.py b/SoftwareProperties/dialog_edit.py
index 05cbddba..59788915 100644
--- a/SoftwareProperties/dialog_edit.py
+++ b/SoftwareProperties/dialog_edit.py
@@ -41,6 +41,7 @@ class dialog_edit:
self.gladexml = gtk.glade.XML("%s/glade/SoftwarePropertiesDialogs.glade" % datadir)
self.main = self.gladexml.get_widget("dialog_edit")
self.main.set_transient_for(parent)
+ self.button_edit_ok = self.gladexml.get_widget("button_edit_ok")
# type
combo_type = self.gladexml.get_widget("combobox_type")
@@ -70,29 +71,61 @@ class dialog_edit:
entry = self.gladexml.get_widget("entry_comment")
entry.set_text(source_entry.comment)
+ # finally set the signal so that the check function is not tiggered
+ # during initialisation
+ self.gladexml.signal_connect("on_entry_source_line_changed",
+ self.check_line)
+
+ def check_line(self, *args):
+ """Check for a valid apt line and set the sensitiveness of the
+ button 'add' accordingly"""
+ line = self.get_line()
+ if line == False:
+ self.button_edit_ok.set_sensitive(False)
+ return
+ source_entry = aptsources.SourceEntry(line)
+ if (source_entry.invalid == True or source_entry.disabled == True):
+ self.button_edit_ok.set_sensitive(False)
+ else:
+ self.button_edit_ok.set_sensitive(True)
+
+ def get_line(self):
+ """Collect all values from the entries and create an apt line"""
+ combo_type = self.gladexml.get_widget("combobox_type")
+ if combo_type.get_active() == 0:
+ line = "deb"
+ else:
+ line = "deb-src"
+
+ entry = self.gladexml.get_widget("entry_uri")
+ text = entry.get_text()
+ if len(text) < 1 or text.find(" ") != -1 or text.find("#") != -1:
+ return False
+ line = line + " " + entry.get_text()
+
+ entry = self.gladexml.get_widget("entry_dist")
+ text = entry.get_text()
+ if len(text) < 1 or text.find(" ") != -1 or text.find("#") != -1:
+ return False
+ line = line + " " + entry.get_text()
+
+ entry = self.gladexml.get_widget("entry_comps")
+ text = entry.get_text()
+ if len(text) < 1 or text.find("#") != -1:
+ return False
+ line = line + " " + entry.get_text()
+
+ entry = self.gladexml.get_widget("entry_comment")
+ if entry.get_text() != "":
+ line = line + " #" + entry.get_text() + "\n"
+ else:
+ line = line + "\n"
+ return line
+
def run(self):
res = self.main.run()
if res == gtk.RESPONSE_OK:
- # get values
- combo_type = self.gladexml.get_widget("combobox_type")
- if combo_type.get_active() == 0:
- line = "deb"
- else:
- line = "deb-src"
- entry = self.gladexml.get_widget("entry_uri")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_dist")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_comps")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_comment")
- if entry.get_text() != "":
- line = line + " #" + entry.get_text() + "\n"
- else:
- line = line + "\n"
+ line = self.get_line()
# change repository
index = self.sourceslist.list.index(self.source_entry)
diff --git a/UpdateManager/Common/utils.py b/UpdateManager/Common/utils.py
index 17c62212..099cbfed 100644
--- a/UpdateManager/Common/utils.py
+++ b/UpdateManager/Common/utils.py
@@ -15,6 +15,8 @@ def error(parent, summary, message):
type=gtk.MESSAGE_ERROR,
buttons=gtk.BUTTONS_CLOSE)
d.set_markup("<big><b>%s</b></big>\n\n%s" % (summary, message))
+ d.realize()
+ d.window.set_functions(gtk.gdk.FUNC_MOVE)
d.set_title("")
res = d.run()
d.destroy()
diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py
index 6c06ca3c..6ac83197 100644
--- a/UpdateManager/UpdateManager.py
+++ b/UpdateManager/UpdateManager.py
@@ -216,17 +216,13 @@ class UpdateList:
class UpdateManager(SimpleGladeApp):
def __init__(self, datadir):
- icons = gtk.icon_theme_get_default()
- try:
- logo=icons.load_icon("update-manager", 48, 0)
- gtk.window_set_default_icon_list(logo)
- except:
- pass
+ gtk.window_set_default_icon_name("update-manager")
self.datadir = datadir
SimpleGladeApp.__init__(self, datadir+"glade/UpdateManager.glade",
None, domain="update-manager")
+ self.image_logo.set_from_icon_name("update-manager", gtk.ICON_SIZE_DIALOG)
self.window_main.set_sensitive(False)
self.window_main.grab_focus()
self.button_close.grab_focus()
@@ -413,6 +409,8 @@ class UpdateManager(SimpleGladeApp):
if name in self.packages:
self.packages.remove(name)
self.dl_size -= pkg.packageSize
+ self.label_downsize.set_markup(_("Download size: %s" % \
+ apt_pkg.SizeToStr(self.dl_size)))
if len(self.packages) == 0:
self.button_install.set_sensitive(False)
@@ -421,6 +419,8 @@ class UpdateManager(SimpleGladeApp):
if name not in self.packages:
self.packages.append(name)
self.dl_size += pkg.packageSize
+ self.label_downsize.set_markup(_("Download size: %s" % \
+ apt_pkg.SizeToStr(self.dl_size)))
if len(self.packages) > 0:
self.button_install.set_sensitive(True)
diff --git a/data/SoftwareProperties.glade b/data/SoftwareProperties.glade
index 57f7542d..58584826 100644
--- a/data/SoftwareProperties.glade
+++ b/data/SoftwareProperties.glade
@@ -13,7 +13,6 @@
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
- <property name="icon">update-manager.png</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
diff --git a/data/SoftwarePropertiesDialogs.glade b/data/SoftwarePropertiesDialogs.glade
index 581cc565..549a9c7c 100644
--- a/data/SoftwarePropertiesDialogs.glade
+++ b/data/SoftwarePropertiesDialogs.glade
@@ -187,7 +187,7 @@
<child>
<widget class="GtkLabel" id="label32">
<property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Sections&lt;/b&gt;</property>
+ <property name="label" translatable="yes">&lt;b&gt;Components&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -590,7 +590,7 @@ The APT line contains the type, location and sections of a channel, for example
</child>
<child>
- <widget class="GtkButton" id="button8">
+ <widget class="GtkButton" id="button_edit_ok">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
@@ -745,6 +745,7 @@ The APT line contains the type, location and sections of a channel, for example
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">True</property>
+ <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:14:17 GMT"/>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -756,27 +757,6 @@ The APT line contains the type, location and sections of a channel, for example
</child>
<child>
- <widget class="GtkEntry" id="entry_dist">
- <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">True</property>
- </widget>
- <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>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
<widget class="GtkEntry" id="entry_comps">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -787,6 +767,7 @@ The APT line contains the type, location and sections of a channel, for example
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">True</property>
+ <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:15:14 GMT"/>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -854,6 +835,7 @@ Source</property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">True</property>
+ <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:15:19 GMT"/>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -863,6 +845,28 @@ Source</property>
<property name="y_options"></property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkEntry" id="entry_dist">
+ <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">True</property>
+ <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:14:17 GMT"/>
+ </widget>
+ <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>
+ <property name="y_options"></property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
diff --git a/data/UpdateManager.glade b/data/UpdateManager.glade
index 525b329c..01660613 100644
--- a/data/UpdateManager.glade
+++ b/data/UpdateManager.glade
@@ -12,7 +12,6 @@
<property name="default_height">600</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
- <property name="icon">update-manager.png</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
@@ -42,9 +41,8 @@
<property name="spacing">12</property>
<child>
- <widget class="GtkImage" id="image4">
+ <widget class="GtkImage" id="image_logo">
<property name="visible">True</property>
- <property name="pixbuf">update-manager-logo.png</property>
<property name="xalign">0.5</property>
<property name="yalign">0</property>
<property name="xpad">0</property>
diff --git a/data/gnome-software-properties.glade b/data/gnome-software-properties.glade
deleted file mode 100644
index 66b7aa80..00000000
--- a/data/gnome-software-properties.glade
+++ /dev/null
@@ -1,2161 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="SoftwareConfigurator">
- <property name="border_width">6</property>
- <property name="height_request">400</property>
- <property name="title" translatable="yes">Software Preferences</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="default_width">400</property>
- <property name="default_height">500</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="icon">update-manager.png</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_CENTER</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">False</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox_main">
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button_cancel">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</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">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button_ok">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">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>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Software Sources&lt;/b&gt;</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">sourceslist</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="GtkHBox" id="hbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label25">
- <property name="visible">True</property>
- <property name="label"></property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkScrolledWindow" id="sourcesscroll">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="sourceslist">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">True</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- <signal name="row_activated" handler="on_sourceslist_row_activated" last_modification_time="Mon, 29 Nov 2004 10:55:04 GMT"/>
- <signal name="cursor_changed" handler="on_sourceslist_cursor_changed" last_modification_time="Thu, 03 Feb 2005 14:42:21 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVButtonBox" id="vbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_START</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button_add">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_add_clicked" last_modification_time="Thu, 03 Feb 2005 10:40:58 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button_add_cdrom">
- <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>
- <signal name="clicked" handler="on_button_add_cdrom_clicked" last_modification_time="Fri, 11 Mar 2005 16:19:38 GMT"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment3">
- <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="hbox29">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image4">
- <property name="visible">True</property>
- <property name="stock">gtk-cdrom</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="label64">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Add _CD</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>
-
- <child>
- <widget class="GtkButton" id="button_remove">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_remove_clicked" last_modification_time="Thu, 03 Feb 2005 10:41:09 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button_edit">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-edit</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_edit_clicked" last_modification_time="Thu, 03 Feb 2005 10:44:36 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</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="GtkHBox" id="hbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox6">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button_authentication">
- <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>
- <signal name="clicked" handler="on_button_authentication_clicked" last_modification_time="Wed, 05 Jan 2005 21:20:59 GMT"/>
-
- <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="hbox27">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image3">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-authentication</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="label60">
- <property name="visible">True</property>
- <property name="label" translatable="yes">A_uthentication</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>
-
- <child>
- <widget class="GtkButton" id="button_settings">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Settings</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_settings_clicked" last_modification_time="Tue, 22 Mar 2005 10:11:17 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog_add">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Edit Repository...</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button_custom">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Custom</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- <signal name="clicked" handler="on_button_custom_clicked" last_modification_time="Mon, 29 Nov 2004 11:06:40 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</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">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">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>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label31">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Repository&lt;/b&gt;</property>
- <property name="use_underline">False</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="GtkComboBox" id="combobox_what">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- <signal name="changed" handler="on_combobox_what_changed" last_modification_time="Thu, 25 Nov 2004 13:35:11 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label32">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Components&lt;/b&gt;</property>
- <property name="use_underline">False</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="GtkVBox" id="vbox_comps">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </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>
- <placeholder/>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog_add_custom">
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button5">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</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">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button6">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">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="hbox10">
- <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-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="label35">
- <property name="visible">True</property>
- <property name="label" translatable="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>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox7">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-question</property>
- <property name="icon_size">6</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</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">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label33">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Enter the complete APT line of the repository that you want to add&lt;/b&gt;&lt;/big&gt;
-
-The APT line contains the type, location and content of a repository, for example &lt;i&gt;&quot;deb http://ftp.debian.org sarge main&quot;&lt;/i&gt;. You can find a detailed description of the syntax in the documentation.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">True</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="GtkHBox" id="hbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkLabel" id="label34">
- <property name="visible">True</property>
- <property name="label" translatable="yes">APT line:</property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkEntry" id="entry_source_line">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_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">True</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">False</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>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog_edit">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Edit Repository...</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="default_width">400</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button7">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</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">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button8">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">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>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="n_rows">7</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label36">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Type:&lt;/b&gt;</property>
- <property name="use_underline">False</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">1</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="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="GtkLabel" id="label38">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;URI:&lt;/b&gt;</property>
- <property name="use_underline">False</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">1</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="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label39">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Distribution:&lt;/b&gt;</property>
- <property name="use_underline">False</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">1</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="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label40">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Sections:&lt;/b&gt;</property>
- <property name="use_underline">False</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">1</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="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry_uri">
- <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">True</property>
- </widget>
- <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>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry_dist">
- <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">True</property>
- </widget>
- <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>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry_comps">
- <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">True</property>
- </widget>
- <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>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="combobox_type">
- <property name="visible">True</property>
- <property name="items" translatable="yes">Binary
-Source</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</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="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label61">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Comment:&lt;/b&gt;</property>
- <property name="use_underline">False</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">1</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="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry_comment">
- <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">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog_apt_key">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Authentication</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox4">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button9">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</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">-7</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox8">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label41">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Authentication keys&lt;/b&gt;&lt;/big&gt;
-
-You can add and remove authentication keys in this dialog. A key makes it possible to verify the integrity of the software you download.</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</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="GtkHBox" id="hbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label42">
- <property name="visible">True</property>
- <property name="label"></property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="treeview_apt_key">
- <property name="height_request">300</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">True</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- <signal name="row_activated" handler="on_sourceslist_row_activated" last_modification_time="Mon, 29 Nov 2004 10:55:04 GMT"/>
- </widget>
- </child>
- </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="GtkHButtonBox" id="hbuttonbox5">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="button_apt_key_update">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Restore the default keys shipped with the distribution. This will not change user installed keys.</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Restore default keys</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_apt_key_update_clicked" last_modification_time="Mon, 31 Jan 2005 17:40:33 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button10">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Remove the selected key from the trusted keyring.</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_key_remove_clicked" last_modification_time="Wed, 05 Jan 2005 13:40:25 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button11">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Add a new key file to the trusted keyring. Make sure that you received the key over a secure channel and that you trust the owner. </property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_key_add_clicked" last_modification_time="Wed, 05 Jan 2005 13:40:19 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</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>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog_settings">
- <property name="title" translatable="yes">Settings</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button_preferences_close">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</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">-7</property>
- <signal name="clicked" handler="on_button_preferences_close_clicked" last_modification_time="Wed, 19 Jan 2005 14:54:37 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox9">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
-
- <child>
- <widget class="GtkVBox" id="vbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label62">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;User Interface&lt;/b&gt;</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="GtkHBox" id="hbox28">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label63">
- <property name="visible">True</property>
- <property name="label"> </property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkVBox" id="vbox16">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton_show_disabled">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show disabled software sources</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>
- <signal name="toggled" handler="on_checkbutton_show_disabled_toggled" last_modification_time="Thu, 03 Feb 2005 14:09:09 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </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>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label45">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Internet Updates&lt;/b&gt;</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="GtkHBox" id="hbox26">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label59">
- <property name="visible">True</property>
- <property name="label"> </property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkVBox" id="vbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton_autoupdate">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Automatically check for software _updates.</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="GtkVBox" id="vbox_autoupdate">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="hbox22">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label55">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Update interval in days: </property>
- <property name="use_underline">False</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</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">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="spinbutton_autoupdate">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">1 1 100 1 10 10</property>
- <signal name="changed" handler="on_spinbutton_update_interval_changed" last_modification_time="Wed, 19 Jan 2005 11:45:09 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</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="GtkCheckButton" id="checkbutton_autodownload">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Download upgradable packages</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>
- <signal name="toggled" handler="on_checkbutton_download_upgradable_toggled" last_modification_time="Wed, 19 Jan 2005 11:33:21 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </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>
- </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">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label56">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Temporary files&lt;/b&gt;</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="GtkHBox" id="hbox23">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label57">
- <property name="visible">True</property>
- <property name="label"> </property>
- <property name="use_underline">False</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>
-
- <child>
- <widget class="GtkVBox" id="vbox10">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton_autoclean">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Automatically clean _temporary packages files</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="GtkVBox" id="vbox_autoclean">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="hbox25">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label58">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Clean interval in days: </property>
- <property name="use_underline">False</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</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">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="spinbutton_autoclean">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">1 1 365 1 10 10</property>
- <signal name="changed" handler="on_spinbutton_autoclean_interval_changed" last_modification_time="Wed, 19 Jan 2005 11:45:16 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</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>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton_max_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Set _maximum size for the package cache</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="GtkVBox" id="vbox_max_size">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox30">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label65">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Maximum size in MB:</property>
- <property name="use_underline">False</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</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">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="spinbutton_max_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">500 1 9999 1 10 10</property>
- <signal name="changed" handler="on_spinbutton_max_size_changed" last_modification_time="Mon, 21 Mar 2005 17:33:58 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</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>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton_max_age">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Delete _old packages in the package cache</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="GtkVBox" id="vbox_max_age">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="hbox31">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label66">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Maximum age in days:</property>
- <property name="use_underline">False</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</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">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="spinbutton_max_age">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">30 2 365 1 10 10</property>
- <signal name="changed" handler="on_spinbutton_max_age_changed" last_modification_time="Mon, 21 Mar 2005 17:34:11 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</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>
- <placeholder/>
- </child>
- </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>
- </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">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/icons/16x16/apps/update-manager.png b/data/icons/16x16/apps/update-manager.png
new file mode 100644
index 00000000..58f19c68
--- /dev/null
+++ b/data/icons/16x16/apps/update-manager.png
Binary files differ
diff --git a/data/icons/22x22/apps/update-manager.png b/data/icons/22x22/apps/update-manager.png
new file mode 100644
index 00000000..5f7a362b
--- /dev/null
+++ b/data/icons/22x22/apps/update-manager.png
Binary files differ
diff --git a/data/icons/24x24/apps/update-manager.png b/data/icons/24x24/apps/update-manager.png
new file mode 100644
index 00000000..b49ea26f
--- /dev/null
+++ b/data/icons/24x24/apps/update-manager.png
Binary files differ
diff --git a/data/update-manager.png b/data/icons/48x48/apps/software-properties.png
index 739be699..739be699 100644
--- a/data/update-manager.png
+++ b/data/icons/48x48/apps/software-properties.png
Binary files differ
diff --git a/data/icons/scalable/apps/update-manager.svg b/data/icons/scalable/apps/update-manager.svg
new file mode 100644
index 00000000..834464ab
--- /dev/null
+++ b/data/icons/scalable/apps/update-manager.svg
@@ -0,0 +1,1519 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="system-software-update.svg"
+ sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/apps"
+ inkscape:version="0.43+devel"
+ sodipodi:version="0.32"
+ id="svg3440"
+ height="48px"
+ width="48px"
+ inkscape:export-filename="/home/jimmac/Desktop/big-software-update.png"
+ inkscape:export-xdpi="360.00000"
+ inkscape:export-ydpi="360.00000"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient264">
+ <stop
+ id="stop265"
+ offset="0.0000000"
+ style="stop-color:#000000;stop-opacity:0.50299400;" />
+ <stop
+ id="stop266"
+ offset="1.0000000"
+ style="stop-color:#000000;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ y2="31.490198"
+ x2="28.783722"
+ y1="29.943159"
+ x1="28.632685"
+ gradientTransform="matrix(0.810817,0.000000,0.000000,1.233324,1.118717,-4.642761)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient263"
+ xlink:href="#linearGradient264"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient218">
+ <stop
+ id="stop219"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.44910181;" />
+ <stop
+ id="stop222"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="22.227985"
+ x2="38.105118"
+ y1="22.227985"
+ x1="36.373066"
+ gradientTransform="matrix(1.138691,0.000000,0.000000,1.732051,-19.29901,-4.517761)"
+ id="linearGradient217"
+ xlink:href="#linearGradient218"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient204">
+ <stop
+ id="stop205"
+ offset="0.0000000"
+ style="stop-color:#7a7a7a;stop-opacity:1.0000000;" />
+ <stop
+ id="stop207"
+ offset="0.19801980"
+ style="stop-color:#c5c5c5;stop-opacity:1.0000000;" />
+ <stop
+ id="stop208"
+ offset="0.59900987"
+ style="stop-color:#626262;stop-opacity:1.0000000;" />
+ <stop
+ id="stop206"
+ offset="1.0000000"
+ style="stop-color:#888888;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="43.915466"
+ x2="23.100046"
+ y1="38.296745"
+ x1="23.100046"
+ gradientTransform="matrix(0.983801,0.000000,0.000000,1.016466,1.118717,-3.017762)"
+ id="linearGradient203"
+ xlink:href="#linearGradient204"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient178">
+ <stop
+ id="stop179"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+ <stop
+ id="stop180"
+ offset="0.10827128"
+ style="stop-color:#ffffff;stop-opacity:0.70658684;" />
+ <stop
+ id="stop181"
+ offset="0.92053902"
+ style="stop-color:#ffffff;stop-opacity:0.70658684;" />
+ <stop
+ id="stop182"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ y2="117.82710"
+ x2="15.343062"
+ y1="117.82710"
+ x1="1.6422368"
+ gradientTransform="matrix(2.740165,0.000000,0.000000,0.147685,1.118717,21.16806)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient177"
+ xlink:href="#linearGradient178"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="372.57819"
+ x2="5.0856376"
+ y1="372.57819"
+ x1="0.61210024"
+ gradientTransform="matrix(8.168597,0.000000,0.000000,0.228621,1.118717,-39.93197)"
+ id="linearGradient271"
+ xlink:href="#linearGradient272"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient272">
+ <stop
+ id="stop273"
+ offset="0.0000000"
+ style="stop-color:#474747;stop-opacity:0.0000000;" />
+ <stop
+ id="stop275"
+ offset="0.10000000"
+ style="stop-color:#474747;stop-opacity:1.0000000;" />
+ <stop
+ id="stop276"
+ offset="0.89999998"
+ style="stop-color:#474747;stop-opacity:1.0000000;" />
+ <stop
+ id="stop274"
+ offset="1.0000000"
+ style="stop-color:#474747;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ y2="372.57819"
+ x2="5.0856376"
+ y1="372.57819"
+ x1="0.61210024"
+ gradientTransform="matrix(8.168597,0.000000,0.000000,0.221210,1.118717,-41.93917)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient283"
+ xlink:href="#linearGradient272"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient158">
+ <stop
+ id="stop159"
+ offset="0.0000000"
+ style="stop-color:#686868;stop-opacity:0.0000000;" />
+ <stop
+ id="stop162"
+ offset="0.23762377"
+ style="stop-color:#686868;stop-opacity:1.0000000;" />
+ <stop
+ id="stop163"
+ offset="0.78109992"
+ style="stop-color:#686868;stop-opacity:1.0000000;" />
+ <stop
+ id="stop160"
+ offset="1.0000000"
+ style="stop-color:#686868;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ y2="117.82710"
+ x2="15.343062"
+ y1="117.82710"
+ x1="1.6422368"
+ gradientTransform="matrix(2.740165,0.000000,0.000000,0.364942,1.118717,-4.017762)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient175"
+ xlink:href="#linearGradient158"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient6377">
+ <stop
+ id="stop6379"
+ offset="0.0000000"
+ style="stop-color:#e02b2b;stop-opacity:1.0000000;" />
+ <stop
+ id="stop6381"
+ offset="1.0000000"
+ style="stop-color:#e02b2b;stop-opacity:0.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6361">
+ <stop
+ style="stop-color:#143b68;stop-opacity:1;"
+ offset="0"
+ id="stop6363" />
+ <stop
+ style="stop-color:#143b68;stop-opacity:0;"
+ offset="1"
+ id="stop6365" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4750">
+ <stop
+ id="stop4752"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4758"
+ offset="0.37931034"
+ style="stop-color:#fefefe;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4754"
+ offset="1.0000000"
+ style="stop-color:#1d1d1d;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4350"
+ inkscape:collect="always">
+ <stop
+ id="stop4352"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4354"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4126">
+ <stop
+ id="stop4128"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4130"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.16494845;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4114"
+ inkscape:collect="always">
+ <stop
+ id="stop4116"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop4118"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3962">
+ <stop
+ id="stop3964"
+ offset="0.0000000"
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4134"
+ offset="0.15517241"
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4346"
+ offset="0.75000000"
+ style="stop-color:#4074ae;stop-opacity:1.0000000;" />
+ <stop
+ id="stop3966"
+ offset="1.0000000"
+ style="stop-color:#36486c;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="29.993349"
+ fy="15.716079"
+ fx="18.247644"
+ cy="15.716079"
+ cx="18.247644"
+ gradientTransform="matrix(0.674967,0.000000,0.000000,0.674981,7.864706,3.589839)"
+ id="radialGradient3968"
+ xlink:href="#linearGradient3962"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="12.289036"
+ fy="63.965388"
+ fx="15.115514"
+ cy="63.965388"
+ cx="15.115514"
+ gradientTransform="scale(1.643990,0.608276)"
+ id="radialGradient4120"
+ xlink:href="#linearGradient4114"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="43.526714"
+ fy="12.142302"
+ fx="15.601279"
+ cy="12.142302"
+ cx="15.601279"
+ gradientTransform="matrix(0.674967,0.000000,0.000000,0.674981,7.864706,3.589839)"
+ id="radialGradient4132"
+ xlink:href="#linearGradient4126"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="32.664848"
+ fy="10.476453"
+ fx="11.826907"
+ cy="10.476453"
+ cx="11.826907"
+ gradientTransform="scale(1.179536,0.847791)"
+ id="radialGradient4356"
+ xlink:href="#linearGradient4350"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ id="radialGradient4756"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient6359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6361"
+ id="linearGradient6367"
+ gradientTransform="matrix(0.950176,0.000000,0.000000,1.250550,-2.628603,-7.378111)"
+ x1="12.190513"
+ y1="12.062389"
+ x2="17.850138"
+ y2="31.674618"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="linearGradient6375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.950176,-5.364674e-17,7.060588e-17,-1.250550,51.70714,46.10410)"
+ x1="9.7568795"
+ y1="12.524661"
+ x2="17.850138"
+ y2="31.674618" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="138"
+ inkscape:window-x="124"
+ inkscape:window-height="648"
+ inkscape:window-width="770"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="21.704468"
+ inkscape:cx="32.806152"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="0.16470588"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:showpageshadow="false" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Software Update</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>network update</rdf:li>
+ <rdf:li>software</rdf:li>
+ <rdf:li>synchronize</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <rect
+ y="36.982246"
+ x="6.1187172"
+ height="4.0000000"
+ width="36.542522"
+ id="rect69"
+ style="color:#000000;fill:url(#linearGradient175);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <path
+ transform="matrix(0.827148,0.000000,0.000000,1.028347,4.083229,-1.249916)"
+ d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1 4.6467018,38.908627 A 20.203051 7.4751287 0 1 1 45.052803 38.908627 z"
+ sodipodi:ry="7.4751287"
+ sodipodi:rx="20.203051"
+ sodipodi:cy="38.908627"
+ sodipodi:cx="24.849752"
+ id="path4112"
+ style="fill:url(#radialGradient4120);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ sodipodi:type="arc" />
+ <rect
+ y="39.984222"
+ x="6.1187172"
+ height="0.98959237"
+ width="36.542522"
+ id="rect255"
+ style="color:#000000;fill:url(#linearGradient283);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <rect
+ y="36.636272"
+ x="6.1187172"
+ height="1.0227470"
+ width="36.542522"
+ id="rect250"
+ style="color:#000000;fill:url(#linearGradient271);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <rect
+ y="37.759968"
+ x="6.1187172"
+ height="1.6187184"
+ width="36.542522"
+ id="rect176"
+ style="color:#000000;fill:url(#linearGradient177);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <path
+ id="rect183"
+ d="M 22.584707,26.450993 C 21.801233,26.450993 21.178457,27.073767 21.178457,27.857243 L 21.178457,35.450993 L 18.115957,35.450993 C 17.332483,35.450993 16.709707,36.073767 16.709707,36.857243 L 16.709707,40.575993 C 16.709707,41.359467 17.332483,41.982246 18.115957,41.982243 L 30.303457,41.982243 C 31.086931,41.982243 31.709707,41.359464 31.709707,40.575993 L 31.709707,36.857243 C 31.709707,36.073769 31.086931,35.450993 30.303457,35.450993 L 27.709707,35.450993 L 27.709707,27.857243 C 27.709707,27.073769 27.086932,26.450993 26.303457,26.450993 L 22.584707,26.450993 z "
+ style="color:#000000;fill:url(#linearGradient203);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#434343;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <rect
+ ry="0.29955584"
+ rx="0.29955584"
+ y="32.482246"
+ x="22.118719"
+ height="3.0000000"
+ width="1.9722718"
+ id="rect209"
+ style="color:#000000;fill:url(#linearGradient217);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <path
+ id="path3214"
+ d="M 37.536463,19.441939 C 37.536463,26.670720 31.676269,32.530847 24.448482,32.530847 C 17.220034,32.530847 11.360171,26.670654 11.360171,19.441939 C 11.360171,12.213491 17.220034,6.3539621 24.448482,6.3539621 C 31.676269,6.3539621 37.536463,12.213491 37.536463,19.441939 L 37.536463,19.441939 z "
+ style="fill:url(#radialGradient3968);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;stroke-width:2.0000000" />
+ <path
+ transform="matrix(0.564236,0.000000,0.000000,0.674974,14.53810,3.589842)"
+ d="M 30.708637 15.271057 A 12.929953 9.2934036 0 1 1 4.8487320,15.271057 A 12.929953 9.2934036 0 1 1 30.708637 15.271057 z"
+ sodipodi:ry="9.2934036"
+ sodipodi:rx="12.929953"
+ sodipodi:cy="15.271057"
+ sodipodi:cx="17.778685"
+ id="path4348"
+ style="opacity:0.42159382;fill:url(#radialGradient4356);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path258"
+ d="M 27.212467,32.185368 L 21.681217,32.185368 C 21.681217,32.185368 21.681217,33.872868 21.681217,34.357243 C 22.228092,32.575993 27.212467,32.185368 27.212467,32.185368 z "
+ style="color:#000000;fill:url(#linearGradient263);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <g
+ transform="matrix(0.663075,0.000000,0.000000,0.663075,7.946434,3.747052)"
+ style="fill:#000000;fill-opacity:0.71345031;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+ id="g4136">
+ <g
+ id="g4138">
+ <image
+ id="image4140"
+ transform="translate(23.74020,6.740200)"
+ href="62169F0D.png"
+ height="35.000000"
+ width="23.000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4142">
+ <path
+ id="path4144"
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z " />
+ </g>
+ </g>
+ <g
+ id="g4146">
+ <image
+ id="image4148"
+ transform="translate(24.74020,7.740200)"
+ href="62169F0E.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4150">
+ <path
+ id="path4152"
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000" />
+ </g>
+ </g>
+ <g
+ id="g4154">
+ <image
+ id="image4156"
+ transform="translate(17.74020,3.740200)"
+ href="62169F0F.png"
+ height="10.000000"
+ width="12.000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4158">
+ <path
+ id="path4160"
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000" />
+ </g>
+ </g>
+ <g
+ id="g4162">
+ <image
+ id="image4164"
+ transform="translate(26.74020,10.74020)"
+ href="62169F10.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4166">
+ <path
+ id="path4168"
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900" />
+ </g>
+ </g>
+ <g
+ id="g4170">
+ <image
+ id="image4172"
+ transform="translate(27.74020,9.740200)"
+ href="62169F11.png"
+ height="7.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4174">
+ <path
+ id="path4176"
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000" />
+ </g>
+ </g>
+ <g
+ id="g4178">
+ <image
+ id="image4180"
+ transform="translate(3.740200,6.740200)"
+ href="62169F12.png"
+ height="37.000000"
+ width="21.000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4182">
+ <path
+ id="path4184"
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000" />
+ </g>
+ </g>
+ <g
+ id="g4186">
+ <image
+ id="image4188"
+ transform="translate(15.74020,7.740200)"
+ href="62169F13.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4190">
+ <path
+ id="path4192"
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000" />
+ </g>
+ </g>
+ <g
+ id="g4194">
+ <image
+ id="image4196"
+ transform="translate(12.74020,5.740200)"
+ href="62169F14.png"
+ height="7.0000000"
+ width="9.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4198">
+ <path
+ id="path4200"
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000" />
+ </g>
+ </g>
+ <g
+ id="g4202">
+ <g
+ id="g4204"
+ style="opacity:0.75000000">
+ <path
+ d=""
+ id="path4206" />
+ </g>
+ <g
+ id="g4208">
+ <path
+ d=""
+ id="path4210" />
+ </g>
+ </g>
+ <g
+ id="g4212">
+ <g
+ id="g4214"
+ style="opacity:0.75000000">
+ <path
+ d=""
+ id="path4216" />
+ </g>
+ <g
+ id="g4218">
+ <path
+ d=""
+ id="path4220" />
+ </g>
+ </g>
+ <g
+ id="g4222">
+ <image
+ id="image4224"
+ transform="translate(14.74020,3.740200)"
+ href="2D44FCEC.png"
+ height="6.0000000"
+ width="8.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4226">
+ <path
+ id="path4228"
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000" />
+ </g>
+ </g>
+ <g
+ id="g4230">
+ <image
+ id="image4232"
+ transform="translate(16.74020,12.74020)"
+ href="2D44FCED.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000" />
+ <g
+ id="g4234">
+ <path
+ id="path4236"
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500" />
+ </g>
+ </g>
+ </g>
+ <g
+ style="fill:#ffffff;fill-opacity:0.95906430"
+ id="g236"
+ transform="translate(9.098961e-2,-3.064632)">
+ <rect
+ ry="0.50000000"
+ rx="0.50000000"
+ y="40.000000"
+ x="20.000000"
+ height="1.0000000"
+ width="10.000000"
+ id="rect226"
+ style="color:#000000;fill-rule:nonzero;stroke:none;stroke-width:1.1400000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" />
+ <path
+ transform="matrix(2.058824,0.000000,0.000000,2.058824,-19.49265,-43.10846)"
+ d="M 19.000000 40.625000 A 0.53125000 0.53125000 0 1 1 17.937500,40.625000 A 0.53125000 0.53125000 0 1 1 19.000000 40.625000 z"
+ sodipodi:ry="0.53125000"
+ sodipodi:rx="0.53125000"
+ sodipodi:cy="40.625000"
+ sodipodi:cx="18.468750"
+ id="path235"
+ style="color:#000000;fill-rule:nonzero;stroke:none;stroke-width:1.1400000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ transform="matrix(0.663075,0.000000,0.000000,0.663075,7.810068,3.610686)"
+ style="color:#000000;fill:url(#radialGradient6261);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0179454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3216">
+ <g
+ style="color:#000000;fill:url(#radialGradient6263);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3218">
+ <image
+ id="image3220"
+ transform="translate(23.74020,6.740200)"
+ href="62169F0D.png"
+ height="35.000000"
+ width="23.000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6265);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6267);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3222">
+ <path
+ style="color:#000000;fill:url(#radialGradient6269);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3224"
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z " />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6271);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3226">
+ <image
+ id="image3228"
+ transform="translate(24.74020,7.740200)"
+ href="62169F0E.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6273);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6275);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3230">
+ <path
+ style="color:#000000;fill:url(#radialGradient6277);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3232"
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6279);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3234">
+ <image
+ id="image3236"
+ transform="translate(17.74020,3.740200)"
+ href="62169F0F.png"
+ height="10.000000"
+ width="12.000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6281);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6283);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3238">
+ <path
+ style="color:#000000;fill:url(#radialGradient6285);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3240"
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6287);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3242">
+ <image
+ id="image3244"
+ transform="translate(26.74020,10.74020)"
+ href="62169F10.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6289);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6291);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3246">
+ <path
+ style="color:#000000;fill:url(#radialGradient6293);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3248"
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6295);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3250">
+ <image
+ id="image3252"
+ transform="translate(27.74020,9.740200)"
+ href="62169F11.png"
+ height="7.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6297);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6299);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3254">
+ <path
+ style="color:#000000;fill:url(#radialGradient6301);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3256"
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6303);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3258">
+ <image
+ id="image3260"
+ transform="translate(3.740200,6.740200)"
+ href="62169F12.png"
+ height="37.000000"
+ width="21.000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6305);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6307);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3262">
+ <path
+ style="color:#000000;fill:url(#radialGradient6309);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3264"
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6311);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3266">
+ <image
+ id="image3268"
+ transform="translate(15.74020,7.740200)"
+ href="62169F13.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6313);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6315);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3270">
+ <path
+ style="color:#000000;fill:url(#radialGradient6317);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3272"
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6319);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3274">
+ <image
+ id="image3276"
+ transform="translate(12.74020,5.740200)"
+ href="62169F14.png"
+ height="7.0000000"
+ width="9.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6321);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6323);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3278">
+ <path
+ style="color:#000000;fill:url(#radialGradient6325);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3280"
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6327);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3282">
+ <g
+ id="g3284"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6329);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ id="path3286"
+ style="color:#000000;fill:url(#radialGradient6331);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ d="" />
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6333);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3288">
+ <path
+ style="color:#000000;fill:url(#radialGradient6335);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3290"
+ d="" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6337);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3292">
+ <g
+ id="g3294"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6339);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ id="path3296"
+ style="color:#000000;fill:url(#radialGradient6341);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ d="" />
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6343);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3298">
+ <path
+ style="color:#000000;fill:url(#radialGradient6345);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3300"
+ d="" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6347);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3302">
+ <image
+ id="image3304"
+ transform="translate(14.74020,3.740200)"
+ href="2D44FCEC.png"
+ height="6.0000000"
+ width="8.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6349);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6351);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3306">
+ <path
+ style="color:#000000;fill:url(#radialGradient6353);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3308"
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000" />
+ </g>
+ </g>
+ <g
+ style="color:#000000;fill:url(#radialGradient6355);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3310">
+ <image
+ id="image3312"
+ transform="translate(16.74020,12.74020)"
+ href="2D44FCED.png"
+ height="5.0000000"
+ width="5.0000000"
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6357);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ style="color:#000000;fill:url(#radialGradient6359);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3314">
+ <path
+ style="color:#000000;fill:url(#radialGradient4756);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3316"
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500" />
+ </g>
+ </g>
+ </g>
+ <path
+ id="path4122"
+ d="M 36.871774,19.441963 C 36.871774,26.303627 31.309195,31.866145 24.448475,31.866145 C 17.587125,31.866145 12.024859,26.303564 12.024859,19.441963 C 12.024859,12.580614 17.587125,7.0186651 24.448475,7.0186651 C 31.309195,7.0186651 36.871774,12.580614 36.871774,19.441963 L 36.871774,19.441963 z "
+ style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient4132);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" />
+ <path
+ id="path5902"
+ d="M 5.3935749,10.941178 C 0.84819341,23.232818 9.4520542,34.433912 23.052696,34.433912 C 14.482897,34.433912 7.5108693,27.461952 7.5108693,18.892087 C 7.5108693,12.874995 11.030621,7.3515951 16.481428,4.8040746 L 0.53977192,8.6930816 L 5.3935749,10.941178 z "
+ style="fill:url(#linearGradient6367);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" />
+ <path
+ style="fill:url(#linearGradient6375);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+ d="M 43.684948,27.784836 C 48.230330,15.493195 39.626469,4.2921045 26.025828,4.2921045 C 34.595627,4.2921045 41.567654,11.264062 41.567654,19.833926 C 41.567654,25.851018 38.047903,31.374420 32.597096,33.921941 L 48.538752,30.032933 L 43.684948,27.784836 z "
+ id="path6369" />
+ </g>
+</svg>
diff --git a/data/gnome-software-properties.desktop.in b/data/software-properties.desktop.in
index 20f9d847..c125b4f7 100644
--- a/data/gnome-software-properties.desktop.in
+++ b/data/software-properties.desktop.in
@@ -2,8 +2,8 @@
_Name=Software Properties
_GenericName=Software Properties
_Comment=Configure software channels and internet updates
-Exec=gksu /usr/bin/gnome-software-properties
-Icon=update-manager
+Exec=gksu /usr/bin/software-properties
+Icon=software-properties
Terminal=false
X-MultipleArgs=false
Type=Application
diff --git a/data/update-manager-logo.png b/data/update-manager-logo.png
deleted file mode 100644
index 77c2c51c..00000000
--- a/data/update-manager-logo.png
+++ /dev/null
Binary files differ
diff --git a/data/update-manager.desktop.in b/data/update-manager.desktop.in
index 0116c78b..84e1e608 100644
--- a/data/update-manager.desktop.in
+++ b/data/update-manager.desktop.in
@@ -3,7 +3,7 @@ _Name=Update Manager
_GenericName=Update Manager
_Comment=Show and install available updates
Exec=gksu /usr/bin/update-manager
-Icon=update-manager.png
+Icon=update-manager
Terminal=false
Type=Application
Encoding=UTF-8
diff --git a/debian/changelog b/debian/changelog
index 586c1077..2484a06d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,8 +4,12 @@ update-manager (0.42.2ubuntu13) dapper; urgency=low
* UpdateManager/UpdateManager.py:
- fix in the get_changelog logic (ubuntu: #40058)
- correct a error in the changelog parser (ubuntu: #40060)
+ - fix download size reporting (ubuntu: #39579)
+ * debian/rules: added dh_iconcache
+ * setup.py: install the icons into the hicolor icon schema
+ (thanks to Sebastian Heinlein)
- --
+ -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 19 Apr 2006 14:44:14 +0200
update-manager (0.42.2ubuntu12) dapper; urgency=low
diff --git a/debian/rules b/debian/rules
index c8991957..44224c6f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -66,6 +66,7 @@ binary-arch: build install
dh_scrollkeeper
dh_installmime
dh_desktop
+ dh_iconcache
dh_gconf
dh_installexamples
# dh_install
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ed7c079a..c74e2d16 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -17,8 +17,8 @@ data/SoftwareProperties.glade
data/SoftwarePropertiesDialogs.glade
data/update-manager.desktop.in
data/update-manager.schemas.in
-data/gnome-software-properties.desktop.in
+data/software-properties.desktop.in
[type: gettext/rfc822deb] channels/Ubuntu.info.in
[type: gettext/rfc822deb] channels/Debian.info.in
[type: python] update-manager
-[type: python] gnome-software-properties
+[type: python] software-properties
diff --git a/setup.py b/setup.py
index 0ed64179..798fea0e 100755
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,19 @@ for filepath in glob.glob("po/mo/*/LC_MESSAGES/*.mo"):
targetpath = os.path.dirname(os.path.join("share/locale",lang))
I18NFILES.append((targetpath, [filepath]))
+ICONS = []
+for size in glob.glob("data/icons/*"):
+ for category in glob.glob("%s/*" % size):
+ icons = []
+ for icon in glob.glob("%s/*" % category):
+ icons.append(icon)
+ ICONS.append(("share/icons/hicolor/%s/%s" % \
+ (os.path.basename(size), \
+ os.path.basename(category)), \
+ icons))
+print ICONS
+
+
os.system("intltool-merge -d po data/update-manager.schemas.in"\
" build/update-manager.schemas")
@@ -42,29 +55,24 @@ setup(name='update-manager',
'UpdateManager.Common'
],
scripts=[
- 'gnome-software-properties',
+ 'software-properties',
'update-manager'
],
data_files=[
('share/update-manager/glade',
- glob.glob("data/*.glade")+
- ["data/update-manager-logo.png",
- "data/update-manager.png"]
+ glob.glob("data/*.glade")
),
('share/update-manager/channels',
glob.glob("channels/*")
),
('share/applications',
["data/update-manager.desktop",
- "data/gnome-software-properties.desktop"]
+ "data/software-properties.desktop"]
),
('share/gconf/schemas',
glob.glob("build/*.schemas")
),
- ('share/pixmaps',
- ["data/update-manager.png"]
- ),
- ] + I18NFILES + HELPFILES,
+ ] + I18NFILES + HELPFILES + ICONS,
)
diff --git a/gnome-software-properties b/software-properties
index 2e1d5da6..2e1d5da6 100644
--- a/gnome-software-properties
+++ b/software-properties
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 62ea2e68..00000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-exedir = $(prefix)/bin
-
-exe_SCRIPTS = update-manager
-
-properties_modules_DATA = utils.py
-properties_modulesdir = $(datadir)/update-manager/python
-
-
-EXTRA_DIST = update-manager.in \
- utils.py
diff --git a/src/aptsources.py.in b/src/aptsources.py.in
deleted file mode 100644
index 7badd141..00000000
--- a/src/aptsources.py.in
+++ /dev/null
@@ -1,442 +0,0 @@
-# aptsource.py.in - parse sources.list
-#
-# Copyright (c) 2004 Canonical
-# 2004 Michiel Sikkes
-#
-# Author: Michiel Sikkes <michiel@eyesopened.nl>
-# Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import string
-import gettext
-import re
-
-# actual source.list entries
-class SourceEntry:
-
- # works mostely like split but takes [] into account
- def mysplit(self, line):
- line = string.strip(line)
- pieces = []
- tmp = ""
- # we are inside a [..] block
- p_found = False
- space_found = False
- for i in range(len(line)):
- if line[i] == "[":
- p_found=True
- tmp += line[i]
- elif line[i] == "]":
- p_found=False
- tmp += line[i]
- elif space_found and not line[i].isspace(): # we skip one or more space
- space_found = False
- pieces.append(tmp)
- tmp = line[i]
- elif line[i].isspace() and not p_found: # found a whitespace
- space_found = True
- else:
- tmp += line[i]
- # append last piece
- if len(tmp) > 0:
- pieces.append(tmp)
- return pieces
-
-
- # parse a given source line and split it into the fields we need
- def parse(self,line):
- line = string.strip(self.line)
- #print line
- # check if the source is enabled/disabled
- if line == "" or line == "#":
- self.invalid = True
- return
- if line[0] == "#":
- self.disabled = True
- pieces = string.split(line[1:])
- # if it looks not like a disabled deb line return
- if not (pieces[0] == "deb" or pieces[0] == "deb-src"):
- self.invalid = True
- return
- else:
- line = line[1:]
- # check for another "#" in the line (this is treated as a comment)
- i = line.find("#")
- if i > 0:
- self.comment = line[i+1:]
- line = line[:i]
- # source is ok, split it and see what we have
- pieces = self.mysplit(line)
- # Type, deb or deb-src
- self.type = string.strip(pieces[0])
- # URI
- self.uri = string.strip(pieces[1])
- # distro and components (optional)
- # Directory or distro
- self.dist = string.strip(pieces[2])
- if len(pieces) > 3:
- # List of components
- self.comps = pieces[3:]
- else:
- self.comps = []
-
- #print self.__dict__
-
-
- # set enabled/disabled
- def set_enabled(self, new_value):
- self.disabled = not new_value
- # enable, remove all "#" from the start of the line
- if new_value == True:
- i=0
- self.line = string.lstrip(self.line)
- while self.line[i] == "#":
- i += 1
- self.line = self.line[i:]
- else:
- # disabled, add a "#"
- if string.strip(self.line)[0] != "#":
- self.line = "#" + self.line
-
-
- def __init__(self, line):
- self.invalid = False
- self.disabled = False
- self.type = ""
- self.uri = ""
- self.dist = ""
- self.comps = []
- self.comment = ""
- self.line = line
- self.parse(line)
-
-
- def str(self):
- return self.line
-
-
-def uniq(s):
- """ simple (and not efficient) way to return uniq list """
- u = []
- for x in s:
- if x not in u:
- u.append(x)
- return u
-
-
-# the SourceList file as a class
-class SourcesList:
- def __init__(self, file):
- self.list = [] # of Type SourceEntries
- self.load(file)
-
- def is_mirror(self, add_uri, orig_uri):
- """check if the given add_url is idential or a mirror of orig_uri
- e.g. add_uri = archive.ubuntu.com
- orig_uri = de.archive.ubuntu.com
- -> True
- """
- # remove traling spaces and "/"
- add_uri = add_uri.rstrip("/ ")
- orig_uri = orig_uri.rstrip("/ ")
- # uri is identical
- if add_uri == orig_uri:
- #print "Identical"
- return True
- # add uri is a master site and orig_uri has the from "XX.mastersite"
- # (e.g. de.archive.ubuntu.com)
- try:
- add_srv = add_uri.split("//")[1]
- orig_srv = orig_uri.split("//")[1]
- #print "%s == %s " % (add_srv, orig_srv)
- except IndexError: # ok, somethings wrong here
- #print "IndexError"
- return False
- if add_srv == orig_srv[3:]:
- #print "Mirror"
- return True
- return False
-
- def add(self, type, uri, dist, comps, comment="", pos=-1):
- # if there is a repo with the same (type, uri, dist) just add the
- # components
- for i in self.list:
- if i.type == type and self.is_mirror(uri,i.uri) and i.dist == dist:
- comps = uniq(i.comps + comps)
- # preserver mirror
- uri = i.uri
- # set to the old position and preserve comment
- comment = i.comment
- pos = self.list.index(i)
- self.list.remove(i)
- line = "%s %s %s" % (type,uri,dist)
- for c in comps:
- line = line + " " + c;
- if comment != "":
- line = "%s #%s\n" %(line,comment)
- line = line + "\n"
- self.list.insert(pos, SourceEntry(line))
-
- def remove(self, source_entry):
- self.list.remove(source_entry)
-
- def load(self,file):
- f = open(file, "r")
- lines = f.readlines()
- for line in lines:
- source = SourceEntry(line)
- self.list.append(source)
- f.close()
-
- def save(self,file):
- f=open(file,"w")
- for source in self.list:
- f.write(source.str())
- f.close()
-
-
-# templates for the add dialog
-class SourceEntryTemplate(SourceEntry):
- def __init__(self,a_type,uri,dist,description,comps):
- self.comps = []
- self.comps_descriptions = []
- self.type = a_type
- self.uri = uri
- self.dist = dist
- self.description = description
- self.comps = comps
-
-class SourceCompTemplate:
- def __init__(self, name, description, on_by_default):
- self.name = name
- self.description = description
- self.on_by_default = on_by_default
-
-class SourceEntryTemplates:
- def __init__(self):
- _ = gettext.gettext
- self.templates = []
-
- # ubuntu components templates
- ubuntu_comps = []
- ubuntu_comps.append(SourceCompTemplate("main",_("Officially supported"),True))
- ubuntu_comps.append(SourceCompTemplate("restricted",_("Restricted copyright"),True))
- ubuntu_comps.append(SourceCompTemplate("universe",_("Community maintained (Universe)"),False))
- ubuntu_comps.append(SourceCompTemplate("multiverse",_("Non-free (Multiverse)"),False))
-
- # ubuntu distro
- self.templates.append(SourceEntryTemplate("deb",
- "http://archive.ubuntu.com/ubuntu/",
- "breezy",
- "Ubuntu 5.10 \"Breezy Badger\"",
- ubuntu_comps ))
- self.templates.append(SourceEntryTemplate("deb",
- "http://security.ubuntu.com/ubuntu/",
- "breezy-security",
- _("Ubuntu 5.10 Security Updates"),
- ubuntu_comps))
- self.templates.append(SourceEntryTemplate("deb",
- "http://archive.ubuntu.com/ubuntu/",
- "breezy-updates",
- _("Ubuntu 5.10 Updates"),
- ubuntu_comps))
-
-
-# matcher class to make a source entry look nice
-# lots of predefined matchers to make it i18n/gettext friendly
-class SourceEntryMatcher:
- class MatchType:
- def __init__(self, a_type,a_descr):
- self.type = a_type
- self.description = a_descr
-
- class MatchDist:
- def __init__(self,a_uri,a_dist, a_descr,l_comps, l_comps_descr):
- self.uri = a_uri
- self.dist = a_dist
- self.description = a_descr
- self.comps = l_comps
- self.comps_descriptions = l_comps_descr
-
- def __init__(self):
- _ = gettext.gettext
- self.type_list = []
- self.type_list.append(self.MatchType("^deb$",_("Binary")))
- self.type_list.append(self.MatchType("^deb-src$",_("Source")))
-
- self.dist_list = []
-
- ubuntu_comps = ["^main$","^restricted$","^universe$","^multiverse$"]
- ubuntu_comps_descr = [_("Officially supported"),
- _("Restricted copyright"),
- _("Community maintained (Universe)"),
- _("Non-free (Multiverse)")]
- # CDs
- self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*4.10",
- ".*",
- _("CD") +
- " Ubuntu 4.10 \"Warty Warthog\"",
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*5.04",
- ".*",
- _("CD") +
- " Ubuntu 5.04 \"Hoary Hedgehog\"",
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*5.10",
- ".*",
- _("CD") +
- " Ubuntu 5.10 \"Breezy Badger\"",
- ubuntu_comps, ubuntu_comps_descr))
-
- # URIs
- # normal archive
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^warty$",
- "Ubuntu 4.10 \"Warty Warthog\"",
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^hoary$",
- "Ubuntu 5.04 \"Hoary Hedgehog\"",
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^breezy$",
- "Ubuntu 5.10 \"Breezy Badger\"",
- ubuntu_comps, ubuntu_comps_descr))
- # updates
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^hoary-updates$",
- _("Ubuntu 5.04 Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^breezy-updates$",
- _("Ubuntu 5.10 Updates"),
- ubuntu_comps, ubuntu_comps_descr))
-
- # security
- self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu",
- "^warty-security$",
- _("Ubuntu 4.10 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu",
- "^hoary-security$",
- _("Ubuntu 5.04 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu",
- "^breezy-security$",
- _("Ubuntu 5.10 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- # security (normal archive uri)
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^warty-security$",
- _("Ubuntu 4.10 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^hoary-security$",
- _("Ubuntu 5.04 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
- self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu",
- "^breezy-security$",
- _("Ubuntu 5.10 Security Updates"),
- ubuntu_comps, ubuntu_comps_descr))
-
-
- # DEBIAN
- debian_comps = ["^main$","^contrib$","^non-free$","^non-US$"]
- debian_comps_descr = [_("Officially supported"),
- _("Contributed software"),
- _("Non-free software"),
- _("US export restricted software")
- ]
-
- # dists by name
- self.dist_list.append(self.MatchDist(".*debian.org/debian",
- "^sarge$",
- "Debian 3.1 \"Sarge\"",
- debian_comps, debian_comps_descr))
- self.dist_list.append(self.MatchDist(".*debian.org/debian",
- "^woody$",
- "Debian 3.0 \"Woody\"",
- debian_comps, debian_comps_descr))
- # securtiy
- self.dist_list.append(self.MatchDist(".*security.debian.org",
- "^stable.*$",
- _("Debian Stable Security Updates"),
- debian_comps, debian_comps_descr))
- # dists by status
- self.dist_list.append(self.MatchDist(".*debian.org/debian",
- "^stable$",
- "Debian Stable",
- debian_comps, debian_comps_descr))
- self.dist_list.append(self.MatchDist(".*debian.org/debian",
- "^testing$",
- "Debian Testing",
- debian_comps, debian_comps_descr))
- self.dist_list.append(self.MatchDist(".*debian.org/debian",
- "^unstable$",
- "Debian Unstable \"Sid\"",
- debian_comps, debian_comps_descr))
-
- # non-us
- self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US",
- "^stable.*$",
- "Debian Non-US (Stable)",
- debian_comps, debian_comps_descr))
- self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US",
- "^testing.*$",
- "Debian Non-US (Testing)",
- debian_comps, debian_comps_descr))
- self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US",
- "^unstable.*$",
- "Debian Non-US (Unstable)",
- debian_comps, debian_comps_descr))
-
-
-
-
- def match(self,source):
- _ = gettext.gettext
- # some sane defaults first
- type_description = source.type
- dist_description = source.uri + " " + source.dist
- comp_description = ""
- for c in source.comps:
- comp_description = comp_description + " " + c
-
- for t in self.type_list:
- if re.match(t.type, source.type):
- type_description = _(t.description)
- break
-
- for d in self.dist_list:
- #print "'%s'" %source.uri
- if re.match(d.uri, source.uri) and re.match(d.dist,source.dist):
- dist_description = d.description
- comp_description = ""
- for c in source.comps:
- found = False
- for i in range(len(d.comps)):
- if re.match(d.comps[i], c):
- comp_description = comp_description+"\n"+d.comps_descriptions[i]
- found = True
- if found == False:
- comp_description = comp_description+" "+c
- break
-
-
- return (type_description,dist_description,comp_description)
-
-
diff --git a/src/dialog_add.py.in b/src/dialog_add.py.in
deleted file mode 100644
index 141fc009..00000000
--- a/src/dialog_add.py.in
+++ /dev/null
@@ -1,107 +0,0 @@
-# dialog_add.py.in - dialog to add a new repository
-#
-# Copyright (c) 2004 Canonical
-#
-# Author: Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import os
-import gobject
-import gtk
-import gtk.glade
-
-import aptsources
-
-class dialog_add:
- def __init__(self,parent,sourceslist):
- self.sourceslist = sourceslist
-
- # templates
- self.templatelist = aptsources.SourceEntryTemplates()
-
- # gtk stuff
- if os.path.exists("../data/gnome-software-properties.glade"):
- self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade")
- else:
- self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade")
-
- self.main = widget = self.gladexml.get_widget("dialog_add")
- self.main.set_transient_for(parent)
-
- combo = self.gladexml.get_widget("combobox_what")
- self.gladexml.signal_connect("on_combobox_what_changed", self.on_combobox_what_changed, None)
- # combox box needs
- cell = gtk.CellRendererText()
- combo.pack_start(cell, True)
- combo.add_attribute(cell, 'text', 0)
- self.fill_combo(combo)
- self.gladexml.signal_connect("on_button_custom_clicked",
- self.on_button_custom_clicked, None)
-
-
- def fill_combo(self,combo):
- liststore = gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_PYOBJECT)
- for item in self.templatelist.templates:
- liststore.append((item.description, item))
- combo.set_model(liststore)
- combo.set_active(0)
-
- def on_combobox_what_changed(self, combobox, user):
- #print "on_combobox_what_changed"
- vbox = self.gladexml.get_widget("vbox_comps")
- vbox.foreach(lambda widget,vbox: vbox.remove(widget), vbox)
- liststore = combobox.get_model()
- a_iter = liststore.iter_nth_child(None, combobox.get_active())
- (name, template) = liststore.get(a_iter, 0,1)
- self.selected = template
- comps = template.comps
- for c in comps:
- checkbox = gtk.CheckButton(c.description)
- checkbox.set_active(c.on_by_default)
- checkbox.set_data("name",c.name)
- vbox.pack_start(checkbox)
- checkbox.show()
-
- def on_button_custom_clicked(self, widget, data):
- #print "on_button_custom_clicked()"
- # this hide here is ugly :/
- self.main.hide()
- dialog = self.gladexml.get_widget("dialog_add_custom")
- res = dialog.run()
- dialog.hide()
- entry = self.gladexml.get_widget("entry_source_line")
- line = entry.get_text() + "\n"
- self.sourceslist.list.append(aptsources.SourceEntry(line))
- self.main.response(res)
-
- def get_enabled_comps(self, checkbutton):
- if checkbutton.get_active():
- self.selected_comps.append(checkbutton.get_data("name"))
-
- def run(self):
- res = self.main.run()
- if res == gtk.RESPONSE_OK:
- # add repository
- self.selected_comps = []
- vbox = self.gladexml.get_widget("vbox_comps")
- vbox.foreach(self.get_enabled_comps)
- self.sourceslist.add(self.selected.type,
- self.selected.uri,
- self.selected.dist,
- self.selected_comps)
- self.main.hide()
- return res
diff --git a/src/dialog_apt_key.py.in b/src/dialog_apt_key.py.in
deleted file mode 100644
index d11dfd0a..00000000
--- a/src/dialog_apt_key.py.in
+++ /dev/null
@@ -1,163 +0,0 @@
-# dialog_apt_key.py.in - edit the apt keys
-#
-# Copyright (c) 2004 Canonical
-#
-# Author: Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import os
-import gobject
-import gtk
-import gtk.glade
-import subprocess
-import gettext
-from utils import error
-from subprocess import PIPE
-
-# gettext convenient
-_ = gettext.gettext
-def dummy(e): return e
-N_ = dummy
-
-# some known keys
-N_("Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>")
-N_("Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>")
-
-class apt_key:
- def __init__(self):
- self.gpg = ["/usr/bin/gpg"]
- self.base_opt = self.gpg + ["--no-options", "--no-default-keyring",
- "--secret-keyring", "/etc/apt/secring.gpg",
- "--trustdb-name", "/etc/apt/trustdb.gpg",
- "--keyring", "/etc/apt/trusted.gpg"]
- self.list_opt = self.base_opt + ["--with-colons", "--batch",
- "--list-keys"]
- self.rm_opt = self.base_opt + ["--quiet", "--batch",
- "--delete-key", "--yes"]
- self.add_opt = self.base_opt + ["--quiet", "--batch",
- "--import"]
-
-
- def list(self):
- res = []
- #print self.list_opt
- p = subprocess.Popen(self.list_opt,stdout=PIPE).stdout
- for line in p.readlines():
- fields = line.split(":")
- if fields[0] == "pub":
- name = fields[9]
- res.append("%s %s\n%s" %((fields[4])[-8:],fields[5], _(name)))
- return res
-
- def add(self, filename):
- #print "request to add " + filename
- cmd = self.add_opt[:]
- cmd.append(filename)
- p = subprocess.Popen(cmd)
- return (p.wait() == 0)
-
- def update(self):
- cmd = ["/usr/bin/apt-key", "update"]
- p = subprocess.Popen(cmd)
- return (p.wait() == 0)
-
- def rm(self, key):
- #print "request to remove " + key
- cmd = self.rm_opt[:]
- cmd.append(key)
- p = subprocess.Popen(cmd)
- return (p.wait() == 0)
-
-class dialog_apt_key:
- def __init__(self, parent):
- # gtk stuff
- if os.path.exists("../data/gnome-software-properties.glade"):
- self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade")
- else:
- self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade")
- self.main = self.gladexml.get_widget("dialog_apt_key")
- self.main.set_transient_for(parent)
-
- self.gladexml.signal_connect("on_button_key_add_clicked",
- self.on_button_key_add_clicked)
- self.gladexml.signal_connect("on_button_key_remove_clicked",
- self.on_button_key_remove_clicked)
- self.gladexml.signal_connect("on_button_apt_key_update_clicked",
- self.on_button_apt_key_update_clicked)
-
- # create apt-key object (abstraction for the apt-key command)
- self.apt_key = apt_key()
-
- # get some widgets
- self.treeview_apt_key = self.gladexml.get_widget("treeview_apt_key")
- self.liststore_apt_key = gtk.ListStore(str)
- self.treeview_apt_key.set_model(self.liststore_apt_key)
- # Create columns and append them.
- tr = gtk.CellRendererText()
- tr.set_property("xpad", 10)
- tr.set_property("ypad", 10)
- c0 = gtk.TreeViewColumn("Key", tr, text=0)
- self.treeview_apt_key.append_column(c0)
- self.update_key_list()
-
- def on_button_apt_key_update_clicked(self, widget):
- self.apt_key.update()
- self.update_key_list()
-
- def on_button_key_add_clicked(self, widget):
- chooser = gtk.FileChooserDialog(title=_("Choose a key-file"),
- parent=self.main,
- buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_REJECT,
- gtk.STOCK_OK,gtk.RESPONSE_ACCEPT))
- res = chooser.run()
- chooser.hide()
- if res == gtk.RESPONSE_ACCEPT:
- #print chooser.get_filename()
- if not self.apt_key.add(chooser.get_filename()):
- error(self.main,
- _("Error importing selected file"),
- _("The selected file may not be a GPG key file "
- "or it might be corrupt."))
- self.update_key_list()
-
- def on_button_key_remove_clicked(self, widget):
- selection = self.treeview_apt_key.get_selection()
- (model,a_iter) = selection.get_selected()
- if a_iter == None:
- return
- key = model.get_value(a_iter,0)
- if not self.apt_key.rm(key[:8]):
- error(self.main,
- _("Error removing the key"),
- _("The key you selected could not be removed. "
- "Please report this as a bug."))
- self.update_key_list()
-
- def update_key_list(self):
- self.liststore_apt_key.clear()
- for key in self.apt_key.list():
- self.liststore_apt_key.append([key])
-
- def run(self):
- res = self.main.run()
- self.main.hide()
-
-
-if __name__ == "__main__":
- ui = dialog_apt_key(None)
- ui.run()
-
diff --git a/src/dialog_edit.py.in b/src/dialog_edit.py.in
deleted file mode 100644
index 02eac6c0..00000000
--- a/src/dialog_edit.py.in
+++ /dev/null
@@ -1,102 +0,0 @@
-# dialog_edit.py.in - edit a existing repository
-#
-# Copyright (c) 2004 Canonical
-#
-# Author: Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import os
-import gobject
-import gtk
-import gtk.glade
-
-import aptsources
-
-class dialog_edit:
- def __init__(self,parent,sourceslist,source_entry):
- self.sourceslist = sourceslist
- self.source_entry = source_entry
-
- # gtk stuff
- if os.path.exists("../data/gnome-software-properties.glade"):
- self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade")
- else:
- self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade")
- self.main = self.gladexml.get_widget("dialog_edit")
- self.main.set_transient_for(parent)
-
- # type
- combo_type = self.gladexml.get_widget("combobox_type")
- if source_entry.type == "deb":
- combo_type.set_active(0)
- elif source_entry.type == "deb-src":
- combo_type.set_active(1)
- else:
- print "Error, unknown source type: '%s'" % source_enrty.type
-
- # uri
- entry = self.gladexml.get_widget("entry_uri")
- entry.set_text(source_entry.uri)
-
- entry = self.gladexml.get_widget("entry_dist")
- entry.set_text(source_entry.dist)
-
- entry = self.gladexml.get_widget("entry_comps")
- comps = ""
- for c in source_entry.comps:
- if len(comps) > 0:
- comps = comps + " " + c
- else:
- comps = c
- entry.set_text(comps)
-
- entry = self.gladexml.get_widget("entry_comment")
- entry.set_text(source_entry.comment)
-
- def run(self):
- res = self.main.run()
- if res == gtk.RESPONSE_OK:
- # get values
- combo_type = self.gladexml.get_widget("combobox_type")
- if combo_type.get_active() == 0:
- line = "deb"
- else:
- line = "deb-src"
- entry = self.gladexml.get_widget("entry_uri")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_dist")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_comps")
- line = line + " " + entry.get_text()
-
- entry = self.gladexml.get_widget("entry_comment")
- if entry.get_text() != "":
- line = line + " #" + entry.get_text() + "\n"
- else:
- line = line + "\n"
-
- # change repository
- index = self.sourceslist.list.index(self.source_entry)
- self.sourceslist.list[index] = aptsources.SourceEntry(line)
- #self.sourceslist.add(self.selected.type,
- # self.selected.uri,
- # self.selected.dist,
- # self.selected_comps)
- self.main.hide()
- return res
diff --git a/src/dialog_settings.py.in b/src/dialog_settings.py.in
deleted file mode 100644
index cfa13e38..00000000
--- a/src/dialog_settings.py.in
+++ /dev/null
@@ -1,144 +0,0 @@
-# dialog_settings.py.in - edit some settings
-#
-# Copyright (c) 2005 Canonical
-#
-# Author: Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import gconf
-import apt_pkg
-import gtk
-import os
-
-periodicAptConfFile = "/etc/apt/apt.conf.d/10periodic"
-archiveAptConfFile = "/etc/apt/apt.conf.d/20archive"
-
-class dialog_settings:
- def save_periodic_config(self):
- #print "saving ..."
-
- # get the new values
- for key in self.conf_map:
- cb = self.gladexml.get_widget("checkbutton_%s"% key)
- sb = self.gladexml.get_widget("spinbutton_%s"% key)
- if cb and not cb.get_active():
- #print "%s=%s" % (self.conf_map[key], "0")
- apt_pkg.Config.Set(self.conf_map[key], "0")
- elif sb:
- value = sb.get_value()
- apt_pkg.Config.Set(self.conf_map[key], str(value))
- #print "%s=%s" % (self.conf_map[key], value)
-
- # special case for autodownload, it has the same interval as
- # Update-Package-Lists
- cb = self.gladexml.get_widget("checkbutton_autodownload")
- key = "autodownload"
- if cb.get_active():
- autoupdate = str(apt_pkg.Config.FindI("APT::Periodic::Update-Package-Lists"))
- apt_pkg.Config.Set(self.conf_map[key], autoupdate)
- else:
- apt_pkg.Config.Set(self.conf_map[key], "0")
-
-
- # write both config-prefixes to different files
- for (file, prefix) in ((periodicAptConfFile, "APT::Periodic"),
- (archiveAptConfFile, "APT::Archives")):
-
- content = []
- if os.path.isfile(file):
- content=open(file,"r").readlines()
-
- cnf = apt_pkg.Config.SubTree(prefix)
-
- f = open(file,"w+")
- for line in content:
- # don't write the udpated keys
- found = False
- for key in cnf.List():
- #print "%s=%s" % (key, cnf[key])
- if line.find("%s::%s" % (prefix,key)) >= 0:
- found = True
- break
- if not found:
- f.write(line)
- # write new keys
- for i in cnf.List():
- f.write("%s::%s \"%s\";\n" % (prefix,i,cnf.FindI((i))))
- f.close()
-
- def toggle_show_disabled(self, widget, data):
- self.show_disabled = widget.get_active()
- self.gconfclient.set_bool("/apps/gnome-software-properties/show_disabled",\
- self.show_disabled)
-
- def toggle_settings_cb(self, widget, data):
- mode = widget.get_active()
- self.gladexml.get_widget(data).set_sensitive(mode)
-
- def run(self):
- res = self.main_window.run()
- self.save_periodic_config()
- self.main_window.hide()
- return res
-
- def __init__(self, parent, glade):
-
- self.gladexml = glade
- self.main_window = self.gladexml.get_widget("dialog_settings")
- self.main_window.set_transient_for(parent)
- self.parent = parent
- self.gconfclient = gconf.client_get_default()
-
- # preferences entries
- self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled")
-
- checkbutton_show_disabled = self.gladexml.get_widget("checkbutton_show_disabled")
- checkbutton_show_disabled.set_active(self.show_disabled)
- checkbutton_show_disabled.connect("toggled", self.toggle_show_disabled, None)
-
-
- # apt-config
-
- # set the update stuff
- self.conf_map = {
- "autoupdate" : "APT::Periodic::Update-Package-Lists",
- "autodownload" : "APT::Periodic::Download-Upgradeable-Packages",
- "autoclean" : "APT::Periodic::AutocleanInterval",
- "max_size" : "APT::Archives::MaxSize",
- "max_age" : "APT::Archives::MaxAge"
- }
-
- for key in self.conf_map:
- value = apt_pkg.Config.FindI(self.conf_map[key])
- #print "%s=%s" % (key, value)
- cb = self.gladexml.get_widget("checkbutton_%s"% key)
- #if cb == None:
- # print "checkbutton_%s not found" % key
- sb = self.gladexml.get_widget("spinbutton_%s"% key)
- if sb != None:
- #print "setting %s to %s" % (key, value)
- sb.set_value(value)
- #else:
- # print "spinbutton_%s not found" % key
- box = self.gladexml.get_widget("vbox_%s"% key)
- #if box == None:
- # print "vbox_%s not found" % key
- if box and cb:
- cb.connect("toggled", self.toggle_settings_cb, ("vbox_%s" % key))
- if cb:
- cb.set_active(value)
-
diff --git a/src/gnome-software-properties.in b/src/gnome-software-properties.in
deleted file mode 100755
index 6c9b8d3b..00000000
--- a/src/gnome-software-properties.in
+++ /dev/null
@@ -1,332 +0,0 @@
-#!/usr/bin/python2.4
-# gnome-software-properties.in - edit /etc/apt/sources.list
-#
-# Copyright (c) 2004 Canonical
-# 2004 Michiel Sikkes
-#
-# Author: Michiel Sikkes <michiel@eyesopened.nl>
-# Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import pygtk
-import sys
-pygtk.require('2.0')
-import gtk
-import gtk.glade
-import gconf
-import gobject
-import os
-import gettext
-import re
-import string
-import time
-import tempfile
-import subprocess
-from optparse import OptionParser
-import apt_pkg
-
-sys.path.append("@prefix@/share/update-manager/python")
-
-import aptsources
-import dialog_add
-import dialog_edit
-import dialog_apt_key
-from dialog_settings import dialog_settings
-import shutil
-
-
-(LIST_MARKUP, LIST_ENABLED, LIST_ENTRY_OBJ) = range(3)
-
-class SoftwareConfigurator:
-
- def on_button_ok_clicked(self, widget, data):
- #self.save_periodic_config(periodicAptConfFile)
-
- location = "/etc/apt/sources.list"
- #backup first
- shutil.copy(location,location+".save")
- # write
- self.sourceslist.save(location)
-
- # write the source.list first, even if dirty=False, because
- # e.g. CD-ROM add does not set dirty variable even if it adds
- # something to the sources.list (but no reload needed)
- if self.dirty == False:
- gtk.main_quit()
- sys.exit(0)
-
- primary = "<span weight=\"bold\" size=\"larger\">" + _("Repositories "
- "changed") + "</span>"
- secondary = _("The repository information has changes. A backup copy of "
- "your sources.list is stored in %s.save. "
- "\n\n"
- "You need to reload the package list from the servers "
- "for your changes to take effect. Do you want to do this "
- "now?") % location
- dialog = gtk.MessageDialog(self.main_window,gtk.DIALOG_MODAL,
- gtk.MESSAGE_INFO,gtk.BUTTONS_YES_NO,"")
- dialog.set_markup(primary);
- dialog.format_secondary_text(secondary);
- #textview = gtk.TextView()
- #textview.set_editable(gtk.FALSE)
- #textbuffer = textview.get_buffer()
- #f = os.popen("/usr/bin/diff -u %s.save %s" % (location,location))
- #diff = f.read()
- #textbuffer.set_text(diff)
- #if f.close() != None:
- # win = gtk.ScrolledWindow()
- # win.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
- # win.add(textview)
- # win.set_size_request(400,300)
- # win.show()
- # dialog.vbox.pack_start(child = win, padding = 6)
- # textview.show()
- res = dialog.run()
- dialog.destroy()
- if res == gtk.RESPONSE_YES:
- self.main_window.hide()
- # we are in "no-update" mode, this is used when the calling application
- # wants to deal with this itself
- if options.no_update:
- gtk.main_quit()
- sys.exit(1)
- child = subprocess.Popen(["/usr/sbin/synaptic", "--update-at-startup",
- "--hide-main-window","--non-interactive"],
- close_fds=True)
- # wait for the child to finish
- while child.poll() == None:
- time.sleep(0.05)
- while gtk.events_pending():
- gtk.main_iteration()
- gtk.main_quit()
- sys.exit(1)
- gtk.main_quit()
- sys.exit(0)
-
- def on_button_edit_clicked(self, widget, data):
- selection = self.sourceslist_view.get_selection()
- (model, iter) = selection.get_selected()
- source_entry = model.get_value(iter, LIST_ENTRY_OBJ)
- edit = dialog_edit.dialog_edit(self.main_window,self.sourceslist,
- source_entry)
- if edit.run() == gtk.RESPONSE_OK:
- self.reloadsources(self.sourceslist,self.matcher)
- self.dirty = True
-
- def on_sourceslist_selection_changed(self, selection, data):
- (model, iter) = selection.get_selected()
- if iter != None:
- self.button_del.set_sensitive(True)
- self.button_edit.set_sensitive(True)
- else:
- self.button_del.set_sensitive(False)
- self.button_edit.set_sensitive(False)
-
- #def on_sourceslist_row_activated(self, treeview, path, column, data):
- # #print "on_row_activated()"
- # model = treeview.get_model()
- # source_entry = model.get_value(model.get_iter(path), LIST_ENTRY_OBJ)
- # edit = dialog_edit.dialog_edit(self.main_window,self.sourceslist,
- # source_entry)
- # edit.run()
- # self.reloadsources(self.sourceslist,self.matcher)
-
- def on_button_remove_clicked(self, widget, data):
- selection = self.sourceslist_view.get_selection()
- (model,a_iter) = selection.get_selected()
- if a_iter == None:
- return
- source = model.get_value(a_iter, LIST_ENTRY_OBJ)
- self.sourceslist.remove(source)
- self.reloadsources(self.sourceslist,self.matcher)
- self.dirty=True
-
- def on_button_add_clicked(self, widget, data):
- add = dialog_add.dialog_add(self.main_window,self.sourceslist)
- if add.run() == gtk.RESPONSE_OK:
- self.reloadsources(self.sourceslist,self.matcher)
- self.dirty=True
-
- def on_button_settings_clicked(self, widget, data):
- settings = dialog_settings(self.main_window, self.gladexml)
- settings.run()
- self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled")
- self.c_enabled.set_property("visible", self.show_disabled)
- self.reloadsources(self.sourceslist, self.matcher)
-
- def on_button_add_cdrom_clicked(self, widget, data):
- tmp = tempfile.NamedTemporaryFile()
- cmd = ["/usr/sbin/synaptic", "--hide-main-window", "--non-interactive",
- "-o","Dir::Etc::sourcelist=%s" % tmp.name,"--ask-cdrom" ]
- self.main_window.set_sensitive(False)
- proc = subprocess.Popen(cmd)
- # wait for process to finish
- while proc.poll() == None:
- while gtk.events_pending():
- gtk.main_iteration()
- time.sleep(0.05)
- self.main_window.set_sensitive(True)
- # read tmp file with source name
- line = ""
- for x in open(tmp.name):
- line = x
- if line != "":
- self.sourceslist.list.append(aptsources.SourceEntry(line))
- self.reloadsources(self.sourceslist,self.matcher)
- #self.dirty=True # no need here
-
- def on_button_authentication_clicked(self, widget, data):
- auth = dialog_apt_key.dialog_apt_key(self.main_window)
- auth.run()
-
- def reloadsources(self, sourceslist, matcher):
- #self.meta = meta_data()
- self.sourcesstore.clear()
- for source in sourceslist.list:
- if source.invalid or (source.disabled and not self.show_disabled):
- continue
- (a_type,dist,comps) = matcher.match(source)
- contents = ""
- if source.comment != "":
- contents += "<i>%s</i>\n\n" % (source.comment)
- contents +="<big><b>%s </b></big> (%s) <small>\n%s</small>" % (dist,a_type, comps)
- iter = self.sourcesstore.append([contents, not source.disabled, source])
-
- def show_help(self, widget, data):
- print "self.show_help() called"
-
- # toggled on/off a source in the listview
- def toggled_enabled(self, renderer, path_string):
- iter = self.sourcesstore.get_iter_from_string(path_string)
- source = self.sourcesstore.get_value(iter, LIST_ENTRY_OBJ)
- self.dirty=True
- if self.sourcesstore.get_value(iter, LIST_ENABLED):
- self.sourcesstore.set_value(iter, LIST_ENABLED, False)
- source.set_enabled(False)
- else:
- self.sourcesstore.set_value(iter, LIST_ENABLED, True)
- source.set_enabled(True)
-
- def __init__(self):
- self.gconfclient = gconf.client_get_default()
-
- if os.path.exists("../data/gnome-software-properties.glade"):
- self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade")
- else:
- self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade")
-
- # do we show disabled sources?
- self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled")
- self.main_window = self.gladexml.get_widget("SoftwareConfigurator")
- # button on the right
- self.gladexml.signal_connect("on_button_edit_clicked",
- self.on_button_edit_clicked, None)
- self.button_edit = self.gladexml.get_widget("button_edit")
- self.button_del = self.gladexml.get_widget("button_remove")
-
- # Gets the treeview and creates a store for it.
- self.sourceslist_view = self.gladexml.get_widget("sourceslist")
- self.sourcesstore = gtk.ListStore(str, bool,gobject.TYPE_PYOBJECT)
- self.sourceslist_view.set_model(self.sourcesstore)
- #self.gladexml.signal_connect("on_sourceslist_row_activated",
- # self.on_sourceslist_row_activated, None)
- self.sourceslist_view.get_selection().connect("changed", self.on_sourceslist_selection_changed, None)
-
- # was something modified
- self.dirty=False
-
- # Create columns and append them.
- cr = gtk.CellRendererToggle()
- cr.set_property("activatable", True)
- cr.set_property("xpad", 10)
- cr.set_property("ypad", 10)
- cr.connect("toggled", self.toggled_enabled)
- self.c_enabled = gtk.TreeViewColumn("Enabled", cr, active=LIST_ENABLED)
- self.sourceslist_view.append_column(self.c_enabled)
- self.c_enabled.set_property("visible", self.show_disabled)
-
- tr = gtk.CellRendererText()
- tr.set_property("xpad", 10)
- tr.set_property("ypad", 10)
- c0 = gtk.TreeViewColumn("Entry", tr, markup=LIST_MARKUP)
- self.sourceslist_view.append_column(c0)
-
- self.sourceslist = aptsources.SourcesList("@sysconfdir@/apt/sources.list")
- self.matcher = aptsources.SourceEntryMatcher()
- # Empty and fill the sources store.
- self.reloadsources(self.sourceslist,self.matcher)
-
- self.main_window = self.gladexml.get_widget("SoftwareConfigurator")
- self.main_window.connect("delete_event", lambda widget,ev: gtk.main_quit())
-
- okbutton = self.gladexml.get_widget("button_ok")
- okbutton.connect("clicked", self.on_button_ok_clicked, None)
-
- cancelbutton = self.gladexml.get_widget("button_cancel")
- cancelbutton.connect("clicked", lambda w,v: gtk.main_quit(), None)
-
- self.gladexml.signal_connect("on_button_add_clicked", self.on_button_add_clicked, None)
- self.gladexml.signal_connect("on_button_add_cdrom_clicked", self.on_button_add_cdrom_clicked, None)
- self.gladexml.signal_connect("on_button_remove_clicked", self.on_button_remove_clicked, None)
- self.gladexml.signal_connect("on_button_authentication_clicked", self.on_button_authentication_clicked, None)
-
- # settings
- self.gladexml.signal_connect("on_button_settings_clicked", self.on_button_settings_clicked, None)
-
- self.main_window.show()
- if options.toplevel != None:
- # don't show the add-cdrom button for now
- # FIXME: on the long run interface with apt-pkg/cdrom.h
- b = self.gladexml.get_widget("button_add_cdrom")
- b.hide()
- toplevel = gtk.gdk.window_foreign_new(int(options.toplevel))
- self.main_window.window.set_transient_for(toplevel)
-
-
- # init the config
- apt_pkg.InitConfig()
-
- def main(self):
- gtk.main()
-
-
-if __name__ == "__main__":
- APP="update-manager"
- DIR="@prefix@/share/locale"
- gettext.bindtextdomain(APP, DIR)
- gettext.textdomain(APP)
- gtk.glade.bindtextdomain(APP, DIR)
- gtk.glade.textdomain(APP)
- _ = gettext.gettext
- #print "Software Configurator started..."
-
- # add option parser
- parser = OptionParser()
- parser.add_option("-n", "--no-update", action="store_true",
- dest="no_update", default=False,
- help="No update on repository change (usefull if called "\
- "from a external program).")
- parser.add_option("-t", "--toplevel",
- action="store", type="string", dest="toplevel",
- help="Set x-window-id of the toplevel parent for the "\
- "dialog (usefull for embedding)")
-
-
- (options, args) = parser.parse_args()
- ui = SoftwareConfigurator()
- ui.main()
- #print "Software Configurator ended..."
diff --git a/src/update-manager b/src/update-manager
deleted file mode 100644
index 5ab60e43..00000000
--- a/src/update-manager
+++ /dev/null
@@ -1,871 +0,0 @@
-#!/usr/bin/python2.4
-# update-manager.in - easy updating application
-#
-# Copyright (c) 2004 Canonical
-# 2004 Michiel Sikkes
-#
-# Author: Michiel Sikkes <michiel@eyesopened.nl>
-# Michael Vogt <mvo@debian.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
-
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gtk.gdk
-import gtk.glade
-import gobject
-import gnome
-import apt_pkg
-import gettext
-import copy
-import string
-import sys
-import os
-import os.path
-import urllib2
-import re
-import thread
-import tempfile
-import time
-import rfc822
-import gconf
-import pango
-import subprocess
-import pwd
-import xml.sax.saxutils
-
-
-# FIXME:
-# - cary a reference to the update-class around in the ListStore
-# - kill "all_changes" and move the changes into the "Update" class
-
-# list constants
-(LIST_INSTALL, LIST_CONTENTS, LIST_NAME, LIST_SHORTDESC,
- LIST_VERSION, LIST_LONG_DESCR, LIST_PKG) = range(7)
-
-# actions for "invoke_manager"
-(INSTALL, UPDATE) = range(2)
-
-SYNAPTIC_PINFILE = "/var/lib/synaptic/preferences"
-
-METARELEASE_URI = "http://changelogs.ubuntu.com/meta-release"
-#METARELEASE_URI = "http://people.ubuntu.com/~mvo/meta-release-test"
-METARELEASE_FILE = "/var/lib/update-manager/meta-release"
-
-CHANGELOGS_URI="http://changelogs.ubuntu.com/changelogs/pool/%s/%s/%s/%s_%s/changelog"
-
-# fixme: use a utils package for this sort of stuff
-def str_to_bool(str):
- if str == "0" or str.upper() == "FALSE":
- return False
- return True
-
-def utf8(str):
- return unicode(str, 'latin1').encode('utf-8')
-
-class Update:
-
- def __init__(self, package, cache, records, depcache):
- #package = cache[name]
- name = package.Name
- version = depcache.GetCandidateVer(package)
- file, index = version.FileList.pop(0)
- records.Lookup((file, index))
-
- self.name = name
- self.version = version.VerStr
- self.shortdesc = records.ShortDesc
- self.longdesc = ""
- self.size = version.Size
-
- longdesc = records.LongDesc
- lines = longdesc.split("\n")
- lines.pop(0)
- for line in lines:
- line = line[1:]
- first_char = string.strip(line)[0]
- if line == ".":
- self.longdesc = self.longdesc + "\n"
- else:
- self.longdesc = self.longdesc + line + "\n"
-
-class UpdateList:
- def __init__(self, parent_window):
- self.pkgs = []
- self.num_updates = 0
- self.parent_window = parent_window
-
- def saveDistUpgrade(self, cache, depcache):
- """ this functions mimics a upgrade but will never remove anything """
- depcache.Upgrade(True)
- if depcache.DelCount > 0:
- # nice try, falling back
- for pkg in cache.Packages:
- depcache.MarkKeep(pkg)
- assert depcache.BrokenCount == 0 and depcache.DelCount == 0
- depcache.Upgrade()
-
- def update(self, cache, records, depcache):
- held_back = []
- broken = []
- self.saveDistUpgrade(cache, depcache)
- for pkg in cache.Packages:
- if depcache.MarkedUpgrade(pkg) or depcache.MarkedInstall(pkg):
- self.pkgs.append(Update(pkg, cache, records, depcache))
- self.num_updates = self.num_updates + 1
- elif depcache.IsInstBroken(pkg) or depcache.IsNowBroken(pkg):
- broken.append(pkg.Name)
- elif pkg.CurrentVer != None and depcache.IsUpgradable(pkg):
- #print "MarkedKeep: %s " % pkg.Name
- held_back.append(pkg.Name)
- self.pkgs.sort(lambda x,y: cmp(x.name,y.name))
- if depcache.BrokenCount > 0:
- # FIXME: show what packages are broken
- msg=("<big><b>%s</b></big>\n\n%s"%(_("Your system has broken packages!"),
- _("This means that some dependencies "
- "of the installed packages are not "
- "satisfied. Please use \"Synaptic\" "
- "or \"apt-get\" to fix the "
- "situation."
- )))
- dialog = gtk.MessageDialog(self.parent_window, 0, gtk.MESSAGE_ERROR,
- gtk.BUTTONS_OK,"")
- dialog.set_markup(msg)
- dialog.vbox.set_spacing(6)
- dialog.run()
- dialog.destroy()
- sys.exit(1)
- if depcache.KeepCount > 0:
- #print "WARNING, keeping packages"
- msg=("<big><b>%s</b></big>\n\n%s"%(_("It is not possible to upgrade "
- "all packages."),
- _("This means that "
- "besides the actual upgrade of the "
- "packages some further action "
- "(such as installing or removing "
- "packages) "
- "is required. Please use Synaptic "
- "\"Smart Upgrade\" or "
- "\"apt-get dist-upgrade\" to fix "
- "the situation."
- )))
- dialog = gtk.MessageDialog(self.parent_window, 0, gtk.MESSAGE_INFO,
- gtk.BUTTONS_OK,"")
- dialog.set_default_response(gtk.RESPONSE_OK)
- dialog.set_markup(msg)
- dialog.vbox.set_spacing(6)
- label = gtk.Label(_("The following packages are not upgraded: "))
- label.set_alignment(0.0,0.5)
- dialog.set_border_width(6)
- label.show()
- dialog.vbox.pack_start(label)
- scroll = gtk.ScrolledWindow()
- scroll.set_size_request(-1,200)
- scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- text = gtk.TextView()
- text.set_editable(False)
- text.set_cursor_visible(False)
- buf = text.get_buffer()
- held_back.sort()
- buf.set_text("\n".join(held_back))
- scroll.add(text)
- dialog.vbox.pack_start(scroll)
- scroll.show_all()
- dialog.run()
- dialog.destroy()
-
-
-class UpdateManager:
-
- # FIXME: wrong location for this func
- # don't touch the gui in this function, it needs to be thread-safe
- def get_changelog(self, name, lock):
- pkg = self.cache[name]
-
- # FIXME: not correct, need to get canidateVer
- version = self.depcache.GetCandidateVer(pkg)
- file, index = version.FileList.pop(0)
- self.records.Lookup((file, index))
- if self.records.SourcePkg != "":
- srcpkg = self.records.SourcePkg
- else:
- srcpkg = name
-
- src_section = "main"
- l = string.split(pkg.Section,"/")
- if len(l) > 1:
- sec_section = l[0]
-
- prefix = srcpkg[0]
- if srcpkg.startswith("lib"):
- prefix = "lib" + srcpkg[3]
-
- verstr = version.VerStr
- l = string.split(verstr,":")
- if len(l) > 1:
- verstr = l[1]
-
- try:
- uri = CHANGELOGS_URI % (src_section,prefix,srcpkg,srcpkg, verstr)
- changelog = urllib2.urlopen(uri)
- #print changelog.read()
- # do only get the lines that are new
- alllines = ""
- regexp = "^%s \((.*)\)(.*)$" % (srcpkg)
-
- i=0
- while True:
- line = changelog.readline()
- #print line
- if line == "":
- break
- match = re.match(regexp,line)
- if match:
- if apt_pkg.VersionCompare(match.group(1),pkg.CurrentVer.VerStr) <= 0:
- break
- # EOF (shouldn't really happen)
- alllines = alllines + line
-
- # only write if we where not canceld
- if lock.locked():
- self.all_changes[name] = [alllines, srcpkg]
- except urllib2.HTTPError:
- if lock.locked():
- self.all_changes[name] = [_("Changes not found, the server may not be updated yet."), srcpkg]
- except IOError:
- if lock.locked():
- self.all_changes[name] = [_("Failed to download changes. Please check if there is an active internet connection."), srcpkg]
- if lock.locked():
- lock.release()
-
- def set_changes_buffer(self, changes_buffer, text, name, srcpkg):
- changes_buffer.set_text("")
- lines = text.split("\n")
- if len(lines) == 1:
- changes_buffer.set_text(text)
- return
-
- for line in lines:
-
- end_iter = changes_buffer.get_end_iter()
-
- version_match = re.match("^%s \((.*)\)(.*)$" % (srcpkg), line)
- #bullet_match = re.match("^.*[\*-]", line)
- author_match = re.match("^.*--.*<.*@.*>.*$", line)
- if version_match:
- version = version_match.group(1)
- version_text = _("Version %s: \n") % version
- changes_buffer.insert_with_tags_by_name(end_iter, version_text, "versiontag")
- # mvo: disabled for now as it does not catch multi line entries
- # (see ubuntu #7034 for rational)
- #elif bullet_match and not author_match:
- # bullet_text = " " + line + "\n"
- # changes_buffer.insert(end_iter, bullet_text)
- elif (author_match):
- pass
- #chanages_buffer.insert(end_iter, "\n")
- else:
- changes_buffer.insert(end_iter, line+"\n")
-
-
- def cursor_changed(self, widget):
- tuple = widget.get_cursor()
- path = tuple[0]
- # check if we have a path at all
- if path == None:
- return
- model = widget.get_model()
- iter = model.get_iter(path)
-
- # set descr
- long_desc = model.get_value(iter, 5)
- if long_desc == None:
- return
- desc_buffer = self.DescView.get_buffer()
- desc_buffer.set_text(utf8(long_desc))
-
- # now do the changelog
- name = model.get_value(iter, 2)
- if name == None:
- return
-
- changes_buffer = self.ChangesView.get_buffer()
-
- # check if we have the changes already
- if self.all_changes.has_key(name):
- changes = self.all_changes[name]
- self.set_changes_buffer(changes_buffer, changes[0], name, changes[1])
- else:
- if self.expander.get_expanded():
- self.treeview.set_sensitive(False)
- self.Glade.get_widget("hbox_footer").set_sensitive(False)
- lock = thread.allocate_lock()
- lock.acquire()
- t=thread.start_new_thread(self.get_changelog,(name,lock))
- changes_buffer.set_text(_("Downloading changes..."))
- button = self.Glade.get_widget("button_cancel_dl_changelog")
- button.show()
- id = button.connect("clicked",
- lambda w,lock: lock.release(), lock)
- # wait for the dl-thread
- while lock.locked():
- time.sleep(0.05)
- while gtk.events_pending():
- gtk.main_iteration()
- # download finished (or canceld, or time-out)
- button.hide()
- button.disconnect(id);
- self.treeview.set_sensitive(True)
- self.Glade.get_widget("hbox_footer").set_sensitive(True)
-
- if self.all_changes.has_key(name):
- changes = self.all_changes[name]
- self.set_changes_buffer(changes_buffer, changes[0], name, changes[1])
-
- def remove_update(self, pkg):
- name = pkg.name
- if name in self.packages:
- self.packages.remove(name)
- self.dl_size -= pkg.size
- if len(self.packages) == 0:
- self.installbutton.set_sensitive(False)
- self.update_count()
-
- def add_update(self, pkg):
- name = pkg.name
- if name not in self.packages:
- self.packages.append(name)
- self.dl_size += pkg.size
- if len(self.packages) > 0:
- self.installbutton.set_sensitive(True)
- self.update_count()
-
- def update_count(self):
- text = "%i (%s)" % (len(self.packages),
- apt_pkg.SizeToStr(self.dl_size))
- self.NumUpdates.set_text(text)
-
- def activate_details(self, expander, data):
- expanded = self.expander.get_expanded()
- self.gconfclient.set_bool("/apps/update-manager/show_details",expanded)
- if expanded:
- self.cursor_changed(self.treeview)
-
- def run_synaptic(self, id, action, lock):
- apt_pkg.PkgSystemUnLock()
- cmd = ["/usr/sbin/synaptic", "--hide-main-window", "--non-interactive",
- "--plug-progress-into", "%s" % (id) ]
- if action == INSTALL:
- cmd.append("--set-selections")
- cmd.append("--progress-str")
- cmd.append("%s" % _("The updates are being applied."))
- cmd.append("--finish-str")
- cmd.append("%s" % _("Upgrade finished"))
- proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)
- f = proc.stdin
- for s in self.packages:
- f.write("%s\tinstall\n" % s)
- f.close()
- proc.wait()
- elif action == UPDATE:
- cmd.append("--update-at-startup")
- subprocess.call(cmd)
- else:
- print "run_synaptic() called with unknown action"
- sys.exit(1)
-
- # use this once gksudo does propper reporting
- #if os.geteuid() != 0:
- # if os.system("gksudo /bin/true") != 0:
- # return
- # cmd = "sudo " + cmd;
- lock.release()
-
- def plug_removed(self, w, (win,socket)):
- #print "plug_removed"
- # plug was removed, but we don't want to get it removed, only hiden
- # unti we get more
- win.hide()
- return True
-
- def plug_added(self, sock, win):
- win.show()
- while gtk.events_pending():
- gtk.main_iteration()
-
- def on_button_reload_clicked(self, widget):
- #print "on_button_reload_clicked"
- self.invoke_manager(UPDATE)
-
- def on_button_help_clicked(self, widget):
- gnome.help_display_desktop(self.gnome_program, "update-manager", "update-manager", "")
-
- def on_button_install_clicked(self, widget):
- #print "on_button_install_clicked"
- self.invoke_manager(INSTALL)
-
- def invoke_manager(self, action):
- # check first if no other package manager is runing
- import struct, fcntl
- lock = os.path.dirname(apt_pkg.Config.Find("Dir::State::status"))+"/lock"
- lock_file= open(lock)
- flk=struct.pack('hhllhl',fcntl.F_WRLCK,0,0,0,0,0)
- try:
- rv = fcntl.fcntl(lock_file, fcntl.F_GETLK, flk)
- except IOError:
- print "Error getting lockstatus"
- raise
- locked = struct.unpack('hhllhl', rv)[0]
- if locked != fcntl.F_UNLCK:
- msg=("<big><b>%s</b></big>\n\n%s"%(_("Another package manager is "
- "running"),
- _("You can run only one "
- "package management application "
- "at the same time. Please close "
- "this other application first.")));
- dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_ERROR,
- gtk.BUTTONS_OK,"")
- dialog.set_markup(msg)
- dialog.run()
- dialog.destroy()
- return
-
- # don't display apt-listchanges, we already showed the changelog
- os.environ["APT_LISTCHANGES_FRONTEND"]="none"
-
- # set window to insensitive
- self.main_window.set_sensitive(False)
- # create a progress window that will swallow the synaptic progress bars
- win = gtk.Window()
- if action==UPDATE:
- win.set_title(_("Updating package list..."))
- else:
- win.set_title(_("Installing updates..."))
- win.set_border_width(6)
- win.set_transient_for(self.main_window)
- win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
- win.resize(400,200)
- win.set_resizable(False)
- # prevent the window from closing with the delete button (there is
- # a cancel button in the window)
- win.connect("delete_event", lambda e,w: True);
-
- # create the socket
- socket = gtk.Socket()
- socket.show()
- win.add(socket)
-
- socket.connect("plug-added", self.plug_added, win)
- socket.connect("plug-removed", self.plug_removed, (win,socket))
- lock = thread.allocate_lock()
- lock.acquire()
- t = thread.start_new_thread(self.run_synaptic,(socket.get_id(),action,lock))
- while lock.locked():
- while gtk.events_pending():
- gtk.main_iteration()
- time.sleep(0.05)
- win.destroy()
- while gtk.events_pending():
- gtk.main_iteration()
- self.fillstore()
- self.main_window.set_sensitive(True)
-
- def toggled(self, renderer, path_string):
- """ a toggle button in the listview was toggled """
- iter = self.store.get_iter_from_string(path_string)
- if self.store.get_value(iter, LIST_INSTALL):
- self.store.set_value(iter, LIST_INSTALL, False)
- self.remove_update(self.store.get_value(iter, LIST_PKG))
- else:
- self.store.set_value(iter, LIST_INSTALL, True)
- self.add_update(self.store.get_value(iter, LIST_PKG))
-
-
- def exit(self):
- """ exit the application, save the state """
- self.save_state()
- gtk.main_quit()
- sys.exit(0)
-
- def save_state(self):
- """ save the state (window-size for now) """
- (x,y) = self.main_window.get_size()
- self.gconfclient.set_pair("/apps/update-manager/window_size",
- gconf.VALUE_INT, gconf.VALUE_INT, x, y)
-
- def restore_state(self):
- """ restore the state (window-size for now) """
- expanded = self.gconfclient.get_bool("/apps/update-manager/show_details")
- self.expander.set_expanded(expanded)
- (x,y) = self.gconfclient.get_pair("/apps/update-manager/window_size",
- gconf.VALUE_INT, gconf.VALUE_INT)
- if x > 0 and y > 0:
- self.main_window.resize(x,y)
-
- def on_button_preferences_clicked(self, widget):
- """ start gnome-software preferences """
- # args: "-n" means we take care of the reloading of the
- # package list ourself
- apt_pkg.PkgSystemUnLock()
- args = ['/usr/bin/gnome-software-properties', '-n']
- child = subprocess.Popen(args)
- self.main_window.set_sensitive(False)
- res = None
- while res == None:
- res = child.poll()
- time.sleep(0.05)
- while gtk.events_pending():
- gtk.main_iteration()
- # repository information changed, call "reload"
- try:
- apt_pkg.PkgSystemLock()
- except SystemError:
- print "Error geting the cache"
- apt_pkg.PkgSystemLock()
- if res > 0:
- self.on_button_reload_clicked(None)
- self.main_window.set_sensitive(True)
-
- def __init__(self, download_changes_at_startup=False):
-
- self.gnome_program = gnome.init("update-manager", "0.39")
-
- self.download_changes_at_startup = download_changes_at_startup
- self.packages = []
- self.dl_size = 0
- self.all_changes = {}
- self.dist = self.get_dist()
- self.Glade = gtk.glade.XML("/usr/share/update-manager/glade/update-manager.glade")
-
- self.NumUpdates = self.Glade.get_widget("num_updates")
- self.main_window = self.Glade.get_widget("MainWindow")
- self.main_window.connect("delete_event", lambda w, ev: self.exit())
- self.DescView = self.Glade.get_widget("descview")
- self.ChangesView = self.Glade.get_widget("textview_changes")
- changes_buffer = self.ChangesView.get_buffer()
- changes_buffer.create_tag("versiontag", weight=pango.WEIGHT_BOLD)
- self.expander = self.Glade.get_widget("expander_details")
- self.expander.connect("notify::expanded", self.activate_details)
-
- self.installbutton = self.Glade.get_widget("button_install")
- self.Glade.signal_connect("on_button_install_clicked",
- self.on_button_install_clicked)
- self.Glade.signal_connect("on_button_close_clicked",
- lambda w: self.exit())
- self.Glade.signal_connect("on_button_reload_clicked",
- self.on_button_reload_clicked)
- self.Glade.signal_connect("on_button_preferences_clicked",
- self.on_button_preferences_clicked)
- self.Glade.signal_connect("on_button_help_clicked",
- self.on_button_help_clicked)
-
- self.treeview = self.Glade.get_widget("updatelist")
-
- self.store = gtk.ListStore(gobject.TYPE_BOOLEAN, str, str, str, str, str,
- gobject.TYPE_PYOBJECT)
- self.treeview.set_model(self.store)
- self.treeview.set_headers_clickable(True);
-
- self.treeview.connect('cursor-changed', self.cursor_changed)
-
- tr = gtk.CellRendererText()
- tr.set_property("xpad", 10)
- tr.set_property("ypad", 10)
- cr = gtk.CellRendererToggle()
- cr.set_property("activatable", True)
- cr.set_property("xpad", 10)
- cr.connect("toggled", self.toggled)
- self.cb = gtk.TreeViewColumn("Install", cr, active=LIST_INSTALL)
- c0 = gtk.TreeViewColumn("Name", tr, markup=LIST_CONTENTS)
- c0.set_resizable(True)
- major,minor,patch = gtk.pygtk_version
- if (major >= 2) and (minor >= 5):
- self.cb.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- self.cb.set_fixed_width(30)
- c0.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- c0.set_fixed_width(100)
- #self.treeview.set_fixed_height_mode(True)
-
- self.treeview.append_column(self.cb)
- self.cb.set_visible(False);
- self.treeview.append_column(c0)
- self.treeview.set_search_column(LIST_NAME)
- #self.treeview.append_column(c1)
- #self.treeview.append_column(c2)
- #self.treeview.set_headers_visible(False)
- # set expander to last position
-
- # proxy stuff
- SYNAPTIC_CONF_FILE = "%s/.synaptic/synaptic.conf" % pwd.getpwuid(0)[5]
- if os.path.exists(SYNAPTIC_CONF_FILE):
- cnf = apt_pkg.newConfiguration()
- apt_pkg.ReadConfigFile(cnf, SYNAPTIC_CONF_FILE)
- use_proxy = cnf.FindB("Synaptic::useProxy", False)
- if use_proxy:
- proxy_host = cnf.Find("Synaptic::httpProxy")
- proxy_port = str(cnf.FindI("Synaptic::httpProxyPort"))
- if proxy_host and proxy_port:
- proxy_support = urllib2.ProxyHandler({"http":"http://%s:%s" % (proxy_host, proxy_port)})
- opener = urllib2.build_opener(proxy_support)
- urllib2.install_opener(opener)
-
- self.gconfclient = gconf.client_get_default()
- # restore state
- self.restore_state()
-
- def fillstore(self):
- if self.download_changes_at_startup:
- dialog = self.Glade.get_widget("dialog_fetching")
- dialog.set_transient_for(self.main_window)
- dialog.set_modal(True)
- progress = self.Glade.get_widget("progressbar_fetching")
- dialog.show()
- while gtk.events_pending():
- gtk.main_iteration()
-
- # clean most objects
- self.packages = []
- self.dl_size = 0
- self.all_changes = {}
- self.store.clear()
- self.initCache()
- self.list = UpdateList(self.main_window)
-
- # fill them again
- self.list.update(self.cache, self.records, self.depcache)
- if self.list.num_updates < 1:
- # set the label and treeview and hide the checkbox column
- self.cb.set_visible(False)
- self.expander.hide()
- label = self.Glade.get_widget("label_header")
- text = "<big><b>%s</b></big>\n\n%s" % (_("Your system is up-to-date!"),
- _("There are no updates available."))
- label.set_markup(text)
- self.store.append([False, _("Your system is up-to-date!"), None, None, None, None, None])
- # make sure no install is possible
- self.installbutton.set_sensitive(False)
- else:
- self.cb.set_visible(True)
- self.expander.show()
- self.treeview.set_headers_visible(False)
- label = self.Glade.get_widget("label_header")
- text = _("<big><b>Available Updates</b></big>\n"
- "\n"
- "The following packages are found to be upgradable. You can upgrade them by "
- "using the Install button.")
- label.set_markup(text)
- i=0
- for pkg in self.list.pkgs:
- if self.download_changes_at_startup:
- progress.set_fraction(float(i)/len(self.list.pkgs))
- while gtk.events_pending():
- gtk.main_iteration()
- lock = thread.allocate_lock()
- self.all_changes[pkg.name] = self.get_changelog(pkg.name,lock)
-
- name = xml.sax.saxutils.escape(pkg.name)
- summary = xml.sax.saxutils.escape(pkg.shortdesc)
- contents = "<big><b>%s</b></big>\n<small>%s\n\n" % (name, summary)
- contents = contents + _("New version: %s") % (pkg.version) + "</small>"
-
- iter = self.store.append([True, contents, pkg.name, pkg.shortdesc, pkg.version, pkg.longdesc, pkg])
- self.add_update(pkg)
- i = i + 1
-
- if self.download_changes_at_startup:
- dialog.hide()
-
- self.update_count()
- return False
-
- # FIXME: use lsb-release binary and cache the result
- def get_dist(self):
- f = open("/etc/lsb-release", "r")
- lines = f.readlines()
- for line in lines:
- key, value = line.split("=")
- if (key == "DISTRIB_CODENAME"):
- return value[:-1]
- f.close()
-
- def current_dist_not_supported(self, name):
- #print name
- msg = "<big><b>%s</b></big>\n\n%s" % (_("Your distribution is no longer supported"), _("Please upgrade to a newer version of Ubuntu Linux. The version you are running will no longer get security fixes or other critical updates. Please see http://www.ubuntulinux.org for upgrade information."))
- dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_WARNING,
- gtk.BUTTONS_OK,"")
- dialog.set_markup(msg)
- dialog.run()
- dialog.destroy()
-
-
- def new_dist_available(self, name):
- #print name
- # check if the user already knowns about this dist
- seen = self.gconfclient.get_string("/apps/update-manager/seen_dist")
- if name == seen:
- return
-
- msg = "<big><b>%s</b></big>\n\n%s" % (_("There is a new release of Ubuntu available!"), _("A new release with the codename '%s' is available. Please see http://www.ubuntulinux.org/ for upgrade instructions.") % name)
- dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_INFO,
- gtk.BUTTONS_CLOSE, "")
- dialog.set_markup(msg)
- check = gtk.CheckButton(_("Never show this message again"))
- check.show()
- dialog.vbox.pack_start(check)
- dialog.run()
- if check.get_active():
- self.gconfclient.set_string("/apps/update-manager/seen_dist",name)
- dialog.destroy()
-
- # code that does the meta release file checking
- def check_meta_release(self):
- #print "check_meta_release"
- current_dist = self.dist
- dists = {}
- if self.metarelease_information != None:
- #print "meta_release found (current_dist: %s)" % (current_dist)
- # we have a meta-release file
- current_dist_date = 0
- current_dist_supported = False
- new_dist_available = False
- # parse it
- index_tag = apt_pkg.ParseTagFile(self.metarelease_information)
- step_result = index_tag.Step()
- while step_result:
- if index_tag.Section.has_key("Dist"):
- dist = index_tag.Section["Dist"]
- date = time.mktime(rfc822.parsedate(index_tag.Section["Date"]))
- dists[dist] = date
- if dist == current_dist:
- current_dist_supported = str_to_bool(index_tag.Section["Supported"])
- current_dist_date = time.mktime(rfc822.parsedate(index_tag.Section["Date"]))
- step_result = index_tag.Step()
- # check for newer dists
- new_dist = ""
- found = False
- for dist in dists:
- if dist == current_dist:
- found = True
- if dists[dist] > current_dist_date and not dist == current_dist:
- new_dist = dist
- current_dist_date = dists[dist]
-
- # we know nothing about the installed distro, so we just return
- # silently
- if not found:
- return False
-
- # only warn if unsupported and a new dist is available (because
- # the development version is also unsupported)
- if new_dist != "" and not current_dist_supported:
- self.current_dist_not_supported(new_dist)
- elif new_dist != "":
- self.new_dist_available(new_dist)
- # don't run this event again
- return False
- # we have no information about the meta-release, so run it again
- return True
-
- # the network thread that tries to fetch the meta-index file
- def get_meta_release(self):
- lastmodified = 0
- req = urllib2.Request(METARELEASE_URI)
- if os.access(METARELEASE_FILE, os.W_OK):
- lastmodified = os.stat(METARELEASE_FILE).st_mtime
- if lastmodified > 0:
- req.add_header("If-Modified-Since", lastmodified)
- try:
- uri=urllib2.urlopen(req)
- f=open(METARELEASE_FILE,"w+")
- for line in uri.readlines():
- f.write(line)
- f.flush()
- f.seek(0,0)
- self.metarelease_information=f
- uri.close()
- except urllib2.URLError:
- pass
-
- # fixme: we should probably abstract away all the stuff from libapt
- def initCache(self):
- # get the lock
- try:
- apt_pkg.PkgSystemLock()
- except SystemError:
- d = gtk.MessageDialog(parent=self.main_window,
- flags=gtk.DIALOG_MODAL,
- type=gtk.MESSAGE_ERROR,
- buttons=gtk.BUTTONS_OK)
- d.set_markup("<big><b>%s</b></big>\n\n%s" % (
- _("Unable to get exclusive lock"),
- _("This usually means that another package management "
- "application (like apt-get or aptitude) already running. "
- "Please close that application first")))
- res = d.run()
- d.destroy()
- sys.exit()
-
- self.cache = apt_pkg.GetCache()
- #apt_pkg.Config.Set("Debug::pkgPolicy","1")
- self.depcache = apt_pkg.GetDepCache(self.cache)
- self.depcache.ReadPinFile()
- if os.path.exists(SYNAPTIC_PINFILE):
- self.depcache.ReadPinFile(SYNAPTIC_PINFILE)
- self.depcache.Init()
- self.records = apt_pkg.GetPkgRecords(self.cache)
-
-
- def main(self):
- # FIXME: stat a check update thread
- self.metarelease_information = None
- t=thread.start_new_thread(self.get_meta_release, ())
- gobject.timeout_add(1000, self.check_meta_release)
- #self.get_meta_release()
-
- self.store.append([True, _("Initializing and getting list of updates..."),
- None, None, None, None, None])
-
- while gtk.events_pending():
- gtk.main_iteration()
-
- # global init of apt, FIXME: move all the apt details in it's own class
- apt_pkg.init()
- self.fillstore()
- gtk.main()
-
-
-if __name__ == "__main__":
-
- APP="update-manager"
- DIR="/usr/share/locale"
- gettext.bindtextdomain(APP, DIR)
- gettext.textdomain(APP)
- gtk.glade.bindtextdomain(APP, DIR)
- gtk.glade.textdomain(APP)
- _ = gettext.gettext
- if os.geteuid() != 0:
- dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
- _("You need to be root to run this program"))
- dialog.run()
- dialog.destroy()
- sys.exit(1)
-
- if (len(sys.argv) > 1) and (sys.argv[1].strip() == "--download-changes-at-startup"):
- updatemanager = UpdateManager(True)
- else:
- updatemanager = UpdateManager()
- updatemanager.main()
diff --git a/src/utils.py b/src/utils.py
deleted file mode 100644
index 3231ba98..00000000
--- a/src/utils.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import gobject
-import gtk
-import gtk.glade
-
-def error(parent, primary, secondary):
- p = "<span weight=\"bold\" size=\"larger\">%s</span>" % primary
- dialog = gtk.MessageDialog(parent,gtk.DIALOG_MODAL,
- gtk.MESSAGE_ERROR,gtk.BUTTONS_OK,"")
- dialog.set_markup(p);
- dialog.format_secondary_text(secondary);
- dialog.run()
- dialog.hide()