diff -pruN 3.0.0-2/configure.in 3.0.0-2ubuntu1/configure.in
--- 3.0.0-2/configure.in	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/configure.in	2011-12-17 00:52:19.000000000 +0000
@@ -249,6 +249,23 @@ dnl ==================================
 dnl END: GST_LIBS & GST_FLAGS
 dnl ==================================
 
+dnl ==================================
+dnl LIBIW DETECTION
+dnl ==================================
+
+GST_IW_LIBS=
+AC_CHECK_HEADER(iwlib.h, [
+  enable_libiw=yes
+  AC_DEFINE(HAVE_LIBIW_H, "", [whether libiw is available])
+  AC_HAVE_LIBRARY(iw, [GST_IW_LIBS="-liw"])
+])
+AM_CONDITIONAL(HAVE_LIBIW_H, test x$enable_libiw = xyes)
+AC_SUBST(GST_IW_LIBS)
+
+dnl ==================================
+dnl END: LIBIW DETECTION
+dnl ==================================
+
 dnl ===========================
 dnl NAUTILUS EXTENSION
 dnl ===========================
diff -pruN 3.0.0-2/debian/changelog 3.0.0-2ubuntu1/debian/changelog
--- 3.0.0-2/debian/changelog	2011-11-24 19:55:12.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/changelog	2011-12-16 22:20:21.000000000 +0000
@@ -1,3 +1,29 @@
+gnome-system-tools (3.0.0-2ubuntu1) precise; urgency=low
+
+  * Merge from Debian, remaining changes:
+    - Split out gnome-network-admin
+    - Split out gnome-time-admin
+    - Drop gnome-control-center to Suggests
+    - 25_sambashare_group_definition.patch
+    - 26_user_profiles_conf.patch
+    - 80_gst-packages-common.patch
+    - 81_gst-packages-shares-admin.patch
+    - 82_gst-packages-time-admin.patch
+    - 91_shares_services_detection.patch
+    - 95_timezone_point_selection.patch
+    - 96_ubuntu_ntp_pool.patch
+    - fix-missing-header-ftbfs-amd64.patch
+  * debian/patches/80_gst-packages-common.patch,
+    debian/patches/81_gst-packages-shares-admin.patch:
+    - Update for GTK+ 3
+  * debian/patches/92_fix_add_needed_linking.patch,
+    debian/patches/97_fix_setting_password_from_random_entry.patch:
+    - Dropped, applied upstream
+  * debian/patches/remove_g_thread_init.patch:
+    - Remove obsolete and dropped API g_thread_init()
+
+ -- Michael Terry <mterry@ubuntu.com>  Fri, 16 Dec 2011 17:08:20 -0500
+
 gnome-system-tools (3.0.0-2) unstable; urgency=low
 
   * debian/patches/62_no_gettext.patch:
@@ -33,6 +59,92 @@ gnome-system-tools (3.0.0-1) unstable; u
 
  -- Michael Biebl <biebl@debian.org>  Sat, 22 Oct 2011 20:24:21 +0200
 
+gnome-system-tools (2.32.0-0ubuntu8) oneiric; urgency=low
+
+  * Add fix-missing-header-ftbfs-amd64.patch to resolve a missing
+    header that caused a FTBFS on amd64/ia64. (LP: #766040)
+
+ -- Daniel T Chen <crimsun@ubuntu.com>  Tue, 30 Aug 2011 17:55:27 -0400
+
+gnome-system-tools (2.32.0-0ubuntu7) natty; urgency=low
+
+  * debian/patches/97_fix_setting_password_from_random_entry.patch:
+    Fix setting password from random entry, patch taken from upstream
+    (LP: #742598)
+
+ -- Lorenzo De Liso <blackz@ubuntu.com>  Wed, 30 Mar 2011 15:16:20 +0200
+
+gnome-system-tools (2.32.0-0ubuntu6) natty; urgency=low
+
+  * Split time-admin into its own package, gnome-time-admin, so we can
+    include it in certain flavors but not others.  LP: 732757
+
+ -- Michael Terry <mterry@ubuntu.com>  Mon, 14 Mar 2011 10:33:58 -0400
+
+gnome-system-tools (2.32.0-0ubuntu5) natty; urgency=low
+
+  * Add 96_ubuntu_ntp_pool.patch: Offer Ubuntu specific NTP servers;
+    pool.ntp.org offers geolocation and automatic QA. Thanks Xavier Robin for
+    coordinating the setup of the Ubuntu ntp.org pool and preparing the patch!
+    (LP: #104525)
+
+ -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 08 Feb 2011 16:46:57 +0100
+
+gnome-system-tools (2.32.0-0ubuntu4) natty; urgency=low
+
+  * debian/patches/95_timezone_point_selection.patch: Fix selecting a timezone
+    while running on compiz: compute the point we're at when the map gets
+    clicked. (LP: #697974)
+
+ -- Mathieu Trudel-Lapierre <mathieu-tl@ubuntu.com>  Fri, 14 Jan 2011 03:16:03 +0000
+
+gnome-system-tools (2.32.0-0ubuntu3) natty; urgency=low
+
+  * Replace "cracklib2-dev" with "libcrack2-dev" in Build-Depends. 
+  * debian/patches/92_fix_add_needed_linking.patch:
+    Reorder time_admin_LDADD to fixing linking with --add-needed.
+
+ -- Michael Bienia <geser@ubuntu.com>  Thu, 06 Jan 2011 11:07:14 +0100
+
+gnome-system-tools (2.32.0-0ubuntu2) natty; urgency=low
+
+  [ Milan Bouchet-Valat ]
+  * Add 91_shares_services_detection.patch: Work around missing Upstart
+    support by checking for installed files instead of SysV init scripts which
+    no longer exist. (LP: #574046)
+
+ -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 26 Nov 2010 11:53:58 +0100
+
+gnome-system-tools (2.32.0-0ubuntu1) maverick; urgency=low
+
+  * New upstream release
+  * debian/watch:
+    - Update version matcher to work
+
+ -- Michael Terry <mike@mterry.name>  Mon, 27 Sep 2010 14:11:27 -0400
+
+gnome-system-tools (2.31.92-0ubuntu1) maverick; urgency=low
+
+  * New upstream release:
+    - Don't allow locked accounts to use password-less login
+    - Updated translation
+
+ -- Didier Roche <didrocks@ubuntu.com>  Mon, 13 Sep 2010 18:06:15 +0200
+
+gnome-system-tools (2.31.91-0ubuntu1) maverick; urgency=low
+
+  * New upstream release
+  * debian/control:
+    - Bump build-depends on liboobs-1-dev, libgtk2.0-dev, libglib2.0-dev,
+      system-tools-backends-dev
+    - Drop build-depends on libgconf2-dev
+  * debian/gnome-system-tools.install:
+    - Install gsettings schema instead of gconf schema
+  * debian/patches/12_users_string_change.patch:
+    - Applied upstream
+
+ -- Robert Ancell <robert.ancell@canonical.com>  Wed, 01 Sep 2010 18:17:22 +1000
+
 gnome-system-tools (2.30.2-2) unstable; urgency=low
 
   * debian/control.in:
@@ -41,6 +153,66 @@ gnome-system-tools (2.30.2-2) unstable; 
 
  -- Emilio Pozuelo Monfort <pochu@debian.org>  Mon, 27 Sep 2010 14:18:04 +0200
 
+gnome-system-tools (2.30.2-1ubuntu4) maverick; urgency=low
+
+  * Fix LP: #570828 - gnome-network-admin on UbuntuStudio doesnt allow 
+    to configure either wired networks or wireless. Expose the
+    connections tab and locations combo box on derivatives that don't use
+    Network Manager
+    - update debian/patches/10_disable_interfaces.patch
+  * Fix LP: #529744 - When creating a new user, "Shortname" should 
+    really be "Username" 
+    - add debian/patches/12_users_string_change.patch
+    - update debian/patches/series
+
+ -- Chris Coulson <chris.coulson@canonical.com>  Mon, 23 Aug 2010 17:04:08 +0100
+
+gnome-system-tools (2.30.2-1ubuntu3) maverick; urgency=low
+
+  * debian/control.in:
+    - Revert gnome-control-center back to Suggests rather than Recommends.
+      This was previously lost during the merge at 2.30.1-2ubuntu1.
+
+ -- Mario Limonciello <Mario_Limonciello@Dell.com>  Sun, 20 Jun 2010 00:01:49 -0500
+
+gnome-system-tools (2.30.2-1ubuntu2) maverick; urgency=low
+
+  * debian/control.in:
+    - Build-depend on gnome-common
+
+ -- Robert Ancell <robert.ancell@canonical.com>  Fri, 11 Jun 2010 16:39:10 +1000
+
+gnome-system-tools (2.30.2-1ubuntu1) maverick; urgency=low
+
+  * Merge with debian unstable, remaining Ubuntu changes:
+  * debian/control.in:
+    - Build-depend on libpango1.0-dev
+    - Add Vcs-Bzr URL link
+    - Add gnome-network-admin package
+  * debian/rules:
+    - Run autotools on build
+    - Don't build services-admin
+    - Build POT files
+  * debian/gnome-network-admin.*:
+  * debian/gnome-system-tools.*:
+    - Put network-admin in it's own package
+  * debian/patches/25_sambashare_group_definition.patch:
+    - Add sambashare to known groups
+  * debian/patches/26_user_profiles_conf.patch:
+    - Don't add new user to audio group
+  * debian/patches/80_gst-packages-common.patch:
+    - Used by following 2 patches
+  * debian/patches/81_gst-packages-shares-admin.patch:
+    - Install nfs-kernel-server and samba on demand
+  * debian/patches/82_gst-packages-time-admin.patch:
+    - Install ntp on demand
+  * debian/patches/90_relibtoolize.patch:
+    - Not required, autotools now run on build
+  * debian/watch:
+    - Watch unstable series
+
+ -- Robert Ancell <robert.ancell@canonical.com>  Fri, 11 Jun 2010 16:06:30 +1000
+
 gnome-system-tools (2.30.2-1) unstable; urgency=low
 
   * New upstream bugfix release:
@@ -93,6 +265,238 @@ gnome-system-tools (2.30.0-1) unstable; 
 
  -- Luca Bruno <lethalman88@gmail.com>  Sat, 10 Apr 2010 11:40:49 +0200
 
+gnome-system-tools (2.30.0-0ubuntu2) lucid; urgency=low
+
+  * debian/patches/82_gst-packages-time-admin.patch:
+    - Switch time combobox to "Keep synchronized with Internet servers" after
+      having installed NTP support (Xiegai Shan) (LP: #551936)
+
+ -- Didier Roche <didrocks@ubuntu.com>  Wed, 14 Apr 2010 21:27:37 +0200
+
+gnome-system-tools (2.30.0-0ubuntu1) lucid; urgency=low
+
+  * New upstream release:
+    - Fix a few compiler warnings (Andre Klapper, Bug 612805)
+    - Only update Real name in case of success
+    - Force updating groups when showing groups dialog
+    - Fix hang when new and old password only differ in case
+    - Fix hang when changing empty password to something else
+    - Fix hiding "encrypt home folder" option when not supported
+    - Fix "Reload config?" dialog shown after creating a group
+    - Remove duplicate deletion of groups
+    - Replace UTF-8 characters escaped by Glade (Gabor Kelemen, Bug 613115)
+    - Remove placeholder strings
+    - Mark a string as translatable
+    - Fix warning when NO_PASSWD_LOGIN group doesn't exist
+
+ -- Robert Ancell <robert.ancell@canonical.com>  Thu, 01 Apr 2010 11:07:35 +1100
+
+gnome-system-tools (2.29.92-0ubuntu1) lucid; urgency=low
+
+  * New upstream release:
+    - Update main view fields after changing settings
+    - Gracefully handle non-existent groups listed in user profiles
+    - Work around an adduser limitation that makes it fail when a group using the new login already exists
+    - Support account password locking/unlocking
+  * debian/control.in:
+    - Bump build-depends on systems-tools-backends-dev to 2.9.4
+    - Bump gnome-system-tools depends on systems-tools-backends to 2.9.4
+
+ -- Robert Ancell <robert.ancell@canonical.com>  Thu, 25 Mar 2010 17:39:34 +1100
+
+gnome-system-tools (2.29.91-0ubuntu2) lucid; urgency=low
+
+  * debian/patches/26_user_profiles_conf.patch:
+    - Don't add users to the audio group. This is consistent with
+      user-setup and fixes an issue with sound device permissions when
+      switching between users. Thanks to Igor Wojnicki for spotting
+      this (LP: #433654)
+
+ -- Chris Coulson <chris.coulson@canonical.com>  Sun, 07 Mar 2010 11:56:59 +0000
+
+gnome-system-tools (2.29.91-0ubuntu1) lucid; urgency=low
+
+  * New upstream version
+  * Common
+    - Add nfs-common and nfs-server to the services list
+  * Users
+    - Fix crash when main group isn't set
+    - Fix hang when configuration files are updated while the tool is running
+    - Fix selecting current user on start, and ensure we always show it in the list
+    - Always make new users own their home directory, if it already existed
+    - Unreference users and groups on exit to allow them to clear their data
+    - Small cosmetic improvements
+  * Time
+    - Fix time-admin crash due to broken callbacks
+    - Don't update NTP configuration on every start
+  * debian/control:
+    - Bump liboobs-dev build-dep to 2.29.91
+  * Refreshed patches:
+    - 10_disable_interfaces.patch
+    - 82_gst-packages-time-admin.patch
+    - 90_relibtoolize.patch
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Thu, 18 Feb 2010 02:07:10 +0000
+
+gnome-system-tools (2.29.90-0ubuntu1) lucid; urgency=low
+
+  * New upstream version
+  * Users
+    - Fix hangs when changing own password with some PAM setups
+    - Update password field to indicate whether password is empty and/or 
+      asked on login
+    - Support disabled accounts, waiting for the backends to report this
+    - Sort users and groups list, implement search (LP: #477324)
+    - Don't resize window with long user names (LP: #514298)
+    - Improve buttons string to be "Change..."
+    - Fix "Reload Changes?" dialog shown after creating an user
+    - Fix a few leaks of OobsUsers and OobsGroups
+  * Services
+    - Only commit changes to one service at a time, to avoid many harmful 
+      issues
+    - Remove unlock button, ask for authentication on-the-fly
+    - Improve appearance of services list, use some additional icons and 
+      known services
+  * Shares
+    - Don't create an OobsIfacesConfig object since it's not used and 
+      consumes memory
+  * Fixes LP: #200105
+  * Refreshed patches:
+    - 81_gst-packages-shares-admin.patch
+    - 90_relibtoolize.patch
+  * debian/control:
+    - Bump liboobs-dev build-depend to 2.29.90
+    - Update Standards-Version to 3.8.4. No other changes required
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Sun, 14 Feb 2010 18:03:45 +0000
+
+gnome-system-tools (2.29.3-0ubuntu2) lucid; urgency=low
+
+  * debian/patches/26_user_profiles_conf.patch:
+    - Delete "scanner" group from user profiles. This group doesn't exist
+      on Ubuntu, and the presence of it here makes it impossible to apply 
+      the profiles
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Sat, 06 Feb 2010 14:51:47 +0000
+
+gnome-system-tools (2.29.3-0ubuntu1) lucid; urgency=low
+
+  * New upstream release (LP: #506365)
+    - Move to new System Tools Backends protocol (new liboobs API).
+      We now only commit changes to one user at a time, reducing the 
+      risk for dangerous bugs.
+    - Include default profiles configuration file (user-profiles.conf). 
+      Distributors should modify it to suit their needs and send them 
+      back for inclusion.
+    - When creating an user, don't force UID, main group, home directory 
+      and shell: these parameters are now handled (better) by the platform 
+      tools (LP: #488158, LP: #313990)
+    - Allow removing home directory when deleting an user (LP: #426125).
+    - Don't allow deleting the last administrator account, and warn when 
+      the user is losing its own admin rights. Same for active users 
+      (LP: #25947, LP: #349453)
+    - Don't allow creating a group with an existing GID (LP: #491434)
+    - Use UID and GID ranges defined by liboobs, depending on the platform's 
+      abilities.
+    - Clear suggested login entry when Real name is emptied in the new user 
+      dialog.
+    - Change GConf "showall" option to apply only on users. System groups are 
+      always shown, since they are the most interesting ones.
+    - Various UI and string improvements.
+    - Change password for current user by running 'passwd', to avoid 
+      breaking keyrings and encrypted dirs
+    - Ask for PolicyKit authentication when it most makes sense, i.e. 
+      when showing dialogs
+    - Option to set encrypted home directories when creating users (on 
+      platforms that support it) (LP: #302870)
+    - When editing one group, only commit changes to that group
+    - When changing Real name, update it in the users list (LP: #498970)
+    - Select current user on start, and the first one after selected user 
+      has been deleted
+    - Don't force updating configuration twice on start
+  * Also fixes LP: #344182, LP: #208057, LP: #188757, LP: #372695, 
+    LP: #99276, LP: #160862
+  * debian/control:
+    - Bump liboobs-dev build-dep to 2.29.3
+  * debian/gnome-system-tools.install:
+    - Don't install debian/profile
+    - Install upstream user-profiles.conf instead
+  * Delete debian/profiles
+  * Refreshed patches:
+    - 25_sambashare_group_definition.patch
+    - 90_relibtoolize.patch
+  * Dropped debian/patches/85_user_gnome_about_me_for_password.patch:
+    - The change is obsolete in the new version
+  * debian/patches/82_gst-packages-time-admin.patch:
+    - Updated to remove superfluous UI file changes, causing focus issues
+      in the users-admin password change dialog. Thanks to Will for
+      spotting this (LP: #501976)
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Fri, 05 Feb 2010 15:30:10 +0000
+
+gnome-system-tools (2.29.1-0ubuntu2) lucid; urgency=low
+
+  * debian/patches/85_user_gnome_about_me_for_password.patch:
+    - Updated to fall-back to using system-tools-backends to change
+      active users password when gnome-about-me isn't available 
+      (LP: #484559)
+  * debian/control: Suggest gnome-control-center rather than depending
+    on it (LP: #497441)      
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Mon, 04 Jan 2010 00:43:00 +0000
+
+gnome-system-tools (2.29.1-0ubuntu1) lucid; urgency=low
+
+  * New upstream version (LP: #493855):
+    - Users:
+      + Complete rework of the user interface
+      + Fix empty shells combo box
+      + Fix GID wrongly set to 0 in group settings dialog
+      + Add privilege groups from Debian
+      + Always show system groups
+    - Time:
+      + Remove obsolete time servers
+    - Network:
+      + Bring back PPP connection type combo box, which was empty since 
+        the migration to GtkBuilder
+    - debian/control:
+      + Bump liboobs build-dep to 2.29.1
+      + Add build-dep on libpango1.0-dev
+    - Dropped patches merged upstream:
+      + 02_dont_check_for_nautilus_when_not_building_it.patch
+      + 03_duplicated_field_desktop_file.patch
+      + 40_more-groups.patch
+    - Refreshed patches:
+      + 01_wait_for_backends.patch
+      + 10_disable_interfaces.patch
+    - Move network-admin manpage to gnome-network-admin package and
+      update conflicts/replaces
+  * Sync with Debian unstable, remaining changes:
+    - debian/control: 
+      + Add Vcs-Bzr URL info.
+      + Depend on gnome-control-center so that gnome-about-me is available
+    - Split network-admin in to separate gnome-network-admin package
+    - Don't build services-admin
+    - debian/patches/25_sambashare_group_definition.patch:
+      + Add sambashare to known groups
+    - debian/patches/81_gst-packages-shares-admin.patch:
+      + Install nfs-kernel-server and samba on demand
+    - debian/patches/82_gst-packages-time-admin.patch:
+      + Install ntp on demand
+    - debian/patches/80_gst-packages-common.patch:
+      + Used by previous 2 patches
+    - debian/patches/85_user_gnome_about_me_for_password.patch:
+      + Use gnome-about-me to change the active users password. 
+        gnome-about-me doesn't force the change as root, and so allows 
+        things (e.g. ecryptfs) in the PAM stack to access the old password 
+        as it is changed. (LP: #307019)
+    - debian/profiles: Add profiles - see 
+      http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=488256
+    - debian/rules: i18n magic
+    - debian/watch: Watch unstable series
+
+ -- Chris Coulson <chrisccoulson@ubuntu.com>  Sun, 06 Dec 2009 23:25:18 +0000
+
 gnome-system-tools (2.28.2-1) unstable; urgency=low
 
   * New upstream release.
diff -pruN 3.0.0-2/debian/control 3.0.0-2ubuntu1/debian/control
--- 3.0.0-2/debian/control	2011-11-24 19:59:29.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/control	2011-12-16 22:20:25.000000000 +0000
@@ -6,8 +6,9 @@
 Source: gnome-system-tools
 Section: gnome
 Priority: optional
-Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
-Uploaders: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>, Emilio Pozuelo Monfort <pochu@debian.org>, Michael Biebl <biebl@debian.org>, Sebastian Dröge <slomo@debian.org>,
+Maintainer: Ubuntu Desktop Team <ubuntu-desktop@lists.ubuntu.com>
+XSBC-Original-Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
+Uploaders: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>, Michael Biebl <biebl@debian.org>,
            Niv Sardi <xaiki@debian.org>
 Build-Depends: cdbs (>= 0.4.41),
                autotools-dev,
@@ -27,8 +28,7 @@ Build-Depends: cdbs (>= 0.4.41),
                gnome-doc-utils (>= 0.3.2),
                pkg-config
 Standards-Version: 3.9.2
-Vcs-Svn: svn://anonscm.debian.org/svn/pkg-gnome/desktop/unstable/gnome-system-tools
-Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-gnome/desktop/unstable/gnome-system-tools
+Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/gnome-system-tools/ubuntu
 
 Package: gnome-system-tools
 Architecture: any
@@ -37,11 +37,8 @@ Depends: ${misc:Depends},
          perl,
          system-tools-backends (>= 2.10.1),
          policykit-1-gnome
-Recommends: gnome-control-center (>= 1:2.10.1-1)
-Suggests: ntp
-Replaces: ximian-setup-tools, gnome-network-admin
-Conflicts: gnome-network-admin
-Provides: gnome-network-admin
+Suggests: ntp, gnome-control-center (>= 1:2.10.1-1)
+Replaces: ximian-setup-tools
 Description: Cross-platform configuration utilities for GNOME
  The GNOME System Tools are a fully integrated set of tools aimed to make easy
  the job that means the computer administration on an UNIX or Linux system.
@@ -59,3 +56,35 @@ Description: Cross-platform configuratio
   - Network options
   - Services
   - Shares (NFS and Samba)
+
+Package: gnome-network-admin
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gnome-system-tools
+Conflicts: gnome-system-tools (<< 2.29.1-0ubuntu1)
+Replaces: gnome-system-tools (<< 2.29.1-0ubuntu1)
+Description: GNOME Network Administration Tool
+ The GNOME System Tools are a fully integrated set of tools aimed to make easy
+ the job that means the computer administration on an UNIX or Linux system.
+ They're thought to help from the new Linux or UNIX user to the system
+ administrators.
+ .
+ This package provides network-admin, a program to specify the way your
+ system connects to other computers and to the Internet.
+
+Package: gnome-time-admin
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gnome-system-tools
+Conflicts: gnome-system-tools (<< 2.32.0-0ubuntu6)
+Replaces: gnome-system-tools (<< 2.32.0-0ubuntu6)
+Description: GNOME Time Administration Tool
+ The GNOME System Tools are a fully integrated set of tools aimed to make easy
+ the job that means the computer administration on an UNIX or Linux system.
+ They're thought to help from the new Linux or UNIX user to the system
+ administrators.
+ .
+ This package provides time-admin, a program to specify the time and date
+ of your system.
diff -pruN 3.0.0-2/debian/control.in 3.0.0-2ubuntu1/debian/control.in
--- 3.0.0-2/debian/control.in	2011-10-22 16:20:34.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/control.in	2011-12-16 22:20:21.000000000 +0000
@@ -1,7 +1,8 @@
 Source: gnome-system-tools
 Section: gnome
 Priority: optional
-Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
+Maintainer: Ubuntu Desktop Team <ubuntu-desktop@lists.ubuntu.com>
+XSBC-Original-Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
 Uploaders: @GNOME_TEAM@,
            Niv Sardi <xaiki@debian.org>
 Build-Depends: cdbs (>= 0.4.41),
@@ -22,8 +23,7 @@ Build-Depends: cdbs (>= 0.4.41),
                gnome-doc-utils (>= 0.3.2),
                pkg-config
 Standards-Version: 3.9.2
-Vcs-Svn: svn://anonscm.debian.org/svn/pkg-gnome/desktop/unstable/gnome-system-tools
-Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-gnome/desktop/unstable/gnome-system-tools
+Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/gnome-system-tools/ubuntu
 
 Package: gnome-system-tools
 Architecture: any
@@ -32,11 +32,8 @@ Depends: ${misc:Depends},
          perl,
          system-tools-backends (>= 2.10.1),
          policykit-1-gnome
-Recommends: gnome-control-center (>= 1:2.10.1-1)
-Suggests: ntp
-Replaces: ximian-setup-tools, gnome-network-admin
-Conflicts: gnome-network-admin
-Provides: gnome-network-admin
+Suggests: ntp, gnome-control-center (>= 1:2.10.1-1)
+Replaces: ximian-setup-tools
 Description: Cross-platform configuration utilities for GNOME
  The GNOME System Tools are a fully integrated set of tools aimed to make easy
  the job that means the computer administration on an UNIX or Linux system.
@@ -54,3 +51,35 @@ Description: Cross-platform configuratio
   - Network options
   - Services
   - Shares (NFS and Samba)
+
+Package: gnome-network-admin
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gnome-system-tools
+Conflicts: gnome-system-tools (<< 2.29.1-0ubuntu1)
+Replaces: gnome-system-tools (<< 2.29.1-0ubuntu1)
+Description: GNOME Network Administration Tool
+ The GNOME System Tools are a fully integrated set of tools aimed to make easy
+ the job that means the computer administration on an UNIX or Linux system.
+ They're thought to help from the new Linux or UNIX user to the system
+ administrators.
+ .
+ This package provides network-admin, a program to specify the way your
+ system connects to other computers and to the Internet.
+
+Package: gnome-time-admin
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gnome-system-tools
+Conflicts: gnome-system-tools (<< 2.32.0-0ubuntu6)
+Replaces: gnome-system-tools (<< 2.32.0-0ubuntu6)
+Description: GNOME Time Administration Tool
+ The GNOME System Tools are a fully integrated set of tools aimed to make easy
+ the job that means the computer administration on an UNIX or Linux system.
+ They're thought to help from the new Linux or UNIX user to the system
+ administrators.
+ .
+ This package provides time-admin, a program to specify the time and date
+ of your system.
diff -pruN 3.0.0-2/debian/gnome-network-admin.install 3.0.0-2ubuntu1/debian/gnome-network-admin.install
--- 3.0.0-2/debian/gnome-network-admin.install	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-network-admin.install	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,5 @@
+debian/pixmaps/network.xpm usr/share/gnome-system-tools/pixmaps/
+debian/tmp/usr/bin/network-admin
+debian/tmp/usr/share/applications/network.desktop
+debian/tmp/usr/share/gnome/help/network-admin
+debian/tmp/usr/share/omf/network-admin
diff -pruN 3.0.0-2/debian/gnome-network-admin.manpages 3.0.0-2ubuntu1/debian/gnome-network-admin.manpages
--- 3.0.0-2/debian/gnome-network-admin.manpages	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-network-admin.manpages	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1 @@
+debian/network-admin.1
diff -pruN 3.0.0-2/debian/gnome-network-admin.menu 3.0.0-2ubuntu1/debian/gnome-network-admin.menu
--- 3.0.0-2/debian/gnome-network-admin.menu	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-network-admin.menu	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,4 @@
+?package(gnome-network-admin):needs="X11" section="Applications/System/Administration"\
+  hints="Network"\
+  title="Network Admin" command="/usr/bin/network-admin"\
+  icon="/usr/share/gnome-system-tools/pixmaps/network.xpm"
diff -pruN 3.0.0-2/debian/gnome-system-tools.install 3.0.0-2ubuntu1/debian/gnome-system-tools.install
--- 3.0.0-2/debian/gnome-system-tools.install	2011-10-22 14:54:38.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-system-tools.install	2011-12-16 22:20:21.000000000 +0000
@@ -1 +1,17 @@
-debian/pixmaps/*.xpm usr/share/gnome-system-tools/pixmaps/
+debian/pixmaps/shares.xpm usr/share/gnome-system-tools/pixmaps/
+debian/pixmaps/users.xpm usr/share/gnome-system-tools/pixmaps/
+debian/tmp/usr/share/glib-2.0/schemas
+debian/tmp/etc/gnome-system-tools
+debian/tmp/usr/bin/shares-admin
+debian/tmp/usr/bin/users-admin
+debian/tmp/usr/lib/pkgconfig
+debian/tmp/usr/share/locale
+debian/tmp/usr/share/icons/hicolor
+debian/tmp/usr/share/omf/services-admin
+debian/tmp/usr/share/omf/users-admin
+debian/tmp/usr/share/omf/shares-admin
+debian/tmp/usr/share/gnome-system-tools
+debian/tmp/usr/share/applications/shares.desktop
+debian/tmp/usr/share/applications/users.desktop
+debian/tmp/usr/share/gnome/help/shares-admin
+debian/tmp/usr/share/gnome/help/users-admin
diff -pruN 3.0.0-2/debian/gnome-system-tools.manpages 3.0.0-2ubuntu1/debian/gnome-system-tools.manpages
--- 3.0.0-2/debian/gnome-system-tools.manpages	2011-10-22 14:54:38.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-system-tools.manpages	2011-12-16 22:20:21.000000000 +0000
@@ -1,5 +1,2 @@
-debian/network-admin.1
-debian/services-admin.1
 debian/shares-admin.1
-debian/time-admin.1
 debian/users-admin.1
diff -pruN 3.0.0-2/debian/gnome-system-tools.menu 3.0.0-2ubuntu1/debian/gnome-system-tools.menu
--- 3.0.0-2/debian/gnome-system-tools.menu	2011-10-22 14:54:38.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-system-tools.menu	2011-12-16 22:20:21.000000000 +0000
@@ -1,9 +1,4 @@
 ?package(gnome-system-tools):needs="X11" section="Applications/System/Administration"\
-  hints="Time"\
-  title="Time Admin" command="/usr/bin/time-admin"\
-  icon="/usr/share/gnome-system-tools/pixmaps/time.xpm"
-
-?package(gnome-system-tools):needs="X11" section="Applications/System/Administration"\
   hints="Network"\
   title="Shares Admin" command="/usr/bin/shares-admin"\
   icon="/usr/share/gnome-system-tools/pixmaps/shares.xpm"
@@ -12,13 +7,3 @@
   hints="Users"\
   title="User accounts Admin" command="/usr/bin/users-admin"\
   icon="/usr/share/gnome-system-tools/pixmaps/users.xpm"
-
-?package(gnome-system-tools):needs="X11" section="Applications/System/Administration"\
-  hints="RunLevel"\
-  title="Services Admin" command="/usr/bin/services-admin"\
-  icon="/usr/share/gnome-system-tools/pixmaps/services.xpm"
-
-?package(gnome-system-tools):needs="X11" section="Applications/System/Administration"\
-  hints="Network"\
-  title="Network Admin" command="/usr/bin/network-admin"\
-  icon="/usr/share/gnome-system-tools/pixmaps/network.xpm"
diff -pruN 3.0.0-2/debian/gnome-time-admin.install 3.0.0-2ubuntu1/debian/gnome-time-admin.install
--- 3.0.0-2/debian/gnome-time-admin.install	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-time-admin.install	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,5 @@
+debian/tmp/usr/share/applications/time.desktop
+debian/pixmaps/time.xpm usr/share/gnome-system-tools/pixmaps/
+debian/tmp/usr/bin/time-admin
+debian/tmp/usr/share/omf/time-admin
+debian/tmp/usr/share/gnome/help/time-admin
diff -pruN 3.0.0-2/debian/gnome-time-admin.manpages 3.0.0-2ubuntu1/debian/gnome-time-admin.manpages
--- 3.0.0-2/debian/gnome-time-admin.manpages	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-time-admin.manpages	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1 @@
+debian/time-admin.1
diff -pruN 3.0.0-2/debian/gnome-time-admin.menu 3.0.0-2ubuntu1/debian/gnome-time-admin.menu
--- 3.0.0-2/debian/gnome-time-admin.menu	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/gnome-time-admin.menu	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,4 @@
+?package(gnome-time-admin):needs="X11" section="Applications/System/Administration"\
+  hints="Time"\
+  title="Time Admin" command="/usr/bin/time-admin"\
+  icon="/usr/share/gnome-system-tools/pixmaps/time.xpm"
diff -pruN 3.0.0-2/debian/patches/10_disable_interfaces.patch 3.0.0-2ubuntu1/debian/patches/10_disable_interfaces.patch
--- 3.0.0-2/debian/patches/10_disable_interfaces.patch	2011-10-22 17:52:26.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/10_disable_interfaces.patch	2011-12-16 22:20:21.000000000 +0000
@@ -1,930 +1,34 @@
-Index: gnome-system-tools-3.0.0/interfaces/network.ui
-===================================================================
---- gnome-system-tools-3.0.0.orig/interfaces/network.ui	2011-10-22 19:42:20.567031813 +0200
-+++ gnome-system-tools-3.0.0/interfaces/network.ui	2011-10-22 19:42:47.846688861 +0200
-@@ -86,147 +86,10 @@
-         <property name="border_width">6</property>
+--- a/interfaces/network.ui
++++ b/interfaces/network.ui
+@@ -87,7 +87,7 @@
          <property name="spacing">12</property>
          <child>
--          <object class="GtkHBox" id="locations_box">
+           <object class="GtkHBox" id="locations_box">
 -            <property name="visible">True</property>
--            <property name="spacing">6</property>
--            <child>
--              <object class="GtkLabel" id="label2">
--                <property name="visible">True</property>
--                <property name="label" translatable="yes">Location:</property>
--              </object>
--              <packing>
--                <property name="expand">False</property>
--                <property name="fill">False</property>
--                <property name="position">0</property>
--              </packing>
--            </child>
--            <child>
--              <object class="GtkComboBox" id="locations_combo">
--                <property name="visible">True</property>
--              </object>
--              <packing>
--                <property name="position">1</property>
--              </packing>
--            </child>
--            <child>
--              <object class="GtkButton" id="add_location">
--                <property name="visible">True</property>
--                <property name="can_focus">True</property>
--                <property name="receives_default">False</property>
--                <property name="tooltip_text" translatable="yes">Save current network configuration as a location</property>
--                <accelerator key="A" signal="clicked" modifiers="GDK_MOD1_MASK"/>
--                <child>
--                  <object class="GtkImage" id="image9">
--                    <property name="visible">True</property>
--                    <property name="stock">gtk-save</property>
--                  </object>
--                </child>
--              </object>
--              <packing>
--                <property name="expand">False</property>
--                <property name="fill">False</property>
--                <property name="position">2</property>
--              </packing>
--            </child>
--            <child>
--              <object class="GtkButton" id="remove_location">
--                <property name="visible">True</property>
--                <property name="can_focus">True</property>
--                <property name="receives_default">False</property>
--                <property name="tooltip_text" translatable="yes">Delete current location</property>
--                <accelerator key="R" signal="clicked" modifiers="GDK_MOD1_MASK"/>
--                <child>
--                  <object class="GtkImage" id="image10">
--                    <property name="visible">True</property>
--                    <property name="stock">gtk-delete</property>
--                  </object>
--                </child>
--              </object>
--              <packing>
--                <property name="expand">False</property>
--                <property name="fill">False</property>
--                <property name="position">3</property>
--              </packing>
--            </child>
--          </object>
--          <packing>
--            <property name="expand">False</property>
--            <property name="fill">False</property>
--            <property name="position">0</property>
--          </packing>
--        </child>
--        <child>
-           <object class="GtkNotebook" id="notebook1">
-             <property name="visible">True</property>
++            <property name="visible">False</property>
+             <property name="spacing">6</property>
+             <child>
+               <object class="GtkLabel" id="label2">
+@@ -161,7 +161,7 @@
              <property name="can_focus">True</property>
              <child>
--              <object class="GtkHBox" id="hbox3">
--                <property name="visible">True</property>
--                <property name="border_width">12</property>
--                <property name="spacing">6</property>
--                <child>
--                  <object class="GtkScrolledWindow" id="scrolledwindow1">
--                    <property name="visible">True</property>
--                    <property name="can_focus">True</property>
--                    <property name="hscrollbar_policy">automatic</property>
--                    <property name="vscrollbar_policy">automatic</property>
--                    <property name="shadow_type">in</property>
--                    <child>
--                      <object class="GtkTreeView" id="interfaces_list">
--                        <property name="width_request">290</property>
--                        <property name="height_request">194</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="enable_search">False</property>
--                      </object>
--                    </child>
--                  </object>
--                  <packing>
--                    <property name="position">0</property>
--                  </packing>
--                </child>
--                <child>
--                  <object class="GtkVButtonBox" id="vbuttonbox1">
--                    <property name="visible">True</property>
--                    <property name="spacing">6</property>
--                    <property name="layout_style">start</property>
--                    <child>
--                      <object class="GtkButton" id="properties_button">
--                        <property name="label">gtk-properties</property>
--                        <property name="visible">True</property>
--                        <property name="sensitive">False</property>
--                        <property name="can_focus">True</property>
--                        <property name="can_default">True</property>
--                        <property name="receives_default">False</property>
--                        <property name="use_stock">True</property>
--                      </object>
--                      <packing>
--                        <property name="expand">False</property>
--                        <property name="fill">False</property>
--                        <property name="position">0</property>
--                      </packing>
--                    </child>
--                  </object>
--                  <packing>
--                    <property name="expand">False</property>
--                    <property name="fill">False</property>
--                    <property name="position">1</property>
--                  </packing>
--                </child>
--              </object>
--            </child>
--            <child type="tab">
--              <object class="GtkLabel" id="label3">
+               <object class="GtkHBox" id="hbox3">
 -                <property name="visible">True</property>
--                <property name="label" translatable="yes">Connections</property>
--              </object>
--              <packing>
--                <property name="tab_fill">False</property>
--              </packing>
--            </child>
--            <child>
-               <object class="GtkFrame" id="frame3">
-                 <property name="visible">True</property>
++                <property name="visible">False</property>
                  <property name="border_width">12</property>
-Index: gnome-system-tools-3.0.0/configure.in
-===================================================================
---- gnome-system-tools-3.0.0.orig/configure.in	2011-10-22 19:42:20.543032116 +0200
-+++ gnome-system-tools-3.0.0/configure.in	2011-10-22 19:42:47.846688861 +0200
-@@ -251,23 +251,6 @@
- dnl END: GST_LIBS & GST_FLAGS
- dnl ==================================
- 
--dnl ==================================
--dnl LIBIW DETECTION
--dnl ==================================
--
--GST_IW_LIBS=
--AC_CHECK_HEADER(iwlib.h, [
--  enable_libiw=yes
--  AC_DEFINE(HAVE_LIBIW_H, "", [whether libiw is available])
--  AC_HAVE_LIBRARY(iw, [GST_IW_LIBS="-liw"])
--])
--AM_CONDITIONAL(HAVE_LIBIW_H, test x$enable_libiw = xyes)
--AC_SUBST(GST_IW_LIBS)
--
--dnl ==================================
--dnl END: LIBIW DETECTION
--dnl ==================================
--
- dnl ===========================
- dnl NAUTILUS EXTENSION
- dnl ===========================
-Index: gnome-system-tools-3.0.0/src/network/Makefile.am
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/Makefile.am	2011-10-22 19:42:20.471033021 +0200
-+++ gnome-system-tools-3.0.0/src/network/Makefile.am	2011-10-22 19:42:47.846688861 +0200
-@@ -15,23 +15,14 @@
- CLEANFILES = $(GST_TOOL_CLEANFILES)
- EXTRA_DIST = $(GST_TOOL_EXTRA_DIST)
- 
--network_admin_LDADD = $(GST_TOOL_LIBS) $(GST_IW_LIBS) $(DBUS_LIBS) $(GIO_LIBS)
-+network_admin_LDADD = $(GST_TOOL_LIBS) $(DBUS_LIBS) $(GIO_LIBS)
- network_admin_DEPENDENCIES = $(GST_TOOL_DEPENDENCIES)
- 
--if HAVE_LIBIW_H
--essid_SOURCES = essid-list.c essid-list.h
--endif
--
- network_admin_SOURCES = \
- 	$(essid_SOURCES)				\
--	nm-integration.c nm-integration.h	\
- 	address-list.c	address-list.h		\
--	network-locations.c network-locations.h	\
- 	network-tool.c network-tool.h		\
--	locations-combo.c locations-combo.h	\
--	ifaces-list.c ifaces-list.h		\
- 	callbacks.c callbacks.h			\
--	connection.c connection.h		\
- 	hosts.c hosts.h				\
- 	main.c
- 
-Index: gnome-system-tools-3.0.0/src/network/callbacks.c
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/callbacks.c	2011-10-22 19:42:20.511032518 +0200
-+++ gnome-system-tools-3.0.0/src/network/callbacks.c	2011-10-22 19:52:22.879459722 +0200
-@@ -22,294 +22,11 @@
- 
- #include "gst.h"
- #include "network-tool.h"
--#include "ifaces-list.h"
- #include "callbacks.h"
- #include "hosts.h"
--#include "nm-integration.h"
--#include "connection.h"
- 
- extern GstTool *tool;
- 
--void
--on_table_selection_changed (GtkTreeSelection *selection, gpointer data)
--{
--  GtkWidget    *properties;
--
--  properties = gst_dialog_get_widget (tool->main_dialog, "properties_button");
--  gtk_widget_set_sensitive (properties, gtk_tree_selection_get_selected_rows (selection, NULL) != 0);
--}
--
--void
--on_iface_properties_clicked (GtkWidget *widget, gpointer data)
--{
--  GstConnectionDialog *dialog;
--  GtkTreeSelection *selection;
--  GtkTreeModel *model;
--  GtkTreeIter iter;
--  OobsIface *iface;
--
--  selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
--
--  if (gtk_tree_selection_get_selected (selection, &model, &iter))
--    {
--      gtk_tree_model_get (model, &iter,
--			  COL_OBJECT, &iface,
--			  -1);
--
--      dialog = GST_NETWORK_TOOL (tool)->dialog;
--      connection_dialog_prepare (dialog, iface);
--      gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog), GTK_WINDOW (tool->main_dialog));
--
--      gst_dialog_add_edit_dialog (tool->main_dialog, dialog->dialog);
--      gtk_widget_show (dialog->dialog);
--    }
--}
--
--void
--on_iface_active_changed (GtkWidget *widget, gpointer data)
--{
--  GstConnectionDialog *dialog;
--  GtkWidget *roaming_active;
--  gboolean active;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
--
--  connection_dialog_set_sensitive (dialog, active);
--
--  roaming_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_roaming");
--  g_signal_handlers_block_by_func (roaming_active, on_iface_roaming_changed, data);
--  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (roaming_active), !active);
--  g_signal_handlers_unblock_by_func (roaming_active, on_iface_roaming_changed, data);
--}
--
--void
--on_iface_roaming_changed (GtkWidget *widget, gpointer data)
--{
--  GstConnectionDialog *dialog;
--  GtkWidget *device_active;
--  gboolean active;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
--
--  /* roaming changed and device active have just inverted logics */
--  connection_dialog_set_sensitive (dialog, !active);
--
--  device_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_active");
--  g_signal_handlers_block_by_func (device_active, on_iface_active_changed, data);
--  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (device_active), !active);
--  g_signal_handlers_unblock_by_func (device_active, on_iface_active_changed, data);
--}
--
--void
--on_bootproto_changed (GtkWidget *widget, gpointer data)
--{
--  GstConnectionDialog *dialog;
--  gchar *method;
--  gboolean enabled;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  method = connection_combo_get_value (GTK_COMBO_BOX (dialog->bootproto_combo));
--  enabled = (method && strcmp (method, "static") == 0);
--
--  gtk_widget_set_sensitive (dialog->address, enabled);
--  gtk_widget_set_sensitive (dialog->netmask, enabled);
--  gtk_widget_set_sensitive (dialog->gateway, enabled);
--
--  g_free (method);
--}
--
--void
--on_ppp_type_changed (GtkWidget *widget, gpointer data)
--{
--  GstConnectionDialog *dialog;
--  gchar *type;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  type = connection_combo_get_value (GTK_COMBO_BOX (dialog->ppp_type_combo));
--
--  on_dialog_changed (widget, data);
--
--  if (!type)
--    return;
--
--  if (strcmp (type, "modem") == 0)
--    {
--      gtk_widget_show (dialog->modem_page);
--      gtk_widget_show (dialog->isp_frame);
--      gtk_widget_show (dialog->modem_settings_table);
--      gtk_widget_show (dialog->modem_isp_table);
--      gtk_widget_hide (dialog->pppoe_settings_table);
--      gtk_widget_hide (dialog->gprs_isp_table);
--    }
--  else if (strcmp (type, "isdn") == 0)
--    {
--      gtk_widget_show (dialog->isp_frame);
--      gtk_widget_show (dialog->modem_isp_table);
--      gtk_widget_hide (dialog->modem_page);
--      gtk_widget_hide (dialog->gprs_isp_table);
--    }
--  else if (strcmp (type, "pppoe") == 0)
--    {
--      gtk_widget_show (dialog->modem_page);
--      gtk_widget_show (dialog->pppoe_settings_table);
--      gtk_widget_show (dialog->modem_isp_table);
--      gtk_widget_hide (dialog->isp_frame);
--      gtk_widget_hide (dialog->modem_settings_table);
--    }
--  else if (strcmp (type, "gprs") == 0)
--    {
--      gtk_widget_show (dialog->modem_page);
--      gtk_widget_show (dialog->isp_frame);
--      gtk_widget_show (dialog->modem_settings_table);
--      gtk_widget_show (dialog->gprs_isp_table);
--      gtk_widget_hide (dialog->modem_isp_table);
--      gtk_widget_hide (dialog->pppoe_settings_table);
--    }
--}
--
--static void
--cancel_connection_dialog (GstTool *tool)
--{
--  GstConnectionDialog *dialog;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  g_object_unref (dialog->iface);
--  connection_dialog_hide (dialog);
--
--  if (dialog->standalone)
--    gtk_main_quit ();
--}
--
--static gboolean
--toggle_nm (gpointer data)
--{
--  GstNetworkTool *tool = GST_NETWORK_TOOL (data);
--  NMState state;
--
--  state = nm_integration_get_state (tool);
--
--  if (state == NM_STATE_DISCONNECTED ||
--      state == NM_STATE_CONNECTING ||
--      state == NM_STATE_CONNECTED)
--    {
--      /* "reboot" NM */
--      nm_integration_sleep (tool);
--      nm_integration_wake (tool);
--    }
--
--  return FALSE;
--}
--
--static void
--on_configuration_changed (OobsObject *object,
--			  OobsResult  result,
--			  gpointer    data)
--{
--  /* suckety suck, but NM seems not to realize
--   * immediately that the interface status changed */
--  g_timeout_add (2000, toggle_nm, data);
--}
--
--static void
--accept_connection_dialog (GstTool *tool)
--{
--  GstConnectionDialog *dialog;
--  GtkTreeSelection    *selection;
--  GtkTreeIter          iter;
--
--  dialog = GST_NETWORK_TOOL (tool)->dialog;
--  connection_dialog_hide (dialog);
--
--  if (dialog->changed)
--    {
--      connection_save (dialog);
--      selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
--
--      if (gtk_tree_selection_get_selected (selection, NULL, &iter))
--        {
--	  ifaces_model_modify_interface_at_iter (&iter);
--	  g_signal_emit_by_name (G_OBJECT (selection), "changed");
--	}
--
--      gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
--			     _("Changing interface configuration"),
--			     on_configuration_changed, tool);
--    }
--
--  g_object_unref (dialog->iface);
--
--  if (dialog->standalone)
--    gtk_main_quit ();
--}
--
--void
--on_connection_response (GtkWidget *widget,
--			gint       response,
--			gpointer   data)
--{
--  GstConnectionDialog *connection_dialog;
--  GstDialog *dialog = GST_DIALOG (data);
--  GstTool *tool = gst_dialog_get_tool (dialog);
--
--  if (response == GTK_RESPONSE_OK)
--    accept_connection_dialog (tool);
--  else
--    cancel_connection_dialog (tool);
--
--  connection_dialog = GST_NETWORK_TOOL (tool)->dialog;
--  gst_dialog_remove_edit_dialog (tool->main_dialog, connection_dialog->dialog);
--}
--
--void
--on_detect_modem_clicked (GtkWidget *widget, gpointer data)
--{
--  GstNetworkTool      *network_tool;
--  GstConnectionDialog *dialog;
--  GtkWidget           *d;
--  GdkCursor           *cursor;
--  gchar               *dev = NULL;
--
--  network_tool = GST_NETWORK_TOOL (tool);
--  dialog = network_tool->dialog;
--
--  /* give some feedback to let know the user that the tool is busy */
--  gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), "");
--  gtk_widget_set_sensitive (dialog->serial_port, FALSE);
--  gtk_widget_set_sensitive (dialog->detect_modem, FALSE);
--
--  cursor = gdk_cursor_new (GDK_WATCH);
--  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), cursor);
--  gdk_cursor_unref (cursor);
--
--  dev = connection_detect_modem ();
--
--  /* remove the user feedback */
--  gtk_widget_set_sensitive (dialog->detect_modem, TRUE);
--  gtk_widget_set_sensitive (dialog->serial_port, TRUE);
--  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), NULL);
--
--  if (!dev || !*dev)
--    {
--      d = gtk_message_dialog_new (GTK_WINDOW (dialog->dialog),
--				  GTK_DIALOG_MODAL,
--				  GTK_MESSAGE_INFO,
--				  GTK_BUTTONS_CLOSE,
--				  _("Could not autodetect modem device"),
--				  NULL);
--      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
--						_("Check that the device is not busy and "
--						  "that is correctly attached to the computer."),
--						NULL);
--      gtk_dialog_run (GTK_DIALOG (d));
--      gtk_widget_destroy (d);
--    }
--  else
--    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), dev);
--
--  g_free (dev);
--}
- 
- static void
- do_popup_menu (GtkWidget *table, GstTablePopup *table_popup, GdkEventButton *event)
-@@ -437,64 +154,6 @@
- }
- 
- void
--on_dialog_changed (GtkWidget *widget, gpointer data)
--{
--  GstNetworkTool *network_tool = GST_NETWORK_TOOL (tool);
--
--  network_tool->dialog->changed = TRUE;
--  connection_check_fields (network_tool->dialog);
--}
--
--gboolean
--on_ip_address_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
--{
--  GstConnectionDialog *dialog = GST_NETWORK_TOOL (tool)->dialog;
--
--  connection_check_netmask (dialog->address, dialog->netmask);
--  return FALSE;
--}
--
--void
--on_iface_toggled (GtkCellRendererToggle *renderer,
--		  gchar                 *path_str,
--		  gpointer               data)
--{
--  GtkTreePath *path;
--  GtkTreeModel *model = GTK_TREE_MODEL (data);
--  GtkTreeIter iter;
--  gboolean active, inconsistent;
--  OobsIface *iface;
--
--  path = gtk_tree_path_new_from_string (path_str);
--
--  if (gtk_tree_model_get_iter (model, &iter, path))
--    {
--      gtk_tree_model_get (model, &iter,
--			  COL_ACTIVE, &active,
--			  COL_INCONSISTENT, &inconsistent,
--			  COL_OBJECT, &iface,
--			  -1);
--
--      if (!inconsistent)
--	{
--	  active ^= 1;
--
--	  oobs_iface_set_active (iface, active);
--	  oobs_iface_set_auto (iface, active);
--	  ifaces_model_modify_interface_at_iter (&iter);
--
--	  gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
--				 _("Changing interface configuration"),
--				 on_configuration_changed, tool);
--	}
--
--      g_object_unref (iface);
--    }
--
--  gtk_tree_path_free (path);
--}
--
--void
- on_entry_changed (GtkWidget *widget, gpointer data)
- {
-   g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (TRUE));
-Index: gnome-system-tools-3.0.0/src/network/callbacks.h
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/callbacks.h	2011-10-22 19:42:20.483032869 +0200
-+++ gnome-system-tools-3.0.0/src/network/callbacks.h	2011-10-22 19:42:47.854688761 +0200
-@@ -30,19 +30,6 @@
-   GtkWidget *popup;
- };
- 
--void  on_table_selection_changed   (GtkTreeSelection*, gpointer);
--void  on_iface_properties_clicked  (GtkWidget*, gpointer);
--
--void  on_iface_active_changed      (GtkWidget*, gpointer);
--void  on_iface_roaming_changed     (GtkWidget *widget, gpointer data);
--
--void  on_bootproto_changed         (GtkWidget*, gpointer);
--void  on_detect_modem_clicked      (GtkWidget*, gpointer);
--void  on_connection_response       (GtkWidget *widget,
--				    gint       response,
--				    gpointer   data);
--
--
- gboolean on_table_button_press (GtkWidget*, GdkEventButton*, gpointer);
- gboolean on_table_popup_menu   (GtkWidget*, gpointer);
- 
-@@ -52,14 +39,6 @@
- void  on_host_aliases_dialog_changed     (GtkWidget*, gpointer);
- 
- 
--void  on_dialog_changed (GtkWidget*, gpointer);
--
--gboolean on_ip_address_focus_out (GtkWidget*, GdkEventFocus*, gpointer);
--
--void  on_iface_toggled  (GtkCellRendererToggle *renderer,
--			 gchar                 *path_str,
--			 gpointer               data);
--
- void     on_entry_changed      (GtkWidget     *widget,
- 				gpointer       data);
- gboolean on_hostname_focus_out (GtkWidget     *widget,
-Index: gnome-system-tools-3.0.0/src/network/main.c
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/main.c	2011-10-22 19:42:20.491032769 +0200
-+++ gnome-system-tools-3.0.0/src/network/main.c	2011-10-22 19:42:47.854688761 +0200
-@@ -27,14 +27,11 @@
- 
- #include "gst.h"
- #include "network-tool.h"
--#include "ifaces-list.h"
- #include "callbacks.h"
- 
- GstTool *tool;
- 
- static GstDialogSignal signals[] = {
--  /* connections tab */
--  { "properties_button",            "clicked", G_CALLBACK (on_iface_properties_clicked) },
-   /* general tab */
-   { "domain",                       "focus-out-event", G_CALLBACK (on_domain_focus_out) },
-   { "hostname",                     "changed", G_CALLBACK (on_entry_changed) },
-@@ -45,37 +42,6 @@
-   { "host_aliases_delete",          "clicked", G_CALLBACK (on_host_aliases_delete_clicked) },
-   /* host aliases dialog */
-   { "host_alias_address",           "changed", G_CALLBACK (on_host_aliases_dialog_changed) },
--  /* connection dialog */
--  { "connection_config_dialog",     "response", G_CALLBACK (on_connection_response) },
--  { "connection_config_dialog",     "delete-event", G_CALLBACK (gtk_true) },
--  { "connection_device_active",     "clicked", G_CALLBACK (on_iface_active_changed) },
--  { "connection_device_roaming",    "clicked", G_CALLBACK (on_iface_roaming_changed) },
--  { "connection_bootproto",         "changed", G_CALLBACK (on_bootproto_changed) },
--  { "connection_detect_modem",      "clicked", G_CALLBACK (on_detect_modem_clicked) },
--  /* dialog changing detection */
--  { "connection_address",           "focus-out-event", G_CALLBACK (on_ip_address_focus_out) },
--  { "connection_ppp_type",          "changed", G_CALLBACK (on_ppp_type_changed) },
--  { "connection_device_active",     "toggled", G_CALLBACK (on_dialog_changed) },
--  { "connection_essid",             "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_wep_key_type",      "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_wep_key",           "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_bootproto",         "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_address",           "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_netmask",           "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_gateway",           "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_local_address",     "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_remote_address",    "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_serial_port",       "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_dial_type",         "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_volume",            "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_phone_number",      "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_dial_prefix",       "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_login",             "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_password",          "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_default_gw",        "toggled", G_CALLBACK (on_dialog_changed) },
--  { "connection_persist",           "toggled", G_CALLBACK (on_dialog_changed) },
--  { "connection_apn",               "changed", G_CALLBACK (on_dialog_changed) },
--  { "connection_pppoe_ethernet",    "changed", G_CALLBACK (on_dialog_changed) },
-   { NULL }
- };
- 
-@@ -85,11 +51,6 @@
- };
- 
- static const gchar *policy_widgets [] = {
--	"locations_combo",
--	"add_location",
--	"remove_location",
--	"interfaces_list",
--	"properties_button",
- 	"hostname",
- 	"domain",
- 	"dns_list",
-@@ -106,58 +67,9 @@
- };
- 
- static void
--init_standalone_dialog (GstTool         *tool,
--			IfaceSearchTerm  search_term,
--			const gchar     *term)
--{
--  GstNetworkTool *network_tool;
--  OobsIface      *iface;
--  GtkWidget      *d;
--
--  network_tool = GST_NETWORK_TOOL (tool);
--  gst_tool_update_gui (tool);
--  iface = ifaces_model_search_iface (search_term, term);
--
--  if (iface)
--    {
--      connection_dialog_prepare (network_tool->dialog, iface);
--      network_tool->dialog->standalone = TRUE;
--      g_object_unref (iface);
--
--      gtk_widget_show (network_tool->dialog->dialog);
--    }
--  else
--    {
--      d = gtk_message_dialog_new (GTK_WINDOW (tool->main_dialog),
--                                  GTK_DIALOG_MODAL,
--                                  GTK_MESSAGE_WARNING,
--                                  GTK_BUTTONS_CLOSE,
--                                  _("The interface does not exist"));
--      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
--                                                _("Check that it is correctly typed "
--                                                  "and that it is correctly supported "
--                                                  "by your system."),
--                                                NULL);
--      gtk_dialog_run (GTK_DIALOG (d));
--      gtk_widget_destroy (d);
--      exit (-1);
--    }
--}
--
--static void
- init_filters (void)
- {
-   gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "host_alias_address")), GST_FILTER_IP);
--
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_address")), GST_FILTER_IPV4);
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_netmask")), GST_FILTER_IPV4);
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_gateway")), GST_FILTER_IPV4);
--
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_local_address")), GST_FILTER_IPV4);
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_remote_address")), GST_FILTER_IPV4);
--
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_phone_number")), GST_FILTER_PHONE);
--  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_dial_prefix")), GST_FILTER_PHONE);
- }
- 
- static void
-@@ -176,17 +88,8 @@
- int
- main (int argc, gchar *argv[])
- {
--  gchar *interface = NULL;
--  gchar *type = NULL;
--
--  GOptionEntry entries[] = {
--    { "configure",      'c', 0, G_OPTION_ARG_STRING, &interface, N_("Configure a network interface"), N_("INTERFACE") },
--    { "configure-type", 't', 0, G_OPTION_ARG_STRING, &type,      N_("Configure the first network interface with a specific type"), N_("TYPE") },
--    { NULL }
--  };
--
-   g_thread_init (NULL);
--  gst_init_tool ("network-admin", argc, argv, entries);
-+  gst_init_tool ("network-admin", argc, argv, NULL);
-   tool = gst_network_tool_new ();
- 
-   gst_dialog_require_authentication_for_widgets (tool->main_dialog, policy_widgets);
-@@ -195,12 +98,7 @@
-   set_text_buffers_callback ();
-   init_filters ();
- 
--  if (interface)
--    init_standalone_dialog (tool, SEARCH_DEV, interface);
--  else if (type)
--    init_standalone_dialog (tool, SEARCH_TYPE, type);
--  else
--    gtk_widget_show (GTK_WIDGET (tool->main_dialog));
-+  gtk_widget_show (GTK_WIDGET (tool->main_dialog));
- 
-   gtk_main ();
-   return 0;
-Index: gnome-system-tools-3.0.0/src/network/network-tool.c
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/network-tool.c	2011-10-22 19:42:20.455033222 +0200
-+++ gnome-system-tools-3.0.0/src/network/network-tool.c	2011-10-22 19:42:47.854688761 +0200
-@@ -22,11 +22,8 @@
- #include <glib/gi18n.h>
- #include "gst.h"
- #include "network-tool.h"
--#include "ifaces-list.h"
--#include "connection.h"
- #include "callbacks.h"
- #include "hosts.h"
--#include "locations-combo.h"
- 
- static void gst_network_tool_class_init (GstNetworkToolClass *class);
- static void gst_network_tool_init       (GstNetworkTool      *tool);
-@@ -57,13 +54,8 @@
- {
-   tool->hosts_config = OOBS_HOSTS_CONFIG (oobs_hosts_config_get ());
-   gst_tool_add_configuration_object (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config), TRUE);
--  tool->ifaces_config = OOBS_IFACES_CONFIG (oobs_ifaces_config_get ());
--  gst_tool_add_configuration_object (GST_TOOL (tool), OOBS_OBJECT (tool->ifaces_config), TRUE);
- 
-   tool->bus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, NULL);
--
--  g_signal_connect_swapped (tool->ifaces_config, "changed",
--			    G_CALLBACK (gst_tool_update_async), tool);
- }
- 
- static void
-@@ -77,9 +69,6 @@
- 
-   g_object_unref (tool->dns);
-   g_object_unref (tool->search);
--  g_object_unref (tool->interfaces_model);
--  g_object_unref (tool->location);
--  g_free (tool->dialog);
- 
-   (* G_OBJECT_CLASS (gst_network_tool_parent_class)->finalize) (object);
- }
-@@ -140,16 +129,8 @@
-   widget = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "domain");
-   tool->domain = GTK_ENTRY (widget);
- 
--  tool->interfaces_model = ifaces_model_create ();
--  tool->interfaces_list = ifaces_list_create (GST_TOOL (tool));
-   tool->host_aliases_list = host_aliases_list_create (GST_TOOL (tool));
- 
--  widget = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "locations_combo");
--  add_button = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "add_location");
--  delete_button = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "remove_location");
--  tool->location = gst_locations_combo_new (GST_TOOL (tool), widget, add_button, delete_button);
--
--  tool->dialog = connection_dialog_init (GST_TOOL (tool));
+                 <property name="spacing">6</property>
+                 <child>
+--- a/src/network/network-tool.c
++++ b/src/network/network-tool.c
+@@ -152,6 +152,11 @@ gst_network_tool_constructor (GType
+   tool->dialog = connection_dialog_init (GST_TOOL (tool));
    tool->host_aliases_dialog = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "host_aliases_edit_dialog");
  
++  if (!g_file_test ("/usr/sbin/NetworkManager", G_FILE_TEST_IS_EXECUTABLE)) {
++    gtk_widget_set_visible (gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "hbox3"), TRUE);
++    gtk_widget_set_visible (gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "locations_box"), TRUE);
++  }
++
    return object;
-@@ -189,48 +170,6 @@
  }
  
- static void
--add_interfaces (GtkTreeView *ifaces_list, OobsList *list)
--{
--  OobsListIter iter;
--  GObject *iface;
--  gboolean valid;
--  gint n_items;
--
--  valid = oobs_list_get_iter_first (list, &iter);
--  n_items = oobs_list_get_n_items (list);
--
--  while (valid)
--    {
--      iface = oobs_list_get (list, &iter);
--      ifaces_model_add_interface (OOBS_IFACE (iface), (n_items > 1));
--
--      g_object_unref (iface);
--      valid = oobs_list_iter_next (list, &iter);
--    }
--}
--
--static void
--add_all_interfaces (GstNetworkTool *network_tool)
--{
--  OobsList *ifaces_list;
--
--  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_ETHERNET);
--  add_interfaces (network_tool->interfaces_list, ifaces_list);
--
--  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_WIRELESS);
--  add_interfaces (network_tool->interfaces_list, ifaces_list);
--
--  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_IRLAN);
--  add_interfaces (network_tool->interfaces_list, ifaces_list);
--
--  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_PLIP);
--  add_interfaces (network_tool->interfaces_list, ifaces_list);
--
--  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_PPP);
--  add_interfaces (network_tool->interfaces_list, ifaces_list);
--}
--
--static void
- set_entry_text (GtkWidget *entry, const gchar *text)
- {
-   gtk_entry_set_text (GTK_ENTRY (entry), (text) ? text : "");
-@@ -265,11 +204,6 @@
-   set_entry_text (GTK_WIDGET (network_tool->domain),
- 		  oobs_hosts_config_get_domainname (network_tool->hosts_config));
-   g_signal_handlers_unblock_by_func (network_tool->domain, on_entry_changed, tool->main_dialog);
--
--  gtk_list_store_clear (GTK_LIST_STORE (network_tool->interfaces_model));
--  add_all_interfaces (network_tool);
--
--  connection_dialog_update (network_tool->dialog);
- }
- 
- GstTool*
-Index: gnome-system-tools-3.0.0/src/network/network-tool.h
-===================================================================
---- gnome-system-tools-3.0.0.orig/src/network/network-tool.h	2011-10-22 19:42:20.531032266 +0200
-+++ gnome-system-tools-3.0.0/src/network/network-tool.h	2011-10-22 19:42:47.854688761 +0200
-@@ -26,8 +26,7 @@
- #include <gtk/gtk.h>
- #include <dbus/dbus.h>
- #include "address-list.h"
--#include "locations-combo.h"
--#include "connection.h"
-+#include "gst.h"
- 
- #define GST_TYPE_NETWORK_TOOL           (gst_network_tool_get_type ())
- #define GST_NETWORK_TOOL(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETWORK_TOOL, GstNetworkTool))
-@@ -45,7 +44,6 @@
- 
-   /* config */
-   OobsHostsConfig *hosts_config;
--  OobsIfacesConfig *ifaces_config;
- 
-   /* gui */
-   GstAddressList *dns;
-@@ -54,16 +52,11 @@
-   /* bus, used for NM integration */
-   DBusConnection *bus_connection;
- 
--  GtkTreeModel *interfaces_model;
--  GtkTreeView  *interfaces_list;
--
-   GtkTreeView *host_aliases_list;
--  GstLocationsCombo *location;
- 
-   GtkEntry *hostname;
-   GtkEntry *domain;
- 
--  GstConnectionDialog *dialog;
-   GtkWidget *host_aliases_dialog;
- };
- 
diff -pruN 3.0.0-2/debian/patches/25_sambashare_group_definition.patch 3.0.0-2ubuntu1/debian/patches/25_sambashare_group_definition.patch
--- 3.0.0-2/debian/patches/25_sambashare_group_definition.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/25_sambashare_group_definition.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,15 @@
+Description: Add sambashare to known groups
+Author: ?
+
+Index: gnome-system-tools-2.29.3/src/users/privileges-table.c
+===================================================================
+--- gnome-system-tools-2.29.3.orig/src/users/privileges-table.c	2010-01-11 18:53:30.000000000 +0000
++++ gnome-system-tools-2.29.3/src/users/privileges-table.c	2010-02-05 15:50:16.090834805 +0000
+@@ -65,6 +65,7 @@
+ 	{ "plugdev", N_("Access external storage devices automatically") },
+ 	{ "powerdev", N_("Suspend and hibernate the computer") },
+ 	{ "proc", N_("Access /proc filesystem") },
++	{ "sambashare", N_("Share files with the local network") },
+ 	{ "scanner", N_("Use scanners") },
+ 	{ "tape", N_("Use tape drives") },
+ 	{ "usb", N_("Use USB devices") },
diff -pruN 3.0.0-2/debian/patches/26_user_profiles_conf.patch 3.0.0-2ubuntu1/debian/patches/26_user_profiles_conf.patch
--- 3.0.0-2/debian/patches/26_user_profiles_conf.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/26_user_profiles_conf.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,19 @@
+Description: Don't add new users to the audio and scanner groups
+Author: ?
+
+Index: gnome-system-tools-2.29.91/src/users/user-profiles.conf.in
+===================================================================
+--- gnome-system-tools-2.29.91.orig/src/users/user-profiles.conf.in	2010-01-11 19:26:31.000000000 +0000
++++ gnome-system-tools-2.29.91/src/users/user-profiles.conf.in	2010-03-07 11:56:43.290685321 +0000
+@@ -2,9 +2,9 @@
+ _Name=Desktop user
+ _Description=Can perform common tasks. Can't install software or change settings affecting all users.
+ Default=1
+-Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,video
++Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,fuse,video
+ 
+ [Administrator]
+ _Name=Administrator
+ _Description=Can change anything on the system, including installing and upgrading software.
+-Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,admin,sambashare,lpadmin,video
++Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,fuse,admin,sambashare,lpadmin,video
diff -pruN 3.0.0-2/debian/patches/80_gst-packages-common.patch 3.0.0-2ubuntu1/debian/patches/80_gst-packages-common.patch
--- 3.0.0-2/debian/patches/80_gst-packages-common.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/80_gst-packages-common.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,272 @@
+Description: Add functions for Ubuntu packaging
+Author: ?
+
+Index: gnome-system-tools-3.0.0/src/common/Makefile.am
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/common/Makefile.am	2010-12-12 12:39:02.000000000 -0500
++++ gnome-system-tools-3.0.0/src/common/Makefile.am	2011-12-16 16:35:31.000000000 -0500
+@@ -11,6 +11,7 @@
+ 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"
+ 
+ libsetuptool_a_SOURCES = \
++	gst-package.c		gst-package.h	\
+ 	gst-dialog.c		gst-dialog.h \
+ 	gst-tool.c		gst-tool.h \
+ 	gst-platform-dialog.c	gst-platform-dialog.h \
+Index: gnome-system-tools-3.0.0/src/common/gst-package.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ gnome-system-tools-3.0.0/src/common/gst-package.c	2011-12-16 16:41:12.427282686 -0500
+@@ -0,0 +1,201 @@
++/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
++/* 
++ * Copyright (C) 2004 Vincent Untz
++ *
++ * 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.
++ *
++ * Authors:   Vincent Untz <vincent@vuntz.net>
++ *            Guillaume Desmottes <cass@skynet.be>
++ *            Carlos Garnacho <carlosg@gnome.org>
++ */
++
++#ifdef HAVE_CONFIG_H
++#  include <config.h>
++#endif
++
++#include <gdk/gdk.h>
++#include <gdk/gdkx.h>
++#include <gtk/gtk.h>
++#include <glib/gi18n.h>
++#include <string.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/wait.h>
++
++#include "gst-package.h"
++
++static void
++show_error_dialog (GtkWindow   *window,
++		   const gchar *secondary_text)
++{
++      GtkWidget *dialog;
++
++      dialog = gtk_message_dialog_new (window,
++				       GTK_DIALOG_MODAL,
++				       GTK_MESSAGE_ERROR,
++				       GTK_BUTTONS_CLOSE,
++				       _("Could not install package"));
++
++      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_text);
++      gtk_dialog_run (GTK_DIALOG (dialog));
++      gtk_widget_destroy (dialog);
++}
++
++static gboolean
++find_app (GtkWindow   *window,
++	  const gchar *app)
++{
++  gchar *path;
++
++  path = g_find_program_in_path (app);
++
++  if (!path)
++    {
++      show_error_dialog (window,
++			 _("The necessary applications to install"
++			   " the package could not be found."));
++      return FALSE;
++    }
++
++  g_free (path);
++
++  return TRUE;
++}
++
++static gchar *
++create_temp_file (const gchar *packages[])
++{
++  int fd;
++  gchar *path, *str;
++
++  path = g_strdup_printf ("/tmp/packages.XXXXXX");
++  fd = mkstemp (path);
++
++  while (*packages)
++    {
++      str = g_strdup_printf ("%s\ti\n", *packages);
++      write (fd, str, strlen (str));
++      g_free (str);
++      packages++;
++    }
++
++  close (fd);
++  return path;
++}
++
++static gchar*
++get_synaptic_command_line (GtkWindow   *window,
++			   const gchar *path)
++{
++  gchar *synaptic_path, *command;
++
++  synaptic_path = g_find_program_in_path ("synaptic");
++  command = g_strdup_printf ("%s --hide-main-window --non-interactive "
++			     "--set-selections-file %s --parent-window-id %ld",
++			     synaptic_path, path,
++                             (long)gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (window))));
++  g_free (synaptic_path);
++  return command;
++}
++
++static gboolean
++spawn_synaptic (GtkWindow   *window,
++		const gchar *path,
++		GPid        *child_pid)
++{
++  gchar **argv;
++  GError *error = NULL;
++  gboolean retval = TRUE;
++  gint i = 0;
++
++  argv = g_new0 (gchar*, 6);
++  argv[i++] = g_find_program_in_path ("gksudo");
++  argv[i++] = g_strdup ("--desktop");
++  argv[i++] = g_strdup ("/usr/share/applications/synaptic.desktop");
++  argv[i++] = g_strdup ("--disable-grab");
++  argv[i++] = g_strdup ("--display");
++  argv[i++] = gdk_screen_make_display_name (gtk_window_get_screen (window));
++  argv[i++] = get_synaptic_command_line (window, path);
++  argv[i++] = NULL;
++
++  if (!g_spawn_async (NULL, argv, NULL,
++		      G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
++		      NULL, NULL, child_pid, &error))
++    {
++      show_error_dialog (window, (error) ? error->message : "");
++      g_error_free (error);
++      retval = FALSE;
++    }
++
++  g_strfreev (argv);
++
++  return retval;
++}
++
++static void
++on_wait_timeout (GPid pid, gint status, gpointer data)
++{
++  g_spawn_close_pid (pid);
++  /* FIXME: should show an error dialog if the installation fails,
++   * but funnily I'm getting always an exit status 0 here... maybe gksudo fault? */
++  gtk_main_quit ();
++}
++
++static gboolean
++wait_for_synaptic (GtkWindow *window, GPid pid)
++{
++  GdkCursor *cursor;
++
++  cursor = gdk_cursor_new (GDK_WATCH);
++  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), cursor);
++  gtk_widget_set_sensitive (GTK_WIDGET (window), FALSE);
++
++  /* wait here a bit until the process has exited */
++  g_child_watch_add (pid, on_wait_timeout, NULL);
++  gtk_main ();
++
++  gtk_widget_set_sensitive (GTK_WIDGET (window), TRUE);
++  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
++
++  g_object_unref (cursor);
++
++  /* keep this until we can get status
++   * info from the launched process */
++  return TRUE;
++}
++
++gboolean
++gst_packages_install (GtkWindow   *window,
++		      const gchar *packages[])
++{
++  gchar *path;
++  GPid pid;
++  gboolean retval = FALSE;
++
++  g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
++
++  if (!find_app (window, "synaptic") || !find_app (window, "gksudo"))
++    return FALSE;
++
++  path = create_temp_file (packages);
++
++  if (spawn_synaptic (window, path, &pid))
++    retval = wait_for_synaptic (window, pid);
++
++  unlink (path);
++  g_free (path);
++
++  return retval;
++}
+Index: gnome-system-tools-3.0.0/src/common/gst-package.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ gnome-system-tools-3.0.0/src/common/gst-package.h	2011-12-16 16:35:31.000000000 -0500
+@@ -0,0 +1,35 @@
++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
++/* 
++ * Copyright (C) 2004 Vincent Untz
++ *
++ * 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.
++ *
++ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>
++ * Authors: Vincent Untz <vincent@vuntz.net>
++ * Authors: Guillaume Desmottes <cass@skynet.be>
++ */
++
++#ifndef __GST_PACKAGES_H__
++#define __GST_PACKAGES_H__
++
++#include <gtk/gtk.h>
++
++G_BEGIN_DECLS
++
++gboolean gst_packages_install (GtkWindow *window, const char **packages);
++
++G_END_DECLS
++
++#endif /* __GST_PACKAGES_H__ */
+Index: gnome-system-tools-3.0.0/src/common/gst.h
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/common/gst.h	2010-10-06 05:54:53.000000000 -0400
++++ gnome-system-tools-3.0.0/src/common/gst.h	2011-12-16 16:35:31.000000000 -0500
+@@ -1,5 +1,6 @@
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+ #include <config.h>
++#include "gst-package.h"
+ #include "gst-tool.h"
+ #include "gst-dialog.h"
+ #include "gst-filter.h"
diff -pruN 3.0.0-2/debian/patches/81_gst-packages-shares-admin.patch 3.0.0-2ubuntu1/debian/patches/81_gst-packages-shares-admin.patch
--- 3.0.0-2/debian/patches/81_gst-packages-shares-admin.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/81_gst-packages-shares-admin.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,84 @@
+Description: Install nfs-kernel-server and samba packages on demand
+Author: ?
+
+Index: gnome-system-tools-3.0.0/src/shares/shares-tool.c
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/shares/shares-tool.c	2011-12-16 16:49:47.751288140 -0500
++++ gnome-system-tools-3.0.0/src/shares/shares-tool.c	2011-12-16 16:52:13.087289678 -0500
+@@ -138,9 +138,36 @@
+ }
+ 
+ static gboolean
++install_packages (GstTool *tool, gboolean install_nfs, gboolean install_smb)
++{
++	gchar **packages;
++	gboolean retval;
++	gint i = 0;
++
++	if (!install_nfs && !install_smb)
++		return FALSE;
++
++	packages = g_new0 (gchar*, 3);
++
++	if (install_nfs)
++		packages[i++] = g_strdup ("nfs-kernel-server");
++
++	if (install_smb)
++		packages[i++] = g_strdup ("samba");
++
++	retval = gst_packages_install (GTK_WINDOW (tool->main_dialog), packages);
++	g_strfreev (packages);
++
++	return retval;
++}
++
++static gboolean
+ check_servers (GstSharesTool *tool)
+ {
+ 	GtkWidget *dialog;
++	GtkWidget *nfs_check, *smb_check;
++	gint response;
++	gboolean retval = FALSE;
+ 
+ 	if (tool->smb_available || tool->nfs_available)
+ 		return TRUE;
+@@ -153,10 +180,36 @@
+ 	gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
+ 						    _("You need to install at least either Samba or NFS "
+ 						      "in order to share your folders."));
+-	gtk_dialog_run (GTK_DIALOG (dialog));
+-	gtk_widget_destroy (dialog);
++	gtk_dialog_add_button (GTK_DIALOG (dialog), _("Install services"), GTK_RESPONSE_OK);
++
++	/* add NFS checkbutton */
++	nfs_check = gtk_check_button_new_with_mnemonic (_("Install Unix networks support (_NFS)"));
++	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nfs_check), TRUE);
++	gtk_widget_show (nfs_check);
++	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), nfs_check);
++
++	/* add SMB checkbutton */
++	smb_check = gtk_check_button_new_with_mnemonic (_("Install Windows networks support (_SMB)"));
++	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smb_check), TRUE);
++	gtk_widget_show (smb_check);
++	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), smb_check);
+ 
+-	return FALSE;
++	response = gtk_dialog_run (GTK_DIALOG (dialog));
++	gtk_widget_hide (dialog);
++
++	if (response == GTK_RESPONSE_OK) {
++		if (install_packages (GST_TOOL (tool),
++				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (nfs_check)),
++				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (smb_check)))) {
++			gst_tool_update_config (GST_TOOL (tool));
++			gst_tool_update_gui (GST_TOOL (tool));
++
++			retval = TRUE;
++		}
++	}
++
++	gtk_widget_destroy (dialog);
++	return retval;
+ }
+ 
+ static void
diff -pruN 3.0.0-2/debian/patches/82_gst-packages-time-admin.patch 3.0.0-2ubuntu1/debian/patches/82_gst-packages-time-admin.patch
--- 3.0.0-2/debian/patches/82_gst-packages-time-admin.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/82_gst-packages-time-admin.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,41 @@
+Description: Install ntp package on demand
+Author: ?
+
+Index: gnome-system-tools-2.31.91/src/time/time-tool.c
+===================================================================
+--- gnome-system-tools-2.31.91.orig/src/time/time-tool.c	2010-05-25 03:09:57.000000000 +1000
++++ gnome-system-tools-2.31.91/src/time/time-tool.c	2010-09-01 18:36:02.102617000 +1000
+@@ -374,6 +374,7 @@
+ {
+ 	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+ 	GtkWidget *message, *widget;
++	gint response;
+ 
+ 	if (GST_TIME_TOOL (tool)->ntp_service)
+ 		return TRUE;
+@@ -400,9 +401,24 @@
+ 						  _("Please install and activate NTP support in the system to enable "
+ 						    "synchronization of your local time server with "
+ 						    "internet time servers."));
+-	gtk_dialog_run (GTK_DIALOG (message));
++
++	gtk_dialog_add_button (GTK_DIALOG (message), _("Install NTP support"), GTK_RESPONSE_OK);
++	response = gtk_dialog_run (GTK_DIALOG (message));
+ 	gtk_widget_destroy (message);
+ 
++	if (response == GTK_RESPONSE_OK) {
++		const gchar *packages[] = { "ntp", NULL };
++
++		if (gst_packages_install (GTK_WINDOW (tool->main_dialog), packages)) {
++			gtk_combo_box_set_active (GTK_COMBO_BOX (widget), CONFIGURATION_AUTOMATIC);
++			gst_tool_update_config (tool);
++			gst_tool_update_gui (tool);
++
++			if (GST_TIME_TOOL (tool)->ntp_service)
++				return TRUE;
++		}
++	}
++
+ 	return FALSE;
+ }
+ 
diff -pruN 3.0.0-2/debian/patches/91_shares_services_detection.patch 3.0.0-2ubuntu1/debian/patches/91_shares_services_detection.patch
--- 3.0.0-2/debian/patches/91_shares_services_detection.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/91_shares_services_detection.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,66 @@
+Index: shares-services/src/shares/shares-tool.c
+===================================================================
+--- shares-services.orig/src/shares/shares-tool.c	2010-05-26 15:55:30.000000000 +0200
++++ shares-services/src/shares/shares-tool.c	2010-05-26 15:55:39.000000000 +0200
+@@ -62,9 +62,6 @@
+ 	tool->smb_config = oobs_smb_config_get ();
+ 	gst_tool_add_configuration_object (gst_tool, tool->smb_config, TRUE);
+ 
+-	tool->services_config = oobs_services_config_get ();
+-	gst_tool_add_configuration_object (gst_tool, tool->services_config, TRUE);
+-
+ 	tool->hosts_config = oobs_hosts_config_get ();
+ 	gst_tool_add_configuration_object (gst_tool, tool->hosts_config, TRUE);
+ 
+@@ -256,30 +253,19 @@
+ 	gst_shares_tool_update_services_availability (shares_tool);
+ }
+ 
++/* Services detection is very rough:
++ * since Upstart jobs are not supported (yet?), we fall back on checking
++ * that files are present, which means packages are installed.
++ * Anyway, the only right way to do this would be checking that
++ * the package is present, e.g. using PackageKit. */
+ static void
+ gst_shares_tool_update_services_availability (GstSharesTool *tool)
+ {
+-	OobsList *services;
+-	OobsListIter iter;
+-	GObject *service;
+-	gboolean valid;
+-	GstServiceRole role;
+-
+-	services = oobs_services_config_get_services (OOBS_SERVICES_CONFIG (tool->services_config));
+-	valid = oobs_list_get_iter_first (services, &iter);
++        if (g_file_test ("/usr/sbin/smbd", G_FILE_TEST_EXISTS))
++        	tool->smb_available = TRUE;
+ 
+-	while (valid) {
+-		service = oobs_list_get (services, &iter);
+-		role = gst_service_get_role (OOBS_SERVICE (service));
+-
+-		if (role == GST_ROLE_FILE_SERVER_SMB)
+-			tool->smb_available = TRUE;
+-		else if (role == GST_ROLE_FILE_SERVER_NFS)
+-			tool->nfs_available = TRUE;
+-
+-		g_object_unref (service);
+-		valid = oobs_list_iter_next (services, &iter);
+-	}
++        if (g_file_test ("/usr/sbin/rpc.nfsd", G_FILE_TEST_EXISTS))
++		tool->nfs_available = TRUE;
+ }
+ 
+ GstSharesTool*
+Index: shares-services/src/shares/shares-tool.h
+===================================================================
+--- shares-services.orig/src/shares/shares-tool.h	2010-05-26 15:46:31.000000000 +0200
++++ shares-services/src/shares/shares-tool.h	2010-05-26 15:55:39.000000000 +0200
+@@ -44,7 +44,6 @@
+ 	OobsObject *smb_config;
+ 
+ 	/* read only */
+-	OobsObject *services_config;
+ 	OobsObject *hosts_config;
+ 	OobsObject *users_config;
+ 
diff -pruN 3.0.0-2/debian/patches/92_fix_add_needed_linking.patch 3.0.0-2ubuntu1/debian/patches/92_fix_add_needed_linking.patch
--- 3.0.0-2/debian/patches/92_fix_add_needed_linking.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/92_fix_add_needed_linking.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,26 @@
+Index: gnome-system-tools-2.32.0/src/time/Makefile.am
+===================================================================
+--- gnome-system-tools-2.32.0.orig/src/time/Makefile.am	2011-01-05 19:29:32.000000000 +0100
++++ gnome-system-tools-2.32.0/src/time/Makefile.am	2011-01-05 19:30:37.000000000 +0100
+@@ -15,7 +15,7 @@
+ CLEANFILES = $(GST_TOOL_CLEANFILES)
+ EXTRA_DIST = $(GST_TOOL_EXTRA_DIST)
+ 
+-time_admin_LDADD = $(GST_TOOL_LIBS) $(DBUS_LIBS) ./e-map/libemap.a
++time_admin_LDADD = ./e-map/libemap.a $(GST_TOOL_LIBS) $(DBUS_LIBS)
+ time_admin_DEPENDENCIES = $(GST_TOOL_DEPENDENCIES) ./e-map/libemap.a
+ time_admin_SOURCES = \
+ 	time-tool.c	time-tool.h \
+Index: gnome-system-tools-2.32.0/src/time/Makefile.in
+===================================================================
+--- gnome-system-tools-2.32.0.orig/src/time/Makefile.in	2011-01-05 19:30:42.000000000 +0100
++++ gnome-system-tools-2.32.0/src/time/Makefile.in	2011-01-05 19:31:06.000000000 +0100
+@@ -339,7 +339,7 @@
+ SUBDIRS = e-map
+ CLEANFILES = $(GST_TOOL_CLEANFILES)
+ EXTRA_DIST = $(GST_TOOL_EXTRA_DIST)
+-time_admin_LDADD = $(GST_TOOL_LIBS) $(DBUS_LIBS) ./e-map/libemap.a
++time_admin_LDADD = ./e-map/libemap.a $(GST_TOOL_LIBS) $(DBUS_LIBS)
+ time_admin_DEPENDENCIES = $(GST_TOOL_DEPENDENCIES) ./e-map/libemap.a
+ time_admin_SOURCES = \
+ 	time-tool.c	time-tool.h \
diff -pruN 3.0.0-2/debian/patches/95_timezone_point_selection.patch 3.0.0-2ubuntu1/debian/patches/95_timezone_point_selection.patch
--- 3.0.0-2/debian/patches/95_timezone_point_selection.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/95_timezone_point_selection.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,14 @@
+Index: gnome-system-tools-2.32.0/src/time/tz-map.c
+===================================================================
+--- gnome-system-tools-2.32.0.orig/src/time/tz-map.c	2010-05-24 17:09:57.000000000 +0000
++++ gnome-system-tools-2.32.0/src/time/tz-map.c	2011-01-14 03:05:26.038764104 +0000
+@@ -416,7 +416,8 @@
+ 		        e_map_point_set_color_rgba (tzmap->map,
+ 						    tzmap->point_selected,
+ 						    TZ_MAP_POINT_NORMAL_RGBA);
+-		tzmap->point_selected = tzmap->point_hover;
++		tzmap->point_selected =
++			e_map_get_closest_point (tzmap->map, longitude, latitude, FALSE);
+ 
+ 		location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
+ 		tz_location    = e_tz_map_location_from_point (tzmap, tzmap->point_selected);
diff -pruN 3.0.0-2/debian/patches/96_ubuntu_ntp_pool.patch 3.0.0-2ubuntu1/debian/patches/96_ubuntu_ntp_pool.patch
--- 3.0.0-2/debian/patches/96_ubuntu_ntp_pool.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/96_ubuntu_ntp_pool.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,56 @@
+Description: Offer Ubuntu specific NTP servers; pool.ntp.org offers geolocation and automatic QA
+Author: Xavier Robin
+Bug-Ubuntu: https://launchpad.net/bugs/104525
+
+Index: gnome-system-tools-3.0.0/src/time/ntp-servers-list.c
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/time/ntp-servers-list.c	2010-12-12 07:16:01.000000000 -0500
++++ gnome-system-tools-3.0.0/src/time/ntp-servers-list.c	2011-12-16 13:23:48.625087868 -0500
+@@ -34,33 +34,12 @@
+ 
+ struct NtpServer {
+ 	const gchar *url;
+-	const gchar *location;
+ } ntp_servers [] = {
+-	{ "time.nrc.ca", "Canada" },
+-	{ "ntp1.cmc.ec.gc.ca", "Eastern Canada" },
+-	{ "ntp2.cmc.ec.gc.ca", "Eastern Canada" },
+-	{ "wuarchive.wustl.edu", "Missouri, USA" },
+-	{ "clock.psu.edu", "Pennsylvania, USA" },
+-	{ "ntp.tmc.edu", "Texas, USA" },
+-	{ "louie.udel.edu", "Delaware, USA" },
+-	{ "ntp0.cornell.edu", "New York, USA" },
+-	{ "ntp-0.cso.uiuc.edu", "Illinois, USA" },
+-	{ "ntp1.cs.wisc.edu", "Wisconsin, USA" },
+-	{ "tick.cs.unlv.edu", "Las Vegas, USA" },
+-	{ "ntp2a.mcc.ac.uk", "England, Europe" },
+-	{ "ntp2b.mcc.ac.uk", "England, Europe" },
+-	{ "ntp.maths.tcd.ie", "Ireland, Europe" },
+-	{ "ntp.cs.strath.ac.uk", "Scotland, Europe" },
+-	{ "ntp.univ-lyon1.fr", "France, Europe" },
+-	{ "tick.keso.fi", "Finland, Europe" },
+-	{ "fartein.ifi.uio.no", "Norway, Europe" },
+-	{ "ntp.adelaide.edu.au", "South Australia" },
+-	{ "time.nuri.net", "Korea, Asia" },
+-	{ "ntp.cs.mu.oz.au", "Melbourne, Australia" },
+-	{ "swisstime.ethz.ch", "Zurich, Switzerland" },
+-	{ "stdtime.gov.hk", "Hong Kong, China" },
+-	{ "ntp.jst.mfeed.ad.jp", "Japan" },
+-	{ "time.service.uit.no", "Norway" },
++	{ "0.ubuntu.pool.ntp.org" },
++	{ "1.ubuntu.pool.ntp.org" },
++	{ "2.ubuntu.pool.ntp.org" },
++	{ "3.ubuntu.pool.ntp.org" },
++	{ "ntp.ubuntu.com" },
+ 	{ NULL }
+ };
+ 
+@@ -72,7 +51,7 @@
+ 	gint i;
+ 
+ 	for (i = 0; ntp_servers[i].url; i++) {
+-		str = g_strdup_printf ("%s (%s)", ntp_servers[i].url, ntp_servers[i].location);
++		str = g_strdup_printf ("%s", ntp_servers[i].url);
+ 
+ 		gtk_list_store_append (store, &iter);
+ 		gtk_list_store_set (store, &iter,
diff -pruN 3.0.0-2/debian/patches/97_fix_setting_password_from_random_entry.patch 3.0.0-2ubuntu1/debian/patches/97_fix_setting_password_from_random_entry.patch
--- 3.0.0-2/debian/patches/97_fix_setting_password_from_random_entry.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/97_fix_setting_password_from_random_entry.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,67 @@
+Description: Fix setting password from random entry
+Origin: upstream, commit adbfff7a78a1976de90d3781b37dcc9a63879240
+Bug-Ubuntu: https://launchpad.net/bugs/742598
+
+---
+diff --git a/src/users/user-password.c b/src/users/user-password.c
+index 89d06d6..fe6a9bc 100644
+--- a/src/users/user-password.c
++++ b/src/users/user-password.c
+@@ -323,10 +323,9 @@ on_edit_user_passwd (GtkButton *button,
+  * to the password-less option should be committed, and close dialog.
+  */
+ static void
+-finish_password_change ()
++finish_password_change (gboolean passwd_provided)
+ {
+ 	GtkWidget *user_passwd_dialog;
+-	GtkWidget *passwd_entry;
+ 	GtkWidget *nocheck_toggle;
+ 	OobsUser  *user;
+ 	OobsGroup *no_passwd_login_group;
+@@ -334,7 +333,6 @@ finish_password_change ()
+ 	gboolean   is_self;
+ 
+ 	user_passwd_dialog = gst_dialog_get_widget (tool->main_dialog, "user_passwd_dialog");
+-	passwd_entry = gst_dialog_get_widget (tool->main_dialog, "user_settings_passwd1");
+ 	nocheck_toggle = gst_dialog_get_widget (tool->main_dialog, "user_passwd_no_check");
+ 	user = users_table_get_current ();
+ 	is_self = oobs_self_config_is_user_self (OOBS_SELF_CONFIG (GST_USERS_TOOL (tool)->self_config),
+@@ -352,7 +350,7 @@ finish_password_change ()
+ 	 * Else, we would believe the account is enabled, while it's not,
+ 	 * and we would allow password-less login, which is unexpected. */
+ 	if (oobs_user_get_password_disabled (user)
+-	    && strlen (gtk_entry_get_text (GTK_ENTRY (passwd_entry))) == 0)
++	    && !passwd_provided)
+ 	  {
+ 		  /* Force removing user from this group, since results are unexpected */
+ 		  if (no_passwd_login_group)
+@@ -434,7 +432,7 @@ chpasswd_cb (PasswdHandler *passwd_handler,
+ 
+ 
+ 	if (!error) {
+-		finish_password_change ();
++		finish_password_change (TRUE);
+ 
+ 		passwd_destroy (passwd_handler);
+ 		return;
+@@ -539,7 +537,7 @@ on_user_passwd_dialog_response (GtkDialog *user_passwd_dialog,
+ 	}
+ 	/* If empty, directly handle password-less option, don't change password */
+ 	else if (strlen (passwd) == 0) {
+-		finish_password_change ();
++		finish_password_change (FALSE);
+ 		g_object_unref (user);
+ 		return;
+ 	}
+@@ -564,7 +562,7 @@ on_user_passwd_dialog_response (GtkDialog *user_passwd_dialog,
+ 	/* For other users, set password via the backends */
+ 	else {
+ 		oobs_user_set_password (user, passwd);
+-		finish_password_change ();
++		finish_password_change (TRUE);
+ 	}
+ 
+ 	g_object_unref (user);
+--
+cgit v0.9
diff -pruN 3.0.0-2/debian/patches/fix-missing-header-ftbfs-amd64.patch 3.0.0-2ubuntu1/debian/patches/fix-missing-header-ftbfs-amd64.patch
--- 3.0.0-2/debian/patches/fix-missing-header-ftbfs-amd64.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/fix-missing-header-ftbfs-amd64.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,12 @@
+Index: gnome-system-tools-3.0.0/src/network/connection.c
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/network/connection.c	2011-12-16 16:24:06.283271825 -0500
++++ gnome-system-tools-3.0.0/src/network/connection.c	2011-12-16 16:27:08.000000000 -0500
+@@ -18,6 +18,7 @@
+  * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
+  */
+ 
++#include <stdlib.h>
+ #include <string.h>
+ 
+ #include <glib/gi18n.h>
diff -pruN 3.0.0-2/debian/patches/remove_g_thread_init.patch 3.0.0-2ubuntu1/debian/patches/remove_g_thread_init.patch
--- 3.0.0-2/debian/patches/remove_g_thread_init.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/remove_g_thread_init.patch	2011-12-16 22:20:21.000000000 +0000
@@ -0,0 +1,24 @@
+Index: gnome-system-tools-3.0.0/src/network/main.c
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/network/main.c	2009-05-16 10:49:19.000000000 -0400
++++ gnome-system-tools-3.0.0/src/network/main.c	2011-12-16 16:46:50.419286263 -0500
+@@ -185,7 +185,6 @@
+     { NULL }
+   };
+ 
+-  g_thread_init (NULL);
+   gst_init_tool ("network-admin", argc, argv, entries);
+   tool = gst_network_tool_new ();
+ 
+Index: gnome-system-tools-3.0.0/src/shares/main.c
+===================================================================
+--- gnome-system-tools-3.0.0.orig/src/shares/main.c	2009-05-16 10:49:19.000000000 -0400
++++ gnome-system-tools-3.0.0/src/shares/main.c	2011-12-16 16:46:55.203286314 -0500
+@@ -104,7 +104,6 @@
+ 		{ NULL }
+ 	};
+ 
+-	g_thread_init (NULL);
+ 	gst_init_tool ("shares-admin", argc, argv, entries);
+ 	tool = GST_TOOL (gst_shares_tool_new ());
+ 
diff -pruN 3.0.0-2/debian/patches/series 3.0.0-2ubuntu1/debian/patches/series
--- 3.0.0-2/debian/patches/series	2011-11-19 22:34:07.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/patches/series	2011-12-16 22:20:21.000000000 +0000
@@ -1,5 +1,15 @@
 01_wait_for_backends.patch
 10_disable_interfaces.patch
 11_dont_show_shares.patch
+25_sambashare_group_definition.patch
+26_user_profiles_conf.patch
 61_outdated_docs.patch
 62_no_gettext.patch
+80_gst-packages-common.patch
+81_gst-packages-shares-admin.patch
+82_gst-packages-time-admin.patch
+91_shares_services_detection.patch
+95_timezone_point_selection.patch
+96_ubuntu_ntp_pool.patch
+fix-missing-header-ftbfs-amd64.patch
+remove_g_thread_init.patch
diff -pruN 3.0.0-2/debian/rules 3.0.0-2ubuntu1/debian/rules
--- 3.0.0-2/debian/rules	2011-10-22 16:21:17.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/rules	2011-12-16 22:20:21.000000000 +0000
@@ -10,9 +10,15 @@ LDFLAGS += -Wl,-z,defs -Wl,-O1
 
 DEB_CONFIGURE_EXTRA_FLAGS += --disable-schemas-install \
 	--disable-nautilus \
-	--disable-scrollkeeper
+	--disable-scrollkeeper \
+	--disable-services
 
 DEB_DH_MAKESHLIBS_ARGS_gnome-system-tools += --no-act
 
 binary-install/gnome-system-tools::
 	rm -rfv debian/gnome-system-tools/var/scrollkeeper
+
+build/gnome-system-tools::
+	cd doc/network; make pot
+	cd doc/time; make pot
+	cd doc/users; make pot
diff -pruN 3.0.0-2/debian/watch 3.0.0-2ubuntu1/debian/watch
--- 3.0.0-2/debian/watch	2011-11-24 19:49:46.000000000 +0000
+++ 3.0.0-2ubuntu1/debian/watch	2011-12-16 22:20:21.000000000 +0000
@@ -1,3 +1,3 @@
 version=3
-http://ftp.gnome.org/pub/GNOME/sources/gnome-system-tools/([\d\.]+[02468])/ \
+http://ftp.gnome.org/pub/GNOME/sources/gnome-system-tools/([\d\.]+[0-9])/ \
         gnome-system-tools-(.*)\.tar\.bz2
diff -pruN 3.0.0-2/interfaces/network.ui 3.0.0-2ubuntu1/interfaces/network.ui
--- 3.0.0-2/interfaces/network.ui	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/interfaces/network.ui	2011-12-17 00:52:19.000000000 +0000
@@ -86,10 +86,147 @@
         <property name="border_width">6</property>
         <property name="spacing">12</property>
         <child>
+          <object class="GtkHBox" id="locations_box">
+            <property name="visible">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Location:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="locations_combo">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="add_location">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Save current network configuration as a location</property>
+                <accelerator key="A" signal="clicked" modifiers="GDK_MOD1_MASK"/>
+                <child>
+                  <object class="GtkImage" id="image9">
+                    <property name="visible">True</property>
+                    <property name="stock">gtk-save</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="remove_location">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Delete current location</property>
+                <accelerator key="R" signal="clicked" modifiers="GDK_MOD1_MASK"/>
+                <child>
+                  <object class="GtkImage" id="image10">
+                    <property name="visible">True</property>
+                    <property name="stock">gtk-delete</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
           <object class="GtkNotebook" id="notebook1">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <child>
+              <object class="GtkHBox" id="hbox3">
+                <property name="visible">False</property>
+                <property name="border_width">12</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">automatic</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTreeView" id="interfaces_list">
+                        <property name="width_request">290</property>
+                        <property name="height_request">194</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="enable_search">False</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVButtonBox" id="vbuttonbox1">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <property name="layout_style">start</property>
+                    <child>
+                      <object class="GtkButton" id="properties_button">
+                        <property name="label">gtk-properties</property>
+                        <property name="visible">True</property>
+                        <property name="sensitive">False</property>
+                        <property name="can_focus">True</property>
+                        <property name="can_default">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Connections</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkFrame" id="frame3">
                 <property name="visible">True</property>
                 <property name="border_width">12</property>
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/configure.in 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/configure.in
--- 3.0.0-2/.pc/10_disable_interfaces.patch/configure.in	2011-04-03 17:32:51.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/configure.in	1970-01-01 00:00:00.000000000 +0000
@@ -1,350 +0,0 @@
-AC_PREREQ(2.60)
-AC_INIT(gnome-system-tools, 3.0.0, http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-system-tools)
-AC_CONFIG_SRCDIR(src/common/gst-tool.c)
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
-m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
-
-IT_PROG_INTLTOOL([0.35.0])
-
-AM_CONFIG_HEADER(config.h)
-
-GNOME_DOC_INIT
-
-AM_MAINTAINER_MODE
-
-dnl Checking the above
-AC_CONFIG_SRCDIR(src/common/gst-tool.c)
-
-AM_PROG_LIBTOOL
-
-AC_ISC_POSIX
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-dnl glib-genmarshal
-AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
-
-GLIB_GSETTINGS
-
-STB_REQUIRED=2.10.1
-LIBOOBS_REQUIRED=2.91.1
-GTK_REQUIRED=2.91
-GLIB_REQUIRED=2.25.3
-DBUS_REQUIRED=0.32
-POLKIT_REQUIRED=0.97
-
-dnl =====================================================
-dnl Cracklib checking
-dnl =====================================================
-
-dnl AC_CHECK_LIB(crack, FascistCheck, ,[
-dnl   AC_MSG_WARN()
-dnl   AC_MSG_WARN(---------- Building without cracklib is not recommended. ----------)
-dnl   AC_MSG_WARN()
-dnl   AC_MSG_WARN(-- If you are looking for cracklib you can try  :)
-dnl   AC_MSG_WARN(--    http://www.users.dircon.co.uk/~crypto/)
-dnl   AC_MSG_WARN(--    or :)
-dnl   AC_MSG_WARN(--    http://www.rpmfind.net/linux/rpm2html/search.php?query=cracklib)
-dnl   AC_MSG_WARN(--    or :)
-dnl   AC_MSG_WARN(--    apt-get install cracklib2-dev)
-dnl   AC_MSG_WARN()])
-dnl if test x"$HAVE_LIBCRACK" = xyes ; then
-dnl   AC_CHECK_HEADER(crack.h, ,[
-dnl   AC_MSG_ERROR(cracklib crack.h header file not found.)])
-dnl fi
-
-dnl GST_CRACK_LIB_LOCATION="/usr/lib/"
-dnl AC_ARG_WITH(cracklib-dict,
-dnl [  --with-cracklib-dict[=DIR]       specify a cracklib dir ],[
-dnl   if test "$withval" != "no"; then
-dnl     GST_CRACK_LIB_LOCATION=$withval
-dnl   fi
-dnl ])
-dnl AC_SUBST(GST_CRACK_LIB_LOCATION)
-dnl GST_CRACK_LIB_CFLAGS="-DGST_CRACK_LIB_DICT_PATH=\"\\\"\$(GST_CRACK_LIB_LOCATION)\\\"\""
-dnl AC_SUBST(GST_CRACK_LIB_CFLAGS)
-
-dnl =====================================================
-dnl END: Cracklib checking
-dnl =====================================================
-
-dnl =====================================================
-dnl Check for Module versions
-dnl =====================================================
-
-PKG_CHECK_MODULES(GST_DEPENDS,[
-			   gtk+-3.0 >= $GTK_REQUIRED
-			   gmodule-export-2.0
-			   gio-2.0 >= $GLIB_REQUIRED
-			   pango
-			   liboobs-1 >= $LIBOOBS_REQUIRED
-			   system-tools-backends-2.0 >= $STB_REQUIRED
-			   ])
-
-PKG_CHECK_MODULES(DBUS,[
-		  dbus-1 >= $DBUS_REQUIRED
-		  ])
-
-DBUS_CFLAGS="$DBUS_CFLAGS -DDBUS_API_SUBJECT_TO_CHANGE"
-AC_SUBST(DBUS_LIBS)
-AC_SUBST(DBUS_CFLAGS)
-
-dnl PolicyKit support
-
-have_polkit=no
-AC_ARG_ENABLE(polkit,
-	AS_HELP_STRING([--enable-polkit],[Enable PolicyKit support (default yes)]),
-	[], [enable_polkit=yes])
-
-if test "x$enable_polkit" = "xyes"; then
-	PKG_CHECK_MODULES(POLKIT,[polkit-gobject-1 >= $POLKIT_REQUIRED], have_polkit=yes)
-
-	if test "$have_polkit" = "yes"; then
-		AC_DEFINE(HAVE_POLKIT, [1], [whether polkit was found])
-	else
-		AC_MSG_ERROR([PolicyKit support requested but policykit-1 not found])
-	fi
-fi
-
-AC_SUBST(POLKIT_LIBS)
-AC_SUBST(POLKIT_CFLAGS)
-AM_CONDITIONAL(HAVE_POLKIT, test x$have_polkit = xyes)
-
-
-dnl =====================================================
-dnl END: Check for Module versions
-dnl =====================================================
-
-dnl =====================================================
-dnl Check for GST Modules to build
-dnl =====================================================
-
-
-AC_ARG_ENABLE(network,
-	      [  --enable-network        Enable build network module (default yes)], , 
-	      enable_network=yes)
-AC_ARG_ENABLE(services,
-	      [  --enable-services       Enable build services module (default yes)], , 
-	      enable_services=yes)
-AC_ARG_ENABLE(time,
-	      [  --enable-time           Enable build time module (default yes)], , 
-	      enable_time=yes)
-AC_ARG_ENABLE(users,
-	      [  --enable-users          Enable build users module (default yes)], , 
-	      enable_users=yes)
-AC_ARG_ENABLE(shares,
-	      [  --enable-shares         Enable build shares module (default yes)], , 
-	      enable_shares=yes)
-AC_ARG_ENABLE(nautilus,
-	      [  --enable-nautilus         Enable build nautilus shares module (default yes)], , 
-	      enable_nautilus=yes)
-
-AM_CONDITIONAL(BUILD_NETWORK, test x$enable_network = xyes)
-AM_CONDITIONAL(BUILD_SERVICES, test x$enable_services = xyes)
-AM_CONDITIONAL(BUILD_TIME, test x$enable_time = xyes)
-AM_CONDITIONAL(BUILD_USERS, test x$enable_users = xyes)
-AM_CONDITIONAL(BUILD_SHARES, test x$enable_shares = xyes)
-AM_CONDITIONAL(BUILD_NAUTILUS, test x$enable_nautilus = xyes)
-
-dnl =====================================================
-dnl END: Check for GST Modules to build
-dnl =====================================================
-
-dnl ========================================================
-dnl Translations
-dnl ========================================================
-
-AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.17])
-GETTEXT_PACKAGE=gnome-system-tools
-AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext package name])
-AC_SUBST([GETTEXT_PACKAGE], GETTEXT_PACKAGE)
-
-dnl ========================================================
-dnl END : Translations
-dnl ========================================================
-
-
-dnl =====================================================
-dnl GST_LIBS & GST_CFLAGS 
-dnl =====================================================
-
-
-#### gcc warning flags (taken from PolicyKit-gnome)
-
-if test "x$GCC" = "xyes"; then
-  changequote(,)dnl
-  case " $CFLAGS " in
-  *[\ \	]-Wall[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wall" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wchar-subscripts[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wmissing-declarations[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wnested-externs[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wnested-externs" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wpointer-arith[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wcast-align[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wcast-align" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wsign-compare[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wsign-compare" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wformat[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wformat" ;;
-  esac
-
-  case " $CFLAGS " in
-  *[\ \	]-Wformat-security[\ \	]*) ;;
-  *) CFLAGS="$CFLAGS -Wformat-security" ;;
-  esac
-
-  changequote([,])dnl
-fi
-
-dnl GST_DEPRECATED_FLAGS="-DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGNOME_DISABLE_DEPRECATED"
-GST_DEPRECATED_FLAGS=""
-
-GST_LIBS="$GST_DEPENDS_LIBS $POLKIT_LIBS"
-GST_CFLAGS="$GST_DEPENDS_CFLAGS $POLKIT_CFLAGS $GST_DEPRECATED_FLAGS"
-
-GST_TOOL_LIBS="\$(top_builddir)/src/common/libsetuptool.a $GST_LIBS"
-GST_TOOL_CFLAGS="-I\$(top_srcdir)/src/common $GST_CFLAGS"
-
-GST_TOOL_CLEANFILES="\$(desktop) \$(desktop).in"
-GST_TOOL_EXTRA_DIST="\$(toolpixmaps) \$(desktop).in.in" 
-GST_TOOL_DEPENDENCIES="\$(top_builddir)/src/common/libsetuptool.a"
-
-AC_SUBST(GST_LIBS)
-AC_SUBST(GST_CFLAGS)
-AC_SUBST(GST_TOOL_LIBS)
-AC_SUBST(GST_TOOL_CFLAGS)
-AC_SUBST(GST_TOOL_CLEANFILES)
-AC_SUBST(GST_TOOL_EXTRA_DIST)
-AC_SUBST(GST_TOOL_DEPENDENCIES)
-
-dnl ==================================
-dnl END: GST_LIBS & GST_FLAGS
-dnl ==================================
-
-dnl ==================================
-dnl LIBIW DETECTION
-dnl ==================================
-
-GST_IW_LIBS=
-AC_CHECK_HEADER(iwlib.h, [
-  enable_libiw=yes
-  AC_DEFINE(HAVE_LIBIW_H, "", [whether libiw is available])
-  AC_HAVE_LIBRARY(iw, [GST_IW_LIBS="-liw"])
-])
-AM_CONDITIONAL(HAVE_LIBIW_H, test x$enable_libiw = xyes)
-AC_SUBST(GST_IW_LIBS)
-
-dnl ==================================
-dnl END: LIBIW DETECTION
-dnl ==================================
-
-dnl ===========================
-dnl NAUTILUS EXTENSION
-dnl ===========================
-
-if test "x$enable_nautilus" = "xyes"; then
-	PKG_CHECK_MODULES(NAUTILUS,[
-		   libnautilus-extension >= 2.9.3
-		   liboobs-1 >= $LIBOOBS_REQUIRED
-		   gio-2.0   >= $GLIB_REQUIRED
-		   ])
-fi
-
-AC_SUBST(NAUTILUS_LIBS)
-AC_SUBST(NAUTILUS_CFLAGS)
-
-dnl Determine the install dir for nautilus extension.
-NAUTILUSDIR=`pkg-config --variable=extensiondir libnautilus-extension`
-AC_SUBST(NAUTILUSDIR)
-
-dnl ===========================
-dnl END: NAUTILUS EXTENSION
-dnl ===========================
-
-AC_OUTPUT([
-Makefile
-doc/Makefile
-doc/network/Makefile
-doc/services/Makefile
-doc/services/nl/Makefile
-doc/shares/Makefile
-doc/time/Makefile
-doc/time/nl/Makefile
-doc/users/Makefile
-icons/Makefile
-icons/16x16/Makefile
-icons/16x16/apps/Makefile
-icons/22x22/Makefile
-icons/22x22/apps/Makefile
-icons/24x24/Makefile
-icons/24x24/apps/Makefile
-icons/32x32/Makefile
-icons/32x32/apps/Makefile
-icons/48x48/Makefile
-icons/48x48/apps/Makefile
-icons/48x48/devices/Makefile
-icons/scalable/Makefile
-icons/scalable/apps/Makefile
-interfaces/Makefile
-pixmaps/Makefile
-src/Makefile
-src/common/Makefile
-src/users/users.desktop.in
-src/users/Makefile
-src/network/network.desktop.in
-src/network/Makefile
-src/time/time.desktop.in
-src/time/Makefile
-src/time/e-map/Makefile
-src/services/services.desktop.in
-src/services/Makefile
-src/shares/shares.desktop.in
-src/shares/Makefile
-src/shares/nautilus/Makefile
-po/Makefile.in
-gnome-system-tools.pc
-])
-
-echo "
-
-Configuration (GST):
-	Services tool:     ${enable_services}
-	Users tool:        ${enable_users}
-	Network tool:      ${enable_network}
-	Time tool:         ${enable_time}
-	Shares tool:       ${enable_shares}
-	Nautilus support:  ${enable_nautilus}
-	Use PolicyKit:     ${have_polkit}
-
-	Compiler:          ${CC}
-"
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/callbacks.c 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/callbacks.c
--- 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/callbacks.c	2010-10-06 09:54:53.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/callbacks.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,575 +0,0 @@
-/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
-/* Copyright (C) 2004 Carlos Garnacho
- *
- * 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.
- *
- * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
- */
-
-#include <glib/gi18n.h>
-
-#include "gst.h"
-#include "network-tool.h"
-#include "ifaces-list.h"
-#include "callbacks.h"
-#include "hosts.h"
-#include "nm-integration.h"
-#include "connection.h"
-
-extern GstTool *tool;
-
-void
-on_table_selection_changed (GtkTreeSelection *selection, gpointer data)
-{
-  GtkWidget    *properties;
-
-  properties = gst_dialog_get_widget (tool->main_dialog, "properties_button");
-  gtk_widget_set_sensitive (properties, gtk_tree_selection_get_selected_rows (selection, NULL) != 0);
-}
-
-void
-on_iface_properties_clicked (GtkWidget *widget, gpointer data)
-{
-  GstConnectionDialog *dialog;
-  GtkTreeSelection *selection;
-  GtkTreeModel *model;
-  GtkTreeIter iter;
-  OobsIface *iface;
-
-  selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
-
-  if (gtk_tree_selection_get_selected (selection, &model, &iter))
-    {
-      gtk_tree_model_get (model, &iter,
-			  COL_OBJECT, &iface,
-			  -1);
-
-      dialog = GST_NETWORK_TOOL (tool)->dialog;
-      connection_dialog_prepare (dialog, iface);
-      gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog), GTK_WINDOW (tool->main_dialog));
-
-      gst_dialog_add_edit_dialog (tool->main_dialog, dialog->dialog);
-      gtk_widget_show (dialog->dialog);
-    }
-}
-
-void
-on_iface_active_changed (GtkWidget *widget, gpointer data)
-{
-  GstConnectionDialog *dialog;
-  GtkWidget *roaming_active;
-  gboolean active;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-
-  connection_dialog_set_sensitive (dialog, active);
-
-  roaming_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_roaming");
-  g_signal_handlers_block_by_func (roaming_active, on_iface_roaming_changed, data);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (roaming_active), !active);
-  g_signal_handlers_unblock_by_func (roaming_active, on_iface_roaming_changed, data);
-}
-
-void
-on_iface_roaming_changed (GtkWidget *widget, gpointer data)
-{
-  GstConnectionDialog *dialog;
-  GtkWidget *device_active;
-  gboolean active;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-
-  /* roaming changed and device active have just inverted logics */
-  connection_dialog_set_sensitive (dialog, !active);
-
-  device_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_active");
-  g_signal_handlers_block_by_func (device_active, on_iface_active_changed, data);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (device_active), !active);
-  g_signal_handlers_unblock_by_func (device_active, on_iface_active_changed, data);
-}
-
-void
-on_bootproto_changed (GtkWidget *widget, gpointer data)
-{
-  GstConnectionDialog *dialog;
-  gchar *method;
-  gboolean enabled;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  method = connection_combo_get_value (GTK_COMBO_BOX (dialog->bootproto_combo));
-  enabled = (method && strcmp (method, "static") == 0);
-
-  gtk_widget_set_sensitive (dialog->address, enabled);
-  gtk_widget_set_sensitive (dialog->netmask, enabled);
-  gtk_widget_set_sensitive (dialog->gateway, enabled);
-
-  g_free (method);
-}
-
-void
-on_ppp_type_changed (GtkWidget *widget, gpointer data)
-{
-  GstConnectionDialog *dialog;
-  gchar *type;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  type = connection_combo_get_value (GTK_COMBO_BOX (dialog->ppp_type_combo));
-
-  on_dialog_changed (widget, data);
-
-  if (!type)
-    return;
-
-  if (strcmp (type, "modem") == 0)
-    {
-      gtk_widget_show (dialog->modem_page);
-      gtk_widget_show (dialog->isp_frame);
-      gtk_widget_show (dialog->modem_settings_table);
-      gtk_widget_show (dialog->modem_isp_table);
-      gtk_widget_hide (dialog->pppoe_settings_table);
-      gtk_widget_hide (dialog->gprs_isp_table);
-    }
-  else if (strcmp (type, "isdn") == 0)
-    {
-      gtk_widget_show (dialog->isp_frame);
-      gtk_widget_show (dialog->modem_isp_table);
-      gtk_widget_hide (dialog->modem_page);
-      gtk_widget_hide (dialog->gprs_isp_table);
-    }
-  else if (strcmp (type, "pppoe") == 0)
-    {
-      gtk_widget_show (dialog->modem_page);
-      gtk_widget_show (dialog->pppoe_settings_table);
-      gtk_widget_show (dialog->modem_isp_table);
-      gtk_widget_hide (dialog->isp_frame);
-      gtk_widget_hide (dialog->modem_settings_table);
-    }
-  else if (strcmp (type, "gprs") == 0)
-    {
-      gtk_widget_show (dialog->modem_page);
-      gtk_widget_show (dialog->isp_frame);
-      gtk_widget_show (dialog->modem_settings_table);
-      gtk_widget_show (dialog->gprs_isp_table);
-      gtk_widget_hide (dialog->modem_isp_table);
-      gtk_widget_hide (dialog->pppoe_settings_table);
-    }
-}
-
-static void
-cancel_connection_dialog (GstTool *tool)
-{
-  GstConnectionDialog *dialog;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  g_object_unref (dialog->iface);
-  connection_dialog_hide (dialog);
-
-  if (dialog->standalone)
-    gtk_main_quit ();
-}
-
-static gboolean
-toggle_nm (gpointer data)
-{
-  GstNetworkTool *tool = GST_NETWORK_TOOL (data);
-  NMState state;
-
-  state = nm_integration_get_state (tool);
-
-  if (state == NM_STATE_DISCONNECTED ||
-      state == NM_STATE_CONNECTING ||
-      state == NM_STATE_CONNECTED)
-    {
-      /* "reboot" NM */
-      nm_integration_sleep (tool);
-      nm_integration_wake (tool);
-    }
-
-  return FALSE;
-}
-
-static void
-on_configuration_changed (OobsObject *object,
-			  OobsResult  result,
-			  gpointer    data)
-{
-  /* suckety suck, but NM seems not to realize
-   * immediately that the interface status changed */
-  g_timeout_add (2000, toggle_nm, data);
-}
-
-static void
-accept_connection_dialog (GstTool *tool)
-{
-  GstConnectionDialog *dialog;
-  GtkTreeSelection    *selection;
-  GtkTreeIter          iter;
-
-  dialog = GST_NETWORK_TOOL (tool)->dialog;
-  connection_dialog_hide (dialog);
-
-  if (dialog->changed)
-    {
-      connection_save (dialog);
-      selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
-
-      if (gtk_tree_selection_get_selected (selection, NULL, &iter))
-        {
-	  ifaces_model_modify_interface_at_iter (&iter);
-	  g_signal_emit_by_name (G_OBJECT (selection), "changed");
-	}
-
-      gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
-			     _("Changing interface configuration"),
-			     on_configuration_changed, tool);
-    }
-
-  g_object_unref (dialog->iface);
-
-  if (dialog->standalone)
-    gtk_main_quit ();
-}
-
-void
-on_connection_response (GtkWidget *widget,
-			gint       response,
-			gpointer   data)
-{
-  GstConnectionDialog *connection_dialog;
-  GstDialog *dialog = GST_DIALOG (data);
-  GstTool *tool = gst_dialog_get_tool (dialog);
-
-  if (response == GTK_RESPONSE_OK)
-    accept_connection_dialog (tool);
-  else
-    cancel_connection_dialog (tool);
-
-  connection_dialog = GST_NETWORK_TOOL (tool)->dialog;
-  gst_dialog_remove_edit_dialog (tool->main_dialog, connection_dialog->dialog);
-}
-
-void
-on_detect_modem_clicked (GtkWidget *widget, gpointer data)
-{
-  GstNetworkTool      *network_tool;
-  GstConnectionDialog *dialog;
-  GtkWidget           *d;
-  GdkCursor           *cursor;
-  gchar               *dev = NULL;
-
-  network_tool = GST_NETWORK_TOOL (tool);
-  dialog = network_tool->dialog;
-
-  /* give some feedback to let know the user that the tool is busy */
-  gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), "");
-  gtk_widget_set_sensitive (dialog->serial_port, FALSE);
-  gtk_widget_set_sensitive (dialog->detect_modem, FALSE);
-
-  cursor = gdk_cursor_new (GDK_WATCH);
-  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), cursor);
-  gdk_cursor_unref (cursor);
-
-  dev = connection_detect_modem ();
-
-  /* remove the user feedback */
-  gtk_widget_set_sensitive (dialog->detect_modem, TRUE);
-  gtk_widget_set_sensitive (dialog->serial_port, TRUE);
-  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), NULL);
-
-  if (!dev || !*dev)
-    {
-      d = gtk_message_dialog_new (GTK_WINDOW (dialog->dialog),
-				  GTK_DIALOG_MODAL,
-				  GTK_MESSAGE_INFO,
-				  GTK_BUTTONS_CLOSE,
-				  _("Could not autodetect modem device"),
-				  NULL);
-      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
-						_("Check that the device is not busy and "
-						  "that is correctly attached to the computer."),
-						NULL);
-      gtk_dialog_run (GTK_DIALOG (d));
-      gtk_widget_destroy (d);
-    }
-  else
-    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), dev);
-
-  g_free (dev);
-}
-
-static void
-do_popup_menu (GtkWidget *table, GstTablePopup *table_popup, GdkEventButton *event)
-{
-  gint button, event_time;
-
-  if (!table_popup)
-    return;
-
-  if (event)
-    {
-      button     = event->button;
-      event_time = event->time;
-    }
-  else
-    {
-      button     = 0;
-      event_time = gtk_get_current_event_time ();
-    }
-
-  if (table_popup->setup)
-    (table_popup->setup) (table);
-
-  gtk_menu_popup (GTK_MENU (table_popup->popup), NULL, NULL, NULL, NULL,
-		  button, event_time);
-}
-
-gboolean
-on_table_button_press (GtkWidget *table, GdkEventButton *event, gpointer data)
-{
-  GtkTreePath      *path;
-  GstTablePopup    *table_popup;
-  GtkTreeSelection *selection;
-
-  table_popup = (GstTablePopup *) data;
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (table));
-
-  if (event->button == 3)
-    {
-      gtk_widget_grab_focus (table);
-
-      if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (table),
-					 event->x, event->y,
-					 &path, NULL, NULL, NULL))
-        {
-	  gtk_tree_selection_unselect_all (selection);
-	  gtk_tree_selection_select_path (selection, path);
-
-	  do_popup_menu (table, table_popup, event);
-	}
-
-      return TRUE;
-    }
-
-  if (event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS)
-    {
-      if (table_popup->properties)
-	(table_popup->properties) (NULL, NULL);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-gboolean
-on_table_popup_menu (GtkWidget *widget, gpointer data)
-{
-  GstTablePopup *table_popup = (GstTablePopup *) data;
-
-  do_popup_menu (widget, table_popup, NULL);
-  return TRUE;
-}
-
-void
-on_host_aliases_add_clicked (GtkWidget *widget, gpointer data)
-{
-  host_aliases_run_dialog (GST_NETWORK_TOOL (tool), NULL);
-}
-
-void
-on_host_aliases_properties_clicked (GtkWidget *widget, gpointer data)
-{
-  GtkTreeSelection *selection;
-  GtkTreeView      *list;
-  GtkTreeModel     *model;
-  GtkTreeIter       iter;
-
-  list  = GST_NETWORK_TOOL (tool)->host_aliases_list;
-  selection = gtk_tree_view_get_selection (list);
-
-  if (gtk_tree_selection_get_selected (selection, &model, &iter))
-    host_aliases_run_dialog (GST_NETWORK_TOOL (tool), &iter);
-}
-
-void
-on_host_aliases_delete_clicked (GtkWidget *widget, gpointer data)
-{
-  GtkTreeSelection *selection;
-  GtkTreeView *list;
-  GtkTreeModel *model;
-  GtkTreeIter iter;
-  OobsList *hosts_list;
-  OobsListIter *list_iter;
-
-  list  = GST_NETWORK_TOOL (tool)->host_aliases_list;
-  selection = gtk_tree_view_get_selection (list);
-
-  if (gtk_tree_selection_get_selected (selection, &model, &iter))
-    {
-      gtk_tree_model_get (model, &iter, COL_HOST_ITER, &list_iter, -1);
-      hosts_list = oobs_hosts_config_get_static_hosts (GST_NETWORK_TOOL (tool)->hosts_config);
-      oobs_list_remove (hosts_list, list_iter);
-      gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-
-      oobs_list_iter_free (list_iter);
-      gst_tool_commit (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->hosts_config));
-    }
-}
-
-void
-on_host_aliases_dialog_changed (GtkWidget *widget, gpointer data)
-{
-  host_aliases_check_fields ();
-}
-
-void
-on_dialog_changed (GtkWidget *widget, gpointer data)
-{
-  GstNetworkTool *network_tool = GST_NETWORK_TOOL (tool);
-
-  network_tool->dialog->changed = TRUE;
-  connection_check_fields (network_tool->dialog);
-}
-
-gboolean
-on_ip_address_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-  GstConnectionDialog *dialog = GST_NETWORK_TOOL (tool)->dialog;
-
-  connection_check_netmask (dialog->address, dialog->netmask);
-  return FALSE;
-}
-
-void
-on_iface_toggled (GtkCellRendererToggle *renderer,
-		  gchar                 *path_str,
-		  gpointer               data)
-{
-  GtkTreePath *path;
-  GtkTreeModel *model = GTK_TREE_MODEL (data);
-  GtkTreeIter iter;
-  gboolean active, inconsistent;
-  OobsIface *iface;
-
-  path = gtk_tree_path_new_from_string (path_str);
-
-  if (gtk_tree_model_get_iter (model, &iter, path))
-    {
-      gtk_tree_model_get (model, &iter,
-			  COL_ACTIVE, &active,
-			  COL_INCONSISTENT, &inconsistent,
-			  COL_OBJECT, &iface,
-			  -1);
-
-      if (!inconsistent)
-	{
-	  active ^= 1;
-
-	  oobs_iface_set_active (iface, active);
-	  oobs_iface_set_auto (iface, active);
-	  ifaces_model_modify_interface_at_iter (&iter);
-
-	  gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
-				 _("Changing interface configuration"),
-				 on_configuration_changed, tool);
-	}
-
-      g_object_unref (iface);
-    }
-
-  gtk_tree_path_free (path);
-}
-
-void
-on_entry_changed (GtkWidget *widget, gpointer data)
-{
-  g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (TRUE));
-}
-
-gboolean
-on_hostname_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-  GstNetworkTool *tool;
-  gboolean changed;
-  const gchar *hostname;
-
-  tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data)));
-  changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed"));
-  hostname = gtk_entry_get_text (GTK_ENTRY (widget));
-
-  if (changed && hostname && *hostname)
-    {
-      GtkWidget *dialog;
-      gint res;
-
-      dialog = gtk_message_dialog_new (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
-				       GTK_DIALOG_MODAL,
-				       GTK_MESSAGE_WARNING,
-				       GTK_BUTTONS_NONE,
-				       _("The host name has changed"),
-				       NULL);
-      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-						_("This will prevent you "
-						  "from launching new applications, and so you will "
-						  "have to log in again. Continue anyway?"),
-						NULL);
-      gtk_dialog_add_buttons (GTK_DIALOG (dialog),
-			      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-			      _("Change _Host name"), GTK_RESPONSE_ACCEPT,
-			      NULL);
-
-      res = gtk_dialog_run (GTK_DIALOG (dialog));
-      gtk_widget_destroy (dialog);
-
-      if (res == GTK_RESPONSE_ACCEPT)
-	{
-	  oobs_hosts_config_set_hostname (tool->hosts_config, hostname);
-	  gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config));
-	}
-      else
-	{
-	  gtk_entry_set_text (GTK_ENTRY (widget),
-			      oobs_hosts_config_get_hostname (tool->hosts_config));
-	}
-    }
-
-  g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE));
-
-  return FALSE;
-}
-
-gboolean
-on_domain_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-  GstNetworkTool *tool;
-  gboolean changed;
-  const gchar *domain;
-
-  tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data)));
-  changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed"));
-  domain = gtk_entry_get_text (GTK_ENTRY (widget));
-
-  if (changed)
-    {
-      oobs_hosts_config_set_domainname (tool->hosts_config, domain);
-      gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config));
-    }
-
-  g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE));
-
-  return FALSE;
-}
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/callbacks.h 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/callbacks.h
--- 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/callbacks.h	2009-05-16 14:49:19.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/callbacks.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,76 +0,0 @@
-/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
-/* Copyright (C) 2004 Carlos Garnacho
- *
- * 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.
- *
- * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
- */
-
-#ifndef __CALLBACKS_H
-#define __CALLBACKS_H
-
-typedef struct _GstTablePopup GstTablePopup;
-
-struct _GstTablePopup
-{
-  void (* setup) (GtkWidget *);
-  void (* properties) (GtkWidget*, gpointer);
-  GtkWidget *popup;
-};
-
-void  on_table_selection_changed   (GtkTreeSelection*, gpointer);
-void  on_iface_properties_clicked  (GtkWidget*, gpointer);
-
-void  on_iface_active_changed      (GtkWidget*, gpointer);
-void  on_iface_roaming_changed     (GtkWidget *widget, gpointer data);
-
-void  on_bootproto_changed         (GtkWidget*, gpointer);
-void  on_detect_modem_clicked      (GtkWidget*, gpointer);
-void  on_connection_response       (GtkWidget *widget,
-				    gint       response,
-				    gpointer   data);
-
-
-gboolean on_table_button_press (GtkWidget*, GdkEventButton*, gpointer);
-gboolean on_table_popup_menu   (GtkWidget*, gpointer);
-
-void  on_host_aliases_add_clicked        (GtkWidget*, gpointer);
-void  on_host_aliases_properties_clicked (GtkWidget*, gpointer);
-void  on_host_aliases_delete_clicked     (GtkWidget*, gpointer);
-void  on_host_aliases_dialog_changed     (GtkWidget*, gpointer);
-
-
-void  on_dialog_changed (GtkWidget*, gpointer);
-
-gboolean on_ip_address_focus_out (GtkWidget*, GdkEventFocus*, gpointer);
-
-void  on_iface_toggled  (GtkCellRendererToggle *renderer,
-			 gchar                 *path_str,
-			 gpointer               data);
-
-void     on_entry_changed      (GtkWidget     *widget,
-				gpointer       data);
-gboolean on_hostname_focus_out (GtkWidget     *widget,
-				GdkEventFocus *event,
-				gpointer       data);
-gboolean on_domain_focus_out   (GtkWidget     *widget,
-				GdkEventFocus *event,
-				gpointer       data);
-
-void on_ppp_type_changed    (GtkWidget *widget,
-			     gpointer   data);
-
-
-#endif /* __CALLBACKS_H */
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/main.c 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/main.c
--- 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/main.c	2009-05-16 14:49:19.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/main.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,207 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 2 -*- */
-/* Copyright (C) 2004 Carlos Garnacho
- *
- * 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.
- *
- * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <glib/gi18n.h>
-
-#include "gst.h"
-#include "network-tool.h"
-#include "ifaces-list.h"
-#include "callbacks.h"
-
-GstTool *tool;
-
-static GstDialogSignal signals[] = {
-  /* connections tab */
-  { "properties_button",            "clicked", G_CALLBACK (on_iface_properties_clicked) },
-  /* general tab */
-  { "domain",                       "focus-out-event", G_CALLBACK (on_domain_focus_out) },
-  { "hostname",                     "changed", G_CALLBACK (on_entry_changed) },
-  { "domain",                       "changed", G_CALLBACK (on_entry_changed) },
-  /* host aliases tab */
-  { "host_aliases_add",             "clicked", G_CALLBACK (on_host_aliases_add_clicked) },
-  { "host_aliases_properties",      "clicked", G_CALLBACK (on_host_aliases_properties_clicked) },
-  { "host_aliases_delete",          "clicked", G_CALLBACK (on_host_aliases_delete_clicked) },
-  /* host aliases dialog */
-  { "host_alias_address",           "changed", G_CALLBACK (on_host_aliases_dialog_changed) },
-  /* connection dialog */
-  { "connection_config_dialog",     "response", G_CALLBACK (on_connection_response) },
-  { "connection_config_dialog",     "delete-event", G_CALLBACK (gtk_true) },
-  { "connection_device_active",     "clicked", G_CALLBACK (on_iface_active_changed) },
-  { "connection_device_roaming",    "clicked", G_CALLBACK (on_iface_roaming_changed) },
-  { "connection_bootproto",         "changed", G_CALLBACK (on_bootproto_changed) },
-  { "connection_detect_modem",      "clicked", G_CALLBACK (on_detect_modem_clicked) },
-  /* dialog changing detection */
-  { "connection_address",           "focus-out-event", G_CALLBACK (on_ip_address_focus_out) },
-  { "connection_ppp_type",          "changed", G_CALLBACK (on_ppp_type_changed) },
-  { "connection_device_active",     "toggled", G_CALLBACK (on_dialog_changed) },
-  { "connection_essid",             "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_wep_key_type",      "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_wep_key",           "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_bootproto",         "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_address",           "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_netmask",           "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_gateway",           "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_local_address",     "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_remote_address",    "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_serial_port",       "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_dial_type",         "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_volume",            "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_phone_number",      "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_dial_prefix",       "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_login",             "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_password",          "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_default_gw",        "toggled", G_CALLBACK (on_dialog_changed) },
-  { "connection_persist",           "toggled", G_CALLBACK (on_dialog_changed) },
-  { "connection_apn",               "changed", G_CALLBACK (on_dialog_changed) },
-  { "connection_pppoe_ethernet",    "changed", G_CALLBACK (on_dialog_changed) },
-  { NULL }
-};
-
-static GstDialogSignal signals_after[] = {
-  { "hostname",                     "focus-out-event", G_CALLBACK (on_hostname_focus_out) },
-  { NULL }
-};
-
-static const gchar *policy_widgets [] = {
-	"locations_combo",
-	"add_location",
-	"remove_location",
-	"interfaces_list",
-	"properties_button",
-	"hostname",
-	"domain",
-	"dns_list",
-	"dns_list_add",
-	"dns_list_delete",
-	"search_domain_list",
-	"search_domain_add",
-	"search_domain_delete",
-	"host_aliases_list",
-	"host_aliases_add",
-	"host_aliases_properties",
-	"host_aliases_delete",
-	NULL
-};
-
-static void
-init_standalone_dialog (GstTool         *tool,
-			IfaceSearchTerm  search_term,
-			const gchar     *term)
-{
-  GstNetworkTool *network_tool;
-  OobsIface      *iface;
-  GtkWidget      *d;
-
-  network_tool = GST_NETWORK_TOOL (tool);
-  gst_tool_update_gui (tool);
-  iface = ifaces_model_search_iface (search_term, term);
-
-  if (iface)
-    {
-      connection_dialog_prepare (network_tool->dialog, iface);
-      network_tool->dialog->standalone = TRUE;
-      g_object_unref (iface);
-
-      gtk_widget_show (network_tool->dialog->dialog);
-    }
-  else
-    {
-      d = gtk_message_dialog_new (GTK_WINDOW (tool->main_dialog),
-                                  GTK_DIALOG_MODAL,
-                                  GTK_MESSAGE_WARNING,
-                                  GTK_BUTTONS_CLOSE,
-                                  _("The interface does not exist"));
-      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
-                                                _("Check that it is correctly typed "
-                                                  "and that it is correctly supported "
-                                                  "by your system."),
-                                                NULL);
-      gtk_dialog_run (GTK_DIALOG (d));
-      gtk_widget_destroy (d);
-      exit (-1);
-    }
-}
-
-static void
-init_filters (void)
-{
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "host_alias_address")), GST_FILTER_IP);
-
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_address")), GST_FILTER_IPV4);
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_netmask")), GST_FILTER_IPV4);
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_gateway")), GST_FILTER_IPV4);
-
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_local_address")), GST_FILTER_IPV4);
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_remote_address")), GST_FILTER_IPV4);
-
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_phone_number")), GST_FILTER_PHONE);
-  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_dial_prefix")), GST_FILTER_PHONE);
-}
-
-static void
-set_text_buffers_callback (void)
-{
-  GtkWidget *textview;
-  GtkTextBuffer *buffer;
-
-  textview = gst_dialog_get_widget (tool->main_dialog, "host_alias_list");
-  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
-
-  g_signal_connect (G_OBJECT (buffer), "changed",
-		    G_CALLBACK (on_host_aliases_dialog_changed), NULL);
-}
-
-int
-main (int argc, gchar *argv[])
-{
-  gchar *interface = NULL;
-  gchar *type = NULL;
-
-  GOptionEntry entries[] = {
-    { "configure",      'c', 0, G_OPTION_ARG_STRING, &interface, N_("Configure a network interface"), N_("INTERFACE") },
-    { "configure-type", 't', 0, G_OPTION_ARG_STRING, &type,      N_("Configure the first network interface with a specific type"), N_("TYPE") },
-    { NULL }
-  };
-
-  g_thread_init (NULL);
-  gst_init_tool ("network-admin", argc, argv, entries);
-  tool = gst_network_tool_new ();
-
-  gst_dialog_require_authentication_for_widgets (tool->main_dialog, policy_widgets);
-  gst_dialog_connect_signals (tool->main_dialog, signals);
-  gst_dialog_connect_signals_after (tool->main_dialog, signals_after);
-  set_text_buffers_callback ();
-  init_filters ();
-
-  if (interface)
-    init_standalone_dialog (tool, SEARCH_DEV, interface);
-  else if (type)
-    init_standalone_dialog (tool, SEARCH_TYPE, type);
-  else
-    gtk_widget_show (GTK_WIDGET (tool->main_dialog));
-
-  gtk_main ();
-  return 0;
-}
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/Makefile.am 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/Makefile.am
--- 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/Makefile.am	2010-10-06 09:53:22.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/Makefile.am	1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-##
-## Process this file with automake to produce Makefile.in
-##
-## Please don't modify this file unless you know what you are doing
-## Please keep the Makefile.am from all the tools in sync
-##
-
-include ../common/CommonMakefile
-
-toolname = network
-bin_PROGRAMS = network-admin
-
-## SUBDIRS =
-INCLUDES += $(GST_TOOL_CFLAGS) $(DBUS_CFLAGS) $(GIO_CFLAGS)
-CLEANFILES = $(GST_TOOL_CLEANFILES)
-EXTRA_DIST = $(GST_TOOL_EXTRA_DIST)
-
-network_admin_LDADD = $(GST_TOOL_LIBS) $(GST_IW_LIBS) $(DBUS_LIBS) $(GIO_LIBS)
-network_admin_DEPENDENCIES = $(GST_TOOL_DEPENDENCIES)
-
-if HAVE_LIBIW_H
-essid_SOURCES = essid-list.c essid-list.h
-endif
-
-network_admin_SOURCES = \
-	$(essid_SOURCES)				\
-	nm-integration.c nm-integration.h	\
-	address-list.c	address-list.h		\
-	network-locations.c network-locations.h	\
-	network-tool.c network-tool.h		\
-	locations-combo.c locations-combo.h	\
-	ifaces-list.c ifaces-list.h		\
-	callbacks.c callbacks.h			\
-	connection.c connection.h		\
-	hosts.c hosts.h				\
-	main.c
-
-toolpixmaps =
-
--include $(top_srcdir)/git.mk
diff -pruN 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/network-tool.h 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/network-tool.h
--- 3.0.0-2/.pc/10_disable_interfaces.patch/src/network/network-tool.h	2009-05-16 14:49:19.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/10_disable_interfaces.patch/src/network/network-tool.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 2 -*- */
-/* Copyright (C) 2004 Carlos Garnacho
- *
- * 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.
- *
- * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
- */
-
-#ifndef __GST_NETWORK_TOOL_H
-#define __GST_NETWORK_TOOL_H
-
-G_BEGIN_DECLS
-
-#include <gtk/gtk.h>
-#include <dbus/dbus.h>
-#include "address-list.h"
-#include "locations-combo.h"
-#include "connection.h"
-
-#define GST_TYPE_NETWORK_TOOL           (gst_network_tool_get_type ())
-#define GST_NETWORK_TOOL(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETWORK_TOOL, GstNetworkTool))
-#define GST_NETWORK_TOOL_CLASS(obj)     (G_TYPE_CHECK_CLASS_CAST ((obj),    GST_TYPE_NETWORK_TOOL, GstNetworkToolClass))
-#define GST_IS_NETWORK_TOOL(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NETWORK_TOOL))
-#define GST_IS_NETWORK_TOOL_CLASS(obj)  (G_TYPE_CHECK_CLASS_TYPE ((obj),    GST_TYPE_NETWORK_TOOL))
-#define GST_NETWORK_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),  GST_TYPE_NETWORK_TOOL, GstNetworkToolClass))
-
-typedef struct _GstNetworkTool      GstNetworkTool;
-typedef struct _GstNetworkToolClass GstNetworkToolClass;
-
-struct _GstNetworkTool
-{
-  GstTool parent_instance;
-
-  /* config */
-  OobsHostsConfig *hosts_config;
-  OobsIfacesConfig *ifaces_config;
-
-  /* gui */
-  GstAddressList *dns;
-  GstAddressList *search;
-
-  /* bus, used for NM integration */
-  DBusConnection *bus_connection;
-
-  GtkTreeModel *interfaces_model;
-  GtkTreeView  *interfaces_list;
-
-  GtkTreeView *host_aliases_list;
-  GstLocationsCombo *location;
-
-  GtkEntry *hostname;
-  GtkEntry *domain;
-
-  GstConnectionDialog *dialog;
-  GtkWidget *host_aliases_dialog;
-};
-
-struct _GstNetworkToolClass
-{
-  GstToolClass parent_class;
-};
-
-
-GType    gst_network_tool_get_type  (void);
-GstTool *gst_network_tool_new       (void);
-
-G_END_DECLS
-
-#endif /* __GST_NETWORK_TOOL_H */
diff -pruN 3.0.0-2/.pc/25_sambashare_group_definition.patch/src/users/privileges-table.c 3.0.0-2ubuntu1/.pc/25_sambashare_group_definition.patch/src/users/privileges-table.c
--- 3.0.0-2/.pc/25_sambashare_group_definition.patch/src/users/privileges-table.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/25_sambashare_group_definition.patch/src/users/privileges-table.c	2010-12-16 11:15:23.000000000 +0000
@@ -0,0 +1,278 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* privileges-table.c: this file is part of users-admin, a ximian-setup-tool frontend 
+ * for user administration.
+ * 
+ * Copyright (C) 2004 Carlos Garnacho
+ * Copyright (C) 2005 Carlos Garnacho, Sivan Greenberg
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>
+ *          Sivan Greenberg       <sivan@workaround.org>
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <glib/gi18n.h>
+
+#include "gst.h"
+#include "privileges-table.h"
+#include "user-profiles.h"
+#include "user-settings.h"
+
+extern GstTool *tool;
+
+static GtkListStore *privileges_model = NULL;
+
+enum {
+	COL_MEMBER,
+	COL_DESCRIPTION,
+	COL_GROUP
+};
+
+typedef struct _PrivilegeDescription PrivilegeDescription;
+
+struct _PrivilegeDescription {
+	const gchar *group;
+	const gchar *privilege;
+};
+
+/* keep this sorted, or you'll go to hell */
+static const PrivilegeDescription descriptions[] = {
+	{ "adm", N_("Monitor system logs") },
+	{ ADMIN_GROUP, N_("Administer the system") },
+	{ "audio", N_("Use audio devices") },
+	{ "cdrom", N_("Use CD-ROM drives") },
+	{ "cdwrite", N_("Burn CDs / DVDs") },
+	{ "dialout", N_("Use modems") },
+	{ "dip", N_("Connect to Internet using a modem") },
+	{ "fax", N_("Send and receive faxes") },
+	{ "floppy", N_("Use floppy drives") },
+	{ "fuse", N_("Mount user-space filesystems (FUSE)") },
+	{ "lpadmin", N_("Configure printers") },
+	{ "netdev", N_("Connect to wireless and ethernet networks") },
+	{ "plugdev", N_("Access external storage devices automatically") },
+	{ "powerdev", N_("Suspend and hibernate the computer") },
+	{ "proc", N_("Access /proc filesystem") },
+	{ "scanner", N_("Use scanners") },
+	{ "tape", N_("Use tape drives") },
+	{ "usb", N_("Use USB devices") },
+	{ "vboxusers", N_("Use VirtualBox virtualization solution") },
+	{ "video", N_("Use video devices") },
+	{ "wheel", N_("Be able to get administrator privileges") },
+};
+
+static int
+compare_groups (const void *p1, const void *p2)
+{
+	PrivilegeDescription *desc1 = (PrivilegeDescription *) p1;
+	PrivilegeDescription *desc2 = (PrivilegeDescription *) p2;
+
+	return strcmp (desc1->group, desc2->group);
+}
+
+static const PrivilegeDescription*
+privilege_search (const gchar *group)
+{
+	PrivilegeDescription p = { 0, };
+
+	if (!group)
+		return NULL;
+
+	p.group = group;
+
+	return (const PrivilegeDescription *) bsearch (&p, descriptions, G_N_ELEMENTS (descriptions),
+						       sizeof (PrivilegeDescription), compare_groups);
+}
+
+
+static void
+on_user_privilege_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+{
+	GtkTreePath  *path  = gtk_tree_path_new_from_string (path_str);
+	GtkTreeIter   iter;
+	OobsGroup    *group;
+	gboolean      value;
+
+	if (gtk_tree_model_get_iter (GTK_TREE_MODEL (privileges_model), &iter, path)) {
+		gtk_tree_model_get (GTK_TREE_MODEL (privileges_model), &iter,
+		                    COL_MEMBER, &value,
+		                    COL_GROUP, &group, -1);
+
+		/* check that current user should be allowed to lose admin rights,
+		 * possibly showing a warning/error dialog */
+		if (!value || strcmp (oobs_group_get_name (group), ADMIN_GROUP) != 0
+		           || user_settings_check_revoke_admin_rights ())
+			gtk_list_store_set (privileges_model, &iter, COL_MEMBER, !value, -1);
+
+		g_object_unref (group);
+	}
+
+	gtk_tree_path_free (path);
+}
+
+void
+create_user_privileges_table (void)
+{
+	GtkWidget *list;
+	GtkCellRenderer *renderer;
+	GtkTreeViewColumn *column;
+
+	list = gst_dialog_get_widget (tool->main_dialog, "user_privileges");
+
+	privileges_model = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_OBJECT);
+	gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (privileges_model));
+	g_object_unref (privileges_model);
+
+	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (privileges_model), COL_DESCRIPTION, GTK_SORT_ASCENDING);
+
+	column = gtk_tree_view_column_new ();
+
+	renderer = gtk_cell_renderer_toggle_new ();
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_set_attributes (column,
+					     renderer,
+					     "active", COL_MEMBER,
+					     NULL);
+	g_signal_connect (G_OBJECT (renderer), "toggled",
+			  G_CALLBACK (on_user_privilege_toggled), NULL);
+
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_column_pack_end (column, renderer, TRUE);
+	gtk_tree_view_column_set_attributes (column,
+					     renderer,
+					     "text", COL_DESCRIPTION,
+					     NULL);
+
+	gtk_tree_view_column_set_sort_column_id (column, 1);
+	gtk_tree_view_insert_column (GTK_TREE_VIEW (list), column, 0);
+}
+
+void
+privileges_table_add_group (OobsGroup *group)
+{
+	const PrivilegeDescription *p;
+
+	p = privilege_search (oobs_group_get_name (group));
+	if (p == NULL) /* Ignore groups that don't match a privilege */
+		return;
+
+	gtk_list_store_insert_with_values (privileges_model, NULL, G_MAXINT,
+	                                   COL_MEMBER, FALSE,
+	                                   COL_DESCRIPTION, (p) ? _(p->privilege) : NULL,
+	                                   COL_GROUP, group,
+	                                   -1);
+}
+
+void
+privileges_table_set_from_user (OobsUser *user)
+{
+	GtkTreeIter iter;
+	gboolean valid;
+	OobsGroup *group;
+	GList *users;
+
+	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (privileges_model), &iter);
+
+	while (valid) {
+		gtk_tree_model_get (GTK_TREE_MODEL (privileges_model), &iter,
+				    COL_GROUP, &group,
+				    -1);
+
+		users = oobs_group_get_users (group);
+		gtk_list_store_set (privileges_model, &iter,
+				    COL_MEMBER, (g_list_find (users, user) != NULL),
+				    -1);
+		g_list_free (users);
+		g_object_unref (group);
+		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (privileges_model), &iter);
+	}
+}
+
+static gboolean
+find_group_in_profile (OobsGroup      *group,
+		       GstUserProfile *profile)
+{
+	gchar **groups;
+	const gchar *name;
+
+	if (!profile->groups)
+		return FALSE;
+
+	groups = profile->groups;
+	name = oobs_group_get_name (group);
+
+	while (*groups) {
+		if (strcmp (*groups, name) == 0)
+			return TRUE;
+
+		groups++;
+	}
+
+	return FALSE;
+}
+
+void
+privileges_table_set_from_profile (GstUserProfile *profile)
+{
+	GtkTreeIter iter;
+	gboolean valid;
+	OobsGroup *group;
+
+	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (privileges_model), &iter);
+
+	while (valid) {
+		gtk_tree_model_get (GTK_TREE_MODEL (privileges_model), &iter,
+				    COL_GROUP, &group,
+				    -1);
+
+		gtk_list_store_set (privileges_model, &iter,
+				    COL_MEMBER, find_group_in_profile (group, profile),
+				    -1);
+
+		g_object_unref (group);
+		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (privileges_model), &iter);
+	}
+}
+
+void
+privileges_table_save (OobsUser *user)
+{
+	GtkTreeIter iter;
+	OobsGroup *group;
+	gboolean valid, member;
+
+	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (privileges_model), &iter);
+
+	while (valid) {
+		gtk_tree_model_get (GTK_TREE_MODEL (privileges_model), &iter,
+				    COL_GROUP, &group,
+				    COL_MEMBER, &member,
+				    -1);
+		if (member)
+			oobs_group_add_user (group, user);
+		else
+			oobs_group_remove_user (group, user);
+
+		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (privileges_model), &iter);
+	}
+}
+
+void
+privileges_table_clear (void)
+{
+	gtk_list_store_clear (privileges_model);
+}
diff -pruN 3.0.0-2/.pc/26_user_profiles_conf.patch/src/users/user-profiles.conf.in 3.0.0-2ubuntu1/.pc/26_user_profiles_conf.patch/src/users/user-profiles.conf.in
--- 3.0.0-2/.pc/26_user_profiles_conf.patch/src/users/user-profiles.conf.in	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/26_user_profiles_conf.patch/src/users/user-profiles.conf.in	2010-10-06 09:54:17.000000000 +0000
@@ -0,0 +1,10 @@
+[Desktop]
+_Name=Desktop user
+_Description=Can perform common tasks. Can't install software or change settings affecting all users.
+Default=1
+Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,video
+
+[Administrator]
+_Name=Administrator
+_Description=Can change anything on the system, including installing and upgrading software.
+Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,admin,sambashare,lpadmin,video
diff -pruN 3.0.0-2/.pc/62_no_gettext.patch/configure.in 3.0.0-2ubuntu1/.pc/62_no_gettext.patch/configure.in
--- 3.0.0-2/.pc/62_no_gettext.patch/configure.in	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/62_no_gettext.patch/configure.in	2011-04-03 17:32:51.000000000 +0000
@@ -251,6 +251,23 @@ dnl ==================================
 dnl END: GST_LIBS & GST_FLAGS
 dnl ==================================
 
+dnl ==================================
+dnl LIBIW DETECTION
+dnl ==================================
+
+GST_IW_LIBS=
+AC_CHECK_HEADER(iwlib.h, [
+  enable_libiw=yes
+  AC_DEFINE(HAVE_LIBIW_H, "", [whether libiw is available])
+  AC_HAVE_LIBRARY(iw, [GST_IW_LIBS="-liw"])
+])
+AM_CONDITIONAL(HAVE_LIBIW_H, test x$enable_libiw = xyes)
+AC_SUBST(GST_IW_LIBS)
+
+dnl ==================================
+dnl END: LIBIW DETECTION
+dnl ==================================
+
 dnl ===========================
 dnl NAUTILUS EXTENSION
 dnl ===========================
diff -pruN 3.0.0-2/.pc/80_gst-packages-common.patch/src/common/gst.h 3.0.0-2ubuntu1/.pc/80_gst-packages-common.patch/src/common/gst.h
--- 3.0.0-2/.pc/80_gst-packages-common.patch/src/common/gst.h	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/80_gst-packages-common.patch/src/common/gst.h	2010-10-06 09:54:53.000000000 +0000
@@ -0,0 +1,6 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+#include <config.h>
+#include "gst-tool.h"
+#include "gst-dialog.h"
+#include "gst-filter.h"
+#include "gst-service-role.h"
diff -pruN 3.0.0-2/.pc/80_gst-packages-common.patch/src/common/Makefile.am 3.0.0-2ubuntu1/.pc/80_gst-packages-common.patch/src/common/Makefile.am
--- 3.0.0-2/.pc/80_gst-packages-common.patch/src/common/Makefile.am	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/80_gst-packages-common.patch/src/common/Makefile.am	2010-12-12 17:39:02.000000000 +0000
@@ -0,0 +1,28 @@
+include $(top_srcdir)/DirsMakefile
+
+noinst_LIBRARIES = libsetuptool.a
+
+INCLUDES += \
+	$(GST_CFLAGS) \
+	-DDATADIR=\""$(datadir)"\" \
+	-DLIBDIR=\""$(libdir)"\" \
+	-DSYSCONFDIR=\""$(sysconfdir)"\" \
+	-DPREFIX=\""$(prefix)"\" \
+	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"
+
+libsetuptool_a_SOURCES = \
+	gst-dialog.c		gst-dialog.h \
+	gst-tool.c		gst-tool.h \
+	gst-platform-dialog.c	gst-platform-dialog.h \
+	gst-filter.c		gst-filter.h \
+	gst-service-role.c	gst-service-role.h \
+	gst.h
+
+if HAVE_POLKIT
+libsetuptool_a_SOURCES += \
+	um-lockbutton.c		um-lockbutton.h
+endif
+
+EXTRA_DIST = CommonMakefile $(headers)
+
+-include $(top_srcdir)/git.mk
diff -pruN 3.0.0-2/.pc/81_gst-packages-shares-admin.patch/src/shares/shares-tool.c 3.0.0-2ubuntu1/.pc/81_gst-packages-shares-admin.patch/src/shares/shares-tool.c
--- 3.0.0-2/.pc/81_gst-packages-shares-admin.patch/src/shares/shares-tool.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/81_gst-packages-shares-admin.patch/src/shares/shares-tool.c	2010-12-12 17:38:51.000000000 +0000
@@ -0,0 +1,240 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>.
+ */
+
+#include <glib-object.h>
+#include "shares-tool.h"
+#include "users-table.h"
+#include <glib/gi18n.h>
+#include "gst.h"
+
+static void gst_shares_tool_class_init (GstSharesToolClass *class);
+static void gst_shares_tool_init       (GstSharesTool      *tool);
+static void gst_shares_tool_finalize   (GObject            *object);
+
+static GObject * gst_shares_tool_constructor (GType                  type,
+					      guint                  n_construct_properties,
+					      GObjectConstructParam *construct_params);
+
+static void gst_shares_tool_update_gui    (GstTool         *tool);
+static void gst_shares_tool_update_config (GstTool         *tool);
+
+static void gst_shares_tool_update_services_availability (GstSharesTool *tool);
+
+G_DEFINE_TYPE (GstSharesTool, gst_shares_tool, GST_TYPE_TOOL);
+
+static void
+gst_shares_tool_class_init (GstSharesToolClass *class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (class);
+	GstToolClass *tool_class = GST_TOOL_CLASS (class);
+
+	object_class->constructor = gst_shares_tool_constructor;
+	object_class->finalize = gst_shares_tool_finalize;
+	tool_class->update_gui = gst_shares_tool_update_gui;
+	tool_class->update_config = gst_shares_tool_update_config;
+}
+
+static void
+gst_shares_tool_init (GstSharesTool *tool)
+{
+	GstTool *gst_tool = GST_TOOL (tool);
+
+	tool->nfs_config = oobs_nfs_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->nfs_config, TRUE);
+
+	tool->smb_config = oobs_smb_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->smb_config, TRUE);
+
+	tool->services_config = oobs_services_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->services_config, TRUE);
+
+	tool->hosts_config = oobs_hosts_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->hosts_config, TRUE);
+
+	tool->users_config = oobs_users_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->users_config, TRUE);
+}
+
+static GObject *
+gst_shares_tool_constructor (GType                  type,
+			     guint                  n_construct_properties,
+			     GObjectConstructParam *construct_params)
+{
+	GObject *object;
+
+	object = (* G_OBJECT_CLASS (gst_shares_tool_parent_class)->constructor) (type,
+										 n_construct_properties,
+										 construct_params);
+	users_table_create (GST_TOOL (object));
+
+	return object;
+}
+
+static void
+gst_shares_tool_finalize (GObject *object)
+{
+	GstSharesTool *tool = GST_SHARES_TOOL (object);
+
+	if (tool->nfs_config)
+		g_object_unref (tool->nfs_config);
+
+	(* G_OBJECT_CLASS (gst_shares_tool_parent_class)->finalize) (object);
+}
+
+static void
+add_shares (OobsList *list)
+{
+	OobsListIter iter;
+	OobsShare *share;
+	gboolean valid;
+
+	valid = oobs_list_get_iter_first (list, &iter);
+
+	while (valid) {
+		share = OOBS_SHARE (oobs_list_get (list, &iter));
+
+		table_add_share (share, &iter);
+		g_object_unref (share);
+		valid = oobs_list_iter_next (list, &iter);
+	}
+}
+
+static void
+update_global_smb_config (GstTool       *tool,
+			  OobsSMBConfig *config)
+{
+	GtkWidget *widget;
+	const gchar *str;
+	gboolean is_wins_server;
+
+	str = oobs_smb_config_get_workgroup (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_workgroup");
+	gtk_entry_set_text (GTK_ENTRY (widget), (str) ? str : "");
+
+	is_wins_server = oobs_smb_config_get_is_wins_server (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_is_wins");
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), is_wins_server);
+		
+	str = oobs_smb_config_get_wins_server (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_wins_server");
+	gtk_entry_set_text (GTK_ENTRY (widget), (str) ? str : "");
+}
+
+static gboolean
+check_servers (GstSharesTool *tool)
+{
+	GtkWidget *dialog;
+
+	if (tool->smb_available || tool->nfs_available)
+		return TRUE;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
+					 GTK_DIALOG_MODAL,
+					 GTK_MESSAGE_WARNING,
+					 GTK_BUTTONS_CLOSE,
+					 _("Sharing services are not installed"));
+	gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
+						    _("You need to install at least either Samba or NFS "
+						      "in order to share your folders."));
+	gtk_dialog_run (GTK_DIALOG (dialog));
+	gtk_widget_destroy (dialog);
+
+	return FALSE;
+}
+
+static void
+gst_shares_tool_update_gui (GstTool *tool)
+{
+	GstSharesTool *shares_tool;
+	GtkWidget *dialog_notebook;
+	OobsList *list;
+
+	shares_tool = GST_SHARES_TOOL (tool);
+	dialog_notebook = gst_dialog_get_widget (tool->main_dialog, "shares_admin");
+
+	if (check_servers (shares_tool)) {
+		table_clear ();
+
+		list  = oobs_nfs_config_get_shares (OOBS_NFS_CONFIG (shares_tool->nfs_config));
+		add_shares (list);
+
+		list = oobs_smb_config_get_shares (OOBS_SMB_CONFIG (shares_tool->smb_config));
+		add_shares (list);
+
+		update_global_smb_config (tool, OOBS_SMB_CONFIG (shares_tool->smb_config));
+		gtk_widget_set_sensitive (dialog_notebook, TRUE);
+	} else {
+		/* disable the tool UI, there's no way to add shares */
+		gtk_widget_set_sensitive (dialog_notebook, FALSE);
+	}
+
+	users_table_set_config (shares_tool);
+
+	if (shares_tool->path) {
+		gst_tool_authenticate (tool, GST_SHARES_TOOL (tool)->smb_config);
+		gst_tool_authenticate (tool, GST_SHARES_TOOL (tool)->nfs_config);
+		share_settings_dialog_run (shares_tool->path, TRUE);
+	}
+}
+
+static void
+gst_shares_tool_update_config (GstTool *tool)
+{
+	GstSharesTool *shares_tool;
+
+	shares_tool = GST_SHARES_TOOL (tool);
+	gst_shares_tool_update_services_availability (shares_tool);
+}
+
+static void
+gst_shares_tool_update_services_availability (GstSharesTool *tool)
+{
+	OobsList *services;
+	OobsListIter iter;
+	GObject *service;
+	gboolean valid;
+	GstServiceRole role;
+
+	services = oobs_services_config_get_services (OOBS_SERVICES_CONFIG (tool->services_config));
+	valid = oobs_list_get_iter_first (services, &iter);
+
+	while (valid) {
+		service = oobs_list_get (services, &iter);
+		role = gst_service_get_role (OOBS_SERVICE (service));
+
+		if (role == GST_ROLE_FILE_SERVER_SMB)
+			tool->smb_available = TRUE;
+		else if (role == GST_ROLE_FILE_SERVER_NFS)
+			tool->nfs_available = TRUE;
+
+		g_object_unref (service);
+		valid = oobs_list_iter_next (services, &iter);
+	}
+}
+
+GstSharesTool*
+gst_shares_tool_new (void)
+{
+	return g_object_new (GST_TYPE_SHARES_TOOL,
+			     "name", "shares",
+			     "title", _("Shared Folders"),
+			     "icon", "folder-remote",
+			     NULL);
+}
diff -pruN 3.0.0-2/.pc/82_gst-packages-time-admin.patch/src/time/time-tool.c 3.0.0-2ubuntu1/.pc/82_gst-packages-time-admin.patch/src/time/time-tool.c
--- 3.0.0-2/.pc/82_gst-packages-time-admin.patch/src/time/time-tool.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/82_gst-packages-time-admin.patch/src/time/time-tool.c	2010-12-12 17:35:29.000000000 +0000
@@ -0,0 +1,774 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * Copyright (C) 2005 Carlos Garnacho.
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>
+ */
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <dbus/dbus.h>
+#include "time-tool.h"
+#include "gst.h"
+#include "ntp-servers-list.h"
+
+#define GST_TIME_TOOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_TIME_TOOL, GstTimeToolPrivate))
+#define APPLY_CONFIG_TIMEOUT 2000
+
+#define SCREENSAVER_SERVICE "org.gnome.ScreenSaver"
+#define SCREENSAVER_PATH "/org/gnome/ScreenSaver"
+#define SCREENSAVER_INTERFACE "org.gnome.ScreenSaver"
+
+typedef struct _GstTimeToolPrivate GstTimeToolPrivate;
+
+struct _GstTimeToolPrivate {
+	guint clock_timeout;
+	guint apply_timeout;
+
+	guint configuration_changed_id;
+
+	DBusConnection *bus_connection;
+	gint cookie;
+};
+
+enum {
+	CONFIGURATION_AUTOMATIC,
+	CONFIGURATION_MANUAL
+};
+
+enum {
+	COL_TEXT,
+	COL_WIDGET,
+	COL_LAST
+};
+
+static void  gst_time_tool_class_init     (GstTimeToolClass *class);
+static void  gst_time_tool_init           (GstTimeTool      *tool);
+static void  gst_time_tool_finalize       (GObject          *object);
+
+static GObject *gst_time_tool_constructor (GType                  type,
+					   guint                  n_construct_properties,
+					   GObjectConstructParam *construct_params);
+static void  gst_time_tool_update_gui     (GstTool *tool);
+static void  gst_time_tool_update_config  (GstTool *tool);
+static void  gst_time_tool_close          (GstTool *tool);
+
+static void  on_option_configuration_changed (GtkWidget   *widget,
+					      GstTimeTool *time_tool);
+
+
+G_DEFINE_TYPE (GstTimeTool, gst_time_tool, GST_TYPE_TOOL);
+
+static void
+gst_time_tool_class_init (GstTimeToolClass *class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (class);
+	GstToolClass *tool_class = GST_TOOL_CLASS (class);
+	
+	object_class->constructor = gst_time_tool_constructor;
+	object_class->finalize = gst_time_tool_finalize;
+	tool_class->update_gui = gst_time_tool_update_gui;
+	tool_class->update_config = gst_time_tool_update_config;
+	tool_class->close = gst_time_tool_close;
+
+	g_type_class_add_private (object_class,
+				  sizeof (GstTimeToolPrivate));
+}
+
+static void
+get_ntp_service (GstTimeTool *tool)
+{
+	GObject *service;
+	OobsList *list;
+	OobsListIter iter;
+	gboolean valid;
+	GstServiceRole role;
+
+	list = oobs_services_config_get_services (OOBS_SERVICES_CONFIG (tool->services_config));
+	valid = oobs_list_get_iter_first (list, &iter);
+
+	while (valid) {
+		service = oobs_list_get (list, &iter);
+		role = gst_service_get_role (OOBS_SERVICE (service));
+
+		if (role == GST_ROLE_NTP_SERVER)
+			tool->ntp_service = g_object_ref (service);
+
+		g_object_unref (service);
+		valid = oobs_list_iter_next (list, &iter);
+	}
+}
+
+static void
+gst_time_tool_init (GstTimeTool *tool)
+{
+	DBusError error;
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+
+	dbus_error_init (&error);
+	priv->bus_connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
+	priv->cookie = 0;
+
+	if (dbus_error_is_set (&error)) {
+		g_warning ("%s", error.message);
+		dbus_error_free (&error);
+	}
+
+	tool->time_config = oobs_time_config_get ();
+	gst_tool_add_configuration_object (GST_TOOL (tool), tool->time_config, TRUE);
+
+	tool->ntp_config = oobs_ntp_config_get ();
+	gst_tool_add_configuration_object (GST_TOOL (tool), tool->ntp_config, TRUE);
+
+	tool->services_config = oobs_services_config_get ();
+	gst_tool_add_configuration_object (GST_TOOL (tool), tool->services_config, TRUE);
+}
+
+static void
+inhibit_screensaver (GstTimeTool *tool,
+		     gboolean     inhibit)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+	DBusMessage *message, *reply;
+	DBusMessageIter iter;
+
+	if (!priv->bus_connection)
+		return;
+
+	if (inhibit) {
+		const gchar *appname = "Time-admin";
+		const gchar *reason = "Changing time";
+
+		g_return_if_fail (priv->cookie == 0);
+
+		message = dbus_message_new_method_call (SCREENSAVER_SERVICE,
+							SCREENSAVER_PATH,
+							SCREENSAVER_INTERFACE,
+							"Inhibit");
+		/* set args */
+		dbus_message_iter_init_append (message, &iter);
+		dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &appname);
+		dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &reason);
+
+		reply = dbus_connection_send_with_reply_and_block (priv->bus_connection, message, -1, NULL);
+
+		if (reply) {
+			/* get cookie */
+			dbus_message_iter_init (reply, &iter);
+			dbus_message_iter_get_basic (&iter, &priv->cookie);
+			dbus_message_unref (reply);
+		}
+
+		dbus_message_unref (message);
+	} else if (!inhibit && priv->cookie != 0) {
+		message = dbus_message_new_method_call (SCREENSAVER_SERVICE,
+							SCREENSAVER_PATH,
+							SCREENSAVER_INTERFACE,
+							"UnInhibit");
+		/* set args */
+		dbus_message_iter_init_append (message, &iter);
+		dbus_message_iter_append_basic (&iter, DBUS_TYPE_INT32, &priv->cookie);
+
+		dbus_connection_send (priv->bus_connection, message, NULL);
+		dbus_message_unref (message);
+
+		priv->cookie = 0;
+	}
+}
+
+static gboolean
+on_apply_timeout (GstTimeTool *tool)
+{
+	guint year, month, day, hour, minute, second;
+
+	gtk_calendar_get_date (GTK_CALENDAR (tool->calendar), &year, &month, &day);
+	hour   = (guint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (tool->hours));
+	minute = (guint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (tool->minutes));
+	second = (guint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (tool->seconds));
+
+	inhibit_screensaver (tool, TRUE);
+
+	oobs_time_config_set_time (OOBS_TIME_CONFIG (tool->time_config),
+				   (gint) year, (gint) month, (gint) day,
+				   (gint) hour, (gint) minute, (gint)second);
+
+	gst_tool_commit (GST_TOOL (tool), tool->time_config);
+	gst_time_tool_start_clock (tool);
+
+	inhibit_screensaver (tool, FALSE);
+
+	return FALSE;
+}
+
+static void
+update_apply_timeout (GstTimeTool *tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+
+	gst_time_tool_stop_clock (tool);
+
+	if (priv->apply_timeout) {
+		g_source_remove (priv->apply_timeout);
+		priv->apply_timeout = 0;
+	}
+
+	priv->apply_timeout = g_timeout_add (APPLY_CONFIG_TIMEOUT, (GSourceFunc) on_apply_timeout, tool);
+}
+
+static void
+on_value_changed (GtkWidget *widget, gpointer data)
+{
+	gint value;
+	gchar *str;
+
+	value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
+	str = g_strdup_printf ("%02d", (gint) value);
+
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
+	gtk_entry_set_text (GTK_ENTRY (widget), str);
+	g_free (str);
+}
+
+static void
+on_editable_changed (GtkWidget *widget, gpointer data)
+{
+	update_apply_timeout (GST_TIME_TOOL (data));
+}
+
+#define is_leap_year(yyy) ((((yyy % 4) == 0) && ((yyy % 100) != 0)) || ((yyy % 400) == 0));
+
+static void
+change_calendar (GtkWidget *calendar, gint increment)
+{
+	gint day, month, year;
+	gint days_in_month;
+	gboolean leap_year;
+
+	static const gint month_length[2][13] = {
+		{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
+		{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
+	};
+
+	gtk_calendar_get_date (GTK_CALENDAR (calendar),
+			       (guint*) &year, (guint*) &month, (guint*) &day);
+
+	leap_year = is_leap_year (year);
+	days_in_month = month_length [leap_year][month+1];
+
+	if (increment != 0) {
+		day += increment;
+
+		if (day < 1) {
+			day = month_length [leap_year][month] + day;
+			month--;
+		} else if (day > days_in_month) {
+			day -= days_in_month;
+			month++;
+		}
+
+		if (month < 0) {
+			year--;
+			leap_year = is_leap_year (year);
+			month = 11;
+			day = month_length [leap_year][month+1];
+		} else if (month > 11) {
+			year++;
+			leap_year = is_leap_year (year);
+			month = 0;
+			day = 1;
+		}
+
+		gtk_calendar_select_month (GTK_CALENDAR (calendar),
+					   month, year);
+		gtk_calendar_select_day (GTK_CALENDAR (calendar),
+					 day);
+	}
+}
+
+static void
+on_spin_button_wrapped (GtkWidget *widget, gpointer data)
+{
+	GstTimeTool *tool = GST_TIME_TOOL (data);
+	gint value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
+
+	if (widget == tool->seconds)
+		gtk_spin_button_spin (GTK_SPIN_BUTTON (tool->minutes),
+				      (value == 0) ? GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 1);
+	else if (widget == tool->minutes)
+		gtk_spin_button_spin (GTK_SPIN_BUTTON (tool->hours),
+				      (value == 0) ? GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 1);
+	else if (widget == tool->hours)
+		change_calendar (tool->calendar, (value == 0) ? 1 : -1);
+}
+
+static void
+on_calendar_day_selected (GtkWidget *widget, gpointer data)
+{
+	update_apply_timeout (GST_TIME_TOOL (data));
+}
+
+static GtkWidget*
+prepare_spin_button (GstTool *tool, const gchar *widget_name)
+{
+	GtkWidget *widget;
+
+	widget = gst_dialog_get_widget (tool->main_dialog, widget_name);
+
+	g_signal_connect (G_OBJECT (widget), "changed",
+			  G_CALLBACK (on_editable_changed), tool);
+	g_signal_connect (G_OBJECT (widget), "wrapped",
+			  G_CALLBACK (on_spin_button_wrapped), tool);
+	/*
+	g_signal_connect (G_OBJECT (widget), "value-changed",
+			  G_CALLBACK (on_value_changed), tool);
+	*/
+
+	return widget;
+}
+
+void
+init_timezone (GstTimeTool *time_tool)
+{
+	GstTool *tool = GST_TOOL (time_tool);
+	GtkWidget *w;
+	GPtrArray *locs;
+	guint i;
+
+	time_tool->tzmap = e_tz_map_new (tool);
+	g_return_if_fail (time_tool->tzmap != NULL);
+	
+	w = gst_dialog_get_widget (tool->main_dialog, "map_window");
+	gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (time_tool->tzmap->map));
+	gtk_widget_show (GTK_WIDGET (time_tool->tzmap->map));
+
+	w = gst_dialog_get_widget (tool->main_dialog, "location_combo");
+	locs = tz_get_locations (e_tz_map_get_tz_db (time_tool->tzmap));
+
+	for (i = 0; i < locs->len; i++)
+		gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w),
+		                                tz_location_get_zone (g_ptr_array_index (locs, i)));
+
+	time_tool->timezone_dialog = gst_dialog_get_widget (tool->main_dialog, "time_zone_window");
+}
+
+static gboolean
+check_ntp_support (GstTool  *tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+	GtkWidget *message, *widget;
+
+	if (GST_TIME_TOOL (tool)->ntp_service)
+		return TRUE;
+	else {
+		/* Be sure we take into account newly installed NTP support */
+		oobs_object_update (OOBS_OBJECT (GST_TIME_TOOL (tool)->services_config));
+		get_ntp_service (GST_TIME_TOOL (tool));
+
+		if (GST_TIME_TOOL (tool)->ntp_service)
+			return TRUE;
+	}
+
+	widget = gst_dialog_get_widget (tool->main_dialog, "configuration_options");
+	g_signal_handler_block (widget, priv->configuration_changed_id);
+	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), CONFIGURATION_MANUAL);
+	g_signal_handler_unblock (widget, priv->configuration_changed_id);
+
+	message = gtk_message_dialog_new (GTK_WINDOW (tool->main_dialog),
+					  GTK_DIALOG_MODAL,
+					  GTK_MESSAGE_INFO,
+					  GTK_BUTTONS_CLOSE,
+					  _("NTP support is not installed"));
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
+						  _("Please install and activate NTP support in the system to enable "
+						    "synchronization of your local time server with "
+						    "internet time servers."));
+	gtk_dialog_run (GTK_DIALOG (message));
+	gtk_widget_destroy (message);
+
+	return FALSE;
+}
+
+static void
+on_option_configuration_changed (GtkWidget *widget,
+				 GstTimeTool *time_tool)
+{
+	gint option;
+	gboolean active;
+
+	option = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
+	active = (option == CONFIGURATION_AUTOMATIC);
+
+	if (check_ntp_support (GST_TOOL (time_tool))) {
+		const OobsServicesRunlevel *runlevel;
+
+		runlevel = oobs_services_config_get_default_runlevel (OOBS_SERVICES_CONFIG (time_tool->services_config));
+		oobs_service_set_runlevel_configuration (time_tool->ntp_service,
+							 (OobsServicesRunlevel *) runlevel,
+							 (active) ? OOBS_SERVICE_START : OOBS_SERVICE_STOP,
+							 0);
+
+		gst_tool_commit_async (GST_TOOL (time_tool), OOBS_OBJECT (time_tool->ntp_service),
+				       (active) ? _("Enabling NTP") : _("Disabling NTP"),
+				       NULL, NULL);
+	}
+}
+
+static void
+on_synchronize_now_clicked (GtkWidget *widget, gpointer data)
+{
+	GstTimeTool *tool;
+
+	tool = GST_TIME_TOOL (data);
+	gst_tool_commit_async (GST_TOOL (tool), tool->ntp_config,
+			       _("Synchronizing system clock"), NULL, NULL);
+}
+
+static void
+on_option_changed (GtkWidget   *combo,
+		   GstTimeTool *time_tool)
+{
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkWidget *widget, *container;
+	gint option;
+
+	if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter))
+		return;
+
+	option = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+	gtk_tree_model_get (model, &iter,
+			    COL_WIDGET, &widget,
+			    -1);
+
+	container = gst_dialog_get_widget (GST_TOOL (time_tool)->main_dialog, "configuration_container");
+
+	/* remove the child */
+	if (gtk_bin_get_child (GTK_BIN (container)))
+		gtk_container_remove (GTK_CONTAINER (container), gtk_bin_get_child (GTK_BIN (container)));
+
+	gtk_container_add (GTK_CONTAINER (container), widget);
+	gtk_widget_show (container);
+}
+
+static void
+add_option (GstTool      *tool,
+	    GtkListStore *store,
+	    const gchar  *text,
+	    const gchar  *widget)
+{
+	GtkTreeIter iter;
+	GtkWidget *w, *toplevel;
+
+	w = gst_dialog_get_widget (tool->main_dialog, widget);
+	toplevel = gtk_widget_get_toplevel (w);
+
+	g_object_ref (w);
+	gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (w)), w);
+	gtk_widget_destroy (toplevel);
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter,
+			    COL_TEXT, text,
+			    COL_WIDGET, w,
+			    -1);
+}
+
+static void
+set_cell_layout (GtkCellLayout *combo)
+{
+	GtkCellRenderer *renderer;
+
+	renderer = gtk_cell_renderer_text_new ();
+
+	gtk_cell_layout_clear (combo);
+	gtk_cell_layout_pack_start (combo, renderer, TRUE);
+	gtk_cell_layout_set_attributes (combo, renderer,
+					"text", COL_TEXT,
+					NULL);
+}
+
+static void
+add_options_combo (GstTimeTool *time_tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (time_tool);
+	GstTool *tool = GST_TOOL (time_tool);
+	GtkWidget *combo;
+	GtkListStore *store;
+
+	combo = gst_dialog_get_widget (tool->main_dialog, "configuration_options");
+	store = gtk_list_store_new (COL_LAST, G_TYPE_STRING, GTK_TYPE_WIDGET);
+
+	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store));
+	add_option (tool, store, _("Keep synchronized with Internet servers"), "automatic_configuration");
+	add_option (tool, store, _("Manual"), "manual_configuration");
+	g_object_unref (store);
+
+	set_cell_layout (GTK_CELL_LAYOUT (combo));
+	g_signal_connect_after (combo, "changed",
+				G_CALLBACK (on_option_changed), time_tool);
+
+	priv->configuration_changed_id =
+		g_signal_connect (combo, "changed",
+				  G_CALLBACK (on_option_configuration_changed), time_tool);
+}
+
+static GObject*
+gst_time_tool_constructor (GType                  type,
+			   guint                  n_construct_properties,
+			   GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	GstTimeTool *time_tool;
+
+	object = (* G_OBJECT_CLASS (gst_time_tool_parent_class)->constructor) (type,
+									       n_construct_properties,
+									       construct_params);
+	time_tool = GST_TIME_TOOL (object);
+	time_tool->map_hover_label = gst_dialog_get_widget (GST_TOOL (time_tool)->main_dialog, "location_label");
+	time_tool->hours    = prepare_spin_button (GST_TOOL (time_tool), "hours");
+	time_tool->minutes  = prepare_spin_button (GST_TOOL (time_tool), "minutes");
+	time_tool->seconds  = prepare_spin_button (GST_TOOL (time_tool), "seconds");
+
+	time_tool->calendar = gst_dialog_get_widget (GST_TOOL (time_tool)->main_dialog, "calendar");
+
+	g_signal_connect (G_OBJECT (time_tool->calendar), "day-selected",
+			  G_CALLBACK (on_calendar_day_selected), time_tool);
+
+	time_tool->ntp_list = ntp_servers_list_get (time_tool);
+	init_timezone (time_tool);
+	add_options_combo (time_tool);
+
+	time_tool->synchronize_now = gst_dialog_get_widget (GST_TOOL (time_tool)->main_dialog, "update_time");
+	g_signal_connect (G_OBJECT (time_tool->synchronize_now), "clicked",
+			  G_CALLBACK (on_synchronize_now_clicked), time_tool);
+
+	gtk_window_set_resizable (GTK_WINDOW (GST_TOOL (time_tool)->main_dialog), FALSE);
+
+	return object;
+}
+
+static void
+gst_time_tool_finalize (GObject *object)
+{
+	GstTimeTool *tool = GST_TIME_TOOL (object);
+
+	/* FIXME: missing things to free */
+	g_object_unref (tool->time_config);
+
+	(* G_OBJECT_CLASS (gst_time_tool_parent_class)->finalize) (object);
+}
+
+static void
+update_servers_list (GstTimeTool *tool)
+{
+	OobsList *list;
+	OobsListIter iter;
+	GObject *server;
+	gboolean valid;
+
+	/* FIXME: restore NTP servers to NULL */
+	list = oobs_ntp_config_get_servers (OOBS_NTP_CONFIG (tool->ntp_config));
+	valid = oobs_list_get_iter_first (list, &iter);
+
+	while (valid) {
+		server = oobs_list_get (list, &iter);
+		ntp_servers_list_check (GST_TIME_TOOL (tool)->ntp_list,
+					&iter, OOBS_NTP_SERVER (server));
+
+		g_object_unref (server);
+		valid = oobs_list_iter_next (list, &iter);
+	}
+}
+
+static void
+gst_time_tool_update_gui (GstTool *tool)
+{
+	GstTimeTool *time_tool = GST_TIME_TOOL (tool);
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (time_tool);
+	GtkWidget *timezone, *configuration_options, *timeserver_button;
+	gint option = CONFIGURATION_MANUAL;
+	OobsServiceStatus active;
+
+	gst_time_tool_start_clock (GST_TIME_TOOL (tool));
+	timezone = gst_dialog_get_widget (tool->main_dialog, "tzlabel");
+	configuration_options = gst_dialog_get_widget (tool->main_dialog, "configuration_options");
+	timeserver_button = gst_dialog_get_widget (tool->main_dialog, "timeserver_button");
+
+	gtk_label_set_text (GTK_LABEL (timezone),
+			    oobs_time_config_get_timezone (OOBS_TIME_CONFIG (time_tool->time_config)));
+
+	update_servers_list (GST_TIME_TOOL (tool));
+
+	if (time_tool->ntp_service) {
+		const OobsServicesRunlevel *runlevel;
+
+		runlevel = oobs_services_config_get_default_runlevel (OOBS_SERVICES_CONFIG (time_tool->services_config));
+		oobs_service_get_runlevel_configuration (time_tool->ntp_service, (OobsServicesRunlevel *) runlevel, &active, NULL);
+
+		if (active == OOBS_SERVICE_START)
+			option = CONFIGURATION_AUTOMATIC;
+	}
+
+	g_signal_handler_block (configuration_options, priv->configuration_changed_id);
+	gtk_combo_box_set_active (GTK_COMBO_BOX (configuration_options), option);
+	g_signal_handler_unblock (configuration_options, priv->configuration_changed_id);
+}
+
+static void
+gst_time_tool_update_config (GstTool *tool)
+{
+	get_ntp_service (GST_TIME_TOOL (tool));
+}
+
+static void
+gst_time_tool_close (GstTool *tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+
+	if (priv->apply_timeout) {
+		/* disable timeout and apply changes
+		 * immediately, the tool is closing! */
+		g_source_remove (priv->apply_timeout);
+		priv->apply_timeout = 0;
+		on_apply_timeout (GST_TIME_TOOL (tool));
+	}
+
+	gst_time_tool_stop_clock (GST_TIME_TOOL (tool));
+
+	(* GST_TOOL_CLASS (gst_time_tool_parent_class)->close) (tool);
+}
+
+GstTool*
+gst_time_tool_new (void)
+{
+	return g_object_new (GST_TYPE_TIME_TOOL,
+			     "name", "time",
+			     "title", _("Time and Date Settings"),
+			     "icon", "time-admin",
+			     NULL);
+}
+
+static void
+freeze_clock (GstTimeTool *tool)
+{
+	g_signal_handlers_block_by_func (tool->hours,   on_editable_changed, tool);
+	g_signal_handlers_block_by_func (tool->minutes, on_editable_changed, tool);
+	g_signal_handlers_block_by_func (tool->seconds, on_editable_changed, tool);
+	g_signal_handlers_block_by_func (tool->calendar, on_calendar_day_selected, tool);
+}
+
+static void
+thaw_clock (GstTimeTool *tool)
+{
+	g_signal_handlers_unblock_by_func (tool->hours,   on_editable_changed, tool);
+	g_signal_handlers_unblock_by_func (tool->minutes, on_editable_changed, tool);
+	g_signal_handlers_unblock_by_func (tool->seconds, on_editable_changed, tool);
+	g_signal_handlers_unblock_by_func (tool->calendar, on_calendar_day_selected, tool);
+}
+
+void
+gst_time_tool_update_clock (GstTimeTool *tool)
+{
+	gint year, month, day, hour, minute, second;
+
+	oobs_time_config_get_time (OOBS_TIME_CONFIG (tool->time_config),
+				   &year, &month,  &day,
+				   &hour, &minute, &second);
+
+	freeze_clock (tool);
+
+	gtk_calendar_select_month (GTK_CALENDAR (tool->calendar), month, year);
+	gtk_calendar_select_day   (GTK_CALENDAR (tool->calendar), day);
+
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (tool->hours),   (gfloat) hour);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (tool->minutes), (gfloat) minute);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (tool->seconds), (gfloat) second);
+
+	thaw_clock (tool);
+}
+
+static gboolean
+clock_tick (gpointer data)
+{
+	GstTimeTool *tool = (GstTimeTool *) data;
+
+	gst_time_tool_update_clock (tool);
+
+	return TRUE;
+}
+
+void
+gst_time_tool_start_clock (GstTimeTool *tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+
+	if (!priv->clock_timeout) {
+		/* Do a preliminary update, just for showing
+		   something with sense in the gui immediatly */
+		gst_time_tool_update_clock (tool);
+
+		priv->clock_timeout = g_timeout_add (1000, (GSourceFunc) clock_tick, tool);
+	}
+}
+
+void
+gst_time_tool_stop_clock (GstTimeTool *tool)
+{
+	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
+
+	if (priv->clock_timeout) {
+		g_source_remove (priv->clock_timeout);
+		priv->clock_timeout = 0;
+	}
+}
+
+void
+gst_time_tool_run_timezone_dialog (GstTimeTool *time_tool)
+{
+	GstTool *tool;
+	GtkWidget *label;
+	const gchar *timezone;
+	gchar *tz_name = NULL;
+	TzLocation *tz_location;
+
+	tool  = GST_TOOL (time_tool);
+	label = gst_dialog_get_widget (tool->main_dialog, "tzlabel");
+
+	timezone = oobs_time_config_get_timezone (OOBS_TIME_CONFIG (time_tool->time_config));
+	e_tz_map_set_tz_from_name (time_tool->tzmap, timezone);
+
+	gtk_window_set_transient_for (GTK_WINDOW (time_tool->timezone_dialog),
+				      GTK_WINDOW (tool->main_dialog));
+
+	gst_dialog_add_edit_dialog (tool->main_dialog, time_tool->timezone_dialog);
+
+	gtk_widget_show (time_tool->timezone_dialog);
+	gtk_dialog_run (GTK_DIALOG (time_tool->timezone_dialog));
+	gtk_widget_hide (time_tool->timezone_dialog);
+
+	gst_dialog_remove_edit_dialog (tool->main_dialog, time_tool->timezone_dialog);
+
+	tz_name     = e_tz_map_get_selected_tz_name (time_tool->tzmap);
+	tz_location = e_tz_map_get_location_by_name (time_tool->tzmap, tz_name);
+
+	if (!timezone || strcmp (tz_name, timezone) != 0) {
+		oobs_time_config_set_timezone (OOBS_TIME_CONFIG (time_tool->time_config), tz_name);
+		gst_tool_commit (GST_TOOL (time_tool), time_tool->time_config);
+		gtk_label_set_text (GTK_LABEL (label), tz_name);
+	}
+}
diff -pruN 3.0.0-2/.pc/91_shares_services_detection.patch/src/shares/shares-tool.c 3.0.0-2ubuntu1/.pc/91_shares_services_detection.patch/src/shares/shares-tool.c
--- 3.0.0-2/.pc/91_shares_services_detection.patch/src/shares/shares-tool.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/91_shares_services_detection.patch/src/shares/shares-tool.c	2011-12-17 00:52:19.000000000 +0000
@@ -0,0 +1,293 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>.
+ */
+
+#include <glib-object.h>
+#include "shares-tool.h"
+#include "users-table.h"
+#include <glib/gi18n.h>
+#include "gst.h"
+
+static void gst_shares_tool_class_init (GstSharesToolClass *class);
+static void gst_shares_tool_init       (GstSharesTool      *tool);
+static void gst_shares_tool_finalize   (GObject            *object);
+
+static GObject * gst_shares_tool_constructor (GType                  type,
+					      guint                  n_construct_properties,
+					      GObjectConstructParam *construct_params);
+
+static void gst_shares_tool_update_gui    (GstTool         *tool);
+static void gst_shares_tool_update_config (GstTool         *tool);
+
+static void gst_shares_tool_update_services_availability (GstSharesTool *tool);
+
+G_DEFINE_TYPE (GstSharesTool, gst_shares_tool, GST_TYPE_TOOL);
+
+static void
+gst_shares_tool_class_init (GstSharesToolClass *class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (class);
+	GstToolClass *tool_class = GST_TOOL_CLASS (class);
+
+	object_class->constructor = gst_shares_tool_constructor;
+	object_class->finalize = gst_shares_tool_finalize;
+	tool_class->update_gui = gst_shares_tool_update_gui;
+	tool_class->update_config = gst_shares_tool_update_config;
+}
+
+static void
+gst_shares_tool_init (GstSharesTool *tool)
+{
+	GstTool *gst_tool = GST_TOOL (tool);
+
+	tool->nfs_config = oobs_nfs_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->nfs_config, TRUE);
+
+	tool->smb_config = oobs_smb_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->smb_config, TRUE);
+
+	tool->services_config = oobs_services_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->services_config, TRUE);
+
+	tool->hosts_config = oobs_hosts_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->hosts_config, TRUE);
+
+	tool->users_config = oobs_users_config_get ();
+	gst_tool_add_configuration_object (gst_tool, tool->users_config, TRUE);
+}
+
+static GObject *
+gst_shares_tool_constructor (GType                  type,
+			     guint                  n_construct_properties,
+			     GObjectConstructParam *construct_params)
+{
+	GObject *object;
+
+	object = (* G_OBJECT_CLASS (gst_shares_tool_parent_class)->constructor) (type,
+										 n_construct_properties,
+										 construct_params);
+	users_table_create (GST_TOOL (object));
+
+	return object;
+}
+
+static void
+gst_shares_tool_finalize (GObject *object)
+{
+	GstSharesTool *tool = GST_SHARES_TOOL (object);
+
+	if (tool->nfs_config)
+		g_object_unref (tool->nfs_config);
+
+	(* G_OBJECT_CLASS (gst_shares_tool_parent_class)->finalize) (object);
+}
+
+static void
+add_shares (OobsList *list)
+{
+	OobsListIter iter;
+	OobsShare *share;
+	gboolean valid;
+
+	valid = oobs_list_get_iter_first (list, &iter);
+
+	while (valid) {
+		share = OOBS_SHARE (oobs_list_get (list, &iter));
+
+		table_add_share (share, &iter);
+		g_object_unref (share);
+		valid = oobs_list_iter_next (list, &iter);
+	}
+}
+
+static void
+update_global_smb_config (GstTool       *tool,
+			  OobsSMBConfig *config)
+{
+	GtkWidget *widget;
+	const gchar *str;
+	gboolean is_wins_server;
+
+	str = oobs_smb_config_get_workgroup (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_workgroup");
+	gtk_entry_set_text (GTK_ENTRY (widget), (str) ? str : "");
+
+	is_wins_server = oobs_smb_config_get_is_wins_server (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_is_wins");
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), is_wins_server);
+		
+	str = oobs_smb_config_get_wins_server (config);
+	widget = gst_dialog_get_widget (tool->main_dialog, "smb_wins_server");
+	gtk_entry_set_text (GTK_ENTRY (widget), (str) ? str : "");
+}
+
+static gboolean
+install_packages (GstTool *tool, gboolean install_nfs, gboolean install_smb)
+{
+	gchar **packages;
+	gboolean retval;
+	gint i = 0;
+
+	if (!install_nfs && !install_smb)
+		return FALSE;
+
+	packages = g_new0 (gchar*, 3);
+
+	if (install_nfs)
+		packages[i++] = g_strdup ("nfs-kernel-server");
+
+	if (install_smb)
+		packages[i++] = g_strdup ("samba");
+
+	retval = gst_packages_install (GTK_WINDOW (tool->main_dialog), packages);
+	g_strfreev (packages);
+
+	return retval;
+}
+
+static gboolean
+check_servers (GstSharesTool *tool)
+{
+	GtkWidget *dialog;
+	GtkWidget *nfs_check, *smb_check;
+	gint response;
+	gboolean retval = FALSE;
+
+	if (tool->smb_available || tool->nfs_available)
+		return TRUE;
+
+	dialog = gtk_message_dialog_new (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
+					 GTK_DIALOG_MODAL,
+					 GTK_MESSAGE_WARNING,
+					 GTK_BUTTONS_CLOSE,
+					 _("Sharing services are not installed"));
+	gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
+						    _("You need to install at least either Samba or NFS "
+						      "in order to share your folders."));
+	gtk_dialog_add_button (GTK_DIALOG (dialog), _("Install services"), GTK_RESPONSE_OK);
+
+	/* add NFS checkbutton */
+	nfs_check = gtk_check_button_new_with_mnemonic (_("Install Unix networks support (_NFS)"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nfs_check), TRUE);
+	gtk_widget_show (nfs_check);
+	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), nfs_check);
+
+	/* add SMB checkbutton */
+	smb_check = gtk_check_button_new_with_mnemonic (_("Install Windows networks support (_SMB)"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smb_check), TRUE);
+	gtk_widget_show (smb_check);
+	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), smb_check);
+
+	response = gtk_dialog_run (GTK_DIALOG (dialog));
+	gtk_widget_hide (dialog);
+
+	if (response == GTK_RESPONSE_OK) {
+		if (install_packages (GST_TOOL (tool),
+				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (nfs_check)),
+				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (smb_check)))) {
+			gst_tool_update_config (GST_TOOL (tool));
+			gst_tool_update_gui (GST_TOOL (tool));
+
+			retval = TRUE;
+		}
+	}
+
+	gtk_widget_destroy (dialog);
+	return retval;
+}
+
+static void
+gst_shares_tool_update_gui (GstTool *tool)
+{
+	GstSharesTool *shares_tool;
+	GtkWidget *dialog_notebook;
+	OobsList *list;
+
+	shares_tool = GST_SHARES_TOOL (tool);
+	dialog_notebook = gst_dialog_get_widget (tool->main_dialog, "shares_admin");
+
+	if (check_servers (shares_tool)) {
+		table_clear ();
+
+		list  = oobs_nfs_config_get_shares (OOBS_NFS_CONFIG (shares_tool->nfs_config));
+		add_shares (list);
+
+		list = oobs_smb_config_get_shares (OOBS_SMB_CONFIG (shares_tool->smb_config));
+		add_shares (list);
+
+		update_global_smb_config (tool, OOBS_SMB_CONFIG (shares_tool->smb_config));
+		gtk_widget_set_sensitive (dialog_notebook, TRUE);
+	} else {
+		/* disable the tool UI, there's no way to add shares */
+		gtk_widget_set_sensitive (dialog_notebook, FALSE);
+	}
+
+	users_table_set_config (shares_tool);
+
+	if (shares_tool->path) {
+		gst_tool_authenticate (tool, GST_SHARES_TOOL (tool)->smb_config);
+		gst_tool_authenticate (tool, GST_SHARES_TOOL (tool)->nfs_config);
+		share_settings_dialog_run (shares_tool->path, TRUE);
+	}
+}
+
+static void
+gst_shares_tool_update_config (GstTool *tool)
+{
+	GstSharesTool *shares_tool;
+
+	shares_tool = GST_SHARES_TOOL (tool);
+	gst_shares_tool_update_services_availability (shares_tool);
+}
+
+static void
+gst_shares_tool_update_services_availability (GstSharesTool *tool)
+{
+	OobsList *services;
+	OobsListIter iter;
+	GObject *service;
+	gboolean valid;
+	GstServiceRole role;
+
+	services = oobs_services_config_get_services (OOBS_SERVICES_CONFIG (tool->services_config));
+	valid = oobs_list_get_iter_first (services, &iter);
+
+	while (valid) {
+		service = oobs_list_get (services, &iter);
+		role = gst_service_get_role (OOBS_SERVICE (service));
+
+		if (role == GST_ROLE_FILE_SERVER_SMB)
+			tool->smb_available = TRUE;
+		else if (role == GST_ROLE_FILE_SERVER_NFS)
+			tool->nfs_available = TRUE;
+
+		g_object_unref (service);
+		valid = oobs_list_iter_next (services, &iter);
+	}
+}
+
+GstSharesTool*
+gst_shares_tool_new (void)
+{
+	return g_object_new (GST_TYPE_SHARES_TOOL,
+			     "name", "shares",
+			     "title", _("Shared Folders"),
+			     "icon", "folder-remote",
+			     NULL);
+}
diff -pruN 3.0.0-2/.pc/91_shares_services_detection.patch/src/shares/shares-tool.h 3.0.0-2ubuntu1/.pc/91_shares_services_detection.patch/src/shares/shares-tool.h
--- 3.0.0-2/.pc/91_shares_services_detection.patch/src/shares/shares-tool.h	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/91_shares_services_detection.patch/src/shares/shares-tool.h	2010-10-06 09:54:17.000000000 +0000
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>.
+ */
+
+#ifndef __GST_SHARES_TOOL__
+#define __GST_SHARES_TOOL__
+
+G_BEGIN_DECLS
+
+#include <glib.h>
+#include "gst-tool.h"
+#include <oobs/oobs.h>
+
+#define GST_TYPE_SHARES_TOOL         (gst_shares_tool_get_type())
+#define GST_SHARES_TOOL(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GST_TYPE_SHARES_TOOL, GstSharesTool))
+#define GST_SHARES_TOOL_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST ((c),    GST_TYPE_SHARES_TOOL, GstSharesToolClass))
+#define GST_IS_SHARES_TOOL(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GST_TYPE_SHARES_TOOL))
+#define GST_IS_SHARES_TOOL_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE ((c),    GST_TYPE_SHARES_TOOL))
+#define GST_SHARES_TOOL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),  GST_TYPE_SHARES_TOOL, GstSharesToolClass))
+
+typedef struct _GstSharesTool      GstSharesTool;
+typedef struct _GstSharesToolClass GstSharesToolClass;
+	
+struct _GstSharesTool {
+	GstTool parent;
+
+	OobsObject *nfs_config;
+	OobsObject *smb_config;
+
+	/* read only */
+	OobsObject *services_config;
+	OobsObject *hosts_config;
+	OobsObject *users_config;
+
+	gchar *path;
+
+	guint smb_available : 1;
+	guint nfs_available : 1;
+};
+
+struct _GstSharesToolClass {
+	GstToolClass parent_class;
+};
+
+GstSharesTool *gst_shares_tool_new (void);
+
+
+G_END_DECLS
+
+#endif /* __GST_SHARES_TOOL__ */
diff -pruN 3.0.0-2/.pc/95_timezone_point_selection.patch/src/time/tz-map.c 3.0.0-2ubuntu1/.pc/95_timezone_point_selection.patch/src/time/tz-map.c
--- 3.0.0-2/.pc/95_timezone_point_selection.patch/src/time/tz-map.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/95_timezone_point_selection.patch/src/time/tz-map.c	2010-10-06 09:54:53.000000000 +0000
@@ -0,0 +1,432 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Timezone map - fake widget implementation with hooks for time-admin.
+ *
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ *
+ * Authors: Hans Petter Jansson <hpj@ximian.com>
+ * 
+ * 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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include <math.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+#include "gst.h"
+#include "time-tool.h"
+
+#include "tz.h"
+#include "e-map/e-map.h"
+#include "tz-map.h"
+
+
+extern GstTimeTool *tool;
+
+
+/* --- Forward declarations of internal functions --- */
+
+
+static TzLocation *e_tz_map_location_from_point (ETzMap *tzmap, EMapPoint *point);
+static gboolean flash_selected_point (gpointer data);
+static gboolean motion (GtkWidget *widget, GdkEventMotion *event, gpointer data);
+static gboolean button_pressed (GtkWidget *w, GdkEventButton *event, gpointer data);
+static gboolean update_map (GtkWidget *w, gpointer data);
+static gboolean in_map (GtkWidget *w, GdkEventCrossing *event, gpointer data);
+static gboolean out_map (GtkWidget *w,GdkEventCrossing *event, gpointer data);
+static gboolean map (GtkWidget *widget, GdkEvent *event, gpointer data);
+static gboolean unmap (GtkWidget *widget, GdkEvent *event, gpointer data);
+
+ETzMap *
+e_tz_map_new (GstTool *tool)
+{
+	ETzMap *tzmap;
+	GPtrArray *locs;
+	TzLocation *tzl;
+	GtkWidget *location_combo;
+	guint i;
+
+	tzmap = g_new0 (ETzMap, 1);
+	tzmap->tool = GST_TOOL (tool);
+	tzmap->tzdb = tz_load_db ();
+	if (!tzmap->tzdb)
+		g_error ("Unable to load system timezone database.");
+	
+	tzmap->map = e_map_new ();
+	if (!tzmap->map)
+		g_error ("Unable to create map widget.");
+
+	gtk_widget_set_events (GTK_WIDGET (tzmap->map), gtk_widget_get_events (GTK_WIDGET (tzmap->map)) | 
+	      GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK);
+	
+	locs = tz_get_locations (tzmap->tzdb);
+
+	for (i = 0; i < locs->len; i++)
+	{
+		tzl = g_ptr_array_index (locs, i);
+		e_map_add_point (tzmap->map, NULL, tzl->longitude, tzl->latitude,
+				 TZ_MAP_POINT_NORMAL_RGBA);
+	}
+
+	g_signal_connect (G_OBJECT (tzmap->map), "map-event",
+			  G_CALLBACK (map), tzmap);
+	g_signal_connect (G_OBJECT (tzmap->map), "unmap-event",
+			  G_CALLBACK (unmap), tzmap);
+        g_signal_connect(G_OBJECT (tzmap->map), "motion-notify-event",
+			 G_CALLBACK (motion), (gpointer) tzmap);
+	g_signal_connect(G_OBJECT(tzmap->map), "button-press-event",
+			 G_CALLBACK (button_pressed), (gpointer) tzmap);
+        g_signal_connect(G_OBJECT (tzmap->map), "enter-notify-event",
+	                 G_CALLBACK (in_map), (gpointer) tzmap);
+        g_signal_connect(G_OBJECT (tzmap->map), "leave-notify-event",
+	                 G_CALLBACK (out_map), (gpointer) tzmap);
+	
+	location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
+	g_signal_connect (G_OBJECT (location_combo), "changed",
+	                 G_CALLBACK (update_map), (gpointer) tzmap);
+	
+	return tzmap;
+}
+
+static gboolean
+map (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+	ETzMap *tzmap = (ETzMap *) data;
+
+	if (!tzmap->timeout_id)
+		tzmap->timeout_id = g_timeout_add (100, flash_selected_point, (gpointer) tzmap);
+
+	return FALSE;
+}
+
+static gboolean
+unmap (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+	ETzMap *tzmap = (ETzMap *) data;
+
+	if (tzmap->timeout_id) {
+		g_source_remove (tzmap->timeout_id);
+		tzmap->timeout_id = 0;
+	}
+
+	return FALSE;
+}
+
+TzDB *
+e_tz_map_get_tz_db (ETzMap *tzmap)
+{
+	g_return_val_if_fail (tzmap != NULL, NULL);
+	return tzmap->tzdb;
+}
+
+TzLocation *
+e_tz_map_get_location_by_name (ETzMap *tzmap, const gchar *name)
+{
+	TzLocation *tz_loc = NULL;
+	TzDB *tz_db;
+	GPtrArray *locs;
+	guint i;
+
+	tz_db = e_tz_map_get_tz_db (tzmap);
+	locs = tz_get_locations (tz_db);
+
+	for (i = 0; i < locs->len; i++)
+	{
+		TzLocation *tz_loc_temp;
+
+		tz_loc_temp = g_ptr_array_index (locs, i);
+
+		if (!strcmp (tz_location_get_zone (tz_loc_temp), name))
+		{
+			tz_loc = tz_loc_temp;
+			break;
+		}
+	}
+
+	return tz_loc;
+}
+
+static void
+e_tz_map_set_location_text (ETzMap *tzmap, const gchar *name)
+{
+	GtkWidget    *location_combo;
+	GtkTreeModel *model;
+	GtkTreeIter   iter;
+	gboolean      valid;
+	gchar        *location;
+
+	location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (location_combo));
+	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+
+	while (valid) {
+		gtk_tree_model_get (model, &iter, 0, &location, -1);
+
+		if (strcmp (location, name) == 0) {
+			gtk_combo_box_set_active_iter (GTK_COMBO_BOX (location_combo), &iter);
+			valid = FALSE;
+		} else {
+			valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter);
+		}
+
+		g_free (location);
+	}
+}
+
+void
+e_tz_map_set_tz_from_name (ETzMap *tzmap, const gchar *name)
+{
+	TzLocation *tz_loc = NULL;
+	TzDB *tz_db;
+	GPtrArray *locs;
+	double l_longitude = 0.0, l_latitude = 0.0;
+	guint i;
+
+	g_return_if_fail (tzmap != NULL);
+
+	tz_db = e_tz_map_get_tz_db (tzmap);
+	locs = tz_get_locations (tz_db);
+
+	if (name) {
+		for (i = 0; i < locs->len; i++)	{
+			tz_loc = g_ptr_array_index (locs, i);
+
+			if (!strcmp(tz_location_get_zone(tz_loc), name)) {
+				tz_location_get_position (tz_loc, &l_longitude, &l_latitude);
+				break;
+			}
+		}
+	}
+
+	if (tzmap->point_selected)
+	        e_map_point_set_color_rgba (tzmap->map,
+					    tzmap->point_selected,
+					    TZ_MAP_POINT_NORMAL_RGBA);
+	tzmap->point_selected =
+		e_map_get_closest_point (tzmap->map, l_longitude, l_latitude, FALSE);
+	
+	e_tz_map_set_location_text (tzmap, tz_location_get_zone (e_tz_map_location_from_point (tzmap, tzmap->point_selected)));
+}
+
+static gboolean
+update_map (GtkWidget *w, gpointer data)
+{
+	ETzMap       *tzmap;
+	GtkTreeModel *model;
+	GtkTreeIter   iter;
+	gchar        *location;
+   
+	tzmap = (ETzMap *) data;
+
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (w), &iter)) {
+		model = gtk_combo_box_get_model (GTK_COMBO_BOX (w));
+		gtk_tree_model_get (model, &iter, 0, &location, -1);
+		e_tz_map_set_tz_from_name (tzmap, location);
+	}
+
+	return TRUE;
+}
+                                 
+gchar *
+e_tz_map_get_selected_tz_name (ETzMap *tzmap)
+{
+	GtkWidget    *location_combo;
+	GtkTreeModel *model;
+	GtkTreeIter   iter;
+	gchar        *location = NULL;
+
+	location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
+
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (location_combo), &iter)) {
+		model = gtk_combo_box_get_model (GTK_COMBO_BOX (location_combo));
+		gtk_tree_model_get (model, &iter, 0, &location, -1);
+	}
+
+	return location;
+}
+
+
+static TzLocation *
+e_tz_map_location_from_point (ETzMap *tzmap, EMapPoint *point)
+{
+	TzLocation *tz_loc = NULL;
+	TzDB *tz_db;
+	GPtrArray *locs;
+	double p_longitude, p_latitude;
+	double l_longitude, l_latitude;
+	guint i;
+
+	tz_db = e_tz_map_get_tz_db (tzmap);
+	locs = tz_get_locations (tz_db);
+	e_map_point_get_location (point, &p_longitude, &p_latitude);
+
+	for (i = 0; i < locs->len; i++)
+	{
+		tz_location_get_position (g_ptr_array_index (locs, i),
+					  &l_longitude, &l_latitude);
+		
+		if (l_longitude - 0.005 <= p_longitude &&
+		    l_longitude + 0.005 >= p_longitude &&
+		    l_latitude - 0.005 <= p_latitude &&
+		    l_latitude + 0.005 >= p_latitude)
+		{
+			tz_loc = g_ptr_array_index (locs, i);
+			break;
+		}
+	}
+
+	return (tz_loc);
+}
+
+
+static gboolean
+flash_selected_point (gpointer data)
+{
+	ETzMap *tzmap;
+
+	tzmap = (ETzMap *) data;
+	if (!tzmap->point_selected) return TRUE;
+
+        if (e_map_point_get_color_rgba (tzmap->point_selected) ==
+	    TZ_MAP_POINT_SELECTED_1_RGBA)
+	        e_map_point_set_color_rgba (tzmap->map, tzmap->point_selected,
+					    TZ_MAP_POINT_SELECTED_2_RGBA);
+	else
+	        e_map_point_set_color_rgba (tzmap->map, tzmap->point_selected,
+					    TZ_MAP_POINT_SELECTED_1_RGBA);
+
+	return TRUE;
+}
+
+static void
+update_hover_point (ETzMap  *tzmap,
+		    gdouble  x_coord,
+		    gdouble  y_coord)
+{
+	double longitude, latitude;
+
+	e_map_window_to_world (tzmap->map, x_coord, y_coord,
+			       &longitude, &latitude);
+
+	if (tzmap->point_hover && tzmap->point_hover != tzmap->point_selected)
+	        e_map_point_set_color_rgba (tzmap->map, tzmap->point_hover,
+					    TZ_MAP_POINT_NORMAL_RGBA);
+
+	tzmap->point_hover =
+	  e_map_get_closest_point (tzmap->map, longitude, latitude, TRUE);
+
+	if (tzmap->point_hover != tzmap->point_selected)
+	        e_map_point_set_color_rgba (tzmap->map, tzmap->point_hover,
+					    TZ_MAP_POINT_HOVER_RGBA);
+
+	/* e_tz_map_location_from_point() can in theory return NULL, but in
+	 * practice there are no reasons why it should */
+
+	gtk_label_set_text (GTK_LABEL (((GstTimeTool *) tzmap->tool)->map_hover_label),
+			    tz_location_get_zone (e_tz_map_location_from_point (tzmap, tzmap->point_hover)));
+}
+
+static gboolean
+motion (GtkWidget *widget, GdkEventMotion *event, gpointer data)
+{
+	ETzMap *tzmap;
+	gdouble x_coord, y_coord;
+
+	tzmap = (ETzMap *) data;
+
+	gdk_event_get_coords ((GdkEvent *) event, &x_coord, &y_coord);
+	update_hover_point (tzmap, x_coord, y_coord);
+	return TRUE;
+}
+
+static gboolean
+in_map (GtkWidget *w, GdkEventCrossing *event, gpointer data)
+{
+	ETzMap *tzmap;
+	gdouble x_coord, y_coord;
+
+	tzmap = (ETzMap *) data;
+
+	gdk_event_get_coords ((GdkEvent *) event, &x_coord, &y_coord);
+	update_hover_point (tzmap, x_coord, y_coord);
+	return TRUE;
+}
+
+static gboolean
+out_map (GtkWidget *w, GdkEventCrossing *event, gpointer data)
+{
+	ETzMap *tzmap;
+	const char *old_zone;
+   
+	tzmap = (ETzMap *) data;
+
+	if (event->mode != GDK_CROSSING_NORMAL)
+		return FALSE;
+   
+	if (tzmap->point_hover && tzmap->point_hover != tzmap->point_selected)
+		e_map_point_set_color_rgba (tzmap->map, tzmap->point_hover, TZ_MAP_POINT_NORMAL_RGBA);
+
+	tzmap->point_hover = NULL;
+   
+	old_zone = gtk_label_get_text (GTK_LABEL (((GstTimeTool *) tzmap->tool)->map_hover_label));
+	if (strcmp (old_zone, ""))
+		gtk_label_set_text (GTK_LABEL (((GstTimeTool *) tzmap->tool)->map_hover_label), "");
+   
+	return TRUE;
+}
+   
+static gboolean
+button_pressed (GtkWidget *w, GdkEventButton *event, gpointer data)
+{
+	ETzMap *tzmap;
+	double longitude, latitude;
+	
+	tzmap = (ETzMap *) data;
+
+	e_map_window_to_world (tzmap->map, (double) event->x, (double) event->y,
+			       &longitude, &latitude);
+	
+	if (event->button != 1)
+	        e_map_zoom_out (tzmap->map);
+	else
+	{
+		GtkWidget  *location_combo;
+		TzLocation *tz_location;
+		gchar      *entry_text, *entry_text_new;
+
+		if (e_map_get_magnification (tzmap->map) <= 1.0)
+		        e_map_zoom_to_location (tzmap->map, longitude, latitude);
+
+		if (tzmap->point_selected)
+		        e_map_point_set_color_rgba (tzmap->map,
+						    tzmap->point_selected,
+						    TZ_MAP_POINT_NORMAL_RGBA);
+		tzmap->point_selected = tzmap->point_hover;
+
+		location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
+		tz_location    = e_tz_map_location_from_point (tzmap, tzmap->point_selected);
+
+		entry_text     = e_tz_map_get_selected_tz_name (tzmap);
+		entry_text_new = tz_location_get_zone (tz_location);
+
+		if (!entry_text || !entry_text_new || strcmp (entry_text, entry_text_new))
+			e_tz_map_set_location_text (tzmap, entry_text_new);
+	}
+
+	return TRUE;
+}
diff -pruN 3.0.0-2/.pc/96_ubuntu_ntp_pool.patch/src/time/ntp-servers-list.c 3.0.0-2ubuntu1/.pc/96_ubuntu_ntp_pool.patch/src/time/ntp-servers-list.c
--- 3.0.0-2/.pc/96_ubuntu_ntp_pool.patch/src/time/ntp-servers-list.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/96_ubuntu_ntp_pool.patch/src/time/ntp-servers-list.c	2010-12-12 12:16:01.000000000 +0000
@@ -0,0 +1,295 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * Copyright (C) 2005 Carlos Garnacho.
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>
+ */
+
+#include <string.h>
+#include "ntp-servers-list.h"
+#include "time-tool.h"
+#include "gst.h"
+
+enum {
+	COL_ACTIVE,
+	COL_DESC,
+	COL_URL,
+	COL_ITER,
+	COL_LAST
+};
+
+struct NtpServer {
+	const gchar *url;
+	const gchar *location;
+} ntp_servers [] = {
+	{ "time.nrc.ca", "Canada" },
+	{ "ntp1.cmc.ec.gc.ca", "Eastern Canada" },
+	{ "ntp2.cmc.ec.gc.ca", "Eastern Canada" },
+	{ "wuarchive.wustl.edu", "Missouri, USA" },
+	{ "clock.psu.edu", "Pennsylvania, USA" },
+	{ "ntp.tmc.edu", "Texas, USA" },
+	{ "louie.udel.edu", "Delaware, USA" },
+	{ "ntp0.cornell.edu", "New York, USA" },
+	{ "ntp-0.cso.uiuc.edu", "Illinois, USA" },
+	{ "ntp1.cs.wisc.edu", "Wisconsin, USA" },
+	{ "tick.cs.unlv.edu", "Las Vegas, USA" },
+	{ "ntp2a.mcc.ac.uk", "England, Europe" },
+	{ "ntp2b.mcc.ac.uk", "England, Europe" },
+	{ "ntp.maths.tcd.ie", "Ireland, Europe" },
+	{ "ntp.cs.strath.ac.uk", "Scotland, Europe" },
+	{ "ntp.univ-lyon1.fr", "France, Europe" },
+	{ "tick.keso.fi", "Finland, Europe" },
+	{ "fartein.ifi.uio.no", "Norway, Europe" },
+	{ "ntp.adelaide.edu.au", "South Australia" },
+	{ "time.nuri.net", "Korea, Asia" },
+	{ "ntp.cs.mu.oz.au", "Melbourne, Australia" },
+	{ "swisstime.ethz.ch", "Zurich, Switzerland" },
+	{ "stdtime.gov.hk", "Hong Kong, China" },
+	{ "ntp.jst.mfeed.ad.jp", "Japan" },
+	{ "time.service.uit.no", "Norway" },
+	{ NULL }
+};
+
+static void
+populate_model (GtkListStore *store)
+{
+	GtkTreeIter iter;
+	gchar *str;
+	gint i;
+
+	for (i = 0; ntp_servers[i].url; i++) {
+		str = g_strdup_printf ("%s (%s)", ntp_servers[i].url, ntp_servers[i].location);
+
+		gtk_list_store_append (store, &iter);
+		gtk_list_store_set (store, &iter,
+				    COL_ACTIVE, FALSE,
+				    COL_DESC, str,
+				    COL_URL, ntp_servers[i].url,
+				    COL_ITER, NULL,
+				    -1);
+		g_free (str);
+	}
+}
+
+static GtkTreeModel*
+create_model (void)
+{
+	GtkListStore *store;
+
+	store = gtk_list_store_new (COL_LAST,
+				    G_TYPE_BOOLEAN,
+				    G_TYPE_STRING,
+				    G_TYPE_STRING,
+				    OOBS_TYPE_LIST_ITER);
+	return GTK_TREE_MODEL (store);
+}
+
+static void
+toggle_ntp_server (GstTimeTool  *tool,
+		   GtkListStore *store,
+		   GtkTreeIter   iter)
+{
+	OobsListIter *list_iter;
+	gboolean active;
+	OobsList *list;
+	gchar *url;
+
+	list = oobs_ntp_config_get_servers (OOBS_NTP_CONFIG (tool->ntp_config));
+
+	gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+			    COL_ACTIVE, &active,
+			    COL_URL, &url,
+			    COL_ITER, &list_iter,
+			    -1);
+	active ^= 1;
+
+	if ((active && list_iter ) ||
+	    (!active && !list_iter))
+		return;
+
+	if (active) {
+		GObject *server;
+		OobsListIter new_list_iter;
+
+		server = (GObject*) oobs_ntp_server_new (url);
+		oobs_list_append (list, &new_list_iter);
+		oobs_list_set (list, &new_list_iter, server);
+		g_object_unref (server);
+
+		gtk_list_store_set (store, &iter,
+				    COL_ACTIVE, active,
+				    COL_ITER, &new_list_iter,
+				    -1);
+	} else {
+		oobs_list_remove (list, list_iter);
+		gtk_list_store_set (store, &iter,
+				    COL_ACTIVE, active,
+				    COL_ITER, NULL,
+				    -1);
+	}
+
+	oobs_object_commit_async (tool->ntp_config, NULL, NULL);
+	oobs_list_iter_free (list_iter);
+	g_free (url);
+}
+
+static void
+on_server_toggled (GtkCellRendererToggle *renderer,
+		   gchar		  *path_str,
+		   gpointer		   data)
+{
+	GtkListStore *store = (GtkListStore *) data;
+	GtkTreePath *path  = gtk_tree_path_new_from_string (path_str);
+	GstTimeTool *tool;
+	GtkTreeIter iter;
+
+	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) {
+		g_critical ("could not get list iter");
+		return;
+	}
+
+	tool = g_object_get_data (G_OBJECT (renderer), "tool");
+	toggle_ntp_server (tool, store, iter);
+	gtk_tree_path_free (path);
+}
+
+static void
+add_columns (GtkTreeView  *list,
+	     GtkTreeModel *model,
+	     GstTimeTool  *tool)
+{
+	GtkCellRenderer *renderer;
+	GtkTreeViewColumn *column;
+
+	column = gtk_tree_view_column_new ();
+
+	renderer = gtk_cell_renderer_toggle_new ();
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_add_attribute (column, renderer, "active", COL_ACTIVE);
+
+	g_object_set_data (G_OBJECT (renderer), "tool", tool);
+	g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (on_server_toggled), model);
+	
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_column_pack_end (column, renderer, TRUE);
+	gtk_tree_view_column_add_attribute (column, renderer, "text", COL_DESC);
+
+	gtk_tree_view_append_column (list, column);
+}
+
+GtkWidget*
+ntp_servers_list_get (GstTimeTool *tool)
+{
+	GtkWidget *list;
+	GtkTreeModel *model;
+
+	list = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "ntp_list");
+	model = create_model ();
+	populate_model (GTK_LIST_STORE (model));
+
+	add_columns (GTK_TREE_VIEW (list), model, tool);
+
+	gtk_tree_view_set_model (GTK_TREE_VIEW (list), model);
+	g_object_unref (model);
+
+	return list;
+}
+
+void
+ntp_servers_list_check (GtkWidget     *ntp_list,
+			OobsListIter  *list_iter,
+			OobsNTPServer *server)
+{
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	gboolean valid, found;
+	const gchar *address;
+	gchar *str;
+
+	address = oobs_ntp_server_get_hostname (server);
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW (ntp_list));
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+	found = FALSE;
+
+	while (valid && !found) {
+		gtk_tree_model_get (model, &iter,
+				    COL_URL, &str,
+				    -1);
+
+		if (strcmp (address, str) == 0) {
+			gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+					    COL_ACTIVE, TRUE,
+					    COL_ITER, list_iter,
+					    -1);
+			found = TRUE;
+		}
+
+		g_free (str);
+		valid = gtk_tree_model_iter_next (model, &iter);
+	}
+
+	if (!found) {
+		/* append the new server */
+		gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+				    COL_ACTIVE, TRUE,
+				    COL_DESC, address,
+				    COL_URL, address,
+				    COL_ITER, list_iter,
+				    -1);
+	}
+}
+
+void
+on_ntp_addserver (GtkWidget *widget, GstDialog *dialog)
+{
+	GtkEditable *ntp_entry;
+	GtkTreeView *ntp_list;
+	GtkListStore *store;
+	GtkTreeIter iter;
+	gchar *text;
+	
+	ntp_entry = GTK_EDITABLE (gst_dialog_get_widget (dialog, "ntp_entry"));
+	ntp_list = GTK_TREE_VIEW (gst_dialog_get_widget (dialog, "ntp_list"));
+        store = GTK_LIST_STORE (gtk_tree_view_get_model (ntp_list));
+	
+	text = gtk_editable_get_chars (ntp_entry, 0, -1);
+	g_strstrip (text);
+	
+	if (strchr (text, ' ')) {
+		gtk_widget_grab_focus (GTK_WIDGET (ntp_entry));
+		gtk_editable_select_region (ntp_entry, 0, -1);
+
+		g_free (text);
+		return;
+	}
+
+	if (text && *text) {
+		gtk_editable_delete_text (ntp_entry, 0, -1);
+		gtk_widget_grab_focus (GTK_WIDGET (ntp_entry));
+	
+		gtk_list_store_append (store, &iter);
+		gtk_list_store_set (store, &iter,
+				    COL_ACTIVE, FALSE,
+				    COL_DESC, text,
+				    COL_URL, text,
+				    COL_ITER, NULL,
+				    -1);
+		toggle_ntp_server (GST_TIME_TOOL (gst_dialog_get_tool (dialog)), store, iter);
+		g_free (text);
+	}
+}
diff -pruN 3.0.0-2/.pc/applied-patches 3.0.0-2ubuntu1/.pc/applied-patches
--- 3.0.0-2/.pc/applied-patches	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/applied-patches	2011-12-17 00:52:19.000000000 +0000
@@ -1,5 +1,15 @@
 01_wait_for_backends.patch
 10_disable_interfaces.patch
 11_dont_show_shares.patch
+25_sambashare_group_definition.patch
+26_user_profiles_conf.patch
 61_outdated_docs.patch
 62_no_gettext.patch
+80_gst-packages-common.patch
+81_gst-packages-shares-admin.patch
+82_gst-packages-time-admin.patch
+91_shares_services_detection.patch
+95_timezone_point_selection.patch
+96_ubuntu_ntp_pool.patch
+fix-missing-header-ftbfs-amd64.patch
+remove_g_thread_init.patch
diff -pruN 3.0.0-2/.pc/fix-missing-header-ftbfs-amd64.patch/src/network/connection.c 3.0.0-2ubuntu1/.pc/fix-missing-header-ftbfs-amd64.patch/src/network/connection.c
--- 3.0.0-2/.pc/fix-missing-header-ftbfs-amd64.patch/src/network/connection.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/fix-missing-header-ftbfs-amd64.patch/src/network/connection.c	2010-12-12 17:24:40.000000000 +0000
@@ -0,0 +1,927 @@
+/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
+/* Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
+ */
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "gst.h"
+#include "network-tool.h"
+#include "connection.h"
+#include "essid-list.h"
+#include "nm-integration.h"
+#include "callbacks.h"
+
+extern GstTool *tool;
+
+typedef struct
+{
+  const gchar *method;
+  const gchar *desc;
+} Description;
+
+static const Description method_descriptions [] = {
+  { "dhcp",   N_("Automatic configuration (DHCP)") },
+  { "ipv4ll", N_("Local Zeroconf network (IPv4 LL)") },
+  { "static", N_("Static IP address") },
+};
+
+static const Description key_type_descriptions [] = {
+  { "wep-ascii", N_("WEP key (ascii)") },
+  { "wep-hex", N_("WEP key (hexadecimal)") },
+  { "wpa-psk", N_("WPA Personal") },
+  { "wpa2-psk", N_("WPA2 Personal") },
+};
+
+static const Description ppp_type_descriptions [] = {
+  { "gprs", N_("GPRS/UMTS") },
+  { "isdn", N_("ISDN modem") },
+  { "modem", N_("Serial modem") },
+  { "pppoe", N_("PPPoE") }
+};
+
+/* helper for getting whether the string or null if it's empty */
+static gchar*
+get_entry_text (GtkWidget *entry)
+{
+  gchar *str;
+
+  str = (gchar *) gtk_entry_get_text (GTK_ENTRY (entry));
+  return (!str || !*str) ? NULL : str;
+}
+
+void
+connection_combo_set_value (GtkComboBox *combo,
+			    const gchar *method)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gboolean valid;
+  gchar *elem_method;
+
+  g_return_if_fail (method != NULL);
+
+  model = gtk_combo_box_get_model (combo);
+  valid = gtk_tree_model_get_iter_first (model, &iter);
+
+  while (valid)
+    {
+      gtk_tree_model_get (model, &iter, 1, &elem_method, -1);
+
+      if (strcmp (elem_method, method) == 0)
+	{
+	  gtk_combo_box_set_active_iter (combo, &iter);
+	  valid = FALSE;
+	}
+      else
+	valid = gtk_tree_model_iter_next (model, &iter);
+
+      g_free (elem_method);
+    }
+}
+
+gchar *
+connection_combo_get_value (GtkComboBox *combo)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gchar *ret = NULL;
+
+  if (gtk_combo_box_get_active_iter (combo, &iter))
+    {
+      model = gtk_combo_box_get_model (combo);
+      gtk_tree_model_get (model, &iter, 1, &ret, -1);
+    }
+
+  return ret;
+}
+
+static void
+connection_essids_combo_init (GtkComboBox *combo)
+{
+  GtkTreeModel *model;
+  GtkCellRenderer *renderer;
+
+  model = GTK_TREE_MODEL (gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT));
+  gtk_combo_box_set_model (GTK_COMBO_BOX (combo), model);
+  g_object_unref (model);
+
+  /* add "crypted" renderer */
+  renderer = gtk_cell_renderer_pixbuf_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
+			      renderer, FALSE);
+  gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo),
+				 renderer, "pixbuf", 0);
+  gtk_cell_layout_reorder (GTK_CELL_LAYOUT (combo), renderer, 0);
+
+  /* add "quality" renderer */
+  renderer = gtk_cell_renderer_progress_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
+			      renderer, FALSE);
+  gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo),
+				 renderer, "value", 2);
+
+  /* reuse text cell renderer for the essid */
+  gtk_combo_box_set_entry_text_column (combo, 1);
+
+  g_signal_connect (G_OBJECT (combo), "changed",
+                    G_CALLBACK (on_dialog_changed), tool);
+}
+
+static void
+pppoe_combo_cell_func (GtkCellLayout   *layout,
+		       GtkCellRenderer *renderer,
+		       GtkTreeModel    *model,
+		       GtkTreeIter     *iter,
+		       gpointer         user_data)
+{
+  OobsIface *iface;
+
+  gtk_tree_model_get (model, iter, 0, &iface, -1);
+  g_object_set (renderer, "text", oobs_iface_get_device_name (iface), NULL);
+  g_object_unref (iface);
+}
+
+static void
+connection_pppoe_combo_init (GtkComboBox *combo)
+{
+  GtkCellRenderer *renderer;
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
+
+  gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo), renderer,
+				      pppoe_combo_cell_func, NULL, NULL);
+}
+
+static void
+connection_pppoe_combo_set_interface (GtkComboBox       *combo,
+				      OobsIfaceEthernet *ethernet)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gboolean valid;
+  OobsIfaceEthernet *iface;
+
+  model = gtk_combo_box_get_model (combo);
+  valid = gtk_tree_model_get_iter_first (model, &iter);
+
+  while (valid)
+    {
+      gtk_tree_model_get (model, &iter, 0, &iface, -1);
+
+      if (ethernet == iface)
+	{
+	  gtk_combo_box_set_active_iter (combo, &iter);
+	  return;
+	}
+
+      valid = gtk_tree_model_iter_next (model, &iter);
+    }
+
+  gtk_combo_box_set_active (combo, -1);
+}
+
+static void
+ethernet_dialog_prepare (GstConnectionDialog *dialog)
+{
+  gchar *address, *netmask, *gateway, *config_method;
+
+  g_object_get (G_OBJECT (dialog->iface),
+		"ip-address", &address,
+		"ip-mask", &netmask,
+		"gateway-address", &gateway,
+		"config-method", &config_method,
+		NULL);
+
+  connection_combo_set_value (GTK_COMBO_BOX (dialog->bootproto_combo), config_method);
+  gtk_entry_set_text (GTK_ENTRY (dialog->address), (address) ? address : "");
+  gtk_entry_set_text (GTK_ENTRY (dialog->netmask), (netmask) ? netmask : "");
+  gtk_entry_set_text (GTK_ENTRY (dialog->gateway), (gateway) ? gateway : "");
+
+  g_free (config_method);
+  g_free (address);
+  g_free (netmask);
+  g_free (gateway);
+}
+
+static void
+ethernet_dialog_save (GstConnectionDialog *dialog, gboolean active)
+{
+  gchar *config_method = connection_combo_get_value (GTK_COMBO_BOX (dialog->bootproto_combo));
+
+  g_object_set (G_OBJECT (dialog->iface),
+		"ip-address",   get_entry_text (dialog->address),
+		"ip-mask",   get_entry_text (dialog->netmask),
+		"gateway-address",   get_entry_text (dialog->gateway),
+		"config-method", config_method,
+		NULL);
+
+  g_free (config_method);
+}
+
+static gboolean
+ethernet_dialog_check_fields (GstConnectionDialog *dialog)
+{
+  gchar *address, *netmask, *gateway, *config_method;
+  gboolean active, ret;
+
+  address = get_entry_text (dialog->address);
+  netmask = get_entry_text (dialog->netmask);
+  gateway = get_entry_text (dialog->gateway);
+  config_method = connection_combo_get_value (GTK_COMBO_BOX (dialog->bootproto_combo));
+
+  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->connection_configured));
+
+  ret = (!active ||
+	 config_method && strcmp (config_method, "static") != 0 ||
+	 (gst_filter_check_ip_address (address) == GST_ADDRESS_IPV4 &&
+	  gst_filter_check_ip_address (netmask) == GST_ADDRESS_IPV4 &&
+	  (!gateway || gst_filter_check_ip_address (gateway) == GST_ADDRESS_IPV4)));
+
+  g_free (config_method);
+  return ret;
+}
+
+#ifdef HAVE_LIBIW_H
+/* perhaps there should be a GstEssidListModel class to hide this
+ * stuff, but I'll leave that as a code beautification exercise */
+static void
+on_essid_list_changed (GstEssidList        *list,
+		       GstConnectionDialog *dialog)
+{
+  GList *elem;
+  GstEssidListEntry *entry;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GdkPixbuf *locked, *unlocked, *pixbuf;
+
+  elem = gst_essid_list_get_list (dialog->essid_list);
+  model = gtk_combo_box_get_model (GTK_COMBO_BOX (dialog->essid));
+  gtk_list_store_clear (GTK_LIST_STORE (model));
+
+  locked = gtk_icon_theme_load_icon (tool->icon_theme, "gnome-dev-wavelan-encrypted", 16, 0, NULL);
+  unlocked = gtk_icon_theme_load_icon (tool->icon_theme, "gnome-dev-wavelan", 16, 0, NULL);
+
+  while (elem)
+    {
+      entry = elem->data;
+      pixbuf = (entry->encrypted) ? locked : unlocked;
+
+      gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			  0, pixbuf,
+			  1, entry->essid,
+			  2, (gint) (entry->quality * 100),
+			  -1);
+      elem = elem->next;
+    }
+
+  if (locked)
+    g_object_unref (locked);
+
+  if (unlocked)
+    g_object_unref (unlocked);
+}
+#endif
+
+static void
+wireless_dialog_prepare (GstConnectionDialog *dialog)
+{
+  gchar *essid, *key, *dev, *key_type;
+
+  g_object_get (G_OBJECT (dialog->iface),
+		"device", &dev,
+		"essid", &essid,
+		"key", &key,
+		"key-type", &key_type,
+		NULL);
+
+  connection_combo_set_value (GTK_COMBO_BOX (dialog->key_type_combo), key_type);
+  gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (dialog->essid))), (essid) ? essid : "");
+  gtk_entry_set_text (GTK_ENTRY (dialog->wep_key), (key) ? key : "");
+
+#ifdef HAVE_LIBIW_H
+  dialog->essid_list = gst_essid_list_new (dev);
+  on_essid_list_changed (dialog->essid_list, dialog);
+  g_signal_connect (G_OBJECT (dialog->essid_list), "changed",
+		    G_CALLBACK (on_essid_list_changed), dialog);
+#endif
+
+  g_free (key_type);
+  g_free (essid);
+  g_free (key);
+  g_free (dev);
+}
+
+static void
+wireless_dialog_save (GstConnectionDialog *dialog)
+{
+  gchar *key_type;
+
+  key_type = connection_combo_get_value (GTK_COMBO_BOX (dialog->key_type_combo));
+  g_object_set (G_OBJECT (dialog->iface),
+		"essid",   get_entry_text (gtk_bin_get_child (GTK_BIN (dialog->essid))),
+		"key", get_entry_text (dialog->wep_key),
+		"key-type", key_type,
+		NULL);
+  g_free (key_type);
+}
+
+static gboolean
+wireless_dialog_check_fields (GstConnectionDialog *dialog)
+{
+  return (get_entry_text (gtk_bin_get_child (GTK_BIN (dialog->essid))) != NULL);
+}
+
+static void
+plip_dialog_prepare (GstConnectionDialog *dialog)
+{
+  gchar *local_address, *remote_address;
+
+  g_object_get (G_OBJECT (dialog->iface),
+		"address",  &local_address,
+		"remote-address", &remote_address,
+		NULL);
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->local_address),
+		      (local_address) ? local_address : "");
+  gtk_entry_set_text (GTK_ENTRY (dialog->remote_address),
+		      (remote_address) ? remote_address : "");
+
+  g_free (local_address);
+  g_free (remote_address);
+}
+
+static void
+plip_dialog_save (GstConnectionDialog *dialog)
+{
+  g_object_set (G_OBJECT (dialog->iface),
+		"address",  get_entry_text (dialog->local_address),
+		"remote-address", get_entry_text (dialog->remote_address),
+		NULL);
+}
+
+static gboolean
+plip_dialog_check_fields (GstConnectionDialog *dialog)
+{
+  gchar *local_address, *remote_address;
+
+  local_address  = get_entry_text (dialog->local_address);
+  remote_address = get_entry_text (dialog->remote_address);
+
+  return ((!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->connection_configured))) ||
+	  ((gst_filter_check_ip_address (local_address) == GST_ADDRESS_IPV4) &&
+	   (gst_filter_check_ip_address (remote_address) == GST_ADDRESS_IPV4)));
+}
+
+static void
+ppp_dialog_prepare (GstConnectionDialog *dialog)
+{
+  gchar    *login, *password, *phone_number, *phone_prefix;
+  gchar    *serial_port, *connection_type, *apn;
+  gboolean  default_gw, peerdns, persist;
+  gint      volume, dial_type;
+  OobsIfaceEthernet *ethernet;
+
+  g_object_get (G_OBJECT (dialog->iface),
+		"connection-type", &connection_type,
+                "login", &login,
+                "password", &password,
+                "phone-number", &phone_number,
+                "phone-prefix", &phone_prefix,
+                "default-gateway", &default_gw,
+                "use-peer-dns", &peerdns,
+                "persistent", &persist,
+                "serial-port", &serial_port,
+                "volume", &volume,
+                "dial-type", &dial_type,
+		"apn", &apn,
+		"ethernet", &ethernet,
+                NULL);
+
+  connection_combo_set_value (GTK_COMBO_BOX (dialog->ppp_type_combo), connection_type);
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->login),
+                      (login) ? login : "");
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->password),
+                      (password) ? password : "");
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->phone_number),
+                      (phone_number) ? phone_number : "");
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->dial_prefix),
+                      (phone_prefix) ? phone_prefix : "");
+
+  gtk_entry_set_text (GTK_ENTRY (dialog->apn), (apn) ? apn : "");
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->default_gw), default_gw);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->peerdns), peerdns);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->persist), persist);
+
+  gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (dialog->serial_port))),
+                      (serial_port) ? serial_port : "");
+
+  gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->volume), volume);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->dial_type), dial_type);
+
+  connection_pppoe_combo_set_interface (GTK_COMBO_BOX (dialog->pppoe_interface_combo), ethernet);
+
+  if (ethernet)
+    g_object_unref (ethernet);
+
+  g_free (login);
+  g_free (password);
+  g_free (phone_number);
+  g_free (phone_prefix);
+  g_free (serial_port);
+  g_free (apn);
+}
+
+static void
+ppp_dialog_save (GstConnectionDialog *dialog)
+{
+  gchar *connection_type;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  OobsIfaceEthernet *ethernet = NULL;
+
+  connection_type = connection_combo_get_value (GTK_COMBO_BOX (dialog->ppp_type_combo));
+
+  model = gtk_combo_box_get_model (GTK_COMBO_BOX (dialog->pppoe_interface_combo));
+
+  if (gtk_tree_model_get_iter_first (model, &iter))
+    gtk_tree_model_get (model, &iter, 0, &ethernet, -1);
+
+  g_object_set (G_OBJECT (dialog->iface),
+		"connection-type", connection_type,
+                "login",        get_entry_text (dialog->login),
+                "password",     get_entry_text (dialog->password),
+                "phone-number", get_entry_text (dialog->phone_number),
+                "phone-prefix", get_entry_text (dialog->dial_prefix),
+                "default-gateway", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->default_gw)),
+                "use-peer-dns", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->peerdns)),
+                "persistent",   gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->persist)),
+                "serial-port",  get_entry_text (gtk_bin_get_child (GTK_BIN (dialog->serial_port))),
+                "volume",       gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->volume)),
+                "dial-type",    gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->dial_type)),
+		"apn",          get_entry_text (dialog->apn),
+		"ethernet",     ethernet,
+                NULL);
+
+  if (ethernet)
+    g_object_unref (ethernet);
+
+  g_free (connection_type);
+}
+
+static gboolean
+ppp_dialog_check_fields (GstConnectionDialog *dialog)
+{
+  gchar *connection_type;
+  gboolean valid = TRUE;
+
+  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->connection_configured)))
+    return TRUE;
+
+  connection_type = connection_combo_get_value (GTK_COMBO_BOX (dialog->ppp_type_combo));
+
+  if (!connection_type)
+    return FALSE;
+
+  if (strcmp (connection_type, "modem") == 0)
+    valid = (get_entry_text (dialog->login) &&
+	     get_entry_text (dialog->phone_number) &&
+	     get_entry_text (gtk_bin_get_child (GTK_BIN (dialog->serial_port))));
+  else if (strcmp (connection_type, "isdn") == 0)
+    valid = (get_entry_text (dialog->login) &&
+	     get_entry_text (dialog->phone_number));
+  else if (strcmp (connection_type, "pppoe") == 0)
+    valid = (get_entry_text (dialog->login) &&
+	     gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->pppoe_interface_combo)) != -1);
+  else if (strcmp (connection_type, "gprs") == 0)
+    valid = (get_entry_text (dialog->apn) &&
+	     get_entry_text (gtk_bin_get_child (GTK_BIN (dialog->serial_port))));
+
+  g_free (connection_type);
+
+  return valid;
+}
+
+static int
+compare_methods (Description *m1, Description *m2)
+{
+  return strcmp (m1->method, m2->method);
+}
+
+static const gchar*
+method_to_desc (const Description  descriptions[],
+		gint               n_elems,
+		const gchar       *method)
+{
+  Description d, *ret;
+
+  d.method = (gchar*) method;
+  ret = (Description *) bsearch (&d, descriptions, n_elems,
+				 sizeof (Description), compare_methods);
+
+  return (ret) ? ret->desc : method;
+}
+
+static void
+populate_combo (GtkComboBox       *combo,
+		GList             *list,
+		const Description  descriptions[],
+		gint               n_elems)
+{
+  GtkListStore *store;
+  GtkTreeIter iter;
+  const gchar *desc;
+
+  store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+
+  while (list)
+    {
+      desc = method_to_desc (descriptions, n_elems, list->data);
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter,
+			  0, _(desc),
+			  1, list->data,
+			  -1);
+      list = list->next;
+    }
+
+  gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
+  g_object_unref (store);
+}
+
+static void
+populate_ethernet_interfaces (GstConnectionDialog *dialog,
+			      GstNetworkTool      *tool)
+{
+  GtkListStore *store;
+  GtkTreeIter iter;
+  OobsList *list;
+  OobsListIter list_iter;
+  gboolean valid;
+
+  list = oobs_ifaces_config_get_ifaces (tool->ifaces_config, OOBS_IFACE_TYPE_ETHERNET);
+  valid = oobs_list_get_iter_first (list, &list_iter);
+
+  store = gtk_list_store_new (1, OOBS_TYPE_IFACE_ETHERNET);
+
+  while (valid)
+    {
+      GObject *iface;
+
+      iface = oobs_list_get (list, &list_iter);
+
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter, 0, iface, -1);
+      g_object_unref (iface);
+
+      valid = oobs_list_iter_next (list, &list_iter);
+    }
+
+  gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->pppoe_interface_combo),
+			   GTK_TREE_MODEL (store));
+  g_object_unref (store);
+}
+
+GstConnectionDialog*
+connection_dialog_init (GstTool *tool)
+{
+  GstConnectionDialog *gcd;
+
+  gcd = g_new0 (GstConnectionDialog, 1);
+
+  gcd->standalone = FALSE;
+  gcd->iface  = NULL;
+  gcd->dialog = gst_dialog_get_widget (tool->main_dialog, "connection_config_dialog");
+
+  gcd->ok_button = gst_dialog_get_widget (tool->main_dialog, "connection_ok");
+
+  gcd->notebook = gst_dialog_get_widget (tool->main_dialog, "connection_notebook");
+  gcd->general_page = gst_dialog_get_widget (tool->main_dialog, "connection_general_page");
+  gcd->modem_page = gst_dialog_get_widget (tool->main_dialog, "connection_modem_page");
+  gcd->options_page = gst_dialog_get_widget (tool->main_dialog, "connection_options_page");
+
+  gcd->connection_configured = gst_dialog_get_widget (tool->main_dialog, "connection_device_active");
+  gcd->roaming_configured = gst_dialog_get_widget (tool->main_dialog, "connection_device_roaming");
+
+  /* ethernet */
+  gcd->bootproto_combo = gst_dialog_get_widget (tool->main_dialog, "connection_bootproto");
+  gcd->address = gst_dialog_get_widget (tool->main_dialog, "connection_address");
+  gcd->netmask = gst_dialog_get_widget (tool->main_dialog, "connection_netmask");
+  gcd->gateway = gst_dialog_get_widget (tool->main_dialog, "connection_gateway");
+
+  /* wireless */
+  gcd->essid   = gst_dialog_get_widget (tool->main_dialog, "connection_essid");
+  gcd->wep_key = gst_dialog_get_widget (tool->main_dialog, "connection_wep_key");
+  gcd->key_type_combo = gst_dialog_get_widget (tool->main_dialog, "connection_wep_key_type");
+
+  /* plip */
+  gcd->local_address  = gst_dialog_get_widget (tool->main_dialog, "connection_local_address");
+  gcd->remote_address = gst_dialog_get_widget (tool->main_dialog, "connection_remote_address");
+
+  /* modem */
+  gcd->ppp_type_combo = gst_dialog_get_widget (tool->main_dialog, "connection_ppp_type");
+  gcd->ppp_type_box = gst_dialog_get_widget (tool->main_dialog, "connection_ppp_type_box");
+  gcd->login        = gst_dialog_get_widget (tool->main_dialog, "connection_login");
+  gcd->password     = gst_dialog_get_widget (tool->main_dialog, "connection_password");
+  gcd->serial_port  = gst_dialog_get_widget (tool->main_dialog, "connection_serial_port");
+  gcd->detect_modem = gst_dialog_get_widget (tool->main_dialog, "connection_detect_modem");
+  gcd->phone_number = gst_dialog_get_widget (tool->main_dialog, "connection_phone_number");
+  gcd->dial_prefix  = gst_dialog_get_widget (tool->main_dialog, "connection_dial_prefix");
+  gcd->volume       = gst_dialog_get_widget (tool->main_dialog, "connection_volume");
+  gcd->dial_type    = gst_dialog_get_widget (tool->main_dialog, "connection_dial_type");
+  gcd->default_gw   = gst_dialog_get_widget (tool->main_dialog, "connection_default_gw");
+  gcd->peerdns      = gst_dialog_get_widget (tool->main_dialog, "connection_peerdns");
+  gcd->persist      = gst_dialog_get_widget (tool->main_dialog, "connection_persist");
+
+  gcd->pppoe_interface_combo = gst_dialog_get_widget (tool->main_dialog, "connection_pppoe_ethernet");
+  gcd->apn = gst_dialog_get_widget (tool->main_dialog, "connection_apn");
+
+  gcd->pppoe_settings_table = gst_dialog_get_widget (tool->main_dialog, "connection_pppoe_settings_table");
+  gcd->modem_settings_table = gst_dialog_get_widget (tool->main_dialog, "connection_modem_settings_table");
+  gcd->modem_isp_table = gst_dialog_get_widget (tool->main_dialog, "connection_modem_isp_table");
+  gcd->gprs_isp_table = gst_dialog_get_widget (tool->main_dialog, "connection_gprs_isp_table");
+
+  gcd->wireless_frame = gst_dialog_get_widget (tool->main_dialog, "connection_wireless");
+  gcd->ethernet_frame = gst_dialog_get_widget (tool->main_dialog, "connection_ethernet");
+  gcd->plip_frame     = gst_dialog_get_widget (tool->main_dialog, "connection_plip");
+  gcd->isp_frame      = gst_dialog_get_widget (tool->main_dialog, "isp_data");
+  gcd->account_frame  = gst_dialog_get_widget (tool->main_dialog, "isp_account_data");
+
+  gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (gcd->serial_port), 0);
+
+  connection_essids_combo_init (GTK_COMBO_BOX (gcd->essid));
+  connection_pppoe_combo_init (GTK_COMBO_BOX (gcd->pppoe_interface_combo));
+
+  return gcd;
+}
+
+static void
+prepare_dialog_layout (GstConnectionDialog *dialog,
+		       OobsIface           *iface)
+{
+  if (OOBS_IS_IFACE_PPP (iface))
+    {
+      gtk_widget_hide (dialog->wireless_frame);
+      gtk_widget_hide (dialog->ethernet_frame);
+      gtk_widget_hide (dialog->plip_frame);
+      gtk_widget_show (dialog->options_page);
+      gtk_widget_show (dialog->isp_frame);
+      gtk_widget_show (dialog->account_frame);
+      gtk_widget_show (dialog->ppp_type_box);
+
+      gtk_notebook_set_show_tabs (GTK_NOTEBOOK (dialog->notebook), TRUE);
+      gtk_notebook_set_show_border (GTK_NOTEBOOK (dialog->notebook), TRUE);
+      gtk_notebook_set_current_page (GTK_NOTEBOOK (dialog->notebook), 0);
+
+      gtk_container_set_border_width (GTK_CONTAINER (dialog->general_page), 12);
+      gtk_container_set_border_width (GTK_CONTAINER (dialog->notebook), 6);
+
+      gtk_widget_show (dialog->modem_page);
+
+      /* FIXME: hide/show things depending on PPP type */
+    }
+  else
+    {
+      gtk_widget_show (dialog->general_page);
+      gtk_widget_hide (dialog->modem_page);
+      gtk_widget_hide (dialog->options_page);
+      gtk_widget_hide (dialog->isp_frame);
+      gtk_widget_hide (dialog->account_frame);
+      gtk_widget_hide (dialog->ppp_type_box);
+
+      gtk_notebook_set_show_tabs (GTK_NOTEBOOK (dialog->notebook), FALSE);
+      gtk_notebook_set_show_border (GTK_NOTEBOOK (dialog->notebook), FALSE);
+
+      gtk_container_set_border_width (GTK_CONTAINER (dialog->general_page), 0);
+      gtk_container_set_border_width (GTK_CONTAINER (dialog->notebook), 0);
+
+      if (OOBS_IS_IFACE_ETHERNET (iface))
+	{
+	  gtk_widget_show (dialog->ethernet_frame);
+	  gtk_widget_hide (dialog->plip_frame);
+
+	  if (OOBS_IS_IFACE_WIRELESS (iface))
+	    gtk_widget_show (dialog->wireless_frame);
+	  else
+	    gtk_widget_hide (dialog->wireless_frame);
+	}
+      else if (OOBS_IS_IFACE_PLIP (iface))
+	{
+	  gtk_widget_hide (dialog->wireless_frame);
+	  gtk_widget_hide (dialog->ethernet_frame);
+	  gtk_widget_show (dialog->plip_frame);
+	}
+    }
+}
+
+void
+general_prepare (GstConnectionDialog *dialog,
+		 OobsIface           *iface)
+{
+  NMState state;
+
+  state = nm_integration_get_state (GST_NETWORK_TOOL (tool));
+
+  if (nm_integration_iface_supported (iface) && state != NM_STATE_UNKNOWN)
+    {
+      gtk_widget_show (dialog->roaming_configured);
+      gtk_widget_hide (dialog->connection_configured);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->roaming_configured);
+      gtk_widget_show (dialog->connection_configured);
+    }
+}
+
+void
+connection_dialog_prepare (GstConnectionDialog *dialog, OobsIface *iface)
+{
+  gboolean active;
+  gchar *title;
+
+  dialog->iface = g_object_ref (iface);
+  active = oobs_iface_get_configured (dialog->iface);
+
+  title = g_strdup_printf (_("%s Properties"),
+			   oobs_iface_get_device_name (dialog->iface));
+  gtk_window_set_title (GTK_WINDOW (dialog->dialog), title);
+  g_free (title);
+
+  prepare_dialog_layout (dialog, iface);
+  connection_dialog_set_sensitive (dialog, active);
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->roaming_configured), !active);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->connection_configured), active);
+
+  general_prepare (dialog, iface);
+
+  if (OOBS_IS_IFACE_PPP (iface))
+    ppp_dialog_prepare (dialog);
+  else
+    {
+      if (OOBS_IS_IFACE_WIRELESS (iface))
+        {
+	  wireless_dialog_prepare (dialog);
+	  ethernet_dialog_prepare (dialog);
+	}
+      else if (OOBS_IS_IFACE_ETHERNET (iface)
+	       || OOBS_IS_IFACE_IRLAN (iface))
+	ethernet_dialog_prepare (dialog);
+      else if (OOBS_IS_IFACE_PLIP (iface))
+	plip_dialog_prepare (dialog);
+    }
+
+  dialog->changed = FALSE;
+  g_object_unref (dialog->iface);
+}
+
+void
+connection_save (GstConnectionDialog *dialog)
+{
+  gboolean active, was_configured;
+
+  was_configured = oobs_iface_get_configured (dialog->iface);
+  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->connection_configured));
+
+  if (OOBS_IS_IFACE_PPP (dialog->iface))
+    ppp_dialog_save (dialog);
+  else if (OOBS_IS_IFACE_ETHERNET (dialog->iface))
+    {
+      if (OOBS_IS_IFACE_WIRELESS (dialog->iface))
+	wireless_dialog_save (dialog);
+
+      ethernet_dialog_save (dialog, active);
+    }
+  else if (OOBS_IS_IFACE_PLIP (dialog->iface))
+    plip_dialog_save (dialog);
+
+  oobs_iface_set_configured (dialog->iface, active);
+
+  if (!was_configured)
+    oobs_iface_set_active (dialog->iface, TRUE);
+
+  /* sync auto and active, this may happen either because
+   * it was just set active, or the interface was already
+   * manually configured, but not marked as auto.
+   */
+  if (oobs_iface_get_active (dialog->iface))
+    oobs_iface_set_auto (dialog->iface, TRUE);
+}
+
+void
+connection_check_fields (GstConnectionDialog *dialog)
+{
+  gboolean active = FALSE;
+
+  if (OOBS_IS_IFACE_WIRELESS (dialog->iface))
+    active = (ethernet_dialog_check_fields (dialog) &&
+	      wireless_dialog_check_fields (dialog));
+  else if (OOBS_IS_IFACE_ETHERNET (dialog->iface) ||
+      OOBS_IS_IFACE_IRLAN    (dialog->iface))
+    active = ethernet_dialog_check_fields (dialog);
+  else if (OOBS_IS_IFACE_PLIP (dialog->iface))
+    active = plip_dialog_check_fields (dialog);
+  else if (OOBS_IS_IFACE_PPP (dialog->iface))
+    active = ppp_dialog_check_fields (dialog);
+
+  gtk_widget_set_sensitive (dialog->ok_button, active);
+}
+
+gchar*
+connection_detect_modem (void)
+{
+  /* FIXME: Detect modem */
+  return NULL;
+}
+
+void
+connection_check_netmask (GtkWidget *address_widget, GtkWidget *netmask_widget)
+{
+  gchar *address, *netmask;
+  guint32 ip1;
+
+  address = (gchar *) gtk_entry_get_text (GTK_ENTRY (address_widget));
+  netmask = (gchar *) gtk_entry_get_text (GTK_ENTRY (netmask_widget));
+
+  if ((sscanf (address, "%d.", &ip1) == 1) && (strlen (netmask) == 0))
+    {
+      if (ip1 < 127)
+        gtk_entry_set_text (GTK_ENTRY (netmask_widget), "255.0.0.0");
+      else if (ip1 < 192)
+        gtk_entry_set_text (GTK_ENTRY (netmask_widget), "255.255.0.0");
+      else
+        gtk_entry_set_text (GTK_ENTRY (netmask_widget), "255.255.255.0");
+    }
+}
+
+void
+connection_dialog_set_sensitive (GstConnectionDialog *dialog, gboolean active)
+{
+  gtk_widget_set_sensitive (dialog->wireless_frame, active);
+  gtk_widget_set_sensitive (dialog->ethernet_frame, active);
+  gtk_widget_set_sensitive (dialog->plip_frame,     active);
+  gtk_widget_set_sensitive (dialog->modem_page,     active);
+  gtk_widget_set_sensitive (dialog->options_page,   active);
+  gtk_widget_set_sensitive (dialog->isp_frame,      active);
+  gtk_widget_set_sensitive (dialog->account_frame,  active);
+  gtk_widget_set_sensitive (dialog->ppp_type_box,   active);
+}
+
+void
+connection_dialog_update (GstConnectionDialog *gcd)
+{
+  populate_combo (GTK_COMBO_BOX (gcd->bootproto_combo),
+		  oobs_ifaces_config_get_available_configuration_methods (GST_NETWORK_TOOL (tool)->ifaces_config),
+		  method_descriptions, G_N_ELEMENTS (method_descriptions));
+
+  populate_combo (GTK_COMBO_BOX (gcd->key_type_combo),
+		  oobs_ifaces_config_get_available_key_types (GST_NETWORK_TOOL (tool)->ifaces_config),
+		  key_type_descriptions, G_N_ELEMENTS (key_type_descriptions));
+
+  populate_combo (GTK_COMBO_BOX (gcd->ppp_type_combo),
+		  oobs_ifaces_config_get_available_ppp_types (GST_NETWORK_TOOL (tool)->ifaces_config),
+		  ppp_type_descriptions, G_N_ELEMENTS (ppp_type_descriptions));
+
+  populate_ethernet_interfaces (gcd, GST_NETWORK_TOOL (tool));
+}
+
+void
+connection_dialog_hide (GstConnectionDialog *dialog)
+{
+  gtk_widget_hide (dialog->dialog);
+
+#ifdef HAVE_LIBIW_H
+  /* get rid of the essid list, if any */
+  if (dialog->essid_list)
+    {
+      g_object_unref (dialog->essid_list);
+      dialog->essid_list = NULL;
+    }
+#endif
+}
diff -pruN 3.0.0-2/.pc/remove_g_thread_init.patch/src/network/main.c 3.0.0-2ubuntu1/.pc/remove_g_thread_init.patch/src/network/main.c
--- 3.0.0-2/.pc/remove_g_thread_init.patch/src/network/main.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/remove_g_thread_init.patch/src/network/main.c	2009-05-16 14:49:19.000000000 +0000
@@ -0,0 +1,207 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/* Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <glib/gi18n.h>
+
+#include "gst.h"
+#include "network-tool.h"
+#include "ifaces-list.h"
+#include "callbacks.h"
+
+GstTool *tool;
+
+static GstDialogSignal signals[] = {
+  /* connections tab */
+  { "properties_button",            "clicked", G_CALLBACK (on_iface_properties_clicked) },
+  /* general tab */
+  { "domain",                       "focus-out-event", G_CALLBACK (on_domain_focus_out) },
+  { "hostname",                     "changed", G_CALLBACK (on_entry_changed) },
+  { "domain",                       "changed", G_CALLBACK (on_entry_changed) },
+  /* host aliases tab */
+  { "host_aliases_add",             "clicked", G_CALLBACK (on_host_aliases_add_clicked) },
+  { "host_aliases_properties",      "clicked", G_CALLBACK (on_host_aliases_properties_clicked) },
+  { "host_aliases_delete",          "clicked", G_CALLBACK (on_host_aliases_delete_clicked) },
+  /* host aliases dialog */
+  { "host_alias_address",           "changed", G_CALLBACK (on_host_aliases_dialog_changed) },
+  /* connection dialog */
+  { "connection_config_dialog",     "response", G_CALLBACK (on_connection_response) },
+  { "connection_config_dialog",     "delete-event", G_CALLBACK (gtk_true) },
+  { "connection_device_active",     "clicked", G_CALLBACK (on_iface_active_changed) },
+  { "connection_device_roaming",    "clicked", G_CALLBACK (on_iface_roaming_changed) },
+  { "connection_bootproto",         "changed", G_CALLBACK (on_bootproto_changed) },
+  { "connection_detect_modem",      "clicked", G_CALLBACK (on_detect_modem_clicked) },
+  /* dialog changing detection */
+  { "connection_address",           "focus-out-event", G_CALLBACK (on_ip_address_focus_out) },
+  { "connection_ppp_type",          "changed", G_CALLBACK (on_ppp_type_changed) },
+  { "connection_device_active",     "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_essid",             "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_wep_key_type",      "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_wep_key",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_bootproto",         "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_address",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_netmask",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_gateway",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_local_address",     "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_remote_address",    "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_serial_port",       "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_dial_type",         "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_volume",            "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_phone_number",      "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_dial_prefix",       "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_login",             "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_password",          "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_default_gw",        "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_persist",           "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_apn",               "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_pppoe_ethernet",    "changed", G_CALLBACK (on_dialog_changed) },
+  { NULL }
+};
+
+static GstDialogSignal signals_after[] = {
+  { "hostname",                     "focus-out-event", G_CALLBACK (on_hostname_focus_out) },
+  { NULL }
+};
+
+static const gchar *policy_widgets [] = {
+	"locations_combo",
+	"add_location",
+	"remove_location",
+	"interfaces_list",
+	"properties_button",
+	"hostname",
+	"domain",
+	"dns_list",
+	"dns_list_add",
+	"dns_list_delete",
+	"search_domain_list",
+	"search_domain_add",
+	"search_domain_delete",
+	"host_aliases_list",
+	"host_aliases_add",
+	"host_aliases_properties",
+	"host_aliases_delete",
+	NULL
+};
+
+static void
+init_standalone_dialog (GstTool         *tool,
+			IfaceSearchTerm  search_term,
+			const gchar     *term)
+{
+  GstNetworkTool *network_tool;
+  OobsIface      *iface;
+  GtkWidget      *d;
+
+  network_tool = GST_NETWORK_TOOL (tool);
+  gst_tool_update_gui (tool);
+  iface = ifaces_model_search_iface (search_term, term);
+
+  if (iface)
+    {
+      connection_dialog_prepare (network_tool->dialog, iface);
+      network_tool->dialog->standalone = TRUE;
+      g_object_unref (iface);
+
+      gtk_widget_show (network_tool->dialog->dialog);
+    }
+  else
+    {
+      d = gtk_message_dialog_new (GTK_WINDOW (tool->main_dialog),
+                                  GTK_DIALOG_MODAL,
+                                  GTK_MESSAGE_WARNING,
+                                  GTK_BUTTONS_CLOSE,
+                                  _("The interface does not exist"));
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
+                                                _("Check that it is correctly typed "
+                                                  "and that it is correctly supported "
+                                                  "by your system."),
+                                                NULL);
+      gtk_dialog_run (GTK_DIALOG (d));
+      gtk_widget_destroy (d);
+      exit (-1);
+    }
+}
+
+static void
+init_filters (void)
+{
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "host_alias_address")), GST_FILTER_IP);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_address")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_netmask")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_gateway")), GST_FILTER_IPV4);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_local_address")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_remote_address")), GST_FILTER_IPV4);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_phone_number")), GST_FILTER_PHONE);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_dial_prefix")), GST_FILTER_PHONE);
+}
+
+static void
+set_text_buffers_callback (void)
+{
+  GtkWidget *textview;
+  GtkTextBuffer *buffer;
+
+  textview = gst_dialog_get_widget (tool->main_dialog, "host_alias_list");
+  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
+
+  g_signal_connect (G_OBJECT (buffer), "changed",
+		    G_CALLBACK (on_host_aliases_dialog_changed), NULL);
+}
+
+int
+main (int argc, gchar *argv[])
+{
+  gchar *interface = NULL;
+  gchar *type = NULL;
+
+  GOptionEntry entries[] = {
+    { "configure",      'c', 0, G_OPTION_ARG_STRING, &interface, N_("Configure a network interface"), N_("INTERFACE") },
+    { "configure-type", 't', 0, G_OPTION_ARG_STRING, &type,      N_("Configure the first network interface with a specific type"), N_("TYPE") },
+    { NULL }
+  };
+
+  g_thread_init (NULL);
+  gst_init_tool ("network-admin", argc, argv, entries);
+  tool = gst_network_tool_new ();
+
+  gst_dialog_require_authentication_for_widgets (tool->main_dialog, policy_widgets);
+  gst_dialog_connect_signals (tool->main_dialog, signals);
+  gst_dialog_connect_signals_after (tool->main_dialog, signals_after);
+  set_text_buffers_callback ();
+  init_filters ();
+
+  if (interface)
+    init_standalone_dialog (tool, SEARCH_DEV, interface);
+  else if (type)
+    init_standalone_dialog (tool, SEARCH_TYPE, type);
+  else
+    gtk_widget_show (GTK_WIDGET (tool->main_dialog));
+
+  gtk_main ();
+  return 0;
+}
diff -pruN 3.0.0-2/.pc/remove_g_thread_init.patch/src/shares/main.c 3.0.0-2ubuntu1/.pc/remove_g_thread_init.patch/src/shares/main.c
--- 3.0.0-2/.pc/remove_g_thread_init.patch/src/shares/main.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/.pc/remove_g_thread_init.patch/src/shares/main.c	2009-05-16 14:49:19.000000000 +0000
@@ -0,0 +1,124 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* main.c: this file is part of shares-admin, a gnome-system-tool frontend 
+ * for shared folders administration.
+ * 
+ * Copyright (C) 2004 Carlos Garnacho
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include "shares-tool.h"
+#include "gst.h"
+#include "table.h"
+#include "nfs-acl-table.h"
+#include "share-settings.h"
+#include "share-nfs-add-hosts.h"
+#include "callbacks.h"
+
+GstTool *tool;
+
+static GstDialogSignal signals [] = {
+	/* Main dialog */
+	{ "add_share",             "clicked",         G_CALLBACK (on_add_share_clicked) },
+	{ "edit_share",            "clicked",         G_CALLBACK (on_edit_share_clicked) },
+	{ "delete_share",          "clicked",         G_CALLBACK (on_delete_share_clicked) },
+	{ "smb_is_wins",           "toggled",         G_CALLBACK (on_is_wins_toggled) },
+	{ "smb_workgroup",         "focus-out-event", G_CALLBACK (on_workgroup_focus_out) },
+	{ "smb_wins_server",       "focus-out-event", G_CALLBACK (on_wins_server_focus_out) },
+	/* Shares dialog */
+	{ "share_type",            "changed",         G_CALLBACK (on_share_type_changed) },
+	{ "share_type",            "changed",         G_CALLBACK (on_dialog_validate) },
+	{ "share_nfs_delete",      "clicked",         G_CALLBACK (on_share_nfs_delete_clicked) },
+	{ "share_nfs_add",         "clicked",         G_CALLBACK (on_share_nfs_add_clicked) },
+	{ "share_smb_name",        "changed",         G_CALLBACK (on_share_smb_name_modified) },
+	{ "share_smb_name",        "changed",         G_CALLBACK (on_dialog_validate) },
+	{ "share_path",            "current-folder-changed", G_CALLBACK (on_shared_folder_changed) },
+	/* NFS add hosts dialog */
+	{ "share_nfs_host_type",   "changed",         G_CALLBACK (on_share_nfs_host_type_changed) },
+	{ NULL }
+};
+
+static const gchar *policy_widgets [] = {
+	"add_share",
+	"delete_share",
+	"smb_workgroup",
+	"smb_is_wins",
+	"smb_wins_server",
+	"share_path",
+	"share_type",
+	"share_smb_name",
+	"share_smb_comment",
+	"share_smb_readonly",
+	"share_nfs_acl",
+	"share_nfs_add",
+	"share_nfs_delete",
+	"share_properties_ok",
+	"users_table",
+	NULL
+};
+
+void
+initialize_tables (GstTool *tool)
+{
+	table_create (tool);
+	nfs_acl_table_create ();
+	share_nfs_add_hosts_dialog_setup ();
+	share_settings_create_combo ();
+}
+
+void
+initialize_filters (void)
+{
+	gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "share_nfs_address")), GST_FILTER_IPV4);
+	gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "share_nfs_network")), GST_FILTER_IPV4);
+	gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "share_nfs_netmask")), GST_FILTER_IPV4);
+}
+
+int
+main (int argc, char *argv[])
+{
+	gchar *path = NULL;
+
+	GOptionEntry entries[] = {
+		{ "add-share", 'a', 0, G_OPTION_ARG_STRING, &path, N_("Add a shared path, modifies it if it already exists"), N_("PATH") },
+		{ NULL }
+	};
+
+	g_thread_init (NULL);
+	gst_init_tool ("shares-admin", argc, argv, entries);
+	tool = GST_TOOL (gst_shares_tool_new ());
+
+	initialize_tables (tool);
+	gst_dialog_require_authentication_for_widgets (tool->main_dialog, policy_widgets);
+	gst_dialog_connect_signals (tool->main_dialog, signals);
+	initialize_filters ();
+
+	if (path)
+		GST_SHARES_TOOL (tool)->path = path;
+	else
+		gtk_widget_show (GTK_WIDGET (tool->main_dialog));
+
+	gtk_main ();
+
+	return 0;
+}
diff -pruN 3.0.0-2/src/common/gst.h 3.0.0-2ubuntu1/src/common/gst.h
--- 3.0.0-2/src/common/gst.h	2010-10-06 09:54:53.000000000 +0000
+++ 3.0.0-2ubuntu1/src/common/gst.h	2011-12-17 00:52:19.000000000 +0000
@@ -1,5 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 #include <config.h>
+#include "gst-package.h"
 #include "gst-tool.h"
 #include "gst-dialog.h"
 #include "gst-filter.h"
diff -pruN 3.0.0-2/src/common/gst-package.c 3.0.0-2ubuntu1/src/common/gst-package.c
--- 3.0.0-2/src/common/gst-package.c	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/src/common/gst-package.c	2011-12-17 00:52:19.000000000 +0000
@@ -0,0 +1,201 @@
+/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
+/* 
+ * Copyright (C) 2004 Vincent Untz
+ *
+ * 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.
+ *
+ * Authors:   Vincent Untz <vincent@vuntz.net>
+ *            Guillaume Desmottes <cass@skynet.be>
+ *            Carlos Garnacho <carlosg@gnome.org>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "gst-package.h"
+
+static void
+show_error_dialog (GtkWindow   *window,
+		   const gchar *secondary_text)
+{
+      GtkWidget *dialog;
+
+      dialog = gtk_message_dialog_new (window,
+				       GTK_DIALOG_MODAL,
+				       GTK_MESSAGE_ERROR,
+				       GTK_BUTTONS_CLOSE,
+				       _("Could not install package"));
+
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_text);
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+}
+
+static gboolean
+find_app (GtkWindow   *window,
+	  const gchar *app)
+{
+  gchar *path;
+
+  path = g_find_program_in_path (app);
+
+  if (!path)
+    {
+      show_error_dialog (window,
+			 _("The necessary applications to install"
+			   " the package could not be found."));
+      return FALSE;
+    }
+
+  g_free (path);
+
+  return TRUE;
+}
+
+static gchar *
+create_temp_file (const gchar *packages[])
+{
+  int fd;
+  gchar *path, *str;
+
+  path = g_strdup_printf ("/tmp/packages.XXXXXX");
+  fd = mkstemp (path);
+
+  while (*packages)
+    {
+      str = g_strdup_printf ("%s\ti\n", *packages);
+      write (fd, str, strlen (str));
+      g_free (str);
+      packages++;
+    }
+
+  close (fd);
+  return path;
+}
+
+static gchar*
+get_synaptic_command_line (GtkWindow   *window,
+			   const gchar *path)
+{
+  gchar *synaptic_path, *command;
+
+  synaptic_path = g_find_program_in_path ("synaptic");
+  command = g_strdup_printf ("%s --hide-main-window --non-interactive "
+			     "--set-selections-file %s --parent-window-id %ld",
+			     synaptic_path, path,
+                             (long)gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (window))));
+  g_free (synaptic_path);
+  return command;
+}
+
+static gboolean
+spawn_synaptic (GtkWindow   *window,
+		const gchar *path,
+		GPid        *child_pid)
+{
+  gchar **argv;
+  GError *error = NULL;
+  gboolean retval = TRUE;
+  gint i = 0;
+
+  argv = g_new0 (gchar*, 6);
+  argv[i++] = g_find_program_in_path ("gksudo");
+  argv[i++] = g_strdup ("--desktop");
+  argv[i++] = g_strdup ("/usr/share/applications/synaptic.desktop");
+  argv[i++] = g_strdup ("--disable-grab");
+  argv[i++] = g_strdup ("--display");
+  argv[i++] = gdk_screen_make_display_name (gtk_window_get_screen (window));
+  argv[i++] = get_synaptic_command_line (window, path);
+  argv[i++] = NULL;
+
+  if (!g_spawn_async (NULL, argv, NULL,
+		      G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+		      NULL, NULL, child_pid, &error))
+    {
+      show_error_dialog (window, (error) ? error->message : "");
+      g_error_free (error);
+      retval = FALSE;
+    }
+
+  g_strfreev (argv);
+
+  return retval;
+}
+
+static void
+on_wait_timeout (GPid pid, gint status, gpointer data)
+{
+  g_spawn_close_pid (pid);
+  /* FIXME: should show an error dialog if the installation fails,
+   * but funnily I'm getting always an exit status 0 here... maybe gksudo fault? */
+  gtk_main_quit ();
+}
+
+static gboolean
+wait_for_synaptic (GtkWindow *window, GPid pid)
+{
+  GdkCursor *cursor;
+
+  cursor = gdk_cursor_new (GDK_WATCH);
+  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), cursor);
+  gtk_widget_set_sensitive (GTK_WIDGET (window), FALSE);
+
+  /* wait here a bit until the process has exited */
+  g_child_watch_add (pid, on_wait_timeout, NULL);
+  gtk_main ();
+
+  gtk_widget_set_sensitive (GTK_WIDGET (window), TRUE);
+  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
+
+  g_object_unref (cursor);
+
+  /* keep this until we can get status
+   * info from the launched process */
+  return TRUE;
+}
+
+gboolean
+gst_packages_install (GtkWindow   *window,
+		      const gchar *packages[])
+{
+  gchar *path;
+  GPid pid;
+  gboolean retval = FALSE;
+
+  g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
+
+  if (!find_app (window, "synaptic") || !find_app (window, "gksudo"))
+    return FALSE;
+
+  path = create_temp_file (packages);
+
+  if (spawn_synaptic (window, path, &pid))
+    retval = wait_for_synaptic (window, pid);
+
+  unlink (path);
+  g_free (path);
+
+  return retval;
+}
diff -pruN 3.0.0-2/src/common/gst-package.h 3.0.0-2ubuntu1/src/common/gst-package.h
--- 3.0.0-2/src/common/gst-package.h	1970-01-01 00:00:00.000000000 +0000
+++ 3.0.0-2ubuntu1/src/common/gst-package.h	2011-12-17 00:52:19.000000000 +0000
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/* 
+ * Copyright (C) 2004 Vincent Untz
+ *
+ * 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.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg@gnome.org>
+ * Authors: Vincent Untz <vincent@vuntz.net>
+ * Authors: Guillaume Desmottes <cass@skynet.be>
+ */
+
+#ifndef __GST_PACKAGES_H__
+#define __GST_PACKAGES_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+gboolean gst_packages_install (GtkWindow *window, const char **packages);
+
+G_END_DECLS
+
+#endif /* __GST_PACKAGES_H__ */
diff -pruN 3.0.0-2/src/common/Makefile.am 3.0.0-2ubuntu1/src/common/Makefile.am
--- 3.0.0-2/src/common/Makefile.am	2010-12-12 17:39:02.000000000 +0000
+++ 3.0.0-2ubuntu1/src/common/Makefile.am	2011-12-17 00:52:19.000000000 +0000
@@ -11,6 +11,7 @@ INCLUDES += \
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"
 
 libsetuptool_a_SOURCES = \
+	gst-package.c		gst-package.h	\
 	gst-dialog.c		gst-dialog.h \
 	gst-tool.c		gst-tool.h \
 	gst-platform-dialog.c	gst-platform-dialog.h \
diff -pruN 3.0.0-2/src/network/callbacks.c 3.0.0-2ubuntu1/src/network/callbacks.c
--- 3.0.0-2/src/network/callbacks.c	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/callbacks.c	2010-10-06 09:54:53.000000000 +0000
@@ -22,11 +22,294 @@
 
 #include "gst.h"
 #include "network-tool.h"
+#include "ifaces-list.h"
 #include "callbacks.h"
 #include "hosts.h"
+#include "nm-integration.h"
+#include "connection.h"
 
 extern GstTool *tool;
 
+void
+on_table_selection_changed (GtkTreeSelection *selection, gpointer data)
+{
+  GtkWidget    *properties;
+
+  properties = gst_dialog_get_widget (tool->main_dialog, "properties_button");
+  gtk_widget_set_sensitive (properties, gtk_tree_selection_get_selected_rows (selection, NULL) != 0);
+}
+
+void
+on_iface_properties_clicked (GtkWidget *widget, gpointer data)
+{
+  GstConnectionDialog *dialog;
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  OobsIface *iface;
+
+  selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
+
+  if (gtk_tree_selection_get_selected (selection, &model, &iter))
+    {
+      gtk_tree_model_get (model, &iter,
+			  COL_OBJECT, &iface,
+			  -1);
+
+      dialog = GST_NETWORK_TOOL (tool)->dialog;
+      connection_dialog_prepare (dialog, iface);
+      gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog), GTK_WINDOW (tool->main_dialog));
+
+      gst_dialog_add_edit_dialog (tool->main_dialog, dialog->dialog);
+      gtk_widget_show (dialog->dialog);
+    }
+}
+
+void
+on_iface_active_changed (GtkWidget *widget, gpointer data)
+{
+  GstConnectionDialog *dialog;
+  GtkWidget *roaming_active;
+  gboolean active;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+  connection_dialog_set_sensitive (dialog, active);
+
+  roaming_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_roaming");
+  g_signal_handlers_block_by_func (roaming_active, on_iface_roaming_changed, data);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (roaming_active), !active);
+  g_signal_handlers_unblock_by_func (roaming_active, on_iface_roaming_changed, data);
+}
+
+void
+on_iface_roaming_changed (GtkWidget *widget, gpointer data)
+{
+  GstConnectionDialog *dialog;
+  GtkWidget *device_active;
+  gboolean active;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+  /* roaming changed and device active have just inverted logics */
+  connection_dialog_set_sensitive (dialog, !active);
+
+  device_active = gst_dialog_get_widget (tool->main_dialog, "connection_device_active");
+  g_signal_handlers_block_by_func (device_active, on_iface_active_changed, data);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (device_active), !active);
+  g_signal_handlers_unblock_by_func (device_active, on_iface_active_changed, data);
+}
+
+void
+on_bootproto_changed (GtkWidget *widget, gpointer data)
+{
+  GstConnectionDialog *dialog;
+  gchar *method;
+  gboolean enabled;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  method = connection_combo_get_value (GTK_COMBO_BOX (dialog->bootproto_combo));
+  enabled = (method && strcmp (method, "static") == 0);
+
+  gtk_widget_set_sensitive (dialog->address, enabled);
+  gtk_widget_set_sensitive (dialog->netmask, enabled);
+  gtk_widget_set_sensitive (dialog->gateway, enabled);
+
+  g_free (method);
+}
+
+void
+on_ppp_type_changed (GtkWidget *widget, gpointer data)
+{
+  GstConnectionDialog *dialog;
+  gchar *type;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  type = connection_combo_get_value (GTK_COMBO_BOX (dialog->ppp_type_combo));
+
+  on_dialog_changed (widget, data);
+
+  if (!type)
+    return;
+
+  if (strcmp (type, "modem") == 0)
+    {
+      gtk_widget_show (dialog->modem_page);
+      gtk_widget_show (dialog->isp_frame);
+      gtk_widget_show (dialog->modem_settings_table);
+      gtk_widget_show (dialog->modem_isp_table);
+      gtk_widget_hide (dialog->pppoe_settings_table);
+      gtk_widget_hide (dialog->gprs_isp_table);
+    }
+  else if (strcmp (type, "isdn") == 0)
+    {
+      gtk_widget_show (dialog->isp_frame);
+      gtk_widget_show (dialog->modem_isp_table);
+      gtk_widget_hide (dialog->modem_page);
+      gtk_widget_hide (dialog->gprs_isp_table);
+    }
+  else if (strcmp (type, "pppoe") == 0)
+    {
+      gtk_widget_show (dialog->modem_page);
+      gtk_widget_show (dialog->pppoe_settings_table);
+      gtk_widget_show (dialog->modem_isp_table);
+      gtk_widget_hide (dialog->isp_frame);
+      gtk_widget_hide (dialog->modem_settings_table);
+    }
+  else if (strcmp (type, "gprs") == 0)
+    {
+      gtk_widget_show (dialog->modem_page);
+      gtk_widget_show (dialog->isp_frame);
+      gtk_widget_show (dialog->modem_settings_table);
+      gtk_widget_show (dialog->gprs_isp_table);
+      gtk_widget_hide (dialog->modem_isp_table);
+      gtk_widget_hide (dialog->pppoe_settings_table);
+    }
+}
+
+static void
+cancel_connection_dialog (GstTool *tool)
+{
+  GstConnectionDialog *dialog;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  g_object_unref (dialog->iface);
+  connection_dialog_hide (dialog);
+
+  if (dialog->standalone)
+    gtk_main_quit ();
+}
+
+static gboolean
+toggle_nm (gpointer data)
+{
+  GstNetworkTool *tool = GST_NETWORK_TOOL (data);
+  NMState state;
+
+  state = nm_integration_get_state (tool);
+
+  if (state == NM_STATE_DISCONNECTED ||
+      state == NM_STATE_CONNECTING ||
+      state == NM_STATE_CONNECTED)
+    {
+      /* "reboot" NM */
+      nm_integration_sleep (tool);
+      nm_integration_wake (tool);
+    }
+
+  return FALSE;
+}
+
+static void
+on_configuration_changed (OobsObject *object,
+			  OobsResult  result,
+			  gpointer    data)
+{
+  /* suckety suck, but NM seems not to realize
+   * immediately that the interface status changed */
+  g_timeout_add (2000, toggle_nm, data);
+}
+
+static void
+accept_connection_dialog (GstTool *tool)
+{
+  GstConnectionDialog *dialog;
+  GtkTreeSelection    *selection;
+  GtkTreeIter          iter;
+
+  dialog = GST_NETWORK_TOOL (tool)->dialog;
+  connection_dialog_hide (dialog);
+
+  if (dialog->changed)
+    {
+      connection_save (dialog);
+      selection = gtk_tree_view_get_selection (GST_NETWORK_TOOL (tool)->interfaces_list);
+
+      if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+        {
+	  ifaces_model_modify_interface_at_iter (&iter);
+	  g_signal_emit_by_name (G_OBJECT (selection), "changed");
+	}
+
+      gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
+			     _("Changing interface configuration"),
+			     on_configuration_changed, tool);
+    }
+
+  g_object_unref (dialog->iface);
+
+  if (dialog->standalone)
+    gtk_main_quit ();
+}
+
+void
+on_connection_response (GtkWidget *widget,
+			gint       response,
+			gpointer   data)
+{
+  GstConnectionDialog *connection_dialog;
+  GstDialog *dialog = GST_DIALOG (data);
+  GstTool *tool = gst_dialog_get_tool (dialog);
+
+  if (response == GTK_RESPONSE_OK)
+    accept_connection_dialog (tool);
+  else
+    cancel_connection_dialog (tool);
+
+  connection_dialog = GST_NETWORK_TOOL (tool)->dialog;
+  gst_dialog_remove_edit_dialog (tool->main_dialog, connection_dialog->dialog);
+}
+
+void
+on_detect_modem_clicked (GtkWidget *widget, gpointer data)
+{
+  GstNetworkTool      *network_tool;
+  GstConnectionDialog *dialog;
+  GtkWidget           *d;
+  GdkCursor           *cursor;
+  gchar               *dev = NULL;
+
+  network_tool = GST_NETWORK_TOOL (tool);
+  dialog = network_tool->dialog;
+
+  /* give some feedback to let know the user that the tool is busy */
+  gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), "");
+  gtk_widget_set_sensitive (dialog->serial_port, FALSE);
+  gtk_widget_set_sensitive (dialog->detect_modem, FALSE);
+
+  cursor = gdk_cursor_new (GDK_WATCH);
+  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), cursor);
+  gdk_cursor_unref (cursor);
+
+  dev = connection_detect_modem ();
+
+  /* remove the user feedback */
+  gtk_widget_set_sensitive (dialog->detect_modem, TRUE);
+  gtk_widget_set_sensitive (dialog->serial_port, TRUE);
+  gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->dialog)), NULL);
+
+  if (!dev || !*dev)
+    {
+      d = gtk_message_dialog_new (GTK_WINDOW (dialog->dialog),
+				  GTK_DIALOG_MODAL,
+				  GTK_MESSAGE_INFO,
+				  GTK_BUTTONS_CLOSE,
+				  _("Could not autodetect modem device"),
+				  NULL);
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
+						_("Check that the device is not busy and "
+						  "that is correctly attached to the computer."),
+						NULL);
+      gtk_dialog_run (GTK_DIALOG (d));
+      gtk_widget_destroy (d);
+    }
+  else
+    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GTK_COMBO_BOX (dialog->serial_port)))), dev);
+
+  g_free (dev);
+}
 
 static void
 do_popup_menu (GtkWidget *table, GstTablePopup *table_popup, GdkEventButton *event)
@@ -154,6 +437,64 @@ on_host_aliases_dialog_changed (GtkWidge
 }
 
 void
+on_dialog_changed (GtkWidget *widget, gpointer data)
+{
+  GstNetworkTool *network_tool = GST_NETWORK_TOOL (tool);
+
+  network_tool->dialog->changed = TRUE;
+  connection_check_fields (network_tool->dialog);
+}
+
+gboolean
+on_ip_address_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+  GstConnectionDialog *dialog = GST_NETWORK_TOOL (tool)->dialog;
+
+  connection_check_netmask (dialog->address, dialog->netmask);
+  return FALSE;
+}
+
+void
+on_iface_toggled (GtkCellRendererToggle *renderer,
+		  gchar                 *path_str,
+		  gpointer               data)
+{
+  GtkTreePath *path;
+  GtkTreeModel *model = GTK_TREE_MODEL (data);
+  GtkTreeIter iter;
+  gboolean active, inconsistent;
+  OobsIface *iface;
+
+  path = gtk_tree_path_new_from_string (path_str);
+
+  if (gtk_tree_model_get_iter (model, &iter, path))
+    {
+      gtk_tree_model_get (model, &iter,
+			  COL_ACTIVE, &active,
+			  COL_INCONSISTENT, &inconsistent,
+			  COL_OBJECT, &iface,
+			  -1);
+
+      if (!inconsistent)
+	{
+	  active ^= 1;
+
+	  oobs_iface_set_active (iface, active);
+	  oobs_iface_set_auto (iface, active);
+	  ifaces_model_modify_interface_at_iter (&iter);
+
+	  gst_tool_commit_async (tool, OOBS_OBJECT (GST_NETWORK_TOOL (tool)->ifaces_config),
+				 _("Changing interface configuration"),
+				 on_configuration_changed, tool);
+	}
+
+      g_object_unref (iface);
+    }
+
+  gtk_tree_path_free (path);
+}
+
+void
 on_entry_changed (GtkWidget *widget, gpointer data)
 {
   g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (TRUE));
diff -pruN 3.0.0-2/src/network/callbacks.h 3.0.0-2ubuntu1/src/network/callbacks.h
--- 3.0.0-2/src/network/callbacks.h	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/callbacks.h	2009-05-16 14:49:19.000000000 +0000
@@ -30,6 +30,19 @@ struct _GstTablePopup
   GtkWidget *popup;
 };
 
+void  on_table_selection_changed   (GtkTreeSelection*, gpointer);
+void  on_iface_properties_clicked  (GtkWidget*, gpointer);
+
+void  on_iface_active_changed      (GtkWidget*, gpointer);
+void  on_iface_roaming_changed     (GtkWidget *widget, gpointer data);
+
+void  on_bootproto_changed         (GtkWidget*, gpointer);
+void  on_detect_modem_clicked      (GtkWidget*, gpointer);
+void  on_connection_response       (GtkWidget *widget,
+				    gint       response,
+				    gpointer   data);
+
+
 gboolean on_table_button_press (GtkWidget*, GdkEventButton*, gpointer);
 gboolean on_table_popup_menu   (GtkWidget*, gpointer);
 
@@ -39,6 +52,14 @@ void  on_host_aliases_delete_clicked    
 void  on_host_aliases_dialog_changed     (GtkWidget*, gpointer);
 
 
+void  on_dialog_changed (GtkWidget*, gpointer);
+
+gboolean on_ip_address_focus_out (GtkWidget*, GdkEventFocus*, gpointer);
+
+void  on_iface_toggled  (GtkCellRendererToggle *renderer,
+			 gchar                 *path_str,
+			 gpointer               data);
+
 void     on_entry_changed      (GtkWidget     *widget,
 				gpointer       data);
 gboolean on_hostname_focus_out (GtkWidget     *widget,
diff -pruN 3.0.0-2/src/network/connection.c 3.0.0-2ubuntu1/src/network/connection.c
--- 3.0.0-2/src/network/connection.c	2010-12-12 17:24:40.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/connection.c	2011-12-17 00:52:19.000000000 +0000
@@ -18,6 +18,7 @@
  * Authors: Carlos Garnacho Parro  <carlosg@gnome.org>
  */
 
+#include <stdlib.h>
 #include <string.h>
 
 #include <glib/gi18n.h>
diff -pruN 3.0.0-2/src/network/main.c 3.0.0-2ubuntu1/src/network/main.c
--- 3.0.0-2/src/network/main.c	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/main.c	2011-12-17 00:52:19.000000000 +0000
@@ -27,11 +27,14 @@
 
 #include "gst.h"
 #include "network-tool.h"
+#include "ifaces-list.h"
 #include "callbacks.h"
 
 GstTool *tool;
 
 static GstDialogSignal signals[] = {
+  /* connections tab */
+  { "properties_button",            "clicked", G_CALLBACK (on_iface_properties_clicked) },
   /* general tab */
   { "domain",                       "focus-out-event", G_CALLBACK (on_domain_focus_out) },
   { "hostname",                     "changed", G_CALLBACK (on_entry_changed) },
@@ -42,6 +45,37 @@ static GstDialogSignal signals[] = {
   { "host_aliases_delete",          "clicked", G_CALLBACK (on_host_aliases_delete_clicked) },
   /* host aliases dialog */
   { "host_alias_address",           "changed", G_CALLBACK (on_host_aliases_dialog_changed) },
+  /* connection dialog */
+  { "connection_config_dialog",     "response", G_CALLBACK (on_connection_response) },
+  { "connection_config_dialog",     "delete-event", G_CALLBACK (gtk_true) },
+  { "connection_device_active",     "clicked", G_CALLBACK (on_iface_active_changed) },
+  { "connection_device_roaming",    "clicked", G_CALLBACK (on_iface_roaming_changed) },
+  { "connection_bootproto",         "changed", G_CALLBACK (on_bootproto_changed) },
+  { "connection_detect_modem",      "clicked", G_CALLBACK (on_detect_modem_clicked) },
+  /* dialog changing detection */
+  { "connection_address",           "focus-out-event", G_CALLBACK (on_ip_address_focus_out) },
+  { "connection_ppp_type",          "changed", G_CALLBACK (on_ppp_type_changed) },
+  { "connection_device_active",     "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_essid",             "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_wep_key_type",      "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_wep_key",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_bootproto",         "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_address",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_netmask",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_gateway",           "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_local_address",     "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_remote_address",    "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_serial_port",       "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_dial_type",         "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_volume",            "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_phone_number",      "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_dial_prefix",       "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_login",             "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_password",          "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_default_gw",        "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_persist",           "toggled", G_CALLBACK (on_dialog_changed) },
+  { "connection_apn",               "changed", G_CALLBACK (on_dialog_changed) },
+  { "connection_pppoe_ethernet",    "changed", G_CALLBACK (on_dialog_changed) },
   { NULL }
 };
 
@@ -51,6 +85,11 @@ static GstDialogSignal signals_after[] =
 };
 
 static const gchar *policy_widgets [] = {
+	"locations_combo",
+	"add_location",
+	"remove_location",
+	"interfaces_list",
+	"properties_button",
 	"hostname",
 	"domain",
 	"dns_list",
@@ -67,9 +106,58 @@ static const gchar *policy_widgets [] = 
 };
 
 static void
+init_standalone_dialog (GstTool         *tool,
+			IfaceSearchTerm  search_term,
+			const gchar     *term)
+{
+  GstNetworkTool *network_tool;
+  OobsIface      *iface;
+  GtkWidget      *d;
+
+  network_tool = GST_NETWORK_TOOL (tool);
+  gst_tool_update_gui (tool);
+  iface = ifaces_model_search_iface (search_term, term);
+
+  if (iface)
+    {
+      connection_dialog_prepare (network_tool->dialog, iface);
+      network_tool->dialog->standalone = TRUE;
+      g_object_unref (iface);
+
+      gtk_widget_show (network_tool->dialog->dialog);
+    }
+  else
+    {
+      d = gtk_message_dialog_new (GTK_WINDOW (tool->main_dialog),
+                                  GTK_DIALOG_MODAL,
+                                  GTK_MESSAGE_WARNING,
+                                  GTK_BUTTONS_CLOSE,
+                                  _("The interface does not exist"));
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d),
+                                                _("Check that it is correctly typed "
+                                                  "and that it is correctly supported "
+                                                  "by your system."),
+                                                NULL);
+      gtk_dialog_run (GTK_DIALOG (d));
+      gtk_widget_destroy (d);
+      exit (-1);
+    }
+}
+
+static void
 init_filters (void)
 {
   gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "host_alias_address")), GST_FILTER_IP);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_address")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_netmask")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_gateway")), GST_FILTER_IPV4);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_local_address")), GST_FILTER_IPV4);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_remote_address")), GST_FILTER_IPV4);
+
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_phone_number")), GST_FILTER_PHONE);
+  gst_filter_init (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "connection_dial_prefix")), GST_FILTER_PHONE);
 }
 
 static void
@@ -88,8 +176,16 @@ set_text_buffers_callback (void)
 int
 main (int argc, gchar *argv[])
 {
-  g_thread_init (NULL);
-  gst_init_tool ("network-admin", argc, argv, NULL);
+  gchar *interface = NULL;
+  gchar *type = NULL;
+
+  GOptionEntry entries[] = {
+    { "configure",      'c', 0, G_OPTION_ARG_STRING, &interface, N_("Configure a network interface"), N_("INTERFACE") },
+    { "configure-type", 't', 0, G_OPTION_ARG_STRING, &type,      N_("Configure the first network interface with a specific type"), N_("TYPE") },
+    { NULL }
+  };
+
+  gst_init_tool ("network-admin", argc, argv, entries);
   tool = gst_network_tool_new ();
 
   gst_dialog_require_authentication_for_widgets (tool->main_dialog, policy_widgets);
@@ -98,7 +194,12 @@ main (int argc, gchar *argv[])
   set_text_buffers_callback ();
   init_filters ();
 
-  gtk_widget_show (GTK_WIDGET (tool->main_dialog));
+  if (interface)
+    init_standalone_dialog (tool, SEARCH_DEV, interface);
+  else if (type)
+    init_standalone_dialog (tool, SEARCH_TYPE, type);
+  else
+    gtk_widget_show (GTK_WIDGET (tool->main_dialog));
 
   gtk_main ();
   return 0;
diff -pruN 3.0.0-2/src/network/Makefile.am 3.0.0-2ubuntu1/src/network/Makefile.am
--- 3.0.0-2/src/network/Makefile.am	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/Makefile.am	2010-10-06 09:53:22.000000000 +0000
@@ -15,14 +15,23 @@ INCLUDES += $(GST_TOOL_CFLAGS) $(DBUS_CF
 CLEANFILES = $(GST_TOOL_CLEANFILES)
 EXTRA_DIST = $(GST_TOOL_EXTRA_DIST)
 
-network_admin_LDADD = $(GST_TOOL_LIBS) $(DBUS_LIBS) $(GIO_LIBS)
+network_admin_LDADD = $(GST_TOOL_LIBS) $(GST_IW_LIBS) $(DBUS_LIBS) $(GIO_LIBS)
 network_admin_DEPENDENCIES = $(GST_TOOL_DEPENDENCIES)
 
+if HAVE_LIBIW_H
+essid_SOURCES = essid-list.c essid-list.h
+endif
+
 network_admin_SOURCES = \
 	$(essid_SOURCES)				\
+	nm-integration.c nm-integration.h	\
 	address-list.c	address-list.h		\
+	network-locations.c network-locations.h	\
 	network-tool.c network-tool.h		\
+	locations-combo.c locations-combo.h	\
+	ifaces-list.c ifaces-list.h		\
 	callbacks.c callbacks.h			\
+	connection.c connection.h		\
 	hosts.c hosts.h				\
 	main.c
 
diff -pruN 3.0.0-2/src/network/network-tool.c 3.0.0-2ubuntu1/src/network/network-tool.c
--- 3.0.0-2/src/network/network-tool.c	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/network-tool.c	2011-12-17 00:52:19.000000000 +0000
@@ -22,8 +22,11 @@
 #include <glib/gi18n.h>
 #include "gst.h"
 #include "network-tool.h"
+#include "ifaces-list.h"
+#include "connection.h"
 #include "callbacks.h"
 #include "hosts.h"
+#include "locations-combo.h"
 
 static void gst_network_tool_class_init (GstNetworkToolClass *class);
 static void gst_network_tool_init       (GstNetworkTool      *tool);
@@ -54,8 +57,13 @@ gst_network_tool_init (GstNetworkTool *t
 {
   tool->hosts_config = OOBS_HOSTS_CONFIG (oobs_hosts_config_get ());
   gst_tool_add_configuration_object (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config), TRUE);
+  tool->ifaces_config = OOBS_IFACES_CONFIG (oobs_ifaces_config_get ());
+  gst_tool_add_configuration_object (GST_TOOL (tool), OOBS_OBJECT (tool->ifaces_config), TRUE);
 
   tool->bus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+  g_signal_connect_swapped (tool->ifaces_config, "changed",
+			    G_CALLBACK (gst_tool_update_async), tool);
 }
 
 static void
@@ -69,6 +77,9 @@ gst_network_tool_finalize (GObject *obje
 
   g_object_unref (tool->dns);
   g_object_unref (tool->search);
+  g_object_unref (tool->interfaces_model);
+  g_object_unref (tool->location);
+  g_free (tool->dialog);
 
   (* G_OBJECT_CLASS (gst_network_tool_parent_class)->finalize) (object);
 }
@@ -129,10 +140,23 @@ gst_network_tool_constructor (GType     
   widget = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "domain");
   tool->domain = GTK_ENTRY (widget);
 
+  tool->interfaces_model = ifaces_model_create ();
+  tool->interfaces_list = ifaces_list_create (GST_TOOL (tool));
   tool->host_aliases_list = host_aliases_list_create (GST_TOOL (tool));
 
+  widget = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "locations_combo");
+  add_button = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "add_location");
+  delete_button = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "remove_location");
+  tool->location = gst_locations_combo_new (GST_TOOL (tool), widget, add_button, delete_button);
+
+  tool->dialog = connection_dialog_init (GST_TOOL (tool));
   tool->host_aliases_dialog = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "host_aliases_edit_dialog");
 
+  if (!g_file_test ("/usr/sbin/NetworkManager", G_FILE_TEST_IS_EXECUTABLE)) {
+    gtk_widget_set_visible (gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "hbox3"), TRUE);
+    gtk_widget_set_visible (gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "locations_box"), TRUE);
+  }
+
   return object;
 }
 
@@ -170,6 +194,48 @@ update_hosts_list (OobsList *list)
 }
 
 static void
+add_interfaces (GtkTreeView *ifaces_list, OobsList *list)
+{
+  OobsListIter iter;
+  GObject *iface;
+  gboolean valid;
+  gint n_items;
+
+  valid = oobs_list_get_iter_first (list, &iter);
+  n_items = oobs_list_get_n_items (list);
+
+  while (valid)
+    {
+      iface = oobs_list_get (list, &iter);
+      ifaces_model_add_interface (OOBS_IFACE (iface), (n_items > 1));
+
+      g_object_unref (iface);
+      valid = oobs_list_iter_next (list, &iter);
+    }
+}
+
+static void
+add_all_interfaces (GstNetworkTool *network_tool)
+{
+  OobsList *ifaces_list;
+
+  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_ETHERNET);
+  add_interfaces (network_tool->interfaces_list, ifaces_list);
+
+  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_WIRELESS);
+  add_interfaces (network_tool->interfaces_list, ifaces_list);
+
+  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_IRLAN);
+  add_interfaces (network_tool->interfaces_list, ifaces_list);
+
+  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_PLIP);
+  add_interfaces (network_tool->interfaces_list, ifaces_list);
+
+  ifaces_list = oobs_ifaces_config_get_ifaces (network_tool->ifaces_config, OOBS_IFACE_TYPE_PPP);
+  add_interfaces (network_tool->interfaces_list, ifaces_list);
+}
+
+static void
 set_entry_text (GtkWidget *entry, const gchar *text)
 {
   gtk_entry_set_text (GTK_ENTRY (entry), (text) ? text : "");
@@ -204,6 +270,11 @@ gst_network_tool_update_gui (GstTool *to
   set_entry_text (GTK_WIDGET (network_tool->domain),
 		  oobs_hosts_config_get_domainname (network_tool->hosts_config));
   g_signal_handlers_unblock_by_func (network_tool->domain, on_entry_changed, tool->main_dialog);
+
+  gtk_list_store_clear (GTK_LIST_STORE (network_tool->interfaces_model));
+  add_all_interfaces (network_tool);
+
+  connection_dialog_update (network_tool->dialog);
 }
 
 GstTool*
diff -pruN 3.0.0-2/src/network/network-tool.h 3.0.0-2ubuntu1/src/network/network-tool.h
--- 3.0.0-2/src/network/network-tool.h	2011-12-17 00:52:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/network/network-tool.h	2009-05-16 14:49:19.000000000 +0000
@@ -26,7 +26,8 @@ G_BEGIN_DECLS
 #include <gtk/gtk.h>
 #include <dbus/dbus.h>
 #include "address-list.h"
-#include "gst.h"
+#include "locations-combo.h"
+#include "connection.h"
 
 #define GST_TYPE_NETWORK_TOOL           (gst_network_tool_get_type ())
 #define GST_NETWORK_TOOL(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETWORK_TOOL, GstNetworkTool))
@@ -44,6 +45,7 @@ struct _GstNetworkTool
 
   /* config */
   OobsHostsConfig *hosts_config;
+  OobsIfacesConfig *ifaces_config;
 
   /* gui */
   GstAddressList *dns;
@@ -52,11 +54,16 @@ struct _GstNetworkTool
   /* bus, used for NM integration */
   DBusConnection *bus_connection;
 
+  GtkTreeModel *interfaces_model;
+  GtkTreeView  *interfaces_list;
+
   GtkTreeView *host_aliases_list;
+  GstLocationsCombo *location;
 
   GtkEntry *hostname;
   GtkEntry *domain;
 
+  GstConnectionDialog *dialog;
   GtkWidget *host_aliases_dialog;
 };
 
diff -pruN 3.0.0-2/src/shares/main.c 3.0.0-2ubuntu1/src/shares/main.c
--- 3.0.0-2/src/shares/main.c	2009-05-16 14:49:19.000000000 +0000
+++ 3.0.0-2ubuntu1/src/shares/main.c	2011-12-17 00:52:19.000000000 +0000
@@ -104,7 +104,6 @@ main (int argc, char *argv[])
 		{ NULL }
 	};
 
-	g_thread_init (NULL);
 	gst_init_tool ("shares-admin", argc, argv, entries);
 	tool = GST_TOOL (gst_shares_tool_new ());
 
diff -pruN 3.0.0-2/src/shares/shares-tool.c 3.0.0-2ubuntu1/src/shares/shares-tool.c
--- 3.0.0-2/src/shares/shares-tool.c	2010-12-12 17:38:51.000000000 +0000
+++ 3.0.0-2ubuntu1/src/shares/shares-tool.c	2011-12-17 00:52:19.000000000 +0000
@@ -62,9 +62,6 @@ gst_shares_tool_init (GstSharesTool *too
 	tool->smb_config = oobs_smb_config_get ();
 	gst_tool_add_configuration_object (gst_tool, tool->smb_config, TRUE);
 
-	tool->services_config = oobs_services_config_get ();
-	gst_tool_add_configuration_object (gst_tool, tool->services_config, TRUE);
-
 	tool->hosts_config = oobs_hosts_config_get ();
 	gst_tool_add_configuration_object (gst_tool, tool->hosts_config, TRUE);
 
@@ -138,9 +135,36 @@ update_global_smb_config (GstTool       
 }
 
 static gboolean
+install_packages (GstTool *tool, gboolean install_nfs, gboolean install_smb)
+{
+	gchar **packages;
+	gboolean retval;
+	gint i = 0;
+
+	if (!install_nfs && !install_smb)
+		return FALSE;
+
+	packages = g_new0 (gchar*, 3);
+
+	if (install_nfs)
+		packages[i++] = g_strdup ("nfs-kernel-server");
+
+	if (install_smb)
+		packages[i++] = g_strdup ("samba");
+
+	retval = gst_packages_install (GTK_WINDOW (tool->main_dialog), packages);
+	g_strfreev (packages);
+
+	return retval;
+}
+
+static gboolean
 check_servers (GstSharesTool *tool)
 {
 	GtkWidget *dialog;
+	GtkWidget *nfs_check, *smb_check;
+	gint response;
+	gboolean retval = FALSE;
 
 	if (tool->smb_available || tool->nfs_available)
 		return TRUE;
@@ -153,10 +177,36 @@ check_servers (GstSharesTool *tool)
 	gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
 						    _("You need to install at least either Samba or NFS "
 						      "in order to share your folders."));
-	gtk_dialog_run (GTK_DIALOG (dialog));
-	gtk_widget_destroy (dialog);
+	gtk_dialog_add_button (GTK_DIALOG (dialog), _("Install services"), GTK_RESPONSE_OK);
 
-	return FALSE;
+	/* add NFS checkbutton */
+	nfs_check = gtk_check_button_new_with_mnemonic (_("Install Unix networks support (_NFS)"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nfs_check), TRUE);
+	gtk_widget_show (nfs_check);
+	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), nfs_check);
+
+	/* add SMB checkbutton */
+	smb_check = gtk_check_button_new_with_mnemonic (_("Install Windows networks support (_SMB)"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smb_check), TRUE);
+	gtk_widget_show (smb_check);
+	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), smb_check);
+
+	response = gtk_dialog_run (GTK_DIALOG (dialog));
+	gtk_widget_hide (dialog);
+
+	if (response == GTK_RESPONSE_OK) {
+		if (install_packages (GST_TOOL (tool),
+				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (nfs_check)),
+				      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (smb_check)))) {
+			gst_tool_update_config (GST_TOOL (tool));
+			gst_tool_update_gui (GST_TOOL (tool));
+
+			retval = TRUE;
+		}
+	}
+
+	gtk_widget_destroy (dialog);
+	return retval;
 }
 
 static void
@@ -203,30 +253,19 @@ gst_shares_tool_update_config (GstTool *
 	gst_shares_tool_update_services_availability (shares_tool);
 }
 
+/* Services detection is very rough:
+ * since Upstart jobs are not supported (yet?), we fall back on checking
+ * that files are present, which means packages are installed.
+ * Anyway, the only right way to do this would be checking that
+ * the package is present, e.g. using PackageKit. */
 static void
 gst_shares_tool_update_services_availability (GstSharesTool *tool)
 {
-	OobsList *services;
-	OobsListIter iter;
-	GObject *service;
-	gboolean valid;
-	GstServiceRole role;
+        if (g_file_test ("/usr/sbin/smbd", G_FILE_TEST_EXISTS))
+        	tool->smb_available = TRUE;
 
-	services = oobs_services_config_get_services (OOBS_SERVICES_CONFIG (tool->services_config));
-	valid = oobs_list_get_iter_first (services, &iter);
-
-	while (valid) {
-		service = oobs_list_get (services, &iter);
-		role = gst_service_get_role (OOBS_SERVICE (service));
-
-		if (role == GST_ROLE_FILE_SERVER_SMB)
-			tool->smb_available = TRUE;
-		else if (role == GST_ROLE_FILE_SERVER_NFS)
-			tool->nfs_available = TRUE;
-
-		g_object_unref (service);
-		valid = oobs_list_iter_next (services, &iter);
-	}
+        if (g_file_test ("/usr/sbin/rpc.nfsd", G_FILE_TEST_EXISTS))
+		tool->nfs_available = TRUE;
 }
 
 GstSharesTool*
diff -pruN 3.0.0-2/src/shares/shares-tool.h 3.0.0-2ubuntu1/src/shares/shares-tool.h
--- 3.0.0-2/src/shares/shares-tool.h	2010-10-06 09:54:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/shares/shares-tool.h	2011-12-17 00:52:19.000000000 +0000
@@ -44,7 +44,6 @@ struct _GstSharesTool {
 	OobsObject *smb_config;
 
 	/* read only */
-	OobsObject *services_config;
 	OobsObject *hosts_config;
 	OobsObject *users_config;
 
diff -pruN 3.0.0-2/src/time/ntp-servers-list.c 3.0.0-2ubuntu1/src/time/ntp-servers-list.c
--- 3.0.0-2/src/time/ntp-servers-list.c	2010-12-12 12:16:01.000000000 +0000
+++ 3.0.0-2ubuntu1/src/time/ntp-servers-list.c	2011-12-17 00:52:19.000000000 +0000
@@ -34,33 +34,12 @@ enum {
 
 struct NtpServer {
 	const gchar *url;
-	const gchar *location;
 } ntp_servers [] = {
-	{ "time.nrc.ca", "Canada" },
-	{ "ntp1.cmc.ec.gc.ca", "Eastern Canada" },
-	{ "ntp2.cmc.ec.gc.ca", "Eastern Canada" },
-	{ "wuarchive.wustl.edu", "Missouri, USA" },
-	{ "clock.psu.edu", "Pennsylvania, USA" },
-	{ "ntp.tmc.edu", "Texas, USA" },
-	{ "louie.udel.edu", "Delaware, USA" },
-	{ "ntp0.cornell.edu", "New York, USA" },
-	{ "ntp-0.cso.uiuc.edu", "Illinois, USA" },
-	{ "ntp1.cs.wisc.edu", "Wisconsin, USA" },
-	{ "tick.cs.unlv.edu", "Las Vegas, USA" },
-	{ "ntp2a.mcc.ac.uk", "England, Europe" },
-	{ "ntp2b.mcc.ac.uk", "England, Europe" },
-	{ "ntp.maths.tcd.ie", "Ireland, Europe" },
-	{ "ntp.cs.strath.ac.uk", "Scotland, Europe" },
-	{ "ntp.univ-lyon1.fr", "France, Europe" },
-	{ "tick.keso.fi", "Finland, Europe" },
-	{ "fartein.ifi.uio.no", "Norway, Europe" },
-	{ "ntp.adelaide.edu.au", "South Australia" },
-	{ "time.nuri.net", "Korea, Asia" },
-	{ "ntp.cs.mu.oz.au", "Melbourne, Australia" },
-	{ "swisstime.ethz.ch", "Zurich, Switzerland" },
-	{ "stdtime.gov.hk", "Hong Kong, China" },
-	{ "ntp.jst.mfeed.ad.jp", "Japan" },
-	{ "time.service.uit.no", "Norway" },
+	{ "0.ubuntu.pool.ntp.org" },
+	{ "1.ubuntu.pool.ntp.org" },
+	{ "2.ubuntu.pool.ntp.org" },
+	{ "3.ubuntu.pool.ntp.org" },
+	{ "ntp.ubuntu.com" },
 	{ NULL }
 };
 
@@ -72,7 +51,7 @@ populate_model (GtkListStore *store)
 	gint i;
 
 	for (i = 0; ntp_servers[i].url; i++) {
-		str = g_strdup_printf ("%s (%s)", ntp_servers[i].url, ntp_servers[i].location);
+		str = g_strdup_printf ("%s", ntp_servers[i].url);
 
 		gtk_list_store_append (store, &iter);
 		gtk_list_store_set (store, &iter,
diff -pruN 3.0.0-2/src/time/time-tool.c 3.0.0-2ubuntu1/src/time/time-tool.c
--- 3.0.0-2/src/time/time-tool.c	2010-12-12 17:35:29.000000000 +0000
+++ 3.0.0-2ubuntu1/src/time/time-tool.c	2011-12-17 00:52:19.000000000 +0000
@@ -370,6 +370,7 @@ check_ntp_support (GstTool  *tool)
 {
 	GstTimeToolPrivate *priv = GST_TIME_TOOL_GET_PRIVATE (tool);
 	GtkWidget *message, *widget;
+	gint response;
 
 	if (GST_TIME_TOOL (tool)->ntp_service)
 		return TRUE;
@@ -396,9 +397,24 @@ check_ntp_support (GstTool  *tool)
 						  _("Please install and activate NTP support in the system to enable "
 						    "synchronization of your local time server with "
 						    "internet time servers."));
-	gtk_dialog_run (GTK_DIALOG (message));
+
+	gtk_dialog_add_button (GTK_DIALOG (message), _("Install NTP support"), GTK_RESPONSE_OK);
+	response = gtk_dialog_run (GTK_DIALOG (message));
 	gtk_widget_destroy (message);
 
+	if (response == GTK_RESPONSE_OK) {
+		const gchar *packages[] = { "ntp", NULL };
+
+		if (gst_packages_install (GTK_WINDOW (tool->main_dialog), packages)) {
+			gtk_combo_box_set_active (GTK_COMBO_BOX (widget), CONFIGURATION_AUTOMATIC);
+			gst_tool_update_config (tool);
+			gst_tool_update_gui (tool);
+
+			if (GST_TIME_TOOL (tool)->ntp_service)
+				return TRUE;
+		}
+	}
+
 	return FALSE;
 }
 
diff -pruN 3.0.0-2/src/time/tz-map.c 3.0.0-2ubuntu1/src/time/tz-map.c
--- 3.0.0-2/src/time/tz-map.c	2010-10-06 09:54:53.000000000 +0000
+++ 3.0.0-2ubuntu1/src/time/tz-map.c	2011-12-17 00:52:19.000000000 +0000
@@ -416,7 +416,8 @@ button_pressed (GtkWidget *w, GdkEventBu
 		        e_map_point_set_color_rgba (tzmap->map,
 						    tzmap->point_selected,
 						    TZ_MAP_POINT_NORMAL_RGBA);
-		tzmap->point_selected = tzmap->point_hover;
+		tzmap->point_selected =
+			e_map_get_closest_point (tzmap->map, longitude, latitude, FALSE);
 
 		location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
 		tz_location    = e_tz_map_location_from_point (tzmap, tzmap->point_selected);
diff -pruN 3.0.0-2/src/users/privileges-table.c 3.0.0-2ubuntu1/src/users/privileges-table.c
--- 3.0.0-2/src/users/privileges-table.c	2010-12-16 11:15:23.000000000 +0000
+++ 3.0.0-2ubuntu1/src/users/privileges-table.c	2011-12-17 00:52:19.000000000 +0000
@@ -67,6 +67,7 @@ static const PrivilegeDescription descri
 	{ "plugdev", N_("Access external storage devices automatically") },
 	{ "powerdev", N_("Suspend and hibernate the computer") },
 	{ "proc", N_("Access /proc filesystem") },
+	{ "sambashare", N_("Share files with the local network") },
 	{ "scanner", N_("Use scanners") },
 	{ "tape", N_("Use tape drives") },
 	{ "usb", N_("Use USB devices") },
diff -pruN 3.0.0-2/src/users/user-profiles.conf.in 3.0.0-2ubuntu1/src/users/user-profiles.conf.in
--- 3.0.0-2/src/users/user-profiles.conf.in	2010-10-06 09:54:17.000000000 +0000
+++ 3.0.0-2ubuntu1/src/users/user-profiles.conf.in	2011-12-17 00:52:19.000000000 +0000
@@ -2,9 +2,9 @@
 _Name=Desktop user
 _Description=Can perform common tasks. Can't install software or change settings affecting all users.
 Default=1
-Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,video
+Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,fuse,video
 
 [Administrator]
 _Name=Administrator
 _Description=Can change anything on the system, including installing and upgrading software.
-Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,audio,scanner,fuse,admin,sambashare,lpadmin,video
+Groups=cdrom,floppy,dialout,tape,dip,adm,plugdev,fax,fuse,admin,sambashare,lpadmin,video

