gnome-packagekit r538 - in trunk: . data data/icons/16x16/status data/icons/22x22/status data/icons/24x24/status data/icons/48x48/status data/icons/scalable/status po src



Author: rhughes
Date: Fri Apr  3 15:33:03 2009
New Revision: 538
URL: http://svn.gnome.org/viewvc/gnome-packagekit?rev=538&view=rev

Log:
from git, huge

Added:
   trunk/data/gpk-application.ui
   trunk/data/gpk-backend-status.ui
   trunk/data/gpk-client.ui
   trunk/data/gpk-error.ui
   trunk/data/gpk-eula.ui
   trunk/data/gpk-log.ui
   trunk/data/gpk-prefs.ui
   trunk/data/gpk-repo.ui
   trunk/data/gpk-service-pack.ui
   trunk/data/gpk-signature.ui
   trunk/data/gpk-update-viewer.ui
Removed:
   trunk/data/gpk-application.glade
   trunk/data/gpk-backend-status.glade
   trunk/data/gpk-client.glade
   trunk/data/gpk-error.glade
   trunk/data/gpk-eula.glade
   trunk/data/gpk-log.glade
   trunk/data/gpk-prefs.glade
   trunk/data/gpk-repo.glade
   trunk/data/gpk-service-pack.glade
   trunk/data/gpk-signature.glade
   trunk/data/gpk-update-viewer.glade
   trunk/data/gpk-update-viewer2.glade
   trunk/src/egg-string-list.c
   trunk/src/egg-string-list.h
   trunk/src/egg-unique.c
   trunk/src/egg-unique.h
   trunk/src/gpk-update-viewer2.c
Modified:
   trunk/NEWS
   trunk/configure.ac
   trunk/data/Makefile.am
   trunk/data/gpk-update-viewer.desktop.in
   trunk/data/icons/16x16/status/Makefile.am
   trunk/data/icons/22x22/status/Makefile.am
   trunk/data/icons/24x24/status/Makefile.am
   trunk/data/icons/48x48/status/Makefile.am
   trunk/data/icons/scalable/status/Makefile.am
   trunk/po/POTFILES.in
   trunk/src/Makefile.am
   trunk/src/gpk-application-main.c
   trunk/src/gpk-application.c
   trunk/src/gpk-backend-status.c
   trunk/src/gpk-cell-renderer-info.c
   trunk/src/gpk-cell-renderer-size.c
   trunk/src/gpk-check-update.c
   trunk/src/gpk-client-chooser.c
   trunk/src/gpk-client-dialog.c
   trunk/src/gpk-client-eula.c
   trunk/src/gpk-client-run.c
   trunk/src/gpk-client-signature.c
   trunk/src/gpk-client-untrusted.c
   trunk/src/gpk-client.c
   trunk/src/gpk-enum.c
   trunk/src/gpk-enum.h
   trunk/src/gpk-error.c
   trunk/src/gpk-helper-eula.c
   trunk/src/gpk-helper-repo-signature.c
   trunk/src/gpk-log.c
   trunk/src/gpk-prefs.c
   trunk/src/gpk-repo.c
   trunk/src/gpk-service-pack.c
   trunk/src/gpk-update-viewer.c
   trunk/src/gpk-watch.c

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Fri Apr  3 15:33:03 2009
@@ -1,3 +1,49 @@
+Version 2.27.1
+~~~~~~~~~~~~~~
+Released: 2000-03-30
+
+* Translations
+ - Added Romanian translation (Alex Szasz)
+ - Update Punjabi Translation (A S Alam)
+ - Update Portuguese translation (AntÃnio Lima)
+ - Update Spanish translation (Daniel Mustieles)
+ - Update Swedish translation (Daniel Mustieles)
+ - Update Hungarian translation (Gabor Kelemen)
+ - Update Brazilian Portuguese translation (Igor Pires Soares)
+ - Update Spanish manual translation (Jorge Gonzalez)
+ - Update Norwegian bokmÃl translation (Kjartan Maraas)
+ - Update Telugu Translation (Krishnababu K)
+ - Update Marathi Translation (Sandeep Shedmake)
+ - Update Finnish translation (Ville-Pekka Vainio)
+ - Update Simplified Chinise translation (Wei Mingzhi)
+
+* New Features:
+ - Switch gnome-packagekit to the GNOME release guidelines and version numbers (Richard Hughes)
+ - Provide tooltips for the icons in the new update viewer (Richard Hughes)
+ - Add a new menu item 'Select security updates' to the new update viewer. Fixes rh#491713 (Richard Hughes)
+ - Hide the update icon notification when the update viewer is opened (Richard Hughes)
+ - Switch the default update viewer to gpk-update-viewer2 (Richard Hughes)
+
+* Bugfix:
+ - Fix some window icons in gpk-repo (Matthias Clasen)
+ - Don't set the default widget to the install button when we reconsider. Fixes rh#492645 (Matthias Clasen)
+ - Don't scroll to the downloading object, it makes Matthias sick (Richard Hughes)
+ - Fix the MimeType entry of gpk-install-catalog. Fixes rh#489473 (Richard Hughes)
+ - Set an icon for gpk-backend-status. Fixes fd#20681 (Richard Hughes)
+ - Make gpk-applcation file list resizable, and a good default size. Fixes rh#490334 (Richard Hughes)
+ - Don't use newline as a paragraph spacer in the Markdown parser (Richard Hughes)
+ - The changelog data is markup formatted, so use the markdown parser before displaying (Richard Hughes)
+ - Don't escape markdown code sections, and enable autocode for certain special words (Richard Hughes)
+ - Make the new update viewer respond to PkControl::updates-changed and update the update list (Richard Hughes)
+ - Set an initial size of the update viewer using gpk_window_set_size_request. Fixes rh#491422 (Richard Hughes)
+ - Wrap the header text to allow the new update viewer to be made much smaller (Richard Hughes)
+ - Don't resize the main window when no updates are available, use a modal window. Fixes rh#491708 (Richard Hughes)
+ - If the new update viewer is running in a transaction when it's closed, just hide the window (Richard Hughes)
+ - Don't set the model with finished, as working round it in the CellRenderer breaks things (Richard Hughes)
+ - Allow gpk-update-icon to be run in XFCE. Fixes rh#491104 (Richard Hughes)
+ - Set the update viewer title properly when there are no updates. Fixes rh#492096 (Richard Hughes)
+ - After we've applied updates, close the UI rather than getting the new update list. Fixes rh#491710 (Richard Hughes)
+
 Version 0.4.5
 ~~~~~~~~~~~~~
 Released: 2000-03-09

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Fri Apr  3 15:33:03 2009
@@ -1,6 +1,6 @@
 AC_PREREQ(2.52)
 
-AC_INIT(gnome-packagekit, 2.27.1)
+AC_INIT(gnome-packagekit, 2.27.2)
 AC_CONFIG_SRCDIR(src)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 AM_CONFIG_HEADER(config.h)
@@ -38,7 +38,6 @@
 #	CPPFLAGS="$CPPFLAGS -Wmissing-declarations"
 	CPPFLAGS="$CPPFLAGS -Wno-uninitialized"
 	CPPFLAGS="$CPPFLAGS -Wredundant-decls"
-#	CPPFLAGS="$CPPFLAGS -Wmissing-noreturn"
 	CPPFLAGS="$CPPFLAGS -Wshadow"
 	CPPFLAGS="$CPPFLAGS -Wpointer-arith"
 	CPPFLAGS="$CPPFLAGS -Wcast-align"
@@ -46,7 +45,6 @@
 	CPPFLAGS="$CPPFLAGS -Winline"
 	CPPFLAGS="$CPPFLAGS -Wformat-nonliteral"
 	CPPFLAGS="$CPPFLAGS -Wformat-security"
-#	CPPFLAGS="$CPPFLAGS -Wswitch-enum"
 	CPPFLAGS="$CPPFLAGS -Wswitch-default"
 	CPPFLAGS="$CPPFLAGS -Winit-self"
 	CPPFLAGS="$CPPFLAGS -Wmissing-include-dirs"
@@ -81,16 +79,15 @@
 dnl ---------------------------------------------------------------------------
 PACKAGEKIT_REQUIRED=0.4.4
 GLIB_REQUIRED=2.14.0
-GTK_REQUIRED=2.12.0
+GTK_REQUIRED=2.15.0
 DBUS_REQUIRED=1.1.2
 GCONF_REQUIRED=0.22
 DBUS_GLIB_REQUIRED=0.73
-LIBGLADE_REQUIRED=2.5.0
 LIBNOTIFY_REQUIRED=0.4.3
-LIBSEXY_REQUIRED=0.1.10
 POLKIT_GNOME_REQUIRED=0.8
-UNIQUE_REQUIRED=0.9.4
+UNIQUE_REQUIRED=1.0.0
 GNOME_MENUS_REQUIRED=2.24.1
+GIO_REQUIRED=2.18.0
 
 dnl ---------------------------------------------------------------------------
 dnl - Make above strings available for packaging files (e.g. rpm spec files)
@@ -100,12 +97,11 @@
 AC_SUBST(GTK_REQUIRED)
 AC_SUBST(DBUS_REQUIRED)
 AC_SUBST(DBUS_GLIB_REQUIRED)
-AC_SUBST(LIBGLADE_REQUIRED)
 AC_SUBST(LIBNOTIFY_REQUIRED)
-AC_SUBST(LIBSEXY_REQUIRED)
 AC_SUBST(POLKIT_GNOME_REQUIRED)
 AC_SUBST(UNIQUE_REQUIRED)
 AC_SUBST(GNOME_MENUS_REQUIRED)
+AC_SUBST(GIO_REQUIRED)
 
 dnl ---------------------------------------------------------------------------
 dnl - Check library dependencies
@@ -122,7 +118,7 @@
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
-PKG_CHECK_MODULES(GIO, gio-2.0)
+PKG_CHECK_MODULES(GIO, gio-2.0 >= $GIO_REQUIRED)
 AC_SUBST(GIO_CFLAGS)
 AC_SUBST(GIO_LIBS)
 
@@ -138,11 +134,6 @@
 AC_SUBST(GTK_CFLAGS)
 AC_SUBST(GTK_LIBS)
 
-PKG_CHECK_MODULES(LIBGLADE, \
- libglade-2.0 >= $LIBGLADE_REQUIRED)
-AC_SUBST(LIBGLADE_CFLAGS)
-AC_SUBST(LIBGLADE_LIBS)
-
 PKG_CHECK_MODULES(GCONF, \
  gconf-2.0 >= $GCONF_REQUIRED)
 AC_SUBST(GCONF_CFLAGS)
@@ -158,34 +149,10 @@
 AC_SUBST(GNOME_MENUS_CFLAGS)
 AC_SUBST(GNOME_MENUS_LIBS)
 
-dnl ---------------------------------------------------------------------------
-dnl - Is a new enough GTK available for the SexyIconEntry replacement?
-dnl ---------------------------------------------------------------------------
-if $PKG_CONFIG --atleast-version 2.15.0 gtk+-2.0; then
-   echo "using built in replacement"
-else
-   PKG_CHECK_MODULES(LIBSEXY, libsexy >= $LIBSEXY_REQUIRED)
-   AC_SUBST(LIBSEXY_CFLAGS)
-   AC_SUBST(LIBSEXY_LIBS)
-fi
-
-dnl ---------------------------------------------------------------------------
-dnl - Check for g_file_make_directory_with_parents
-dnl ---------------------------------------------------------------------------
-OLDCPPFLAGS=$CPPFLAGS
-CPPFLAGS=$GIO_CFLAGS
-LIBS=$GIO_LIBS
-AC_CHECK_FUNCS(g_file_make_directory_with_parents)
-CPPFLAGS=$OLDCPPFLAGS
-
-dnl ---------------------------------------------------------------------------
-dnl - Check for gtk_dialog_get_action_area
-dnl ---------------------------------------------------------------------------
-OLDCPPFLAGS=$CPPFLAGS
-CPPFLAGS=$GTK_CFLAGS
-LIBS=$GTK_LIBS
-AC_CHECK_FUNCS(gtk_dialog_get_action_area)
-CPPFLAGS=$OLDCPPFLAGS
+PKG_CHECK_MODULES(UNIQUE, \
+ unique-1.0 >= $UNIQUE_REQUIRED)
+AC_SUBST(UNIQUE_CFLAGS)
+AC_SUBST(UNIQUE_LIBS)
 
 AC_PATH_PROG(GCONFTOOL, gconftool-2)
 AM_GCONF_SOURCE_2
@@ -225,21 +192,6 @@
 AM_CONDITIONAL(HAVE_DOCBOOK2MAN, [test "$DOCBOOK2MAN" != "no"])
 
 dnl ---------------------------------------------------------------------------
-dnl - Is unique available?
-dnl ---------------------------------------------------------------------------
-if $PKG_CONFIG --atleast-version $UNIQUE_REQUIRED unique-1.0; then
-   have_unique=yes
-   PKG_CHECK_MODULES(UNIQUE, unique-1.0 >= $UNIQUE_REQUIRED)
-   AC_SUBST(UNIQUE_CFLAGS)
-   AC_SUBST(UNIQUE_LIBS)
-   AC_DEFINE(HAVE_UNIQUE, 1, [Building with unique support])
-else
-   have_unique=no
-   AC_DEFINE(HAVE_UNIQUE, 0, [Not building with unique support])
-fi
-AM_CONDITIONAL([HAVE_UNIQUE], [test $have_unique = yes])
-
-dnl ---------------------------------------------------------------------------
 dnl - Build self tests
 dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests],[enable unit test code]),

Modified: trunk/data/Makefile.am
==============================================================================
--- trunk/data/Makefile.am	(original)
+++ trunk/data/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -28,18 +28,17 @@
 autostart_DATA = $(autostart_in_files:.desktop.in=.desktop)
 
 pkgdata_DATA =						\
-	gpk-repo.glade					\
-	gpk-eula.glade					\
-	gpk-application.glade				\
-	gpk-update-viewer.glade				\
-	gpk-update-viewer2.glade			\
-	gpk-prefs.glade					\
-	gpk-service-pack.glade				\
-	gpk-signature.glade				\
-	gpk-error.glade					\
-	gpk-log.glade					\
-	gpk-backend-status.glade			\
-	gpk-client.glade				\
+	gpk-repo.ui					\
+	gpk-eula.ui					\
+	gpk-application.ui				\
+	gpk-update-viewer.ui				\
+	gpk-prefs.ui					\
+	gpk-service-pack.ui				\
+	gpk-signature.ui				\
+	gpk-error.ui					\
+	gpk-log.ui					\
+	gpk-backend-status.ui				\
+	gpk-client.ui					\
 	$(NULL)
 
 EXTRA_DIST =						\

Added: trunk/data/gpk-application.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-application.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,761 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="window_manager">
+    <property name="title" translatable="yes">Add/Remove Software</property>
+    <property name="window_position">center</property>
+    <property name="icon_name">gtk-info</property>
+    <child>
+      <object class="GtkVBox" id="vbox1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkMenuBar" id="menubar1">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <object class="GtkMenuItem" id="menuitem_system">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_System</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu8">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_sources">
+                        <property name="label">Software sources</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Edit list of software sources</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_refresh">
+                        <property name="label">Refresh package lists</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Refresh the list of packages on the system</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_quit">
+                        <property name="label">gtk-quit</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem2">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">_Filters</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu2">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_installed">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">_Installed</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu3">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_installed_yes">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Only _installed</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_installed_no">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Only _available</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_installed_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_installed_both">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="active">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_installed_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_devel">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">_Development</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu4">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_devel_yes">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Only _development</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_devel_no">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Only _end user files</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_devel_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_devel_both">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="active">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_devel_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_gui">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">_Graphical</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu5">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_gui_yes">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_Only graphical</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_gui_no">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_Only text</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_gui_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_gui_both">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="active">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_gui_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_free">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">_Free</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu6">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_free_yes">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_Only free software</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_free_no">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Only _non-free software</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_free_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_free_both">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="active">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_free_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_arch">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">_Architectures</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu1">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_arch_yes">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">_Only native architectures</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_arch_no">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">_Only non-native architectures</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_arch_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_arch_both">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_arch_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="menuitem_source">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">_Source</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu7">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_source_yes">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">_Only sourcecode</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_source_no">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Only _non-sourcecode</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_source_yes</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="menuitem_source_both">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">_No filter</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">menuitem_source_yes</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckMenuItem" id="menuitem_basename">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="tooltip_text" translatable="yes">Only show one package, not subpackages</property>
+                        <property name="label" translatable="yes">_Hide subpackages</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckMenuItem" id="menuitem_newest">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="tooltip_text" translatable="yes">Only show the newest available package</property>
+                        <property name="label" translatable="yes">Only _newest packages</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem_selection">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Selection</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu9">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_install">
+                        <property name="label">Install</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_remove">
+                        <property name="label">Remove</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_homepage">
+                        <property name="label">Project homepage</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Visit the project homepage</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_run">
+                        <property name="label">Run program</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Execute graphical applications</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_files">
+                        <property name="label">Get file list</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_depends">
+                        <property name="label">Depends on</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_requires">
+                        <property name="label">Required by</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem_help_menu">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">_Help</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu_about">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_help">
+                        <property name="label">_Contents</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Help with this software</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="menuitem_about">
+                        <property name="label">gtk-about</property>
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="tooltip_text" translatable="yes">About this software</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <child>
+              <object class="GtkVBox" id="vbox2">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkVBox" id="vbox3">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox7">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkVBox" id="vbox_groups">
+                            <property name="visible">True</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <object class="GtkHBox" id="hbox26">
+                                <property name="visible">True</property>
+                                <property name="spacing">5</property>
+                                <child>
+                                  <object class="GtkEntry" id="entry_text">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="invisible_char">&#x25CF;</property>
+                                  </object>
+                                  <packing>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkNotebook" id="notebook_search_cancel">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="show_tabs">False</property>
+                                    <property name="show_border">False</property>
+                                    <property name="tab_border">0</property>
+                                    <property name="tab_hborder">0</property>
+                                    <property name="tab_vborder">0</property>
+                                    <child>
+                                      <object class="GtkButton" id="button_find">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <child>
+                                          <object class="GtkLabel" id="label_button_find">
+                                            <property name="visible">True</property>
+                                            <property name="label" translatable="yes">Fi_nd</property>
+                                            <property name="use_underline">True</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                    </child>
+                                    <child type="tab">
+                                      <object class="GtkLabel" id="label_find">
+                                        <property name="visible">True</property>
+                                        <property name="label">find</property>
+                                      </object>
+                                      <packing>
+                                        <property name="tab_fill">False</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="button_cancel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <child>
+                                          <object class="GtkLabel" id="label_button_cancel">
+                                            <property name="visible">True</property>
+                                            <property name="label" translatable="yes">_Cancel</property>
+                                            <property name="use_underline">True</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child type="tab">
+                                      <object class="GtkLabel" id="label_cancel">
+                                        <property name="visible">True</property>
+                                        <property name="label">cancel</property>
+                                      </object>
+                                      <packing>
+                                        <property name="position">1</property>
+                                        <property name="tab_fill">False</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</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="GtkScrolledWindow" id="scrolledwindow_groups">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hscrollbar_policy">never</property>
+                                <property name="vscrollbar_policy">automatic</property>
+                                <property name="shadow_type">in</property>
+                                <child>
+                                  <object class="GtkTreeView" id="treeview_groups">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="border_width">3</property>
+                                    <property name="headers_visible">False</property>
+                                    <property name="enable_search">False</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox_status">
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkLabel" id="label_status">
+                                    <property name="visible">True</property>
+                                    <property name="label">Querying</property>
+                                    <property name="use_markup">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="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkVBox" id="vbox4">
+                            <property name="visible">True</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <object class="GtkScrolledWindow" id="scrolledwindow_packages">
+                                <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="treeview_packages">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="headers_visible">False</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox_packages">
+                                <property name="visible">True</property>
+                                <property name="spacing">6</property>
+                                <property name="homogeneous">True</property>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow2">
+                                    <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="GtkTextView" id="textview_description">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="border_width">2</property>
+                                        <property name="editable">False</property>
+                                        <property name="wrap_mode">word</property>
+                                        <property name="cursor_visible">False</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow_detail">
+                                    <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="treeview_detail">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="headers_visible">False</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="padding">6</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHButtonBox" id="hbuttonbox1">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <property name="layout_style">end</property>
+                    <child>
+                      <object class="GtkButton" id="button_help">
+                        <property name="label">gtk-help</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                        <property name="secondary">True</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="button_clear">
+                        <property name="label">gtk-clear</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="button_apply">
+                        <property name="label">gtk-apply</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_stock">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="padding">6</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="padding">12</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="padding">6</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

Added: trunk/data/gpk-backend-status.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-backend-status.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,1043 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+  <object class="GtkDialog" id="dialog_backend">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Backend Status</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox_rows">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">7</property>
+            <child>
+              <object class="GtkFrame" id="frame4">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment8">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkTable" id="table4">
+                        <property name="visible">True</property>
+                        <property name="border_width">5</property>
+                        <property name="n_rows">2</property>
+                        <property name="n_columns">2</property>
+                        <property name="column_spacing">5</property>
+                        <property name="row_spacing">5</property>
+                        <child>
+                          <object class="GtkLabel" id="label_author">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label">Richard Hughes</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"/>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label_name">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label">Dummy</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"/>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label20">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Backend author:</property>
+                          </object>
+                          <packing>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"/>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label19">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Backend name:</property>
+                          </object>
+                          <packing>
+                            <property name="y_options"/>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label22">
+                    <property name="visible">True</property>
+                    <property name="label">&lt;b&gt;General&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame3">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment7">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox1">
+                        <property name="visible">True</property>
+                        <property name="border_width">5</property>
+                        <property name="spacing">10</property>
+                        <property name="homogeneous">True</property>
+                        <child>
+                          <object class="GtkTable" id="table5">
+                            <property name="visible">True</property>
+                            <property name="n_rows">9</property>
+                            <property name="n_columns">2</property>
+                            <property name="column_spacing">5</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkLabel" id="label45">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Resolve:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">8</property>
+                                <property name="bottom_attach">9</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_resolve">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">8</property>
+                                <property name="bottom_attach">9</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label37">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Cancel </property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">7</property>
+                                <property name="bottom_attach">8</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_cancel">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">7</property>
+                                <property name="bottom_attach">8</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_search_file">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">6</property>
+                                <property name="bottom_attach">7</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_search_group">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_search_details">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_search_name">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_system_update">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_refresh_cache">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_updates">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label28">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">SearchFile:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">6</property>
+                                <property name="bottom_attach">7</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label27">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">SearchGroup:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label26">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">SearchDetails:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label25">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">SearchName:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label17">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">UpdateSystem:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label16">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">RefreshCache:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label15">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetUpdates:</property>
+                              </object>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkTable" id="table6">
+                            <property name="visible">True</property>
+                            <property name="n_rows">9</property>
+                            <property name="n_columns">2</property>
+                            <property name="column_spacing">5</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkImage" id="image_get_files">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">7</property>
+                                <property name="bottom_attach">8</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label49">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetFiles:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">7</property>
+                                <property name="bottom_attach">8</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_file_install">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">8</property>
+                                <property name="bottom_attach">9</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label44">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">InstallFile:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">8</property>
+                                <property name="bottom_attach">9</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label38">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetDescription:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">6</property>
+                                <property name="bottom_attach">7</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_description">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">6</property>
+                                <property name="bottom_attach">7</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_update_detail">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_requires">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_depends">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_package_remove">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_package_install">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_package_update">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label31">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetUpdate Detail:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">5</property>
+                                <property name="bottom_attach">6</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label30">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetRequires:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label29">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetDepends:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label32">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">RemovePackage:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label33">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">InstallPackage:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label34">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">UpdatePackage:</property>
+                              </object>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkTable" id="table7">
+                            <property name="visible">True</property>
+                            <property name="n_rows">5</property>
+                            <property name="n_columns">2</property>
+                            <property name="column_spacing">5</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkImage" id="image_what_provides">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label2">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">WhatProvides:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_repo_list">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_repo_set_data">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_repo_enable">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label48">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">RepositorySetData:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label47">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">RepositoryEnable:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label46">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetRepositoryList:</property>
+                              </object>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_get_packages">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label8">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GetPackages</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">4</property>
+                                <property name="bottom_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label18">
+                    <property name="visible">True</property>
+                    <property name="label">&lt;b&gt;Methods&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame2">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment6">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox2">
+                        <property name="visible">True</property>
+                        <property name="border_width">5</property>
+                        <property name="spacing">10</property>
+                        <child>
+                          <object class="GtkTable" id="table2">
+                            <property name="visible">True</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">8</property>
+                            <property name="column_spacing">5</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkLabel" id="label7">
+                                <property name="visible">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">7</property>
+                                <property name="right_attach">8</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label1">
+                                <property name="visible">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">6</property>
+                                <property name="right_attach">7</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_supported">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_visible">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label5">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Supported:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label4">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Visible:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_free">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label50">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Free:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_devel">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label13">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Development:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_installed">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label12">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Installed:</property>
+                              </object>
+                              <packing>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_gui">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label14">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">GUI:</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="image_newest">
+                                <property name="visible">True</property>
+                                <property name="icon_name">gtk-dialog-error</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">7</property>
+                                <property name="right_attach">8</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label3">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label">Newest:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">6</property>
+                                <property name="right_attach">7</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label11">
+                    <property name="visible">True</property>
+                    <property name="label">&lt;b&gt;Filters&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_close</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-client.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-client.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,240 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="dialog_client">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Install Package</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="icon_name">system-software-update</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkHBox" id="hbox2">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">12</property>
+            <child>
+              <object class="GtkVBox" id="vbox8">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkHBox" id="hbox_status">
+                    <property name="visible">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </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">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox9">
+                <property name="visible">True</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkHBox" id="hbox3">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkLabel" id="label_title">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;Totem requires (Downloading)&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                        <property name="wrap">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkProgressBar" id="progressbar_percent">
+                    <property name="visible">True</property>
+                    <property name="pulse_step">0.10000000149</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVBox" id="vbox10">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox_message">
+                        <property name="visible">True</property>
+                        <child>
+                          <object class="GtkLabel" id="label_message">
+                            <property name="visible">True</property>
+                            <property name="label">Some &lt;b&gt;extra&lt;/b&gt; codecs are required:</property>
+                            <property name="use_markup">True</property>
+                            <property name="wrap">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label_force_height">
+                            <property name="height_request">50</property>
+                            <property name="visible">True</property>
+                            <property name="label"> </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_force_width">
+                    <property name="width_request">400</property>
+                    <property name="height_request">1</property>
+                    <property name="visible">True</property>
+                    <property name="label"> </property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow_packages">
+                    <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="treeview_packages">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="padding">6</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</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>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_action">
+                <property name="label">Action</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </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="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_cancel</action-widget>
+      <action-widget response="0">button_close</action-widget>
+      <action-widget response="0">button_action</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-error.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-error.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+  <object class="GtkDialog" id="dialog_error">
+    <property name="border_width">6</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="spacing">9</property>
+            <child>
+              <object class="GtkVBox" id="vbox2">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkImage" id="image1">
+                    <property name="visible">True</property>
+                    <property name="stock">gtk-dialog-warning</property>
+                    <property name="icon_size">6</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox3">
+                <property name="visible">True</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkHBox" id="hbox2">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkLabel" id="label_title">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;Failed to install package&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox3">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkLabel" id="label_message">
+                        <property name="visible">True</property>
+                        <property name="label">The human readable error message.</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkExpander" id="expander_details">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                        <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                        <property name="shadow_type">GTK_SHADOW_IN</property>
+                        <child>
+                          <object class="GtkTextView" id="textview_details">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="editable">False</property>
+                            <property name="wrap_mode">GTK_WRAP_WORD</property>
+                            <property name="cursor_visible">False</property>
+                            <property name="accepts_tab">False</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label1">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">&lt;b&gt;More details&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_close</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-eula.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-eula.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,169 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+  <object class="GtkDialog" id="dialog_eula">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">License Agreement Required</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkTable" id="table1">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="n_rows">2</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">9</property>
+            <property name="row_spacing">12</property>
+            <child>
+              <object class="GtkVBox" id="vbox3">
+                <property name="visible">True</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkHBox" id="hbox2">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkLabel" id="label_title">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;License required for foo-devel by Acme Corp.&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_message">
+                    <property name="visible">True</property>
+                    <property name="label">Please read the following important information before continuing.</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="image1">
+                <property name="visible">True</property>
+                <property name="stock">gtk-dialog-warning</property>
+                <property name="icon_size">6</property>
+              </object>
+              <packing>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow1">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                <property name="shadow_type">GTK_SHADOW_IN</property>
+                <child>
+                  <object class="GtkTextView" id="textview_details">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="editable">False</property>
+                    <property name="wrap_mode">GTK_WRAP_WORD</property>
+                    <property name="cursor_visible">False</property>
+                    <property name="accepts_tab">False</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label">gtk-help</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_cancel">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_agree">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="label" translatable="yes">_Accept Agreement</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_cancel</action-widget>
+      <action-widget response="0">button_agree</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-log.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-log.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,141 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="dialog_simple">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Software Log Viewer</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">9</property>
+            <child>
+              <object class="GtkHBox" id="hbox_filter">
+                <property name="visible">True</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkEntry" id="entry_package">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="button_filter">
+                    <property name="label" translatable="yes">Filter</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow_simple">
+                <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="treeview_simple">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="rules_hint">True</property>
+                    <property name="show_expanders">False</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</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>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_refresh">
+                <property name="label">gtk-refresh</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="is_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">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_refresh</action-widget>
+      <action-widget response="0">button_close</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-prefs.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-prefs.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="dialog_prefs">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Software Update Preferences</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox4">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">18</property>
+            <child>
+              <object class="GtkVBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <object class="GtkLabel" id="label_check">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Update Settings&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment1">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkVBox" id="vbox8">
+                        <property name="visible">True</property>
+                        <property name="spacing">5</property>
+                        <child>
+                          <object class="GtkTable" id="table1">
+                            <property name="visible">True</property>
+                            <property name="n_rows">3</property>
+                            <property name="n_columns">2</property>
+                            <property name="column_spacing">20</property>
+                            <property name="row_spacing">5</property>
+                            <child>
+                              <object class="GtkComboBox" id="combobox_check">
+                                <property name="visible">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkComboBox" id="combobox_install">
+                                <property name="visible">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_install">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">_Automatically install:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">combobox_install</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_check1">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">C_heck for updates:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">combobox_check</property>
+                              </object>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_upgrade">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Check for major _upgrades:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">combobox_check</property>
+                              </object>
+                              <packing>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkComboBox" id="combobox_upgrade">
+                                <property name="visible">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="bottom_attach">3</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkCheckButton" id="checkbutton_mobile_broadband">
+                            <property name="label" translatable="yes">Check for updates when using mobile broadband</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkHBox" id="hbox_mobile_broadband">
+                            <property name="spacing">9</property>
+                            <child>
+                              <object class="GtkImage" id="image1">
+                                <property name="visible">True</property>
+                                <property name="stock">gtk-dialog-info</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label1">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">&lt;i&gt;Currently using mobile broadband&lt;/i&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox3">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <object class="GtkLabel" id="label_notify2">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes" comments="section for notifications">&lt;b&gt;Display Notification&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment3">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkVBox" id="vbox2">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkCheckButton" id="checkbutton_notify_updates">
+                            <property name="label" translatable="yes">When _updates are available</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkCheckButton" id="checkbutton_notify_completed">
+                            <property name="label" translatable="yes">When long _tasks have completed</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</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>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</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">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_close</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-repo.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-repo.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,134 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="dialog_repo">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Software Sources</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow_repo">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="treeview_repo">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkViewport" id="viewport_animation_preview">
+                <property name="resize_mode">queue</property>
+                <child>
+                  <object class="GtkHBox" id="hbox_animation">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label_animation">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;Another system update is in progress&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="checkbutton_detail">
+                <property name="label" translatable="yes" comments="shows extra -source, -debuginfo, and -devel software sources">_Show debug and development software sources</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Shows more software sources that may be interesting</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</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>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</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">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_close</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-service-pack.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-service-pack.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,297 @@
+<?xml version="1.0"?>
+<!--Generated with glade3 3.4.5 on Mon Nov 17 12:50:47 2008 -->
+<interface>
+  <object class="GtkDialog" id="dialog_pack">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Service Pack Creator</property>
+    <property name="resizable">False</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">9</property>
+            <child>
+              <object class="GtkFrame" id="frame_type">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment1">
+                    <property name="visible">True</property>
+                    <property name="top_padding">9</property>
+                    <property name="bottom_padding">6</property>
+                    <property name="left_padding">21</property>
+                    <child>
+                      <object class="GtkVBox" id="vbox3">
+                        <property name="visible">True</property>
+                        <property name="spacing">3</property>
+                        <child>
+                          <object class="GtkRadioButton" id="radiobutton_copy">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Create a copy of this computers package list</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">radiobutton_updates</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="radiobutton_updates">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Create an archive of all the pending updates</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="radiobutton_package">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Create an archive of a specific package</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">radiobutton_updates</property>
+                          </object>
+                          <packing>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkAlignment" id="alignment4">
+                            <property name="visible">True</property>
+                            <property name="left_padding">22</property>
+                            <child>
+                              <object class="GtkEntry" id="entry_package">
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">3</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label8">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Action&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame_details">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment2">
+                    <property name="visible">True</property>
+                    <property name="top_padding">9</property>
+                    <property name="left_padding">21</property>
+                    <child>
+                      <object class="GtkTable" id="table1">
+                        <property name="visible">True</property>
+                        <property name="n_rows">2</property>
+                        <property name="n_columns">2</property>
+                        <property name="column_spacing">6</property>
+                        <property name="row_spacing">6</property>
+                        <child>
+                          <object class="GtkHBox" id="hbox1">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkLabel" id="label9">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Output directory:</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkHBox" id="hbox3">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkLabel" id="label2">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Destination package list:</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="x_options">GTK_FILL</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFileChooserButton" id="filechooserbutton_exclude">
+                            <property name="visible">True</property>
+                            <property name="do_overwrite_confirmation">True</property>
+                            <property name="preview_widget_active">False</property>
+                            <property name="local_only">False</property>
+                            <property name="title" translatable="yes">Select A Package List File</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFileChooserButton" id="filechooserbutton_directory">
+                            <property name="visible">True</property>
+                            <property name="use_preview_label">False</property>
+                            <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
+                            <property name="do_overwrite_confirmation">True</property>
+                            <property name="preview_widget_active">False</property>
+                            <property name="local_only">False</property>
+                            <property name="title" translatable="yes">Save New Service Pack</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Details&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame_progress">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment3">
+                    <property name="visible">True</property>
+                    <property name="top_padding">9</property>
+                    <property name="left_padding">21</property>
+                    <child>
+                      <object class="GtkProgressBar" id="progressbar_percentage">
+                        <property name="visible">True</property>
+                        <property name="show_text">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label10">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Progress&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label">gtk-help</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_create">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="has_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label" translatable="yes">Create</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">radiobutton_copy</action-widget>
+      <action-widget response="0">radiobutton_updates</action-widget>
+      <action-widget response="0">radiobutton_package</action-widget>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_close</action-widget>
+      <action-widget response="0">button_create</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Added: trunk/data/gpk-signature.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-signature.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,232 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+  <object class="GtkDialog" id="dialog_gpg">
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Software signature is required</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox2">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="spacing">12</property>
+            <child>
+              <object class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Do you trust the source of the packages?&lt;/b&gt;&lt;/big&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTable" id="table1">
+                <property name="visible">True</property>
+                <property name="n_rows">4</property>
+                <property name="n_columns">2</property>
+                <property name="column_spacing">12</property>
+                <property name="row_spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Repository name:</property>
+                  </object>
+                  <packing>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label4">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Signature URL:</property>
+                  </object>
+                  <packing>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label5">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Signature user identifier:</property>
+                  </object>
+                  <packing>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label6">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Signature identifier:</property>
+                  </object>
+                  <packing>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_url">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label">http://rpm.livna.org/</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_user">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label">Livna.org &lt;rpm livna org&gt;</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_id">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label">BB7576AC</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_name">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label">Livna.org Freeworld Repo</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="y_options"/>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Do you recognise the user and trust this key?</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-help</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_no">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_yes">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-yes</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button_help</action-widget>
+      <action-widget response="0">button_no</action-widget>
+      <action-widget response="0">button_yes</action-widget>
+    </action-widgets>
+  </object>
+</interface>

Modified: trunk/data/gpk-update-viewer.desktop.in
==============================================================================
--- trunk/data/gpk-update-viewer.desktop.in	(original)
+++ trunk/data/gpk-update-viewer.desktop.in	Fri Apr  3 15:33:03 2009
@@ -4,7 +4,7 @@
 _GenericName=Software Update Viewer
 _Comment=Update software installed on the system
 Icon=system-software-update
-Exec=gpk-update-viewer2
+Exec=gpk-update-viewer
 Terminal=false
 Type=Application
 Categories=GNOME;GTK;Settings;System;PackageManager;

Added: trunk/data/gpk-update-viewer.ui
==============================================================================
--- (empty file)
+++ trunk/data/gpk-update-viewer.ui	Fri Apr  3 15:33:03 2009
@@ -0,0 +1,394 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.16 -->
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkDialog" id="dialog_updates">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Update System</property>
+    <property name="window_position">center</property>
+    <property name="icon_name">software-update-available</property>
+    <property name="type_hint">normal</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkHBox" id="hbox_header">
+                <property name="visible">True</property>
+                <property name="spacing">9</property>
+                <child>
+                  <object class="GtkImage" id="image_header">
+                    <property name="visible">True</property>
+                    <property name="pixel_size">48</property>
+                    <property name="icon_name">system-software-update</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVBox" id="vbox2">
+                    <property name="visible">True</property>
+                    <property name="border_width">6</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox_header_title">
+                        <property name="visible">True</property>
+                        <child>
+                          <object class="GtkLabel" id="label_header_title">
+                            <property name="visible">True</property>
+                            <property name="label">&lt;big&gt;&lt;b&gt;There are updates available&lt;/b&gt;&lt;/big&gt;</property>
+                            <property name="use_markup">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="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label_header_desc">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">Software updates correct errors, eliminate security vulnerabilities and provide new features.</property>
+                        <property name="wrap">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkViewport" id="viewport_upgrade">
+                <property name="visible">True</property>
+                <property name="resize_mode">queue</property>
+                <property name="shadow_type">out</property>
+                <child>
+                  <object class="GtkHBox" id="hbox_upgrade">
+                    <property name="visible">True</property>
+                    <property name="border_width">6</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label_upgrade">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;New distribution upgrade release available&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="button_upgrade">
+                        <property name="label" translatable="yes">_Upgrade</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_underline">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVPaned" id="vpaned_updates">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow_updates">
+                    <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="treeview_updates">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="rules_hint">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">True</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow_details">
+                    <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="GtkTextView" id="textview_details">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">True</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox4">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkHBox" id="hbox_status">
+                    <property name="visible">True</property>
+                    <property name="spacing">9</property>
+                    <child>
+                      <object class="GtkImage" id="image_progress">
+                        <property name="visible">True</property>
+                        <property name="stock">gtk-save</property>
+                        <property name="icon-size">5</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkVBox" id="vbox5">
+                        <property name="visible">True</property>
+                        <property name="orientation">vertical</property>
+                        <child>
+                          <object class="GtkHBox" id="hbox2">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkProgressBar" id="progressbar_progress">
+                                <property name="visible">True</property>
+                                <property name="fraction">0.5</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <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>
+                    <child>
+                      <object class="GtkLabel" id="label_status">
+                        <property name="visible">True</property>
+                        <property name="label">&lt;b&gt;Downloading:&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label_package">
+                        <property name="visible">True</property>
+                        <property name="label">data</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox_info">
+                    <property name="visible">True</property>
+                    <property name="spacing">9</property>
+                    <child>
+                      <object class="GtkImage" id="image_info">
+                        <property name="visible">True</property>
+                        <property name="stock">gtk-remove</property>
+                        <property name="icon-size">5</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label_info">
+                        <property name="visible">True</property>
+                        <property name="label">data that doesn't need the progressbar</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label_summary">
+                        <property name="visible">True</property>
+                        <property name="label">7 updates selected (45Mb)</property>
+                        <property name="use_markup">True</property>
+                        <property name="justify">right</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="has_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_install">
+                <property name="label">_Install Update(s)</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="has_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+              </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="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

Modified: trunk/data/icons/16x16/status/Makefile.am
==============================================================================
--- trunk/data/icons/16x16/status/Makefile.am	(original)
+++ trunk/data/icons/16x16/status/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -14,6 +14,7 @@
 	pk-package-blocked.png		\
 	pk-package-delete.png		\
 	pk-package-download.png		\
+	pk-package-downloaded.png	\
 	pk-package-search.png		\
 	pk-package-update.png		\
 	pk-package-info.png		\

Modified: trunk/data/icons/22x22/status/Makefile.am
==============================================================================
--- trunk/data/icons/22x22/status/Makefile.am	(original)
+++ trunk/data/icons/22x22/status/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -14,6 +14,7 @@
 	pk-package-blocked.png		\
 	pk-package-delete.png		\
 	pk-package-download.png		\
+	pk-package-downloaded.png	\
 	pk-package-search.png		\
 	pk-package-update.png		\
 	pk-package-info.png		\

Modified: trunk/data/icons/24x24/status/Makefile.am
==============================================================================
--- trunk/data/icons/24x24/status/Makefile.am	(original)
+++ trunk/data/icons/24x24/status/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -14,6 +14,7 @@
 	pk-package-blocked.png		\
 	pk-package-delete.png		\
 	pk-package-download.png		\
+	pk-package-downloaded.png	\
 	pk-package-search.png		\
 	pk-package-update.png		\
 	pk-package-info.png		\

Modified: trunk/data/icons/48x48/status/Makefile.am
==============================================================================
--- trunk/data/icons/48x48/status/Makefile.am	(original)
+++ trunk/data/icons/48x48/status/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -14,6 +14,7 @@
 	pk-package-blocked.png		\
 	pk-package-delete.png		\
 	pk-package-download.png		\
+	pk-package-downloaded.png	\
 	pk-package-search.png		\
 	pk-package-update.png		\
 	pk-package-info.png		\

Modified: trunk/data/icons/scalable/status/Makefile.am
==============================================================================
--- trunk/data/icons/scalable/status/Makefile.am	(original)
+++ trunk/data/icons/scalable/status/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -14,6 +14,7 @@
 	pk-package-blocked.svg		\
 	pk-package-delete.svg		\
 	pk-package-download.svg		\
+	pk-package-downloaded.svg	\
 	pk-package-search.svg		\
 	pk-package-update.svg		\
 	pk-package-info.svg		\

Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in	(original)
+++ trunk/po/POTFILES.in	Fri Apr  3 15:33:03 2009
@@ -3,26 +3,25 @@
 # Please keep this file sorted alphabetically.
 data/gnome-packagekit.schemas.in
 data/gpk-application.desktop.in
-data/gpk-application.glade
-data/gpk-backend-status.glade
-data/gpk-client.glade
-data/gpk-error.glade
-data/gpk-eula.glade
+data/gpk-application.ui
+data/gpk-backend-status.ui
+data/gpk-client.ui
+data/gpk-error.ui
+data/gpk-eula.ui
 data/gpk-install-catalog.desktop.in
 data/gpk-install-file.desktop.in
 data/gpk-log.desktop.in
-data/gpk-log.glade
+data/gpk-log.ui
 data/gpk-prefs.desktop.in
-data/gpk-prefs.glade
+data/gpk-prefs.ui
 data/gpk-repo.desktop.in
-data/gpk-repo.glade
+data/gpk-repo.ui
 data/gpk-service-pack.desktop.in
-data/gpk-service-pack.glade
-data/gpk-signature.glade
+data/gpk-service-pack.ui
+data/gpk-signature.ui
 data/gpk-update-icon.desktop.in
 data/gpk-update-viewer.desktop.in
-data/gpk-update-viewer.glade
-data/gpk-update-viewer2.glade
+data/gpk-update-viewer.ui
 src/gpk-application.c
 src/gpk-application-main.c
 src/gpk-backend-status.c
@@ -56,6 +55,5 @@
 src/gpk-update-viewer.c
 src/gpk-watch.c
 src/gpk-desktop.c
-src/gpk-update-viewer2.c
 python/packagekit/gtkwidgets.py
 

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Fri Apr  3 15:33:03 2009
@@ -8,9 +8,7 @@
 	$(GIO_CFLAGS)					\
 	$(DBUS_CFLAGS)					\
 	$(GCONF_CFLAGS)					\
-	$(LIBGLADE_CFLAGS)				\
 	$(LIBNOTIFY_CFLAGS)				\
-	$(LIBSEXY_CFLAGS)				\
 	$(PACKAGEKIT_CFLAGS)				\
 	$(UNIQUE_CFLAGS)				\
 	$(POLKIT_GNOME_CFLAGS)				\
@@ -42,7 +40,6 @@
 	gpk-install-package-name			\
 	gpk-update-icon					\
 	gpk-update-viewer				\
-	gpk-update-viewer2				\
 	gpk-log						\
 	gpk-backend-status				\
 	$(NULL)
@@ -52,8 +49,6 @@
 	egg-debug.h					\
 	egg-string.c					\
 	egg-string.h					\
-	egg-unique.c					\
-	egg-unique.h					\
 	egg-markdown.c					\
 	egg-markdown.h					\
 	egg-console-kit.c				\
@@ -107,7 +102,6 @@
 	$(GIO_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(GCONF_LIBS)					\
-	$(LIBGLADE_LIBS)				\
 	$(GTK_LIBS)					\
 	$(LIBNOTIFY_LIBS)				\
 	$(PACKAGEKIT_LIBS)				\
@@ -195,7 +189,6 @@
 
 gpk_application_LDADD =					\
 	$(shared_LIBS)					\
-	$(LIBSEXY_LIBS)					\
 	$(NULL)
 
 gpk_service_pack_SOURCES =				\
@@ -216,14 +209,12 @@
 	$(shared_LIBS)					\
 	$(NULL)
 
-gpk_update_viewer2_SOURCES =				\
-	gpk-update-viewer2.c				\
+gpk_update_viewer_SOURCES =				\
+	gpk-update-viewer.c				\
 	gpk-helper-repo-signature.c			\
 	gpk-helper-repo-signature.h			\
 	gpk-helper-eula.c				\
 	gpk-helper-eula.h				\
-	gpk-cell-renderer-uri.c				\
-	gpk-cell-renderer-uri.h				\
 	gpk-cell-renderer-size.c			\
 	gpk-cell-renderer-size.h			\
 	gpk-cell-renderer-info.c			\
@@ -235,17 +226,6 @@
 	$(shared_SOURCES)				\
 	$(NULL)
 
-gpk_update_viewer2_LDADD =				\
-	$(shared_LIBS)					\
-	$(NULL)
-
-gpk_update_viewer_SOURCES =				\
-	gpk-update-viewer.c				\
-	gpk-cell-renderer-uri.c				\
-	gpk-cell-renderer-uri.h				\
-	$(shared_SOURCES)				\
-	$(NULL)
-
 gpk_update_viewer_LDADD =				\
 	$(shared_LIBS)					\
 	$(NULL)

Modified: trunk/src/gpk-application-main.c
==============================================================================
--- trunk/src/gpk-application-main.c	(original)
+++ trunk/src/gpk-application-main.c	Fri Apr  3 15:33:03 2009
@@ -30,8 +30,8 @@
 #include <dbus/dbus-glib.h>
 #include <gtk/gtk.h>
 #include <locale.h>
+#include <unique/unique.h>
 
-#include "egg-unique.h"
 #include "egg-debug.h"
 
 #include "gpk-application.h"
@@ -50,12 +50,13 @@
 }
 
 /**
- * gpk_application_activated_cb
+ * gpk_application_message_received_cb
  **/
 static void
-gpk_application_activated_cb (EggUnique *egg_unique, GpkApplication *application)
+gpk_application_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, GpkApplication *application)
 {
-	gpk_application_show (application);
+	if (command == UNIQUE_ACTIVATE)
+		gpk_application_show (application);
 }
 
 /**
@@ -68,7 +69,7 @@
 	gboolean program_version = FALSE;
 	GpkApplication *application = NULL;
 	GOptionContext *context;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
 	gboolean ret;
 
 	const GOptionEntry options[] = {
@@ -112,15 +113,17 @@
 		return 1;
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.Application");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.Application", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
+	}
 
 	/* create a new application object */
 	application = gpk_application_new ();
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_application_activated_cb), application);
+	g_signal_connect (unique_app, "message-received",
+			  G_CALLBACK (gpk_application_message_received_cb), application);
 	g_signal_connect (application, "action-close",
 			  G_CALLBACK (gpk_application_close_cb), NULL);
 
@@ -129,7 +132,7 @@
 
 	g_object_unref (application);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 	return 0;
 }
 

Modified: trunk/src/gpk-application.c
==============================================================================
--- trunk/src/gpk-application.c	(original)
+++ trunk/src/gpk-application.c	Fri Apr  3 15:33:03 2009
@@ -23,7 +23,6 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <gconf/gconf-client.h>
@@ -32,10 +31,6 @@
 #include <polkit-gnome/polkit-gnome.h>
 #include <packagekit-glib/packagekit.h>
 
-#if !GTK_CHECK_VERSION(2,15,0)
- #include <libsexy/sexy-icon-entry.h>
-#endif
-
 #include "egg-debug.h"
 #include "egg-string.h"
 #include "egg-markdown.h"
@@ -80,7 +75,7 @@
 
 struct GpkApplicationPrivate
 {
-	GladeXML		*glade_xml;
+	GtkBuilder		*builder;
 	GConfClient		*gconf_client;
 	GtkListStore		*packages_store;
 	GtkTreeStore		*groups_store;
@@ -109,6 +104,7 @@
 	PkSearchMode		 search_mode;
 	PkActionMode		 action;
 	GPtrArray		*package_list;
+	GtkWidget		*image_status;
 };
 
 enum {
@@ -183,9 +179,9 @@
 void
 gpk_application_show (GpkApplication *application)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-	gtk_window_present (GTK_WINDOW (widget));
+	GtkWindow *window;
+	window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+	gtk_window_present (window);
 }
 
 /**
@@ -250,12 +246,12 @@
 
 	/* if we can't do it, then just make the button insensitive */
 	if (!pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_CANCEL)) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_cancel");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_cancel"));
 		gtk_widget_set_sensitive (widget, FALSE);
 	}
 
 	/* which tab to enable? */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "notebook_search_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "notebook_search_cancel"));
 	if (find) {
 		gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), 0);
 	} else {
@@ -288,7 +284,7 @@
 gpk_application_allow_install (GpkApplication *application, gboolean allow)
 {
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_install");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_install"));
 	gtk_widget_set_sensitive (widget, allow);
 }
 
@@ -299,7 +295,7 @@
 gpk_application_allow_remove (GpkApplication *application, gboolean allow)
 {
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_remove");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_remove"));
 	gtk_widget_set_sensitive (widget, allow);
 }
 
@@ -313,15 +309,13 @@
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	GtkTreeSelection *selection;
-	GtkWidget *widget;
 	const gchar *icon;
 	gboolean checkbox;
 	PkBitfield state;
 	gboolean ret;
 
 	/* get the selection and add */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	selection = gtk_tree_view_get_selection (treeview);
 	ret = gtk_tree_selection_get_selected (selection, &model, &iter);
 	if (!ret) {
@@ -383,21 +377,20 @@
 
 	/* okay to apply? */
 	if (application->priv->package_list->len == 0) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_apply"));
 		gtk_widget_set_sensitive (widget, FALSE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_clear"));
 		gtk_widget_set_sensitive (widget, FALSE);
 		application->priv->action = PK_ACTION_NONE;
 	} else {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_apply"));
 		gtk_widget_set_sensitive (widget, TRUE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_clear"));
 		gtk_widget_set_sensitive (widget, TRUE);
 	}
 
 	/* correct the enabled state */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	model = gtk_tree_view_get_model (treeview);
 	valid = gtk_tree_model_get_iter_first (model, &iter);
 
@@ -509,7 +502,7 @@
 	GError *error = NULL;
 	gchar **files;
 	gchar *title;
-	GtkWidget *widget;
+	GtkWindow *window;
 	GtkWidget *dialog;
 	PkPackageId *id;
 
@@ -534,8 +527,8 @@
 					   "%i files installed by %s",
 					   array->len), array->len, id->name);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-	dialog = gtk_message_dialog_new (GTK_WINDOW (widget), GTK_DIALOG_DESTROY_WITH_PARENT,
+	window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+	dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT,
 					 GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", title);
 	gpk_dialog_embed_file_list_widget (GTK_DIALOG (dialog), array);
 	gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
@@ -635,14 +628,13 @@
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	GtkTreeSelection *selection;
-	GtkWidget *widget;
+	GtkWindow *window;
 	PkBitfield state;
 	gboolean ret;
 	gchar *package_id = NULL;
 
 	/* get selection */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	selection = gtk_tree_view_get_selection (treeview);
 	ret = gtk_tree_selection_get_selected (selection, &model, &iter);
 	if (!ret) {
@@ -659,8 +651,8 @@
 	if (pk_bitfield_contain (state, GPK_STATE_INSTALLED)) {
 		/* run this single package id */
 		package_ids = pk_package_ids_from_id (package_id);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		exec = gpk_client_run_show (GTK_WINDOW (widget), package_ids);
+		window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+		exec = gpk_client_run_show (window, package_ids);
 		if (exec != NULL) {
 			ret = g_spawn_command_line_async (exec, &error);
 			if (!ret) {
@@ -684,6 +676,7 @@
 	gboolean ret;
 	PkPackageList *list;
 	GtkWidget *widget;
+	GtkWindow *window;
 	gchar **package_ids;
 
 	/* cancel any previous request */
@@ -708,9 +701,9 @@
 	}
 
 	list = pk_client_get_package_list (application->priv->client_files);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
+	window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
 	if (pk_package_list_get_size (list) == 0) {
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: no packages returned */
 					_("No packages"),
 					/* TRANSLATORS: this package is not required by any others */
@@ -761,6 +754,7 @@
 	gboolean ret;
 	PkPackageList *list;
 	GtkWidget *widget;
+	GtkWindow *window;
 	gchar **package_ids;
 
 	/* cancel any previous request */
@@ -785,9 +779,9 @@
 	}
 
 	list = pk_client_get_package_list (application->priv->client_files);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
+	window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
 	if (pk_package_list_get_size (list) == 0) {
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: no packages returned */
 					_("No packages"),
 					/* TRANSLATORS: this package does not depend on any others */
@@ -859,7 +853,7 @@
 gpk_application_add_detail_item (GpkApplication *application, const gchar *title, const gchar *text, const gchar *uri)
 {
 	gchar *markup;
-	GtkWidget *tree_view;
+	GtkTreeView *treeview;
 	GtkTreeIter iter;
 	GtkTreeSelection *selection;
 
@@ -882,10 +876,10 @@
 
 	g_free (markup);
 
-	tree_view = glade_xml_get_widget (application->priv->glade_xml, "treeview_detail");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_detail"));
+	selection = gtk_tree_view_get_selection (treeview);
 	gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
-	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (tree_view));
+	gtk_tree_view_columns_autosize (treeview);
 }
 
 /**
@@ -900,11 +894,11 @@
 	gtk_list_store_clear (application->priv->details_store);
 
 	/* clear the old text */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "textview_description");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "textview_description"));
 	gpk_application_set_text_buffer (widget, NULL);
 
 	/* hide dead widgets */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "scrolledwindow_detail");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow_detail"));
 	gtk_widget_hide (widget);
 
 	/* never repeat */
@@ -964,7 +958,7 @@
 	installed = egg_strequal (details->id->data, "installed");
 
 	/* hide to start */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "scrolledwindow_detail");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow_detail"));
 	gtk_widget_show (widget);
 
 	gtk_list_store_clear (application->priv->details_store);
@@ -975,7 +969,7 @@
 		gpk_application_add_detail_item (application, _("Type"), _("Collection"), NULL);
 
 	/* homepage */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_homepage");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_homepage"));
 	if (egg_strzero (details->url) == FALSE) {
 		gtk_widget_set_sensitive (widget, TRUE);
 
@@ -1022,7 +1016,7 @@
 
 	/* set the description */
 	text = gpk_application_text_format_display (application, details->description);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "textview_description");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "textview_description"));
 	gpk_application_set_text_buffer (widget, text);
 	g_free (text);
 
@@ -1126,7 +1120,7 @@
 
 	/* if it's an exact match, select it */
 	if (egg_strequal (obj->id->name, application->priv->search_text)) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
 		gtk_tree_selection_select_iter (selection, &iter);
 	}
@@ -1148,15 +1142,15 @@
 static void
 gpk_application_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, GpkApplication *application)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
 	/* obvious message, don't tell the user */
 	if (code == PK_ERROR_ENUM_TRANSACTION_CANCELLED)
 		return;
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-	gpk_error_dialog_modal (GTK_WINDOW (widget), gpk_error_enum_to_localised_text (code),
+	window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+	gpk_error_dialog_modal (window, gpk_error_enum_to_localised_text (code),
 				gpk_error_enum_to_localised_message (code), details);
 }
 
@@ -1259,7 +1253,7 @@
 		}
 
 		/* focus back to the text extry */
-		widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 		gtk_widget_grab_focus (widget);
 	}
 
@@ -1297,13 +1291,14 @@
 static gboolean
 gpk_application_perform_search_name_details_file (GpkApplication *application)
 {
-	GtkWidget *widget;
+	GtkEntry *entry;
+	GtkWindow *window;
 	GError *error = NULL;
 	gboolean ret;
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	entry = GTK_ENTRY (gtk_builder_get_object (application->priv->builder, "entry_text"));
 	g_free (application->priv->search_text);
-	application->priv->search_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)));
+	application->priv->search_text = g_strdup (gtk_entry_get_text (entry));
 
 	/* have we got input? */
 	if (egg_strzero (application->priv->search_text)) {
@@ -1315,8 +1310,8 @@
 	if (!ret) {
 		egg_debug ("invalid input text, will fail");
 		/* TODO - make the dialog turn red... */
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: title: invlid text in the search bar */
 					_("Invalid search text"),
 					/* TRANSLATORS: message: tell the user that's not allowed */
@@ -1352,8 +1347,8 @@
 	}
 
 	if (!ret) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: title: we failed to execute the mthod */
 					_("The search could not be completed"),
 					/* TRANSLATORS: low level failure, details to follow */
@@ -1372,7 +1367,7 @@
 gpk_application_perform_search_others (GpkApplication *application)
 {
 	gboolean ret;
-	GtkWidget *widget;
+	GtkWindow *window;
 	GError *error = NULL;
 
 	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
@@ -1396,8 +1391,8 @@
 	}
 
 	if (!ret) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: title: could not get group data */
 					_("The group could not be queried"),
 					/* TRANSLATORS: low level failure */
@@ -1461,26 +1456,26 @@
 	gboolean ret;
 	GtkResponseType result;
 	GError *error = NULL;
-	GtkWidget *widget;
+	GtkWindow *window;
 	GtkWidget *dialog;
 
 	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 
 	/* do we have any items queued for removal or installation? */
 	if (application->priv->package_list->len != 0) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		dialog = gtk_message_dialog_new (GTK_WINDOW (widget), GTK_DIALOG_MODAL,
+		window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+		dialog = gtk_message_dialog_new (window, GTK_DIALOG_MODAL,
 						 GTK_MESSAGE_WARNING, GTK_BUTTONS_CANCEL,
 						 /* TRANSLATORS: title: warn the user they are quitting with unapplied changes */
 						 "%s", _("Changes not applied"));
-		gtk_dialog_add_button (GTK_DIALOG(dialog), _("Close Anyway"), GTK_RESPONSE_OK);
+		gtk_dialog_add_button (GTK_DIALOG (dialog), _("Close Anyway"), GTK_RESPONSE_OK);
 		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog),
 							  "%s\n%s",
 							  /* TRANSLATORS: tell the user the problem */
 							  _("You have made changes that have not yet been applied."),
 							  _("These changes will be lost if you close this window."));
-		gtk_window_set_icon_name (GTK_WINDOW(dialog), GPK_ICON_SOFTWARE_INSTALLER);
-		result = gtk_dialog_run (GTK_DIALOG(dialog));
+		gtk_window_set_icon_name (GTK_WINDOW (dialog), GPK_ICON_SOFTWARE_INSTALLER);
+		result = gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 
 		/* did not agree */
@@ -1544,25 +1539,25 @@
 {
 	gboolean valid;
 	GtkWidget *widget;
+	GtkTreeView *treeview;
 	const gchar *package;
 	GtkTreeSelection *selection;
 
 	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
-	package = gtk_entry_get_text (GTK_ENTRY (widget));
+	package = gtk_entry_get_text (entry);
 
 	/* clear group selection if we have the tab */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP)) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
-		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+		treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_groups"));
+		selection = gtk_tree_view_get_selection (treeview);
 		gtk_tree_selection_unselect_all (selection);
 	}
 
 	/* check for invalid chars */
 	valid = pk_strvalidate (package);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_find"));
 	if (valid == FALSE || egg_strzero (package))
 		gtk_widget_set_sensitive (widget, FALSE);
 	else
@@ -1578,7 +1573,6 @@
 {
 	GpkApplication *application = (GpkApplication *) data;
 	GtkTreeView *treeview;
-	GtkWidget *widget;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	GtkTreePath *path;
@@ -1587,8 +1581,7 @@
 
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	model = gtk_tree_view_get_model (treeview);
 	path = gtk_tree_path_new_from_string (path_str);
 
@@ -1631,7 +1624,6 @@
 	GtkTreeView *treeview;
 	gboolean valid;
 	gboolean checkbox;
-	GtkWidget *widget;
 	GtkTreeIter iter;
 	GtkTreeModel *model;
 	GtkTreeSelection *selection;
@@ -1642,8 +1634,7 @@
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
 	/* get the first iter in the list */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	model = gtk_tree_view_get_model (treeview);
 	valid = gtk_tree_model_get_iter_first (model, &iter);
 
@@ -1672,8 +1663,7 @@
 	g_ptr_array_set_size (application->priv->package_list, 0);
 
 	/* force a button refresh */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+	selection = gtk_tree_view_get_selection (treeview);
 	gpk_application_packages_treeview_clicked_cb (selection, application);
 
 	gpk_application_set_buttons_apply_clear (application);
@@ -1689,6 +1679,7 @@
 	GError *error = NULL;
 	gchar **package_ids = NULL;
 	gchar *exec;
+	GtkWindow *window;
 
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
@@ -1698,8 +1689,8 @@
 		ret = gpk_client_install_package_ids (application->priv->gclient, package_ids, NULL);
 		/* can we show the user the new application? */
 		if (ret) {
-			widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-			exec = gpk_client_run_show (GTK_WINDOW (widget), package_ids);
+			window = GTK_WINDOW (gtk_builder_get_object (application->priv->builder, "window_manager"));
+			exec = gpk_client_run_show (window, package_ids);
 			if (exec != NULL) {
 				ret = g_spawn_command_line_async (exec, &error);
 				if (!ret) {
@@ -1734,10 +1725,8 @@
 	GtkTreeViewColumn *column;
 	GtkTreeView *treeview;
 	GtkTreeModel *model;
-	GtkWidget *widget;
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	model = gtk_tree_view_get_model (treeview);
 
 	/* column for installed toggles */
@@ -1799,7 +1788,7 @@
 {
 	GtkTreeModel *model;
 	GtkTreeIter iter;
-	GtkWidget *widget;
+	GtkEntry *entry;
 	GtkTreeView *treeview;
 	GtkTreePath *path;
 	gboolean active;
@@ -1811,8 +1800,8 @@
 	gpk_application_clear_packages (application);
 
 	/* clear the search text if we clicked the group list */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
-	gtk_entry_set_text (GTK_ENTRY (widget), "");
+	entry = GTK_ENTRY (gtk_builder_get_object (application->priv->builder, "entry_text"));
+	gtk_entry_set_text (entry, "");
 
 	/* This will only work in single or browse selection mode! */
 	if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
@@ -1824,7 +1813,7 @@
 
 		/* don't search parent groups */
 		if (!active) {
-			treeview = GTK_TREE_VIEW (glade_xml_get_widget (application->priv->glade_xml, "treeview_detail"));
+			treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_detail"));
 			path = gtk_tree_model_get_path (model, &iter);
 
 			/* select the parent group */
@@ -1874,7 +1863,7 @@
 		/* we cannot now add it */
 		gpk_application_allow_install (application, FALSE);
 		gpk_application_allow_remove (application, FALSE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_selection");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_selection"));
 		gtk_widget_hide (widget);
 
 		/* hide details */
@@ -1892,7 +1881,7 @@
 	}
 
 	/* show the menu item */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_selection");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_selection"));
 	gtk_widget_show (widget);
 
 	/* get data */
@@ -1919,7 +1908,7 @@
 
 	/* only show run menuitem for installed programs */
 	ret = pk_bitfield_contain (state, GPK_STATE_INSTALLED);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_run");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_run"));
 	gtk_widget_set_sensitive (widget, ret);
 
 	/* cancel any previous request */
@@ -1975,26 +1964,6 @@
 }
 
 /**
- * gpk_application_create_custom_widget:
- **/
-static GtkWidget *
-gpk_application_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				      gchar *string1, gchar *string2,
-				      gint int1, gint int2, gpointer user_data)
-{
-	if (egg_strequal (name, "entry_text"))
-#if GTK_CHECK_VERSION(2,15,0)
-		return gtk_entry_new ();
-#else
-		return sexy_icon_entry_new ();
-#endif
-	if (egg_strequal (name, "image_status"))
-		return gpk_animated_icon_new ();
-	egg_warning ("name unknown='%s'", name);
-	return NULL;
-}
-
-/**
  * gpk_application_popup_position_menu:
  **/
 static void
@@ -2035,15 +2004,11 @@
 	gconf_client_set_string (application->priv->gconf_client, GPK_CONF_APPLICATION_SEARCH_MODE, "name", NULL);
 
 	/* set the new icon */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 	/* TRANSLATORS: entry tooltip: basic search */
 	gtk_widget_set_tooltip_text (widget, _("Searching by name"));
 	icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
-#if GTK_CHECK_VERSION(2,15,0)
 	gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
-#else
-	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
-#endif
 }
 
 /**
@@ -2064,15 +2029,11 @@
 	gconf_client_set_string (application->priv->gconf_client, GPK_CONF_APPLICATION_SEARCH_MODE, "details", NULL);
 
 	/* set the new icon */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 	/* TRANSLATORS: entry tooltip: detailed search */
 	gtk_widget_set_tooltip_text (widget, _("Searching by description"));
 	icon = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
-#if GTK_CHECK_VERSION(2,15,0)
 	gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_EDIT);
-#else
-	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
-#endif
 }
 
 /**
@@ -2093,30 +2054,18 @@
 	gconf_client_set_string (application->priv->gconf_client, GPK_CONF_APPLICATION_SEARCH_MODE, "file", NULL);
 
 	/* set the new icon */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 	/* TRANSLATORS: entry tooltip: file search */
 	gtk_widget_set_tooltip_text (widget, _("Searching by file"));
 	icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
-#if GTK_CHECK_VERSION(2,15,0)
 	gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_OPEN);
-#else
-	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
-#endif
 }
 
-#if GTK_CHECK_VERSION(2,15,0)
 /**
  * gpk_application_entry_text_icon_press_cb:
  **/
 static void
 gpk_application_entry_text_icon_press_cb (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEventButton *event, gpointer data)
-#else
-/**
- * gpk_application_entry_text_icon_pressed_cb:
- **/
-static void
-gpk_application_entry_text_icon_pressed_cb (SexyIconEntry *entry, gint icon_pos, gint button, gpointer data)
-#endif
 {
 	GtkMenu *menu = (GtkMenu*) gtk_menu_new ();
 	GtkWidget *item;
@@ -2126,13 +2075,8 @@
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
 	/* only respond to left button */
-#if GTK_CHECK_VERSION(2,15,0)
 	if (event->button != 1)
 		return;
-#else
-	if (button != 1)
-		return;
-#endif
 
 	egg_debug ("icon_pos=%i", icon_pos);
 
@@ -2167,15 +2111,9 @@
 	}
 
 	gtk_widget_show_all (GTK_WIDGET (menu));
-#if GTK_CHECK_VERSION(2,15,0)
 	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
 			gpk_application_popup_position_menu, entry,
 			event->button, event->time);
-#else
-	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
-			gpk_application_popup_position_menu, entry,
-			button, gtk_get_current_event_time());
-#endif
 }
 
 /**
@@ -2291,7 +2229,7 @@
 	}
 
 	/* use parent */
-	main_window = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
+	main_window = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "window_manager"));
 
 	gtk_window_set_default_icon_name (GPK_ICON_SOFTWARE_INSTALLER);
 	gtk_show_about_dialog (GTK_WINDOW (main_window),
@@ -2598,23 +2536,21 @@
 
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "hbox_status");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "hbox_status"));
 	if (status == PK_STATUS_ENUM_FINISHED) {
 		gtk_widget_hide (widget);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "image_status");
-		gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+		gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (application->priv->image_status), FALSE);
 		return;
 	}
 
 	/* set the text and show */
 	gtk_widget_show (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "label_status");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "label_status"));
 	text = gpk_status_enum_to_localised_text (status);
 	gtk_label_set_label (GTK_LABEL (widget), text);
 
 	/* set icon */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "image_status");
-	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (widget), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
+	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (application->priv->image_status), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
 	gtk_widget_show (widget);
 }
 
@@ -2628,7 +2564,7 @@
 
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_cancel"));
 	gtk_widget_set_sensitive (widget, allow_cancel);
 }
 
@@ -2715,7 +2651,7 @@
 	GtkTreeViewColumn *column;
 	GtkTreeView *treeview;
 
-	treeview = GTK_TREE_VIEW (glade_xml_get_widget (application->priv->glade_xml, "treeview_detail"));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_detail"));
 
 	/* title */
 	column = gtk_tree_view_column_new ();
@@ -2776,7 +2712,7 @@
 	const gchar *icon_name;
 
 	/* set to no indent */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_groups"));
 	gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (widget), FALSE);
 	gtk_tree_view_set_level_indentation  (GTK_TREE_VIEW (widget), 0);
 
@@ -2812,7 +2748,7 @@
 		gtk_tree_store_append (application->priv->groups_store, &iter, NULL);
 		gtk_tree_store_set (application->priv->groups_store, &iter,
 				    GROUPS_COLUMN_ID, "separator", -1);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_groups"));
 		gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (widget),
 						      gpk_application_group_row_separator_func, NULL, NULL);
 	}
@@ -2843,13 +2779,13 @@
 	GtkTreeIter iter;
 	GtkTreeIter iter2;
 	guint i, j;
-	GtkWidget *widget;
+	GtkTreeView *treeview;
 	const gchar *icon_name;
 
 	/* set to expanders with indent */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
-	gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (widget), TRUE);
-	gtk_tree_view_set_level_indentation  (GTK_TREE_VIEW (widget), 3);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (application->priv->builder, "treeview_groups"));
+	gtk_tree_view_set_show_expanders (treeview, TRUE);
+	gtk_tree_view_set_level_indentation  (treeview, 3);
 
 	/* add an "all" entry if we can GetPackages */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_PACKAGES)) {
@@ -2878,8 +2814,7 @@
 		gtk_tree_store_append (application->priv->groups_store, &iter, NULL);
 		gtk_tree_store_set (application->priv->groups_store, &iter,
 				    GROUPS_COLUMN_ID, "separator", -1);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
-		gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (widget),
+		gtk_tree_view_set_row_separator_func (treeview,
 						      gpk_application_group_row_separator_func, NULL, NULL);
 	}
 
@@ -2921,8 +2856,7 @@
 	}
 
 	/* open all expanders */
-	gtk_tree_view_collapse_all (GTK_TREE_VIEW (widget));
-
+	gtk_tree_view_collapse_all (treeview);
 	g_object_unref (list);
 out:
 	g_object_unref (client);
@@ -2972,33 +2906,33 @@
  * We might have to do things when the gconf keys change; do them here.
  **/
 static void
-gpk_application_gconf_key_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, GpkApplication *application)
+gpk_application_gconf_key_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *gconf_entry, GpkApplication *application)
 {
 	GtkEntryCompletion *completion;
 	GConfValue *value;
 	gboolean ret;
-	GtkWidget *widget;
+	GtkEntry *entry;
 
-	value = gconf_entry_get_value (entry);
+	value = gconf_entry_get_value (gconf_entry);
 	if (value == NULL)
 		return;
 
-	if (egg_strequal (entry->key, GPK_CONF_APPLICATION_CATEGORY_GROUPS)) {
+	if (egg_strequal (gconf_entry->key, GPK_CONF_APPLICATION_CATEGORY_GROUPS)) {
 		ret = gconf_value_get_bool (value);
 		gtk_tree_store_clear (application->priv->groups_store);
 		if (ret)
 			gpk_application_create_group_list_categories (application);
 		else
 			gpk_application_create_group_list_enum (application);
-	} else if (egg_strequal (entry->key, GPK_CONF_AUTOCOMPLETE)) {
+	} else if (egg_strequal (gconf_entry->key, GPK_CONF_AUTOCOMPLETE)) {
 		ret = gconf_value_get_bool (value);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+		entry = GTK_ENTRY (gtk_builder_get_object (application->priv->builder, "entry_text"));
 		if (ret) {
 			completion = gpk_package_entry_completion_new ();
-			gtk_entry_set_completion (GTK_ENTRY (widget), completion);
+			gtk_entry_set_completion (entry, completion);
 			g_object_unref (completion);
 		} else {
-			gtk_entry_set_completion (GTK_ENTRY (widget), NULL);
+			gtk_entry_set_completion (entry, NULL);
 		}
 	}
 }
@@ -3011,12 +2945,16 @@
 {
 	GtkWidget *main_window;
 	GtkWidget *widget;
+	GtkWidget *image;
 	GtkEntryCompletion *completion;
 	GtkTreeSelection *selection;
 	gboolean enabled;
 	gboolean ret;
 	gchar *mode;
 	GError *error = NULL;
+	GSList *list;
+	guint retval;
+	GtkBox *box;
 
 	application->priv = GPK_APPLICATION_GET_PRIVATE (application);
 	application->priv->package = NULL;
@@ -3136,11 +3074,23 @@
 	if (!ret)
 		egg_warning ("Failure opening database");
 
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_application_create_custom_widget, application);
+	/* get UI */
+	application->priv->builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (application->priv->builder, GPK_DATA "/gpk-application.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	/* add animated widget */
+	application->priv->image_status = gpk_animated_icon_new ();
+	box = GTK_BOX (gtk_builder_get_object (application->priv->builder, "hbox_status"));
+	gtk_box_pack_start (box, application->priv->image_status, FALSE, FALSE, 0);
+	gtk_box_reorder_child (box, application->priv->image_status, 0);
+	gtk_widget_show (application->priv->image_status);
 
-	application->priv->glade_xml = glade_xml_new (GPK_DATA "/gpk-application.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
+	main_window = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "window_manager"));
 
 	/* make GpkClient windows modal */
 	gtk_widget_realize (main_window);
@@ -3156,214 +3106,218 @@
 			  G_CALLBACK (gpk_application_delete_event_cb), application);
 
 	/* clear */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_clear"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_button_clear_cb), application);
 	/* TRANSLATORS: tooltip on the clear button */
 	gtk_widget_set_tooltip_text (widget, _("Clear current selection"));
 
 	/* help */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_help"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_button_help_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menu_about");
-	gtk_menu_set_accel_group (GTK_MENU (widget),
-				  GTK_ACCEL_GROUP (gtk_accel_groups_from_object (G_OBJECT (main_window))->data));
+	/* set F1 = contents */
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menu_about"));
+	list = gtk_accel_groups_from_object (G_OBJECT (main_window));
+	if (list != NULL)
+		gtk_menu_set_accel_group (GTK_MENU (widget), GTK_ACCEL_GROUP (list->data));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_help"));
 	gtk_menu_item_set_accel_path (GTK_MENU_ITEM (widget),
 			              "<gpk-application>/menuitem_help");
 	gtk_accel_map_add_entry ("<gpk-application>/menuitem_help", GDK_F1, 0);
+	image = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (widget), image);
 
 	/* install */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_apply"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_button_apply_cb), application);
 	/* TRANSLATORS: tooltip on the apply button */
 	gtk_widget_set_tooltip_text (widget, _("Changes are not applied instantly, this button applies all changes"));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_about");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_about"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_about_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_help"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_help_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_sources");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_sources"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_sources_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_refresh");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_refresh"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_refresh_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_homepage");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_homepage"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_homepage_cb), application);
 	/* TRANSLATORS: tooltip on the homepage button */
 	gtk_widget_set_tooltip_text (widget, _("Visit home page for selected package"));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_files");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_files"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_files_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_install");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_install"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_install_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_remove");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_remove"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_remove_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_depends");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_depends"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_depends_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_requires");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_requires"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_requires_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_run");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_run"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_run_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_quit");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_quit"));
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_menu_quit_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_selection");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_selection"));
 	gtk_widget_hide (widget);
 
 	/* installed filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_installed_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_installed_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_installed_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_installed_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_installed_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_installed_cb), application);
 
 	/* devel filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_devel_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_devel_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_devel_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_devel_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_devel_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_devel_cb), application);
 
 	/* gui filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_gui_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_gui_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_gui_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_gui_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_gui_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_gui_cb), application);
 
 	/* free filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_free_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_free_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_free_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_free_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_free_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_free_cb), application);
 
 	/* arch filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_arch_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_arch_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_arch_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_arch_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_arch_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_arch_cb), application);
 
 	/* source filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_source_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source_yes"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_source_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_source_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source_no"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_source_cb), application);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_source_both");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source_both"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_source_cb), application);
 
 	/* basename filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_basename");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_basename"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_basename_cb), application);
 
 	/* newest filter */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_newest");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_newest"));
 	g_signal_connect (widget, "toggled",
 			  G_CALLBACK (gpk_application_menu_filter_newest_cb), application);
 
 	/* Remove description/file list if needed. */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DETAILS) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "scrolledwindow2");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow2"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_FILES) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_files");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_files"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DEPENDS) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_depends");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_depends"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REQUIRES) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_requires");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_requires"));
 		gtk_widget_hide (widget);
 	}
 
 	/* hide the group selector if we don't support search-groups */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "scrolledwindow_groups");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow_groups"));
 		gtk_widget_hide (widget);
 	}
 
 	/* hide the refresh cache button if we can't do it */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_REFRESH_CACHE) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_refresh");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_refresh"));
 		gtk_widget_hide (widget);
 	}
 
 	/* hide the software-sources button if we can't do it */
 	if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REPO_LIST) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_sources");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_sources"));
 		gtk_widget_hide (widget);
 	}
 
 	/* simple find button */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_find"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_find_cb), application);
 	/* TRANSLATORS: tooltip on the find button */
 	gtk_widget_set_tooltip_text (widget, _("Find packages"));
 
 	/* search cancel button */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_cancel"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_cancel_cb), application);
 	/* TRANSLATORS: tooltip on the cancel button */
 	gtk_widget_set_tooltip_text (widget, _("Cancel search"));
 
 	/* the fancy text entry widget */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 
 	/* autocompletion can be turned off as it's slow */
 	ret = gconf_client_get_bool (application->priv->gconf_client, GPK_CONF_AUTOCOMPLETE, NULL);
@@ -3377,50 +3331,41 @@
 	/* set focus on entry text */
 	gtk_widget_grab_focus (widget);
 	gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(2,15,0)
 	gtk_entry_set_icon_sensitive (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY, TRUE);
-#else
-	sexy_icon_entry_set_icon_highlight (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, TRUE);
-#endif
 
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (gpk_application_find_cb), application);
-#if GTK_CHECK_VERSION(2,15,0)
 	g_signal_connect (widget, "icon-press",
 			  G_CALLBACK (gpk_application_entry_text_icon_press_cb), application);
-#else
-	g_signal_connect (widget, "icon-pressed",
-			  G_CALLBACK (gpk_application_entry_text_icon_pressed_cb), application);
-#endif
 
 	/* hide the filters we can't support */
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_INSTALLED) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_installed");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_DEVELOPMENT) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_devel");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_GUI) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_gui");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_FREE) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_free");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_ARCH) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_arch");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch"));
 		gtk_widget_hide (widget);
 	}
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_SOURCE) == FALSE) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_source");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source"));
 		gtk_widget_hide (widget);
 	}
 
 	/* BASENAME, use by default, or hide */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_basename");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_basename"));
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_BASENAME)) {
 		enabled = gconf_client_get_bool (application->priv->gconf_client,
 						 GPK_CONF_APPLICATION_FILTER_BASENAME, NULL);
@@ -3432,7 +3377,7 @@
 	}
 
 	/* NEWEST, use by default, or hide */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_newest");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_newest"));
 	if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_NEWEST)) {
 		/* set from remembered state */
 		enabled = gconf_client_get_bool (application->priv->gconf_client,
@@ -3444,13 +3389,13 @@
 		gtk_widget_hide (widget);
 	}
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
 	g_signal_connect (widget, "key-press-event",
 			  G_CALLBACK (gpk_application_text_changed_cb), application);
 	g_signal_connect (widget, "key-release-event",
 			  G_CALLBACK (gpk_application_text_changed_cb), application);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_find"));
 	gtk_widget_set_sensitive (widget, FALSE);
 
 	/* set a size, if the screen allows */
@@ -3458,22 +3403,22 @@
 
 	/* we are small form factor */
 	if (!ret) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "hbox_packages");
+		widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "hbox_packages"));
 		gtk_box_set_homogeneous (GTK_BOX (widget), FALSE);
 	}
 	gtk_widget_show (GTK_WIDGET(main_window));
 
 	/* set details box decent size */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "hbox_packages");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "hbox_packages"));
 	gtk_widget_set_size_request (widget, -1, 120);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
 	g_signal_connect (GTK_TREE_VIEW (widget), "row-activated",
 			  G_CALLBACK (gpk_application_package_row_activated_cb), application);
 
 	/* use a list store for the extra data */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_detail");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_detail"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (application->priv->details_store));
 
 	/* add columns to the tree view */
@@ -3484,7 +3429,7 @@
 					      PACKAGES_COLUMN_ID, GTK_SORT_ASCENDING);
 
 	/* create package tree view */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_packages"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (application->priv->packages_store));
 
@@ -3496,7 +3441,7 @@
 	gpk_application_packages_add_columns (application);
 
 	/* set up the groups checkbox */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
+	widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "treeview_groups"));
 
 	/* add columns to the tree view */
 	gpk_application_groups_add_columns (GTK_TREE_VIEW (widget));
@@ -3571,6 +3516,7 @@
 	}
 	g_free (mode);
 
+out_build:
 	/* welcome */
 	gpk_application_add_welcome (application);
 }
@@ -3591,7 +3537,6 @@
 	if (application->priv->details_event_id > 0)
 		g_source_remove (application->priv->details_event_id);
 
-	g_object_unref (application->priv->glade_xml);
 	g_object_unref (application->priv->packages_store);
 	g_object_unref (application->priv->details_store);
 	g_object_unref (application->priv->control);
@@ -3604,6 +3549,7 @@
 	g_object_unref (application->priv->gconf_client);
 	g_object_unref (application->priv->gclient);
 	g_object_unref (application->priv->markdown);
+	g_object_unref (application->priv->builder);
 
 	g_ptr_array_foreach (application->priv->package_list, (GFunc) g_free, NULL);
 	g_ptr_array_set_size (application->priv->package_list, 0);

Modified: trunk/src/gpk-backend-status.c
==============================================================================
--- trunk/src/gpk-backend-status.c	(original)
+++ trunk/src/gpk-backend-status.c	Fri Apr  3 15:33:03 2009
@@ -29,7 +29,6 @@
 #include <glib/gi18n.h>
 #include <dbus/dbus-glib.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 #include <locale.h>
 
@@ -70,13 +69,15 @@
 	gboolean program_version = FALSE;
 	GOptionContext *context;
 	GtkWidget *widget;
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	gchar *name;
 	gchar *author;
 	PkRoleEnum roles;
 	PkBitfield filters;
 	PkControl *control;
-	gboolean retval;
+	gboolean ret;
+	guint retval;
+	GError *error = NULL;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -119,160 +120,169 @@
 	filters = pk_control_get_filters (control, NULL);
 
 	/* general stuff */
-	retval = pk_control_get_backend_detail (control, &name, &author, NULL);
-	if (FALSE == retval) {
+	ret = pk_control_get_backend_detail (control, &name, &author, NULL);
+	if (!ret) {
 		/* TRANSLATORS: backend is broken, and won't tell us what it supports */
 		egg_warning (_("Exiting as backend details could not be retrieved"));
 		return 1;
 	}
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-backend-status.glade", NULL, NULL);
-	widget = glade_xml_get_widget (glade_xml, "dialog_backend");
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-backend-status.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_backend"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_LOG);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_updates_close_cb), loop);
 
-	widget = glade_xml_get_widget (glade_xml, "dialog_backend");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_backend"));
 	g_signal_connect (widget, "delete_event",
 			  G_CALLBACK (pk_updates_delete_event_cb), loop);
 	gtk_widget_show (GTK_WIDGET (widget));
 
-	widget = glade_xml_get_widget (glade_xml, "label_name");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_name"));
 	gtk_label_set_label (GTK_LABEL (widget), name);
-	widget = glade_xml_get_widget (glade_xml, "label_author");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_author"));
 	gtk_label_set_label (GTK_LABEL (widget), author);
 	g_free (name);
 	g_free (author);
 
 	/* actions */
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_CANCEL)) {
-		widget = glade_xml_get_widget (glade_xml, "image_cancel");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_cancel"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DEPENDS)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_depends");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_depends"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_UPDATE_DETAIL)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_update_detail");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_update_detail"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DETAILS)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_description");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_description"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_FILES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_files");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_files"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REQUIRES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_requires");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_requires"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_UPDATES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_updates");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_updates"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_DETAILS)) {
-		widget = glade_xml_get_widget (glade_xml, "image_search_details");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_search_details"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_FILE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_search_file");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_search_file"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_GROUP)) {
-		widget = glade_xml_get_widget (glade_xml, "image_search_group");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_search_group"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_NAME)) {
-		widget = glade_xml_get_widget (glade_xml, "image_search_name");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_search_name"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REFRESH_CACHE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_refresh_cache");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_refresh_cache"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REMOVE_PACKAGES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_package_remove");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_package_remove"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_PACKAGES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_package_install");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_package_install"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_FILES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_file_install");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_file_install"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_UPDATE_PACKAGES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_package_update");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_package_update"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_UPDATE_SYSTEM)) {
-		widget = glade_xml_get_widget (glade_xml, "image_system_update");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_system_update"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_RESOLVE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_resolve");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_resolve"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_WHAT_PROVIDES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_what_provides");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_what_provides"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_PACKAGES)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_packages");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_packages"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 
 	/* repos */
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST)) {
-		widget = glade_xml_get_widget (glade_xml, "image_get_repo_list");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_get_repo_list"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_ENABLE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_repo_enable");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_repo_enable"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_SET_DATA)) {
-		widget = glade_xml_get_widget (glade_xml, "image_repo_set_data");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_repo_set_data"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 
 	/* filters */
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
-		widget = glade_xml_get_widget (glade_xml, "image_installed");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_installed"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_DEVELOPMENT)) {
-		widget = glade_xml_get_widget (glade_xml, "image_devel");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_devel"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_GUI)) {
-		widget = glade_xml_get_widget (glade_xml, "image_gui");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_gui"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_FREE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_free");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_free"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_VISIBLE)) {
-		widget = glade_xml_get_widget (glade_xml, "image_visible");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_visible"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_SUPPORTED)) {
-		widget = glade_xml_get_widget (glade_xml, "image_supported");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_supported"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NEWEST)) {
-		widget = glade_xml_get_widget (glade_xml, "image_newest");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_newest"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (widget), "gtk-apply", GTK_ICON_SIZE_MENU);
 	}
 
-	g_object_unref (glade_xml);
+out_build:
+	g_object_unref (builder);
 	g_object_unref (control);
 
 	g_main_loop_run (loop);

Modified: trunk/src/gpk-cell-renderer-info.c
==============================================================================
--- trunk/src/gpk-cell-renderer-info.c	(original)
+++ trunk/src/gpk-cell-renderer-info.c	Fri Apr  3 15:33:03 2009
@@ -76,7 +76,7 @@
 		if (cru->priv->value == PK_INFO_ENUM_UNKNOWN) {
 			g_object_set (cru, "visible", FALSE, NULL);
 		} else {
-			cru->priv->icon_name = gpk_info_enum_to_icon_name (cru->priv->value);
+			cru->priv->icon_name = gpk_info_status_enum_to_icon_name (cru->priv->value);
 			g_object_set (cru, "visible", TRUE, NULL);
 			g_object_set (cru, "icon-name", cru->priv->icon_name, NULL);
 		}

Modified: trunk/src/gpk-cell-renderer-size.c
==============================================================================
--- trunk/src/gpk-cell-renderer-size.c	(original)
+++ trunk/src/gpk-cell-renderer-size.c	Fri Apr  3 15:33:03 2009
@@ -65,6 +65,9 @@
 		g_free (cru->markup);
 		cru->markup = g_format_size_for_display (cru->value);
 		g_object_set (cru, "markup", cru->markup, NULL);
+
+		/* if the size is zero, we hide the markup */
+		g_object_set (cru, "visible", (cru->value != 0), NULL);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);

Modified: trunk/src/gpk-check-update.c
==============================================================================
--- trunk/src/gpk-check-update.c	(original)
+++ trunk/src/gpk-check-update.c	Fri Apr  3 15:33:03 2009
@@ -336,7 +336,7 @@
 static void
 gpk_check_update_menuitem_show_updates_cb (GtkMenuItem *item, gpointer data)
 {
-	const gchar *command = "gpk-update-viewer2";
+	const gchar *command = "gpk-update-viewer";
 	if (!g_spawn_command_line_async (command, NULL))
 		egg_warning ("Couldn't execute command: %s", command);
 }
@@ -1111,7 +1111,7 @@
 	cupdate->priv->dbus_monitor_viewer = egg_dbus_monitor_new ();
 	egg_dbus_monitor_assign (cupdate->priv->dbus_monitor_viewer,
 				 EGG_DBUS_MONITOR_SESSION,
-				 "org.freedesktop.PackageKit.UpdateViewer2");
+				 "org.freedesktop.PackageKit.UpdateViewer");
 	g_signal_connect (cupdate->priv->dbus_monitor_viewer, "connection-changed",
 			  G_CALLBACK (gpk_cupdate_connection_changed_cb), cupdate);
 

Modified: trunk/src/gpk-client-chooser.c
==============================================================================
--- trunk/src/gpk-client-chooser.c	(original)
+++ trunk/src/gpk-client-chooser.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <polkit-gnome/polkit-gnome.h>
 #include <packagekit-glib/packagekit.h>
 
@@ -40,7 +39,8 @@
 
 static GtkListStore *list_store = NULL;
 static gchar *package_id = NULL;
-static PolKitGnomeAction *button_action = NULL;
+static PolKitGnomeAction *polkit_action = NULL;
+static GtkWidget *button_action = NULL;
 
 enum
 {
@@ -102,20 +102,6 @@
 }
 
 /**
- * gpk_update_viewer_create_custom_widget:
- **/
-static GtkWidget *
-gpk_update_viewer_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				        gchar *string1, gchar *string2,
-				        gint int1, gint int2, gpointer user_data)
-{
-	if (egg_strequal (name, "button_action"))
-		return polkit_gnome_action_create_button (button_action);
-	egg_warning ("name unknown=%s", name);
-	return NULL;
-}
-
-/**
  * pk_treeview_add_general_columns:
  **/
 static void
@@ -144,8 +130,6 @@
 
 /**
  * gpk_update_viewer_setup_policykit:
- *
- * We have to do this before the glade stuff if done as the custom handler needs the actions setup
  **/
 static void
 gpk_update_viewer_setup_policykit (void)
@@ -154,8 +138,8 @@
 	pk_action = polkit_action_new ();
 	polkit_action_set_action_id (pk_action, "org.freedesktop.packagekit.package-install");
 	/* TRANSLATORS: button label, install the selected package */
-	button_action = polkit_gnome_action_new_default ("install", pk_action, _("_Install"), NULL);
-	g_object_set (button_action,
+	polkit_action = polkit_gnome_action_new_default ("install", pk_action, _("_Install"), NULL);
+	g_object_set (polkit_action,
 		      "no-icon-name", GTK_STOCK_FLOPPY,
 		      "auth-icon-name", GTK_STOCK_FLOPPY,
 		      "yes-icon-name", GTK_STOCK_FLOPPY,
@@ -172,7 +156,7 @@
 gchar *
 gpk_client_chooser_show (GtkWindow *window, PkPackageList *list, const gchar *title)
 {
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	GtkWidget *widget;
 	GtkTreeSelection *selection;
 	const PkPackageObj *obj;
@@ -182,33 +166,37 @@
 	gchar *text;
 	guint len;
 	guint i;
+	guint retval;
+	GError *error = NULL;
+	GtkBox *box;
 
 	g_return_val_if_fail (list != NULL, NULL);
 	g_return_val_if_fail (title != NULL, NULL);
 
-	/* we have to do this before we connect up the glade file */
-	gpk_update_viewer_setup_policykit ();
-
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_update_viewer_create_custom_widget, NULL);
-
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-log.glade", NULL, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-log.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
 	/* set a size, if the screen allows */
 	gpk_window_set_size_request (GTK_WINDOW (widget), 600, 300);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_chooser_button_help_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_chooser_button_close_cb), NULL);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 	gtk_window_set_title (GTK_WINDOW (widget), title);
 
@@ -218,7 +206,14 @@
 		gtk_window_set_transient_for (GTK_WINDOW (widget), window);
 	}
 
-	/* connect up PolicyKit actions */
+	/* we have to do this before we connect up the action */
+	gpk_update_viewer_setup_policykit ();
+
+	/* add policykit action widget */
+	button_action = polkit_gnome_action_create_button (polkit_action);
+	box = GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (widget)));
+	gtk_box_pack_start (box, button_action, FALSE, FALSE, 0);
+	gtk_widget_show (button_action);
 	g_signal_connect (button_action, "activate", G_CALLBACK (gpk_client_chooser_button_action_cb), NULL);
 
 	/* create list stores */
@@ -226,7 +221,7 @@
 						 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
 	/* create package_id tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_simple"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (list_store));
 
@@ -270,15 +265,15 @@
 	g_object_unref (desktop);
 
 	/* hide the filter box */
-	widget = glade_xml_get_widget (glade_xml, "hbox_filter");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_filter"));
 	gtk_widget_hide (widget);
 
 	/* hide the refresh button */
-	widget = glade_xml_get_widget (glade_xml, "button_refresh");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_refresh"));
 	gtk_widget_hide (widget);
 
 	/* show window */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	gtk_widget_show (widget);
 
 	/* wait for button press */
@@ -287,8 +282,9 @@
 	/* hide window */
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
-	g_object_unref (glade_xml);
-
+	g_object_unref (button_action);
+out_build:
+	g_object_unref (builder);
 	return package_id;
 }
 

Modified: trunk/src/gpk-client-dialog.c
==============================================================================
--- trunk/src/gpk-client-dialog.c	(original)
+++ trunk/src/gpk-client-dialog.c	Fri Apr  3 15:33:03 2009
@@ -34,7 +34,6 @@
 #include <sys/wait.h>
 #include <fcntl.h>
 #include <glib/gi18n.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 
 #include "egg-debug.h"
@@ -53,7 +52,7 @@
 
 struct _GpkClientDialogPrivate
 {
-	GladeXML		*glade_xml;
+	GtkBuilder		*builder;
 	guint			 pulse_timer_id;
 	gboolean		 show_progress_files;
 	gboolean		 has_parent;
@@ -65,6 +64,7 @@
 	gboolean		 set_image;
 	GpkClientDialogPage	 page;
 	PkBitfield		 options;
+	GtkWidget		*image_status;
 };
 
 enum {
@@ -93,7 +93,7 @@
 gpk_client_dialog_show_widget (GpkClientDialog *dialog, const gchar *name, gboolean enabled)
 {
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, name);
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, name));
 	if (enabled)
 		gtk_widget_show (widget);
 	else
@@ -106,7 +106,7 @@
 gboolean
 gpk_client_dialog_setup (GpkClientDialog *dialog, GpkClientDialogPage page, PkBitfield options)
 {
-	GtkWidget *widget;
+	GtkLabel *label;
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
 	/* reset state */
@@ -115,8 +115,8 @@
 	dialog->priv->set_image = FALSE;
 	dialog->priv->page = page;
 	dialog->priv->options = options;
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "label_message");
-	gtk_label_set_label (GTK_LABEL (widget), "");
+	label = GTK_LABEL (gtk_builder_get_object (dialog->priv->builder, "label_message"));
+	gtk_label_set_label (label, "");
 	gpk_client_dialog_set_action (dialog, NULL);
 	return TRUE;
 }
@@ -132,10 +132,9 @@
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "label_title");
-	gtk_widget_show (widget);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "image_status");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "label_title"));
 	gtk_widget_show (widget);
+	gtk_widget_show (dialog->priv->image_status);
 	/* helper */
 	if (dialog->priv->page == GPK_CLIENT_DIALOG_PAGE_CONFIRM) {
 		if (!dialog->priv->set_image)
@@ -191,7 +190,7 @@
 	gpk_client_dialog_show_widget (dialog, "label_force_width", TRUE);
 
 	/* show */
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
 	gtk_widget_realize (widget);
 	gtk_window_present_with_time (GTK_WINDOW (widget), timestamp);
 
@@ -224,7 +223,7 @@
 	/* not sure what to do here, should probably unparent somehow */
 	if (window == NULL) {
 		egg_warning ("parent set NULL when already modal with another window, setting non-modal");
-		widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
+		widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
 		gtk_window_set_modal (GTK_WINDOW (widget), FALSE);
 		dialog->priv->has_parent = FALSE;
 
@@ -241,7 +240,7 @@
 		return FALSE;
 	}
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
 	gtk_widget_realize (widget);
 	gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
 	gdk_window_set_transient_for (GTK_WIDGET (widget)->window, window);
@@ -255,14 +254,14 @@
 static gboolean
 gpk_client_dialog_set_window_title (GpkClientDialog *dialog, const gchar *title)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 	g_return_val_if_fail (title != NULL, FALSE);
 
 	egg_debug ("setting window title: %s", title);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
-	gtk_window_set_title (GTK_WINDOW (widget), title);
+	window = GTK_WINDOW (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
+	gtk_window_set_title (window, title);
 	return TRUE;
 }
 
@@ -272,14 +271,14 @@
 gboolean
 gpk_client_dialog_set_window_icon (GpkClientDialog *dialog, const gchar *icon)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 	g_return_val_if_fail (icon != NULL, FALSE);
 
 	egg_debug ("setting window icon: %s", icon);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
-	gtk_window_set_icon_name (GTK_WINDOW (widget), icon);
+	window = GTK_WINDOW (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
+	gtk_window_set_icon_name (window, icon);
 	return TRUE;
 }
 
@@ -289,7 +288,7 @@
 gboolean
 gpk_client_dialog_set_title (GpkClientDialog *dialog, const gchar *title)
 {
-	GtkWidget *widget;
+	GtkLabel *label;
 	gchar *title_bold;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
@@ -305,8 +304,8 @@
 
 	title_bold = g_strdup_printf ("<b><big>%s</big></b>", title);
 	egg_debug ("setting title: %s", title_bold);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "label_title");
-	gtk_label_set_markup (GTK_LABEL (widget), title_bold);
+	label = GTK_LABEL (gtk_builder_get_object (dialog->priv->builder, "label_title"));
+	gtk_label_set_markup (label, title_bold);
 	g_free (title_bold);
 	return TRUE;
 }
@@ -317,7 +316,7 @@
 gboolean
 gpk_client_dialog_set_message (GpkClientDialog *dialog, const gchar *message)
 {
-	GtkWidget *widget;
+	GtkLabel *label;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 	g_return_val_if_fail (message != NULL, FALSE);
@@ -327,8 +326,8 @@
 		return FALSE;
 
 	egg_debug ("setting message: %s", message);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "label_message");
-	gtk_label_set_markup (GTK_LABEL (widget), message);
+	label = GTK_LABEL (gtk_builder_get_object (dialog->priv->builder, "label_message"));
+	gtk_label_set_markup (label, message);
 	return TRUE;
 }
 
@@ -343,7 +342,7 @@
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
 	egg_debug ("setting action: %s", action);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_action");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_action"));
 	if (action != NULL)
 		gtk_button_set_label (GTK_BUTTON (widget), action);
 	else
@@ -366,7 +365,7 @@
 	if (rate_limit++ % 20 == 0)
 		egg_debug ("polling check");
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "progressbar_percent");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "progressbar_percent"));
 	gtk_progress_bar_pulse (GTK_PROGRESS_BAR (widget));
 
 	/* if there's no slider, optimise out the polling */
@@ -383,10 +382,10 @@
 static void
 gpk_client_dialog_make_progressbar_pulse (GpkClientDialog *dialog)
 {
-	GtkWidget *widget;
+	GtkProgressBar *progress_bar;
 	if (dialog->priv->pulse_timer_id == 0) {
-		widget = glade_xml_get_widget (dialog->priv->glade_xml, "progressbar_percent");
-		gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (widget ), 0.04);
+		progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (dialog->priv->builder, "progressbar_percent"));
+		gtk_progress_bar_set_pulse_step (progress_bar, 0.04);
 		dialog->priv->pulse_timer_id = g_timeout_add (75, (GSourceFunc) gpk_client_dialog_pulse_progress, dialog);
 	}
 }
@@ -397,13 +396,13 @@
 gboolean
 gpk_client_dialog_set_percentage (GpkClientDialog *dialog, guint percentage)
 {
-	GtkWidget *widget;
+	GtkProgressBar *progress_bar;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
 	egg_debug ("setting percentage: %u", percentage);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "progressbar_percent");
+	progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (dialog->priv->builder, "progressbar_percent"));
 	if (dialog->priv->pulse_timer_id != 0) {
 		g_source_remove (dialog->priv->pulse_timer_id);
 		dialog->priv->pulse_timer_id = 0;
@@ -413,7 +412,7 @@
 	if (percentage == PK_CLIENT_PERCENTAGE_INVALID)
 		gpk_client_dialog_make_progressbar_pulse (dialog);
 	else
-		gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), (gfloat) percentage / 100.0);
+		gtk_progress_bar_set_fraction (progress_bar, (gfloat) percentage / 100.0);
 	return TRUE;
 }
 
@@ -423,25 +422,25 @@
 gboolean
 gpk_client_dialog_set_remaining (GpkClientDialog *dialog, guint remaining)
 {
-	GtkWidget *widget;
+	GtkProgressBar *progress_bar;
 	gchar *timestring = NULL;
 	gchar *text = NULL;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
 	egg_debug ("setting remaining: %u", remaining);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "progressbar_percent");
+	progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (dialog->priv->builder, "progressbar_percent"));
 
 	/* unknown */
 	if (remaining == 0) {
-		gtk_progress_bar_set_text (GTK_PROGRESS_BAR (widget), "");
+		gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress_bar), "");
 		goto out;
 	}
 
 	/* get time text */
 	timestring = gpk_time_to_imprecise_string (remaining);
 	text = g_strdup_printf (_("Remaining time : %s"), timestring);
-	gtk_progress_bar_set_text (GTK_PROGRESS_BAR (widget), text);
+	gtk_progress_bar_set_text (progress_bar, text);
 out:
 	g_free (timestring);
 	g_free (text);
@@ -454,8 +453,6 @@
 gboolean
 gpk_client_dialog_set_image (GpkClientDialog *dialog, const gchar *image)
 {
-	GtkWidget *widget;
-
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 	g_return_val_if_fail (image != NULL, FALSE);
 
@@ -463,9 +460,8 @@
 	dialog->priv->set_image = TRUE;
 
 	egg_debug ("setting image: %s", image);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "image_status");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
-	gtk_image_set_from_icon_name (GTK_IMAGE (widget), image, GTK_ICON_SIZE_DIALOG);
+	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (dialog->priv->image_status), FALSE);
+	gtk_image_set_from_icon_name (GTK_IMAGE (dialog->priv->image_status), image, GTK_ICON_SIZE_DIALOG);
 	return TRUE;
 }
 
@@ -475,15 +471,11 @@
 gboolean
 gpk_client_dialog_set_image_status (GpkClientDialog *dialog, PkStatusEnum status)
 {
-	GtkWidget *widget;
-
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
 	/* set state */
 	dialog->priv->set_image = TRUE;
-
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "image_status");
-	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (widget), status, GTK_ICON_SIZE_DIALOG);
+	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (dialog->priv->image_status), status, GTK_ICON_SIZE_DIALOG);
 	return TRUE;
 }
 
@@ -493,12 +485,12 @@
 GtkWindow *
 gpk_client_dialog_get_window (GpkClientDialog *dialog)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), NULL);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
-	return GTK_WINDOW (widget);
+	window = GTK_WINDOW (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
+	return window;
 }
 
 /**
@@ -511,7 +503,7 @@
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_cancel"));
 	gtk_widget_set_sensitive (widget, can_cancel);
 
 	return TRUE;
@@ -541,7 +533,7 @@
 
 	g_return_val_if_fail (GPK_IS_CLIENT_DIALOG (dialog), FALSE);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
 	gtk_widget_hide (widget);
 
 	if (dialog->priv->pulse_timer_id != 0) {
@@ -549,9 +541,7 @@
 		dialog->priv->pulse_timer_id = 0;
 	}
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "image_status");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
-
+	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (dialog->priv->image_status), FALSE);
 	return TRUE;
 }
 
@@ -575,8 +565,6 @@
 static void
 gpk_client_dialog_button_close_cb (GtkWidget *widget_button, GpkClientDialog *dialog)
 {
-	GtkWidget *widget;
-
 	dialog->priv->response = GTK_RESPONSE_CLOSE;
 	g_main_loop_quit (dialog->priv->loop);
 
@@ -585,8 +573,7 @@
 		dialog->priv->pulse_timer_id = 0;
 	}
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "image_status");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (dialog->priv->image_status), FALSE);
 	if (g_main_loop_is_running (dialog->priv->loop))
 		g_main_loop_quit (dialog->priv->loop);
 	else
@@ -643,20 +630,6 @@
 }
 
 /**
- * gpk_client_create_custom_widget:
- **/
-static GtkWidget *
-gpk_client_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				 gchar *string1, gchar *string2,
-				 gint int1, gint int2, gpointer user_data)
-{
-	if (egg_strequal (name, "image_status"))
-		return gpk_animated_icon_new ();
-	egg_warning ("name unknown=%s", name);
-	return NULL;
-}
-
-/**
  * gpk_client_dialog_set_package_list:
  **/
 gboolean
@@ -675,7 +648,7 @@
 	gtk_list_store_clear (dialog->priv->store);
 
 	length = pk_package_list_get_size (list);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "scrolledwindow_packages");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "scrolledwindow_packages"));
 	if (length > 5)
 		gtk_widget_set_size_request (widget, -1, 300);
 	else if (length > 1)
@@ -719,13 +692,11 @@
 gpk_dialog_treeview_for_package_list (GpkClientDialog *dialog)
 {
 	GtkTreeView *treeview;
-	GtkWidget *widget;
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeSelection *selection;
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (dialog->priv->builder, "treeview_packages"));
 
 	/* column for images */
 	column = gtk_tree_view_column_new ();
@@ -807,13 +778,13 @@
 gpk_client_dialog_init (GpkClientDialog *dialog)
 {
 	GtkWidget *widget;
+	GtkTreeView *treeview;
+	guint retval;
+	GError *error = NULL;
+	GtkBox *box;
 
 	dialog->priv = GPK_CLIENT_DIALOG_GET_PRIVATE (dialog);
 
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_client_create_custom_widget, dialog);
-
-	dialog->priv->glade_xml = glade_xml_new (GPK_DATA "/gpk-client.glade", NULL, NULL);
 	dialog->priv->loop = g_main_loop_new (NULL, FALSE);
 	dialog->priv->response = GTK_RESPONSE_NONE;
 	dialog->priv->pulse_timer_id = 0;
@@ -828,30 +799,45 @@
 	dialog->priv->store = gtk_list_store_new (GPK_CLIENT_DIALOG_STORE_LAST,
 						  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
+	/* get UI */
+	dialog->priv->builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (dialog->priv->builder, GPK_DATA "/gpk-client.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	/* add animated widget */
+	dialog->priv->image_status = gpk_animated_icon_new ();
+	box = GTK_BOX (gtk_builder_get_object (dialog->priv->builder, "hbox_status"));
+	gtk_box_pack_start (box, dialog->priv->image_status, FALSE, FALSE, 0);
+	gtk_widget_show (dialog->priv->image_status);
+
 	gpk_dialog_treeview_for_package_list (dialog);
 
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "treeview_packages");
-	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
-				 GTK_TREE_MODEL (dialog->priv->store));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (dialog->priv->builder, "treeview_packages"));
+	gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (dialog->priv->store));
 
 	/* common stuff */
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "dialog_client");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "dialog_client"));
 	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_client_dialog_window_delete_cb), dialog);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_close"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_dialog_button_close_cb), dialog);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_dialog_button_help_cb), dialog);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_action");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_action"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_dialog_button_action_cb), dialog);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "button_cancel"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_dialog_button_cancel_cb), dialog);
 
 	/* set the message text an absolute width so it's forced to wrap */
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "hbox_message");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "hbox_message"));
 	gtk_widget_set_size_request (widget, 400, -1);
-	widget = glade_xml_get_widget (dialog->priv->glade_xml, "label_message");
+	widget = GTK_WIDGET (gtk_builder_get_object (dialog->priv->builder, "label_message"));
 	gtk_widget_set_size_request (widget, 400, -1);
 
+out_build:
 	/* clear status and progress text */
 	gpk_client_dialog_set_window_title (dialog, "");
 	gpk_client_dialog_set_title (dialog, "");
@@ -871,7 +857,7 @@
 	dialog = GPK_CLIENT_DIALOG (object);
 	g_return_if_fail (dialog->priv != NULL);
 
-	/* no updates, we're about to rip the glade file up  */
+	/* no updates, we're about to rip the builder up  */
 	if (dialog->priv->pulse_timer_id != 0)
 		g_source_remove (dialog->priv->pulse_timer_id);
 
@@ -885,7 +871,7 @@
 	}
 
 	g_object_unref (dialog->priv->store);
-	g_object_unref (dialog->priv->glade_xml);
+	g_object_unref (dialog->priv->builder);
 	g_main_loop_unref (dialog->priv->loop);
 	g_free (dialog->priv->help_id);
 	g_free (dialog->priv->title);

Modified: trunk/src/gpk-client-eula.c
==============================================================================
--- trunk/src/gpk-client-eula.c	(original)
+++ trunk/src/gpk-client-eula.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 
 #include "egg-debug.h"
@@ -66,37 +65,46 @@
 gpk_client_eula_show (GtkWindow *window, const gchar *eula_id, const gchar *package_id,
 		      const gchar *vendor_name, const gchar *license_agreement)
 {
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	GtkWidget *widget;
 	GtkTextBuffer *buffer;
 	gchar *text;
 	PkPackageId *ident;
+	guint retval;
+	GError *error = NULL;
 
 	g_return_val_if_fail (eula_id != NULL, FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 	g_return_val_if_fail (vendor_name != NULL, FALSE);
 	g_return_val_if_fail (license_agreement != NULL, FALSE);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-eula.glade", NULL, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-eula.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_eula"));
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_cancel"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_eula"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (glade_xml, "button_agree");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_agree"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_eula_button_agree_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_eula_button_help_cb), NULL);
 
 	/* title */
-	widget = glade_xml_get_widget (glade_xml, "label_title");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_title"));
 	ident = pk_package_id_new_from_string (package_id);
 	text = g_strdup_printf ("<b><big>License required for %s by %s</big></b>", ident->name, vendor_name);
 	gtk_label_set_label (GTK_LABEL (widget), text);
@@ -105,14 +113,14 @@
 
 	buffer = gtk_text_buffer_new (NULL);
 	gtk_text_buffer_insert_at_cursor (buffer, license_agreement, strlen (license_agreement));
-	widget = glade_xml_get_widget (glade_xml, "textview_details");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "textview_details"));
 	gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), buffer);
 
 	/* set minimum size a bit bigger */
 	gtk_widget_set_size_request (widget, 100, 200);
 
 	/* make modal if window set */
-	widget = glade_xml_get_widget (glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_eula"));
 	if (window != NULL)
 		gtk_window_set_transient_for (GTK_WINDOW (widget), window);
 
@@ -126,9 +134,9 @@
 	/* hide window */
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
-	g_object_unref (glade_xml);
 	g_object_unref (buffer);
-
+out_build:
+	g_object_unref (builder);
 	return has_agreed_eula;
 }
 

Modified: trunk/src/gpk-client-run.c
==============================================================================
--- trunk/src/gpk-client-run.c	(original)
+++ trunk/src/gpk-client-run.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 
 #include "egg-debug.h"
@@ -140,21 +139,6 @@
 }
 
 /**
- * gpk_update_viewer_create_custom_widget:
- **/
-static GtkWidget *
-gpk_update_viewer_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				        gchar *string1, gchar *string2,
-				        gint int1, gint int2, gpointer user_data)
-{
-	if (egg_strequal (name, "button_action"))
-		/* TRANSLATORS: button: execute the application */
-		return gtk_button_new_with_mnemonic (_("_Run"));
-	egg_warning ("name unknown=%s", name);
-	return NULL;
-}
-
-/**
  * pk_treeview_add_general_columns:
  **/
 static void
@@ -338,48 +322,60 @@
 gchar *
 gpk_client_run_show (GtkWindow *window, gchar **package_ids)
 {
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	GtkWidget *widget;
 	GtkTreeSelection *selection;
 	guint len;
 	GpkClientRunPriv priv;
+	guint retval;
+	GError *error = NULL;
+	GtkBox *box;
+	GtkWidget *button;
 
 	g_return_val_if_fail (package_ids != NULL, NULL);
 
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_update_viewer_create_custom_widget, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-log.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-log.glade", NULL, NULL);
+	/* add run widget */
+	button = gtk_button_new_with_mnemonic (_("_Run"));
+	box = GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (widget)));
+	gtk_box_pack_start (box, button, FALSE, FALSE, 0);
+	gtk_widget_show (button);
+	g_signal_connect (button, "clicked", G_CALLBACK (gpk_client_run_button_action_cb), &priv);
 
 	/* initially nothing */
 	priv.full_path = NULL;
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_client_run_delete_event_cb), &priv);
 
 	/* set a size, if the screen allows */
 	gpk_window_set_size_request (GTK_WINDOW (widget), 600, 300);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_run_button_help_cb), &priv);
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_run_button_close_cb), &priv);
-	widget = glade_xml_get_widget (glade_xml, "button_action");
-	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_run_button_action_cb), &priv);
-	gtk_widget_show (widget);
 
 	/* hide the filter box */
-	widget = glade_xml_get_widget (glade_xml, "hbox_filter");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_filter"));
 	gtk_widget_hide (widget);
 
 	/* hide the refresh button */
-	widget = glade_xml_get_widget (glade_xml, "button_refresh");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_refresh"));
 	gtk_widget_hide (widget);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 	/* TRANSLATORS: window title: do we want to execute a program we just installed? */
 	gtk_window_set_title (GTK_WINDOW (widget), _("Run new application?"));
@@ -389,7 +385,7 @@
 					      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
 	/* create package_id tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_simple"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (priv.list_store));
 	g_signal_connect (GTK_TREE_VIEW (widget), "row-activated",
@@ -412,7 +408,7 @@
 	}
 
 	/* make modal if window set */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	if (window != NULL) {
 		gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
 		gtk_window_set_transient_for (GTK_WINDOW (widget), window);
@@ -426,13 +422,14 @@
 
 out:
 	/* hide window */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
-
-	//g_object_unref (glade_xml);
 	g_object_unref (priv.list_store);
 
+out_build:
+	g_object_unref (builder);
+
 	return priv.full_path;
 }
 

Modified: trunk/src/gpk-client-signature.c
==============================================================================
--- trunk/src/gpk-client-signature.c	(original)
+++ trunk/src/gpk-client-signature.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 
 #include "egg-debug.h"
@@ -67,45 +66,54 @@
 			   const gchar *key_fingerprint, const gchar *key_timestamp)
 {
 	GtkWidget *widget;
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
+	guint retval;
+	GError *error = NULL;
 
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-signature.glade", NULL, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-signature.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_gpg"));
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_no"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_gpg"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (glade_xml, "button_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_yes"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_signature_button_yes_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_client_signature_button_help_cb), NULL);
 
 	/* show correct text */
-	widget = glade_xml_get_widget (glade_xml, "label_name");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_name"));
 	gtk_label_set_label (GTK_LABEL (widget), repository_name);
-	widget = glade_xml_get_widget (glade_xml, "label_url");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_url"));
 	gtk_label_set_label (GTK_LABEL (widget), key_url);
-	widget = glade_xml_get_widget (glade_xml, "label_user");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_user"));
 	gtk_label_set_label (GTK_LABEL (widget), key_userid);
-	widget = glade_xml_get_widget (glade_xml, "label_id");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_id"));
 	gtk_label_set_label (GTK_LABEL (widget), key_id);
 
 	/* make modal if window set */
-	widget = glade_xml_get_widget (glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_gpg"));
 	if (window != NULL)
 		gtk_window_set_transient_for (GTK_WINDOW (widget), window);
 
 	/* show window */
-	widget = glade_xml_get_widget (glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_gpg"));
 	gtk_widget_show (widget);
 
 	/* wait for button press */
@@ -115,8 +123,8 @@
 	/* hide window */
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
-	g_object_unref (glade_xml);
-
+out_build:
+	g_object_unref (builder);
 	return has_imported_signature;
 }
 

Modified: trunk/src/gpk-client-untrusted.c
==============================================================================
--- trunk/src/gpk-client-untrusted.c	(original)
+++ trunk/src/gpk-client-untrusted.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <polkit-gnome/polkit-gnome.h>
 #include <packagekit-glib/packagekit.h>
 
@@ -60,26 +59,35 @@
 	GtkWidget *widget;
 	GtkWidget *button;
 	PolKitAction *pk_action;
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	gchar *text;
 	const gchar *title;
 	gchar *message;
 	PolKitGnomeAction *update_system_action;
+	guint retval;
+	GError *error = NULL;
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-error.glade", NULL, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-error.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
 	/* connect up actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_error"));
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* close button */
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
 
 	/* title */
 	title = gpk_error_enum_to_localised_text (code);
-	widget = glade_xml_get_widget (glade_xml, "label_title");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_title"));
 	text = g_strdup_printf ("<b><big>%s</big></b>", title);
 	gtk_label_set_label (GTK_LABEL (widget), text);
 	g_free (text);
@@ -94,12 +102,12 @@
 				   _("Malicious software can damage your computer or cause other harm."),
 				   /* TRANSLATORS: ask if they are absolutely sure they want to do this */
 				   _("Are you <b>sure</b> you want to install this package?"));
-	widget = glade_xml_get_widget (glade_xml, "label_message");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_message"));
 	gtk_label_set_markup (GTK_LABEL (widget), message);
 	g_free (message);
 
 	/* don't show text in the expander */
-	widget = glade_xml_get_widget (glade_xml, "expander_details");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "expander_details"));
 	gtk_widget_hide (widget);
 
 	/* add the extra button and connect up to a Policykit action */
@@ -123,16 +131,12 @@
 	gtk_widget_show (button);
 
 	/* add to box */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
-#ifdef HAVE_GTK_DIALOG_GET_ACTION_AREA
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_error"));
 	widget = gtk_dialog_get_action_area (GTK_DIALOG(widget));
-#else
-	widget = GTK_DIALOG(widget)->action_area;
-#endif
 	gtk_box_pack_start (GTK_BOX (widget), button, FALSE, FALSE, 0);
 
 	/* show window */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_error"));
 	gtk_widget_show (widget);
 
 	/* wait for button press */
@@ -142,7 +146,8 @@
 	if (GTK_IS_WIDGET (widget)) {
 		gtk_widget_hide (widget);
 	}
-	g_object_unref (glade_xml);
+out_build:
+	g_object_unref (builder);
 	return retry_untrusted;
 }
 

Modified: trunk/src/gpk-client.c
==============================================================================
--- trunk/src/gpk-client.c	(original)
+++ trunk/src/gpk-client.c	Fri Apr  3 15:33:03 2009
@@ -876,7 +876,6 @@
 		goto out;
 
 	/* create as does not exist */
-#ifdef HAVE_G_GILE_MAKE_DIRECTORY_WITH_PARENTS
 	ret = g_file_make_directory_with_parents (file, NULL, error);
 	g_object_unref (file);
 	if (!ret) {
@@ -884,15 +883,6 @@
 		g_free (path);
 		path = NULL;
 	}
-#else
-	g_mkdir_with_parents(path, 0755);
-	g_object_unref (file);
-	if (ret == -1) {
-		/* return nothing.. */
-		g_free (path);
-		path = NULL;
-	}
-#endif
 out:
 	return path;
 }

Modified: trunk/src/gpk-enum.c
==============================================================================
--- trunk/src/gpk-enum.c	(original)
+++ trunk/src/gpk-enum.c	Fri Apr  3 15:33:03 2009
@@ -686,7 +686,7 @@
 		text = _("A restart is required");
 		break;
 	case PK_RESTART_ENUM_SESSION:
-		text = _("You will need to log off and log back on");
+		text = _("You will need to log out and log back in");
 		break;
 	case PK_RESTART_ENUM_APPLICATION:
 		text = _("You need to restart the application");
@@ -1590,6 +1590,38 @@
 	return pk_enum_find_string (enum_message_icon_name, message);
 }
 
+/**
+ * gpk_info_status_enum_to_text:
+ **/
+const gchar *
+gpk_info_status_enum_to_text (GpkInfoStatusEnum info)
+{
+	if (info > PK_INFO_ENUM_UNKNOWN)
+		return gpk_info_enum_to_localised_past (info - PK_INFO_ENUM_UNKNOWN);
+	return gpk_info_enum_to_localised_present (info);
+}
+
+/**
+ * gpk_info_status_enum_to_icon_name:
+ **/
+const gchar *
+gpk_info_status_enum_to_icon_name (GpkInfoStatusEnum info)
+{
+	/* special hardcoded icons */
+	if (info == GPK_INFO_ENUM_DOWNLOADED)
+		return "pk-package-downloaded";
+	if (info == GPK_INFO_ENUM_INSTALLED ||
+	    info == GPK_INFO_ENUM_UPDATED)
+		return "pk-package-installed";
+
+	/* use normal icon as a fallback */
+	if (info > PK_INFO_ENUM_UNKNOWN)
+		return gpk_info_enum_to_icon_name (info - PK_INFO_ENUM_UNKNOWN);
+
+	/* regular PkInfoEnum */
+	return gpk_info_enum_to_icon_name (info);
+}
+
 /***************************************************************************
  ***                          MAKE CHECK TESTS                           ***
  ***************************************************************************/

Modified: trunk/src/gpk-enum.h
==============================================================================
--- trunk/src/gpk-enum.h	(original)
+++ trunk/src/gpk-enum.h	Fri Apr  3 15:33:03 2009
@@ -52,6 +52,22 @@
 	GPK_UPDATE_ENUM_UNKNOWN
 } GpkUpdateEnum;
 
+typedef enum {
+	GPK_INFO_ENUM_DOWNLOADING	= PK_INFO_ENUM_DOWNLOADING,
+	GPK_INFO_ENUM_UPDATING		= PK_INFO_ENUM_UPDATING,
+	GPK_INFO_ENUM_INSTALLING	= PK_INFO_ENUM_INSTALLING,
+	GPK_INFO_ENUM_REMOVING		= PK_INFO_ENUM_REMOVING,
+	GPK_INFO_ENUM_CLEANUP		= PK_INFO_ENUM_CLEANUP,
+	GPK_INFO_ENUM_OBSOLETING	= PK_INFO_ENUM_OBSOLETING,
+	GPK_INFO_ENUM_DOWNLOADED	= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_DOWNLOADING,
+	GPK_INFO_ENUM_UPDATED		= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_UPDATING,
+	GPK_INFO_ENUM_INSTALLED		= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_INSTALLING,
+	GPK_INFO_ENUM_REMOVED		= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_REMOVING,
+	GPK_INFO_ENUM_CLEANEDUP		= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_CLEANUP,
+	GPK_INFO_ENUM_OBSOLETED		= PK_INFO_ENUM_UNKNOWN + PK_INFO_ENUM_OBSOLETING,
+	GPK_INFO_ENUM_UNKNOWN
+} GpkInfoStatusEnum;
+
 void		 gpk_enum_test				(gpointer	 data);
 const gchar	*gpk_role_enum_to_localised_past	(PkRoleEnum	 role)
 							 G_GNUC_CONST;
@@ -93,6 +109,8 @@
 gchar		*gpk_update_enum_to_localised_text	(PkInfoEnum	 info,
 							 guint		 number)
 							 G_GNUC_CONST;
+const gchar	*gpk_info_status_enum_to_text		(GpkInfoStatusEnum info);
+const gchar	*gpk_info_status_enum_to_icon_name	(GpkInfoStatusEnum info);
 
 G_END_DECLS
 

Modified: trunk/src/gpk-error.c
==============================================================================
--- trunk/src/gpk-error.c	(original)
+++ trunk/src/gpk-error.c	Fri Apr  3 15:33:03 2009
@@ -26,7 +26,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <packagekit-glib/packagekit.h>
 
 #include "egg-debug.h"
@@ -39,18 +38,18 @@
  * gpk_error_dialog_expanded_cb:
  **/
 static void
-gpk_error_dialog_expanded_cb (GObject *object, GParamSpec *param_spec, GladeXML *glade_xml)
+gpk_error_dialog_expanded_cb (GObject *object, GParamSpec *param_spec, GtkBuilder *builder)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 	GtkExpander *expander;
 	expander = GTK_EXPANDER (object);
 
 	/* only resizable when expanded */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_error"));
 	if (gtk_expander_get_expanded (expander))
-		gtk_window_set_resizable (GTK_WINDOW (widget), TRUE);
+		gtk_window_set_resizable (window, TRUE);
 	else
-		gtk_window_set_resizable (GTK_WINDOW (widget), FALSE);
+		gtk_window_set_resizable (window, FALSE);
 }
 
 /**
@@ -66,17 +65,26 @@
 gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const gchar *message, const gchar *details, guint timestamp)
 {
 	GtkWidget *widget;
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	GtkTextBuffer *buffer = NULL;
 	gchar *text;
+	guint retval;
+	GError *error = NULL;
 
 	g_return_val_if_fail (title != NULL, FALSE);
 	g_return_val_if_fail (message != NULL, FALSE);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-error.glade", NULL, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-error.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
 	/* connect up actions */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_error"));
 	gtk_window_set_resizable (GTK_WINDOW (widget), FALSE);
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
@@ -93,37 +101,37 @@
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* close button */
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
 
 	/* we become resizable when the expander is expanded */
-	widget = glade_xml_get_widget (glade_xml, "expander_details");
-	g_signal_connect (widget, "notify::expanded", G_CALLBACK (gpk_error_dialog_expanded_cb), glade_xml);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "expander_details"));
+	g_signal_connect (widget, "notify::expanded", G_CALLBACK (gpk_error_dialog_expanded_cb), builder);
 
 	/* title */
-	widget = glade_xml_get_widget (glade_xml, "label_title");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_title"));
 	text = g_strdup_printf ("<b><big>%s</big></b>", title);
 	gtk_label_set_label (GTK_LABEL (widget), text);
 	g_free (text);
 
 	/* message */
-	widget = glade_xml_get_widget (glade_xml, "label_message");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_message"));
 	gtk_label_set_markup (GTK_LABEL (widget), message);
 
 	/* show text in the expander */
 	if (egg_strzero (details)) {
-		widget = glade_xml_get_widget (glade_xml, "expander_details");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "expander_details"));
 		gtk_widget_hide (widget);
 	} else {
 		buffer = gtk_text_buffer_new (NULL);
 //		text = g_markup_escape_text (details, -1);
 		gtk_text_buffer_insert_at_cursor (buffer, details, strlen (details));
-		widget = glade_xml_get_widget (glade_xml, "textview_details");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "textview_details"));
 		gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), buffer);
 	}
 
 	/* show window */
-	widget = glade_xml_get_widget (glade_xml, "dialog_error");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_error"));
 	gtk_window_present_with_time (GTK_WINDOW (widget), timestamp);
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
@@ -133,9 +141,10 @@
 	/* hide window */
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
-	g_object_unref (glade_xml);
 	if (buffer != NULL)
 		g_object_unref (buffer);
+out_build:
+	g_object_unref (builder);
 	return TRUE;
 }
 

Modified: trunk/src/gpk-helper-eula.c
==============================================================================
--- trunk/src/gpk-helper-eula.c	(original)
+++ trunk/src/gpk-helper-eula.c	Fri Apr  3 15:33:03 2009
@@ -23,7 +23,6 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "gpk-helper-eula.h"
 #include "gpk-marshal.h"
@@ -38,7 +37,7 @@
 
 struct GpkHelperEulaPrivate
 {
-	GladeXML		*glade_xml;
+	GtkBuilder		*builder;
 	gchar			*eula_id;
 };
 
@@ -57,7 +56,7 @@
 gpk_helper_eula_button_agree_cb (GtkWidget *widget, GpkHelperEula *helper)
 {
 	g_signal_emit (helper, signals [GPK_HELPER_EULA_EVENT], 0, GTK_RESPONSE_YES, helper->priv->eula_id);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	gtk_widget_hide (widget);
 }
 
@@ -68,7 +67,7 @@
 gpk_helper_eula_button_cancel_cb (GtkWidget *widget, GpkHelperEula *helper)
 {
 	g_signal_emit (helper, signals [GPK_HELPER_EULA_EVENT], 0, GTK_RESPONSE_NO, helper->priv->eula_id);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	gtk_widget_hide (widget);
 }
 
@@ -104,7 +103,7 @@
 	helper->priv->eula_id = g_strdup (eula_id);
 
 	/* title */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "label_title");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "label_title"));
 	ident = pk_package_id_new_from_string (package_id);
 	text = g_strdup_printf ("<b><big>License required for %s by %s</big></b>", ident->name, vendor_name);
 	gtk_label_set_label (GTK_LABEL (widget), text);
@@ -113,14 +112,14 @@
 
 	buffer = gtk_text_buffer_new (NULL);
 	gtk_text_buffer_insert_at_cursor (buffer, license_agreement, strlen (license_agreement));
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "textview_details");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "textview_details"));
 	gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), buffer);
 
 	/* set minimum size a bit bigger */
 	gtk_widget_set_size_request (widget, 100, 200);
 
 	/* show window */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	gtk_widget_show (widget);
 
 	g_object_unref (buffer);
@@ -140,7 +139,7 @@
 	g_return_val_if_fail (window != NULL, FALSE);
 
 	/* make modal if window set */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	gtk_window_set_transient_for (GTK_WINDOW (widget), window);
 
 	/* this is a modal popup, so don't show a window title */
@@ -174,26 +173,35 @@
 gpk_helper_eula_init (GpkHelperEula *helper)
 {
 	GtkWidget *widget;
+	guint retval;
+	GError *error = NULL;
 
 	helper->priv = GPK_HELPER_EULA_GET_PRIVATE (helper);
 
 	helper->priv->eula_id = NULL;
-	helper->priv->glade_xml = glade_xml_new (GPK_DATA "/gpk-eula.glade", NULL, NULL);
+
+	/* get UI */
+	helper->priv->builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (helper->priv->builder, GPK_DATA "/gpk-eula.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+	}
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_helper_eula_button_cancel_cb), helper);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_agree");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_agree"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_eula_button_agree_cb), helper);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_eula_button_help_cb), helper);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_cancel");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_cancel"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_eula_button_cancel_cb), helper);
 }
 
@@ -211,11 +219,11 @@
 	helper = GPK_HELPER_EULA (object);
 
 	/* hide window */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_eula");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_eula"));
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
 	g_free (helper->priv->eula_id);
-	g_object_unref (helper->priv->glade_xml);
+	g_object_unref (helper->priv->builder);
 
 	G_OBJECT_CLASS (gpk_helper_eula_parent_class)->finalize (object);
 }

Modified: trunk/src/gpk-helper-repo-signature.c
==============================================================================
--- trunk/src/gpk-helper-repo-signature.c	(original)
+++ trunk/src/gpk-helper-repo-signature.c	Fri Apr  3 15:33:03 2009
@@ -23,7 +23,6 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "gpk-helper-repo-signature.h"
 #include "gpk-marshal.h"
@@ -38,7 +37,7 @@
 
 struct GpkHelperRepoSignaturePrivate
 {
-	GladeXML		*glade_xml;
+	GtkBuilder		*builder;
 	gchar			*key_id;
 	gchar			*package_id;
 };
@@ -59,7 +58,7 @@
 {
 	g_signal_emit (helper, signals [GPK_HELPER_REPO_SIGNATURE_EVENT], 0,
 		       GTK_RESPONSE_YES, helper->priv->key_id, helper->priv->package_id);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	gtk_widget_hide (widget);
 }
 
@@ -71,7 +70,7 @@
 {
 	g_signal_emit (helper, signals [GPK_HELPER_REPO_SIGNATURE_EVENT], 0,
 		       GTK_RESPONSE_NO, helper->priv->key_id, helper->priv->package_id);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	gtk_widget_hide (widget);
 }
 
@@ -107,17 +106,17 @@
 	helper->priv->package_id = g_strdup (package_id);
 
 	/* show correct text */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "label_name");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "label_name"));
 	gtk_label_set_label (GTK_LABEL (widget), repository_name);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "label_url");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "label_url"));
 	gtk_label_set_label (GTK_LABEL (widget), key_url);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "label_user");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "label_user"));
 	gtk_label_set_label (GTK_LABEL (widget), key_userid);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "label_id");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "label_id"));
 	gtk_label_set_label (GTK_LABEL (widget), key_id);
 
 	/* show window */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	gtk_widget_show (widget);
 
 	return TRUE;
@@ -135,7 +134,7 @@
 	g_return_val_if_fail (window != NULL, FALSE);
 
 	/* make modal if window set */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	gtk_window_set_transient_for (GTK_WINDOW (widget), window);
 
 	/* this is a modal popup, so don't show a window title */
@@ -169,27 +168,36 @@
 gpk_helper_repo_signature_init (GpkHelperRepoSignature *helper)
 {
 	GtkWidget *widget;
+	guint retval;
+	GError *error = NULL;
 
 	helper->priv = GPK_HELPER_REPO_SIGNATURE_GET_PRIVATE (helper);
 
 	helper->priv->key_id = NULL;
 	helper->priv->package_id = NULL;
-	helper->priv->glade_xml = glade_xml_new (GPK_DATA "/gpk-signature.glade", NULL, NULL);
+
+	/* get UI */
+	helper->priv->builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (helper->priv->builder, GPK_DATA "/gpk-signature.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+	}
 
 	/* connect up default actions */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_helper_repo_signature_button_no_cb), helper);
 
 	/* set icon name */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* connect up buttons */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_yes");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_yes"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_repo_signature_button_yes_cb), helper);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_repo_signature_button_help_cb), helper);
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "button_no");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "button_no"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_helper_repo_signature_button_no_cb), helper);
 }
 
@@ -207,12 +215,12 @@
 	helper = GPK_HELPER_REPO_SIGNATURE (object);
 
 	/* hide window */
-	widget = glade_xml_get_widget (helper->priv->glade_xml, "dialog_gpg");
+	widget = GTK_WIDGET (gtk_builder_get_object (helper->priv->builder, "dialog_gpg"));
 	if (GTK_IS_WIDGET (widget))
 		gtk_widget_hide (widget);
 	g_free (helper->priv->key_id);
 	g_free (helper->priv->package_id);
-	g_object_unref (helper->priv->glade_xml);
+	g_object_unref (helper->priv->builder);
 
 	G_OBJECT_CLASS (gpk_helper_repo_signature_parent_class)->finalize (object);
 }

Modified: trunk/src/gpk-log.c
==============================================================================
--- trunk/src/gpk-log.c	(original)
+++ trunk/src/gpk-log.c	Fri Apr  3 15:33:03 2009
@@ -24,7 +24,6 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <math.h>
 #include <string.h>
@@ -33,11 +32,10 @@
 #include <sys/types.h>
 #include <pwd.h>
 
-#include <polkit-gnome/polkit-gnome.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
+#include <unique/unique.h>
 
-#include "egg-unique.h"
 #include "egg-debug.h"
 #include "egg-string.h"
 
@@ -45,12 +43,11 @@
 #include "gpk-gnome.h"
 #include "gpk-enum.h"
 
-static GladeXML *glade_xml = NULL;
+static GtkBuilder *builder = NULL;
 static GtkListStore *list_store = NULL;
 static PkClient *client = NULL;
 static gchar *transaction_id = NULL;
 static gchar *filter = NULL;
-static PolKitGnomeAction *button_action = NULL;
 static PkObjList *transactions = NULL;
 static GtkTreePath *path_global = NULL;
 
@@ -160,24 +157,6 @@
 }
 
 /**
- * gpk_log_button_rollback_cb:
- **/
-static void
-gpk_log_button_rollback_cb (PolKitGnomeAction *action, gpointer data)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	/* rollback */
-	ret = pk_client_rollback (client, transaction_id, &error);
-	if (!ret) {
-		egg_warning ("failed to reset client: %s", error->message);
-		g_error_free (error);
-	}
-	gtk_main_quit ();
-}
-
-/**
  * gpk_log_get_localised_date:
  **/
 static gchar *
@@ -392,50 +371,16 @@
 }
 
 /**
- * gpk_update_viewer_create_custom_widget:
- **/
-static GtkWidget *
-gpk_update_viewer_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				        gchar *string1, gchar *string2,
-				        gint int1, gint int2, gpointer user_data)
-{
-	if (egg_strequal (name, "button_action"))
-		return polkit_gnome_action_create_button (button_action);
-	egg_warning ("name unknown=%s", name);
-	return NULL;
-}
-
-/**
- * gpk_update_viewer_setup_policykit:
- *
- * We have to do this before the glade stuff if done as the custom handler needs the actions setup
+ * gpk_log_message_received_cb
  **/
 static void
-gpk_update_viewer_setup_policykit (void)
+gpk_log_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, gpointer data)
 {
-	PolKitAction *pk_action;
-	pk_action = polkit_action_new ();
-	polkit_action_set_action_id (pk_action, "org.freedesktop.packagekit.system-rollback");
-	/* TRANSLATORS: button label, roll back to a previous system snapshot */
-	button_action = polkit_gnome_action_new_default ("rollback", pk_action, _("_Rollback"), NULL);
-	g_object_set (button_action,
-		      "no-icon-name", "gtk-go-back-ltr",
-		      "auth-icon-name", "gtk-go-back-ltr",
-		      "yes-icon-name", "gtk-go-back-ltr",
-		      "self-blocked-icon-name", "gtk-go-back-ltr",
-		      NULL);
-	polkit_action_unref (pk_action);
-}
-
-/**
- * gpk_log_activated_cb
- **/
-static void
-gpk_log_activated_cb (EggUnique *egg_unique, gpointer data)
-{
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
-	gtk_window_present (GTK_WINDOW (widget));
+	GtkWindow *window;
+	if (command == UNIQUE_ACTIVATE) {
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_simple"));
+		gtk_window_present (window);
+	}
 }
 
 /**
@@ -512,7 +457,7 @@
 	const gchar *tool;
 	static guint count;
 	struct passwd *pw;
-	GtkTreeView *treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_simple"));
+	GtkTreeView *treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_simple"));
 	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
 
 	/* put formatted text into treeview */
@@ -542,9 +487,6 @@
 	else if (egg_strequal (obj->cmdline, "gpk-update-viewer"))
 		/* TRANSLATORS: short name for gpk-update-viewer */
 		tool = _("Update System");
-	else if (egg_strequal (obj->cmdline, "gpk-update-viewer2"))
-		/* TRANSLATORS: short name for gpk-update-viewer (new name) */
-		tool = _("Update System");
 	else if (egg_strequal (obj->cmdline, "gpk-update-icon"))
 		/* TRANSLATORS: short name for gpk-update-icon */
 		tool = _("Update Icon");
@@ -589,7 +531,7 @@
 
 	/* set the new filter */
 	g_free (filter);
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	package = gtk_entry_get_text (GTK_ENTRY(widget));
 	if (!egg_strzero (package))
 		filter = g_strdup (package);
@@ -599,7 +541,7 @@
 	egg_debug ("len=%i", transactions->len);
 
 	/* mark the items as not used */
-	treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_simple"));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_simple"));
 	model = gtk_tree_view_get_model (treeview);
 	gpk_log_mark_nonactive (model);
 
@@ -689,8 +631,10 @@
 	GtkEntryCompletion *completion;
 	PkBitfield roles;
 	PkControl *control;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
 	gboolean ret;
+	guint retval;
+	GError *error = NULL;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -727,24 +671,19 @@
 		return 1;
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.LogViewer");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.LogViewer", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
-
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_log_activated_cb), NULL);
+	}
+	g_signal_connect (unique_app, "message-received",
+			  G_CALLBACK (gpk_log_message_received_cb), NULL);
 
 	/* add application specific icons to search path */
 	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
 					   GPK_DATA G_DIR_SEPARATOR_S "icons");
 
-	/* we have to do this before we connect up the glade file */
-	gpk_update_viewer_setup_policykit ();
-
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_update_viewer_create_custom_widget, NULL);
-
 	client = pk_client_new ();
 	pk_client_set_use_buffer (client, TRUE, NULL);
 	pk_client_set_synchronous (client, TRUE, NULL);
@@ -754,8 +693,16 @@
 	roles = pk_control_get_actions (control, NULL);
 	g_object_unref (control);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-log.glade", NULL, NULL);
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-log.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	gtk_window_set_icon_name (GTK_WINDOW (widget), GPK_ICON_SOFTWARE_LOG);
 
 	/* set a size, if the screen allows */
@@ -763,26 +710,26 @@
 
 	/* if command line arguments are set, then setup UI */
 	if (filter != NULL) {
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 		gtk_entry_set_text (GTK_ENTRY(widget), filter);
 	}
 
 	/* Get the main window quit */
 	g_signal_connect_swapped (widget, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
 	gtk_widget_grab_default (widget);
 
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_log_button_help_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_refresh");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_refresh"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_log_button_refresh_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_filter");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_filter"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_log_button_filter_cb), NULL);
 
 	/* hit enter in the search box for filter */
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	g_signal_connect (widget, "activate", G_CALLBACK (gpk_log_button_filter_cb), NULL);
 
 	/* autocompletion can be turned off as it's slow */
@@ -791,7 +738,7 @@
 	if (ret) {
 		/* create the completion object */
 		completion = gpk_package_entry_completion_new ();
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 		gtk_entry_set_completion (GTK_ENTRY (widget), completion);
 		g_object_unref (completion);
 	} else {
@@ -801,21 +748,12 @@
 	}
 	g_object_unref (gconf_client);
 
-	/* connect up PolicyKit actions */
-	g_signal_connect (button_action, "activate", G_CALLBACK (gpk_log_button_rollback_cb), NULL);
-
-	/* hide the rollback button if we can't do the action */
-	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_ROLLBACK))
-		polkit_gnome_action_set_visible (button_action, TRUE);
-	else
-		polkit_gnome_action_set_visible (button_action, FALSE);
-
 	/* create list stores */
 	list_store = gtk_list_store_new (GPK_LOG_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING,
 					 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
 
 	/* create transaction_id tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_simple"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (list_store));
 
@@ -834,11 +772,12 @@
 	gpk_log_refresh ();
 
 	/* show */
-	widget = glade_xml_get_widget (glade_xml, "dialog_simple");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_simple"));
 	gtk_widget_show (widget);
 	gtk_main ();
 
-	g_object_unref (glade_xml);
+out_build:
+	g_object_unref (builder);
 	g_object_unref (list_store);
 	g_object_unref (client);
 	g_free (transaction_id);
@@ -846,6 +785,6 @@
 	if (transactions != NULL)
 		g_object_unref (transactions);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 	return 0;
 }

Modified: trunk/src/gpk-prefs.c
==============================================================================
--- trunk/src/gpk-prefs.c	(original)
+++ trunk/src/gpk-prefs.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <locale.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <math.h>
@@ -33,12 +32,12 @@
 #include <dbus/dbus-glib.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
+#include <unique/unique.h>
 
 #include <gpk-common.h>
 #include <gpk-gnome.h>
 
 #include "egg-debug.h"
-#include "egg-unique.h"
 #include "gpk-enum.h"
 
 /* TRANSLATORS: check once an hour */
@@ -57,7 +56,7 @@
 /* TRANSLATORS: don't update anything */
 #define PK_UPDATE_NONE_TEXT		_("Nothing")
 
-static GladeXML *glade_xml = NULL;
+static GtkBuilder *builder = NULL;
 
 /**
  * pk_button_help_cb:
@@ -89,10 +88,10 @@
 }
 
 /**
- * pk_prefs_update_freq_combo_changed:
+ * gpk_prefs_update_freq_combo_changed:
  **/
 static void
-pk_prefs_update_freq_combo_changed (GtkWidget *widget, gpointer data)
+gpk_prefs_update_freq_combo_changed (GtkWidget *widget, gpointer data)
 {
 	gchar *value;
 	const gchar *action;
@@ -120,10 +119,10 @@
 }
 
 /**
- * pk_prefs_upgrade_freq_combo_changed:
+ * gpk_prefs_upgrade_freq_combo_changed:
  **/
 static void
-pk_prefs_upgrade_freq_combo_changed (GtkWidget *widget, gpointer data)
+gpk_prefs_upgrade_freq_combo_changed (GtkWidget *widget, gpointer data)
 {
 	gchar *value;
 	const gchar *action;
@@ -149,10 +148,10 @@
 }
 
 /**
- * pk_prefs_update_combo_changed:
+ * gpk_prefs_update_combo_changed:
  **/
 static void
-pk_prefs_update_combo_changed (GtkWidget *widget, gpointer data)
+gpk_prefs_update_combo_changed (GtkWidget *widget, gpointer data)
 {
 	gchar *value;
 	const gchar *action;
@@ -166,7 +165,7 @@
 		egg_warning ("value NULL");
 		return;
 	}
-	notify_widget = glade_xml_get_widget (glade_xml, "checkbutton_notify_updates");
+	notify_widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_notify_updates"));
 	if (strcmp (value, PK_UPDATE_ALL_TEXT) == 0) {
 		update = GPK_UPDATE_ENUM_ALL;
 		gtk_widget_set_sensitive (notify_widget, FALSE);
@@ -188,10 +187,30 @@
 }
 
 /**
- * pk_prefs_update_freq_combo_setup:
+ * gpk_prefs_set_combo_model_simple_text:
  **/
 static void
-pk_prefs_update_freq_combo_setup (void)
+gpk_prefs_update_freq_combo_simple_text (GtkWidget *combo_box)
+{
+	GtkCellRenderer *cell;
+	GtkListStore *store;
+
+	store = gtk_list_store_new (1, G_TYPE_STRING);
+	gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), GTK_TREE_MODEL (store));
+	g_object_unref (store);
+
+	cell = gtk_cell_renderer_text_new ();
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell,
+					"text", 0,
+					NULL);
+}
+
+/**
+ * gpk_prefs_update_freq_combo_setup:
+ **/
+static void
+gpk_prefs_update_freq_combo_setup (void)
 {
 	gchar *value;
 	gboolean is_writable;
@@ -200,7 +219,7 @@
 	GConfClient *client;
 
 	client = gconf_client_get_default ();
-	widget = glade_xml_get_widget (glade_xml, "combobox_check");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_check"));
 	is_writable = gconf_client_key_is_writable (client, GPK_CONF_FREQUENCY_GET_UPDATES, NULL);
 	value = gconf_client_get_string (client, GPK_CONF_FREQUENCY_GET_UPDATES, NULL);
 	if (value == NULL) {
@@ -215,6 +234,8 @@
 	/* do we have permission to write? */
 	gtk_widget_set_sensitive (widget, is_writable);
 
+	/* set a simple text model */
+	gpk_prefs_update_freq_combo_simple_text (widget);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_HOURLY_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_DAILY_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_WEEKLY_TEXT);
@@ -224,14 +245,14 @@
 
 	/* only do this after else we redraw the window */
 	g_signal_connect (G_OBJECT (widget), "changed",
-			  G_CALLBACK (pk_prefs_update_freq_combo_changed), NULL);
+			  G_CALLBACK (gpk_prefs_update_freq_combo_changed), NULL);
 }
 
 /**
- * pk_prefs_upgrade_freq_combo_setup:
+ * gpk_prefs_upgrade_freq_combo_setup:
  **/
 static void
-pk_prefs_upgrade_freq_combo_setup (void)
+gpk_prefs_upgrade_freq_combo_setup (void)
 {
 	gchar *value;
 	gboolean is_writable;
@@ -240,7 +261,7 @@
 	GConfClient *client;
 
 	client = gconf_client_get_default ();
-	widget = glade_xml_get_widget (glade_xml, "combobox_upgrade");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_upgrade"));
 	is_writable = gconf_client_key_is_writable (client, GPK_CONF_FREQUENCY_GET_UPGRADES, NULL);
 	value = gconf_client_get_string (client, GPK_CONF_FREQUENCY_GET_UPGRADES, NULL);
 	if (value == NULL) {
@@ -255,6 +276,8 @@
 	/* do we have permission to write? */
 	gtk_widget_set_sensitive (widget, is_writable);
 
+	/* set a simple text model */
+	gpk_prefs_update_freq_combo_simple_text (widget);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_DAILY_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_WEEKLY_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_FREQ_NEVER_TEXT);
@@ -263,14 +286,14 @@
 
 	/* only do this after else we redraw the window */
 	g_signal_connect (G_OBJECT (widget), "changed",
-			  G_CALLBACK (pk_prefs_upgrade_freq_combo_changed), NULL);
+			  G_CALLBACK (gpk_prefs_upgrade_freq_combo_changed), NULL);
 }
 
 /**
- * pk_prefs_auto_update_combo_setup:
+ * gpk_prefs_auto_update_combo_setup:
  **/
 static void
-pk_prefs_auto_update_combo_setup (void)
+gpk_prefs_auto_update_combo_setup (void)
 {
 	gchar *value;
 	gboolean is_writable;
@@ -279,7 +302,7 @@
 	GConfClient *client;
 
 	client = gconf_client_get_default ();
-	widget = glade_xml_get_widget (glade_xml, "combobox_install");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_install"));
 	is_writable = gconf_client_key_is_writable (client, GPK_CONF_AUTO_UPDATE, NULL);
 	value = gconf_client_get_string (client, GPK_CONF_AUTO_UPDATE, NULL);
 	if (value == NULL) {
@@ -294,6 +317,8 @@
 	/* do we have permission to write? */
 	gtk_widget_set_sensitive (widget, is_writable);
 
+	/* set a simple text model */
+	gpk_prefs_update_freq_combo_simple_text (widget);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_UPDATE_ALL_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_UPDATE_SECURITY_TEXT);
 	gtk_combo_box_append_text (GTK_COMBO_BOX (widget), PK_UPDATE_NONE_TEXT);
@@ -302,14 +327,14 @@
 
 	/* only do this after else we redraw the window */
 	g_signal_connect (G_OBJECT (widget), "changed",
-			  G_CALLBACK (pk_prefs_update_combo_changed), NULL);
+			  G_CALLBACK (gpk_prefs_update_combo_changed), NULL);
 }
 
 /**
- * pk_prefs_notify_checkbutton_setup:
+ * gpk_prefs_notify_checkbutton_setup:
  **/
 static void
-pk_prefs_notify_checkbutton_setup (GtkWidget *widget, const gchar *gconf_key)
+gpk_prefs_notify_checkbutton_setup (GtkWidget *widget, const gchar *gconf_key)
 {
 	GConfClient *client;
 	gboolean value;
@@ -325,14 +350,16 @@
 }
 
 /**
- * gpk_prefs_activated_cb
+ * gpk_prefs_message_received_cb
  **/
 static void
-gpk_prefs_activated_cb (EggUnique *egg_unique, gpointer data)
+gpk_prefs_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, gpointer data)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "dialog_prefs");
-	gtk_window_present (GTK_WINDOW (widget));
+	GtkWindow *window;
+	if (command == UNIQUE_ACTIVATE) {
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_prefs"));
+		gtk_window_present (window);
+	}
 }
 
 /**
@@ -344,7 +371,7 @@
 	GtkWidget *widget;
 
 	/* only show label on mobile broadband */
-	widget = glade_xml_get_widget (glade_xml, "hbox_mobile_broadband");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_mobile_broadband"));
 	if (state == PK_NETWORK_ENUM_MOBILE)
 		gtk_widget_show (widget);
 	else
@@ -364,9 +391,10 @@
 	GtkWidget *widget;
 	PkBitfield roles;
 	PkControl *control;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
 	PkNetworkEnum state;
-	gboolean ret;
+	guint retval;
+	GError *error = NULL;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -403,12 +431,14 @@
 	gtk_init (&argc, &argv);
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.Prefs");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.Prefs", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_prefs_activated_cb), NULL);
+	}
+	g_signal_connect (unique_app, "message-received",
+			  G_CALLBACK (gpk_prefs_message_received_cb), NULL);
 
 	/* get actions */
 	control = pk_control_new ();
@@ -417,8 +447,16 @@
 	roles = pk_control_get_actions (control, NULL);
 	state = pk_control_get_network_state (control, NULL);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-prefs.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (glade_xml, "dialog_prefs");
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-prefs.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_prefs"));
 
 	/* Hide window first so that the dialogue resizes itself without redrawing */
 	gtk_widget_hide (main_window);
@@ -427,37 +465,37 @@
 	/* Get the main window quit */
 	g_signal_connect_swapped (main_window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "checkbutton_notify_updates");
-	pk_prefs_notify_checkbutton_setup (widget, GPK_CONF_NOTIFY_AVAILABLE);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_notify_updates"));
+	gpk_prefs_notify_checkbutton_setup (widget, GPK_CONF_NOTIFY_AVAILABLE);
 
-	widget = glade_xml_get_widget (glade_xml, "checkbutton_notify_completed");
-	pk_prefs_notify_checkbutton_setup (widget, GPK_CONF_NOTIFY_COMPLETED);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_notify_completed"));
+	gpk_prefs_notify_checkbutton_setup (widget, GPK_CONF_NOTIFY_COMPLETED);
 
-	widget = glade_xml_get_widget (glade_xml, "checkbutton_mobile_broadband");
-	pk_prefs_notify_checkbutton_setup (widget, GPK_CONF_CONNECTION_USE_MOBILE);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_mobile_broadband"));
+	gpk_prefs_notify_checkbutton_setup (widget, GPK_CONF_CONNECTION_USE_MOBILE);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_button_help_cb), NULL);
 
 	/* only show label on mobile broadband */
 	if (state == PK_NETWORK_ENUM_MOBILE) {
-		widget = glade_xml_get_widget (glade_xml, "hbox_mobile_broadband");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_mobile_broadband"));
 		gtk_widget_show (widget);
 	}
 
 	/* update the combo boxes */
-	pk_prefs_update_freq_combo_setup ();
-	pk_prefs_upgrade_freq_combo_setup ();
-	pk_prefs_auto_update_combo_setup ();
+	gpk_prefs_update_freq_combo_setup ();
+	gpk_prefs_upgrade_freq_combo_setup ();
+	gpk_prefs_auto_update_combo_setup ();
 
 	/* hide if not supported */
 	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES)) {
-		widget = glade_xml_get_widget (glade_xml, "label_upgrade");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
 		gtk_widget_hide (widget);
-		widget = glade_xml_get_widget (glade_xml, "combobox_upgrade");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_upgrade"));
 		gtk_widget_hide (widget);
 	}
 
@@ -466,10 +504,11 @@
 	/* wait */
 	gtk_main ();
 
+out_build:
 	g_object_unref (control);
-	g_object_unref (glade_xml);
+	g_object_unref (builder);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 
 	return 0;
 }

Modified: trunk/src/gpk-repo.c
==============================================================================
--- trunk/src/gpk-repo.c	(original)
+++ trunk/src/gpk-repo.c	Fri Apr  3 15:33:03 2009
@@ -25,15 +25,14 @@
 #include <glib/gi18n.h>
 #include <locale.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <math.h>
 #include <string.h>
 #include <dbus/dbus-glib.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
+#include <unique/unique.h>
 
-#include "egg-unique.h"
 #include "egg-debug.h"
 #include "egg-string.h"
 
@@ -43,13 +42,14 @@
 #include "gpk-animated-icon.h"
 #include "gpk-enum.h"
 
-static GladeXML *glade_xml = NULL;
+static GtkBuilder *builder = NULL;
 static GtkListStore *list_store = NULL;
 static PkClient *client = NULL;
 static PkBitfield roles;
 static GConfClient *gconf_client;
 static gboolean show_details;
 static GtkTreePath *path_global = NULL;
+static GtkWidget *image_animation = NULL;
 
 enum {
 	REPO_COLUMN_ENABLED,
@@ -169,7 +169,7 @@
 	}
 
 	/* set insensitive until we've done this */
-	widget = glade_xml_get_widget (glade_xml, "treeview_repo");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
 	gtk_widget_set_sensitive (widget, FALSE);
 
 	/* get toggled iter */
@@ -213,7 +213,7 @@
 		    const gchar *description, gboolean enabled, gpointer data)
 {
 	GtkTreeIter iter;
-	GtkTreeView *treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_repo"));
+	GtkTreeView *treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
 	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
 
 	egg_debug ("repo = %s:%s:%i", repo_id, description, enabled);
@@ -289,11 +289,11 @@
 	GtkWidget *widget;
 
 	/* set sensitive now we've done this */
-	widget = glade_xml_get_widget (glade_xml, "treeview_repo");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
 	gtk_widget_set_sensitive (widget, TRUE);
 
 	/* remove the items that are not used */
-	treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_repo"));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
 	model = gtk_tree_view_get_model (treeview);
 	gpk_repo_remove_nonactive (model);
 }
@@ -307,23 +307,21 @@
 	const gchar *text;
 	GtkWidget *widget;
 
-	widget = glade_xml_get_widget (glade_xml, "viewport_animation_preview");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_animation_preview"));
 	if (status == PK_STATUS_ENUM_FINISHED) {
 		gtk_widget_hide (widget);
-		widget = glade_xml_get_widget (glade_xml, "image_animation");
-		gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+		gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (image_animation), FALSE);
 		return;
 	}
 
 	/* set the text and show */
 	gtk_widget_show (widget);
-	widget = glade_xml_get_widget (glade_xml, "label_animation");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_animation"));
 	text = gpk_status_enum_to_localised_text (status);
 	gtk_label_set_label (GTK_LABEL (widget), text);
 
 	/* set icon */
-	widget = glade_xml_get_widget (glade_xml, "image_animation");
-	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (widget), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
+	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (image_animation), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
 	gtk_widget_show (widget);
 }
 
@@ -333,10 +331,10 @@
 static void
 gpk_repo_error_code_cb (PkClient *client_, PkErrorCodeEnum code, const gchar *details, gpointer data)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "dialog_repo");
+	GtkWindow *window;
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_repo"));
 	/* TRANSLATORS: for one reason or another, we could not enable or disable a software source */
-	gpk_error_dialog_modal (GTK_WINDOW (widget), _("Failed to change status"),
+	gpk_error_dialog_modal (window, _("Failed to change status"),
 				gpk_error_enum_to_localised_text (code), details);
 }
 
@@ -353,7 +351,7 @@
 	GtkTreeModel *model;
 
 	/* mark the items as not used */
-	treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_repo"));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
 	model = gtk_tree_view_get_model (treeview);
 	gpk_repo_mark_nonactive (model);
 
@@ -397,28 +395,16 @@
 }
 
 /**
- * gpk_repo_activated_cb
+ * gpk_repo_message_received_cb
  **/
 static void
-gpk_repo_activated_cb (EggUnique *egg_unique, gpointer data)
-{
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "dialog_repo");
-	gtk_window_present (GTK_WINDOW (widget));
-}
-
-/**
- * gpk_repo_create_custom_widget:
- **/
-static GtkWidget *
-gpk_repo_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-			       gchar *string1, gchar *string2,
-			       gint int1, gint int2, gpointer user_data)
+gpk_repo_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, gpointer data)
 {
-	if (egg_strequal (name, "image_animation"))
-		return gpk_animated_icon_new ();
-	egg_warning ("name unknown='%s'", name);
-	return NULL;
+	GtkWindow *window;
+	if (command == UNIQUE_ACTIVATE) {
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_repo"));
+		gtk_window_present (window);
+	}
 }
 
 /**
@@ -433,8 +419,11 @@
 	GtkWidget *widget;
 	GtkTreeSelection *selection;
 	PkControl *control;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
+	GError *error = NULL;
+	guint retval;
 	gboolean ret;
+	GtkBox *box;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -472,12 +461,14 @@
                                            GPK_DATA G_DIR_SEPARATOR_S "icons");
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.Repo");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.Repo", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_repo_activated_cb), NULL);
+	}
+	g_signal_connect (unique_app, "message-received",
+			  G_CALLBACK (gpk_repo_message_received_cb), NULL);
 
 	gconf_client = gconf_client_get_default ();
 
@@ -496,23 +487,33 @@
 			  G_CALLBACK (gpk_repo_repo_list_changed_cb), NULL);
 	roles = pk_control_get_actions (control, NULL);
 
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_repo_create_custom_widget, NULL);
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-repo.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-repo.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (glade_xml, "dialog_repo");
-	gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_SOURCES);
+	/* add animated widget */
+	image_animation = gpk_animated_icon_new ();
+	box = GTK_BOX (gtk_builder_get_object (builder, "hbox_animation"));
+	gtk_box_pack_start (box, image_animation, FALSE, FALSE, 0);
+	gtk_box_reorder_child (box, image_animation, 0);
+	gtk_widget_show (image_animation);
 
-	/* Get the main window quit */
+	main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_repo"));
+	gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_SOURCES);
 	g_signal_connect_swapped (main_window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_button_help_cb), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "checkbutton_detail");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_detail"));
 	show_details = gconf_client_get_bool (gconf_client, GPK_CONF_REPO_SHOW_DETAILS, NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), show_details);
 	g_signal_connect (widget, "clicked",
@@ -526,7 +527,7 @@
 					 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
 
 	/* create repo tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_repo");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (list_store));
 
@@ -542,7 +543,7 @@
 	gtk_widget_show (main_window);
 
 	/* focus back to the close button */
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	gtk_widget_grab_focus (widget);
 
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST)) {
@@ -551,22 +552,23 @@
 	} else {
 		gpk_repo_detail_cb (client, "default",
 				   _("Getting software source list not supported by backend"), FALSE, NULL);
-		widget = glade_xml_get_widget (glade_xml, "treeview_repo");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
 		gtk_widget_set_sensitive (widget, FALSE);
-		widget = glade_xml_get_widget (glade_xml, "checkbutton_detail");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_detail"));
 		gtk_widget_set_sensitive (widget, FALSE);
 	}
 
 	/* wait */
 	gtk_main ();
 
-	g_object_unref (glade_xml);
 	g_object_unref (list_store);
+out_build:
+	g_object_unref (builder);
 	g_object_unref (gconf_client);
 	g_object_unref (client);
 	g_object_unref (control);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 
 	return 0;
 }

Modified: trunk/src/gpk-service-pack.c
==============================================================================
--- trunk/src/gpk-service-pack.c	(original)
+++ trunk/src/gpk-service-pack.c	Fri Apr  3 15:33:03 2009
@@ -25,7 +25,6 @@
 #include <glib/gi18n.h>
 #include <locale.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <math.h>
 #include <string.h>
@@ -33,9 +32,9 @@
 #include <dbus/dbus-glib.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
+#include <unique/unique.h>
 
 #include "egg-debug.h"
-#include "egg-unique.h"
 #include "egg-string.h"
 
 #include "gpk-common.h"
@@ -49,7 +48,7 @@
 	GPK_ACTION_ENUM_UPDATES
 } GpkActionEnum;
 
-static GladeXML *glade_xml = NULL;
+static GtkBuilder *builder = NULL;
 static GpkActionEnum action = GPK_ACTION_ENUM_UPDATES;
 static guint pulse_id = 0;
 
@@ -74,7 +73,7 @@
 static gchar *
 gpk_pack_get_default_filename (const gchar *directory)
 {
-	GtkWidget *widget;
+	GtkEntry *entry;
 	gchar *filename = NULL;
 	gchar *distro_id;
 	gchar *iso_time = NULL;
@@ -83,8 +82,8 @@
 
 	distro_id = pk_get_distro_id ();
 	if (action == GPK_ACTION_ENUM_PACKAGE) {
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
-		package = gtk_entry_get_text (GTK_ENTRY(widget));
+		entry = GTK_ENTRY (gtk_builder_get_object (builder, "entry_package"));
+		package = gtk_entry_get_text (entry);
 		filename = g_strdup_printf ("%s/%s-%s.servicepack", directory, package, distro_id);
 	} else if (action == GPK_ACTION_ENUM_COPY) {
 		nodename = pk_get_node_name ();
@@ -116,21 +115,21 @@
 gpk_pack_widgets_activate (gboolean enable)
 {
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	gtk_widget_set_sensitive (widget, enable && action == GPK_ACTION_ENUM_PACKAGE);
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_updates");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_updates"));
 	gtk_widget_set_sensitive (widget, enable);
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_package"));
 	gtk_widget_set_sensitive (widget, enable);
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_copy");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_copy"));
 	gtk_widget_set_sensitive (widget, enable);
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_directory");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_directory"));
 	gtk_widget_set_sensitive (widget, enable);
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	gtk_widget_set_sensitive (widget, enable && action != GPK_ACTION_ENUM_COPY);
-	widget = glade_xml_get_widget (glade_xml, "button_create");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_create"));
 	gtk_widget_set_sensitive (widget, enable);
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	gtk_widget_set_sensitive (widget, enable);
 }
 
@@ -140,11 +139,11 @@
 static void
 gpk_pack_package_cb (PkServicePack *pack, const PkPackageObj *obj, gpointer data)
 {
-	GtkWidget *widget;
+	GtkProgressBar *progress_bar;
 	gchar *text;
-	widget = glade_xml_get_widget (glade_xml, "progressbar_percentage");
+	progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (builder, "progressbar_percentage"));
 	text = g_strdup_printf ("%s-%s.%s", obj->id->name, obj->id->version, obj->id->arch);
-	gtk_progress_bar_set_text (GTK_PROGRESS_BAR(widget), text);
+	gtk_progress_bar_set_text (progress_bar, text);
 	g_free (text);
 }
 
@@ -154,9 +153,9 @@
 static gboolean
 gpk_pack_percentage_pulse_cb (gpointer data)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "progressbar_percentage");
-	gtk_progress_bar_pulse (GTK_PROGRESS_BAR(widget));
+	GtkProgressBar *progress_bar;
+	progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (builder, "progressbar_percentage"));
+	gtk_progress_bar_pulse (progress_bar);
 	return TRUE;
 }
 
@@ -166,8 +165,7 @@
 static void
 gpk_pack_set_percentage (guint percentage)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "progressbar_percentage");
+	GtkProgressBar *progress_bar;
 
 	/* no info */
 	if (percentage == 101) {
@@ -183,7 +181,8 @@
 		pulse_id = 0;
 	}
 	
-	gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(widget), percentage / 100.0f);
+	progress_bar = GTK_PROGRESS_BAR (gtk_builder_get_object (builder, "progressbar_percentage"));
+	gtk_progress_bar_set_fraction (progress_bar, percentage / 100.0f);
 }
 
 /**
@@ -211,7 +210,7 @@
 static gchar *
 gpk_pack_resolve_package_id (const gchar *package)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 	PkPackageList *list = NULL;
 	gchar *package_id = NULL;
 	gchar **packages;
@@ -242,19 +241,19 @@
 
 	/* display errors if not exactly one match */
 	if (len == 0) {
-		widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_pack"));
 		/* TRANSLATORS: message details when there were no packages found of that name */
 		text = g_strdup_printf (_("No package '%s' found!"), package);
 		/* TRANSLATORS: did not create pack file */
-		gpk_error_dialog_modal (GTK_WINDOW (widget), _("Failed to create"), text, NULL);
+		gpk_error_dialog_modal (window, _("Failed to create"), text, NULL);
 		g_free (text);
 		goto out;
 	} else if (len > 1) {
-		widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_pack"));
 		/* TRANSLATORS: more than one match for the package name */
 		text = g_strdup_printf (_("More than one possible package '%s' found!"), package);
 		/* TRANSLATORS: did not create pack file */
-		gpk_error_dialog_modal (GTK_WINDOW (widget), _("Failed to create"), text, NULL);
+		gpk_error_dialog_modal (window, _("Failed to create"), text, NULL);
 		g_free (text);
 		goto out;
 	}
@@ -361,7 +360,7 @@
 	GError *error = NULL;
 	gboolean ret;
 
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_directory");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_directory"));
 	directory = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(widget));
 
 	/* use a default filename */
@@ -369,14 +368,14 @@
 
 	/* start the action */
 	gpk_pack_widgets_activate (FALSE);
-	widget = glade_xml_get_widget (glade_xml, "frame_progress");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "frame_progress"));
 	gtk_widget_show (widget);
 
 	/* copy the system package list */
 	if (action == GPK_ACTION_ENUM_COPY) {
 		ret = gpk_pack_copy_package_lists (filename, &error);
 		if (!ret) {
-			widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+			widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_pack"));
 			/* TRANSLATORS: Could not create package list */
 			gpk_error_dialog_modal (GTK_WINDOW (widget), _("Create error"), _("Cannot copy system package list"), error->message);
 			g_error_free (error);
@@ -385,17 +384,17 @@
 	}
 
 	/* get the exclude list, and fall back to the system copy */
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	exclude = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(widget));
 	if (exclude == NULL)
 		exclude = g_strdup (PK_SYSTEM_PACKAGE_LIST_FILENAME);
 
 	/* get the package to download */
 	if (action == GPK_ACTION_ENUM_PACKAGE) {
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 		package = gtk_entry_get_text (GTK_ENTRY(widget));
 		if (egg_strzero (package)) {
-			widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+			widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_pack"));
 			/* TRANSLATORS: Could not create package list */
 			gpk_error_dialog_modal (GTK_WINDOW (widget), _("Create error"), _("No package name selected"), NULL);
 			goto out;
@@ -410,7 +409,7 @@
 	list = pk_package_list_new ();
 	ret = pk_obj_list_from_file (PK_OBJ_LIST(list), exclude);
 	if (!ret) {
-		widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_pack"));
 		/* TRANSLATORS: we could not read the file list for the destination computer */
 		gpk_error_dialog_modal (GTK_WINDOW (widget), _("Create error"), _("Cannot read destination package list"), NULL);
 		goto out;
@@ -429,7 +428,7 @@
 	else if (action == GPK_ACTION_ENUM_PACKAGE)
 		ret = pk_service_pack_create_for_package_ids (pack, package_ids, &error);
 	if (!ret) {
-		widget = glade_xml_get_widget (glade_xml, "dialog_pack");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_pack"));
 		/* TRANSLATORS: we could not create the pack file, generic error */
 		gpk_error_dialog_modal (GTK_WINDOW (widget), _("Create error"), _("Cannot create service pack"), error->message);
 		g_error_free (error);
@@ -439,13 +438,13 @@
 out:
 	/* stop the action */
 	gpk_pack_widgets_activate (TRUE);
-	widget = glade_xml_get_widget (glade_xml, "frame_progress");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "frame_progress"));
 	gtk_widget_hide (widget);
 	gpk_pack_set_percentage (100);
 
 	/* blank */
-	widget = glade_xml_get_widget (glade_xml, "progressbar_percentage");
-	gtk_progress_bar_set_text (GTK_PROGRESS_BAR(widget), "");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_percentage"));
+	gtk_progress_bar_set_text (GTK_PROGRESS_BAR (widget), "");
 
 	if (list != NULL)
 		g_object_unref (list);
@@ -456,14 +455,16 @@
 }
 
 /**
- * gpk_pack_activated_cb
+ * gpk_pack_message_received_cb
  **/
 static void
-gpk_pack_activated_cb (EggUnique *egg_unique, gpointer data)
+gpk_pack_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, gpointer data)
 {
-	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "window_prefs");
-	gtk_window_present (GTK_WINDOW (widget));
+	GtkWindow *window;
+	if (command == UNIQUE_ACTIVATE) {
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "window_prefs"));
+		gtk_window_present (window);
+	}
 }
 
 /**
@@ -474,9 +475,9 @@
 {
 	GtkWidget *widget;
 	egg_debug ("got updates");
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	gtk_widget_set_sensitive (widget, FALSE);
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	gtk_widget_set_sensitive (widget, TRUE);
 	action = GPK_ACTION_ENUM_UPDATES;
 }
@@ -489,9 +490,9 @@
 {
 	GtkWidget *widget;
 	egg_debug ("got package");
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	gtk_widget_set_sensitive (widget, TRUE);
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	gtk_widget_set_sensitive (widget, TRUE);
 	action = GPK_ACTION_ENUM_PACKAGE;
 }
@@ -504,9 +505,9 @@
 {
 	GtkWidget *widget;
 	egg_debug ("got copy");
-	widget = glade_xml_get_widget (glade_xml, "entry_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 	gtk_widget_set_sensitive (widget, FALSE);
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	gtk_widget_set_sensitive (widget, FALSE);
 	action = GPK_ACTION_ENUM_COPY;
 }
@@ -525,13 +526,15 @@
 	GtkEntryCompletion *completion;
 	PkBitfield roles;
 	PkControl *control;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
 	gboolean ret;
 	GConfClient *client;
 	gchar *option = NULL;
 	gchar *package = NULL;
 	gchar *with_list = NULL;
 	gchar *output = NULL;
+	guint retval;
+	GError *error = NULL;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -573,20 +576,30 @@
 	gtk_init (&argc, &argv);
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.ServicePack");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.ServicePack", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_pack_activated_cb), NULL);
+	}
+	g_signal_connect (unique_app, "message-received",
+			  G_CALLBACK (gpk_pack_message_received_cb), NULL);
 
 	/* get actions */
 	control = pk_control_new ();
 	roles = pk_control_get_actions (control, NULL);
 	g_object_unref (control);
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-service-pack.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (glade_xml, "dialog_pack");
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-service-pack.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
+
+	main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_pack"));
 
 	/* Hide window first so that the dialogue resizes itself without redrawing */
 	gtk_widget_hide (main_window);
@@ -595,35 +608,35 @@
 	/* Get the main window quit */
 	g_signal_connect_swapped (main_window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 	filter = gtk_file_filter_new ();
 	/* TRANSLATORS: file search type, lists of packages */
 	gtk_file_filter_set_name (filter, _("Package list files"));
 	gtk_file_filter_add_pattern (filter, "*.package-list");
 	gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(widget), filter);
 
-	widget = glade_xml_get_widget (glade_xml, "filechooserbutton_directory");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_directory"));
 	filter = gtk_file_filter_new ();
 	/* TRANSLATORS: file search type, service pack destination file type */
 	gtk_file_filter_set_name (filter, _("Service pack files"));
 	gtk_file_filter_add_pattern (filter, "*.servicepack");
 	gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(widget), filter);
 
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_updates");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_updates"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_pack_radio_updates_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_package");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_package"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_pack_radio_package_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "radiobutton_copy");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_copy"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_pack_radio_copy_cb), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_create");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_create"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_pack_button_create_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_pack_button_help_cb), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "frame_progress");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "frame_progress"));
 	gtk_widget_hide (widget);
 
 	/* autocompletion can be turned off as it's slow */
@@ -632,7 +645,7 @@
 	if (ret) {
 		/* create the completion object */
 		completion = gpk_package_entry_completion_new ();
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 		gtk_entry_set_completion (GTK_ENTRY (widget), completion);
 		g_object_unref (completion);
 	}
@@ -641,26 +654,26 @@
 	/* if command line arguments are set, then setup UI */
 	if (option != NULL) {
 		if (egg_strequal (option, "list")) {
-			widget = glade_xml_get_widget (glade_xml, "radiobutton_copy");
+			widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_copy"));
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 		} else if (egg_strequal (option, "updates")) {
-			widget = glade_xml_get_widget (glade_xml, "radiobutton_updates");
+			widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_updates"));
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 		} else if (egg_strequal (option, "package")) {
-			widget = glade_xml_get_widget (glade_xml, "radiobutton_package");
+			widget = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton_package"));
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 		}
 	}
 	if (package != NULL) {
-		widget = glade_xml_get_widget (glade_xml, "entry_package");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry_package"));
 		gtk_entry_set_text (GTK_ENTRY(widget), package);
 	}
 	if (with_list != NULL) {
-		widget = glade_xml_get_widget (glade_xml, "filechooserbutton_exclude");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_exclude"));
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(widget), with_list);
 	}
 	if (output != NULL) {
-		widget = glade_xml_get_widget (glade_xml, "filechooserbutton_directory");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserbutton_directory"));
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(widget), output);
 	}
 
@@ -669,9 +682,10 @@
 	/* wait */
 	gtk_main ();
 
-	g_object_unref (glade_xml);
+out_build:
+	g_object_unref (builder);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 	g_free (option);
 	g_free (package);
 	g_free (with_list);

Modified: trunk/src/gpk-update-viewer.c
==============================================================================
--- trunk/src/gpk-update-viewer.c	(original)
+++ trunk/src/gpk-update-viewer.c	Fri Apr  3 15:33:03 2009
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007-2008 Richard Hughes <richard hughsie com>
+ * Copyright (C) 2007-2009 Richard Hughes <richard hughsie com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -24,206 +24,280 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
-#include <math.h>
-#include <string.h>
 #include <dbus/dbus-glib.h>
-#include <locale.h>
 
-#include <polkit-gnome/polkit-gnome.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
 #include <libnotify/notify.h>
+#include <unique/unique.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
-#include "egg-unique.h"
 #include "egg-markdown.h"
+#include "egg-console-kit.h"
 
 #include "gpk-common.h"
 #include "gpk-gnome.h"
 #include "gpk-error.h"
 #include "gpk-consolekit.h"
-#include "gpk-cell-renderer-uri.h"
-#include "gpk-animated-icon.h"
+#include "gpk-cell-renderer-size.h"
+#include "gpk-cell-renderer-info.h"
+#include "gpk-cell-renderer-restart.h"
+#include "gpk-cell-renderer-percentage.h"
 #include "gpk-client.h"
 #include "gpk-enum.h"
+#include "gpk-helper-repo-signature.h"
+#include "gpk-helper-eula.h"
 
+#define GPK_UPDATE_VIEWER_AUTO_CLOSE_TIMEOUT	10 /* seconds */
+#define GPK_UPDATE_VIEWER_AUTO_RESTART_TIMEOUT	60 /* seconds */
+#define GPK_UPDATE_VIEWER_MOBILE_SMALL_SIZE	512*1024 /* bytes */
+#define GNOME_SESSION_MANAGER_SERVICE		"org.gnome.SessionManager"
+#define GNOME_SESSION_MANAGER_PATH		"/org/gnome/SessionManager"
+#define GNOME_SESSION_MANAGER_INTERFACE		"org.gnome.SessionManager"
+
+static guint auto_shutdown_id = 0;
 static GMainLoop *loop = NULL;
-static GladeXML *glade_xml = NULL;
-static GtkListStore *list_store_preview = NULL;
-static GtkListStore *list_store_details = NULL;
-static GtkListStore *list_store_description = NULL;
-static PkClient *client_query = NULL;
+static GtkBuilder *builder = NULL;
+static GtkListStore *list_store_updates = NULL;
+static GtkTextBuffer *text_buffer = NULL;
+static PkClient *client_primary = NULL;
+static PkClient *client_secondary = NULL;
 static PkControl *control = NULL;
-static PkTaskList *tlist = NULL;
-static gchar *cached_package_id = NULL;
-static GpkClient *gclient = NULL;
-static gboolean are_updates_available = FALSE;
-static guint description_event_id = 0;
+static PkPackageList *update_list = NULL;
+static GpkHelperRepoSignature *helper_repo_signature = NULL;
+static GpkHelperEula *helper_eula = NULL;
 static EggMarkdown *markdown = NULL;
-static PolKitGnomeAction *refresh_action = NULL;
-static PolKitGnomeAction *update_system_action = NULL;
-static PolKitGnomeAction *update_packages_action = NULL;
-static PolKitGnomeAction *restart_action = NULL;
-
-/* for the preview throbber */
-static void gpk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear);
-static void gpk_update_viewer_description_animation_stop (void);
-static void gpk_update_viewer_get_new_update_list (void);
+static PkPackageId *package_id_last = NULL;
+static PkRestartEnum restart_update = PK_RESTART_ENUM_NONE;
+static gboolean running_hidden = FALSE;
+static guint size_total = 0;
 
 enum {
-	PREVIEW_COLUMN_ICON,
-	PREVIEW_COLUMN_TEXT,
-	PREVIEW_COLUMN_PROGRESS,
-	PREVIEW_COLUMN_LAST
+	GPK_UPDATES_COLUMN_TEXT,
+	GPK_UPDATES_COLUMN_ID,
+	GPK_UPDATES_COLUMN_INFO,
+	GPK_UPDATES_COLUMN_SELECT,
+	GPK_UPDATES_COLUMN_SENSITIVE,
+	GPK_UPDATES_COLUMN_CLICKABLE,
+	GPK_UPDATES_COLUMN_RESTART,
+	GPK_UPDATES_COLUMN_SIZE,
+	GPK_UPDATES_COLUMN_PERCENTAGE,
+	GPK_UPDATES_COLUMN_STATUS,
+	GPK_UPDATES_COLUMN_DETAILS_OBJ,
+	GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ,
+	GPK_UPDATES_COLUMN_LAST
 };
 
-enum {
-	DESC_COLUMN_TITLE,
-	DESC_COLUMN_TEXT,
-	DESC_COLUMN_URI,
-	DESC_COLUMN_LAST
-};
+static gboolean gpk_update_viewer_get_new_update_list (void);
 
-enum {
-	HISTORY_COLUMN_ICON,
-	HISTORY_COLUMN_TEXT,
-	HISTORY_COLUMN_LAST
-};
+/**
+ * gpk_update_viewer_logout:
+ **/
+static void
+gpk_update_viewer_logout (void)
+{
+	DBusGConnection *connection;
+	DBusGProxy *proxy;
+	GError *error = NULL;
+	gboolean ret;
 
-enum {
-	PACKAGES_COLUMN_ICON,
-	PACKAGES_COLUMN_TEXT,
-	PACKAGES_COLUMN_ID,
-	PACKAGES_COLUMN_INFO,
-	PACKAGES_COLUMN_SELECT,
-	PACKAGES_COLUMN_SENSITIVE,
-	PACKAGES_COLUMN_CLICKABLE,
-	PACKAGES_COLUMN_LAST
-};
+	/* get org.gnome.Session interface */
+	connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
+	proxy = dbus_g_proxy_new_for_name_owner (connection, GNOME_SESSION_MANAGER_SERVICE,
+						 GNOME_SESSION_MANAGER_PATH,
+						 GNOME_SESSION_MANAGER_INTERFACE, &error);
+	if (proxy == NULL) {
+		egg_warning ("cannot connect to proxy %s: %s", GNOME_SESSION_MANAGER_SERVICE, error->message);
+		g_error_free (error);
+		goto out;
+	}
 
-typedef enum {
-	PAGE_PREVIEW,
-	PAGE_DETAILS,
-	PAGE_CONFIRM,
-	PAGE_LAST
-} PkPageEnum;
+	/* log out of the session */
+	ret = dbus_g_proxy_call (proxy, "Shutdown", &error, G_TYPE_INVALID);
+	if (!ret) {
+		egg_warning ("cannot shutdown session: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	g_object_unref (proxy);
+}
 
 /**
- * pk_button_help_cb:
+ * gpk_update_viewer_shutdown:
  **/
 static void
-pk_button_help_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_shutdown (void)
 {
-	const char *id = data;
-	gpk_gnome_help (id);
+	EggConsoleKit *console;
+	GError *error = NULL;
+	gboolean ret;
+
+	/* use consolekit to restart */
+	console = egg_console_kit_new ();
+	ret = egg_console_kit_restart (console, &error);
+	if (!ret) {
+		egg_warning ("cannot restart: %s", error->message);
+		g_error_free (error);
+	}
+	g_object_unref (console);
 }
 
 /**
- * gpk_update_viewer_set_page:
+ * gpk_update_viewer_button_help_cb:
  **/
 static void
-gpk_update_viewer_set_page (PkPageEnum page)
+gpk_update_viewer_button_help_cb (GtkWidget *widget, gpointer data)
 {
-	GtkWidget *widget;
-	GList *list, *l;
-	guint i;
-
-	widget = glade_xml_get_widget (glade_xml, "window_updates");
-	if (page == PAGE_LAST) {
-		gtk_widget_hide (widget);
-		gpk_client_set_parent (gclient, NULL);
-		return;
-	}
+	const gchar *id = data;
+	gpk_gnome_help (id);
+}
 
-	/* restore modalness */
-	gpk_client_set_parent (gclient, GTK_WINDOW (widget));
+/**
+ * gpk_update_viewer_button_close_cb:
+ **/
+static void
+gpk_update_viewer_button_close_cb (GtkWidget *widget, gpointer data)
+{
+	g_main_loop_quit (loop);
+}
 
-	/* some pages are resizeable */
-	if (page == PAGE_DETAILS)
-		gtk_window_set_resizable (GTK_WINDOW (widget), TRUE);
-	else
-		gtk_window_set_resizable (GTK_WINDOW (widget), FALSE);
-	if (page == PAGE_CONFIRM)
-		gtk_window_unmaximize (GTK_WINDOW (widget));
-	gtk_widget_show (widget);
+/**
+ * gpk_update_viewer_undisable_packages:
+ **/
+static void
+gpk_update_viewer_undisable_packages ()
+{
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	gboolean valid;
 
-	/* clear */
-	if (page == PAGE_DETAILS) {
-		widget = glade_xml_get_widget (glade_xml, "scrolledwindow_description");
-		gtk_widget_hide (widget);
-	}
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
 
-	widget = glade_xml_get_widget (glade_xml, "hbox_hidden");
-	list = gtk_container_get_children (GTK_CONTAINER (widget));
-	for (l=list, i=0; l; l=l->next, i++) {
-		if (i == page)
-			gtk_widget_show (l->data);
-		else
-			gtk_widget_hide (l->data);
+	/* set all the checkboxes sensitive */
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+	while (valid) {
+		gtk_list_store_set (list_store_updates, &iter,
+				    GPK_UPDATES_COLUMN_SENSITIVE, TRUE,
+				    GPK_UPDATES_COLUMN_CLICKABLE, TRUE,
+				    -1);
+		valid = gtk_tree_model_iter_next (model, &iter);
 	}
 }
 
 /**
- * gpk_update_viewer_update_system_cb:
+ * gpk_update_viewer_button_check_connection:
  **/
-static void
-gpk_update_viewer_update_system_cb (PolKitGnomeAction *action, gpointer data)
+static gboolean
+gpk_update_viewer_button_check_connection (guint size)
 {
-	GtkWidget *widget;
-	gboolean ret;
+	GtkWindow *window;
+	GtkWidget *dialog;
+	gboolean ret = TRUE;
+	gchar *text_size = NULL;
+	gchar *message = NULL;
+	GtkResponseType response;
+	GError *error = NULL;
+	PkNetworkEnum state;
+
+	/* get network state */
+	state = pk_control_get_network_state (control, &error);
+	if (error != NULL) {
+		egg_warning ("failed to get network state: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
 
-	egg_debug ("Doing the system update");
+	/* not on wireless mobile */
+	if (state != PK_NETWORK_ENUM_MOBILE)
+		goto out;
 
-	widget = glade_xml_get_widget (glade_xml, "button_overview2");
-	gtk_widget_hide (widget);
+	/* not when small */
+	if (size < GPK_UPDATE_VIEWER_MOBILE_SMALL_SIZE)
+		goto out;
 
-	gpk_update_viewer_set_page (PAGE_LAST);
-	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_WARNING_PROGRESS);
-	ret = gpk_client_update_system (gclient, NULL);
+	/* show modal dialog */
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+	dialog = gtk_message_dialog_new (window, GTK_DIALOG_MODAL,
+					 GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL,
+					 "%s", _("Detected wireless broadband connection"));
+
+	/* TRANSLATORS: this is the button text when we check if it's okay to download */
+	gtk_dialog_add_button (GTK_DIALOG (dialog), _("Update anyway"), GTK_RESPONSE_OK);
+	text_size = g_format_size_for_display (size_total);
+
+	/* TRANSLATORS, the %s is a size, e.g. 13.3Mb */
+	message = g_strdup_printf (_("Connectivity is being provided by wireless broadband, and it may be expensive to download %s."), text_size);
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog), "%s", message);
+
+	gtk_window_set_icon_name (GTK_WINDOW(dialog), GPK_ICON_SOFTWARE_INSTALLER);
+	response = gtk_dialog_run (GTK_DIALOG(dialog));
+	gtk_widget_destroy (dialog);
 
-	/* did we succeed updating the system */
-	if (!ret)
-		gpk_update_viewer_set_page (PAGE_PREVIEW);
-	else
-		gpk_update_viewer_set_page (PAGE_CONFIRM);
+	if (response != GTK_RESPONSE_OK)
+		ret = FALSE;
+out:
+	g_free (text_size);
+	g_free (message);
+	return ret;
 }
 
+
 /**
- * gpk_update_viewer_apply_cb:
+ * gpk_update_viewer_button_install_cb:
  **/
 static void
-gpk_update_viewer_apply_cb (PolKitGnomeAction *action, gpointer data)
+gpk_update_viewer_button_install_cb (GtkWidget *widget, gpointer data)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
+	GtkTreeView *treeview;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
+	GtkTreeSelection *selection;
 	gboolean ret;
 	gboolean valid;
 	gboolean update;
 	gboolean selected_all = TRUE;
 	gboolean selected_any = FALSE;
 	gchar *package_id;
-	GPtrArray *array;
-	gchar **package_ids;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	gchar **package_ids = NULL;
+
+	/* check connection */
+	ret = gpk_update_viewer_button_check_connection (size_total);
+	if (!ret)
+		goto out;
+
+	/* hide the upgrade viewbox from now on */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_upgrade"));
+	gtk_widget_hide (widget);
 
 	egg_debug ("Doing the package updates");
 	array = g_ptr_array_new ();
 
-	widget = glade_xml_get_widget (glade_xml, "treeview_updates");
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
 
 	/* get the first iter in the list */
 	valid = gtk_tree_model_get_iter_first (model, &iter);
 
 	/* find out how many we should update */
 	while (valid) {
-		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_SELECT, &update,
-				    PACKAGES_COLUMN_ID, &package_id, -1);
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_SELECT, &update,
+				    GPK_UPDATES_COLUMN_ID, &package_id, -1);
 
+		/* set all the checkboxes insensitive */
+		gtk_list_store_set (list_store_updates, &iter,
+				    GPK_UPDATES_COLUMN_CLICKABLE, FALSE,
+				    GPK_UPDATES_COLUMN_SENSITIVE, FALSE, -1);
+
+		/* ay selected? */
 		if (!update)
 			selected_all = FALSE;
 		else
@@ -231,7 +305,6 @@
 
 		/* do something with the data */
 		if (update) {
-			egg_debug ("%s", package_id);
 			g_ptr_array_add (array, package_id);
 		} else {
 			/* need to free the one in the array later */
@@ -242,888 +315,985 @@
 
 	/* we have no checkboxes selected */
 	if (!selected_any) {
-		widget = glade_xml_get_widget (glade_xml, "window_updates");
-		gpk_error_dialog_modal (GTK_WINDOW (widget),
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+		gpk_error_dialog_modal (window,
 					/* TRANSLATORS: we clicked apply, but had no packages selected */
 					_("No updates selected"),
 					_("No updates are selected"), NULL);
 		return;
 	}
 
-	widget = glade_xml_get_widget (glade_xml, "button_overview2");
-	if (selected_all)
-		gtk_widget_hide (widget);
-	else
-		gtk_widget_show (widget);
+	/* clear the selection */
+	selection = gtk_tree_view_get_selection (treeview);
+	gtk_tree_selection_unselect_all (selection);
+
+	/* reset client */
+	ret = pk_client_reset (client_primary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
 
 	/* set correct view */
-	gpk_update_viewer_set_page (PAGE_LAST);
 	package_ids = pk_package_ids_from_array (array);
-	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_WARNING_PROGRESS);
-	ret = gpk_client_update_packages (gclient, package_ids, NULL);
+	ret = pk_client_update_packages (client_primary, package_ids, &error);
+	if (!ret) {
+		egg_warning ("cannot update packages: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
 	g_strfreev (package_ids);
 
-	/* did we succeed updating the system */
-	if (!ret)
-		gpk_update_viewer_set_page (PAGE_PREVIEW);
-	else
-		gpk_update_viewer_set_page (PAGE_CONFIRM);
-
 	/* get rid of the array, and free the contents */
-	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
-	g_ptr_array_free (array, TRUE);
+	if (array != NULL) {
+		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+		g_ptr_array_free (array, TRUE);
+	}
 }
 
 /**
- * gpk_update_viewer_preview_animation_start:
+ * gpk_update_viewer_button_cancel_cb:
  **/
 static void
-gpk_update_viewer_preview_animation_start (const gchar *text)
+gpk_update_viewer_button_cancel_cb (GtkWidget *widget, gpointer data)
 {
-	GtkWidget *widget;
-	gchar *text_bold;
-
-	widget = glade_xml_get_widget (glade_xml, "image_animation_preview");
-	gpk_animated_icon_set_frame_delay (GPK_ANIMATED_ICON (widget), 50);
-	gpk_animated_icon_set_filename_tile (GPK_ANIMATED_ICON (widget), GTK_ICON_SIZE_DIALOG, "process-working");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), TRUE);
-	gtk_widget_show (widget);
-
-	text_bold = g_strdup_printf ("<b>%s</b>", text);
-	widget = glade_xml_get_widget (glade_xml, "label_animation_preview");
-	gtk_label_set_label (GTK_LABEL (widget), text_bold);
-	g_free (text_bold);
-
-	widget = glade_xml_get_widget (glade_xml, "viewport_animation_preview");
-	gtk_widget_show (widget);
+	gboolean ret;
+	GError *error = NULL;
 
-	widget = glade_xml_get_widget (glade_xml, "scrolledwindow_preview");
-	gtk_widget_hide (widget);
+	/* cancel the transaction */
+	ret = pk_client_cancel (client_primary, &error);
+	if (!ret) {
+		egg_warning ("failed to cancel client: %s", error->message);
+		g_error_free (error);
+	}
 }
 
 /**
- * gpk_update_viewer_preview_animation_stop:
+ * gpk_update_viewer_button_upgrade_cb:
  **/
 static void
-gpk_update_viewer_preview_animation_stop (void)
+gpk_update_viewer_button_upgrade_cb (GtkWidget *widget, gpointer data)
 {
-	GtkWidget *widget;
+	gboolean ret;
+	GError *error = NULL;
+
+	ret = g_spawn_command_line_async ("/usr/share/PackageKit/pk-upgrade-distro.sh", NULL);
+	if (!ret) {
+		egg_warning ("Failure launching pk-upgrade-distro.sh: %s", error->message);
+		g_error_free (error);
+	}
+}
 
-	widget = glade_xml_get_widget (glade_xml, "image_animation_preview");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+/**
+ * gpk_update_viewer_button_delete_event_cb:
+ **/
+static gboolean
+gpk_update_viewer_button_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+	gboolean ret;
+	GError *error = NULL;
+	PkRoleEnum role;
+	PkStatusEnum status;
 
-	widget = glade_xml_get_widget (glade_xml, "label_animation_preview");
-	gtk_label_set_label (GTK_LABEL (widget), "");
+	/* if we are in a transaction, don't quit, just hide, as we want to return
+	 * to this state if the dialog is run again */
+	ret = pk_client_get_role (client_primary, &role, NULL, &error);
+	if (!ret) {
+		egg_warning ("failed to get role: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	if (role == PK_ROLE_ENUM_UNKNOWN) {
+		egg_debug ("no role, so quitting");
+		goto out;
+	}
+	ret = pk_client_get_status (client_primary, &status, &error);
+	if (!ret) {
+		egg_warning ("failed to get status: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		egg_debug ("status is finished, so quitting");
+		goto out;
+	}
 
-	widget = glade_xml_get_widget (glade_xml, "viewport_animation_preview");
+	/* hide window */
+	egg_debug ("hiding to preserve state");
+	running_hidden = TRUE;
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_updates"));
 	gtk_widget_hide (widget);
-
-	widget = glade_xml_get_widget (glade_xml, "scrolledwindow_preview");
-	gtk_widget_show (widget);
+	return TRUE;
+out:
+	g_main_loop_quit (loop);
+	return FALSE;
 }
 
 /**
- * gpk_update_viewer_description_animation_start_really:
+ * gpk_update_viewer_find_iter_model_cb:
  **/
 static gboolean
-gpk_update_viewer_description_animation_start_really (void)
+gpk_update_viewer_find_iter_model_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, const PkPackageId *id)
 {
-	GtkWidget *widget;
-	gchar *text_bold;
+	gchar *id_tmp = NULL;
+	GtkTreePath **_path = NULL;
+	PkPackageId *id_new;
+	gboolean ret = FALSE;
 
-	widget = glade_xml_get_widget (glade_xml, "image_animation_description");
-	gpk_animated_icon_set_frame_delay (GPK_ANIMATED_ICON (widget), 50);
-	gpk_animated_icon_set_filename_tile (GPK_ANIMATED_ICON (widget), GTK_ICON_SIZE_DIALOG, "process-working");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), TRUE);
-	gtk_widget_show (widget);
+	_path = (GtkTreePath **) g_object_get_data (G_OBJECT(model), "_path");
+	gtk_tree_model_get (model, iter, GPK_UPDATES_COLUMN_ID, &id_tmp, -1);
 
-	/* TRANSLATORS: getting information about the update -- can take some time */
-	text_bold = g_strdup_printf ("<b>%s</b>", _("Getting Description..."));
-	widget = glade_xml_get_widget (glade_xml, "label_animation_description");
-	gtk_label_set_label (GTK_LABEL (widget), text_bold);
-	g_free (text_bold);
+	/* only match on the name */
+	id_new = pk_package_id_new_from_string (id_tmp);
+	if (g_strcmp0 (id_new->name, id->name) == 0) {
+		*_path = gtk_tree_path_copy (path);
+		ret = TRUE;
+	}
+	pk_package_id_free (id_new);
+	return ret;
+}
 
-	widget = glade_xml_get_widget (glade_xml, "viewport_animation_description");
-	gtk_widget_show (widget);
+/**
+ * gpk_update_viewer_model_get_path:
+ **/
+static GtkTreePath *
+gpk_update_viewer_model_get_path (GtkTreeModel *model, const PkPackageId *id)
+{
+	GtkTreePath *path = NULL;
+	g_object_set_data (G_OBJECT(model), "_path", (gpointer) &path);
+	gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc) gpk_update_viewer_find_iter_model_cb, (gpointer) id);
+	g_object_steal_data (G_OBJECT(model), "_path");
+	return path;
+}
 
-	widget = glade_xml_get_widget (glade_xml, "scrolledwindow_description");
-	gtk_widget_hide (widget);
+/**
+ * gpk_update_viewer_details_cb:
+ **/
+static void
+gpk_update_viewer_details_cb (PkClient *client, const PkDetailsObj *obj, gpointer data)
+{
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkTreePath *path;
 
-	/* we've done the event */
-	description_event_id = 0;
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
 
-	/* never repeat */
-	return FALSE;
+	path = gpk_update_viewer_model_get_path (model, obj->id);
+	if (path == NULL) {
+		egg_debug ("not found ID for group");
+		return;
+	}
+
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_path_free (path);
+	gtk_list_store_set (list_store_updates, &iter,
+			    GPK_UPDATES_COLUMN_DETAILS_OBJ, (gpointer) pk_details_obj_copy (obj),
+			    GPK_UPDATES_COLUMN_SIZE, (gint)obj->size, -1);
+	/* in cache */
+	if (obj->size == 0)
+		gtk_list_store_set (list_store_updates, &iter,
+				    GPK_UPDATES_COLUMN_STATUS, GPK_INFO_ENUM_DOWNLOADED, -1);
 }
 
 /**
- * gpk_update_viewer_description_animation_start:
+ * gpk_update_viewer_is_update_info:
  **/
-static void
-gpk_update_viewer_description_animation_start (void)
+static gboolean
+gpk_update_viewer_is_update_info (PkInfoEnum info)
 {
-	/* only clear the last data and show the spinner if it takes a little
-	 * while, else we flicker the display too much */
-	if (description_event_id > 0)
-		g_source_remove (description_event_id);
-	description_event_id = g_timeout_add (100, (GSourceFunc) gpk_update_viewer_description_animation_start_really, NULL);
+	if (info == PK_INFO_ENUM_LOW)
+		return TRUE;
+	if (info == PK_INFO_ENUM_NORMAL)
+		return TRUE;
+	if (info == PK_INFO_ENUM_IMPORTANT)
+		return TRUE;
+	if (info == PK_INFO_ENUM_SECURITY)
+		return TRUE;
+	if (info == PK_INFO_ENUM_BUGFIX)
+		return TRUE;
+	if (info == PK_INFO_ENUM_ENHANCEMENT)
+		return TRUE;
+	return FALSE;
 }
 
 /**
- * gpk_update_viewer_description_animation_stop:
+ * gpk_update_viewer_package_cb:
  **/
 static void
-gpk_update_viewer_description_animation_stop (void)
+gpk_update_viewer_package_cb (PkClient *client, const PkPackageObj *obj, gpointer data)
 {
+	PkRoleEnum role;
+	PkInfoEnum info;
+	gchar *text = NULL;
+	gchar *package_id;
+	GtkTreeView *treeview;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
 	GtkWidget *widget;
+	GtkTreePath *path;
+	gboolean selected;
 
-	/* if we are not showing, clear timeout and return */
-	if (description_event_id > 0) {
-		g_source_remove (description_event_id);
-		description_event_id = 0;
-		return;
-	}
+	pk_client_get_role (client, &role, NULL, NULL);
+	egg_debug ("role = %s, package = %s:%s:%s", pk_role_enum_to_text (role),
+		  pk_info_enum_to_text (obj->info), obj->id->name, obj->summary);
 
-	widget = glade_xml_get_widget (glade_xml, "image_animation_description");
-	gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+	/* convert to string */
+	package_id = pk_package_id_to_string (obj->id);
 
-	widget = glade_xml_get_widget (glade_xml, "label_animation_description");
-	gtk_label_set_label (GTK_LABEL (widget), "");
+	/* used for progress */
+	if (!gpk_update_viewer_is_update_info (obj->info)) {
+		pk_package_id_free (package_id_last);
+		package_id_last = pk_package_id_copy (obj->id);
+
+		/* find model */
+		treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+		model = gtk_tree_view_get_model (treeview);
+
+		/* update icon */
+		path = gpk_update_viewer_model_get_path (model, obj->id);
+		if (path == NULL) {
+			egg_debug ("not found ID for package");
+			goto out;
+		}
 
-	widget = glade_xml_get_widget (glade_xml, "viewport_animation_description");
-	gtk_widget_hide (widget);
+		gtk_tree_model_get_iter (model, &iter, path);
 
-	widget = glade_xml_get_widget (glade_xml, "scrolledwindow_description");
-	gtk_widget_show (widget);
+		/* if the info is finished, change the status to past tense */
+		if (obj->info == PK_INFO_ENUM_FINISHED) {
+			gtk_tree_model_get (model, &iter,
+					    GPK_UPDATES_COLUMN_STATUS, &info, -1);
+			/* promote to past tense if present tense */
+			if (info < PK_INFO_ENUM_UNKNOWN)
+				info += PK_INFO_ENUM_UNKNOWN;
+		} else {
+			info = obj->info;
+		}
+		gtk_list_store_set (list_store_updates, &iter,
+				    GPK_UPDATES_COLUMN_STATUS, info, -1);
+		gtk_tree_path_free (path);
+
+		/* set package description */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
+		//gtk_label_set_label (GTK_LABEL (widget), obj->summary);
+
+		goto out;
+	}
+
+	/* add to list store */
+	text = gpk_package_id_format_twoline (obj->id, obj->summary);
+	selected = (obj->info != PK_INFO_ENUM_BLOCKED);
+	gtk_list_store_append (list_store_updates, &iter);
+	gtk_list_store_set (list_store_updates, &iter,
+			    GPK_UPDATES_COLUMN_TEXT, text,
+			    GPK_UPDATES_COLUMN_ID, package_id,
+			    GPK_UPDATES_COLUMN_INFO, obj->info,
+			    GPK_UPDATES_COLUMN_SELECT, selected,
+			    GPK_UPDATES_COLUMN_SENSITIVE, selected,
+			    GPK_UPDATES_COLUMN_CLICKABLE, selected,
+			    GPK_UPDATES_COLUMN_RESTART, PK_RESTART_ENUM_NONE,
+			    GPK_UPDATES_COLUMN_STATUS, PK_INFO_ENUM_UNKNOWN,
+			    GPK_UPDATES_COLUMN_SIZE, 0,
+			    GPK_UPDATES_COLUMN_PERCENTAGE, 0,
+			    -1);
+out:
+	g_free (package_id);
+	g_free (text);
 }
 
 /**
- * gpk_update_viewer_refresh_cb:
+ * gpk_update_viewer_update_detail_cb:
  **/
 static void
-gpk_update_viewer_refresh_cb (PolKitGnomeAction *action, gpointer data)
+gpk_update_viewer_update_detail_cb (PkClient *client, const PkUpdateDetailObj *obj, gpointer data)
 {
-	gboolean ret;
-	GError *error = NULL;
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkTreePath *path;
 
-	/* refresh the cache */
-	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_WARNING_PROGRESS);
-	polkit_gnome_action_set_sensitive (refresh_action, FALSE);
-	ret = gpk_client_refresh_cache (gclient, &error);
-	polkit_gnome_action_set_sensitive (refresh_action, TRUE);
-	if (ret == FALSE) {
-		egg_warning ("failed: %s", error->message);
-		g_error_free (error);
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
+
+	path = gpk_update_viewer_model_get_path (model, obj->id);
+	if (path == NULL) {
+		egg_warning ("not found ID for update detail");
+		return;
 	}
-	/* get new list */
-	gpk_update_viewer_get_new_update_list ();
+
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_path_free (path);
+	gtk_list_store_set (list_store_updates, &iter,
+			    GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ, (gpointer) pk_update_detail_obj_copy (obj),
+			    GPK_UPDATES_COLUMN_RESTART, obj->restart, -1);
 }
 
 /**
- * gpk_update_viewer_button_close_and_cancel_cb:
+ * gpk_update_viewer_reconsider_buttons:
  **/
 static void
-gpk_update_viewer_button_close_and_cancel_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_reconsider_buttons (gpointer data)
 {
-	gboolean ret;
-	GError *error = NULL;
+	GtkWidget *widget;
+	PkStatusEnum status;
 
-	/* we might have a transaction running */
-	ret = gpk_client_cancel (gclient, &error);
-	if (!ret) {
-		egg_warning ("failed to cancel client: %s", error->message);
-		g_error_free (error);
+	/* cancel buttons? */
+	pk_client_get_status (client_primary, &status, NULL);
+	egg_debug ("status is %s", pk_status_enum_to_text (status));
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+		gtk_widget_show (widget);
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_cancel"));
+		gtk_widget_hide (widget);
+	} else {
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+		gtk_widget_hide (widget);
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_cancel"));
+		gtk_widget_show (widget);
 	}
-	g_main_loop_quit (loop);
 }
 
 /**
- * gpk_update_viewer_button_close:
+ * gpk_update_viewer_auto_shutdown:
  **/
-static void
-gpk_update_viewer_button_close (GtkWidget *widget, gpointer data)
+static gboolean
+gpk_update_viewer_auto_shutdown (GtkDialog *dialog)
 {
-	g_main_loop_quit (loop);
+	gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL);
+	auto_shutdown_id = 0;
+	return FALSE;
 }
 
 /**
- * gpk_update_viewer_review_cb:
+ * gpk_update_viewer_reconsider_info:
  **/
 static void
-gpk_update_viewer_review_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_reconsider_info (GtkTreeModel *model)
 {
-	GtkWidget *treeview;
-	GtkTreeSelection *selection;
 	GtkTreeIter iter;
+	GtkWidget *widget;
+	GtkWidget *dialog;
+	gboolean valid;
+	gboolean selected;
+	gboolean any_selected = FALSE;
+	guint len;
+	guint size;
+	guint number_total = 0;
+	PkRestartEnum restart;
+	PkRestartEnum restart_worst = PK_RESTART_ENUM_NONE;
+	const gchar *title;
+	gchar *text;
+	gchar *text_size;
 
-	treeview = glade_xml_get_widget (glade_xml, "treeview_updates");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
-	if (!gtk_tree_selection_get_selected (selection, NULL, NULL)) {
-		if (gtk_tree_model_get_iter_first (gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)),
-						   &iter))
-			gtk_tree_selection_select_iter (selection, &iter);
-	}
-
-	widget = glade_xml_get_widget (glade_xml, "treeview_updates");
-	gtk_widget_set_size_request (GTK_WIDGET (widget), 500, 200);
+	/* if there are no entries selected, deselect the button */
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+	while (valid) {
+		gtk_tree_model_get (model, &iter,
+				    GPK_UPDATES_COLUMN_SELECT, &selected,
+				    GPK_UPDATES_COLUMN_RESTART, &restart,
+				    GPK_UPDATES_COLUMN_SIZE, &size,
+				    -1);
+		if (selected) {
+			any_selected = TRUE;
+			size_total += size;
+			number_total++;
+			if (restart > restart_worst)
+				restart_worst = restart;
+		}
+		valid = gtk_tree_model_iter_next (model, &iter);
+	}
 
-	widget = glade_xml_get_widget (glade_xml, "treeview_description");
-	gtk_widget_set_size_request (GTK_WIDGET (widget), 500, 200);
+	/* action button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+	gtk_widget_set_sensitive (widget, any_selected);
+
+	/* sensitive */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow_updates"));
+	gtk_widget_set_sensitive (widget, TRUE);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow_details"));
+	gtk_widget_set_sensitive (widget, TRUE);
+
+	/* set the pluralisation of the button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+	/* TRANSLATORS: this is the button text when we have updates */
+	title = ngettext ("_Install Update", "_Install Updates", number_total);
+	gtk_button_set_label (GTK_BUTTON (widget), title);
+
+	/* no updates */
+	len = PK_OBJ_LIST(update_list)->len;
+	if (len == 0) {
+		/* hide close button */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
+		gtk_widget_hide (widget);
 
-	/* set correct view */
-	gpk_update_viewer_set_page (PAGE_DETAILS);
-}
+		/* show a new title */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_header_title"));
+		/* TRANSLATORS: there are no updates */
+		text = g_strdup_printf ("<big><b>%s</b></big>", _("There are no updates available"));
+		gtk_label_set_label (GTK_LABEL (widget), text);
+		g_free (text);
 
+		/* show modal dialog */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_updates"));
+		dialog = gtk_message_dialog_new (GTK_WINDOW (widget), GTK_DIALOG_MODAL,
+						 GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
+						 /* TRANSLATORS: title: warn the user they are quitting with unapplied changes */
+						 "%s", _("No updates available"));
+		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog),
+							  "%s",
+							  /* TRANSLATORS: tell the user the problem */
+							  _("There are no updates available for your computer at this time."));
+		gtk_window_set_icon_name (GTK_WINDOW(dialog), GPK_ICON_SOFTWARE_INSTALLER);
 
-/**
- * gpk_update_viewer_populate_preview:
- **/
-static void
-gpk_update_viewer_populate_preview (PkPackageList *list)
-{
-	GtkWidget *widget;
-	guint length;
-	const PkPackageObj *obj;
-	guint i;
-	guint num_low = 0;
-	guint num_normal = 0;
-	guint num_important = 0;
-	guint num_security = 0;
-	guint num_bugfix = 0;
-	guint num_enhancement = 0;
-	guint num_blocked = 0;
-	const gchar *icon;
-	gchar *text;
+		/* setup a callback so we autoclose */
+		auto_shutdown_id = g_timeout_add_seconds (GPK_UPDATE_VIEWER_AUTO_RESTART_TIMEOUT, (GSourceFunc) gpk_update_viewer_auto_shutdown, dialog);
 
-	length = pk_package_list_get_size (list);
-	if (length == 0) {
-		/* TRANSLATORS: no updates available for the user */
-		gpk_update_viewer_add_preview_item ("dialog-information", _("There are no updates available"), TRUE);
-		widget = glade_xml_get_widget (glade_xml, "button_close3");
-		gtk_widget_grab_default (widget);
-	} else {
+		gtk_dialog_run (GTK_DIALOG(dialog));
+		gtk_widget_destroy (dialog);
 
-		for (i=0;i<length;i++) {
-			obj = pk_package_list_get_obj (list, i);
-			if (obj->info == PK_INFO_ENUM_LOW)
-				num_low++;
-			else if (obj->info == PK_INFO_ENUM_IMPORTANT)
-				num_important++;
-			else if (obj->info == PK_INFO_ENUM_SECURITY)
-				num_security++;
-			else if (obj->info == PK_INFO_ENUM_BUGFIX)
-				num_bugfix++;
-			else if (obj->info == PK_INFO_ENUM_ENHANCEMENT)
-				num_enhancement++;
-			else if (obj->info == PK_INFO_ENUM_BLOCKED)
-				num_blocked++;
-			else
-				num_normal++;
-		}
+		/* exit the program */
+		g_main_loop_quit (loop);
+		goto out;
+	}
 
-		/* clear existing list */
-		gtk_list_store_clear (list_store_preview);
+	/* use correct status pane */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_status"));
+	gtk_widget_hide (widget);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_info"));
+	gtk_widget_show (widget);
 
-		/* add to preview box in order of priority */
-		if (num_security > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_SECURITY);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_SECURITY, num_security);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_important > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_IMPORTANT);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_IMPORTANT, num_important);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_bugfix > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_BUGFIX);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_BUGFIX, num_bugfix);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_enhancement > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_ENHANCEMENT);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_ENHANCEMENT, num_enhancement);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_blocked > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_BLOCKED);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_BLOCKED, num_blocked);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_low > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_LOW);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_LOW, num_low);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
-		if (num_normal > 0) {
-			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_NORMAL);
-			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_NORMAL, num_normal);
-			gpk_update_viewer_add_preview_item (icon, text, FALSE);
-			g_free (text);
-		}
+	/* restart */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_info"));
+	if (restart_worst == PK_RESTART_ENUM_NONE) {
+		gtk_widget_hide (widget);
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_info"));
+		gtk_widget_hide (widget);
+	} else {
+		gtk_label_set_label (GTK_LABEL (widget), gpk_restart_enum_to_localised_text_future (restart_worst));
+		gtk_widget_show (widget);
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_info"));
+		gtk_image_set_from_icon_name (GTK_IMAGE (widget), gpk_restart_enum_to_icon_name (restart_worst), GTK_ICON_SIZE_BUTTON);
+		gtk_widget_show (widget);
+	}
 
-		/* set visible and sensitive */
-		widget = glade_xml_get_widget (glade_xml, "button_review");
-		gtk_widget_set_sensitive (widget, TRUE);
-		polkit_gnome_action_set_sensitive (update_system_action, TRUE);
-		polkit_gnome_action_set_sensitive (update_packages_action, TRUE);
+	/* header */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_header_title"));
+	text = g_strdup_printf (ngettext ("There is %i update available",
+					  "There are %i updates available", len), len);
+	text_size = g_strdup_printf ("<big><b>%s</b></big>", text);
+	gtk_label_set_label (GTK_LABEL (widget), text_size);
+	g_free (text);
+	g_free (text_size);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_header"));
+	gtk_widget_show (widget);
+
+	/* total */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_summary"));
+	if (number_total == 0) {
+		gtk_label_set_label (GTK_LABEL (widget), "");
+	} else {
+		text_size = g_format_size_for_display (size_total);
+		/* TRANSLATORS: how many updates are selected in the UI */
+		text = g_strdup_printf (ngettext ("%i update selected (%s)",
+						  "%i updates selected (%s)",
+						  number_total), number_total, text_size);
+		gtk_label_set_label (GTK_LABEL (widget), text);
+		g_free (text);
+		g_free (text_size);
 	}
+
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_summary"));
+	gtk_widget_show (widget);
+out:
+	return;
 }
 
 /**
- * gpk_update_viewer_do_precache:
+ * gpk_update_viewer_status_changed_cb:
  **/
-static gboolean
-gpk_update_viewer_do_precache (const PkPackageList *list)
+static void
+gpk_update_viewer_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
 {
-	gboolean ret;
-	GError *error = NULL;
-	gchar **package_ids;
-	GConfClient *client;
-	gboolean precache;
+	GtkWidget *widget;
+	const gchar *text;
 
-	client = gconf_client_get_default ();
-	precache = gconf_client_get_bool (client, GPK_CONF_UPDATE_VIEWER_PRECACHE_DETAILS, NULL);
-	g_object_unref (client);
+	egg_debug ("status %s", pk_status_enum_to_text (status));
 
-	if (!precache)
-		return FALSE;
+	/* use correct status pane */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_status"));
+	gtk_widget_show (widget);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_info"));
+	gtk_widget_hide (widget);
 
-	egg_debug ("doing precache");
+	/* set cursor back to normal */
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		gdk_window_set_cursor (widget->window, NULL);
+	}
 
-	/* reset */
-	ret = pk_client_reset (client_query, &error);
-	if (!ret) {
-		egg_warning ("failed to reset: %s", error->message);
-		g_error_free (error);
-		return FALSE;
+	/* clear package */
+	if (status == PK_STATUS_ENUM_WAIT) {
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
+		gtk_label_set_label (GTK_LABEL (widget), "");
 	}
 
-	/* pre-cache the update detail if we can */
-	package_ids = pk_package_list_to_strv (list);
-	ret = pk_client_get_update_detail (client_query, package_ids, &error);
-	g_strfreev (package_ids);
-	if (!ret) {
-		egg_warning ("failed to cache update detail: %s", error->message);
-		g_error_free (error);
-		return FALSE;
+	/* set status */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_status"));
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		gtk_label_set_label (GTK_LABEL (widget), "");
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_progress"));
+		gtk_widget_hide (widget);
+		goto out;
 	}
-	return TRUE;
+	if (status == PK_STATUS_ENUM_QUERY || status == PK_STATUS_ENUM_SETUP) {
+		/* TRANSLATORS: querying update list */
+		text = _("Getting the list of updates");
+	} else {
+		text = gpk_status_enum_to_localised_text (status);
+	}
+
+	/* set label */
+	gtk_label_set_label (GTK_LABEL (widget), text);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "image_progress"));
+
+	/* set icon */
+	gtk_image_set_from_icon_name (GTK_IMAGE (widget), gpk_status_enum_to_icon_name (status), GTK_ICON_SIZE_BUTTON);
+	gtk_widget_show (widget);
+out:
+	/* set state */
+	gpk_update_viewer_reconsider_buttons (NULL);
 }
 
 /**
- * gpk_update_viewer_get_new_update_list:
+ * gpk_update_viewer_treeview_update_toggled:
  **/
 static void
-gpk_update_viewer_get_new_update_list (void)
+gpk_update_viewer_treeview_update_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 {
-	GError *error = NULL;
-	PkPackageList *list;
-	const PkPackageObj *obj;
-	GtkWidget *widget;
-	guint length;
-	guint i;
-	gchar *text;
-	gchar *package_id;
-	const gchar *icon_name;
+	GtkTreeModel *model = (GtkTreeModel *) data;
 	GtkTreeIter iter;
-	gboolean selected;
-
-	/* spin */
-	gpk_update_viewer_description_animation_start ();
-
-	/* clear existing list */
-	gtk_list_store_clear (list_store_details);
-
-	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_NEVER);
-	list = gpk_client_get_updates (gclient, &error);
-	if (list == NULL) {
-		gpk_update_viewer_description_animation_stop ();
-		egg_warning ("failed: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* sort by priority, then by package_id (reversed) */
-	pk_package_list_sort (list);
-	pk_package_list_sort_info (list);
-
-	/* do we have updates? */
-	length = pk_package_list_get_size (list);
-	if (length == 0)
-		are_updates_available = FALSE;
-	else
-		are_updates_available = TRUE;
+	GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+	gboolean update;
+	gchar *package_id;
 
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (list, i);
-		text = gpk_package_id_format_twoline (obj->id, obj->summary);
-		icon_name = gpk_info_enum_to_icon_name (obj->info);
-		gtk_list_store_append (list_store_details, &iter);
-		package_id = pk_package_id_to_string (obj->id);
-		selected = (obj->info != PK_INFO_ENUM_BLOCKED);
-		gtk_list_store_set (list_store_details, &iter,
-				    PACKAGES_COLUMN_TEXT, text,
-				    PACKAGES_COLUMN_ID, package_id,
-				    PACKAGES_COLUMN_ICON, icon_name,
-				    PACKAGES_COLUMN_INFO, obj->info,
-				    PACKAGES_COLUMN_SELECT, selected,
-				    PACKAGES_COLUMN_SENSITIVE, selected,
-				    PACKAGES_COLUMN_CLICKABLE, selected,
-				    -1);
-		g_free (package_id);
-		g_free (text);
-	}
+	/* get toggled iter */
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_SELECT, &update,
+			    GPK_UPDATES_COLUMN_ID, &package_id, -1);
 
+	/* unstage */
+	update ^= 1;
 
-	/* make the buttons non-clickable until we get completion */
-	polkit_gnome_action_set_sensitive (update_system_action, are_updates_available);
-	polkit_gnome_action_set_sensitive (update_packages_action, are_updates_available);
-	widget = glade_xml_get_widget (glade_xml, "button_review");
-	gtk_widget_set_sensitive (widget, are_updates_available);
+	egg_debug ("update %s[%i]", package_id, update);
+	g_free (package_id);
 
-	gpk_update_viewer_populate_preview (list);
-	gpk_update_viewer_do_precache (list);
+	/* set new value */
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_SELECT, update, -1);
 
-	/* don't spin */
-	gpk_update_viewer_description_animation_stop ();
+	/* clean up */
+	gtk_tree_path_free (path);
 
-out:
-	if (list != NULL)
-		g_object_unref (list);
+	/* if there are no entries selected, deselect the button */
+	gpk_update_viewer_reconsider_info (model);
 }
 
 /**
- * gpk_update_viewer_overview_cb:
+ * gpk_update_viewer_treeview_updates_size_allocate_cb:
  **/
 static void
-gpk_update_viewer_overview_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_treeview_updates_size_allocate_cb (GtkWidget *widget, GtkAllocation *allocation, GtkCellRenderer *cell)
 {
-	/* set correct view */
-	gpk_update_viewer_set_page (PAGE_PREVIEW);
+	GtkTreeViewColumn *column;
+	gint width;
+	gint wrap_width;
 
-	/* get the new update list */
-	gpk_update_viewer_get_new_update_list ();
+	column = gtk_tree_view_get_column (GTK_TREE_VIEW(widget), 0);
+	width = gtk_tree_view_column_get_width (column);
+	wrap_width = allocation->width - width - 200;
+	if (wrap_width < 10) {
+		egg_warning ("wrap_width is impossibly small %i", wrap_width);
+		return;
+	}
+	g_object_set (cell, "wrap-width", wrap_width, NULL);
 }
 
 /**
- * gpk_update_viewer_package_cb:
- **/
-static void
-gpk_update_viewer_package_cb (PkClient *client, const PkPackageObj *obj, gpointer data)
+ * gpk_update_viewer_treeview_query_tooltip_cb:
+ */
+static gboolean
+gpk_update_viewer_treeview_query_tooltip_cb (GtkWidget *widget, gint x, gint y, gboolean keyboard, GtkTooltip *tooltip, gpointer user_data)
 {
-	PkRoleEnum role;
+	gboolean ret;
+	GtkTreePath *path = NULL;
+	GtkTreeViewColumn *column;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	PkInfoEnum info;
+	PkRestartEnum restart;
+	gint bin_x, bin_y, cell_x, cell_y, col_id;
+	const gchar *text = NULL;
 
-	pk_client_get_role (client, &role, NULL, NULL);
-	egg_debug ("role = %s, package = %s:%s:%s", pk_role_enum_to_text (role),
-		  pk_info_enum_to_text (obj->info), obj->id->name, obj->summary);
+	/* get path */
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+	gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW (widget), x, y, &bin_x, &bin_y);
+	ret = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), bin_x, bin_y, &path, &column, &cell_x, &cell_y);
+
+	/* did not get path */
+	if (!ret || column == NULL || path == NULL)
+		goto out;
+
+	/* get iter at path */
+	gtk_tree_model_get_iter (model, &iter, path);
+
+	/* Find out what column we are over */
+	col_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "tooltip-id"));
+	switch (col_id) {
+	case GPK_UPDATES_COLUMN_INFO:
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_INFO, &info, -1);
+		text = gpk_info_enum_to_localised_text (info);
+		break;
+	case GPK_UPDATES_COLUMN_RESTART:
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_RESTART, &restart, -1);
+		if (restart == PK_RESTART_ENUM_NONE) {
+			ret = FALSE;
+			break;
+		}
+		text = gpk_restart_enum_to_localised_text_future (restart);
+		break;
+	case GPK_UPDATES_COLUMN_STATUS:
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_STATUS, &info, -1);
+		if (info == PK_INFO_ENUM_UNKNOWN) {
+			ret = FALSE;
+			break;
+		}
+		text = gpk_info_status_enum_to_text (info);
+		break;
+	default:
+		/* ignore */
+		ret = FALSE;
+		break;
+	}
+
+	/* set tooltip */
+	if (text != NULL) {
+		gtk_tooltip_set_text (tooltip, text);
+		gtk_tree_view_set_tooltip_cell (GTK_TREE_VIEW (widget), tooltip, path, column, NULL);
+	}
+out:
+	if (path != NULL)
+		gtk_tree_path_free(path);
+	return ret;
 }
 
+
+
 /**
- * gpk_update_viewer_add_description_item:
+ * gpk_update_viewer_treeview_add_columns_update:
  **/
 static void
-gpk_update_viewer_add_description_item (const gchar *title, const gchar *text, const gchar *uri)
+gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
 {
-	gchar *markup;
-	GtkWidget *tree_view;
-	GtkTreeIter iter;
-	GtkTreeSelection *selection;
+	GtkCellRenderer *renderer;
+	GtkTreeViewColumn *column;
+	GtkTreeModel *model;
 
-	/* format */
-	markup = g_strdup_printf ("<b>%s:</b>", title);
+	/* restart */
+	renderer = gpk_cell_renderer_restart_new ();
+	g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+	column = gtk_tree_view_column_new_with_attributes ("", renderer,
+							   "value", GPK_UPDATES_COLUMN_RESTART, NULL);
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+	gtk_tree_view_append_column (treeview, column);
+	g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_RESTART));
 
-	egg_debug ("%s %s %s", markup, text, uri);
-	gtk_list_store_append (list_store_description, &iter);
-	gtk_list_store_set (list_store_description, &iter,
-			    DESC_COLUMN_TITLE, markup,
-			    DESC_COLUMN_TEXT, text,
-			    DESC_COLUMN_URI, uri,
-			    -1);
+	/* --- column for image and toggle --- */
+	column = gtk_tree_view_column_new ();
+	/* TRANSLATORS: if the update should be installed */
+	gtk_tree_view_column_set_title (column, _("Install"));
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+	gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_INFO);
+
+	/* info */
+	renderer = gpk_cell_renderer_info_new ();
+	g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+	gtk_tree_view_column_pack_start (column, renderer, TRUE);
+	gtk_tree_view_column_add_attribute (column, renderer, "value", GPK_UPDATES_COLUMN_INFO);
+
+	/* select toggle */
+	renderer = gtk_cell_renderer_toggle_new ();
+	model = gtk_tree_view_get_model (treeview);
+	g_signal_connect (renderer, "toggled", G_CALLBACK (gpk_update_viewer_treeview_update_toggled), model);
+	gtk_tree_view_column_pack_start (column, renderer, TRUE);
+	gtk_tree_view_column_add_attribute (column, renderer, "active", GPK_UPDATES_COLUMN_SELECT);
+	gtk_tree_view_column_add_attribute (column, renderer, "activatable", GPK_UPDATES_COLUMN_CLICKABLE);
+	gtk_tree_view_column_add_attribute (column, renderer, "sensitive", GPK_UPDATES_COLUMN_SENSITIVE);
+
+	gtk_tree_view_append_column (treeview, column);
+	g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_INFO));
+
+	/* column for text */
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer,
+		      "wrap-mode", PANGO_WRAP_WORD,
+		      "ellipsize", PANGO_ELLIPSIZE_END,
+		      NULL);
+	/* TRANSLATORS: a column that has name of the package that will be updated */
+	column = gtk_tree_view_column_new_with_attributes (_("Software"), renderer,
+							   "markup", GPK_UPDATES_COLUMN_TEXT, NULL);
+	gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_TEXT);
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
+	gtk_tree_view_append_column (treeview, column);
+	g_signal_connect (treeview, "size-allocate", G_CALLBACK (gpk_update_viewer_treeview_updates_size_allocate_cb), renderer);
 
-	g_free (markup);
+	/* column for size */
+	renderer = gpk_cell_renderer_size_new ();
+	g_object_set (renderer,
+		      "alignment", PANGO_ALIGN_RIGHT,
+		      "xalign", 1.0f,
+		      NULL);
+	/* TRANSLATORS: a column that has size of the package */
+	column = gtk_tree_view_column_new_with_attributes (_("Size"), renderer,
+							   "value", GPK_UPDATES_COLUMN_SIZE, NULL);
+	gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_SIZE);
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+	gtk_tree_view_append_column (treeview, column);
 
-	tree_view = glade_xml_get_widget (glade_xml, "treeview_description");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
-	gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (tree_view));
+	/* --- column for progress --- */
+	column = gtk_tree_view_column_new ();
+	/* TRANSLATORS: a column that has state of each package */
+	gtk_tree_view_column_set_title (column, _("Status"));
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+	gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_STATUS);
+
+	/* status */
+	renderer = gpk_cell_renderer_info_new ();
+	g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_add_attribute (column, renderer, "value", GPK_UPDATES_COLUMN_STATUS);
+
+	/* column for progress */
+	renderer = gpk_cell_renderer_percentage_new ();
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_add_attribute (column, renderer, "percent", GPK_UPDATES_COLUMN_PERCENTAGE);
+	gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+
+	gtk_tree_view_append_column (treeview, column);
+	g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_STATUS));
+
+	/* tooltips */
+	g_signal_connect (treeview, "query-tooltip", G_CALLBACK (gpk_update_viewer_treeview_query_tooltip_cb), NULL);
+	g_object_set (treeview, "has-tooltip", TRUE, NULL);
 }
 
 /**
  * gpk_update_viewer_add_description_link_item:
  **/
 static void
-gpk_update_viewer_add_description_link_item (const gchar *title, const gchar *url_string)
+gpk_update_viewer_add_description_link_item (GtkTextBuffer *buffer, GtkTextIter *iter, const gchar *title, const GPtrArray *array)
 {
-	const gchar *text;
+	GtkTextTag *tag;
 	const gchar *uri;
-	gchar *title_num;
-	gchar **urls;
-	guint length;
 	gint i;
 
-	urls = g_strsplit (url_string, ";", 0);
-	length = g_strv_length (urls);
+	/* insert at end */
+	gtk_text_buffer_insert_with_tags_by_name (buffer, iter, title, -1, "para", NULL);
 
-	/* could we have malformed descriptions with ';' in them? */
-	if (length % 2 != 0) {
-		egg_warning ("length not correct, correcting");
-		length--;
+	for (i=0; i<array->len; i++) {
+		uri = g_ptr_array_index (array, i);
+		gtk_text_buffer_insert (buffer, iter, "\n", -1);
+		gtk_text_buffer_insert (buffer, iter, "â ", -1);
+		tag = gtk_text_buffer_create_tag (buffer, NULL,
+						  "foreground", "blue",
+						  "underline", PANGO_UNDERLINE_SINGLE,
+						  NULL);
+		g_object_set_data (G_OBJECT (tag), "href", g_strdup (uri));
+		gtk_text_buffer_insert_with_tags (buffer, iter, uri, -1, tag, NULL);
+		gtk_text_buffer_insert (buffer, iter, ".", -1);
 	}
-
-	for (i=0; i<length; i+=2) {
-		uri = urls[i];
-		text = urls[i+1];
-		if (egg_strzero (text)) {
-			text = uri;
-		}
-		/* no suffix needed */
-		if (length == 2) {
-			gpk_update_viewer_add_description_item (title, text, uri);
-		} else {
-			title_num = g_strdup_printf ("%s (%i)", title, (i/2) + 1);
-			gpk_update_viewer_add_description_item (title_num, text, uri);
-			g_free (title_num);
-		}
-	}
-	g_strfreev (urls);
+	gtk_text_buffer_insert (buffer, iter, "\n", -1);
 }
 
 /**
- * gpk_update_viewer_get_pretty_from_composite:
+ * gpk_update_viewer_add_description_link_item:
  **/
-static gchar *
-gpk_update_viewer_get_pretty_from_composite (const gchar *package_ids_delimit)
+static GPtrArray *
+gpk_update_viewer_get_uris (const gchar *url_string)
 {
-	guint i;
+	GPtrArray *array;
+	gchar **urls;
 	guint length;
-	gchar **package_ids;
-	gchar *pretty = NULL;
-	GString *string;
-	PkPackageId *id;
+	gint i;
 
-	/* do we have any data? */
-	if (egg_strzero (package_ids_delimit))
-		goto out;
+	array = g_ptr_array_new ();
 
-	string = g_string_new ("");
-	package_ids = pk_package_ids_from_text (package_ids_delimit);
-	length = g_strv_length (package_ids);
-	for (i=0; i<length; i++) {
-		id = pk_package_id_new_from_string (package_ids[i]);
-		pretty = gpk_package_id_name_version (id);
-		pk_package_id_free (id);
-		g_string_append (string, pretty);
-		g_string_append_c (string, '\n');
-		g_free (pretty);
+	urls = g_strsplit (url_string, ";", 0);
+	length = g_strv_length (urls);
+
+	/* could we have malformed descriptions with ';' in them? */
+	if (length % 2 != 0) {
+		egg_warning ("length not correct, correcting");
+		length--;
 	}
 
-	/* remove trailing \n */
-	g_string_set_size (string, string->len - 1);
-	pretty = g_string_free (string, FALSE);
-	g_strfreev (package_ids);
-out:
-	return pretty;
+	/* copy into array */
+	for (i=0; i<length; i+=2)
+		g_ptr_array_add (array, g_strdup (urls[i]));
+
+	return array;
 }
 
 /**
- * gpk_update_viewer_update_detail_cb:
+ * gpk_update_viewer_populate_details:
  **/
 static void
-gpk_update_viewer_update_detail_cb (PkClient *client, const PkUpdateDetailObj *obj, gpointer data)
+gpk_update_viewer_populate_details (const PkUpdateDetailObj *obj)
 {
-	GtkWidget *widget;
+	GtkTreeView *treeview;
 	GtkTreeSelection *selection;
 	GtkTreeModel *model;
 	GtkTreeIter treeiter;
-	gchar *package_pretty;
-	const gchar *info_text;
+	GPtrArray *array;
 	PkInfoEnum info;
 	gchar *line;
-
-	/* clear existing list */
-	gpk_update_viewer_description_animation_stop ();
-	gtk_list_store_clear (list_store_description);
-
-	/* initially we are hidden */
-	widget = glade_xml_get_widget (glade_xml, "scrolledwindow_description");
-	gtk_widget_show (widget);
+	gchar *line2;
+	const gchar *title;
+	gchar *issued;
+	gchar *updated;
+	GtkTextIter iter;
+	gboolean update_text = FALSE;
 
 	/* get info  */
-	widget = glade_xml_get_widget (glade_xml, "treeview_updates");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	selection = gtk_tree_view_get_selection (treeview);
 	if (gtk_tree_selection_get_selected (selection, &model, &treeiter))
 		gtk_tree_model_get (model, &treeiter,
-				    PACKAGES_COLUMN_INFO, &info, -1);
+				    GPK_UPDATES_COLUMN_INFO, &info, -1);
 	else
 		info = PK_INFO_ENUM_NORMAL;
 
-	info_text = gpk_info_enum_to_localised_text (info);
-	/* TRANSLATORS: this is the update type, e.g. security */
-	gpk_update_viewer_add_description_item (_("Type"), info_text, NULL);
-
-	/* state */
-	if (obj->state != PK_UPDATE_STATE_ENUM_UNKNOWN) {
-		info_text = gpk_update_state_enum_to_localised_text (obj->state);
-		/* TRANSLATORS: this is the stability status of the update */
-		gpk_update_viewer_add_description_item (_("State"), info_text, NULL);
-	}
-
-	/* issued */
-	if (obj->issued != NULL) {
-		line = pk_iso8601_from_date (obj->issued);
-		/* TRANSLATORS: this is when the update was issued */
-		gpk_update_viewer_add_description_item (_("Issued"), line, NULL);
+	/* blank */
+	gtk_text_buffer_set_text (text_buffer, "", -1);
+	gtk_text_buffer_get_start_iter (text_buffer, &iter);
+
+	if (info == PK_INFO_ENUM_ENHANCEMENT) {
+		/* TRANSLATORS: this is the update type, e.g. security */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, ("This update will add new features and expand functionality."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (info == PK_INFO_ENUM_BUGFIX) {
+		/* TRANSLATORS: this is the update type, e.g. security */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This update will fix bugs and other non-critical problems."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (info == PK_INFO_ENUM_IMPORTANT) {
+		/* TRANSLATORS: this is the update type, e.g. security */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This update is important as it may solve critical problems."), -1, "para", "important", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (info == PK_INFO_ENUM_SECURITY) {
+		/* TRANSLATORS: this is the update type, e.g. security */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This update is needed to fix a security vulnerability with this package."), -1, "para", "important", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (info == PK_INFO_ENUM_BLOCKED) {
+		/* TRANSLATORS: this is the update type, e.g. security */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This update is blocked."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	}
+
+	/* issued and updated */
+	if (obj->issued != NULL && obj->updated != NULL) {
+		issued = pk_iso8601_from_date (obj->issued);
+		updated = pk_iso8601_from_date (obj->updated);
+		/* TRANSLATORS: this is when the notification was issued and then updated*/
+		line = g_strdup_printf (_("This notification was issued on %s and last updated on %s."), issued, updated);
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, line, -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+		g_free (issued);
+		g_free (updated);
 		g_free (line);
-	}
-
-	/* updated */
-	if (obj->updated != NULL) {
-		line = pk_iso8601_from_date (obj->updated);
-		/* TRANSLATORS: this is when (if?) the update was updated */
-		gpk_update_viewer_add_description_item (_("Updated"), line, NULL);
+	} else if (obj->issued != NULL) {
+		issued = pk_iso8601_from_date (obj->issued);
+		/* TRANSLATORS: this is when the update was issued */
+		line = g_strdup_printf (_("This notification was issued on %s."), issued);
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, line, -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+		g_free (issued);
 		g_free (line);
 	}
 
-	package_pretty = gpk_package_id_name_version (obj->id);
-	/* TRANSLATORS: this is the package version */
-	gpk_update_viewer_add_description_item (_("New version"), package_pretty, NULL);
-	g_free (package_pretty);
-
-	/* split and add */
-	package_pretty = gpk_update_viewer_get_pretty_from_composite (obj->updates);
-	if (!egg_strzero (package_pretty)) {
-		/* TRANSLATORS: this is a list of packages that are updated */
-		gpk_update_viewer_add_description_item (_("Updates"), package_pretty, NULL);
-	}
-	g_free (package_pretty);
-
-	/* split and add */
-	package_pretty = gpk_update_viewer_get_pretty_from_composite (obj->obsoletes);
-	if (!egg_strzero (package_pretty)) {
-		/* TRANSLATORS: this is a list of packages that are obsoleted */
-		gpk_update_viewer_add_description_item (_("Obsoletes"), package_pretty, NULL);
-	}
-	g_free (package_pretty);
-
-	/* TRANSLATORS: this is the repository the package has come from */
-	gpk_update_viewer_add_description_item (_("Repository"), obj->id->data, NULL);
-
+	/* update text */
 	if (!egg_strzero (obj->update_text)) {
 		/* convert the bullets */
 		line = egg_markdown_parse (markdown, obj->update_text);
 		if (!egg_strzero (line)) {
-			/* TRANSLATORS: this is the package description */
-			gpk_update_viewer_add_description_item (_("Description"), line, NULL);
+			gtk_text_buffer_insert_markup (text_buffer, &iter, line);
+			gtk_text_buffer_insert (text_buffer, &iter, "\n\n", -1);
+			update_text = TRUE;
 		}
 		g_free (line);
 	}
 
 	/* add all the links */
 	if (!egg_strzero (obj->vendor_url)) {
+		array = gpk_update_viewer_get_uris (obj->vendor_url);
 		/* TRANSLATORS: this is a list of vendor URLs */
-		gpk_update_viewer_add_description_link_item (_("Vendor"), obj->vendor_url);
+		title = ngettext ("For more information about this update please visit this website:",
+				  "For more information about this update please visit these websites:", array->len);
+		gpk_update_viewer_add_description_link_item (text_buffer, &iter, title, array);
+		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+		g_ptr_array_free (array, TRUE);
 	}
 	if (!egg_strzero (obj->bugzilla_url)) {
+		array = gpk_update_viewer_get_uris (obj->bugzilla_url);
 		/* TRANSLATORS: this is a list of bugzilla URLs */
-		gpk_update_viewer_add_description_link_item (_("Bugzilla"), obj->bugzilla_url);
+		title = ngettext ("For more information about bugs fixed by this update please visit this website:",
+				  "For more information about bugs fixed by this update please visit these websites:", array->len);
+		gpk_update_viewer_add_description_link_item (text_buffer, &iter, title, array);
+		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+		g_ptr_array_free (array, TRUE);
 	}
 	if (!egg_strzero (obj->cve_url)) {
+		array = gpk_update_viewer_get_uris (obj->cve_url);
 		/* TRANSLATORS: this is a list of CVE (security) URLs */
-		gpk_update_viewer_add_description_link_item (_("CVE"), obj->cve_url);
+		title = ngettext ("For more information about this security update please visit this website:",
+				  "For more information about this security update please visit these websites:", array->len);
+		gpk_update_viewer_add_description_link_item (text_buffer, &iter, title, array);
+		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+		g_ptr_array_free (array, TRUE);
 	}
 
 	/* reboot */
-	if (obj->restart == PK_RESTART_ENUM_SESSION ||
-	    obj->restart == PK_RESTART_ENUM_SYSTEM) {
-		info_text = gpk_restart_enum_to_localised_text (obj->restart);
-		/* TRANSLATORS: this is a notice a restart might be required */
-		gpk_update_viewer_add_description_item (_("Notice"), info_text, NULL);
-	}
-}
-
-/**
- * gpk_update_viewer_status_changed_cb:
- **/
-static void
-gpk_update_viewer_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
-{
-	GtkWidget *widget;
-
-	/* when we are testing the transaction, no package should be displayed */
-	if (status == PK_STATUS_ENUM_TEST_COMMIT) {
-		widget = glade_xml_get_widget (glade_xml, "progress_package_label");
-		gtk_label_set_label (GTK_LABEL (widget), "");
+	if (obj->restart == PK_RESTART_ENUM_SYSTEM) {
+		/* TRANSLATORS: reboot required */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("The computer will have to be restarted after the update for the changes to take effect."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (obj->restart == PK_RESTART_ENUM_SESSION) {
+		/* TRANSLATORS: log out required */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("You will need to log out and back in after the update for the changes to take effect."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
 	}
-}
-
-/**
- * gpk_update_viewer_reconsider_update_packages_button:
- **/
-static void
-gpk_update_viewer_reconsider_update_packages_button (GtkTreeModel *model)
-{
-	GtkTreeIter iter;
-	gboolean valid;
-	gboolean selected;
 
-	/* if there are no entries selected, deselect the button */
-	valid = gtk_tree_model_get_iter_first (model, &iter);
-	while (valid) {
-		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_SELECT, &selected, -1);
-		if (selected)
-			break;
-		valid = gtk_tree_model_iter_next (model, &iter);
+	/* state */
+	if (obj->state == PK_UPDATE_STATE_ENUM_UNSTABLE) {
+		/* TRANSLATORS: this is the stability status of the update */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("The classifaction of this update is unstable which means it is not designed for production use."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
+	} else if (obj->state == PK_UPDATE_STATE_ENUM_TESTING) {
+		/* TRANSLATORS: this is the stability status of the update */
+		gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This is a test update, and is not designed for normal use. Please report any problems or regressions you encounter."), -1, "para", NULL);
+		gtk_text_buffer_insert (text_buffer, &iter, "\n", -1);
 	}
-	polkit_gnome_action_set_sensitive (update_packages_action, valid);
-}
-
-/**
- * gpk_update_viewer_treeview_update_toggled:
- **/
-static void
-gpk_update_viewer_treeview_update_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
-{
-	GtkTreeModel *model = (GtkTreeModel *) data;
-	GtkTreeIter iter;
-	GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
-	gboolean update;
-	gchar *package_id;
-
-	/* get toggled iter */
-	gtk_tree_model_get_iter (model, &iter, path);
-	gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_SELECT, &update,
-			    PACKAGES_COLUMN_ID, &package_id, -1);
-
-	/* unstage */
-	update ^= 1;
-
-	egg_debug ("update %s[%i]", package_id, update);
-	g_free (package_id);
-
-	/* set new value */
-	gtk_list_store_set (GTK_LIST_STORE (model), &iter, PACKAGES_COLUMN_SELECT, update, -1);
-
-	/* clean up */
-	gtk_tree_path_free (path);
-
-	/* if there are no entries selected, deselect the button */
-	gpk_update_viewer_reconsider_update_packages_button (model);
-}
-
-/**
- * gpk_update_viewer_treeview_add_columns:
- **/
-static void
-gpk_update_viewer_treeview_add_columns (GtkTreeView *treeview)
-{
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-
-	/* image */
-	renderer = gtk_cell_renderer_pixbuf_new ();
-	g_object_set (renderer, "stock-size", GTK_ICON_SIZE_DIALOG, NULL);
-	/* TRANSLATORS: a column that has how serious the update is */
-	column = gtk_tree_view_column_new_with_attributes (_("Severity"), renderer,
-							   "icon-name", PACKAGES_COLUMN_ICON, NULL);
-	gtk_tree_view_column_set_sort_column_id (column, PACKAGES_COLUMN_INFO);
-	gtk_tree_view_append_column (treeview, column);
-
-	/* column for text */
-	renderer = gtk_cell_renderer_text_new ();
-	/* TRANSLATORS: a column that has name of the package that will be updated */
-	column = gtk_tree_view_column_new_with_attributes (_("Software"), renderer,
-							   "markup", PACKAGES_COLUMN_TEXT, NULL);
-	gtk_tree_view_column_set_sort_column_id (column, PACKAGES_COLUMN_TEXT);
-	gtk_tree_view_append_column (treeview, column);
-}
-
-/**
- * gpk_update_viewer_treeview_renderer_clicked:
- **/
-static void
-gpk_update_viewer_treeview_renderer_clicked (GtkCellRendererToggle *cell, gchar *uri, gpointer data)
-{
-	egg_debug ("clicked %s", uri);
-	gpk_gnome_open (uri);
-}
-
-/**
- * gpk_update_viewer_treeview_description_size_allocate_cb:
- **/
-static void
-gpk_update_viewer_treeview_description_size_allocate_cb (GtkWidget *widget, GtkAllocation *allocation, GtkCellRenderer *cell)
-{
-	GtkTreeViewColumn *column;
-	gint width;
-
-	column = gtk_tree_view_get_column (GTK_TREE_VIEW(widget), 0);
-	width = gtk_tree_view_column_get_width (column);
-	g_object_set (cell, "wrap-width", allocation->width - width - 10, NULL);
-}
-
-/**
- * gpk_update_viewer_treeview_add_columns_description:
- **/
-static void
-gpk_update_viewer_treeview_add_columns_description (GtkTreeView *treeview)
-{
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-
-	/* title */
-	column = gtk_tree_view_column_new ();
-	renderer = gtk_cell_renderer_text_new ();
-	g_object_set (renderer, "yalign", 0.0, NULL);
-	gtk_tree_view_column_pack_start (column, renderer, FALSE);
-	gtk_tree_view_column_add_attribute (column, renderer, "markup", DESC_COLUMN_TITLE);
-	gtk_tree_view_append_column (treeview, column);
-
-	/* column for uris */
-	renderer = gpk_cell_renderer_uri_new ();
-	g_object_set (renderer, "yalign", 0.0, NULL);
-	g_object_set (renderer, "wrap-mode", PANGO_WRAP_WORD, NULL);
-	g_signal_connect (treeview, "size-allocate", G_CALLBACK (gpk_update_viewer_treeview_description_size_allocate_cb), renderer);
-	g_signal_connect (renderer, "clicked", G_CALLBACK (gpk_update_viewer_treeview_renderer_clicked), NULL);
-	/* TRANSLATORS: The information about the update, not currently shown */
-	column = gtk_tree_view_column_new_with_attributes (_("Text"), renderer,
-							   "markup", DESC_COLUMN_TEXT,
-							   "uri", DESC_COLUMN_URI, NULL);
-	gtk_tree_view_append_column (treeview, column);
-}
-
-/**
- * gpk_update_viewer_treeview_add_columns_update:
- **/
-static void
-gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
-{
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-	GtkTreeModel *model;
-
-	/* column for select toggle */
-	renderer = gtk_cell_renderer_toggle_new ();
-	model = gtk_tree_view_get_model (treeview);
-	g_signal_connect (renderer, "toggled", G_CALLBACK (gpk_update_viewer_treeview_update_toggled), model);
-	column = gtk_tree_view_column_new_with_attributes ("Update", renderer,
-							   "active", PACKAGES_COLUMN_SELECT,
-							   "activatable", PACKAGES_COLUMN_CLICKABLE,
-							   "sensitive", PACKAGES_COLUMN_SENSITIVE, NULL);
-
-	/* set this column to a fixed sizing (of 50 pixels) */
-	gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
-	gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 20);
-	gtk_tree_view_append_column (treeview, column);
 
-	/* usual suspects */
-	gpk_update_viewer_treeview_add_columns (treeview);
+	/* only show changelog if we didn't have any update text */
+	if (!update_text && !egg_strzero (obj->changelog)) {
+		line = egg_markdown_parse (markdown, obj->changelog);
+		if (!egg_strzero (line)) {
+			/* TRANSLATORS: this is a ChangeLog */
+			line2 = g_strdup_printf ("%s\n%s\n", _("The developer logs will be shown as no information is available for this update:"), line);
+			gtk_text_buffer_insert_markup (text_buffer, &iter, line2);
+			g_free (line2);
+		}
+		g_free (line);
+	}
 }
 
 /**
@@ -1135,216 +1305,234 @@
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	gchar *package_id;
-	GError *error = NULL;
-	gboolean ret;
-	gchar **package_ids;
+	PkUpdateDetailObj *obj = NULL;
 
 	/* This will only work in single or browse selection mode! */
 	if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
 		gtk_tree_model_get (model, &iter,
-				    PACKAGES_COLUMN_ID, &package_id, -1);
-
-		if (cached_package_id && package_id &&
-		    strcmp (cached_package_id, package_id) == 0) {
-			g_free (package_id);
-			return;
-		}
-		g_free (cached_package_id);
-		/* make back into package ID */
-		cached_package_id = g_strdup (package_id);
+				    GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ, &obj,
+				    GPK_UPDATES_COLUMN_ID, &package_id, -1);
+		egg_debug ("selected row is: %s, %p", package_id, obj);
 		g_free (package_id);
-
-		/* clear and display animation until new details come in */
-		gpk_update_viewer_description_animation_start ();
-
-		egg_debug ("selected row is: %s", cached_package_id);
-
-		/* reset */
-		ret = pk_client_reset (client_query, &error);
-		if (!ret) {
-			egg_warning ("failed to reset: %s", error->message);
-			g_error_free (error);
-		}
-
-		/* get the description */
-		error = NULL;
-		package_ids = pk_package_ids_from_id (cached_package_id);
-		ret = pk_client_get_update_detail (client_query, package_ids, &error);
-		g_strfreev (package_ids);
-		if (!ret) {
-			egg_warning ("failed to get update detail: %s", error->message);
-			g_error_free (error);
-		}
+		if (obj != NULL)
+			gpk_update_viewer_populate_details (obj);
 	} else {
 		egg_debug ("no row selected");
 	}
 }
 
 /**
- * gpk_update_viewer_add_preview_item:
+ * gpk_update_viewer_check_blocked_packages:
  **/
 static void
-gpk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear)
+gpk_update_viewer_check_blocked_packages (PkPackageList *list)
 {
-	GtkWidget *tree_view;
-	GtkTreeSelection *selection;
-	GtkTreeIter iter;
-	gchar *markup;
+	guint i;
+	guint length;
+	const PkPackageObj *obj;
+	GString *string;
+	gboolean exists = FALSE;
+	gchar *text;
+	GtkWindow *window;
 
-	/* clear existing list */
-	if (clear) {
-		gtk_list_store_clear (list_store_preview);
+	string = g_string_new ("");
+
+	/* find any that are blocked */
+	length = pk_package_list_get_size (list);
+	for (i=0;i<length;i++) {
+		obj = pk_package_list_get_obj (list, i);
+		if (obj->info == PK_INFO_ENUM_BLOCKED) {
+			text = gpk_package_id_format_oneline (obj->id, obj->summary);
+			g_string_append_printf (string, "%s\n", text);
+			g_free (text);
+			exists = TRUE;
+		}
 	}
 
-	markup = g_strdup_printf ("<b>%s</b>", message);
-	gtk_list_store_append (list_store_preview, &iter);
-	gtk_list_store_set (list_store_preview, &iter,
-			    PACKAGES_COLUMN_TEXT, markup,
-			    PACKAGES_COLUMN_ICON, icon,
-			    -1);
-	g_free (markup);
+	/* trim off extra newlines */
+	if (string->len != 0)
+		g_string_set_size (string, string->len-1);
 
-	tree_view = glade_xml_get_widget (glade_xml, "treeview_preview");
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
-	gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+	/* convert to a normal gchar */
+	text = g_string_free (string, FALSE);
+
+	/* nothing of interest */
+	if (!exists)
+		goto out;
+
+	/* throw up dialog */
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+	/* TRANSLATORS: we failed to install all the updates we requested */
+	gpk_error_dialog_modal (window, _("Some updates were not installed"), text, NULL);
+out:
+	g_free (text);
 }
 
 /**
- * pk_update_get_approx_time:
+ * gpk_update_viewer_finished_get_details_cb:
  **/
-static const gchar *
-pk_update_get_approx_time (guint time_s)
+static gboolean
+gpk_update_viewer_finished_get_details_cb (PkPackageList *list)
 {
-	if (time_s < 60)
-		/* TRANSLATORS: less than 60 seconds, a short time */
-		return _("Less than a minute ago");
-	else if (time_s < 60*60)
-		return _("Less than an hour ago");
-	else if (time_s < 24*60*60)
-		return _("A few hours ago");
-	else if (time_s < 7*24*60*60)
-		return _("A few days ago");
-	return _("Over a week ago");
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	package_ids = pk_package_list_to_strv (list);
+
+	/* get the details of all the packages */
+	ret = pk_client_reset (client_primary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	ret = pk_client_get_details (client_primary, package_ids, &error);
+	if (!ret) {
+		egg_error ("cannot get details: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	g_strfreev (package_ids);
+	g_object_unref (list);
+	return FALSE;
 }
 
 /**
- * pk_update_viewer_set_last_refreshed_time:
+ * gpk_update_viewer_finished_get_update_details_cb:
  **/
 static gboolean
-pk_update_viewer_set_last_refreshed_time (void)
+gpk_update_viewer_finished_get_update_details_cb (PkPackageList *list)
 {
-	GtkWidget *widget;
-	guint time_s;
-	const gchar *time_text;
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	package_ids = pk_package_list_to_strv (list);
 
-	/* get times from the daemon */
-	pk_control_get_time_since_action (control, PK_ROLE_ENUM_REFRESH_CACHE, &time_s, NULL);
-	if (time_s < 60*60*24) {
-		widget = glade_xml_get_widget (glade_xml, "label_last_refresh_title");
-		gtk_widget_hide (widget);
-		widget = glade_xml_get_widget (glade_xml, "label_last_refresh");
-		gtk_widget_hide (widget);
-		return FALSE;
+	/* get the details of all the packages */
+	ret = pk_client_reset (client_primary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
 	}
-
-	widget = glade_xml_get_widget (glade_xml, "label_last_refresh_title");
-	gtk_widget_show (widget);
-	time_text = pk_update_get_approx_time (time_s);
-	widget = glade_xml_get_widget (glade_xml, "label_last_refresh");
-	gtk_label_set_label (GTK_LABEL (widget), time_text);
-	gtk_widget_show (widget);
-	return TRUE;
+	ret = pk_client_get_update_detail (client_primary, package_ids, &error);
+	if (!ret) {
+		egg_error ("cannot get details: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	g_strfreev (package_ids);
+	g_object_unref (list);
+	return FALSE;
 }
 
 /**
- * pk_update_viewer_set_last_updated_time:
+ * gpk_update_viewer_finished_get_distro_upgrades_cb:
  **/
 static gboolean
-pk_update_viewer_set_last_updated_time (void)
+gpk_update_viewer_finished_get_distro_upgrades_cb (gpointer data)
 {
-	GtkWidget *widget;
-	guint time_s;
-	guint time_new;
-	const gchar *time_text;
-
-	/* get times from the daemon */
-	pk_control_get_time_since_action (control, PK_ROLE_ENUM_UPDATE_SYSTEM, &time_s, NULL);
-	pk_control_get_time_since_action (control, PK_ROLE_ENUM_UPDATE_PACKAGES, &time_new, NULL);
-
-	/* always use the shortest time */
-	if (time_new < time_s)
-		time_s = time_new;
-	time_text = pk_update_get_approx_time (time_s);
-	widget = glade_xml_get_widget (glade_xml, "label_last_update");
-	gtk_label_set_label (GTK_LABEL (widget), time_text);
-	return TRUE;
+	gboolean ret;
+	GError *error = NULL;
+
+	/* get the details of all the packages */
+	ret = pk_client_reset (client_primary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	ret = pk_client_get_distro_upgrades (client_primary, &error);
+	if (!ret) {
+		egg_error ("cannot get details: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	return FALSE;
 }
 
-static void
-gpk_update_viewer_restart_cb (GtkWidget *widget, gpointer data)
+/**
+ * gpk_update_viewer_requeue:
+ **/
+static gboolean
+gpk_update_viewer_requeue (gpointer data)
 {
-	gpk_restart_system ();
+	gboolean ret;
+	GError *error = NULL;
+
+	/* retry new action */
+	ret = pk_client_requeue (client_primary, &error);
+	if (!ret) {
+		egg_warning ("Failed to requeue: %s", error->message);
+		g_error_free (error);
+	}
+	return ret;
 }
 
 /**
- * gpk_update_viewer_check_blocked_packages:
+ * gpk_update_viewer_check_restart:
  **/
-static void
-gpk_update_viewer_check_blocked_packages (PkPackageList *list)
+static gboolean
+gpk_update_viewer_check_restart (PkRestartEnum restart)
 {
-	guint i;
-	guint length;
-	const PkPackageObj *obj;
-	GString *string;
-	gboolean exists = FALSE;
-	gchar *text;
-	gchar *title_bold;
-	GtkWidget *widget;
-
-	string = g_string_new ("");
+	GtkWindow *window;
+	GtkWidget *dialog;
+	gboolean ret = FALSE;
+	const gchar *title;
+	const gchar *message;
+	const gchar *button;
+	GtkResponseType response;
 
-	/* find any that are blocked */
-	length = pk_package_list_get_size (list);
-	for (i=0;i<length;i++) {
-		obj = pk_package_list_get_obj (list, i);
-		if (obj->info == PK_INFO_ENUM_BLOCKED) {
-			text = gpk_package_id_format_oneline (obj->id, obj->summary);
-			g_string_append_printf (string, "%s\n", text);
-			g_free (text);
-			exists = TRUE;
-		}
-	}
+	if (restart != PK_RESTART_ENUM_SYSTEM &&
+	    restart != PK_RESTART_ENUM_SESSION)
+		goto out;
 
-	/* trim off extra newlines */
-	if (string->len != 0)
-		g_string_set_size (string, string->len-1);
+	/* get the text */
+	title = gpk_restart_enum_to_localised_text (restart);
+	if (restart == PK_RESTART_ENUM_SYSTEM) {
+		/* TRANSLATORS: the message text for the restart */
+		message = _("Some of the updates that were installed require the computer to be restarted before the changes will be applied.");
+		/* TRANSLATORS: the button text for the restart */
+		button = _("Restart Computer");
+	} else {
+		/* TRANSLATORS: the message text for the logout */
+		message = _("Some of the updates that were installed require you to log out and back in before the changes will be applied.");
+		/* TRANSLATORS: the button text for the logout */
+		button = _("Log Out");
+	}
+
+	/* show modal dialog */
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+	dialog = gtk_message_dialog_new (window, GTK_DIALOG_MODAL,
+					 GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
+					 "%s", title);
+	gtk_dialog_add_button (GTK_DIALOG (dialog), button, GTK_RESPONSE_OK);
+	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog), "%s", message);
+	gtk_window_set_icon_name (GTK_WINDOW(dialog), GPK_ICON_SOFTWARE_INSTALLER);
 
-	/* convert to a normal gchar */
-	text = g_string_free (string, FALSE);
+	/* setup a callback so we autoclose */
+	auto_shutdown_id = g_timeout_add_seconds (GPK_UPDATE_VIEWER_AUTO_RESTART_TIMEOUT, (GSourceFunc) gpk_update_viewer_auto_shutdown, dialog);
 
-	/* set the widget text */
-	if (exists) {
-		widget = glade_xml_get_widget (glade_xml, "label_update_title");
-		/* TRANSLATORS: some updates the user selected could not be installed */
-		title_bold = g_strdup_printf ("<b>%s</b>", _("Some updates were not installed"));
-		gtk_label_set_markup (GTK_LABEL (widget), title_bold);
-		g_free (title_bold);
+	response = gtk_dialog_run (GTK_DIALOG(dialog));
+	gtk_widget_destroy (dialog);
 
-		widget = glade_xml_get_widget (glade_xml, "label_update_notice");
-		gtk_label_set_markup (GTK_LABEL (widget), text);
-		gtk_widget_show (widget);
-	} else {
-		widget = glade_xml_get_widget (glade_xml, "label_update_title");
-		/* TRANSLATORS: everything updates okay */
-		title_bold = g_strdup_printf ("<b>%s</b>", _("System update completed"));
-		gtk_label_set_markup (GTK_LABEL (widget), title_bold);
-		g_free (title_bold);
+	/* cancel */
+	if (response != GTK_RESPONSE_OK)
+		goto out;
 
-		widget = glade_xml_get_widget (glade_xml, "label_update_notice");
-		gtk_widget_hide (widget);
-	}
+	/* doing the action, return success */
+	ret = TRUE;
 
-	g_free (text);
+	/* do the action */
+	if (restart == PK_RESTART_ENUM_SYSTEM)
+		gpk_update_viewer_shutdown ();
+	else if (restart == PK_RESTART_ENUM_SESSION)
+		gpk_update_viewer_logout ();
+out:
+	return ret;
 }
 
 /**
@@ -1354,78 +1542,142 @@
 gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime, gpointer data)
 {
 	GtkWidget *widget;
+	GtkTreeView *treeview;
 	GtkTreePath *path;
+	GtkTreeModel *model;
 	GtkTreeSelection *selection;
+	PkBitfield roles;
 	PkRoleEnum role;
-	PkRestartEnum restart;
 	PkPackageList *list;
+	PkRestartEnum restart;
 
 	pk_client_get_role (client, &role, NULL, NULL);
+	egg_debug ("role: %s, exit: %s", pk_role_enum_to_text (role), pk_exit_enum_to_text (exit));
+
+	/* clear package */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
+	gtk_label_set_label (GTK_LABEL (widget), "");
+
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_progress"));
+	gtk_widget_hide (widget);
+
+	/* hidden window, so quit at this point */
+	if (running_hidden) {
+		egg_debug ("transaction finished whilst hidden, so exit");
+		g_main_loop_quit (loop);
+	}
 
-	/* we don't need to do anything here */
-	if (role == PK_ROLE_ENUM_GET_UPDATE_DETAIL ||
-	    role == PK_ROLE_ENUM_REFRESH_CACHE) {
-		gpk_update_viewer_description_animation_stop ();
+	/* if secondary, ignore */
+	if (client == client_primary &&
+	    (exit == PK_EXIT_ENUM_KEY_REQUIRED ||
+	     exit == PK_EXIT_ENUM_EULA_REQUIRED)) {
+		egg_debug ("ignoring primary sig-required or eula");
+		return;
+	}
+
+	/* get model */
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
+
+	/* clicked cancel on get updates screen */
+	if (role == PK_ROLE_ENUM_GET_UPDATES &&
+	    exit == PK_EXIT_ENUM_CANCELLED) {
+		g_main_loop_quit (loop);
+		return;
 	}
 
-	/* select the first entry in the updates list */
 	if (role == PK_ROLE_ENUM_GET_UPDATES) {
-		widget = glade_xml_get_widget (glade_xml, "treeview_updates");
+		/* get the download sizes */
+		if (update_list != NULL)
+			g_object_unref (update_list);
+		update_list = pk_client_get_package_list (client_primary);
+
+		/* get the download sizes */
+		if (PK_OBJ_LIST(update_list)->len > 0)
+			g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_update_details_cb, g_object_ref (update_list));
+
+		/* set info */
+		gpk_update_viewer_reconsider_info (model);
+	}
+
+	if (role == PK_ROLE_ENUM_GET_UPDATE_DETAIL) {
+		/* get the restarts */
+		g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_details_cb, g_object_ref (update_list));
+
+		/* are now able to do action */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+		gtk_widget_set_sensitive (widget, TRUE);
+
+		/* set info */
+		gpk_update_viewer_reconsider_info (model);
+	}
+
+	if (role == PK_ROLE_ENUM_GET_DETAILS) {
+
+		/* get the distro-upgrades if we support it */
+		roles = pk_control_get_actions (control, NULL);
+		if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES))
+			g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_distro_upgrades_cb, NULL);
+
+		/* select the first entry in the updates list now we've got data */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_updates"));
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
 		gtk_tree_selection_unselect_all (selection);
 		path = gtk_tree_path_new_first ();
 		gtk_tree_selection_select_path (selection, path);
 		gtk_tree_path_free (path);
-	}
 
-	/* stop the throbber */
-	gpk_update_viewer_preview_animation_stop ();
+		/* set info */
+		gpk_update_viewer_reconsider_info (model);
+	}
 
-	/* check if we need to display infomation about blocked packages */
-	if (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
-	    role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
-		//TODO: this has to be moved to GpkClient
-		list = pk_client_get_package_list (client);
-		gpk_update_viewer_check_blocked_packages (list);
-		g_object_unref (list);
+	if (role == PK_ROLE_ENUM_GET_DISTRO_UPGRADES) {
+		/* set info */
+		gpk_update_viewer_reconsider_info (model);
 	}
 
-	/* hide the cancel */
-	if (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
-	    role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
-		widget = glade_xml_get_widget (glade_xml, "button_cancel");
-		gtk_widget_hide (widget);
+	/* we've just agreed to auth or a EULA */
+	if (role == PK_ROLE_ENUM_INSTALL_SIGNATURE ||
+	    role == PK_ROLE_ENUM_ACCEPT_EULA) {
+		if (exit == PK_EXIT_ENUM_SUCCESS)
+			gpk_update_viewer_requeue (NULL);
+		else
+			gpk_update_viewer_undisable_packages ();
+	}
 
-		/* go onto the success page */
-		if (exit == PK_EXIT_ENUM_SUCCESS) {
+	/* check if we need to display infomation about blocked packages */
+	if (exit == PK_EXIT_ENUM_SUCCESS &&
+	    (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
+	     role == PK_ROLE_ENUM_UPDATE_PACKAGES)) {
+
+		/* get the worst restart case */
+		restart = pk_client_get_require_restart (client_primary);
+		if (restart > restart_update)
+			restart_update = restart;
 
-			/* do we have to show any widgets? */
-			restart = pk_client_get_require_restart (client);
-			if (restart == PK_RESTART_ENUM_SYSTEM ||
-			    restart == PK_RESTART_ENUM_SESSION) {
-				egg_debug ("showing reboot widgets");
-				widget = glade_xml_get_widget (glade_xml, "hbox_restart");
-				gtk_widget_show (widget);
-				polkit_gnome_action_set_visible (restart_action, TRUE);
-			}
+		/* check blocked */
+		list = pk_client_get_package_list (client_primary);
+		gpk_update_viewer_check_blocked_packages (list);
+		g_object_unref (list);
 
-			widget = glade_xml_get_widget (glade_xml, "button_close4");
-			gtk_widget_grab_default (widget);
+		/* check restart */
+		gpk_update_viewer_check_restart (restart_update);
 
-			/* set correct view */
-			gpk_update_viewer_set_page (PAGE_CONFIRM);
-		}
+		/* quit after we successfully updated */
+		g_main_loop_quit (loop);
 	}
 
-//	gpk_update_viewer_populate_preview (list);
-}
+	/* check if we need to refresh list */
+	if (exit != PK_EXIT_ENUM_SUCCESS &&
+	    (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
+	     role == PK_ROLE_ENUM_UPDATE_PACKAGES)) {
+		gpk_update_viewer_get_new_update_list ();
+	}
 
-static void
-pk_button_more_installs_cb (GtkWidget *button, gpointer data)
-{
-	/* set correct view */
-	gpk_update_viewer_set_page (PAGE_DETAILS);
-	gpk_update_viewer_get_new_update_list ();
+	/* we pressed cancel */
+	if (exit != PK_EXIT_ENUM_SUCCESS) {
+		gpk_update_viewer_undisable_packages ();
+	}
 }
 
 /**
@@ -1436,117 +1688,125 @@
 				guint elapsed, guint remaining, gpointer data)
 {
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "progressbar_percent");
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkTreePath *path;
 
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_progress"));
+	gtk_widget_show (widget);
 	if (percentage != PK_CLIENT_PERCENTAGE_INVALID)
 		gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), (gfloat) percentage / 100.0);
+
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
+
+	if (package_id_last == NULL) {
+		egg_debug ("no last package");
+		return;
+	}
+
+	path = gpk_update_viewer_model_get_path (model, package_id_last);
+	if (path == NULL) {
+		egg_debug ("not found ID for package");
+		return;
+	}
+
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_path_free (path);
+	gtk_list_store_set (list_store_updates, &iter,
+			    GPK_UPDATES_COLUMN_PERCENTAGE, subpercentage, -1);
 }
 
 /**
- * gpk_update_viewer_preview_set_animation:
+ * gpk_update_viewer_error_code_cb:
  **/
 static void
-gpk_update_viewer_preview_set_animation (const gchar *text)
+gpk_update_viewer_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, gpointer data)
 {
-	GtkWidget *widget;
+	GtkWindow *window;
 
-	/* hide apply, review and refresh */
-	polkit_gnome_action_set_sensitive (update_system_action, FALSE);
-	polkit_gnome_action_set_sensitive (update_packages_action, FALSE);
-	widget = glade_xml_get_widget (glade_xml, "button_review");
-	gtk_widget_set_sensitive (widget, FALSE);
+	/* ignore some errors */
+	if (code == PK_ERROR_ENUM_PROCESS_KILL ||
+	    code == PK_ERROR_ENUM_TRANSACTION_CANCELLED) {
+		egg_debug ("error ignored %s\n%s", pk_error_enum_to_text (code), details);
+		return;
+	}
+
+	/* ignore the ones we can handle */
+	if (code == PK_ERROR_ENUM_GPG_FAILURE ||
+	    code == PK_ERROR_ENUM_NO_LICENSE_AGREEMENT) {
+		egg_debug ("error ignored as we're handling %s\n%s", pk_error_enum_to_text (code), details);
+		return;
+	}
 
-	/* start the spinning preview */
-	gpk_update_viewer_preview_animation_start (text);
+	window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+	gpk_error_dialog_modal (window, gpk_error_enum_to_localised_text (code),
+				gpk_error_enum_to_localised_message (code), details);
 }
 
 /**
- * gpk_update_viewer_task_list_changed_cb:
+ * gpk_update_viewer_repo_list_changed_cb:
  **/
 static void
-gpk_update_viewer_task_list_changed_cb (PkTaskList *tlist_, gpointer data)
+gpk_update_viewer_repo_list_changed_cb (PkClient *client, gpointer data)
 {
-	GtkWidget *widget;
-
-	/* hide buttons if we are updating */
-	if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_UPDATE_SYSTEM) ||
-	    pk_task_list_contains_role (tlist, PK_ROLE_ENUM_UPDATE_PACKAGES)) {
-		/* TRANSLATORS: either this current user, or another user is already updating the system */
-		gpk_update_viewer_preview_set_animation (_("A system update is already in progress"));
-
-	} else if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_GET_UPDATES)) {
-		/* TRANSLATORS: we are getting the list of updates from the server */
-		gpk_update_viewer_preview_set_animation (_("Getting updates"));
-
-	} else if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_REFRESH_CACHE)) {
-		/* TRANSLATORS: we are refreshing the package lists and the update lists */
-		gpk_update_viewer_preview_set_animation (_("Refreshing package cache"));
-
-	} else {
-		gpk_update_viewer_preview_animation_stop ();
-
-		/* show apply, review and refresh */
-		polkit_gnome_action_set_sensitive (update_system_action, are_updates_available);
-		polkit_gnome_action_set_sensitive (update_packages_action, are_updates_available);
-		widget = glade_xml_get_widget (glade_xml, "button_review");
-		gtk_widget_set_sensitive (widget, are_updates_available);
-	}
+	gpk_update_viewer_get_new_update_list ();
 }
 
 /**
- * gpk_update_viewer_error_code_cb:
+ * gpk_update_viewer_detail_popup_menu_select_all:
  **/
 static void
-gpk_update_viewer_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, gpointer data)
+gpk_update_viewer_detail_popup_menu_select_all (GtkWidget *menuitem, gpointer userdata)
 {
-	GtkWidget *widget;
+	GtkTreeView *treeview = GTK_TREE_VIEW (userdata);
+	gboolean valid;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	PkInfoEnum info;
 
-	/* ignore some errors */
-	if (code == PK_ERROR_ENUM_PROCESS_KILL ||
-	    code == PK_ERROR_ENUM_TRANSACTION_CANCELLED) {
-		egg_debug ("error ignored %s\n%s", pk_error_enum_to_text (code), details);
-		return;
+	/* get the first iter in the list */
+	model = gtk_tree_view_get_model (treeview);
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+	while (valid) {
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_INFO, &info, -1);
+		if (info != PK_INFO_ENUM_BLOCKED)
+			gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+					    GPK_UPDATES_COLUMN_SELECT, TRUE, -1);
+		valid = gtk_tree_model_iter_next (model, &iter);
 	}
 
-	widget = glade_xml_get_widget (glade_xml, "window_updates");
-	gpk_error_dialog_modal (GTK_WINDOW (widget), gpk_error_enum_to_localised_text (code),
-				gpk_error_enum_to_localised_message (code), details);
-}
-
-/**
- * gpk_update_viewer_repo_list_changed_cb:
- **/
-static void
-gpk_update_viewer_repo_list_changed_cb (PkClient *client, gpointer data)
-{
-	gpk_update_viewer_get_new_update_list ();
+	/* if there are no entries selected, deselect the button */
+	gpk_update_viewer_reconsider_info (model);
 }
 
 /**
- * gpk_update_viewer_detail_popup_menu_select_all:
+ * gpk_update_viewer_detail_popup_menu_select_security:
  **/
 static void
-gpk_update_viewer_detail_popup_menu_select_all (GtkWidget *menuitem, gpointer userdata)
+gpk_update_viewer_detail_popup_menu_select_security (GtkWidget *menuitem, gpointer userdata)
 {
 	GtkTreeView *treeview = GTK_TREE_VIEW (userdata);
 	gboolean valid;
+	gboolean ret;
 	GtkTreeIter iter;
 	GtkTreeModel *model;
-	PkStatusEnum info;
+	PkInfoEnum info;
 
 	/* get the first iter in the list */
 	model = gtk_tree_view_get_model (treeview);
 	valid = gtk_tree_model_get_iter_first (model, &iter);
 	while (valid) {
-		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_INFO, &info, -1);
-		if (info != PK_INFO_ENUM_BLOCKED)
-			gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-					    PACKAGES_COLUMN_SELECT, TRUE, -1);
+		gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_INFO, &info, -1);
+		ret = (info == PK_INFO_ENUM_SECURITY);
+		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+				    GPK_UPDATES_COLUMN_SELECT, ret, -1);
 		valid = gtk_tree_model_iter_next (model, &iter);
 	}
 
 	/* if there are no entries selected, deselect the button */
-	gpk_update_viewer_reconsider_update_packages_button (model);
+	gpk_update_viewer_reconsider_info (model);
 }
 
 /**
@@ -1566,40 +1826,44 @@
 	while (valid) {
 		gtk_tree_model_get (model, &iter, -1);
 		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-				    PACKAGES_COLUMN_SELECT, FALSE, -1);
+				    GPK_UPDATES_COLUMN_SELECT, FALSE, -1);
 		valid = gtk_tree_model_iter_next (model, &iter);
 	}
 
 	/* if there are no entries selected, deselect the button */
-	gpk_update_viewer_reconsider_update_packages_button (model);
+	gpk_update_viewer_reconsider_info (model);
 }
 
 /**
  * gpk_update_viewer_get_checked_status:
  **/
-static void
+static gboolean
 gpk_update_viewer_get_checked_status (gboolean *all_checked, gboolean *none_checked)
 {
 	GtkTreeView *treeview;
 	gboolean valid;
 	gboolean update;
+	gboolean clickable;
 	GtkTreeIter iter;
 	GtkTreeModel *model;
 
 	/* get the first iter in the list */
-	treeview = GTK_TREE_VIEW (glade_xml_get_widget (glade_xml, "treeview_updates"));
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
 	model = gtk_tree_view_get_model (treeview);
 	valid = gtk_tree_model_get_iter_first (model, &iter);
 	*all_checked = TRUE;
 	*none_checked = TRUE;
 	while (valid) {
-		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_SELECT, &update, -1);
+		gtk_tree_model_get (model, &iter,
+				    GPK_UPDATES_COLUMN_SELECT, &update,
+				    GPK_UPDATES_COLUMN_CLICKABLE, &clickable, -1);
 		if (update)
 			*none_checked = FALSE;
 		else
 			*all_checked = FALSE;
 		valid = gtk_tree_model_iter_next (model, &iter);
 	}
+	return clickable;
 }
 
 /**
@@ -1612,11 +1876,16 @@
 	GtkWidget *menuitem;
 	gboolean all_checked;
 	gboolean none_checked;
+	gboolean ret;
 
 	menu = gtk_menu_new();
 
 	/* we don't want to show 'Select all' if they are all checked */
-	gpk_update_viewer_get_checked_status (&all_checked, &none_checked);
+	ret = gpk_update_viewer_get_checked_status (&all_checked, &none_checked);
+	if (!ret) {
+		egg_debug ("ignoring as we are locked down");
+		return;
+	}
 
 	if (!all_checked) {
 		/* TRANSLATORS: right click menu, select all the updates */
@@ -1634,6 +1903,12 @@
 		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 	}
 
+	/* TRANSLATORS: right click menu, select only security updates */
+	menuitem = gtk_menu_item_new_with_label (_("Select security updates"));
+	g_signal_connect (menuitem, "activate",
+			  G_CALLBACK (gpk_update_viewer_detail_popup_menu_select_security), treeview);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+
 	/* TRANSLATORS: right click option, ignore this update name, not currently used */
 	menuitem = gtk_menu_item_new_with_label (_("Ignore this update"));
 	gtk_widget_set_sensitive (GTK_WIDGET (menuitem), FALSE);
@@ -1654,6 +1929,7 @@
 gpk_update_viewer_detail_button_pressed (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
 {
 	GtkTreeSelection *selection;
+	GtkTreePath *path;
 
 	/* single click with the right mouse button? */
 	if (event->type != GDK_BUTTON_PRESS || event->button != 3) {
@@ -1666,7 +1942,6 @@
 	/* select the row */
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
 	if (gtk_tree_selection_count_selected_rows (selection) <= 1) {
-		GtkTreePath *path;
 		/* Get tree path for row that was clicked */
 		if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
 						   (gint) event->x, (gint) event->y, &path,
@@ -1693,143 +1968,397 @@
 }
 
 /**
- * gpk_update_viewer_task_list_finished_cb:
+ * gpk_update_viewer_message_received_cb
  **/
 static void
-gpk_update_viewer_task_list_finished_cb (PkTaskList *tlist_, PkClient *client, PkExitEnum exit_enum,
-					 guint runtime, gpointer userdata)
+gpk_update_viewer_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessageData *message_data, guint time_ms, gpointer data)
+{
+	GtkWindow *window;
+	if (command == UNIQUE_ACTIVATE) {
+		window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
+		gtk_window_present (window);
+		/* not hidden anymore */
+		running_hidden = FALSE;
+	}
+}
+
+/**
+ * gpk_update_viewer_get_new_update_list
+ **/
+static gboolean
+gpk_update_viewer_get_new_update_list (void)
 {
-	PkRoleEnum role;
 	gboolean ret;
+	GError *error = NULL;
+	GtkWidget *widget;
+	gchar *text = NULL;
+
+	/* clear all widgets */
+	gtk_list_store_clear (list_store_updates);
+	gtk_text_buffer_set_text (text_buffer, "", -1);
+
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_header_title"));
+	/* TRANSLATORS: this is the header */
+	text = g_strdup_printf ("<big><b>%s</b></big>", _("Checking for updates..."));
+	gtk_label_set_label (GTK_LABEL (widget), text);
 
-	/* get the role */
-	ret = pk_client_get_role (client, &role, NULL, NULL);
+	/* reset client */
+	ret = pk_client_reset (client_primary, &error);
 	if (!ret) {
-		egg_warning ("cannot get role");
-		return;
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
 	}
-	egg_debug ("%s", pk_role_enum_to_text (role));
 
-	/* update last time in the UI */
-	if (role == PK_ROLE_ENUM_REFRESH_CACHE) {
-		pk_update_viewer_set_last_refreshed_time ();
-	} else if (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
-		   role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
-		pk_update_viewer_set_last_updated_time ();
+	/* get new list */
+	ret = pk_client_get_updates (client_primary, PK_FILTER_ENUM_NONE, &error);
+	if (!ret) {
+		egg_warning ("Failed to get updates: %s", error->message);
+		g_error_free (error);
 	}
+out:
+	g_free (text);
+	return ret;
+}
+
+/**
+ * gpk_update_viewer_allow_cancel_cb:
+ **/
+static void
+gpk_update_viewer_allow_cancel_cb (PkClient *client, gboolean allow_cancel, gpointer data)
+{
+	GdkDisplay *display;
+	GdkCursor *cursor;
+	GtkWidget *widget;
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_cancel"));
+	gtk_widget_set_sensitive (widget, allow_cancel);
 
-	/* do we need to repopulate the preview widget */
-	if (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
-	    role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
-	    role == PK_ROLE_ENUM_REFRESH_CACHE) {
-		egg_debug ("getting new");
-		//gpk_update_viewer_get_new_update_list ();
+	/* set cursor */
+	if (allow_cancel) {
+		gdk_window_set_cursor (widget->window, NULL);
+	} else {
+		display = gdk_display_get_default ();
+		cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
+		gdk_window_set_cursor (widget->window, cursor);
+		gdk_cursor_unref (cursor);
 	}
 }
 
 /**
- * gpk_update_viewer_create_custom_widget:
+ * gpk_update_viewer_eula_cb:
  **/
-static GtkWidget *
-gpk_update_viewer_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
-				     gchar *string1, gchar *string2,
-				     gint int1, gint int2, gpointer user_data)
+static void
+gpk_update_viewer_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
+				    const gchar *vendor_name, const gchar *license_agreement, gpointer data)
 {
-	if (egg_strequal (name, "button_refresh"))
-		return polkit_gnome_action_create_button (refresh_action);
-	if (egg_strequal (name, "button_restart"))
-		return polkit_gnome_action_create_button (restart_action);
-	if (egg_strequal (name, "button_update_system"))
-		return polkit_gnome_action_create_button (update_system_action);
-	if (egg_strequal (name, "button_update_packages"))
-		return polkit_gnome_action_create_button (update_packages_action);
-	if (egg_strequal (name, "image_animation_preview"))
-		return gpk_animated_icon_new ();
-	if (egg_strequal (name, "image_animation_description"))
-		return gpk_animated_icon_new ();
-	egg_warning ("name unknown=%s", name);
-	return NULL;
+	/* use the helper */
+	gpk_helper_eula_show (helper_eula, eula_id, package_id, vendor_name, license_agreement);
 }
 
 /**
- * gpk_update_viewer_setup_policykit:
- *
- * We have to do this before the glade stuff if done as the custom handler needs the actions setup
+ * gpk_update_viewer_repo_signature_event_cb:
+ **/
+static void
+gpk_update_viewer_repo_signature_event_cb (GpkHelperRepoSignature *_helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, gpointer data)
+{
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	gboolean ret;
+	GError *error = NULL;
+
+	if (type != GTK_RESPONSE_YES) {
+		/* we've ruined the old one by making the checkboxes insensitive */
+		gpk_update_viewer_get_new_update_list ();
+		gpk_update_viewer_reconsider_buttons (NULL);
+		goto out;
+	}
+
+	/* reset client */
+	ret = pk_client_reset (client_secondary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* install signature */
+	ret = pk_client_install_signature (client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
+	if (!ret) {
+		egg_warning ("cannot install signature: %s", error->message);
+		g_error_free (error);
+		/* we've ruined the old one by making the checkboxes insensitive */
+		gpk_update_viewer_get_new_update_list ();
+		goto out;
+	}
+out:
+	/* set state */
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
+	gpk_update_viewer_reconsider_info (model);
+}
+
+/**
+ * gpk_update_viewer_eula_event_cb:
  **/
 static void
-gpk_update_viewer_setup_policykit (void)
+gpk_update_viewer_eula_event_cb (GpkHelperRepoSignature *_helper_eula, GtkResponseType type, const gchar *eula_id, gpointer data)
 {
-	PolKitAction *pk_action;
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	gboolean ret;
+	GError *error = NULL;
 
-	/* refresh */
-	pk_action = polkit_action_new ();
-	polkit_action_set_action_id (pk_action, "org.freedesktop.packagekit.system-sources-refresh");
-	refresh_action = polkit_gnome_action_new_default ("refresh", pk_action,
-							  /* TRANSLATORS: button label, refresh the package lists */
-							  _("Refresh"),
-							  /* TRANSLATORS: button tooltip */
-							  _("Refreshing is not normally required but will retrieve the latest application and update lists"));
-	g_object_set (refresh_action, "auth-icon-name", NULL, NULL);
-	polkit_action_unref (pk_action);
+	if (type != GTK_RESPONSE_YES) {
+		/* we've ruined the old one by making the checkboxes insensitive */
+		gpk_update_viewer_get_new_update_list ();
+		gpk_update_viewer_reconsider_buttons (NULL);
+		goto out;
+	}
 
-	/* restart */
-	pk_action = polkit_action_new ();
-	polkit_action_set_action_id (pk_action, "org.freedesktop.consolekit.system.restart");
-	restart_action = polkit_gnome_action_new_default ("restart-system", pk_action,
-							  /* TRANSLATORS: button label */
-							  _("_Restart computer now"), NULL);
-	g_object_set (restart_action,
-		      "no-icon-name", GTK_STOCK_REFRESH,
-		      "auth-icon-name", GTK_STOCK_REFRESH,
-		      "yes-icon-name", GTK_STOCK_REFRESH,
-		      "self-blocked-icon-name", GTK_STOCK_REFRESH,
-		      "no-visible", FALSE,
-		      "master-visible", FALSE,
-		      NULL);
-	polkit_action_unref (pk_action);
+	/* reset client */
+	ret = pk_client_reset (client_secondary, &error);
+	if (!ret) {
+		egg_warning ("cannot reset client: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
 
-	/* update-package */
-	pk_action = polkit_action_new ();
-	polkit_action_set_action_id (pk_action, "org.freedesktop.packagekit.system-update");
-	update_packages_action = polkit_gnome_action_new_default ("update-package", pk_action,
-								  /* TRANSLATORS: button label, apply all pending updates the user has selected */
-								  _("_Install Updates"),
-								  /* TRANSLATORS: button tooltip */
-								  _("Install the selected updates"));
-	g_object_set (update_packages_action,
-		      "no-icon-name", GTK_STOCK_APPLY,
-		      "auth-icon-name", GTK_STOCK_APPLY,
-		      "yes-icon-name", GTK_STOCK_APPLY,
-		      "self-blocked-icon-name", GTK_STOCK_APPLY,
-		      NULL);
-	polkit_action_unref (pk_action);
+	/* install signature */
+	ret = pk_client_accept_eula (client_secondary, eula_id, &error);
+	if (!ret) {
+		egg_warning ("cannot accept eula: %s", error->message);
+		g_error_free (error);
+		/* we've ruined the old one by making the checkboxes insensitive */
+		gpk_update_viewer_get_new_update_list ();
+		goto out;
+	}
+out:
+	/* set state */
+	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+	model = gtk_tree_view_get_model (treeview);
+	gpk_update_viewer_reconsider_info (model);
+}
 
-	/* update-system */
-	pk_action = polkit_action_new ();
-	polkit_action_set_action_id (pk_action, "org.freedesktop.packagekit.system-update");
-	update_system_action = polkit_gnome_action_new_default ("update-system", pk_action,
-								/* TRANSLATORS: button label, update all packages pending */
-								_("_Update System"),
-								/* TRANSLATORS: button tooltip */
-								_("Install all updates"));
-	g_object_set (update_system_action,
-		      "no-icon-name", GTK_STOCK_APPLY,
-		      "auth-icon-name", GTK_STOCK_APPLY,
-		      "yes-icon-name", GTK_STOCK_APPLY,
-		      "self-blocked-icon-name", GTK_STOCK_APPLY,
-		      NULL);
-	polkit_action_unref (pk_action);
+/**
+ * gpk_update_viewer_repo_signature_required_cb:
+ **/
+static void
+gpk_update_viewer_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
+					      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+					      const gchar *key_fingerprint, const gchar *key_timestamp,
+					      PkSigTypeEnum type, gpointer data)
+{
+	/* use the helper */
+	gpk_helper_repo_signature_show (helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
 }
 
 /**
- * gpk_update_viewer_activated_cb
+ * pk_client_distro_upgrade_cb:
  **/
 static void
-gpk_update_viewer_activated_cb (EggUnique *egg_unique, gpointer data)
+pk_client_distro_upgrade_cb (PkClient *client, const PkDistroUpgradeObj *obj, gpointer data)
 {
+	gchar *text;
+	gchar *text_format;
 	GtkWidget *widget;
-	widget = glade_xml_get_widget (glade_xml, "window_updates");
-	gtk_window_present (GTK_WINDOW (widget));
+
+	if (obj->state != PK_UPDATE_STATE_ENUM_STABLE)
+		return;
+
+	/* only display last (newest) distro */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
+	/* TRANSLATORS: new distro available, e.g. F9 to F10 */
+	text = g_strdup_printf (_("New distribution upgrade release '%s' is available"), obj->summary);
+	text_format = g_strdup_printf ("<b>%s</b>", text);
+	gtk_label_set_label (GTK_LABEL (widget), text_format);
+	g_free (text);
+	g_free (text_format);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_upgrade"));
+	gtk_widget_show (widget);
+}
+
+/**
+ * gpk_update_viewer_textview_follow_link:
+ *
+ * Looks at all tags covering the position of iter in the text view,
+ * and if one of them is a link, follow it by showing the page identified
+ * by the data attached to it.
+ **/
+static void
+gpk_update_viewer_textview_follow_link (GtkWidget *text_view, GtkTextIter *iter)
+{
+	GSList *tags = NULL, *tagp = NULL;
+
+	tags = gtk_text_iter_get_tags (iter);
+	for (tagp = tags; tagp != NULL; tagp = tagp->next) {
+		GtkTextTag *tag = tagp->data;
+		const gchar *href = (const gchar *) (g_object_get_data (G_OBJECT (tag), "href"));
+		if (href != NULL)
+			gpk_gnome_open (href);
+	}
+
+	if (tags != NULL)
+		g_slist_free (tags);
+}
+
+/**
+ * gpk_update_viewer_textview_key_press_event:
+ *
+ * Links can be activated by pressing Enter
+ **/
+static gboolean
+gpk_update_viewer_textview_key_press_event (GtkWidget *text_view, GdkEventKey *event)
+{
+	GtkTextIter iter;
+	GtkTextBuffer *buffer;
+
+	switch (event->keyval) {
+		case GDK_Return:
+		case GDK_KP_Enter:
+			buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
+			gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_insert (buffer));
+			gpk_update_viewer_textview_follow_link (text_view, &iter);
+			break;
+		default:
+		break;
+	}
+
+	return FALSE;
+}
+
+/**
+ * gpk_update_viewer_textview_event_after:
+ *
+ * Links can also be activated by clicking
+ **/
+static gboolean
+gpk_update_viewer_textview_event_after (GtkWidget *text_view, GdkEvent *ev)
+{
+	GtkTextIter start, end, iter;
+	GtkTextBuffer *buffer;
+	GdkEventButton *event;
+	gint x, y;
+
+	if (ev->type != GDK_BUTTON_RELEASE)
+		return FALSE;
+
+	event = (GdkEventButton *)ev;
+	if (event->button != 1)
+		return FALSE;
+
+	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
+
+	/* we shouldn't follow a link if the user has selected something */
+	gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+	if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end))
+		return FALSE;
+
+	gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_WIDGET, event->x, event->y, &x, &y);
+	gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y);
+	gpk_update_viewer_textview_follow_link (text_view, &iter);
+
+	return FALSE;
+}
+
+/**
+ * gpk_update_viewer_textview_set_cursor:
+ *
+ * Looks at all tags covering the position (x, y) in the text view,
+ * and if one of them is a link, change the cursor to the "hands" cursor
+ * typically used by web browsers.
+ **/
+static void
+gpk_update_viewer_textview_set_cursor (GtkTextView *text_view, gint x, gint y)
+{
+	GSList *tags = NULL, *tagp = NULL;
+	GtkTextIter iter;
+	GdkCursor *cursor;
+	gboolean hovering = FALSE;
+	gboolean hovering_over_link = FALSE;
+
+	hovering_over_link = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT(text_view), "hovering"));
+	gtk_text_view_get_iter_at_location (text_view, &iter, x, y);
+
+	tags = gtk_text_iter_get_tags (&iter);
+	for (tagp = tags; tagp != NULL; tagp = tagp->next) {
+		GtkTextTag *tag = tagp->data;
+		const gchar *href = (const gchar *) g_object_get_data (G_OBJECT (tag), "href");
+		if (href != NULL) {
+			hovering = TRUE;
+			break;
+		}
+	}
+
+	/* already set same state */
+	if (hovering != hovering_over_link) {
+		g_object_set_data (G_OBJECT(text_view), "hovering", GUINT_TO_POINTER (hovering));
+		if (hovering)
+			cursor = gdk_cursor_new_for_display (gdk_display_get_default (), GDK_HAND2);
+		else
+			cursor = gdk_cursor_new_for_display (gdk_display_get_default (), GDK_XTERM);
+		gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), cursor);
+		gdk_cursor_unref (cursor);
+	}
+
+	if (tags != NULL)
+		g_slist_free (tags);
+}
+
+/**
+ * gpk_update_viewer_textview_motion_notify_event:
+ *
+ * Update the cursor image if the pointer moved.
+ **/
+static gboolean
+gpk_update_viewer_textview_motion_notify_event (GtkWidget *text_view, GdkEventMotion *event)
+{
+	gint x, y;
+
+	gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_WIDGET, event->x, event->y, &x, &y);
+	gpk_update_viewer_textview_set_cursor (GTK_TEXT_VIEW (text_view), x, y);
+	gdk_window_get_pointer (text_view->window, NULL, NULL, NULL);
+	return FALSE;
+}
+
+/**
+ * gpk_update_viewer_textview_visibility_notify_event:
+ *
+ * Also update the cursor image if the window becomes visible
+ * (e.g. when a window covering it got iconified).
+ **/
+static gboolean
+gpk_update_viewer_textview_visibility_notify_event (GtkWidget *text_view, GdkEventVisibility *event)
+{
+	gint wx, wy, bx, by;
+
+	gdk_window_get_pointer (text_view->window, &wx, &wy, NULL);
+	gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_WIDGET, wx, wy, &bx, &by);
+	gpk_update_viewer_textview_set_cursor (GTK_TEXT_VIEW (text_view), bx, by);
+	return FALSE;
+}
+
+/**
+ * gpk_update_viewer_updates_changed_cb:
+ **/
+static void
+gpk_update_viewer_updates_changed_cb (PkControl *_control, gpointer data)
+{
+	/* now try to get newest update list */
+	egg_debug ("updates changed");
+	gpk_update_viewer_get_new_update_list ();
+}
+
+/**
+ * gpk_update_viewer_vpaned_realized_cb:
+ **/
+static void
+gpk_update_viewer_vpaned_realized_cb (GtkWidget *widget, gpointer data)
+{
+	GtkRequisition req;
+	gtk_widget_size_request (widget, &req);
+	egg_debug ("req.height=%i", req.height);
+	if (req.height != 0)
+		gtk_paned_set_position (GTK_PANED (widget), 166);
 }
 
 /**
@@ -1846,8 +2375,9 @@
 	GtkTreeSelection *selection;
 	PkBitfield roles;
 	gboolean ret;
+	guint retval;
 	GError *error = NULL;
-	EggUnique *egg_unique;
+	UniqueApp *unique_app;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -1894,178 +2424,190 @@
 					   GPK_DATA G_DIR_SEPARATOR_S "icons");
 
 	/* are we already activated? */
-	egg_unique = egg_unique_new ();
-	ret = egg_unique_assign (egg_unique, "org.freedesktop.PackageKit.UpdateViewer");
-	if (!ret)
+	unique_app = unique_app_new ("org.freedesktop.PackageKit.UpdateViewer2", NULL);
+	if (unique_app_is_running (unique_app)) {
+		egg_debug ("You have another instance running. This program will now close");
+		unique_app_send_message (unique_app, UNIQUE_ACTIVATE, NULL);
 		goto unique_out;
+	}
 
-	g_signal_connect (egg_unique, "activated",
-			  G_CALLBACK (gpk_update_viewer_activated_cb), NULL);
-
-	/* we have to do this before we connect up the glade file */
-	gpk_update_viewer_setup_policykit ();
+	g_signal_connect (unique_app, "message-received", G_CALLBACK (gpk_update_viewer_message_received_cb), NULL);
 
 	markdown = egg_markdown_new ();
 	egg_markdown_set_output (markdown, EGG_MARKDOWN_OUTPUT_PANGO);
 	egg_markdown_set_escape (markdown, TRUE);
+	egg_markdown_set_autocode (markdown, TRUE);
 
 	control = pk_control_new ();
 	g_signal_connect (control, "repo-list-changed",
 			  G_CALLBACK (gpk_update_viewer_repo_list_changed_cb), NULL);
+	g_signal_connect (control, "updates-changed",
+			  G_CALLBACK (gpk_update_viewer_updates_changed_cb), NULL);
 
-	/* this is stuff we don't care about */
-	client_query = pk_client_new ();
-	pk_client_set_use_buffer (client_query, TRUE, NULL);
-	g_signal_connect (client_query, "package",
+	/* this is what we use mainly */
+	client_primary = pk_client_new ();
+	pk_client_set_use_buffer (client_primary, TRUE, NULL);
+	g_signal_connect (client_primary, "package",
 			  G_CALLBACK (gpk_update_viewer_package_cb), NULL);
-	g_signal_connect (client_query, "finished",
+	g_signal_connect (client_primary, "details",
+			  G_CALLBACK (gpk_update_viewer_details_cb), NULL);
+	g_signal_connect (client_primary, "finished",
 			  G_CALLBACK (gpk_update_viewer_finished_cb), NULL);
-	g_signal_connect (client_query, "progress-changed",
+	g_signal_connect (client_primary, "progress-changed",
 			  G_CALLBACK (gpk_update_viewer_progress_changed_cb), NULL);
-	g_signal_connect (client_query, "update-detail",
+	g_signal_connect (client_primary, "update-detail",
 			  G_CALLBACK (gpk_update_viewer_update_detail_cb), NULL);
-	g_signal_connect (client_query, "status-changed",
+	g_signal_connect (client_primary, "status-changed",
 			  G_CALLBACK (gpk_update_viewer_status_changed_cb), NULL);
-	g_signal_connect (client_query, "error-code",
+	g_signal_connect (client_primary, "error-code",
 			  G_CALLBACK (gpk_update_viewer_error_code_cb), NULL);
+	g_signal_connect (client_primary, "allow-cancel",
+			  G_CALLBACK (gpk_update_viewer_allow_cancel_cb), NULL);
+	g_signal_connect (client_primary, "repo-signature-required",
+			  G_CALLBACK (gpk_update_viewer_repo_signature_required_cb), NULL);
+	g_signal_connect (client_primary, "eula-required",
+			  G_CALLBACK (gpk_update_viewer_eula_required_cb), NULL);
+	g_signal_connect (client_primary, "distro-upgrade",
+			  G_CALLBACK (pk_client_distro_upgrade_cb), NULL);
+
+	/* this is for auth and eula callbacks */
+	client_secondary = pk_client_new ();
+	g_signal_connect (client_secondary, "error-code",
+			  G_CALLBACK (gpk_update_viewer_error_code_cb), NULL);
+	g_signal_connect (client_secondary, "finished",
+			  G_CALLBACK (gpk_update_viewer_finished_cb), NULL);
 
 	/* get actions */
 	roles = pk_control_get_actions (control, NULL);
 
-	/* monitor for other updates in progress */
-	tlist = pk_task_list_new ();
-
-	/* install stuff using the gnome helpers */
-	gclient = gpk_client_new ();
-
-	/* use custom widgets */
-	glade_set_custom_handler (gpk_update_viewer_create_custom_widget, NULL);
-
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-update-viewer.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (glade_xml, "window_updates");
-
-	/* make GpkClient windows modal */
-	gtk_widget_realize (main_window);
-	gpk_client_set_parent (gclient, GTK_WINDOW (main_window));
-
-	/* hide from finished page until we have updates */
-	widget = glade_xml_get_widget (glade_xml, "hbox_restart");
-	gtk_widget_hide (widget);
-
-	/* Get the main window quit */
-	g_signal_connect (main_window, "delete_event", G_CALLBACK (gpk_update_viewer_button_close), NULL);
-
-	/* button_close2 and button_close3 are on the overview/review
-	 * screens, where we want to cancel transactions when closing
-	 */
-	widget = glade_xml_get_widget (glade_xml, "button_close2");
-	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_update_viewer_button_close_and_cancel_cb), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_close3");
-	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_update_viewer_button_close_and_cancel_cb), NULL);
-
-	/* normal close buttons */
-	widget = glade_xml_get_widget (glade_xml, "button_close4");
-	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_update_viewer_button_close), NULL);
-
-	/* connect up PolicyKit actions */
-	g_signal_connect (refresh_action, "activate",
-			  G_CALLBACK (gpk_update_viewer_refresh_cb), NULL);
-	g_signal_connect (restart_action, "activate",
-			  G_CALLBACK (gpk_update_viewer_restart_cb), NULL);
-	g_signal_connect (update_packages_action, "activate",
-			  G_CALLBACK (gpk_update_viewer_apply_cb), NULL);
-	g_signal_connect (update_system_action, "activate",
-			  G_CALLBACK (gpk_update_viewer_update_system_cb), NULL);
-
-	widget = glade_xml_get_widget (glade_xml, "button_review");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (gpk_update_viewer_review_cb), NULL);
-	/* TRANSLATORS: tooltip on the review button */
-	gtk_widget_set_tooltip_text(widget, _("Review the update list"));
-
-	widget = glade_xml_get_widget (glade_xml, "button_overview");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (gpk_update_viewer_overview_cb), NULL);
-	/* TRANSLATORS: tooltip on the back button (from the detailed view) */
-	gtk_widget_set_tooltip_text(widget, _("Back to overview"));
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-update-viewer.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
-	widget = glade_xml_get_widget (glade_xml, "button_overview2");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_button_more_installs_cb), NULL);
-	/* TRANSLATORS: tooltip on the back button (from finished view) */
-	gtk_widget_set_tooltip_text (widget, _("Back to overview"));
+	main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_updates"));
+	g_signal_connect (main_window, "delete_event", G_CALLBACK (gpk_update_viewer_button_delete_event_cb), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "button_help");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_button_help_cb), (gpointer)"update-viewer");
+	/* helpers */
+	helper_repo_signature = gpk_helper_repo_signature_new ();
+	g_signal_connect (helper_repo_signature, "event", G_CALLBACK (gpk_update_viewer_repo_signature_event_cb), NULL);
+	gpk_helper_repo_signature_set_parent (helper_repo_signature, GTK_WINDOW (main_window));
 
-	widget = glade_xml_get_widget (glade_xml, "button_help2");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_button_help_cb), (gpointer)"update-viewer-details");
+	helper_eula = gpk_helper_eula_new ();
+	g_signal_connect (helper_eula, "event", G_CALLBACK (gpk_update_viewer_eula_event_cb), NULL);
+	gpk_helper_eula_set_parent (helper_eula, GTK_WINDOW (main_window));
 
 	/* create list stores */
-	list_store_details = gtk_list_store_new (PACKAGES_COLUMN_LAST, G_TYPE_STRING,
-						 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
-						 G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
-	list_store_preview = gtk_list_store_new (PREVIEW_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF);
-	list_store_description = gtk_list_store_new (DESC_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-
-	/* create preview tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_preview");
-	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
-				 GTK_TREE_MODEL (list_store_preview));
+	list_store_updates = gtk_list_store_new (GPK_UPDATES_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
+						 G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
+						 G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_POINTER, G_TYPE_POINTER);
+	text_buffer = gtk_text_buffer_new (NULL);
+	gtk_text_buffer_create_tag (text_buffer, "para",
+				    "pixels_above_lines", 5,
+				    "wrap-mode", GTK_WRAP_WORD,
+				    NULL);
+	gtk_text_buffer_create_tag (text_buffer, "important",
+				    "weight", PANGO_WEIGHT_BOLD,
+				    NULL);
 
-	/* add columns to the tree view */
-	gpk_update_viewer_treeview_add_columns (GTK_TREE_VIEW (widget));
-	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
+	/* no upgrades yet */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_upgrade"));
+	gtk_widget_hide (widget);
 
-	/* create description tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_description");
-	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
-				 GTK_TREE_MODEL (list_store_description));
+	/* description */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "textview_details"));
+	gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), text_buffer);
+	gtk_text_view_set_editable (GTK_TEXT_VIEW (widget), FALSE);
+	gtk_text_view_set_left_margin (GTK_TEXT_VIEW (widget), 5);
+	g_signal_connect (GTK_TEXT_VIEW (widget), "key-press-event", G_CALLBACK (gpk_update_viewer_textview_key_press_event), NULL);
+	g_signal_connect (GTK_TEXT_VIEW (widget), "event-after", G_CALLBACK (gpk_update_viewer_textview_event_after), NULL);
+	g_signal_connect (GTK_TEXT_VIEW (widget), "motion-notify-event", G_CALLBACK (gpk_update_viewer_textview_motion_notify_event), NULL);
+	g_signal_connect (GTK_TEXT_VIEW (widget), "visibility-notify-event", G_CALLBACK (gpk_update_viewer_textview_visibility_notify_event), NULL);
 
-	/* add columns to the tree view */
-	gpk_update_viewer_treeview_add_columns_description (GTK_TREE_VIEW (widget));
+	/* updates */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_updates"));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
-
-	/* create package tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_updates");
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
-				 GTK_TREE_MODEL (list_store_details));
+				 GTK_TREE_MODEL (list_store_updates));
+	gpk_update_viewer_treeview_add_columns_update (GTK_TREE_VIEW (widget));
 	g_signal_connect (widget, "popup-menu",
 			  G_CALLBACK (gpk_update_viewer_detail_popup_menu), NULL);
 	g_signal_connect (widget, "button-press-event",
 			  G_CALLBACK (gpk_update_viewer_detail_button_pressed), NULL);
 
+	/* selection */
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
 	gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
 	g_signal_connect (selection, "changed",
 			  G_CALLBACK (pk_packages_treeview_clicked_cb), NULL);
 
-	/* add columns to the tree view */
-	gpk_update_viewer_treeview_add_columns_update (GTK_TREE_VIEW (widget));
-	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
+	/* bottom UI */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_progress"));
+	gtk_widget_hide (widget);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_summary"));
+	gtk_widget_hide (widget);
+
+	/* help button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
+	g_signal_connect (widget, "clicked",
+			  G_CALLBACK (gpk_update_viewer_button_help_cb), (gpointer) "update-viewer");
 
-	/* make the buttons non-clickable until we get completion */
-	polkit_gnome_action_set_sensitive (update_system_action, FALSE);
-	polkit_gnome_action_set_sensitive (update_packages_action, FALSE);
-	widget = glade_xml_get_widget (glade_xml, "button_review");
+	/* set install button insensitive */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
 	gtk_widget_set_sensitive (widget, FALSE);
+	g_signal_connect (widget, "clicked",
+			  G_CALLBACK (gpk_update_viewer_button_install_cb), NULL);
+
+	/* sensitive */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow_updates"));
+	gtk_widget_set_sensitive (widget, FALSE);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow_details"));
+	gtk_widget_set_sensitive (widget, FALSE);
+
+	/* close button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
+	g_signal_connect (widget, "clicked",
+			  G_CALLBACK (gpk_update_viewer_button_close_cb), NULL);
+	gtk_window_set_focus (GTK_WINDOW(main_window), widget);
+
+	/* hide cancel button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_cancel"));
+	gtk_widget_hide (widget);
+	g_signal_connect (widget, "clicked",
+			  G_CALLBACK (gpk_update_viewer_button_cancel_cb), NULL);
+
+	/* upgrade button */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_upgrade"));
+	g_signal_connect (widget, "clicked",
+			  G_CALLBACK (gpk_update_viewer_button_upgrade_cb), NULL);
+
+	/* set a size, if the screen allows */
+	ret = gpk_window_set_size_request (GTK_WINDOW (main_window), 700, 600);
+	if (!ret) {
+		egg_debug ("small form factor mode");
+		/* hide the header in SFF mode */
+		widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_header"));
+		gtk_widget_hide (widget);
+	}
 
-	/* set the last updated text */
-	pk_update_viewer_set_last_refreshed_time ();
-	pk_update_viewer_set_last_updated_time ();
-
-	/* we need to grey out all the buttons if we are in progress */
-	g_signal_connect (tlist, "changed",
-			  G_CALLBACK (gpk_update_viewer_task_list_changed_cb), NULL);
-	gpk_update_viewer_task_list_changed_cb (tlist, NULL);
-	g_signal_connect (tlist, "finished",
-			  G_CALLBACK (gpk_update_viewer_task_list_finished_cb), NULL);
+	/* use correct status pane */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_status"));
+	gtk_widget_set_size_request (widget, -1, 32);
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_info"));
+	gtk_widget_set_size_request (widget, -1, 32);
 
 	/* show window */
 	gtk_widget_show (main_window);
 
+	/* set the paned to be in the middle */
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "vpaned_updates"));
+	g_signal_connect (widget, "realize",
+			  G_CALLBACK (gpk_update_viewer_vpaned_realized_cb), NULL);
+
 	/* coldplug */
 	gpk_update_viewer_get_new_update_list ();
 
@@ -2074,24 +2616,39 @@
 	g_main_loop_run (loop);
 
 	/* we might have visual stuff running, close it down */
-	ret = pk_client_cancel (client_query, &error);
+	ret = pk_client_cancel (client_primary, &error);
+	if (!ret) {
+		egg_warning ("failed to cancel client: %s", error->message);
+		g_clear_error (&error);
+	}
+
+	/* we might have visual stuff running, close it down */
+	ret = pk_client_cancel (client_secondary, &error);
 	if (!ret) {
 		egg_warning ("failed to cancel client: %s", error->message);
 		g_error_free (error);
 	}
 
 	g_main_loop_unref (loop);
-	g_object_unref (glade_xml);
-	g_object_unref (list_store_preview);
-	g_object_unref (list_store_description);
-	g_object_unref (list_store_details);
-	g_object_unref (gclient);
+
+	if (update_list != NULL)
+		g_object_unref (update_list);
+
+	g_object_unref (helper_eula);
+	g_object_unref (helper_repo_signature);
+	g_object_unref (builder);
+	g_object_unref (list_store_updates);
+	g_object_unref (text_buffer);
+	pk_package_id_free (package_id_last);
+out_build:
 	g_object_unref (control);
 	g_object_unref (markdown);
-	g_object_unref (client_query);
-	g_free (cached_package_id);
+	g_object_unref (client_primary);
+	g_object_unref (client_secondary);
+	g_object_unref (builder);
 unique_out:
-	g_object_unref (egg_unique);
+	g_object_unref (unique_app);
 
 	return 0;
 }
+

Modified: trunk/src/gpk-watch.c
==============================================================================
--- trunk/src/gpk-watch.c	(original)
+++ trunk/src/gpk-watch.c	Fri Apr  3 15:33:03 2009
@@ -35,7 +35,6 @@
 #include <glib/gi18n.h>
 
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <gconf/gconf-client.h>
 #include <libnotify/notify.h>
 #include <polkit-gnome/polkit-gnome.h>
@@ -821,7 +820,7 @@
 gpk_watch_menu_show_messages_cb (GtkMenuItem *item, gpointer data)
 {
 	GpkWatch *watch = GPK_WATCH (data);
-	GladeXML *glade_xml;
+	GtkBuilder *builder;
 	GtkWidget *main_window;
 	GtkWidget *widget;
 	GtkListStore *list_store;
@@ -831,9 +830,19 @@
 	GtkTreeModel *model;
 	guint i;
 	GpkWatchCachedMessage *cached_message;
+	guint retval;
+	GError *error = NULL;
+
+	/* get UI */
+	builder = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-repo.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+		goto out_build;
+	}
 
-	glade_xml = glade_xml_new (GPK_DATA "/gpk-repo.glade", NULL, NULL);
-	main_window = glade_xml_get_widget (glade_xml, "dialog_repo");
+	main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_repo"));
 	gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_LOG);
 	gtk_window_set_title (GTK_WINDOW (main_window), _("Package Manager Messages"));
 
@@ -843,19 +852,19 @@
 	/* Get the main window quit */
 	g_signal_connect_swapped (main_window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
 
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-	widget = glade_xml_get_widget (glade_xml, "button_help");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
 	gtk_widget_hide (widget);
 
-	widget = glade_xml_get_widget (glade_xml, "checkbutton_detail");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_detail"));
 	gtk_widget_hide (widget);
 
 	/* create list stores */
 	list_store = gtk_list_store_new (GPK_WATCH_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
 	/* create repo tree view */
-	widget = glade_xml_get_widget (glade_xml, "treeview_repo");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (list_store));
 
 	/* column for text */
@@ -900,7 +909,7 @@
 	gtk_widget_show (main_window);
 
 	/* focus back to the close button */
-	widget = glade_xml_get_widget (glade_xml, "button_close");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
 	gtk_widget_grab_focus (widget);
 
 	/* wait */
@@ -911,8 +920,9 @@
 	g_ptr_array_foreach (watch->priv->cached_messages, (GFunc) gpk_watch_cached_message_free, NULL);
 	g_ptr_array_set_size (watch->priv->cached_messages, 0);
 
-	g_object_unref (glade_xml);
 	g_object_unref (list_store);
+out_build:
+	g_object_unref (builder);
 
 	/* refresh UI */
 	gpk_watch_refresh_icon (watch);
@@ -1071,7 +1081,7 @@
 		show_hide = TRUE;
 	}
 
-	/* log off session */
+	/* log out session */
 	if (watch->priv->restart == PK_RESTART_ENUM_SESSION) {
 		widget = gtk_image_menu_item_new_with_mnemonic (_("_Log out"));
 		image = gtk_image_new_from_icon_name ("system-log-out", GTK_ICON_SIZE_MENU);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]