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
- From: rhughes svn gnome org
- To: svn-commits-list gnome org
- Subject: 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
- Date: Fri, 3 Apr 2009 15:33:03 +0000 (UTC)
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">●</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"><b>General</b></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"><b>Methods</b></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"><b>Filters</b></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"><b>Totem requires (Downloading)</b></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 <b>extra</b> 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"><b>Failed to install package</b></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"><b>More details</b></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"><b>License required for foo-devel by Acme Corp.</b></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"><b>Update Settings</b></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"><i>Currently using mobile broadband</i></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"><b>Display Notification</b></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"><b>Another system update is in progress</b></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"><b>Action</b></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"><b>Details</b></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"><b>Progress</b></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"><big><b>Do you trust the source of the packages?</b></big></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 <rpm livna org></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"><big><b>There are updates available</b></big></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"><b>New distribution upgrade release available</b></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"><b>Downloading:</b></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]