--- gnome-panel-2.14.1.orig/debian/patches/09_help_submenu.patch
+++ gnome-panel-2.14.1/debian/patches/09_help_submenu.patch
@@ -0,0 +1,46 @@
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-menu-items.c gnome-panel-2.14.1.new/gnome-panel/panel-menu-items.c
+--- gnome-panel-2.14.1/gnome-panel/panel-menu-items.c 2006-04-14 14:52:06.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-menu-items.c 2006-04-14 14:52:27.000000000 +0200
+@@ -721,6 +721,7 @@
+ {
+ gboolean add_separator;
+ GList *children;
++ GtkWidget *add_menu, *item;
+
+ if (!g_object_get_data (G_OBJECT (menu), "panel-menu-needs-appending"))
+ return;
+@@ -745,7 +746,33 @@
+ if (add_separator)
+ add_menu_separator (menu);
+
+- panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL);
++ item = gtk_image_menu_item_new ();
++ setup_menu_item_with_icon (item, panel_menu_icon_get_size (),
++ "stock_help-agent", NULL,
++ _("Help"), TRUE);
++
++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
++ gtk_widget_show (item);
++
++ add_menu = create_empty_menu ();
++ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), add_menu);
++
++ panel_menu_items_append_from_desktop (add_menu, "yelp.desktop", _("System Documentation"));
++
++ panel_menu_items_append_place_item ("gnome-globe",
++ _("Online Support"),
++ _("Online Support"),
++ add_menu,
++ G_CALLBACK (activate_uri),
++ "http://help.ubuntu.com");
++
++ panel_menu_items_append_place_item ("config-language",
++ _("Find Local Support"),
++ _("Find Local Support"),
++ add_menu,
++ G_CALLBACK (activate_uri),
++ "http://www.ubuntu.com/support/marketplace");
++
+ panel_menu_items_append_from_desktop (menu, "gnome-about.desktop", NULL);
+
+ if (g_file_test (DATADIR"/omf/about-ubuntu/about-ubuntu-C.omf",
--- gnome-panel-2.14.1.orig/debian/patches/08_default_clock_setting.patch
+++ gnome-panel-2.14.1/debian/patches/08_default_clock_setting.patch
@@ -0,0 +1,12 @@
+diff -Nur gnome-panel-2.13.91/applets/clock/clock.schemas.in gnome-panel-2.13.91.new/applets/clock/clock.schemas.in
+--- gnome-panel-2.13.91/applets/clock/clock.schemas.in 2005-12-30 12:13:11.000000000 +0100
++++ gnome-panel-2.13.91.new/applets/clock/clock.schemas.in 2006-03-02 18:58:37.000000000 +0100
+@@ -69,7 +69,7 @@
+ /schemas/apps/clock_applet/prefs/show_date
+ clock-applet
+ bool
+- false
++ true
+
+ Show date in clock
+ If true, display date in the clock, in addition to time.
--- gnome-panel-2.14.1.orig/debian/patches/07_use_beagle.patch
+++ gnome-panel-2.14.1/debian/patches/07_use_beagle.patch
@@ -0,0 +1,21 @@
+--- gnome-panel-2.13.90/gnome-panel/panel-menu-items.c.use-beagle 2006-02-13 13:26:43.000000000 -0500
++++ gnome-panel-2.13.90/gnome-panel/panel-menu-items.c 2006-02-13 13:28:08.000000000 -0500
+@@ -634,9 +634,15 @@
+
+ add_menu_separator (places_menu);
+
+- panel_menu_items_append_from_desktop (places_menu,
+- "gnome-search-tool.desktop",
+- NULL);
++ if (panel_is_program_in_path ("beagle-search")) {
++ panel_menu_items_append_from_desktop (places_menu,
++ "beagle-search.desktop",
++ NULL);
++ } else {
++ panel_menu_items_append_from_desktop (places_menu,
++ "gnome-search-tool.desktop",
++ NULL);
++ }
+
+ *recent_view = panel_recent_append_documents_menu (places_menu,
+ *recent_view);
--- gnome-panel-2.14.1.orig/debian/patches/11_applet_use_session_dialog.patch
+++ gnome-panel-2.14.1/debian/patches/11_applet_use_session_dialog.patch
@@ -0,0 +1,67 @@
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-action-button.c gnome-panel-2.14.1.new/gnome-panel/panel-action-button.c
+--- gnome-panel-2.14.1/gnome-panel/panel-action-button.c 2006-02-12 13:36:56.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-action-button.c 2006-04-14 15:58:55.000000000 +0200
+@@ -153,9 +153,15 @@
+ static void
+ panel_action_logout (GtkWidget *widget)
+ {
+- panel_logout_new (PANEL_LOGOUT_DIALOG_LOGOUT,
+- gtk_widget_get_screen (widget),
+- gtk_get_current_event_time ());
++ const char *key;
++
++ if (!gconf_client_get_bool (panel_gconf_get_client (), "/apps/panel/global/upstream_session", NULL))
++ panel_session_request_logout ();
++ else {
++ panel_logout_new (PANEL_LOGOUT_DIALOG_LOGOUT,
++ gtk_widget_get_screen (widget),
++ gtk_get_current_event_time ());
++ }
+ }
+
+ static void
+@@ -169,7 +175,8 @@
+ static gboolean
+ panel_action_shutdown_is_disabled (void)
+ {
+- return (panel_lockdown_get_disable_log_out() ||
++ return (!gconf_client_get_bool (panel_gconf_get_client (), "/apps/panel/global/upstream_session", NULL) ||
++ panel_lockdown_get_disable_log_out() ||
+ !gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN));
+ }
+
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-global.schemas.in gnome-panel-2.14.1.new/gnome-panel/panel-global.schemas.in
+--- gnome-panel-2.14.1/gnome-panel/panel-global.schemas.in 2005-06-06 22:18:18.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-global.schemas.in 2006-04-14 15:58:23.000000000 +0200
+@@ -195,6 +195,19 @@
+
+
+
++ /schemas/apps/panel/global/upstream_session
++ /apps/panel/global/upstream_session
++ panel
++ bool
++ false
++
++ Use the upstream session dialogs instead of the Ubuntu one
++ If true, the panel will use the upstream dialogs instead of the Ubuntu one
++
++
++
++
++
+ /schemas/apps/panel/global/locked_down
+ /apps/panel/global/locked_down
+ panel
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-session.c gnome-panel-2.14.1.new/gnome-panel/panel-session.c
+--- gnome-panel-2.14.1/gnome-panel/panel-session.c 2006-01-16 18:42:06.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-session.c 2006-04-14 15:58:23.000000000 +0200
+@@ -54,7 +54,7 @@
+ GNOME_SAVE_GLOBAL,
+ TRUE,
+ GNOME_INTERACT_ANY,
+- TRUE, /* do not use the gnome-session gui */
++ gconf_client_get_bool (panel_gconf_get_client (), "/apps/panel/global/upstream_session", NULL), /* use the gnome-session gui */
+ TRUE);
+
+ recursion_guard--;
--- gnome-panel-2.14.1.orig/debian/patches/12_autoconf.patch
+++ gnome-panel-2.14.1/debian/patches/12_autoconf.patch
@@ -0,0 +1,1447 @@
+diff -Nur gnome-panel-2.13.91/configure gnome-panel-2.13.91.new/configure
+--- gnome-panel-2.13.91/configure 2006-02-13 20:57:34.000000000 +0100
++++ gnome-panel-2.13.91.new/configure 2006-02-14 13:26:33.000000000 +0100
+@@ -1249,7 +1249,7 @@
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+- cd $ac_popdir
++ cd "$ac_popdir"
+ done
+ fi
+
+@@ -3051,8 +3051,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3110,8 +3109,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3227,8 +3225,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3282,8 +3279,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3328,8 +3324,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3373,8 +3368,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3561,8 +3555,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3616,8 +3609,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4016,8 +4008,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4075,8 +4066,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4192,8 +4182,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4247,8 +4236,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4293,8 +4281,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4338,8 +4325,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4770,8 +4756,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -5495,7 +5480,7 @@
+ ;;
+ *-*-irix6*)
+ # Find out which ABI we are using.
+- echo '#line 5498 "configure"' > conftest.$ac_ext
++ echo '#line 5483 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -5615,8 +5600,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -5937,8 +5921,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6005,8 +5988,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6266,8 +6248,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6325,8 +6306,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6397,8 +6377,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6442,8 +6421,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6915,7 +6893,7 @@
+
+
+ # Provide some information about the compiler.
+-echo "$as_me:6918:" \
++echo "$as_me:6896:" \
+ "checking for Fortran 77 compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5
+@@ -6961,8 +6939,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -7011,8 +6988,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -8013,11 +7989,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8016: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:7992: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:8020: \$? = $ac_status" >&5
++ echo "$as_me:7996: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -8275,11 +8251,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8278: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8254: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:8282: \$? = $ac_status" >&5
++ echo "$as_me:8258: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -8337,11 +8313,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8340: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8316: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:8344: \$? = $ac_status" >&5
++ echo "$as_me:8320: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -8765,8 +8741,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -8826,8 +8801,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9723,7 +9697,7 @@
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+- echo '#line 9726 "configure"' > conftest.$ac_ext
++ echo '#line 9700 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -10058,8 +10032,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10162,8 +10135,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10228,8 +10200,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10322,8 +10293,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10388,8 +10358,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10455,8 +10424,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10522,8 +10490,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -10598,7 +10565,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext < conftest.$ac_ext <&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -11827,8 +11793,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -12944,11 +12909,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:12947: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:12912: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:12951: \$? = $ac_status" >&5
++ echo "$as_me:12916: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -13006,11 +12971,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:13009: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:12974: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:13013: \$? = $ac_status" >&5
++ echo "$as_me:12978: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -13521,7 +13486,7 @@
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+- echo '#line 13524 "configure"' > conftest.$ac_ext
++ echo '#line 13489 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -13856,8 +13821,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -13960,8 +13924,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14026,8 +13989,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14120,8 +14082,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14186,8 +14147,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14253,8 +14213,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14320,8 +14279,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14396,7 +14354,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext < conftest.$ac_ext <&5)
++ (eval echo "\"\$as_me:15340: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:15386: \$? = $ac_status" >&5
++ echo "$as_me:15344: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -15441,11 +15399,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:15444: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:15402: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:15448: \$? = $ac_status" >&5
++ echo "$as_me:15406: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -15859,8 +15817,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -15910,8 +15867,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -16807,7 +16763,7 @@
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+- echo '#line 16810 "configure"' > conftest.$ac_ext
++ echo '#line 16766 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -17584,11 +17540,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:17587: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:17543: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:17591: \$? = $ac_status" >&5
++ echo "$as_me:17547: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -17846,11 +17802,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:17849: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:17805: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:17853: \$? = $ac_status" >&5
++ echo "$as_me:17809: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -17908,11 +17864,11 @@
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:17911: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:17867: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:17915: \$? = $ac_status" >&5
++ echo "$as_me:17871: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -18336,8 +18292,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -18397,8 +18352,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -19294,7 +19248,7 @@
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+- echo '#line 19297 "configure"' > conftest.$ac_ext
++ echo '#line 19251 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -19629,8 +19583,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -19733,8 +19686,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -19799,8 +19751,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -19893,8 +19844,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -19959,8 +19909,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20026,8 +19975,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20093,8 +20041,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20169,7 +20116,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext < conftest.$ac_ext <&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21676,12 +21622,12 @@
+
+ if test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"ORBit-2.0 >= \$ORBIT_REQUIRED gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= \$GNOME_VFS_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gconf-2.0 >= \$GCONF_REQUIRED libgnome-menu >= \$LIBGNOME_MENU_REQUIRED\"") >&5
+- ($PKG_CONFIG --exists --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED") 2>&5
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"ORBit-2.0 >= \$ORBIT_REQUIRED gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= \$GNOME_VFS_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gconf-2.0 >= \$GCONF_REQUIRED libgnome-menu >= \$LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration\"") >&5
++ ($PKG_CONFIG --exists --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- pkg_cv_PANEL_CFLAGS=`$PKG_CONFIG --cflags "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED" 2>/dev/null`
++ pkg_cv_PANEL_CFLAGS=`$PKG_CONFIG --cflags "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration" 2>/dev/null`
+ else
+ pkg_failed=yes
+ fi
+@@ -21690,12 +21636,12 @@
+ fi
+ if test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"ORBit-2.0 >= \$ORBIT_REQUIRED gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= \$GNOME_VFS_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gconf-2.0 >= \$GCONF_REQUIRED libgnome-menu >= \$LIBGNOME_MENU_REQUIRED\"") >&5
+- ($PKG_CONFIG --exists --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED") 2>&5
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"ORBit-2.0 >= \$ORBIT_REQUIRED gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= \$GNOME_VFS_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gconf-2.0 >= \$GCONF_REQUIRED libgnome-menu >= \$LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration\"") >&5
++ ($PKG_CONFIG --exists --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- pkg_cv_PANEL_LIBS=`$PKG_CONFIG --libs "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED" 2>/dev/null`
++ pkg_cv_PANEL_LIBS=`$PKG_CONFIG --libs "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration" 2>/dev/null`
+ else
+ pkg_failed=yes
+ fi
+@@ -21704,18 +21650,18 @@
+ fi
+
+ if test $pkg_failed = yes; then
+- PANEL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED"`
++ PANEL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration"`
+ # Put the nasty error message in config.log where it belongs
+ echo "$PANEL_PKG_ERRORS" 1>&5
+
+- { { echo "$as_me:$LINENO: error: Package requirements (ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED) were not met.
++ { { echo "$as_me:$LINENO: error: Package requirements (ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration) were not met.
+ Consider adjusting the PKG_CONFIG_PATH environment variable if you
+ installed software in a non-standard prefix.
+
+ Alternatively you may set the PANEL_CFLAGS and PANEL_LIBS environment variables
+ to avoid the need to call pkg-config. See the pkg-config man page for
+ more details." >&5
+-echo "$as_me: error: Package requirements (ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED) were not met.
++echo "$as_me: error: Package requirements (ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration) were not met.
+ Consider adjusting the PKG_CONFIG_PATH environment variable if you
+ installed software in a non-standard prefix.
+
+@@ -21848,12 +21794,12 @@
+
+ if test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libwnck-1.0 >= \$LIBWNCK_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED\"") >&5
+- ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED") 2>&5
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libwnck-1.0 >= \$LIBWNCK_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration\"") >&5
++ ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- pkg_cv_WNCKLET_CFLAGS=`$PKG_CONFIG --cflags "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED" 2>/dev/null`
++ pkg_cv_WNCKLET_CFLAGS=`$PKG_CONFIG --cflags "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration" 2>/dev/null`
+ else
+ pkg_failed=yes
+ fi
+@@ -21862,12 +21808,12 @@
+ fi
+ if test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libwnck-1.0 >= \$LIBWNCK_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED\"") >&5
+- ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED") 2>&5
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= \$GDK_PIXBUF_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libwnck-1.0 >= \$LIBWNCK_REQUIRED libglade-2.0 >= \$LIBGLADE_REQUIRED gnome-desktop-2.0 >= \$LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration\"") >&5
++ ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- pkg_cv_WNCKLET_LIBS=`$PKG_CONFIG --libs "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED" 2>/dev/null`
++ pkg_cv_WNCKLET_LIBS=`$PKG_CONFIG --libs "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration" 2>/dev/null`
+ else
+ pkg_failed=yes
+ fi
+@@ -21876,18 +21822,18 @@
+ fi
+
+ if test $pkg_failed = yes; then
+- WNCKLET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED"`
++ WNCKLET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration"`
+ # Put the nasty error message in config.log where it belongs
+ echo "$WNCKLET_PKG_ERRORS" 1>&5
+
+- { { echo "$as_me:$LINENO: error: Package requirements (gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED) were not met.
++ { { echo "$as_me:$LINENO: error: Package requirements (gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration) were not met.
+ Consider adjusting the PKG_CONFIG_PATH environment variable if you
+ installed software in a non-standard prefix.
+
+ Alternatively you may set the WNCKLET_CFLAGS and WNCKLET_LIBS environment variables
+ to avoid the need to call pkg-config. See the pkg-config man page for
+ more details." >&5
+-echo "$as_me: error: Package requirements (gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED) were not met.
++echo "$as_me: error: Package requirements (gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration) were not met.
+ Consider adjusting the PKG_CONFIG_PATH environment variable if you
+ installed software in a non-standard prefix.
+
+@@ -22182,8 +22128,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22255,8 +22200,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22310,8 +22254,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22382,8 +22325,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22437,8 +22379,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22517,8 +22458,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22624,8 +22564,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22678,9 +22617,12 @@
+ esac
+
+ if test $pango_omitted_x_deps = yes ; then
++
++if test "x$ac_path_x_has_been_run" != xyes; then
+ echo "$as_me:$LINENO: checking for X" >&5
+ echo $ECHO_N "checking for X... $ECHO_C" >&6
+
++ac_path_x_has_been_run=yes
+
+ # Check whether --with-x or --without-x was given.
+ if test "${with_x+set}" = set; then
+@@ -22773,7 +22715,7 @@
+ /usr/openwin/share/include'
+
+ if test "$ac_x_includes" = no; then
+- # Guess where to find include files, by looking for Intrinsic.h.
++ # Guess where to find include files, by looking for a specified header file.
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -22781,7 +22723,7 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-#include
++#include
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+@@ -22808,7 +22750,7 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ for ac_dir in $ac_x_header_dirs; do
+- if test -r "$ac_dir/X11/Intrinsic.h"; then
++ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+@@ -22822,18 +22764,18 @@
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+- LIBS="-lXt $LIBS"
++ LIBS="-lX11 $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-#include
++#include
+ int
+ main ()
+ {
+-XtMalloc (0)
++XrmInitialize ()
+ ;
+ return 0;
+ }
+@@ -22847,8 +22789,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22872,7 +22813,7 @@
+ do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+- if test -r $ac_dir/libXt.$ac_extension; then
++ if test -r $ac_dir/libX11.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+@@ -22908,10 +22849,15 @@
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+- echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
++ # It might be that x_includes is empty (headers are found in the
++ # standard search path. Then output the corresponding message
++ ac_out_x_includes=$x_includes
++ test "x$x_includes" = x && ac_out_x_includes="in standard search path"
++ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
++echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
+ fi
+
++fi
+ if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+@@ -22959,8 +22905,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23011,8 +22956,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23088,8 +23032,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23144,8 +23087,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23213,8 +23155,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23322,8 +23263,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23387,8 +23327,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23456,8 +23395,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23561,8 +23499,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23626,8 +23563,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23724,8 +23660,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23789,8 +23724,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23887,8 +23821,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23952,8 +23885,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24032,8 +23964,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24133,8 +24064,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24279,8 +24209,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24351,8 +24280,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24496,8 +24424,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24555,8 +24482,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24653,8 +24579,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24733,8 +24658,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24798,8 +24722,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24863,8 +24786,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24941,8 +24863,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25006,8 +24927,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25123,8 +25043,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25291,8 +25210,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25425,8 +25343,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25511,8 +25428,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -27217,11 +27133,6 @@
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+- if test x"$ac_file" != x-; then
+- { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+- rm -f "$ac_file"
+- fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+@@ -27260,6 +27171,12 @@
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
++
++ if test x"$ac_file" != x-; then
++ { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++ rm -f "$ac_file"
++ fi
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+diff -Nur gnome-panel-2.13.91/gnome-panel/Makefile.in gnome-panel-2.13.91.new/gnome-panel/Makefile.in
+--- gnome-panel-2.13.91/gnome-panel/Makefile.in 2006-02-13 20:57:37.000000000 +0100
++++ gnome-panel-2.13.91.new/gnome-panel/Makefile.in 2006-02-14 13:26:27.000000000 +0100
+@@ -91,7 +91,9 @@
+ panel-multiscreen.$(OBJEXT) panel-a11y.$(OBJEXT) \
+ panel-bindings.$(OBJEXT) panel-profile.$(OBJEXT) \
+ panel-force-quit.$(OBJEXT) panel-lockdown.$(OBJEXT) \
+- panel-addto.$(OBJEXT) panel-logout.$(OBJEXT) \
++ panel-addto.$(OBJEXT) panel-addto-canvas.$(OBJEXT) \
++ panel-addto-rounded-rect.$(OBJEXT) \
++ panel-addto-event-box.$(OBJEXT) panel-logout.$(OBJEXT) \
+ panel-gdm.$(OBJEXT) $(am__objects_4) $(am__objects_1)
+ am__objects_6 = $(am__objects_1) $(am__objects_1)
+ am_gnome_panel_OBJECTS = $(am__objects_2) $(am__objects_3) \
+@@ -428,6 +430,9 @@
+ panel-force-quit.c \
+ panel-lockdown.c \
+ panel-addto.c \
++ panel-addto-canvas.c \
++ panel-addto-rounded-rect.c \
++ panel-addto-event-box.c \
+ panel-logout.c \
+ panel-gdm.c \
+ $(EGG_RECENT_FILES_C) \
+@@ -476,6 +481,10 @@
+ panel-force-quit.h \
+ panel-lockdown.h \
+ panel-addto.h \
++ panel-addto-canvas.h \
++ panel-addto-rounded-rect.h \
++ panel-addto-rounded-rect-pixbuf.h \
++ panel-addto-event-box.h \
+ panel-logout.h \
+ panel-gdm.h \
+ $(EGG_RECENT_FILES_H) \
+@@ -649,6 +658,9 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-a11y.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-action-button.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-action-protocol.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-addto-canvas.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-addto-event-box.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-addto-rounded-rect.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-addto.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-applet-frame.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel-background-monitor.Po@am__quote@
--- gnome-panel-2.14.1.orig/debian/patches/01_distrologo.patch
+++ gnome-panel-2.14.1/debian/patches/01_distrologo.patch
@@ -0,0 +1,124 @@
+Index: panel-addto.c
+===================================================================
+RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-addto.c,v
+retrieving revision 1.38
+diff -u -p -r1.38 panel-addto.c
+--- panel-addto.c 22 Jul 2005 07:36:55 -0000 1.38
++++ gnome-panel/panel-addto.c 28 Sep 2005 20:49:56 -0000
+@@ -203,6 +203,15 @@ panel_addto_prepend_internal_applets (GS
+ internal_addto_items [i].description = _(internal_addto_items [i].description);
+ }
+
++ if (internal_addto_items [i].type == PANEL_ADDTO_MENU ||
++ internal_addto_items [i].type == PANEL_ADDTO_MENUBAR) {
++ const char *logo;
++
++ logo = panel_get_distributor_logo ();
++ if (logo != NULL)
++ internal_addto_items [i].icon = logo;
++ }
++
+ list = g_slist_prepend (list, &internal_addto_items [i]);
+ }
+
+Index: panel-menu-bar.c
+===================================================================
+RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-menu-bar.c,v
+retrieving revision 1.65
+diff -u -p -r1.65 panel-menu-bar.c
+--- panel-menu-bar.c 4 Aug 2005 07:08:24 -0000 1.65
++++ gnome-panel/panel-menu-bar.c 28 Sep 2005 20:49:56 -0000
+@@ -69,6 +69,7 @@ panel_menu_bar_instance_init (PanelMenuB
+ PanelMenuBarClass *klass)
+ {
+ GtkWidget *image;
++ const char *logo;
+
+ menubar->priv = PANEL_MENU_BAR_GET_PRIVATE (menubar);
+
+@@ -77,8 +78,15 @@ panel_menu_bar_instance_init (PanelMenuB
+ menubar->priv->applications_menu = create_applications_menu ("applications.menu", NULL);
+
+ menubar->priv->applications_item = gtk_image_menu_item_new_with_label (_("Applications"));
+- image = gtk_image_new_from_icon_name (PANEL_GNOME_LOGO_ICON,
+- panel_menu_bar_icon_get_size ());
++
++ logo = panel_get_distributor_logo ();
++ if (logo != NULL)
++ image = gtk_image_new_from_icon_name (logo,
++ panel_menu_bar_icon_get_size ());
++ else
++ image = gtk_image_new_from_icon_name (PANEL_GNOME_LOGO_ICON,
++ panel_menu_bar_icon_get_size ());
++
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menubar->priv->applications_item),
+ image);
+
+Index: panel-menu-button.c
+===================================================================
+RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-menu-button.c,v
+retrieving revision 1.45
+diff -u -p -r1.45 panel-menu-button.c
+--- panel-menu-button.c 18 Sep 2005 07:29:05 -0000 1.45
++++ gnome-panel/panel-menu-button.c 28 Sep 2005 20:49:57 -0000
+@@ -736,8 +736,15 @@ panel_menu_button_get_icon (PanelMenuBut
+ retval = g_strdup (gmenu_tree_directory_get_icon (directory));
+ }
+
+- if (!retval)
+- retval = g_strdup (PANEL_MAIN_MENU_ICON);
++ if (!retval) {
++ const char *logo;
++
++ logo = panel_get_distributor_logo ();
++ if (logo != NULL)
++ retval = g_strdup (logo);
++ else
++ retval = g_strdup (PANEL_MAIN_MENU_ICON);
++ }
+
+ return retval;
+ }
+Index: panel-util.c
+===================================================================
+RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-util.c,v
+retrieving revision 1.159
+diff -u -p -r1.159 panel-util.c
+--- panel-util.c 2 Aug 2005 10:10:49 -0000 1.159
++++ gnome-panel/panel-util.c 28 Sep 2005 20:49:57 -0000
+@@ -872,3 +872,19 @@ panel_lookup_in_data_dirs (const char *b
+
+ return NULL;
+ }
++
++#define PANEL_DISTRIBUTOR_LOGO_ICON "distributor-logo"
++const char *
++panel_get_distributor_logo (void)
++{
++ int desired_width, desired_height;
++
++ if (gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG,
++ &desired_width, &desired_height) &&
++ panel_find_icon (gtk_icon_theme_get_default (),
++ PANEL_DISTRIBUTOR_LOGO_ICON,
++ desired_height))
++ return PANEL_DISTRIBUTOR_LOGO_ICON;
++ else
++ return NULL;
++}
+Index: panel-util.h
+===================================================================
+RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-util.h,v
+retrieving revision 1.89
+diff -u -p -r1.89 panel-util.h
+--- panel-util.h 2 Aug 2005 10:10:49 -0000 1.89
++++ gnome-panel/panel-util.h 28 Sep 2005 20:49:57 -0000
+@@ -84,6 +84,8 @@ char *panel_make_unique_uri (const char
+ const char *suffix);
+ char *panel_lookup_in_data_dirs (const char *basename);
+
++const char *panel_get_distributor_logo (void);
++
+ G_END_DECLS
+
+ #endif /* PANEL_UTIL_H */
--- gnome-panel-2.14.1.orig/debian/patches/04_default_panel_config.patch
+++ gnome-panel-2.14.1/debian/patches/04_default_panel_config.patch
@@ -0,0 +1,269 @@
+diff -Nur gnome-panel-2.13.91/gnome-panel/panel-default-setup.entries gnome-panel-2.13.91.new/gnome-panel/panel-default-setup.entries
+--- gnome-panel-2.13.91/gnome-panel/panel-default-setup.entries 2006-01-22 12:34:03.000000000 +0100
++++ gnome-panel-2.13.91.new/gnome-panel/panel-default-setup.entries 2006-02-16 16:22:10.000000000 +0100
+@@ -35,6 +35,9 @@
+
+ email_launcher
+
++
++ session_dialog
++
+
+
+
+@@ -47,9 +50,6 @@
+
+
+
+- window_menu
+-
+-
+ mixer
+
+
+@@ -67,6 +67,9 @@
+
+ workspace_switcher
+
++
++ trashapplet
++
+
+
+
+@@ -252,7 +255,7 @@
+ objects/browser_launcher/launcher_location
+ /schemas/apps/panel/objects/launcher_location
+
+- epiphany.desktop
++ firefox.desktop
+
+
+
+@@ -306,7 +309,7 @@
+ objects/email_launcher/launcher_location
+ /schemas/apps/panel/objects/launcher_location
+
+- evolution.desktop
++ evolution-mail.desktop
+
+
+
+@@ -319,61 +322,7 @@
+ objects/email_launcher/menu_path/schemas/apps/panel/objects/menu_path
+ objects/email_launcher/action_type/schemas/apps/panel/objects/action_type
+
+-
+-
+-
+- applets/window_menu/object_type
+- /schemas/apps/panel/objects/object_type
+-
+- bonobo-applet
+-
+-
+-
+- applets/window_menu/toplevel_id
+- /schemas/apps/panel/objects/toplevel_id
+-
+- top_panel
+-
+-
+-
+- applets/window_menu/position
+- /schemas/apps/panel/objects/position
+-
+- 0
+-
+-
+-
+- applets/window_menu/panel_right_stick
+- /schemas/apps/panel/objects/panel_right_stick
+-
+- true
+-
+-
+-
+- applets/window_menu/locked
+- /schemas/apps/panel/objects/locked
+-
+- true
+-
+-
+-
+- applets/window_menu/bonobo_iid
+- /schemas/apps/panel/objects/bonobo_iid
+-
+- OAFIID:GNOME_WindowMenuApplet
+-
+-
+-
+- applets/window_menu/attached_toplevel_id/schemas/apps/panel/objects/attached_toplevel_id
+- applets/window_menu/tooltip/schemas/apps/panel/objects/tooltip
+- applets/window_menu/use_custom_icon/schemas/apps/panel/objects/use_custom_icon
+- applets/window_menu/custom_icon/schemas/apps/panel/objects/custom_icon
+- applets/window_menu/use_menu_path/schemas/apps/panel/objects/use_menu_path
+- applets/window_menu/menu_path/schemas/apps/panel/objects/menu_path
+- applets/window_menu/launcher_location/schemas/apps/panel/objects/launcher_location
+- applets/window_menu/action_type/schemas/apps/panel/objects/action_type
+-
+-
++
+
+
+ applets/mixer/object_type
+@@ -393,7 +342,7 @@
+ applets/mixer/position
+ /schemas/apps/panel/objects/position
+
+- 1
++ 2
+
+
+
+@@ -447,7 +396,7 @@
+ applets/clock/position
+ /schemas/apps/panel/objects/position
+
+- 2
++ 1
+
+
+
+@@ -589,6 +538,67 @@
+ applets/show_desktop_button/launcher_location/schemas/apps/panel/objects/launcher_location
+ applets/show_desktop_button/action_type/schemas/apps/panel/objects/action_type
+
++
++
++
++ objects/session_dialog/object_type
++ /schemas/apps/panel/objects/object_type
++
++ action-applet
++
++
++
++ objects/session_dialog/toplevel_id
++ /schemas/apps/panel/objects/toplevel_id
++
++ top_panel
++
++
++
++ objects/session_dialog/position
++ /schemas/apps/panel/objects/position
++
++ 0
++
++
++
++ objects/session_dialog/panel_right_stick
++ /schemas/apps/panel/objects/panel_right_stick
++
++ true
++
++
++
++ objects/session_dialog/locked
++ /schemas/apps/panel/objects/locked
++
++ true
++
++
++
++ objects/session_dialog/action_type
++ /schemas/apps/panel/objects/action_type
++
++ logout
++
++
++
++ objects/session_dialog/launcher_location
++ /schemas/apps/panel/objects/launcher_location
++
++
++
++
++
++ objects/session_dialog/bonobo_iid/schemas/apps/panel/objects/bonobo_iid
++ objects/session_dialog/attached_toplevel_id/schemas/apps/panel/objects/attached_toplevel_id
++ objects/session_dialog/tooltip/schemas/apps/panel/objects/tooltip
++ objects/session_dialog/use_custom_icon/schemas/apps/panel/objects/use_custom_icon
++ objects/session_dialog/custom_icon/schemas/apps/panel/objects/custom_icon
++ objects/session_dialog/use_menu_path/schemas/apps/panel/objects/use_menu_path
++ objects/session_dialog/menu_path/schemas/apps/panel/objects/menu_path
++ objects/session_dialog/action_type/schemas/apps/panel/objects/action_type
++
+
+
+
+@@ -663,7 +673,7 @@
+ applets/workspace_switcher/position
+ /schemas/apps/panel/objects/position
+
+- 0
++ 1
+
+
+
+@@ -697,6 +707,59 @@
+ applets/workspace_switcher/launcher_location/schemas/apps/panel/objects/launcher_location
+ applets/workspace_switcher/action_type/schemas/apps/panel/objects/action_type
+
++
++
++
++ applets/trashapplet/object_type
++ /schemas/apps/panel/objects/object_type
++
++ bonobo-applet
++
++
++
++ applets/trashapplet/toplevel_id
++ /schemas/apps/panel/objects/toplevel_id
++
++ bottom_panel
++
++
++
++ applets/trashapplet/position
++ /schemas/apps/panel/objects/position
++
++ 0
++
++
++
++ applets/trashapplet/panel_right_stick
++ /schemas/apps/panel/objects/panel_right_stick
++
++ true
++
++
++
++ applets/trashapplet/locked
++ /schemas/apps/panel/objects/locked
++
++ true
++
++
++
++ applets/trashapplet/bonobo_iid
++ /schemas/apps/panel/objects/bonobo_iid
++
++ OAFIID:GNOME_Panel_TrashApplet
++
++
++
++ applets/trashapplet/attached_toplevel_id/schemas/apps/panel/objects/attached_toplevel_id
++ applets/trashapplet/tooltip/schemas/apps/panel/objects/tooltip
++ applets/trashapplet/use_custom_icon/schemas/apps/panel/objects/use_custom_icon
++ applets/trashapplet/custom_icon/schemas/apps/panel/objects/custom_icon
++ applets/trashapplet/use_menu_path/schemas/apps/panel/objects/use_menu_path
++ applets/trashapplet/menu_path/schemas/apps/panel/objects/menu_path
++ applets/trashapplet/launcher_location/schemas/apps/panel/objects/launcher_location
++
+
+
+
--- gnome-panel-2.14.1.orig/debian/patches/01_layout.patch
+++ gnome-panel-2.14.1/debian/patches/01_layout.patch
@@ -0,0 +1,52 @@
+=== modified file 'gnome-panel/panel-menu-items.c'
+--- gnome-panel/panel-menu-items.c
++++ gnome-panel/panel-menu-items.c
+@@ -521,6 +521,7 @@
+ GtkWidget *places_menu;
+ GtkWidget *item;
+ char *gconf_name;
++ char *path;
+
+ places_menu = panel_create_menu ();
+
+@@ -532,6 +533,16 @@
+ gconf_name);
+ if (gconf_name)
+ g_free (gconf_name);
++
++ path = g_build_filename (g_get_home_dir (), "Documents", NULL);
++ if (g_file_test (path, G_FILE_TEST_IS_DIR))
++ panel_menu_items_append_place_item ("gnome-fs-directory",
++ _("Documents"),
++ _("Documents directory"),
++ places_menu,
++ G_CALLBACK (activate_uri),
++ "Documents");
++ g_free (path);
+
+ if (!gconf_client_get_bool (panel_gconf_get_client (),
+ DESKTOP_IS_HOME_DIR_KEY,
+@@ -666,6 +677,10 @@
+ panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL);
+ panel_menu_items_append_from_desktop (menu, "gnome-about.desktop", NULL);
+
++ if (g_file_test (DATADIR"/omf/about-ubuntu/about-ubuntu-C.omf",
++ G_FILE_TEST_IS_REGULAR))
++ panel_menu_items_append_from_desktop (menu, "ubuntu-about.desktop", NULL);
++
+ if (parent->priv->append_lock_logout)
+ panel_menu_items_append_lock_logout (menu);
+ }
+@@ -932,10 +947,7 @@
+
+ menuitem = g_object_new (PANEL_TYPE_DESKTOP_MENU_ITEM, NULL);
+
+- /* Translators: Desktop is used here as in "Desktop Environment" (this
+- * is not the Desktop folder). Do not keep "Desktop Environment|" in
+- * the translation. */
+- accel_label = gtk_accel_label_new (Q_("Desktop Environment|Desktop"));
++ accel_label = gtk_accel_label_new (_("System"));
+ gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
+
+ gtk_container_add (GTK_CONTAINER (menuitem), accel_label);
+
--- gnome-panel-2.14.1.orig/debian/patches/09_lpi_src.patch
+++ gnome-panel-2.14.1/debian/patches/09_lpi_src.patch
@@ -0,0 +1,181 @@
+diff -Nur gnome-panel-2.13.3.orig/applets/notification_area/GNOME_NotificationAreaApplet.xml gnome-panel-2.13.3/applets/notification_area/GNOME_NotificationAreaApplet.xml
+--- gnome-panel-2.13.3.orig/applets/notification_area/GNOME_NotificationAreaApplet.xml 2004-06-11 12:53:16.000000000 +0200
++++ gnome-panel-2.13.3/applets/notification_area/GNOME_NotificationAreaApplet.xml 2005-12-13 12:24:31.000000000 +0100
+@@ -3,6 +3,9 @@
+
+
++
++
++
+
+
+diff -Nur gnome-panel-2.13.3.orig/applets/notification_area/main.c gnome-panel-2.13.3/applets/notification_area/main.c
+--- gnome-panel-2.13.3.orig/applets/notification_area/main.c 2005-02-26 15:42:49.000000000 +0100
++++ gnome-panel-2.13.3/applets/notification_area/main.c 2005-12-13 12:24:31.000000000 +0100
+@@ -43,6 +43,7 @@
+ #ifndef N_
+ #define N_(x) x
+ #endif
++#include
+
+ static EggTrayManager *tray_manager = NULL;
+ static GSList *all_trays = NULL;
+@@ -304,6 +305,7 @@
+ {
+ SystemTray *tray;
+ AtkObject *atko;
++ BonoboUIComponent* popup_component;
+
+ if (!(strcmp (iid, "OAFIID:GNOME_NotificationAreaApplet") == 0 ||
+ strcmp (iid, "OAFIID:GNOME_SystemTrayApplet") == 0))
+@@ -393,6 +395,10 @@
+ NULL,
+ menu_verbs,
+ tray);
++
++ popup_component = panel_applet_get_popup_component (applet);
++
++ launchpad_integration_add_bonobo_ui(popup_component, "/popups/button3/LaunchpadItems");
+
+ return TRUE;
+ }
+diff -Nur gnome-panel-2.13.3.orig/applets/wncklet/GNOME_ShowDesktopApplet.xml gnome-panel-2.13.3/applets/wncklet/GNOME_ShowDesktopApplet.xml
+--- gnome-panel-2.13.3.orig/applets/wncklet/GNOME_ShowDesktopApplet.xml 2004-06-11 12:53:17.000000000 +0200
++++ gnome-panel-2.13.3/applets/wncklet/GNOME_ShowDesktopApplet.xml 2005-12-13 12:24:31.000000000 +0100
+@@ -3,6 +3,9 @@
+
+
++
++
++
+
+
+diff -Nur gnome-panel-2.13.3.orig/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml gnome-panel-2.13.3/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml
+--- gnome-panel-2.13.3.orig/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml 2004-06-11 12:53:17.000000000 +0200
++++ gnome-panel-2.13.3/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml 2005-12-13 12:24:31.000000000 +0100
+@@ -5,6 +5,9 @@
+ pixtype="stock" pixname="gtk-properties"/>
+
++
++
++
+
+
+diff -Nur gnome-panel-2.13.3.orig/applets/wncklet/showdesktop.c gnome-panel-2.13.3/applets/wncklet/showdesktop.c
+--- gnome-panel-2.13.3.orig/applets/wncklet/showdesktop.c 2005-02-02 21:23:53.000000000 +0100
++++ gnome-panel-2.13.3/applets/wncklet/showdesktop.c 2005-12-13 12:24:31.000000000 +0100
+@@ -43,6 +43,7 @@
+ #include
+
+ #define TIMEOUT_ACTIVATE 1000
++#include
+
+
+ typedef struct {
+@@ -398,6 +399,7 @@
+ {
+ ShowDesktopData *sdd;
+ AtkObject *atk_obj;
++ BonoboUIComponent* popup_component;
+
+ panel_applet_set_flags (applet, PANEL_APPLET_EXPAND_MINOR);
+
+@@ -478,6 +480,10 @@
+ G_CALLBACK (button_drag_leave),
+ sdd);
+
++ popup_component = panel_applet_get_popup_component (sdd->applet);
++
++ launchpad_integration_add_bonobo_ui(popup_component, "/popups/button3/LaunchpadItems");
++
+ gtk_widget_show_all (sdd->applet);
+
+ return TRUE;
+diff -Nur gnome-panel-2.13.3.orig/applets/wncklet/workspace-switcher.c gnome-panel-2.13.3/applets/wncklet/workspace-switcher.c
+--- gnome-panel-2.13.3.orig/applets/wncklet/workspace-switcher.c 2005-02-21 09:21:03.000000000 +0100
++++ gnome-panel-2.13.3/applets/wncklet/workspace-switcher.c 2005-12-13 12:24:31.000000000 +0100
+@@ -38,6 +38,7 @@
+ #define NEVER_SENSITIVE "never_sensitive"
+ #define NUM_WORKSPACES "/apps/metacity/general/num_workspaces"
+ #define WORKSPACE_NAME "/apps/metacity/workspace_names/name_1"
++#include
+
+ typedef struct {
+ GtkWidget *applet;
+@@ -412,6 +413,7 @@
+ PagerData *pager;
+ GError *error;
+ gboolean display_names;
++ BonoboUIComponent* popup_component;
+
+ panel_applet_add_preferences (applet, "/schemas/apps/workspace_switcher_applet/prefs", NULL);
+
+@@ -524,6 +526,11 @@
+ NULL);
+ }
+
++ popup_component = panel_applet_get_popup_component (PANEL_APPLET (pager->applet));
++
++ launchpad_integration_add_bonobo_ui(popup_component, "/popups/button3/LaunchpadItems");
++
++
+ return TRUE;
+ }
+
+diff -Nur gnome-panel-2.13.3.orig/configure.in gnome-panel-2.13.3/configure.in
+--- gnome-panel-2.13.3.orig/configure.in 2005-12-12 19:28:20.000000000 +0100
++++ gnome-panel-2.13.3/configure.in 2005-12-13 12:25:12.000000000 +0100
+@@ -61,7 +61,7 @@
+
+ dnl pkg-config dependency checks
+
+-PKG_CHECK_MODULES(PANEL, ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED)
++PKG_CHECK_MODULES(PANEL, ORBit-2.0 >= $ORBIT_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gconf-2.0 >= $GCONF_REQUIRED libgnome-menu >= $LIBGNOME_MENU_REQUIRED lpint-bonobo launchpad-integration)
+ AC_SUBST(PANEL_CFLAGS)
+ AC_SUBST(PANEL_LIBS)
+
+@@ -69,7 +69,7 @@
+ AC_SUBST(LIBPANEL_APPLET_CFLAGS)
+ AC_SUBST(LIBPANEL_APPLET_LIBS)
+
+-PKG_CHECK_MODULES(WNCKLET, gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED)
++PKG_CHECK_MODULES(WNCKLET, gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libwnck-1.0 >= $LIBWNCK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED lpint-bonobo launchpad-integration)
+ AC_SUBST(WNCKLET_CFLAGS)
+ AC_SUBST(WNCKLET_LIBS)
+
+diff -Nur gnome-panel-2.13.3.orig/gnome-panel/panel-context-menu.c gnome-panel-2.13.3/gnome-panel/panel-context-menu.c
+--- gnome-panel-2.13.3.orig/gnome-panel/panel-context-menu.c 2005-10-22 09:06:03.000000000 +0200
++++ gnome-panel-2.13.3/gnome-panel/panel-context-menu.c 2005-12-13 12:24:31.000000000 +0100
+@@ -44,6 +44,7 @@
+ #include "panel-properties-dialog.h"
+ #include "panel-lockdown.h"
+ #include "panel-addto.h"
++#include
+
+ static void
+ panel_context_menu_show_help (GtkWidget *w,
+@@ -218,7 +219,7 @@
+ _("_Delete This Panel"));
+ }
+
+-static void
++static void
+ make_panel_submenu (PanelWidget *panel_widget,
+ GtkWidget *menu)
+ {
+@@ -284,6 +285,9 @@
+ panel_profile_id_lists_are_writable ());
+
+ add_menu_separator (menu);
++
++ launchpad_integration_add_items (menu,-1,TRUE,FALSE);
++
+ }
+
+ GtkWidget *
--- gnome-panel-2.14.1.orig/debian/patches/05_submenus.patch
+++ gnome-panel-2.14.1/debian/patches/05_submenus.patch
@@ -0,0 +1,142 @@
+diff -Nur gnome-panel-2.11.3.orig/gnome-panel/menu.c gnome-panel-2.11.3/gnome-panel/menu.c
+--- gnome-panel-2.11.3.orig/gnome-panel/menu.c 2005-06-06 21:54:00.000000000 +0200
++++ gnome-panel-2.11.3/gnome-panel/menu.c 2005-06-27 15:21:40.770711424 +0200
+@@ -1386,7 +1386,7 @@
+ return menuitem;
+ }
+
+-static void
++void
+ create_submenu (GtkWidget *menu,
+ GMenuTreeDirectory *directory,
+ GMenuTreeDirectory *alias_directory)
+diff -Nur gnome-panel-2.11.3.orig/gnome-panel/menu.h gnome-panel-2.11.3/gnome-panel/menu.h
+--- gnome-panel-2.11.3.orig/gnome-panel/menu.h 2005-04-11 16:58:41.000000000 +0200
++++ gnome-panel-2.11.3/gnome-panel/menu.h 2005-06-27 15:21:40.770711424 +0200
+@@ -67,6 +67,9 @@
+ gboolean menu_dummy_button_press_event (GtkWidget *menuitem,
+ GdkEventButton *event);
+
++void create_submenu (GtkWidget *menu,
++ GMenuTreeDirectory *directory,
++ GMenuTreeDirectory *alias_directory);
+
+ G_END_DECLS
+
+diff -Nur gnome-panel-2.11.3.orig/gnome-panel/panel-menu-items.c gnome-panel-2.11.3/gnome-panel/panel-menu-items.c
+--- gnome-panel-2.11.3.orig/gnome-panel/panel-menu-items.c 2005-06-06 23:51:27.000000000 +0200
++++ gnome-panel-2.11.3/gnome-panel/panel-menu-items.c 2005-06-27 15:25:37.614705664 +0200
+@@ -75,6 +75,8 @@
+ GtkWidget *menu;
+ PanelWidget *panel;
+
++ GMenuTree *tree;
++
+ guint use_image : 1;
+ guint append_lock_logout : 1;
+ };
+@@ -84,6 +86,8 @@
+
+ static GnomeVFSVolumeMonitor *volume_monitor = NULL;
+
++static void panel_desktop_menu_item_recreate_menu (PanelDesktopMenuItem *desktop_item);
++
+ static void
+ activate_uri (GtkWidget *menuitem,
+ char *path)
+@@ -607,16 +611,63 @@
+ panel_menu_items_append_lock_logout (menu);
+ }
+
++static void
++handle_menu_tree_changed (GMenuTree *tree,
++ PanelDesktopMenuItem *desktop_item)
++{
++ panel_desktop_menu_item_recreate_menu (desktop_item);
++}
++
+ static GtkWidget *
+ panel_desktop_menu_item_create_menu (PanelDesktopMenuItem *desktop_item)
+ {
+ GtkWidget *desktop_menu;
++ GMenuTreeDirectory *directory;
++
++ desktop_menu = create_empty_menu ();
++
++ /*
++ g_object_set_data_full (G_OBJECT (desktop_menu),
++ "panel-menu-tree-filename",
++ g_strdup ("settings.menu"),
++ (GDestroyNotify) g_free);
++
++ g_object_set_data_full (G_OBJECT (desktop_menu),
++ "panel-menu-tree",
++ menu_tree_ref (tree),
++ (GDestroyNotify) menu_tree_unref);
++
++ g_object_set_data_full (G_OBJECT (desktop_menu),
++ "panel-menu-tree-path",
++ g_strdup ("/"),
++ (GDestroyNotify) g_free);
++
++ g_object_set_data (G_OBJECT (desktop_menu),
++ "panel-menu-needs-loading",
++ GUINT_TO_POINTER (TRUE));
++ */
+
+- desktop_menu = create_applications_menu ("settings.menu", NULL);
++ g_object_set_data (G_OBJECT (desktop_menu),
++ "panel-menu-needs-appending",
++ GUINT_TO_POINTER (TRUE));
+
+- g_signal_connect (desktop_menu, "show",
+- G_CALLBACK (panel_desktop_menu_item_append_menu),
+- desktop_item);
++ directory = gmenu_tree_get_directory_from_path (desktop_item->priv->tree,
++ "/Preferences");
++
++ if (directory) {
++ create_submenu (desktop_menu, directory, NULL);
++ gmenu_tree_item_unref (directory);
++ }
++
++ directory = gmenu_tree_get_directory_from_path (desktop_item->priv->tree,
++ "/Administration");
++
++ if (directory) {
++ create_submenu (desktop_menu, directory, NULL);
++ gmenu_tree_item_unref (directory);
++ }
++
++ panel_desktop_menu_item_append_menu (desktop_menu, desktop_item);
+
+ return desktop_menu;
+ }
+@@ -674,6 +725,14 @@
+ panel_lockdown_notify_remove (G_CALLBACK (panel_desktop_menu_item_recreate_menu),
+ menuitem);
+ desktop_parent_class->finalize (object);
++
++ if (menuitem->priv->tree) {
++ gmenu_tree_remove_monitor (menuitem->priv->tree,
++ (GMenuTreeChangedFunc) handle_menu_tree_changed,
++ menuitem);
++ gmenu_tree_unref (menuitem->priv->tree);
++ }
++ menuitem->priv->tree = NULL;
+ }
+
+ static void
+@@ -736,6 +795,12 @@
+ PanelDesktopMenuItemClass *klass)
+ {
+ menuitem->priv = PANEL_DESKTOP_MENU_ITEM_GET_PRIVATE (menuitem);
++
++ menuitem->priv->tree = gmenu_tree_lookup ("settings.menu", GMENU_TREE_FLAGS_NONE);
++
++ gmenu_tree_add_monitor (menuitem->priv->tree,
++ (GMenuTreeChangedFunc) handle_menu_tree_changed,
++ menuitem);
+ }
+
+ static void
--- gnome-panel-2.14.1.orig/debian/patches/05_missing_includes.patch
+++ gnome-panel-2.14.1/debian/patches/05_missing_includes.patch
@@ -0,0 +1,21 @@
+diff -urN gnome-panel-2.10.1.orig/applets/clock/clock.c gnome-panel-2.10.1/applets/clock/clock.c
+--- gnome-panel-2.10.1.orig/applets/clock/clock.c 2005-03-07 07:15:15.000000000 -0700
++++ gnome-panel-2.10.1/applets/clock/clock.c 2005-06-17 13:44:44.149885607 -0600
+@@ -41,6 +41,7 @@
+
+ #include "config.h"
+
++#include
+ #include
+ #include
+ #include
+diff -urN gnome-panel-2.10.1.orig/gnome-panel/panel.c gnome-panel-2.10.1/gnome-panel/panel.c
+--- gnome-panel-2.10.1.orig/gnome-panel/panel.c 2005-03-31 13:05:04.000000000 -0700
++++ gnome-panel-2.10.1/gnome-panel/panel.c 2005-06-17 13:43:21.107894436 -0600
+@@ -23,6 +23,7 @@
+ #include
+ #include
+ #include
++#include
+
+ #include "panel.h"
--- gnome-panel-2.14.1.orig/debian/patches/07_time_cmd.patch
+++ gnome-panel-2.14.1/debian/patches/07_time_cmd.patch
@@ -0,0 +1,12 @@
+diff -Nur gnome-panel-2.11.90.orig/applets/clock/clock.c gnome-panel-2.11.90/applets/clock/clock.c
+--- gnome-panel-2.11.90.orig/applets/clock/clock.c 2005-07-21 11:05:49.000000000 +0200
++++ gnome-panel-2.11.90/applets/clock/clock.c 2005-07-26 13:14:08.000000000 +0200
+@@ -83,7 +83,7 @@
+ "system-config-date",
+ "redhat-config-date",
+ "/sbin/yast2 timezone",
+- "time-admin",
++ "/usr/bin/gksudo time-admin",
+ };
+
+ /* Needs to match the indices in the combo */
--- gnome-panel-2.14.1.orig/debian/patches/06_applets_category.patch
+++ gnome-panel-2.14.1/debian/patches/06_applets_category.patch
@@ -0,0 +1,68 @@
+diff -Nur gnome-panel-2.11.92.orig/applets/clock/GNOME_ClockApplet_Factory.server.in.in gnome-panel-2.11.92/applets/clock/GNOME_ClockApplet_Factory.server.in.in
+--- gnome-panel-2.11.92.orig/applets/clock/GNOME_ClockApplet_Factory.server.in.in 2004-11-11 09:16:43.000000000 +0100
++++ gnome-panel-2.11.92/applets/clock/GNOME_ClockApplet_Factory.server.in.in 2005-08-27 00:09:58.000000000 +0200
+@@ -24,6 +24,7 @@
+
+
+
++
+
+
+
+diff -Nur gnome-panel-2.11.92.orig/applets/fish/GNOME_FishApplet_Factory.server.in.in gnome-panel-2.11.92/applets/fish/GNOME_FishApplet_Factory.server.in.in
+--- gnome-panel-2.11.92.orig/applets/fish/GNOME_FishApplet_Factory.server.in.in 2004-08-09 14:28:10.000000000 +0200
++++ gnome-panel-2.11.92/applets/fish/GNOME_FishApplet_Factory.server.in.in 2005-08-27 00:10:10.000000000 +0200
+@@ -24,6 +24,7 @@
+
+
+
++
+
+
+
+diff -Nur gnome-panel-2.11.92.orig/applets/notification_area/GNOME_NotificationAreaApplet.server.in.in gnome-panel-2.11.92/applets/notification_area/GNOME_NotificationAreaApplet.server.in.in
+--- gnome-panel-2.11.92.orig/applets/notification_area/GNOME_NotificationAreaApplet.server.in.in 2004-08-09 14:28:10.000000000 +0200
++++ gnome-panel-2.11.92/applets/notification_area/GNOME_NotificationAreaApplet.server.in.in 2005-08-27 00:09:58.000000000 +0200
+@@ -24,6 +24,7 @@
+
+
+
++
+
+
+
+diff -Nur gnome-panel-2.11.92.orig/applets/wncklet/GNOME_Wncklet_Factory.server.in.in gnome-panel-2.11.92/applets/wncklet/GNOME_Wncklet_Factory.server.in.in
+--- gnome-panel-2.11.92.orig/applets/wncklet/GNOME_Wncklet_Factory.server.in.in 2005-06-07 00:23:19.000000000 +0200
++++ gnome-panel-2.11.92/applets/wncklet/GNOME_Wncklet_Factory.server.in.in 2005-08-27 00:10:10.000000000 +0200
+@@ -25,6 +25,7 @@
+
+
+
++
+
+
+
+@@ -62,6 +63,7 @@
+
+
+
++
+
+
+
+@@ -98,6 +100,7 @@
+
+
+
++
+
+
+
+@@ -117,6 +120,7 @@
+
+
+
++
+
+
+
--- gnome-panel-2.14.1.orig/debian/patches/09_default_icons.patch
+++ gnome-panel-2.14.1/debian/patches/09_default_icons.patch
@@ -0,0 +1,24 @@
+diff -Nur gnome-panel-2.11.1.orig/gnome-panel/menu.c gnome-panel-2.11.1/gnome-panel/menu.c
+--- gnome-panel-2.11.1.orig/gnome-panel/menu.c 2005-04-27 11:56:04.000000000 +0200
++++ gnome-panel-2.11.1/gnome-panel/menu.c 2005-05-19 19:59:02.220319600 +0200
+@@ -1360,7 +1360,7 @@
+ NULL,
+ alias_directory ? gmenu_tree_directory_get_icon (alias_directory) :
+ gmenu_tree_entry_get_icon (entry),
+- NULL);
++ PANEL_STOCK_DEFAULT_ICON);
+
+ setup_menuitem (menuitem,
+ panel_menu_icon_get_size (),
+diff -Nur gnome-panel-2.11.1.orig/gnome-panel/panel-stock-icons.h gnome-panel-2.11.1/gnome-panel/panel-stock-icons.h
+--- gnome-panel-2.11.1.orig/gnome-panel/panel-stock-icons.h 2005-02-02 08:49:08.000000000 +0100
++++ gnome-panel-2.11.1/gnome-panel/panel-stock-icons.h 2005-05-19 19:56:16.416525608 +0200
+@@ -43,6 +43,8 @@
+ #define PANEL_STOCK_EXECUTE "panel-execute"
+ #define PANEL_STOCK_CLEAR "panel-clear"
+ #define PANEL_STOCK_DONT_DELETE "panel-dont-delete"
++/* FIXME: put a more representative icon here */
++#define PANEL_STOCK_DEFAULT_ICON "application-default-icon"
+
+ void panel_init_stock_icons_and_items (void);
+ GtkIconSize panel_menu_icon_get_size (void);
--- gnome-panel-2.14.1.orig/debian/patches/10_defaulteditor.patch
+++ gnome-panel-2.14.1/debian/patches/10_defaulteditor.patch
@@ -0,0 +1,54 @@
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-menu-bar.c gnome-panel-2.14.1.new/gnome-panel/panel-menu-bar.c
+--- gnome-panel-2.14.1/gnome-panel/panel-menu-bar.c 2006-04-14 15:31:19.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-menu-bar.c 2006-04-14 15:31:20.000000000 +0200
+@@ -469,10 +469,19 @@
+ } else if (!strcmp (callback_name, "edit")) {
+ GError *error = NULL;
+
+- panel_launch_desktop_file ("gmenu-simple-editor.desktop",
+- "gmenu-simple-editor",
+- screen,
+- &error);
++ if (panel_is_program_in_path ("alacarte")) {
++ panel_launch_desktop_file ("alacarte.desktop",
++ "alacarte",
++ screen,
++ &error);
++ }
++ else {
++ panel_launch_desktop_file ("gmenu-simple-editor.desktop",
++ "gmenu-simple-editor",
++ screen,
++ &error);
++ }
++
+ if (error) {
+ panel_error_dialog (screen,
+ "cannot_exec_gmenu-simple-editor", TRUE,
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-menu-button.c gnome-panel-2.14.1.new/gnome-panel/panel-menu-button.c
+--- gnome-panel-2.14.1/gnome-panel/panel-menu-button.c 2006-04-14 15:31:19.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-menu-button.c 2006-04-14 15:31:20.000000000 +0200
+@@ -1004,10 +1004,19 @@
+ } else if (!strcmp (callback_name, "edit")) {
+ GError *error = NULL;
+
+- panel_launch_desktop_file ("gmenu-simple-editor.desktop",
+- "gmenu-simple-editor",
+- screen,
+- &error);
++ if (panel_is_program_in_path ("alacarte")) {
++ panel_launch_desktop_file ("alacarte.desktop",
++ "alacarte",
++ screen,
++ &error);
++ }
++ else {
++ panel_launch_desktop_file ("gmenu-simple-editor.desktop",
++ "gmenu-simple-editor",
++ screen,
++ &error);
++ }
++
+ if (error) {
+ panel_error_dialog (screen,
+ "cannot_exec_gmenu-simple-editor", TRUE,
--- gnome-panel-2.14.1.orig/debian/patches/11_panel_addto_dialog.patch
+++ gnome-panel-2.14.1/debian/patches/11_panel_addto_dialog.patch
@@ -0,0 +1,7916 @@
+diff -Nur gnome-panel-2.14.1/gnome-panel/Makefile.am gnome-panel-2.14.1.new/gnome-panel/Makefile.am
+--- gnome-panel-2.14.1/gnome-panel/Makefile.am 2006-02-12 20:07:03.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/Makefile.am 2006-04-16 22:07:22.000000000 +0200
+@@ -114,6 +114,9 @@
+ panel-force-quit.c \
+ panel-lockdown.c \
+ panel-addto.c \
++ panel-addto-canvas.c \
++ panel-addto-rounded-rect.c \
++ panel-addto-event-box.c \
+ panel-logout.c \
+ panel-gdm.c \
+ $(EGG_RECENT_FILES_C) \
+@@ -162,6 +165,10 @@
+ panel-force-quit.h \
+ panel-lockdown.h \
+ panel-addto.h \
++ panel-addto-canvas.h \
++ panel-addto-rounded-rect.h \
++ panel-addto-rounded-rect-pixbuf.h \
++ panel-addto-event-box.h \
+ panel-logout.h \
+ panel-gdm.h \
+ $(EGG_RECENT_FILES_H) \
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-action-button.c gnome-panel-2.14.1.new/gnome-panel/panel-action-button.c
+--- gnome-panel-2.14.1/gnome-panel/panel-action-button.c 2006-04-16 22:07:21.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-action-button.c 2006-04-16 22:07:22.000000000 +0200
+@@ -274,6 +274,8 @@
+ PanelActionButtonType type;
+ char *icon_name;
+ char *text;
++ char *category;
++ char *english_category;
+ char *tooltip;
+ char *help_index;
+ char *drag_id;
+@@ -296,6 +298,8 @@
+ PANEL_ACTION_LOCK,
+ "gnome-lockscreen",
+ N_("Lock Screen"),
++ N_("Desktop & Windows"),
++ "Desktop & Windows",
+ N_("Protect your computer from unauthorized use"),
+ "gospanel-21",
+ "ACTION:lock:NEW",
+@@ -311,6 +315,8 @@
+ * update the ones in panel-menu-items.c (look for
+ * panel:showusername|1) */
+ N_("Log Out..."),
++ N_("Desktop & Windows"),
++ "Desktop & Windows",
+ N_("Log out of this session to log in as a different user"),
+ "gospanel-20",
+ "ACTION:logout:NEW",
+@@ -321,6 +327,8 @@
+ PANEL_ACTION_RUN,
+ PANEL_RUN_ICON,
+ N_("Run Application..."),
++ N_("Utilities"),
++ "Utilities",
+ N_("Run an Application by entering a command"),
+ "gospanel-555",
+ "ACTION:run:NEW",
+@@ -331,6 +339,8 @@
+ PANEL_ACTION_SEARCH,
+ "gnome-searchtool",
+ N_("Search for Files..."),
++ N_("Utilities"),
++ "Utilities",
+ N_("Find files, folders, and documents on your computer"),
+ "gospanel-554",
+ "ACTION:search:NEW",
+@@ -340,6 +350,8 @@
+ PANEL_ACTION_FORCE_QUIT,
+ PANEL_FORCE_QUIT_ICON,
+ N_("Force Quit"),
++ N_("Desktop & Windows"),
++ "Desktop & Windows",
+ N_("Force a misbehaving application to quit"),
+ "gospanel-563",
+ "ACTION:force-quit:NEW",
+@@ -350,6 +362,8 @@
+ PANEL_ACTION_CONNECT_SERVER,
+ "gnome-globe", //FIXME icon
+ N_("Connect to Server..."),
++ N_("Utilities"),
++ "Utilities",
+ N_("Connect to a remote server"), //FIXME
+ "gospanel-563", //FIXME
+ "ACTION:connect-server:NEW",
+@@ -359,6 +373,8 @@
+ PANEL_ACTION_SHUTDOWN,
+ "gnome-shutdown",
+ N_("Shut Down..."),
++ N_("Utilities"),
++ "Utilities",
+ N_("Shut down the computer"),
+ "gospanel-20",
+ "ACTION:shutdown:NEW",
+@@ -422,6 +438,22 @@
+ }
+
+ G_CONST_RETURN char*
++panel_action_get_category (PanelActionButtonType type)
++{
++ g_return_val_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST, NULL);
++
++ return _(actions[type].category);
++}
++
++G_CONST_RETURN char*
++panel_action_get_english_category (PanelActionButtonType type)
++{
++ g_return_val_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST, NULL);
++
++ return actions[type].english_category;
++}
++
++G_CONST_RETURN char*
+ panel_action_get_tooltip (PanelActionButtonType type)
+ {
+ g_return_val_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST, NULL);
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-action-button.h gnome-panel-2.14.1.new/gnome-panel/panel-action-button.h
+--- gnome-panel-2.14.1/gnome-panel/panel-action-button.h 2005-01-29 21:39:01.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-action-button.h 2006-04-16 22:07:22.000000000 +0200
+@@ -87,12 +87,14 @@
+ const char *drag_string,
+ int *old_applet_idx);
+
+-gboolean panel_action_get_is_disabled (PanelActionButtonType type);
+-GCallback panel_action_get_invoke (PanelActionButtonType type);
+-G_CONST_RETURN char *panel_action_get_icon_name (PanelActionButtonType type);
+-G_CONST_RETURN char *panel_action_get_text (PanelActionButtonType type);
+-G_CONST_RETURN char *panel_action_get_tooltip (PanelActionButtonType type);
+-G_CONST_RETURN char *panel_action_get_drag_id (PanelActionButtonType type);
++gboolean panel_action_get_is_disabled (PanelActionButtonType type);
++GCallback panel_action_get_invoke (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_icon_name (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_text (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_category (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_english_category (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_tooltip (PanelActionButtonType type);
++G_CONST_RETURN char *panel_action_get_drag_id (PanelActionButtonType type);
+
+ G_END_DECLS
+
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto.c gnome-panel-2.14.1.new/gnome-panel/panel-addto.c
+--- gnome-panel-2.14.1/gnome-panel/panel-addto.c 2006-04-16 22:07:20.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto.c 2006-04-16 22:08:17.000000000 +0200
+@@ -26,117 +26,52 @@
+ #include
+
+ #include
++#include
+
+-#include "menu.h"
+-
+-#include "launcher.h"
+-#include "panel.h"
+-#include "drawer.h"
+-#include "panel-applet-frame.h"
+-#include "panel-action-button.h"
+-#include "panel-menu-bar.h"
+-#include "panel-separator.h"
+-#include "panel-toplevel.h"
+-#include "panel-menu-button.h"
+-#include "panel-globals.h"
+-#include "panel-lockdown.h"
+-#include "panel-util.h"
+-#include "panel-profile.h"
+ #include "panel-addto.h"
++#include "panel-addto-canvas.h"
+
+-typedef struct {
+- PanelWidget *panel_widget;
+-
+- GtkWidget *addto_dialog;
+- GtkWidget *label;
+- GtkWidget *search_entry;
+- GtkWidget *back_button;
+- GtkWidget *add_button;
+- GtkWidget *tree_view;
+- GtkTreeModel *applet_model;
+- GtkTreeModel *filter_applet_model;
+- GtkTreeModel *application_model;
+- GtkTreeModel *filter_application_model;
+-
+- GMenuTree *menu_tree;
+-
+- GSList *applet_list;
+- GSList *application_list;
+- GSList *settings_list;
+-
+- gchar *search_text;
+- gchar *applet_search_text;
+-
+- guint name_notify;
+-
+- int insertion_position;
+-} PanelAddtoDialog;
+-
++#define PANEL_ADDTO_CANVAS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasPrivate))
++
+ static GQuark panel_addto_dialog_quark = 0;
+
+-typedef enum {
+- PANEL_ADDTO_APPLET,
+- PANEL_ADDTO_ACTION,
+- PANEL_ADDTO_LAUNCHER_MENU,
+- PANEL_ADDTO_LAUNCHER,
+- PANEL_ADDTO_LAUNCHER_NEW,
+- PANEL_ADDTO_MENU,
+- PANEL_ADDTO_MENUBAR,
+- PANEL_ADDTO_SEPARATOR,
+- PANEL_ADDTO_DRAWER
+-} PanelAddtoItemType;
+-
+-typedef struct {
+- PanelAddtoItemType type;
+- char *name;
+- char *description;
+- char *icon;
+- PanelActionButtonType action_type;
+- char *launcher_path;
+- char *menu_filename;
+- char *menu_path;
+- char *iid;
+- gboolean static_data;
+-} PanelAddtoItemInfo;
+-
+-typedef struct {
+- GSList *children;
+- PanelAddtoItemInfo item_info;
+-} PanelAddtoAppList;
+-
+-static PanelAddtoItemInfo special_addto_items [] = {
+-
+- { PANEL_ADDTO_LAUNCHER_NEW,
+- N_("Custom Application Launcher"),
+- N_("Create a new launcher"),
+- "launcher-program",
+- PANEL_ACTION_NONE,
+- NULL,
+- NULL,
+- NULL,
+- "LAUNCHER:ASK",
+- TRUE },
+-
+- { PANEL_ADDTO_LAUNCHER_MENU,
+- N_("Application Launcher..."),
+- N_("Copy a launcher from the applications menu"),
+- "launcher-program",
+- PANEL_ACTION_NONE,
+- NULL,
+- NULL,
+- NULL,
+- "LAUNCHER:MENU",
+- TRUE }
++typedef struct EntryInfo {
++ PanelAddtoCanvas *canvas;
+
+-};
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *text;
++ GnomeCanvasItem *pixbuf;
++ GnomeCanvasItem *highlight_pixbuf;
++ GnomeCanvasItem *cover;
++ GnomeCanvasItem *selection;
++
++ double icon_height;
++ double icon_width;
++ double text_height;
++ guint launching : 1;
++ guint selected : 1;
++ guint highlighted : 1;
++
++ gint n_category;
++ gint n_entry;
++ gint index;
++} EntryInfo;
++
++typedef struct CategoryInfo {
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *title;
++ GnomeCanvasItem *line;
++} CategoryInfo;
+
+ static PanelAddtoItemInfo internal_addto_items [] = {
+
+- { PANEL_ADDTO_MENU,
++ { PANEL_ADDTO_MENU,
++ PANEL_ACTION_NONE,
++ N_("Utilities"),
++ "Utilities",
+ N_("Main Menu"),
+ N_("The main GNOME menu"),
+ PANEL_MAIN_MENU_ICON,
+- PANEL_ACTION_NONE,
+ NULL,
+ NULL,
+ NULL,
+@@ -144,10 +79,12 @@
+ TRUE },
+
+ { PANEL_ADDTO_MENUBAR,
++ PANEL_ACTION_NONE,
++ N_("Utilities"),
++ "Utilities",
+ N_("Menu Bar"),
+ N_("A custom menu bar"),
+ PANEL_GNOME_LOGO_ICON,
+- PANEL_ACTION_NONE,
+ NULL,
+ NULL,
+ NULL,
+@@ -155,10 +92,12 @@
+ TRUE },
+
+ { PANEL_ADDTO_SEPARATOR,
++ PANEL_ACTION_NONE,
++ N_("Utilities"),
++ "Utilities",
+ N_("Separator"),
+ N_("A separator to organize the panel items"),
+ PANEL_SEPARATOR_ICON,
+- PANEL_ACTION_NONE,
+ NULL,
+ NULL,
+ NULL,
+@@ -166,10 +105,12 @@
+ TRUE },
+
+ { PANEL_ADDTO_DRAWER,
++ PANEL_ACTION_NONE,
++ N_("Desktop & Windows"),
++ "Desktop & Windows",
+ N_("Drawer"),
+ N_("A pop out drawer to store other items in"),
+ PANEL_DRAWER_ICON,
+- PANEL_ACTION_NONE,
+ NULL,
+ NULL,
+ NULL,
+@@ -202,9 +143,7 @@
+
+ static void panel_addto_present_applications (PanelAddtoDialog *dialog);
+ static void panel_addto_present_applets (PanelAddtoDialog *dialog);
+-static gboolean panel_addto_filter_func (GtkTreeModel *model,
+- GtkTreeIter *iter,
+- gpointer data);
++static void panel_addto_init_categories (PanelAddtoDialog *dialog);
+
+ static int
+ panel_addto_applet_info_sort_func (PanelAddtoItemInfo *a,
+@@ -223,6 +162,7 @@
+ if (!translated) {
+ internal_addto_items [i].name = _(internal_addto_items [i].name);
+ internal_addto_items [i].description = _(internal_addto_items [i].description);
++ internal_addto_items [i].category = _(internal_addto_items [i].category);
+ }
+
+ if (internal_addto_items [i].type == PANEL_ADDTO_MENU ||
+@@ -245,14 +185,16 @@
+ if (panel_action_get_is_disabled (i))
+ continue;
+
+- info = g_new0 (PanelAddtoItemInfo, 1);
+- info->type = PANEL_ADDTO_ACTION;
+- info->action_type = i;
+- info->name = g_strdup (panel_action_get_text (i));
+- info->description = g_strdup (panel_action_get_tooltip (i));
+- info->icon = g_strdup (panel_action_get_icon_name (i));
+- info->iid = g_strdup (panel_action_get_drag_id (i));
+- info->static_data = FALSE;
++ info = g_new0 (PanelAddtoItemInfo, 1);
++ info->type = PANEL_ADDTO_ACTION;
++ info->action_type = i;
++ info->name = g_strdup (panel_action_get_text (i));
++ info->description = g_strdup (panel_action_get_tooltip (i));
++ info->category = g_strdup (panel_action_get_category (i));
++ info->english_category = g_strdup (panel_action_get_english_category (i));
++ info->icon = g_strdup (panel_action_get_icon_name (i));
++ info->iid = g_strdup (panel_action_get_drag_id (i));
++ info->static_data = FALSE;
+
+ list = g_slist_prepend (list, info);
+ }
+@@ -281,6 +223,7 @@
+ }
+
+ #define ICON_SIZE 32
++#define LAUNCHER_ICON_SIZE 20
+
+ static GdkPixbuf *
+ panel_addto_make_pixbuf (const char *filename)
+@@ -292,8 +235,18 @@
+ NULL);
+ }
+
++static GdkPixbuf *
++panel_addto_make_pixbuf_for_launcher (const char *filename)
++{
++ //FIXME: size shouldn't be fixed but should depend on the font size
++ return panel_load_icon (gtk_icon_theme_get_default (),
++ filename,
++ LAUNCHER_ICON_SIZE, LAUNCHER_ICON_SIZE, LAUNCHER_ICON_SIZE,
++ NULL);
++}
++
+ static void
+-panel_addto_drag_data_get_cb (GtkWidget *widget,
++panel_addto_applications_drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+@@ -306,27 +259,22 @@
+ }
+
+ static void
+-panel_addto_drag_begin_cb (GtkWidget *widget,
++panel_addto_applications_drag_begin_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gpointer data)
+ {
+- GtkTreeModel *filter_model;
+- GtkTreeModel *child_model;
++ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+- GtkTreeIter filter_iter;
+ GdkPixbuf *pixbuf;
+
+- filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
++ model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (widget), &path, NULL);
+- gtk_tree_model_get_iter (filter_model, &filter_iter, path);
++ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_path_free (path);
+- gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (filter_model),
+- &iter, &filter_iter);
+
+- child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
+- gtk_tree_model_get (child_model, &iter,
++ gtk_tree_model_get (model, &iter,
+ COLUMN_ICON, &pixbuf,
+ -1);
+
+@@ -335,7 +283,7 @@
+ }
+
+ static void
+-panel_addto_setup_drag (GtkTreeView *tree_view,
++panel_addto_applications_setup_drag (GtkTreeView *tree_view,
+ const GtkTargetEntry *target,
+ const char *text)
+ {
+@@ -347,17 +295,17 @@
+ target, 1, GDK_ACTION_COPY);
+
+ g_signal_connect_data (G_OBJECT (tree_view), "drag_data_get",
+- G_CALLBACK (panel_addto_drag_data_get_cb),
++ G_CALLBACK (panel_addto_applications_drag_data_get_cb),
+ g_strdup (text),
+ (GClosureNotify) g_free,
+ 0 /* connect_flags */);
+ g_signal_connect_after (G_OBJECT (tree_view), "drag-begin",
+- G_CALLBACK (panel_addto_drag_begin_cb),
++ G_CALLBACK (panel_addto_applications_drag_begin_cb),
+ NULL);
+ }
+
+ static void
+-panel_addto_setup_launcher_drag (GtkTreeView *tree_view,
++panel_addto_applications_setup_launcher_drag (GtkTreeView *tree_view,
+ const char *uri)
+ {
+ static GtkTargetEntry target[] = {
+@@ -366,30 +314,19 @@
+ char *uri_list;
+
+ uri_list = g_strconcat (uri, "\r\n", NULL);
+- panel_addto_setup_drag (tree_view, target, uri_list);
++ panel_addto_applications_setup_drag (tree_view, target, uri_list);
+ g_free (uri_list);
+ }
+
+ static void
+-panel_addto_setup_applet_drag (GtkTreeView *tree_view,
+- const char *iid)
+-{
+- static GtkTargetEntry target[] = {
+- { "application/x-panel-applet-iid", 0, 0 }
+- };
+-
+- panel_addto_setup_drag (tree_view, target, iid);
+-}
+-
+-static void
+-panel_addto_setup_internal_applet_drag (GtkTreeView *tree_view,
++panel_addto_applications_setup_internal_applet_drag (GtkTreeView *tree_view,
+ const char *applet_type)
+ {
+ static GtkTargetEntry target[] = {
+ { "application/x-panel-applet-internal", 0, 0 }
+ };
+
+- panel_addto_setup_drag (tree_view, target, applet_type);
++ panel_addto_applications_setup_drag (tree_view, target, applet_type);
+ }
+
+ static GSList *
+@@ -428,20 +365,26 @@
+
+ for (i = 0; i < applet_list->_length; i++) {
+ Bonobo_ServerInfo *info;
+- const char *name, *description, *icon;
++ const char *name, *description, *category, *english_category, *icon;
+ PanelAddtoItemInfo *applet;
+
+ info = &applet_list->_buffer[i];
+
+- name = bonobo_server_info_prop_lookup (info,
+- "name",
+- langs_gslist);
+- description = bonobo_server_info_prop_lookup (info,
+- "description",
+- langs_gslist);
+- icon = bonobo_server_info_prop_lookup (info,
+- "panel:icon",
+- NULL);
++ name = bonobo_server_info_prop_lookup (info,
++ "name",
++ langs_gslist);
++ description = bonobo_server_info_prop_lookup (info,
++ "description",
++ langs_gslist);
++ category = bonobo_server_info_prop_lookup (info,
++ "panel:category",
++ langs_gslist);
++ english_category = bonobo_server_info_prop_lookup (info,
++ "panel:category",
++ NULL);
++ icon = bonobo_server_info_prop_lookup (info,
++ "panel:icon",
++ NULL);
+
+ if (!name ||
+ panel_lockdown_is_applet_disabled (info->iid)) {
+@@ -455,7 +398,13 @@
+ applet->icon = g_strdup (icon);
+ applet->iid = g_strdup (info->iid);
+ applet->static_data = FALSE;
+-
++ if (!category) {
++ applet->category = g_strdup_printf (_("Miscellaneous"));
++ applet->english_category = g_strdup_printf ("Miscellaneous");
++ } else {
++ applet->category = g_markup_escape_text (category, -1);
++ applet->english_category = g_markup_escape_text (english_category, -1);
++ }
+ list = g_slist_prepend (list, applet);
+ }
+
+@@ -508,34 +457,12 @@
+ }
+ }
+
+-static void
+-panel_addto_append_special_applets (PanelAddtoDialog *dialog,
+- GtkListStore *model)
+-{
+- static gboolean translated = FALSE;
+- int i;
+-
+- for (i = 0; i < G_N_ELEMENTS (special_addto_items); i++) {
+- if (!translated) {
+- special_addto_items [i].name = _(special_addto_items [i].name);
+- special_addto_items [i].description = _(special_addto_items [i].description);
+- }
+-
+- panel_addto_append_item (dialog, model, &special_addto_items [i]);
+- }
+-
+- translated = TRUE;
+-}
+-
+-static void
++static GtkTreeModel *
+ panel_addto_make_applet_model (PanelAddtoDialog *dialog)
+ {
+ GtkListStore *model;
+ GSList *l;
+
+- if (dialog->filter_applet_model != NULL)
+- return;
+-
+ if (panel_profile_id_lists_are_writable ()) {
+ dialog->applet_list = panel_addto_query_applets (dialog->applet_list);
+ dialog->applet_list = panel_addto_prepend_internal_applets (dialog->applet_list);
+@@ -550,21 +477,14 @@
+ G_TYPE_POINTER,
+ G_TYPE_STRING);
+
+- if (panel_profile_id_lists_are_writable ()) {
+- panel_addto_append_special_applets (dialog, model);
+- if (dialog->applet_list)
++ if (panel_profile_id_lists_are_writable () && dialog->applet_list) {
+ panel_addto_append_item (dialog, model, NULL);
+ }
+
+ for (l = dialog->applet_list; l; l = l->next)
+ panel_addto_append_item (dialog, model, l->data);
+
+- dialog->applet_model = GTK_TREE_MODEL (model);
+- dialog->filter_applet_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (dialog->applet_model),
+- NULL);
+- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (dialog->filter_applet_model),
+- panel_addto_filter_func,
+- dialog, NULL);
++ return (GtkTreeModel *) model;
+ }
+
+ static void panel_addto_make_application_list (GSList **parent_list,
+@@ -722,16 +642,13 @@
+ }
+ }
+
+-static void
++static GtkTreeModel *
+ panel_addto_make_application_model (PanelAddtoDialog *dialog)
+ {
+ GtkTreeStore *store;
+ GMenuTree *tree;
+ GMenuTreeDirectory *root;
+
+- if (dialog->filter_application_model != NULL)
+- return;
+-
+ store = gtk_tree_store_new (NUMBER_COLUMNS,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+@@ -773,20 +690,19 @@
+
+ gmenu_tree_unref (tree);
+
+- dialog->application_model = GTK_TREE_MODEL (store);
+- dialog->filter_application_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (dialog->application_model),
+- NULL);
+- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (dialog->filter_application_model),
+- panel_addto_filter_func,
+- dialog, NULL);
++ return GTK_TREE_MODEL (store);
+ }
+
+-static void
++gboolean
+ panel_addto_add_item (PanelAddtoDialog *dialog,
+ PanelAddtoItemInfo *item_info)
+ {
++ gboolean destroy;
++
+ g_assert (item_info != NULL);
+
++ destroy = TRUE;
++
+ switch (item_info->type) {
+ case PANEL_ADDTO_APPLET:
+ panel_applet_frame_create (dialog->panel_widget->toplevel,
+@@ -800,6 +716,7 @@
+ break;
+ case PANEL_ADDTO_LAUNCHER_MENU:
+ panel_addto_present_applications (dialog);
++ destroy = FALSE;
+ break;
+ case PANEL_ADDTO_LAUNCHER:
+ panel_launcher_create (dialog->panel_widget->toplevel,
+@@ -832,18 +749,21 @@
+ NULL, FALSE, NULL);
+ break;
+ }
++
++ return destroy;
+ }
+
+-static void
++void
+ panel_addto_dialog_response (GtkWidget *widget_dialog,
+ guint response_id,
+ PanelAddtoDialog *dialog)
+ {
+- GtkTreeSelection *selection;
+- GtkTreeModel *filter_model;
+- GtkTreeModel *child_model;
+- GtkTreeIter iter;
+- GtkTreeIter filter_iter;
++ PanelAddtoItemInfo *data;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoEntry *selected_applet;
++ GtkTreeSelection *selected_application;
++ GtkTreeModel *model;
++ GtkTreeIter iter;
+
+ switch (response_id) {
+ case GTK_RESPONSE_HELP:
+@@ -852,28 +772,43 @@
+ break;
+
+ case PANEL_ADDTO_RESPONSE_ADD:
+- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+- if (gtk_tree_selection_get_selected (selection, &filter_model,
+- &filter_iter)) {
+- PanelAddtoItemInfo *data;
+-
+- gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (filter_model),
+- &iter,
+- &filter_iter);
+- child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
+- gtk_tree_model_get (child_model, &iter,
+- COLUMN_DATA, &data, -1);
+
+- if (data != NULL)
++ if (dialog->status == APPLETS) {
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ selected_applet = priv->selected;
++ data = selected_applet->item_info;
++ if (data) {
+ panel_addto_add_item (dialog, data);
+- }
++ }
++ } else if (dialog->status == APPLICATIONS) {
++ selected_application = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
++ if (gtk_tree_selection_get_selected (selected_application,
++ &model, &iter)) {
++ gtk_tree_model_get (model, &iter,
++ COLUMN_DATA, &data, -1);
++
++ if (data != NULL) {
++ panel_addto_add_item (dialog, data);
++ }
++ }
++ }
++
+ break;
+
++
+ case PANEL_ADDTO_RESPONSE_BACK:
+ /* This response only happens when we're showing the
+ * application list and the user wants to go back to the
+ * applet list. */
+- panel_addto_present_applets (dialog);
++ gtk_widget_hide (dialog->applications_sw);
++ dialog->status = APPLETS;
++ panel_addto_present_applets (dialog);
++ gtk_widget_show_all (dialog->applets_sw);
++ gtk_widget_show (dialog->statuslabel);
++ gtk_widget_show (dialog->search_entry);
++ gtk_widget_show (dialog->search_label);
++ gtk_widget_set_sensitive (dialog->launcher_button, TRUE);
++ gtk_widget_set_sensitive (dialog->custom_launcher_button, TRUE);
+ break;
+
+ case GTK_RESPONSE_CLOSE:
+@@ -886,6 +821,40 @@
+ }
+
+ static void
++panel_addto_add_launcher (PanelAddtoDialog *dialog)
++{
++ PanelAddtoEntry *launcher_applet;
++ PanelAddtoItemInfo *data;
++
++ launcher_applet = g_new (PanelAddtoEntry, 1);
++ data = launcher_applet->item_info;
++ data = g_new (PanelAddtoItemInfo, 1);
++ data->type = PANEL_ADDTO_LAUNCHER_MENU;
++
++ panel_addto_add_item (dialog, data);
++
++ g_free (launcher_applet);
++ g_free (data);
++}
++
++static void
++panel_addto_add_custom_launcher (PanelAddtoDialog *dialog)
++{
++ PanelAddtoEntry *launcher_applet;
++ PanelAddtoItemInfo *data;
++
++ launcher_applet = g_new (PanelAddtoEntry, 1);
++ data = launcher_applet->item_info;
++ data = g_new (PanelAddtoItemInfo, 1);
++ data->type = PANEL_ADDTO_LAUNCHER_NEW;
++
++ panel_addto_add_item (dialog, data);
++
++ g_free (launcher_applet);
++ g_free (data);
++}
++
++static void
+ panel_addto_dialog_destroy (GtkWidget *widget_dialog,
+ PanelAddtoDialog *dialog)
+ {
+@@ -895,45 +864,268 @@
+ NULL);
+ }
+
++
++static PanelAddtoCategory *
++panel_addto_category_new (const gchar *title,
++ const gchar *english_title,
++ gboolean real_category)
++{
++ PanelAddtoCategory *retval;
++ retval = g_new0 (PanelAddtoCategory, 1);
++
++ retval->title = g_strdup (title);
++ retval->english_title = g_strdup (english_title);
++ retval->real_category = real_category != FALSE;
++ retval->entries = NULL; /* We will populate it in init_categories */
++
++ return retval;
++}
++
++static int
++compare_categories (PanelAddtoCategory *a,
++ PanelAddtoCategory *b)
++{
++ return g_utf8_collate (a->title, b->title);
++}
++
++static void
++panel_addto_init_categories (PanelAddtoDialog *dialog)
++{
++ PanelAddtoInformation *info;
++ PanelAddtoItemInfo *applet;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *current_category;
++ GSList *categories = NULL;
++ GSList *l, *m;
++ gchar *category_title, *category_english_title;
++ gboolean found;
++
++ info = g_new0 (PanelAddtoInformation, 1);
++
++ for (l = dialog->applet_list; l; l = l->next) {
++ applet = l->data;
++ category_title = g_strdup (applet->category);
++ category_english_title = g_strdup (applet->english_category);
++ found = FALSE;
++ for (m = categories; m; m = m->next) {
++ current_category = m->data;
++ if (!g_utf8_collate (current_category->english_title, category_english_title)) {
++ found = TRUE;
++ current_category->n_entries++;
++ if (!current_category->translated && strcmp (category_title, category_english_title)) {
++ current_category->title = category_title;
++ current_category->translated = TRUE;
++ }
++ break;
++ }
++ }
++ if (!found) {
++ categories = g_slist_prepend (categories,
++ panel_addto_category_new (category_title, category_english_title, TRUE));
++ current_category = categories->data;
++ current_category->translated = strcmp (category_title, category_english_title) ? TRUE : FALSE;
++ current_category->n_entries = 1;
++ }
++
++ entry = g_new0 (PanelAddtoEntry, 1);
++ entry->title = g_strdup (applet->name);
++ entry->comment = g_strdup (applet->description);
++ entry->item_info = applet;
++ entry->category = current_category;
++ entry->dialog = dialog;
++ entry->icon_pixbuf = panel_addto_make_pixbuf (applet->icon);
++ current_category->entries = g_slist_append (current_category->entries, entry);
++ }
++
++ categories = g_slist_sort (categories,
++ (GCompareFunc) compare_categories);
++
++ info->n_categories = g_slist_length (categories);
++ info->categories = categories;
++
++ dialog->info = info;
++}
++
++static gboolean
++panel_addto_separator_func (GtkTreeModel *model,
++ GtkTreeIter *iter,
++ gpointer data)
++{
++ int column = GPOINTER_TO_INT (data);
++ char *text;
++
++ gtk_tree_model_get (model, iter, column, &text, -1);
++
++ if (!text)
++ return TRUE;
++
++ g_free(text);
++ return FALSE;
++}
++
++static void
++panel_addto_applications_selection_changed (GtkTreeSelection *selection,
++ PanelAddtoDialog *dialog)
++{
++ GtkTreeModel *model;
++ GtkTreeIter iter;
++ PanelAddtoItemInfo *data;
++ char *iid;
++
++
++ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
++ return;
++ }
++
++ gtk_tree_model_get (model, &iter, COLUMN_DATA, &data, -1);
++
++ if (!data) {
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
++ return;
++ }
++
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), TRUE);
++
++ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
++ GTK_STOCK_ADD);
++ gtk_button_set_use_stock (GTK_BUTTON (dialog->add_button),
++ TRUE);
++
++ /* only allow dragging applets if we can add applets */
++
++ if (panel_profile_id_lists_are_writable ()) {
++ switch (data->type) {
++ case PANEL_ADDTO_LAUNCHER:
++ panel_addto_applications_setup_launcher_drag (GTK_TREE_VIEW (dialog->tree_view),
++ data->launcher_path);
++ break;
++ case PANEL_ADDTO_MENU:
++
++ /* build the iid for menus other than the main menu */
++
++ if (data->iid == NULL) {
++ iid = g_strdup_printf ("MENU:%s/%s",
++ data->menu_filename,
++ data->menu_path);
++ } else {
++ iid = g_strdup (data->iid);
++ }
++ panel_addto_applications_setup_internal_applet_drag (GTK_TREE_VIEW (dialog->tree_view),
++ iid);
++ g_free (iid);
++ break;
++ default:
++ break;
++ }
++ }
++}
++
++
++static void
++panel_addto_applications_selection_activated (GtkTreeView *view,
++ GtkTreePath *path,
++ GtkTreeViewColumn *column,
++ PanelAddtoDialog *dialog)
++{
++ gtk_dialog_response (GTK_DIALOG (dialog->addto_dialog),
++ PANEL_ADDTO_RESPONSE_ADD);
++}
++
+ static void
+ panel_addto_present_applications (PanelAddtoDialog *dialog)
+ {
+- if (dialog->filter_application_model == NULL)
+- panel_addto_make_application_model (dialog);
+- gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view),
+- dialog->filter_application_model);
+- gtk_window_set_focus (GTK_WINDOW (dialog->addto_dialog),
+- dialog->search_entry);
+- gtk_widget_set_sensitive (dialog->back_button, TRUE);
++ GtkTreeSelection *selection;
++ GtkTreeViewColumn *column;
++
++ if (dialog->application_model == NULL) {
++ dialog->application_model = panel_addto_make_application_model (dialog);
++ }
++ gtk_widget_hide (dialog->applets_sw);
++ gtk_widget_hide (dialog->statuslabel);
++ gtk_widget_hide (dialog->search_entry);
++ gtk_widget_hide (dialog->search_label);
++
++ gtk_widget_set_sensitive (dialog->launcher_button, FALSE);
++ gtk_widget_set_sensitive (dialog->custom_launcher_button, FALSE);
++
++ dialog->status = APPLICATIONS;
++
++ dialog->applications_sw = gtk_scrolled_window_new (NULL, NULL);
++ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dialog->applications_sw),
++ GTK_POLICY_AUTOMATIC,
++ GTK_POLICY_AUTOMATIC);
++ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->applications_sw),
++ GTK_SHADOW_IN);
++ dialog->tree_view = gtk_tree_view_new ();
++ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->tree_view),
++ FALSE);
++ gtk_tree_view_expand_all (GTK_TREE_VIEW (dialog->tree_view));
++
++ dialog->renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF,
++ "xpad", 4,
++ "ypad", 4,
++ NULL);
++
++ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
++ -1, NULL,
++ dialog->renderer,
++ "pixbuf", COLUMN_ICON,
++ NULL);
++
++ dialog->renderer = gtk_cell_renderer_text_new ();
++ g_object_set (dialog->renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
++
++ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
++ -1, NULL,
++ dialog->renderer,
++ "markup", COLUMN_TEXT,
++ NULL);
++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (dialog->tree_view),
++ COLUMN_SEARCH);
++
++ gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (dialog->tree_view),
++ panel_addto_separator_func,
++ GINT_TO_POINTER (COLUMN_TEXT),
++ NULL);
++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
++ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
++
++ column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->tree_view),
++ COLUMN_TEXT);
++ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
++
++ g_signal_connect (selection, "changed",
++ G_CALLBACK (panel_addto_applications_selection_changed),
++ dialog);
++
++ g_signal_connect (dialog->tree_view, "row-activated",
++ G_CALLBACK (panel_addto_applications_selection_activated),
++ dialog);
+
+- if (dialog->applet_search_text)
+- g_free (dialog->applet_search_text);
++ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view),
++ dialog->application_model);
++ gtk_container_add (GTK_CONTAINER (dialog->applications_sw),
++ GTK_WIDGET (dialog->tree_view));
++ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox),
++ GTK_WIDGET (dialog->applications_sw), TRUE, TRUE, 0);
+
+- dialog->applet_search_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->search_entry)));
+- /* show everything */
+- gtk_entry_set_text (GTK_ENTRY (dialog->search_entry), "");
++
++ gtk_window_set_focus (GTK_WINDOW (dialog->addto_dialog),
++ dialog->tree_view);
++ gtk_widget_set_sensitive (dialog->back_button, TRUE);
++ gtk_widget_show_all (GTK_WIDGET (dialog->applications_sw));
+ }
+
+ static void
+ panel_addto_present_applets (PanelAddtoDialog *dialog)
+ {
+- if (dialog->filter_applet_model == NULL)
+- panel_addto_make_applet_model (dialog);
+- gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view),
+- dialog->filter_applet_model);
+- gtk_window_set_focus (GTK_WINDOW (dialog->addto_dialog),
+- dialog->search_entry);
+- gtk_widget_set_sensitive (dialog->back_button, FALSE);
+
+- if (dialog->applet_search_text) {
+- gtk_entry_set_text (GTK_ENTRY (dialog->search_entry),
+- dialog->applet_search_text);
+- gtk_editable_set_position (GTK_EDITABLE (dialog->search_entry),
+- -1);
++ if (dialog->applet_model == NULL)
++ dialog->applet_model = panel_addto_make_applet_model (dialog);
+
+- g_free (dialog->applet_search_text);
+- dialog->applet_search_text = NULL;
+- }
++ gtk_widget_set_sensitive (dialog->back_button, FALSE);
++
+ }
+
+ static void
+@@ -994,8 +1186,10 @@
+ static void
+ panel_addto_dialog_free (PanelAddtoDialog *dialog)
+ {
+- GConfClient *client;
+- GSList *item;
++ GConfClient *client;
++ GSList *item, *l, *m;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
+
+ client = panel_gconf_get_client ();
+
+@@ -1003,18 +1197,14 @@
+ gconf_client_notify_remove (client, dialog->name_notify);
+ dialog->name_notify = 0;
+
+- if (dialog->search_text)
+- g_free (dialog->search_text);
+- dialog->search_text = NULL;
+-
+- if (dialog->applet_search_text)
+- g_free (dialog->applet_search_text);
+- dialog->applet_search_text = NULL;
+-
+ if (dialog->addto_dialog)
+- gtk_widget_destroy (dialog->addto_dialog);
++ gtk_widget_destroy (dialog->addto_dialog);
+ dialog->addto_dialog = NULL;
+-
++
++ if (dialog->label) {
++ dialog->label = NULL;
++ }
++
+ for (item = dialog->applet_list; item != NULL; item = item->next) {
+ PanelAddtoItemInfo *applet;
+
+@@ -1028,19 +1218,33 @@
+
+ panel_addto_dialog_free_application_list (dialog->application_list);
+ panel_addto_dialog_free_application_list (dialog->settings_list);
++
++ if (dialog->canvas) {
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ if (priv) {
++ if (priv && priv->info && priv->info->categories) {
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ for (m = current_category->entries; m; m = m->next) {
++ g_free (m->data);
++ }
++ if (current_category->user_data)
++ g_free (current_category->user_data);
++ g_slist_free (current_category->entries);
++ g_free (current_category);
++ }
++ g_slist_free (priv->info->categories);
++ }
++ g_free (priv->search_text);
++ }
++ }
+
+- if (dialog->filter_applet_model)
+- g_object_unref (dialog->filter_applet_model);
+- dialog->filter_applet_model = NULL;
++
+
+ if (dialog->applet_model)
+- g_object_unref (dialog->applet_model);
++ g_object_unref (dialog->applet_model);
+ dialog->applet_model = NULL;
+
+- if (dialog->filter_application_model)
+- g_object_unref (dialog->filter_application_model);
+- dialog->filter_application_model = NULL;
+-
+ if (dialog->application_model)
+ g_object_unref (dialog->application_model);
+ dialog->application_model = NULL;
+@@ -1062,17 +1266,18 @@
+ label = NULL;
+
+ if (!string_empty (name))
+- label = g_strdup_printf (_("Find an _item to add to \"%s\":"),
++ label = g_strdup_printf (_("Select an _item to add to \"%s\":"),
+ name);
+
+ if (panel_toplevel_get_is_attached (dialog->panel_widget->toplevel)) {
+ title = g_strdup_printf (_("Add to Drawer"));
+ if (label == NULL)
+- label = g_strdup (_("Find an _item to add to the drawer:"));
++ label = g_strdup (_("Select an _item to add to the drawer:"));
+ } else {
+ title = g_strdup_printf (_("Add to Panel"));
+ if (label == NULL)
+- label = g_strdup (_("Find an _item to add to the panel:"));
++ label = g_strdup (_("Select an _item to add to the panel \n\
++(you can also directly drag and drop items onto the panel):"));
+ }
+
+ gtk_window_set_title (GTK_WINDOW (dialog->addto_dialog), title);
+@@ -1106,199 +1311,24 @@
+ panel_addto_name_change (dialog, text);
+ }
+
+-static gboolean
+-panel_addto_filter_func (GtkTreeModel *model,
+- GtkTreeIter *iter,
+- gpointer userdata)
+-{
+- PanelAddtoDialog *dialog;
+- PanelAddtoItemInfo *data;
+-
+- dialog = (PanelAddtoDialog *) userdata;
+-
+- if (!dialog->search_text || !dialog->search_text[0])
+- return TRUE;
+-
+- gtk_tree_model_get (model, iter, COLUMN_DATA, &data, -1);
+-
+- if (data == NULL)
+- return FALSE;
+-
+- /* This is more a workaround than anything else: show all the root
+- * items in a tree store */
+- if (GTK_IS_TREE_STORE (model) &&
+- gtk_tree_store_iter_depth (GTK_TREE_STORE (model), iter) == 0)
+- return TRUE;
+-
+- return (panel_util_utf8_strstrcase (data->name,
+- dialog->search_text) != NULL ||
+- panel_util_utf8_strstrcase (data->description,
+- dialog->search_text) != NULL);
+-}
+-
+-static void
+-panel_addto_search_entry_changed (GtkWidget *entry,
+- PanelAddtoDialog *dialog)
+-{
+- GtkTreeModel *model;
+- char *new_text;
+- GtkTreeIter iter;
+- GtkTreePath *path;
+-
+- new_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->search_entry)));
+- g_strchomp (new_text);
+-
+- if (dialog->search_text &&
+- g_utf8_collate (new_text, dialog->search_text) == 0) {
+- g_free (new_text);
+- return;
+- }
+-
+- if (dialog->search_text)
+- g_free (dialog->search_text);
+- dialog->search_text = new_text;
+-
+- model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
+-
+- path = gtk_tree_path_new_first ();
+- if (gtk_tree_model_get_iter (model, &iter, path)) {
+- GtkTreeSelection *selection;
+-
+- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (dialog->tree_view),
+- path, NULL, FALSE, 0, 0);
+- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+- gtk_tree_selection_select_path (selection, path);
+- }
+- gtk_tree_path_free (path);
+-}
+-
+-static void
+-panel_addto_search_entry_activated (GtkWidget *entry,
+- PanelAddtoDialog *dialog)
+-{
+- gtk_dialog_response (GTK_DIALOG (dialog->addto_dialog),
+- PANEL_ADDTO_RESPONSE_ADD);
+-}
+-
+-static void
+-panel_addto_selection_changed (GtkTreeSelection *selection,
+- PanelAddtoDialog *dialog)
+-{
+- GtkTreeModel *filter_model;
+- GtkTreeModel *child_model;
+- GtkTreeIter iter;
+- GtkTreeIter filter_iter;
+- PanelAddtoItemInfo *data;
+- char *iid;
+-
+- if (!gtk_tree_selection_get_selected (selection,
+- &filter_model,
+- &filter_iter)) {
+- gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button),
+- FALSE);
+- return;
+- }
+-
+- gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (filter_model),
+- &iter, &filter_iter);
+- child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
+- gtk_tree_model_get (child_model, &iter, COLUMN_DATA, &data, -1);
+-
+- if (!data) {
+- gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button),
+- FALSE);
+- return;
+- }
+-
+- gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), TRUE);
+-
+- if (data->type == PANEL_ADDTO_LAUNCHER_MENU) {
+- gtk_button_set_label (GTK_BUTTON (dialog->add_button),
+- GTK_STOCK_GO_FORWARD);
+- } else {
+- gtk_button_set_label (GTK_BUTTON (dialog->add_button),
+- GTK_STOCK_ADD);
+- }
+- gtk_button_set_use_stock (GTK_BUTTON (dialog->add_button),
+- TRUE);
+-
+- /* only allow dragging applets if we can add applets */
+- if (panel_profile_id_lists_are_writable ()) {
+- switch (data->type) {
+- case PANEL_ADDTO_LAUNCHER:
+- panel_addto_setup_launcher_drag (GTK_TREE_VIEW (dialog->tree_view),
+- data->launcher_path);
+- break;
+- case PANEL_ADDTO_APPLET:
+- panel_addto_setup_applet_drag (GTK_TREE_VIEW (dialog->tree_view),
+- data->iid);
+- break;
+- case PANEL_ADDTO_LAUNCHER_MENU:
+- gtk_tree_view_unset_rows_drag_source (GTK_TREE_VIEW (dialog->tree_view));
+- break;
+- case PANEL_ADDTO_MENU:
+- /* build the iid for menus other than the main menu */
+- if (data->iid == NULL) {
+- iid = g_strdup_printf ("MENU:%s/%s",
+- data->menu_filename,
+- data->menu_path);
+- } else {
+- iid = g_strdup (data->iid);
+- }
+- panel_addto_setup_internal_applet_drag (GTK_TREE_VIEW (dialog->tree_view),
+- iid);
+- g_free (iid);
+- break;
+- default:
+- panel_addto_setup_internal_applet_drag (GTK_TREE_VIEW (dialog->tree_view),
+- data->iid);
+- break;
+- }
+- }
+-}
+-
+-static void
+-panel_addto_selection_activated (GtkTreeView *view,
+- GtkTreePath *path,
+- GtkTreeViewColumn *column,
+- PanelAddtoDialog *dialog)
+-{
+- gtk_dialog_response (GTK_DIALOG (dialog->addto_dialog),
+- PANEL_ADDTO_RESPONSE_ADD);
+-}
+-
+-static gboolean
+-panel_addto_separator_func (GtkTreeModel *model,
+- GtkTreeIter *iter,
+- gpointer data)
+-{
+- int column = GPOINTER_TO_INT (data);
+- char *text;
+-
+- gtk_tree_model_get (model, iter, column, &text, -1);
+-
+- if (!text)
+- return TRUE;
+-
+- g_free(text);
+- return FALSE;
+-}
+
+ static PanelAddtoDialog *
+ panel_addto_dialog_new (PanelWidget *panel_widget)
+ {
+ PanelAddtoDialog *dialog;
+- GtkWidget *vbox;
+- GtkWidget *inner_vbox;
+- GtkWidget *find_hbox;
+- GtkWidget *sw;
+- GtkCellRenderer *renderer;
+- GtkTreeSelection *selection;
+- GtkTreeViewColumn *column;
++ GtkWidget *vbox;
++ GtkWidget *top_hbox;
++ GtkWidget *launchers_hbox;
++ GdkPixbuf *launcher_pixbuf;
++ GtkWidget *launcher_image;
++ GtkWidget *bottom_hbox;
++ GtkTooltips *launchers_tooltips;
++ GtkImage *label_image;
+
+ dialog = g_new0 (PanelAddtoDialog, 1);
+
++ dialog->status = APPLETS;
++
+ g_object_set_qdata_full (G_OBJECT (panel_widget->toplevel),
+ panel_addto_dialog_quark,
+ dialog,
+@@ -1306,14 +1336,14 @@
+
+ dialog->panel_widget = panel_widget;
+ dialog->name_notify =
+- panel_profile_toplevel_notify_add (
+- dialog->panel_widget->toplevel,
+- "name",
+- (GConfClientNotifyFunc) panel_addto_name_notify,
+- dialog);
+-
+-
++ panel_profile_toplevel_notify_add (dialog->panel_widget->toplevel,
++ "name",
++ (GConfClientNotifyFunc) panel_addto_name_notify,
++ dialog);
+ dialog->addto_dialog = gtk_dialog_new ();
++
++ dialog->statuslabel = gtk_label_new ("");
++
+ gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
+ GTK_STOCK_HELP, GTK_RESPONSE_HELP);
+ dialog->back_button = gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
+@@ -1341,104 +1371,99 @@
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog->addto_dialog)->vbox),
+- vbox);
+-
+- inner_vbox = gtk_vbox_new (FALSE, 6);
+- gtk_box_pack_start (GTK_BOX (vbox), inner_vbox, TRUE, TRUE, 0);
++ GTK_WIDGET (vbox));
+
+- find_hbox = gtk_hbox_new (FALSE, 6);
+- gtk_box_pack_start (GTK_BOX (inner_vbox), find_hbox, FALSE, FALSE, 0);
++ dialog->inner_vbox = gtk_vbox_new (FALSE, 6);
++ gtk_box_pack_start (GTK_BOX (vbox), dialog->inner_vbox, TRUE, TRUE, 0);
+
++ top_hbox = gtk_hbox_new (FALSE, 6);
++ launchers_hbox = gtk_hbox_new (FALSE, 6);
++ bottom_hbox = gtk_hbox_new (FALSE, 0);
+ dialog->label = gtk_label_new_with_mnemonic ("");
+ gtk_misc_set_alignment (GTK_MISC (dialog->label), 0.0, 0.5);
+ gtk_label_set_use_markup (GTK_LABEL (dialog->label), TRUE);
+
+- gtk_box_pack_start (GTK_BOX (find_hbox), dialog->label,
+- FALSE, FALSE, 0);
+-
+- dialog->search_entry = gtk_entry_new ();
++ label_image = g_object_new (GTK_TYPE_IMAGE,
++ "stock", GTK_STOCK_DIALOG_INFO,
++ "icon-size", GTK_ICON_SIZE_DND,
++ NULL);
++ dialog->search_label = gtk_label_new (_("Search : "));
++ dialog->search_entry = gtk_entry_new ();
++ g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->search_entry)));
++
+ g_signal_connect (G_OBJECT (dialog->search_entry), "changed",
+- G_CALLBACK (panel_addto_search_entry_changed), dialog);
++ G_CALLBACK (panel_addto_relayout_for_search), dialog);
+ g_signal_connect (G_OBJECT (dialog->search_entry), "activate",
+- G_CALLBACK (panel_addto_search_entry_activated), dialog);
+-
+- gtk_box_pack_end (GTK_BOX (find_hbox), dialog->search_entry,
+- TRUE, TRUE, 0);
+-
+- gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->label),
+- dialog->search_entry);
+-
+- sw = gtk_scrolled_window_new (NULL, NULL);
+- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+- GTK_POLICY_AUTOMATIC,
+- GTK_POLICY_AUTOMATIC);
+- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+- GTK_SHADOW_IN);
+- gtk_box_pack_start (GTK_BOX (inner_vbox), sw, TRUE, TRUE, 0);
+-
+- dialog->tree_view = gtk_tree_view_new ();
+- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->tree_view),
+- FALSE);
+- gtk_tree_view_expand_all (GTK_TREE_VIEW (dialog->tree_view));
+-
+- renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF,
+- "xpad", 4,
+- "ypad", 4,
+- NULL);
++ G_CALLBACK (panel_addto_activate_from_searchbar), dialog);
++
++ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET(label_image),
++ FALSE, FALSE, 0);
++
++ gtk_box_pack_start (GTK_BOX (top_hbox), dialog->label,
++ TRUE, TRUE, 0);
++
++ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET (dialog->search_label),
++ FALSE, FALSE, 0);
+
+- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
+- -1, NULL,
+- renderer,
+- "pixbuf", COLUMN_ICON,
+- NULL);
+- renderer = gtk_cell_renderer_text_new ();
+- g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
+- -1, NULL,
+- renderer,
+- "markup", COLUMN_TEXT,
+- NULL);
++ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET (dialog->search_entry),
++ TRUE, TRUE, 0);
+
+- //FIXME use the same search than the one for the search entry?
+- gtk_tree_view_set_search_column (GTK_TREE_VIEW (dialog->tree_view),
+- COLUMN_SEARCH);
++ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), top_hbox,
++ FALSE, FALSE, 0);
+
+- gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (dialog->tree_view),
+- panel_addto_separator_func,
+- GINT_TO_POINTER (COLUMN_TEXT),
+- NULL);
+-
++ /* Launcher button */
++ launchers_tooltips = gtk_tooltips_new ();
++ dialog->launcher_button = gtk_button_new_with_mnemonic (_("A_pplication Launcher..."));
++ launcher_pixbuf = panel_addto_make_pixbuf_for_launcher ("launcher-program");
++ launcher_image = gtk_image_new_from_pixbuf (launcher_pixbuf);
++ gtk_button_set_image (GTK_BUTTON (dialog->launcher_button), launcher_image);
++ gtk_tooltips_set_tip (launchers_tooltips, dialog->launcher_button, _("Launch a program that is already in the GNOME menu"), NULL);
++ g_signal_connect_swapped (dialog->launcher_button, "clicked",
++ G_CALLBACK (panel_addto_add_launcher), dialog);
++ gtk_box_pack_start (GTK_BOX (launchers_hbox), dialog->launcher_button,
++ FALSE, FALSE, 0);
+
+- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
++ /* Custom launcher button*/
++ dialog->custom_launcher_button = gtk_button_new_with_mnemonic (_("_Custom Application Launcher"));
++ launcher_image = gtk_image_new_from_pixbuf (launcher_pixbuf);
++ gtk_button_set_image (GTK_BUTTON (dialog->custom_launcher_button), launcher_image);
++ gtk_tooltips_set_tip (launchers_tooltips, dialog->custom_launcher_button, _("Create a new launcher"), NULL);
++ g_signal_connect_swapped (dialog->custom_launcher_button, "clicked",
++ G_CALLBACK (panel_addto_add_custom_launcher), dialog);
++ gtk_box_pack_start (GTK_BOX (launchers_hbox), dialog->custom_launcher_button,
++ FALSE, FALSE, 0);
+
+- column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->tree_view),
+- COLUMN_TEXT);
+- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
++ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), launchers_hbox,
++ FALSE, FALSE, 0);
+
+- g_signal_connect (selection, "changed",
+- G_CALLBACK (panel_addto_selection_changed),
+- dialog);
++ dialog->applets_sw = gtk_scrolled_window_new (NULL, NULL);
++ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dialog->applets_sw),
++ GTK_POLICY_AUTOMATIC,
++ GTK_POLICY_AUTOMATIC);
++ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->applets_sw),
++ GTK_SHADOW_IN);
+
+- g_signal_connect (dialog->tree_view, "row-activated",
+- G_CALLBACK (panel_addto_selection_activated),
+- dialog);
++ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), dialog->applets_sw, TRUE, TRUE, 0);
++ gtk_box_pack_start (GTK_BOX (bottom_hbox), dialog->statuslabel, FALSE, FALSE, 0);
+
+- gtk_container_add (GTK_CONTAINER (sw), dialog->tree_view);
++ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), bottom_hbox,
++ FALSE, FALSE, 0);
+
+ gtk_widget_show_all (vbox);
+
++ gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->label),
++ dialog->canvas);
++
+ panel_toplevel_push_autohide_disabler (dialog->panel_widget->toplevel);
+ panel_widget_register_open_dialog (panel_widget,
+ dialog->addto_dialog);
+-
+ panel_addto_name_change (dialog,
+ panel_toplevel_get_name (dialog->panel_widget->toplevel));
+
+ return dialog;
+ }
+
+-#define MAX_ADDTOPANEL_HEIGHT 490
++#define MAX_ADDTOPANEL_HEIGHT 540
+
+ void
+ panel_addto_present (GtkMenuItem *item,
+@@ -1447,6 +1472,7 @@
+ PanelAddtoDialog *dialog;
+ PanelToplevel *toplevel;
+ PanelData *pd;
++ GtkAdjustment *sw_adjustment = NULL;
+ GdkScreen *screen;
+ gint screen_height;
+ gint height;
+@@ -1467,12 +1493,24 @@
+
+ if (!dialog) {
+ dialog = panel_addto_dialog_new (panel_widget);
++
+ panel_addto_present_applets (dialog);
++ panel_addto_init_categories (dialog);
++
++ dialog->canvas = panel_addto_canvas_new (dialog->info);
++ gtk_container_add (GTK_CONTAINER (dialog->applets_sw),
++ GTK_WIDGET (dialog->canvas));
+ }
+
++ sw_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (dialog->applets_sw));
+ dialog->insertion_position = pd ? pd->insertion_pos : -1;
+ gtk_window_set_screen (GTK_WINDOW (dialog->addto_dialog), screen);
+ gtk_window_set_default_size (GTK_WINDOW (dialog->addto_dialog),
+- height * 8 / 7, height);
++ height * 1.35, height);
+ gtk_window_present (GTK_WINDOW (dialog->addto_dialog));
++
++ sw_adjustment->value = sw_adjustment->lower;
++ sw_adjustment->step_increment = 55;
++ gtk_adjustment_clamp_page (sw_adjustment, sw_adjustment->lower, sw_adjustment->upper);
++ gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (dialog->applets_sw), sw_adjustment);
+ }
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-canvas.c gnome-panel-2.14.1.new/gnome-panel/panel-addto-canvas.c
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-canvas.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-canvas.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,2309 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* Copyright (C) 2005 Carlos Garnacho
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Authors: Jody Goldberg
++ * Carlos Garnacho Parro
++ * Manu Cornet
++ */
++
++
++#include "panel-addto-canvas.h"
++#include "panel-addto.h"
++#include "panel-profile.h"
++
++#define PAD 5 /*when scrolling keep a few pixels above or below if possible */
++#define ABOVE_LINE_SPACING 0
++#define UNDER_LINE_SPACING 0
++#define UNDER_TITLE_SPACING 0 /* manually insert 1 blank line of text */
++#define LINE_HEIGHT 1
++#define BORDERS 7
++#define MAX_ITEM_WIDTH 125
++#define ITEMS_SEPARATION 7
++
++#include "panel-addto-canvas.h"
++#include "panel-addto-event-box.h"
++#include "panel-addto-rounded-rect.h"
++
++#include
++#include
++#include
++#include
++#include
++
++#define PANEL_ADDTO_CANVAS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasPrivate))
++
++typedef struct EntryInfo {
++ PanelAddtoCanvas *canvas;
++
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *text;
++ GnomeCanvasItem *pixbuf;
++ GnomeCanvasItem *highlight_pixbuf;
++ GnomeCanvasItem *cover;
++ GnomeCanvasItem *selection;
++
++ double icon_height;
++ double icon_width;
++ double text_height;
++ guint launching : 1;
++ guint selected : 1;
++ guint highlighted : 1;
++ gboolean visible;
++
++ gint n_category;
++ gint n_entry;
++ gint index;
++} EntryInfo;
++
++typedef struct {
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *title;
++ GnomeCanvasItem *line;
++ gboolean visible;
++} CategoryInfo;
++
++enum {
++ SELECTION_CHANGED,
++ LAST_SIGNAL
++};
++
++enum {
++ PROP_0,
++ PROP_INFO
++};
++
++
++static guint panel_addto_canvas_signals [LAST_SIGNAL] = { 0 };
++
++
++static void panel_addto_canvas_class_init (PanelAddtoCanvasClass *class);
++static void panel_addto_canvas_init (PanelAddtoCanvas *canvas);
++static void panel_addto_canvas_finalize (GObject *object);
++static void panel_addto_canvas_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec);
++static void panel_addto_canvas_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec);
++static void panel_addto_canvas_draw_background (GnomeCanvas *canvas, GdkDrawable *drawable,
++ int x, int y, int width, int height);
++static void panel_addto_canvas_size_allocate (GtkWidget *canvas,
++ GtkAllocation *allocation);
++static void panel_addto_canvas_style_set (GtkWidget *canvas,
++ GtkStyle *previous_style);
++static void panel_addto_canvas_realize (GtkWidget *canvas);
++
++static void panel_addto_select_east_entry (EntryInfo *ei, PanelAddtoCanvas *canvas);
++static void build_canvas (PanelAddtoCanvas *canvas);
++static void relayout_canvas (PanelAddtoCanvas *canvas);
++static void set_style (PanelAddtoCanvas *canvas, gboolean font_changed);
++
++G_DEFINE_TYPE (PanelAddtoCanvas, panel_addto_canvas, GNOME_TYPE_CANVAS);
++
++
++static AtkObject* panel_addto_canvas_get_accessible (GtkWidget *widget);
++
++#include "panel-addto-event-box.h"
++#include "panel-addto-rounded-rect.h"
++#include "panel-profile.h"
++
++static void
++panel_addto_canvas_class_init (PanelAddtoCanvasClass *class)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS (class);
++ GnomeCanvasClass *canvas_class = GNOME_CANVAS_CLASS (class);
++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
++
++ object_class->set_property = panel_addto_canvas_set_property;
++ object_class->get_property = panel_addto_canvas_get_property;
++ object_class->finalize = panel_addto_canvas_finalize;
++ canvas_class->draw_background = panel_addto_canvas_draw_background;
++
++ widget_class->style_set = panel_addto_canvas_style_set;
++ widget_class->size_allocate = panel_addto_canvas_size_allocate;
++ widget_class->realize = panel_addto_canvas_realize;
++ widget_class->get_accessible = panel_addto_canvas_get_accessible;
++
++ class->changed = NULL;
++
++ g_object_class_install_property (object_class,
++ PROP_INFO,
++ g_param_spec_pointer ("info",
++ "information for the canvas",
++ "information for the canvas",
++ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
++ panel_addto_canvas_signals [SELECTION_CHANGED] =
++ g_signal_new ("selection-changed",
++ G_OBJECT_CLASS_TYPE (object_class),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET (PanelAddtoCanvasClass, changed),
++ NULL, NULL,
++ g_cclosure_marshal_VOID__STRING,
++ G_TYPE_NONE, 1,
++ G_TYPE_STRING);
++
++ g_type_class_add_private (object_class,
++ sizeof (PanelAddtoCanvasPrivate));
++}
++
++
++static void
++panel_addto_canvas_init (PanelAddtoCanvas *canvas)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ g_return_if_fail (PANEL_ADDTO_IS_CANVAS (canvas));
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ priv->max_width = 300;
++ priv->min_height = 0;
++ priv->info = NULL;
++ priv->selected = NULL;
++
++ priv->max_item_width = 0;
++ priv->max_item_height = 0;
++ priv->items_per_row = 0;
++ priv->rtl = (gtk_widget_get_direction (GTK_WIDGET (canvas)) == GTK_TEXT_DIR_RTL);
++ priv->accessible_children = g_hash_table_new (g_int_hash, g_int_equal);
++
++ gtk_widget_show_all (GTK_WIDGET (canvas));
++}
++
++static void
++panel_addto_canvas_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (object);
++
++ switch (prop_id) {
++ case PROP_INFO:
++ priv->info = g_value_get_pointer (value);
++ build_canvas (PANEL_ADDTO_CANVAS (object));
++ break;
++ }
++}
++
++static void
++panel_addto_canvas_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (object);
++
++ switch (prop_id) {
++ case PROP_INFO:
++ g_value_set_pointer (value, priv->info);
++ break;
++ }
++}
++
++static void
++panel_addto_canvas_finalize (GObject *object)
++{
++ if (G_OBJECT_CLASS (panel_addto_canvas_parent_class)->finalize)
++ (* G_OBJECT_CLASS (panel_addto_canvas_parent_class)->finalize) (object);
++}
++
++
++static void
++panel_addto_canvas_draw_background (GnomeCanvas *canvas, GdkDrawable *drawable,
++ int x, int y, int width, int height)
++{
++ /* By default, we use the style base color. */
++ gdk_gc_set_foreground (canvas->pixmap_gc,
++ >K_WIDGET (canvas)->style->base[GTK_STATE_NORMAL]);
++ gdk_draw_rectangle (drawable,
++ canvas->pixmap_gc,
++ TRUE,
++ 0, 0,
++ width, height);
++}
++
++static void
++panel_addto_canvas_size_allocate(GtkWidget *canvas, GtkAllocation *allocation)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ if (GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->size_allocate)
++ (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->size_allocate) (canvas, allocation);
++
++ if (allocation->height == 1 || allocation->width == 1)
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ priv->max_width = allocation->width;
++ priv->min_height = allocation->height;
++
++ relayout_canvas (PANEL_ADDTO_CANVAS (canvas));
++
++ gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, priv->width - 1, priv->height - 1);
++ g_object_set (priv->under_cover,
++ "x2", priv->width,
++ "y2", priv->height,
++ NULL);
++}
++
++static void
++panel_addto_canvas_realize (GtkWidget *canvas)
++{
++ if (GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->realize)
++ (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->realize) (canvas);
++
++ set_style (PANEL_ADDTO_CANVAS (canvas), FALSE);
++}
++
++static void
++panel_addto_canvas_style_set (GtkWidget *canvas, GtkStyle *previous_style)
++{
++ if (!GTK_WIDGET_REALIZED (canvas))
++ return;
++
++ set_style (PANEL_ADDTO_CANVAS (canvas), (previous_style &&
++ canvas->style &&
++ !pango_font_description_equal (canvas->style->font_desc,
++ previous_style->font_desc)));
++}
++
++static void
++gnome_canvas_item_show_hide (GnomeCanvasItem *item, gboolean show)
++{
++ if (show)
++ gnome_canvas_item_show (item);
++ else
++ gnome_canvas_item_hide (item);
++}
++
++static void
++setup_entry (PanelAddtoCanvas *canvas, PanelAddtoEntry *entry)
++{
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei;
++ GtkWidget *widget;
++ GtkStateType state;
++
++ if (!entry)
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ widget = GTK_WIDGET (canvas);
++ ei = entry->user_data;
++
++ if (ei->pixbuf) {
++ gnome_canvas_item_show_hide (ei->highlight_pixbuf, ei->highlighted);
++ gnome_canvas_item_show_hide (ei->pixbuf, !ei->highlighted);
++ }
++ if (!ei->selected)
++ state = GTK_STATE_NORMAL;
++ else if (gtk_window_has_toplevel_focus (GTK_WINDOW (gtk_widget_get_toplevel (widget))))
++ state = GTK_STATE_SELECTED;
++ else
++ state = GTK_STATE_ACTIVE;
++ gnome_canvas_item_show_hide (ei->selection, ei->selected);
++ g_object_set (ei->selection,
++ "fill_color_gdk", &widget->style->base [state],
++ NULL);
++ g_object_set (ei->text,
++ "fill_color_gdk", &widget->style->text [state],
++ NULL);
++}
++
++static gboolean
++cb_entry_info_reset (gpointer data)
++{
++ EntryInfo *ei = data;
++ ei->launching = FALSE;
++ return FALSE;
++}
++
++
++void
++activate_entry (PanelAddtoEntry *entry)
++{
++ EntryInfo *ei = entry->user_data;
++
++ if (!ei->launching) {
++ ei->launching = TRUE;
++ gtk_timeout_add (1000, cb_entry_info_reset, ei);
++
++ if (panel_addto_add_item (entry->dialog, entry->item_info))
++ gtk_widget_destroy (entry->dialog->addto_dialog);
++ }
++}
++
++static void
++panel_addto_drag_data_get_cb (GtkWidget *widget,
++ GdkDragContext *context,
++ GtkSelectionData *selection_data,
++ guint info,
++ guint time,
++ const char *string)
++{
++ gtk_selection_data_set (selection_data,
++ selection_data->target, 8, (guchar *) string,
++ strlen (string));
++}
++
++static void
++panel_addto_drag_begin_cb (GtkWidget *canvas,
++ GdkDragContext *context,
++ gpointer data)
++{
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ entry = priv->selected;
++ gtk_drag_set_icon_pixbuf (context, entry->icon_pixbuf, 0, 0);
++}
++
++static void
++panel_addto_setup_drag (PanelAddtoCanvas *canvas,
++ const GtkTargetEntry *target,
++ const char *text)
++{
++ if (!text || panel_lockdown_get_locked_down ())
++ return;
++
++
++ gtk_drag_source_set (GTK_WIDGET (canvas),
++ GDK_BUTTON1_MASK|GDK_BUTTON2_MASK,
++ target, 1, GDK_ACTION_COPY);
++
++ g_signal_connect_data (G_OBJECT (canvas), "drag_data_get",
++ G_CALLBACK (panel_addto_drag_data_get_cb),
++ g_strdup (text),
++ (GClosureNotify) g_free,
++ 0 /* connect_flags */);
++ g_signal_connect_after (G_OBJECT (canvas), "drag-begin",
++ G_CALLBACK (panel_addto_drag_begin_cb),
++ NULL);
++}
++
++static void
++panel_addto_setup_launcher_drag (PanelAddtoCanvas *canvas,
++ const char *uri)
++{
++ static GtkTargetEntry target[] = {
++ { "text/uri-list", 0, 0 }
++ };
++ char *uri_list;
++
++ uri_list = g_strconcat (uri, "\r\n", NULL);
++ panel_addto_setup_drag (canvas, target, uri_list);
++ g_free (uri_list);
++}
++
++static void
++panel_addto_setup_applet_drag (PanelAddtoCanvas *canvas,
++ const char *iid)
++{
++ static GtkTargetEntry target[] = {
++ { "application/x-panel-applet-iid", 0, 0 }
++ };
++
++ panel_addto_setup_drag (canvas, target, iid);
++}
++
++
++
++static void
++panel_addto_setup_internal_applet_drag (PanelAddtoCanvas *canvas,
++ const char *applet_type)
++{
++ static GtkTargetEntry target[] = {
++ { "application/x-panel-applet-internal", 0, 0 }
++ };
++
++ panel_addto_setup_drag (canvas, target, applet_type);
++}
++
++static void
++panel_addto_selection_changed (PanelAddtoCanvas *canvas,
++ const gchar *status_display,
++ PanelAddtoDialog *dialog)
++{
++ PanelAddtoItemInfo *data;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ data = priv->selected ? priv->selected->item_info : NULL;
++
++
++ if ((!priv->selected) || (!data)) {
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
++ return;
++ }
++
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), TRUE);
++
++ if (dialog->statuslabel)
++ gtk_label_set_text (GTK_LABEL (dialog->statuslabel), priv->selected->comment);
++
++ if (data->type == PANEL_ADDTO_LAUNCHER_MENU) {
++ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
++ GTK_STOCK_GO_FORWARD);
++ } else {
++ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
++ GTK_STOCK_ADD);
++ }
++ gtk_button_set_use_stock (GTK_BUTTON (dialog->add_button),
++ TRUE);
++
++}
++
++static void
++select_entry (PanelAddtoCanvas *canvas, PanelAddtoEntry *entry)
++{
++ PanelAddtoDialog *dialog;
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei = NULL;
++ GtkAdjustment *pos;
++ double affine[6];
++ PanelAddtoEntry *selected;
++
++ dialog = entry->dialog;
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ selected = priv->selected;
++
++ if (selected == entry)
++ return;
++
++ if (selected && selected->user_data)
++ ((EntryInfo *) selected->user_data)->selected = FALSE;
++ setup_entry (canvas, selected);
++
++ priv->selected = selected = entry;
++
++ if (selected && selected->user_data)
++ ((EntryInfo *) selected->user_data)->selected = TRUE;
++ setup_entry (canvas, selected);
++
++ g_signal_emit (canvas, panel_addto_canvas_signals [SELECTION_CHANGED], 0,
++ (entry) ? entry->comment : NULL);
++
++ if (!entry)
++ return;
++
++ ei = entry->user_data;
++ gnome_canvas_item_i2c_affine (GNOME_CANVAS_ITEM (ei->group), affine);
++ pos = gtk_layout_get_vadjustment (GTK_LAYOUT (ei->cover->canvas));
++
++ if (affine[5] < pos->value)
++ gtk_adjustment_set_value (pos, MAX (affine[5] - PAD, 0));
++ else if ((affine[5] + priv->max_item_height) > (pos->value+pos->page_size))
++ gtk_adjustment_set_value (pos, MAX (MIN (affine[5] + priv->max_item_height + PAD, pos->upper) - pos->page_size, 0));
++}
++
++static gboolean
++cover_event (GnomeCanvasItem *item, GdkEvent *event, PanelAddtoEntry *entry)
++{
++ EntryInfo *ei = entry->user_data;
++ PanelAddtoCanvas *canvas = ei->canvas;
++ PanelAddtoItemInfo *data;
++ PanelAddtoDialog *dialog = entry->dialog;
++ char *iid;
++
++ data = entry->item_info;
++
++ switch (event->type) {
++ case GDK_ENTER_NOTIFY:
++ ei->highlighted = TRUE;
++ setup_entry (canvas, entry); /* highlight even if it is already selected */
++
++ /* only allow dragging applets if we can add applets */
++ if (panel_profile_id_lists_are_writable ()) {
++ switch (data->type) {
++ case PANEL_ADDTO_LAUNCHER:
++ panel_addto_setup_launcher_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->launcher_path);
++ break;
++ case PANEL_ADDTO_APPLET:
++ panel_addto_setup_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->iid);
++ break;
++ case PANEL_ADDTO_LAUNCHER_MENU:
++ break;
++ case PANEL_ADDTO_MENU:
++ /* build the iid for menus other than the main menu */
++ if (data->iid == NULL) {
++ iid = g_strdup_printf ("MENU:%s/%s",
++ data->menu_filename,
++ data->menu_path);
++ } else {
++ iid = g_strdup (data->iid);
++ }
++ panel_addto_setup_internal_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ iid);
++ g_free (iid);
++ break;
++ default:
++ panel_addto_setup_internal_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->iid);
++ break;
++ }
++ }
++
++ return TRUE;
++ case GDK_LEAVE_NOTIFY:
++ ei->highlighted = FALSE;
++ setup_entry (canvas, entry);
++ return TRUE;
++ case GDK_BUTTON_PRESS:
++ select_entry (canvas, entry);
++ gtk_widget_grab_focus (GTK_WIDGET (canvas));
++ return TRUE;
++ case GDK_2BUTTON_PRESS:
++ if (event->button.button == 1)
++ activate_entry (entry);
++ return TRUE;
++ default:
++ return FALSE;
++ }
++}
++
++static void
++panel_addto_select_first_entry (PanelAddtoCanvas *canvas)
++{
++ PanelAddtoCategory *category;
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ category = g_slist_nth_data (priv->info->categories, 0);
++ entry = g_slist_nth_data (category->entries, 0);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ select_entry (canvas, entry);
++}
++
++static gint
++panel_addto_count_visible_entries (PanelAddtoCategory *category)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint n_visible_entries = 0;
++
++ for (l = category->entries; l; l = l->next) {
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible)
++ n_visible_entries++;
++ }
++ return n_visible_entries;
++}
++
++static gint
++panel_addto_get_rank_of_nth_visible_entry (PanelAddtoCategory *category, gint n)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint seen_visible_entries = 0;
++ gint seen_entries = 0;
++ gint farthest_visible_entry = 0;
++
++ l = category->entries;
++
++ while (seen_visible_entries < n) {
++ if (!l) break;
++ seen_entries++;
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible) {
++ seen_visible_entries++;
++ farthest_visible_entry = seen_entries;
++ }
++ l = l->next;
++ }
++
++ return (farthest_visible_entry - 1);
++}
++
++static gint
++panel_addto_how_many_visible_entries_before_me (PanelAddtoCategory *category, gint rank)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint seen_entries = 0;
++ gint seen_visible_entries = 0;
++
++ l = category->entries;
++ while (seen_entries < rank) {
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible)
++ seen_visible_entries++;
++ l = l->next;
++ seen_entries++;
++ }
++ return seen_visible_entries;
++}
++
++static void
++panel_addto_select_east_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category, n_entry;
++ gint n_categories;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ if (ei->n_entry == category->n_entries - 1) {
++ if (n_category == priv->info->n_categories - 1)
++ return;
++ category = g_slist_nth_data (priv->info->categories, ei->n_category + 1);
++ entry = g_slist_nth_data (category->entries, 0);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry + 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_west_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category, n_entry;
++ gint n_categories;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ if (ei->n_entry == 0) {
++ if (n_category == 0)
++ return;
++ category = g_slist_nth_data (priv->info->categories, ei->n_category - 1);
++ entry = g_slist_nth_data (category->entries, category->n_entries - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_west_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_west_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_north_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category = 0;
++ gint n_categories;
++ gint n_visible_entries = 0;
++ gint n_visible_entries_before_me = 0;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++ CategoryInfo *catinfo;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ n_visible_entries_before_me =
++ panel_addto_how_many_visible_entries_before_me (category, ei->n_entry);
++ if (n_visible_entries_before_me + 1 - priv->items_per_row <= 0) {
++ if (n_category == 0) {
++ panel_addto_select_first_entry (canvas);
++ return;
++ }
++ n_category--;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ catinfo = category->user_data;
++ if (!catinfo->visible) {
++ while (!catinfo->visible) {
++ category = g_slist_nth_data (priv->info->categories, --n_category);
++ if (!category)
++ return;
++ catinfo = category->user_data;
++ if (!catinfo)
++ return;
++ }
++ }
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries,
++ panel_addto_get_rank_of_nth_visible_entry
++ (category,
++ ((n_visible_entries - 1) / priv->items_per_row) * priv->items_per_row
++ + ((n_visible_entries_before_me + 1) % priv->items_per_row)));
++ if (!entry)
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry - priv->items_per_row);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_south_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category = 0;
++ gint n_categories;
++ gint n_visible_entries = 0;
++ gint n_visible_entries_before_me = 0;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++ CategoryInfo *catinfo;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ n_visible_entries_before_me =
++ panel_addto_how_many_visible_entries_before_me (category, ei->n_entry);
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ if (n_visible_entries_before_me + 1 + priv->items_per_row > n_visible_entries - 1) {
++ if (n_visible_entries_before_me + 1
++ <= ((n_visible_entries - 1) / priv->items_per_row) * priv->items_per_row) {
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ } else {
++ if (n_category == priv->info->n_categories - 1)
++ return;
++ n_category++;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ catinfo = category->user_data;
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries, ei->n_entry % priv->items_per_row);
++ if (!catinfo->visible) {
++ while (!catinfo->visible) {
++ category = g_slist_nth_data (priv->info->categories, ++n_category);
++ if (!category)
++ return;
++ catinfo = category->user_data;
++ if (!catinfo)
++ return;
++ }
++ }
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries,
++ panel_addto_get_rank_of_nth_visible_entry
++ (category,
++ (n_visible_entries_before_me + 1) % priv->items_per_row));
++
++ if (!entry)
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ }
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry + priv->items_per_row);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static gboolean
++cb_canvas_event (GnomeCanvasItem *item, GdkEvent *event, PanelAddtoDialog *dialog)
++{
++ PanelAddtoCanvas *canvas = (PanelAddtoCanvas *) dialog->canvas;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ EntryInfo *ei = NULL;
++ gint n_category, n_entry;
++ gint n_categories, n_entries;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (event->type == GDK_BUTTON_PRESS) {
++ gtk_drag_source_unset (GTK_WIDGET (canvas));
++ select_entry (canvas, NULL);
++ gtk_widget_grab_focus (GTK_WIDGET (dialog->canvas));
++ return TRUE;
++ }
++
++ if (event->type != GDK_KEY_PRESS)
++ return FALSE;
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (priv->selected) {
++ ei = priv->selected->user_data;
++ current_category = g_slist_nth_data (priv->info->categories, ei->n_category);
++ n_entries = current_category->n_entries;
++ }
++
++ switch (event->key.keyval) {
++ case GDK_KP_Right:
++ case GDK_Right:
++ if (priv->rtl)
++ panel_addto_select_west_entry (ei, canvas);
++ else
++ panel_addto_select_east_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Left:
++ case GDK_Left:
++ if (priv->rtl)
++ panel_addto_select_east_entry (ei, canvas);
++ else
++ panel_addto_select_west_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Down:
++ case GDK_Down:
++ panel_addto_select_south_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Up:
++ case GDK_Up:
++ panel_addto_select_north_entry (ei, canvas);
++ return TRUE;
++ case GDK_Tab:
++ case GDK_KP_Tab:
++ case GDK_ISO_Left_Tab:
++ gtk_widget_grab_focus (dialog->search_entry);
++ break;
++ case GDK_Return:
++ case GDK_KP_Enter:
++ if (priv->selected)
++ activate_entry (priv->selected);
++
++ return TRUE;
++ break;
++ case GDK_Escape:
++ panel_addto_dialog_response (dialog->addto_dialog,
++ GTK_RESPONSE_CANCEL,
++ dialog);
++ return TRUE;
++ default:
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++
++static void
++calculate_item_width (PanelAddtoCanvas *canvas, EntryInfo *ei)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PangoLayout *layout;
++ PangoRectangle rectangle;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ layout = GNOME_CANVAS_TEXT (ei->text)->layout;
++
++ pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
++ pango_layout_set_width (layout, -1);
++ pango_layout_get_pixel_extents (layout, NULL, &rectangle);
++
++ /* If its too big wrap at the max and regen to find the layout */
++ if (rectangle.width > MAX_ITEM_WIDTH) {
++ pango_layout_set_width (layout, MAX_ITEM_WIDTH * PANGO_SCALE);
++ pango_layout_get_pixel_extents (layout, NULL, &rectangle);
++ rectangle.width = MAX_ITEM_WIDTH;
++ }
++
++ ei->text_height = rectangle.height;
++
++ priv->max_item_width = MAX (priv->max_item_width, rectangle.width);
++}
++
++static void
++calculate_item_height (PanelAddtoCanvas *canvas, EntryInfo *ei)
++{
++ PanelAddtoCanvasPrivate *priv;
++ gint item_height;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (ei->pixbuf)
++ priv->max_icon_height = MAX (priv->max_icon_height, ei->icon_height);
++
++ item_height = ei->icon_height + ei->text_height;
++ priv->max_item_height = MAX (priv->max_item_height, item_height);
++}
++
++static void
++calculate_sizes (PanelAddtoCanvas *canvas)
++{
++ GSList *l, *m;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ priv->max_item_height = 0;
++ priv->max_icon_height = 0;
++ priv->max_item_width = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ for (m = current_category->entries; m; m = m->next) {
++ current_entry = m->data;
++ EntryInfo *ei = current_entry->user_data;
++ calculate_item_width (canvas, ei);
++ calculate_item_height (canvas, ei);
++ }
++ }
++}
++
++static void
++gnome_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy)
++{
++ double translate[6];
++
++ g_return_if_fail (item != NULL);
++ g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
++
++ art_affine_translate (translate, dx, dy);
++
++ gnome_canvas_item_affine_absolute (item, translate);
++}
++
++static guchar
++lighten_component (guchar cur_value)
++{
++ int new_value = cur_value;
++ new_value += 24 + (new_value >> 3);
++ if (new_value > 255) {
++ new_value = 255;
++ }
++ return (guchar) new_value;
++}
++
++static GdkPixbuf *
++create_spotlight_pixbuf (GdkPixbuf* src)
++{
++ GdkPixbuf *dest;
++ int i, j;
++ int width, height, has_alpha, src_row_stride, dst_row_stride;
++ guchar *target_pixels, *original_pixels;
++ guchar *pixsrc, *pixdest;
++
++ g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL);
++ g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src)
++ && gdk_pixbuf_get_n_channels (src) == 3)
++ || (gdk_pixbuf_get_has_alpha (src)
++ && gdk_pixbuf_get_n_channels (src) == 4), NULL);
++ g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (src) == 8, NULL);
++
++ dest = gdk_pixbuf_copy (src);
++
++ has_alpha = gdk_pixbuf_get_has_alpha (src);
++ width = gdk_pixbuf_get_width (src);
++ height = gdk_pixbuf_get_height (src);
++ dst_row_stride = gdk_pixbuf_get_rowstride (dest);
++ src_row_stride = gdk_pixbuf_get_rowstride (src);
++ target_pixels = gdk_pixbuf_get_pixels (dest);
++ original_pixels = gdk_pixbuf_get_pixels (src);
++
++ for (i = 0; i < height; i++) {
++ pixdest = target_pixels + i * dst_row_stride;
++ pixsrc = original_pixels + i * src_row_stride;
++ for (j = 0; j < width; j++) {
++ *pixdest++ = lighten_component (*pixsrc++);
++ *pixdest++ = lighten_component (*pixsrc++);
++ *pixdest++ = lighten_component (*pixsrc++);
++ if (has_alpha) {
++ *pixdest++ = *pixsrc++;
++ }
++ }
++ }
++
++ return dest;
++}
++
++static void
++build_canvas (PanelAddtoCanvas *canvas)
++{
++ GSList *l, *m;
++ EntryInfo *ei;
++ PanelAddtoDialog *dialog;
++ PanelAddtoCategory *current_category = NULL;
++ PanelAddtoInformation *current_info = NULL;
++ PanelAddtoEntry *current_entry = NULL;
++ PanelAddtoCanvasPrivate *priv;
++ GnomeCanvas *gcanvas;
++ GnomeCanvasGroup *hidden_group;
++ int i, j, index;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ gcanvas = GNOME_CANVAS (canvas);
++ current_category = priv->info->categories->data;
++ current_entry = current_category->entries->data;
++ dialog = current_entry->dialog;
++ index = 0;
++
++ priv->under_cover = gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ panel_addto_event_box_get_type(),
++ NULL);
++
++ current_info = priv->info;
++ gnome_canvas_item_grab_focus (GNOME_CANVAS_ITEM (gnome_canvas_root (gcanvas)));
++ g_signal_connect (gnome_canvas_root (gcanvas), "event",
++ G_CALLBACK (cb_canvas_event), dialog);
++
++ hidden_group = GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ gnome_canvas_group_get_type (),
++ NULL));
++ for (l = priv->info->categories, i = 0; l; l = l->next, i++) {
++
++ CategoryInfo *catinfo;
++ current_category = l->data;
++
++ if (current_category->user_data == NULL)
++ current_category->user_data = g_new (CategoryInfo, 1);
++
++ catinfo = current_category->user_data;
++ catinfo->group = NULL;
++ catinfo->title = NULL;
++ catinfo->line = NULL;
++
++ catinfo->group =
++ GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ gnome_canvas_group_get_type (),
++ NULL));
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (catinfo->group), 0, BORDERS);
++
++ catinfo->line = gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_rect_get_type (),
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++
++ catinfo->title = NULL;
++
++ if (current_category && (priv->info->n_categories != 1)) {
++ char *label = g_strdup_printf ("%s", current_category->title);
++ catinfo->title = gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_text_get_type (),
++ "text", current_category->title,
++ "markup", label,
++ "anchor", GTK_ANCHOR_NW,
++ NULL);
++ g_free (label);
++ }
++
++ for (m = current_category->entries, j = 0; m; m = m->next, j++) {
++ current_entry = m->data;
++
++ if (current_entry->user_data == NULL)
++ current_entry->user_data = g_new0 (EntryInfo, 1);
++
++ ei = current_entry->user_data;
++
++ ei->canvas = canvas;
++ ei->group = GNOME_CANVAS_GROUP (
++ gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_group_get_type (),
++ NULL));
++ ei->selection = gnome_canvas_item_new (
++ ei->group,
++ PANEL_ADDTO_TYPE_ROUNDED_RECT,
++ NULL);
++
++ if (current_entry->title) {
++ ei->text = gnome_canvas_item_new (ei->group,
++ gnome_canvas_text_get_type (),
++ "anchor", GTK_ANCHOR_NW,
++ "justification", GTK_JUSTIFY_CENTER,
++ "clip", TRUE,
++ NULL);
++ pango_layout_set_alignment (GNOME_CANVAS_TEXT (ei->text)->layout,
++ PANGO_ALIGN_CENTER);
++ pango_layout_set_justify (GNOME_CANVAS_TEXT (ei->text)->layout,
++ FALSE);
++ g_object_set (ei->text,
++ "text", current_entry->title,
++ NULL);
++ } else
++ ei->text = NULL;
++
++ if (current_entry->icon_pixbuf) {
++ GdkPixbuf *pixbuf = current_entry->icon_pixbuf;
++ GdkPixbuf *highlight_pixbuf =
++ create_spotlight_pixbuf (pixbuf);
++
++ ei->icon_height = gdk_pixbuf_get_height (pixbuf);
++ ei->icon_width = gdk_pixbuf_get_width (pixbuf);
++ ei->pixbuf = gnome_canvas_item_new (ei->group,
++ gnome_canvas_pixbuf_get_type (),
++ "pixbuf", pixbuf,
++ NULL);
++ g_object_unref (pixbuf);
++ ei->highlight_pixbuf = gnome_canvas_item_new (ei->group,
++ gnome_canvas_pixbuf_get_type (),
++ "pixbuf", highlight_pixbuf,
++ NULL);
++ g_object_unref (highlight_pixbuf);
++ } else {
++ ei->pixbuf = NULL;
++ ei->highlight_pixbuf = NULL;
++ }
++
++ ei->cover = gnome_canvas_item_new (ei->group,
++ panel_addto_event_box_get_type(),
++ NULL);
++ calculate_item_width (canvas, ei);
++ calculate_item_height (canvas, ei);
++
++ ei->n_category = i;
++ ei->n_entry = j;
++ ei->index = index;
++
++ setup_entry (canvas, current_entry);
++
++ g_signal_connect (ei->cover, "event",
++ G_CALLBACK (cover_event),
++ current_entry);
++ index++;
++ }
++ }
++
++ dialog = current_entry->dialog;
++
++ g_signal_connect (G_OBJECT (canvas), "selection-changed",
++ G_CALLBACK (panel_addto_selection_changed), current_entry->dialog);
++}
++
++
++static const char *
++panel_addto_utf8_casestrstr (const char *haystack, const char *needle)
++{
++
++ if (!haystack)
++ return NULL;
++
++ haystack = g_utf8_strdown (haystack, -1);
++ needle = g_utf8_strdown (needle, -1);
++
++ const char *s;
++ gsize i;
++ gsize haystack_len = g_utf8_strlen (haystack, -1);
++ gsize needle_len = g_utf8_strlen (needle, -1);
++ int needle_size = strlen (needle);
++
++ if (needle_len > haystack_len)
++ return NULL;
++
++ s = haystack;
++ for (i = 0; i <= haystack_len - needle_len; i++) {
++ if (strncmp (s, needle, needle_size) == 0)
++ return s;
++ s = g_utf8_next_char (s);
++ }
++
++ return NULL;
++}
++
++void
++panel_addto_relayout_for_search (GtkWidget *search_entry, PanelAddtoDialog *dialog)
++{
++ gchar *search_text;
++ PanelAddtoCanvasPrivate *priv;
++
++ search_text = g_malloc (strlen ((gchar*) gtk_entry_get_text (GTK_ENTRY (search_entry))) + 1);
++ g_stpcpy (search_text, gtk_entry_get_text (GTK_ENTRY (search_entry)));
++ g_strchomp (search_text);
++ if (dialog->canvas) {
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ priv->search_text = search_text;
++ gtk_widget_queue_resize (GTK_WIDGET (dialog->canvas));
++ }
++}
++
++void
++panel_addto_activate_from_searchbar (GtkWidget *search_entry, PanelAddtoDialog *dialog)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ if (priv->selected)
++ activate_entry (priv->selected);
++}
++
++/* If we can't find the search query in the applet's name, in the applet's
++ * description, nor in the applet's category, then the applet has to be hidden.
++ */
++
++static gboolean
++panel_addto_entry_must_be_hidden (PanelAddtoEntry *entry, const gchar **search_terms)
++{
++ gint i;
++ gint nb_search_terms = 0, nb_found = 0;
++ gboolean search_is_null = TRUE;
++
++ for (i = 0; search_terms[i] != NULL; i++) {
++ nb_search_terms ++;
++ search_is_null = FALSE;
++ if (
++ (entry->title
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->title, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL)))
++ || (entry->comment
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->comment, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL)))
++ || (entry->category->title
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->category->title, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL))))
++ nb_found++;
++ }
++
++ if (search_is_null || nb_found == nb_search_terms)
++ return FALSE;
++
++ return TRUE;
++}
++
++/* A category canvas item contains all the elements
++ * for the category, as well as the title and a separator
++ */
++static void
++relayout_category (PanelAddtoCanvas *canvas, CategoryInfo *catinfo,
++ gint vert_pos, gint *category_vert_pos)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (catinfo->group),
++ 0, vert_pos);
++
++ if (catinfo->line) {
++ gnome_canvas_item_move_absolute (catinfo->line, BORDERS, ABOVE_LINE_SPACING);
++
++ gnome_canvas_item_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++ }
++
++ if (catinfo->title) {
++ double text_height, text_width;
++
++ g_object_get (catinfo->title,
++ "text_height", &text_height,
++ "text_width", &text_width,
++ NULL);
++
++ *category_vert_pos += text_height; /* move it down 1 line */
++ gnome_canvas_item_move_absolute (catinfo->title,
++ (priv->rtl) ? priv->max_width - BORDERS - text_width : BORDERS,
++ *category_vert_pos);
++ *category_vert_pos += text_height + text_height/2 + UNDER_TITLE_SPACING;
++ }
++}
++
++static void
++relayout_item (PanelAddtoCanvas *canvas, EntryInfo *ei,
++ gint category_horiz_pos, gint category_vert_pos)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (ei->group),
++ category_horiz_pos,
++ category_vert_pos);
++
++ gnome_canvas_item_set (ei->selection,
++ "x2", (double) priv->max_item_width + 2 * PAD,
++ "y2", (double) ei->text_height + 1, /* expand it down slightly */
++ NULL);
++
++ gnome_canvas_item_move_absolute (ei->selection, -PAD, priv->max_icon_height);
++
++ if (ei->text) {
++ /* canvas asks layout for its extent, layout gives real
++ * size, not fixed width and drawing gets confused.
++ */
++ gnome_canvas_item_set (ei->text,
++ "clip_width", (double) priv->max_item_width,
++ "clip_height", (double) priv->max_item_height,
++ NULL);
++
++ /* text is centered by pango */
++ pango_layout_set_width (GNOME_CANVAS_TEXT (ei->text)->layout,
++ (gint) priv->max_item_width * PANGO_SCALE);
++
++ gnome_canvas_item_move_absolute (ei->text,
++ 0, priv->max_icon_height);
++ }
++
++ if (ei->pixbuf) {
++ /* manually center the icon */
++ gnome_canvas_item_move_absolute (ei->pixbuf,
++ priv->max_item_width / 2 - ei->icon_width / 2, 0);
++ gnome_canvas_item_move_absolute (ei->highlight_pixbuf,
++ priv->max_item_width / 2 - ei->icon_width / 2, 0);
++ }
++
++ /* cover the item */
++ gnome_canvas_item_set (ei->cover,
++ "x2", (double) priv->max_item_width,
++ "y2", (double) priv->max_item_height,
++ NULL);
++}
++
++static void
++relayout_canvas (PanelAddtoCanvas *canvas)
++{
++ gint entry;
++ gint vert_pos, category_vert_pos, category_horiz_pos;
++ gint real_width;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++ CategoryInfo *catinfo;
++ EntryInfo *ei;
++ GSList *l, *m;
++ gboolean at_least_one_found, first_shown_category, first_shown_entry;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ real_width = priv->max_width - 2 * BORDERS + ITEMS_SEPARATION;
++ priv->items_per_row = real_width / ((gint) priv->max_item_width + ITEMS_SEPARATION);
++
++ vert_pos = BORDERS;
++
++ const gchar *search_text = priv->search_text;
++ gchar **search_terms;
++ search_terms = search_text ? g_strsplit (search_text, " ", 0) : NULL;
++
++ first_shown_category = TRUE;
++ first_shown_entry = TRUE;
++
++ for (l = priv->info->categories; l; l = l->next) {
++
++ at_least_one_found = FALSE;
++ category_vert_pos = 0;
++
++ category_horiz_pos = (priv->rtl) ? priv->max_width - (gint) priv->max_item_width - BORDERS : BORDERS;
++
++ current_category = l->data;
++ catinfo = current_category->user_data;
++
++ relayout_category (canvas, catinfo, vert_pos, &category_vert_pos);
++ category_vert_pos += UNDER_LINE_SPACING;
++
++ for (m = current_category->entries, entry = 0; m; m = m->next, entry++) {
++
++ current_entry = m->data;
++ ei = current_entry->user_data;
++
++ /* we don't want the first item to wrap, it would
++ be too separated from the section title */
++
++ if (!search_text || !panel_addto_entry_must_be_hidden (current_entry, (const gchar **)search_terms)) {
++ at_least_one_found = TRUE;
++ gnome_canvas_item_show (GNOME_CANVAS_ITEM (ei->group));
++ ei->visible = TRUE;
++ if ((entry > 0) &&
++ ((priv->items_per_row == 0) ||
++ (priv->items_per_row > 0 && (entry % priv->items_per_row == 0)))) {
++
++ category_horiz_pos = (priv->rtl) ?
++ priv->max_width - (gint) priv->max_item_width - BORDERS : BORDERS;
++ category_vert_pos += (gint) priv->max_item_height + ITEMS_SEPARATION;
++ }
++
++ relayout_item (canvas, ei, category_horiz_pos, category_vert_pos);
++
++ if (priv->rtl)
++ category_horiz_pos -= (gint) priv->max_item_width + ITEMS_SEPARATION;
++ else
++ category_horiz_pos += (gint) priv->max_item_width + ITEMS_SEPARATION;
++
++ /* If the user is actually using the search bar, select
++ * the first shown entry.
++ */
++ if (search_text && first_shown_entry) {
++ select_entry (canvas, current_entry);
++ first_shown_entry = FALSE;
++ }
++ } else {
++ gnome_canvas_item_hide (GNOME_CANVAS_ITEM (ei->group));
++ ei->visible = FALSE;
++ entry --;
++ }
++
++ }
++ if (at_least_one_found) {
++ gnome_canvas_item_show (GNOME_CANVAS_ITEM (catinfo->group));
++ catinfo->visible = TRUE;
++ category_vert_pos += (gint) priv->max_item_height;
++ vert_pos += category_vert_pos + ITEMS_SEPARATION;
++
++ if (first_shown_category) {
++ g_object_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) 0,
++ NULL);
++ first_shown_category = FALSE;
++ } else {
++ g_object_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++ }
++
++ } else {
++ gnome_canvas_item_hide (GNOME_CANVAS_ITEM (catinfo->group));
++ catinfo->visible = FALSE;
++ }
++ }
++
++ /* substract the last ITEMS_SEPARATION to
++ adjust the canvas size a bit more */
++ vert_pos -= ITEMS_SEPARATION;
++
++ priv->height = MAX (vert_pos, priv->min_height);
++ priv->width = priv->max_width;
++}
++
++
++static void
++set_style (PanelAddtoCanvas *canvas, gboolean font_changed)
++{
++ GSList *l, *m;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++ PanelAddtoCanvasPrivate *priv;
++ GtkWidget *widget = GTK_WIDGET (canvas);
++
++
++ if (!GTK_WIDGET_REALIZED (widget))
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ CategoryInfo *catinfo = current_category->user_data;
++
++ if (catinfo->line) {
++ g_object_set (catinfo->line,
++ "fill_color_gdk", &widget->style->text_aa[GTK_STATE_NORMAL],
++ NULL);
++ }
++ if (catinfo->title) {
++ g_object_set (catinfo->title,
++ "fill_color_gdk", &widget->style->text[GTK_STATE_NORMAL],
++ NULL);
++
++ if (font_changed)
++ g_object_set (catinfo->title,
++ "font", NULL,
++ NULL);
++ }
++
++ for (m = current_category->entries; m; m = m->next) {
++ current_entry = m->data;
++ EntryInfo *entryinfo = current_entry->user_data;
++ if (font_changed && entryinfo->text)
++ g_object_set (entryinfo->text,
++ "font", NULL,
++ NULL);
++ setup_entry (canvas, current_entry);
++ }
++ }
++
++ if (font_changed) {
++ calculate_sizes (canvas);
++ relayout_canvas (canvas);
++ }
++}
++
++
++GtkWidget*
++panel_addto_canvas_new (PanelAddtoInformation *info)
++{
++
++ return g_object_new (PANEL_ADDTO_TYPE_CANVAS,
++ "info", info,
++ NULL);
++}
++
++/* Accessibility support */
++
++static gpointer accessible_parent_class;
++static gpointer accessible_item_parent_class;
++
++enum {
++ ACTION_ACTIVATE,
++ LAST_ACTION
++};
++
++typedef struct {
++ AtkObject parent;
++
++ PanelAddtoEntry *entry;
++ AtkStateSet *state_set;
++
++ guint action_idle_handler;
++} PanelAddtoCanvasItemAccessible;
++
++typedef struct {
++ AtkObjectClass parent_class;
++} PanelAddtoCanvasItemAccessibleClass;
++
++static const gchar *const action_names[] =
++{
++ "activate",
++ NULL
++};
++
++static const gchar *const action_descriptions[] =
++{
++ "Activate item",
++ NULL
++};
++
++static void
++panel_addto_canvas_item_accessible_get_extents (AtkComponent *component,
++ gint *x,
++ gint *y,
++ gint *width,
++ gint *height,
++ AtkCoordType coord_type)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvas *canvas;
++ GnomeCanvasItem *cover;
++ AtkObject *parent_object;
++ gint p_x, p_y;
++
++ item = (PanelAddtoCanvasItemAccessible *) component;
++
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++ parent_object = gtk_widget_get_accessible (GTK_WIDGET (canvas));
++ atk_component_get_position (ATK_COMPONENT (parent_object), &p_x, &p_y, coord_type);
++
++
++ /* the cover pretty much represents the item size */
++
++
++ cover = GNOME_CANVAS_ITEM (((EntryInfo *)item->entry->user_data)->cover);
++
++ *x = p_x + cover->x1;
++ *y = p_y + cover->y1;
++ *width = cover->x2 - cover->x1;
++ *height = cover->y2 - cover->y1;
++}
++
++static void
++atk_component_item_interface_init (AtkComponentIface *iface)
++{
++ iface->get_extents = panel_addto_canvas_item_accessible_get_extents;
++}
++
++static gboolean
++idle_do_action (gpointer data)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ item = (PanelAddtoCanvasItemAccessible *) data;
++
++ item->action_idle_handler = 0;
++ activate_entry (item->entry);
++
++ return FALSE;
++}
++
++
++static gboolean
++panel_addto_canvas_item_accessible_action_do_action (AtkAction *action,
++ gint index)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ if (index < 0 || index >= LAST_ACTION)
++ return FALSE;
++
++ item = (PanelAddtoCanvasItemAccessible *) action;
++
++ switch (index) {
++ case ACTION_ACTIVATE:
++ if (!item->action_idle_handler)
++ item->action_idle_handler = g_idle_add (idle_do_action, item);
++ break;
++ default:
++ g_assert_not_reached ();
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++static gint
++panel_addto_canvas_item_accessible_action_get_n_actions (AtkAction *action)
++{
++ return LAST_ACTION;
++}
++
++static const gchar *
++panel_addto_canvas_item_accessible_action_get_description (AtkAction *action,
++ gint index)
++{
++ if (index < 0 || index >= LAST_ACTION)
++ return NULL;
++
++ return action_descriptions[index];
++}
++
++static const gchar *
++panel_addto_canvas_item_accessible_action_get_name (AtkAction *action,
++ gint index)
++{
++ if (index < 0 || index >= LAST_ACTION)
++ return NULL;
++
++ return action_names[index];
++}
++
++static void
++atk_action_item_interface_init (AtkActionIface *iface)
++{
++ iface->do_action = panel_addto_canvas_item_accessible_action_do_action;
++ iface->get_n_actions = panel_addto_canvas_item_accessible_action_get_n_actions;
++ iface->get_description = panel_addto_canvas_item_accessible_action_get_description;
++ iface->get_name = panel_addto_canvas_item_accessible_action_get_name;
++}
++
++static gint
++panel_addto_canvas_item_accessible_get_index_in_parent (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ return ((EntryInfo *) item->entry->user_data)->index;
++}
++
++static G_CONST_RETURN gchar*
++panel_addto_canvas_item_accessible_get_name (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ if (object->name)
++ return object->name;
++ else {
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ if (item->entry && item->entry->title)
++ return item->entry->title;
++ else
++ return "Item with no description";
++ }
++}
++
++static AtkObject*
++panel_addto_canvas_item_accessible_get_parent (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvas *canvas;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++
++ return gtk_widget_get_accessible (GTK_WIDGET (canvas));
++}
++
++static AtkStateSet*
++panel_addto_canvas_item_accessible_ref_state_set (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (item->entry == priv->selected)
++ atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSED);
++ else
++ atk_state_set_remove_state (item->state_set, ATK_STATE_FOCUSED);
++
++ return g_object_ref (item->state_set);
++}
++
++static void
++panel_addto_canvas_item_accessible_class_init (AtkObjectClass *class)
++{
++ GObjectClass *object_class;
++
++ accessible_item_parent_class = g_type_class_peek_parent (class);
++
++ object_class = (GObjectClass *)class;
++
++ class->get_index_in_parent = panel_addto_canvas_item_accessible_get_index_in_parent;
++ class->get_name = panel_addto_canvas_item_accessible_get_name;
++ class->get_parent = panel_addto_canvas_item_accessible_get_parent;
++ class->ref_state_set = panel_addto_canvas_item_accessible_ref_state_set;
++}
++
++static void
++panel_addto_canvas_item_accessible_object_init (PanelAddtoCanvasItemAccessible *item)
++{
++ item->state_set = atk_state_set_new ();
++
++ atk_state_set_add_state (item->state_set, ATK_STATE_ENABLED);
++ atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSABLE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_SENSITIVE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_SELECTABLE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_VISIBLE);
++
++ item->action_idle_handler = 0;
++}
++
++static GType
++panel_addto_canvas_item_accessible_get_type (void)
++{
++ static GType type = 0;
++
++ if (type == 0) {
++ static const GTypeInfo info = {
++ sizeof (PanelAddtoCanvasItemAccessibleClass),
++ (GBaseInitFunc) NULL, /* base init */
++ (GBaseFinalizeFunc) NULL, /* base finalize */
++ (GClassInitFunc) panel_addto_canvas_item_accessible_class_init, /* class init */
++ (GClassFinalizeFunc) NULL, /* class finalize */
++ NULL, /* class data */
++ sizeof (PanelAddtoCanvasItemAccessible), /* instance size */
++ 0, /* nb preallocs */
++ (GInstanceInitFunc) panel_addto_canvas_item_accessible_object_init, /* instance init */
++ NULL /* value table */
++ };
++
++ static const GInterfaceInfo atk_component_info = {
++ (GInterfaceInitFunc) atk_component_item_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ static const GInterfaceInfo atk_action_info = {
++ (GInterfaceInitFunc) atk_action_item_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ type = g_type_register_static (ATK_TYPE_OBJECT,
++ "PanelAddtoCanvasItemAccessible", &info, 0);
++
++ g_type_add_interface_static (type, ATK_TYPE_COMPONENT,
++ &atk_component_info);
++ g_type_add_interface_static (type, ATK_TYPE_ACTION,
++ &atk_action_info);
++ }
++
++ return type;
++}
++
++static gint
++panel_addto_canvas_accessible_get_n_children (AtkObject *accessible)
++{
++ GSList *l;
++ PanelAddtoCategory *current_category;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ gint count;
++
++ widget = GTK_ACCESSIBLE (accessible)->widget;
++
++ if (!widget)
++ return 0;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ count = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ count += current_category->n_entries;
++ }
++
++ return count;
++}
++
++static PanelAddtoEntry*
++panel_addto_canvas_accessible_get_entry (PanelAddtoCanvas *canvas, gint index)
++{
++ GSList *l;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ gint count;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ count = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ if (index >= count &&
++ index < count + current_category->n_entries) {
++ return g_slist_nth_data (current_category->entries, index - count);
++ } else
++ count += current_category->n_entries;
++ }
++
++ return NULL;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_child (AtkObject *accessible, gint index)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ AtkObject *object;
++
++ widget = GTK_ACCESSIBLE (accessible)->widget;
++
++ if (!widget)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ entry = panel_addto_canvas_accessible_get_entry (canvas, index);
++
++ if (!entry)
++ return NULL;
++
++ object = g_hash_table_lookup (priv->accessible_children, &index);
++
++ if (!object) {
++ object = g_object_new (panel_addto_canvas_item_accessible_get_type (), NULL);
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ object->role = ATK_ROLE_ICON;
++ item->entry = entry;
++
++ g_hash_table_insert (priv->accessible_children,
++ &((EntryInfo *) entry->user_data)->index, object);
++ }
++
++ return g_object_ref (object);
++}
++
++static void
++panel_addto_canvas_accessible_initialize (AtkObject *accessible, gpointer data)
++{
++ if (ATK_OBJECT_CLASS (accessible_parent_class)->initialize)
++ ATK_OBJECT_CLASS (accessible_parent_class)->initialize (accessible, data);
++
++ accessible->role = ATK_ROLE_LAYERED_PANE;
++}
++
++static void
++panel_addto_canvas_accessible_class_init (AtkObjectClass *class)
++{
++ GObjectClass *object_class;
++ GtkAccessibleClass *accessible_class;
++
++ accessible_parent_class = g_type_class_peek_parent (class);
++
++ object_class = (GObjectClass *)class;
++ accessible_class = (GtkAccessibleClass *)class;
++
++ class->get_n_children = panel_addto_canvas_accessible_get_n_children;
++ class->ref_child = panel_addto_canvas_accessible_ref_child;
++ class->initialize = panel_addto_canvas_accessible_initialize;
++}
++
++static gboolean
++panel_addto_canvas_accessible_add_selection (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ PanelAddtoEntry *entry;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ entry = panel_addto_canvas_accessible_get_entry (canvas, i);
++ select_entry (canvas, entry);
++
++ return TRUE;
++}
++
++static gboolean
++panel_addto_canvas_accessible_clear_selection (AtkSelection *selection)
++{
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ select_entry (canvas, NULL);
++
++ return TRUE;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_selection (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (priv->selected)
++ return atk_object_ref_accessible_child (gtk_widget_get_accessible (widget),
++ ((EntryInfo *)priv->selected->user_data)->index);
++ return NULL;
++}
++
++static gint
++panel_addto_canvas_accessible_get_selection_count (AtkSelection *selection)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return 0;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ return (priv->selected) ? 1 : 0;
++}
++
++static gboolean
++panel_addto_canvas_accessible_is_child_selected (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ return (priv->selected == panel_addto_canvas_accessible_get_entry (canvas, i));
++}
++
++static gboolean
++panel_addto_canvas_accessible_remove_selection (AtkSelection *selection, gint i)
++{
++ /* There can be only one item selected */
++ return panel_addto_canvas_accessible_clear_selection (selection);
++}
++
++static gboolean
++panel_addto_canvas_accessible_select_all_selection (AtkSelection *selection)
++{
++ /* This can't happen */
++ return FALSE;
++}
++
++static void
++panel_addto_canvas_accessible_selection_interface_init (AtkSelectionIface *iface)
++{
++ iface->add_selection = panel_addto_canvas_accessible_add_selection;
++ iface->clear_selection = panel_addto_canvas_accessible_clear_selection;
++ iface->ref_selection = panel_addto_canvas_accessible_ref_selection;
++ iface->get_selection_count = panel_addto_canvas_accessible_get_selection_count;
++ iface->is_child_selected = panel_addto_canvas_accessible_is_child_selected;
++ iface->remove_selection = panel_addto_canvas_accessible_remove_selection;
++ iface->select_all_selection = panel_addto_canvas_accessible_select_all_selection;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_accessible_at_point (AtkComponent *component,
++ gint x,
++ gint y,
++ AtkCoordType coord_type)
++{
++ GSList *l, *m;
++ GtkWidget *widget;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ PanelAddtoCategory *current_category;
++ EntryInfo *entry;
++ gint x_pos, y_pos, x_w, y_w;
++
++ widget = GTK_ACCESSIBLE (component)->widget;
++
++ if (widget == NULL)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type);
++ x_w = x - x_pos;
++ y_w = y - y_pos;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ for (m = current_category->entries; m; m = m->next) {
++ entry = (EntryInfo *) m->data;
++
++ if (x_w > entry->cover->x1 &&
++ x_w < entry->cover->x2 &&
++ y_w > entry->cover->y1 &&
++ y_w < entry->cover->y2)
++ return panel_addto_canvas_accessible_ref_child (ATK_OBJECT (component), entry->index);
++ }
++ }
++
++ return NULL;
++}
++
++static void
++atk_component_interface_init (AtkComponentIface *iface)
++{
++ iface->ref_accessible_at_point = panel_addto_canvas_accessible_ref_accessible_at_point;
++}
++
++static GType
++panel_addto_canvas_accessible_get_type (void)
++{
++ static GType type = 0;
++ AtkObjectFactory *factory;
++ GType derived_type;
++ GTypeQuery query;
++ GType derived_atk_type;
++
++ if (type == 0) {
++ static GTypeInfo info = {
++ 0, /* class size */
++ (GBaseInitFunc) NULL, /* base init */
++ (GBaseFinalizeFunc) NULL, /* base finalize */
++ (GClassInitFunc) panel_addto_canvas_accessible_class_init,
++ (GClassFinalizeFunc) NULL, /* class finalize */
++ NULL, /* class data */
++ 0, /* instance size */
++ 0, /* nb preallocs */
++ (GInstanceInitFunc) NULL, /* instance init */
++ NULL /* value table */
++ };
++
++ static const GInterfaceInfo atk_component_info = {
++ (GInterfaceInitFunc) atk_component_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ static const GInterfaceInfo atk_selection_info = {
++ (GInterfaceInitFunc) panel_addto_canvas_accessible_selection_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ derived_type = g_type_parent (PANEL_ADDTO_TYPE_CANVAS);
++ factory = atk_registry_get_factory (atk_get_default_registry (),
++ derived_type);
++
++ derived_atk_type = atk_object_factory_get_accessible_type (factory);
++ g_type_query (derived_atk_type, &query);
++
++ info.class_size = query.class_size;
++ info.instance_size = query.instance_size;
++
++ type = g_type_register_static (derived_atk_type,
++ "PanelAddtoCanvasAccessible",
++ &info, 0);
++
++ g_type_add_interface_static (type,
++ ATK_TYPE_COMPONENT,
++ &atk_component_info);
++ g_type_add_interface_static (type,
++ ATK_TYPE_SELECTION,
++ &atk_selection_info);
++ }
++
++ return type;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_new (GObject *object)
++{
++ AtkObject *accessible;
++
++ accessible = g_object_new (panel_addto_canvas_accessible_get_type (), NULL);
++ atk_object_initialize (accessible, object);
++
++ return accessible;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_factory_create_accessible (GObject *object)
++{
++ return panel_addto_canvas_accessible_new (object);
++}
++
++static void
++panel_addto_canvas_accessible_factory_class_init (AtkObjectFactoryClass *class)
++{
++ class->create_accessible = panel_addto_canvas_accessible_factory_create_accessible;
++ class->get_accessible_type = panel_addto_canvas_accessible_get_type;
++}
++
++static GType
++panel_addto_canvas_accessible_factory_get_type (void)
++{
++ static GType type = 0;
++
++ if (type == 0) {
++ static const GTypeInfo info = {
++ sizeof (AtkObjectFactoryClass),
++ NULL, /* base_init */
++ NULL, /* base_finalize */
++ (GClassInitFunc) panel_addto_canvas_accessible_factory_class_init,
++ NULL, /* class_finalize */
++ NULL, /* class_data */
++ sizeof (AtkObjectFactory),
++ 0, /* n_preallocs */
++ NULL, NULL
++ };
++
++ type = g_type_register_static (ATK_TYPE_OBJECT_FACTORY,
++ "PanelAddtoCanvasAccessibleFactory",
++ &info, 0);
++ }
++
++ return type;
++}
++
++static AtkObject*
++panel_addto_canvas_get_accessible (GtkWidget *widget)
++{
++ static gboolean already_here = FALSE;
++
++ if (!already_here) {
++ AtkObjectFactory *factory;
++ AtkRegistry *registry;
++ GType derived_type;
++ GType derived_atk_type;
++
++ already_here = TRUE;
++
++ derived_type = g_type_parent (PANEL_ADDTO_TYPE_CANVAS);
++
++ registry = atk_get_default_registry ();
++ factory = atk_registry_get_factory (registry, derived_type);
++
++ derived_atk_type = atk_object_factory_get_accessible_type (factory);
++
++ if (g_type_is_a (derived_atk_type, GTK_TYPE_ACCESSIBLE)) {
++ atk_registry_set_factory_type (registry,
++ PANEL_ADDTO_TYPE_CANVAS,
++ panel_addto_canvas_accessible_factory_get_type ());
++ }
++ }
++
++ return (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->get_accessible) (widget);
++}
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-canvas.h gnome-panel-2.14.1.new/gnome-panel/panel-addto-canvas.h
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-canvas.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-canvas.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,88 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* Copyright (C) 2005 Carlos Garnacho
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Authors: Jody Goldberg
++ * Carlos Garnacho Parro
++ * Manu Cornet
++ */
++
++#ifndef PANEL_ADDTO_CANVAS_H
++#define PANEL_ADDTO_CANVAS_H
++
++#include
++#include
++#include "panel-addto.h"
++
++G_BEGIN_DECLS
++
++#define PANEL_ADDTO_TYPE_CANVAS (panel_addto_canvas_get_type ())
++#define PANEL_ADDTO_CANVAS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvas))
++#define PANEL_ADDTO_CANVAS_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasClass))
++#define PANEL_ADDTO_IS_CANVAS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PANEL_ADDTO_TYPE_CANVAS))
++#define PANEL_ADDTO_IS_CANVAS_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), PANEL_ADDTO_TYPE_CANVAS))
++#define PANEL_ADDTO_CANVAS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasClass))
++
++typedef struct _PanelAddtoCanvas PanelAddtoCanvas;
++typedef struct _PanelAddtoCanvasClass PanelAddtoCanvasClass;
++
++struct _PanelAddtoCanvas {
++ GnomeCanvas parent;
++};
++
++struct _PanelAddtoCanvasClass {
++ GnomeCanvasClass parent_class;
++
++ void (*changed) (PanelAddtoCanvas *canvas, gchar *str);
++};
++
++typedef struct _PanelAddtoCanvasPrivate PanelAddtoCanvasPrivate;
++
++struct _PanelAddtoCanvasPrivate {
++ GnomeCanvasItem *under_cover;
++ double height;
++ double width;
++
++ double min_height;
++ double max_width;
++ PanelAddtoInformation *info;
++ PanelAddtoEntry *selected;
++
++ gboolean rtl;
++ gint items_per_row;
++ gint selected_row;
++
++ gchar *search_text;
++
++ /* calculated sizes
++ for the elements */
++ gdouble max_item_width;
++ gdouble max_item_height;
++ gdouble max_icon_height;
++
++ /* accessibility stuff */
++ GHashTable *accessible_children;
++};
++
++GType panel_addto_canvas_get_type (void);
++void activate_entry (PanelAddtoEntry *entry);
++void panel_addto_relayout_for_search (GtkWidget *search_entry, PanelAddtoDialog *dialog);
++void panel_addto_activate_from_searchbar (GtkWidget *search_entry, PanelAddtoDialog *dialog);
++GtkWidget* panel_addto_canvas_new (PanelAddtoInformation *info);
++
++G_END_DECLS
++
++#endif /* PANEL_ADDTO_CANVAS_H */
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-event-box.c gnome-panel-2.14.1.new/gnome-panel/panel-addto-event-box.c
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-event-box.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-event-box.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,99 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation
++ * All rights reserved.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB. If not,
++ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++/*
++ @NOTATION@
++ */
++/* Event box item type for GnomeCanvas widget
++ *
++ * GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
++ * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
++ *
++ *
++ * Author: Chris Lahey
++ */
++
++#include
++
++#include "panel-addto-event-box.h"
++
++#define noVERBOSE
++
++static GnomeCanvasItemClass *parent_class;
++
++static double
++panel_addto_event_box_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
++ GnomeCanvasItem **actual_item)
++{
++ double x1, x2, y1, y2;
++ g_object_get (item,
++ "x1", &x1,
++ "x2", &x2,
++ "y1", &y1,
++ "y2", &y2,
++ NULL);
++ if (x <= x2 && x >= x1 &&
++ y <= y2 && y >= y1) {
++ *actual_item = item;
++
++ return 0.0;
++ }
++ return 1e12;
++}
++
++static void
++panel_addto_event_box_class_init (PanelAddtoEventBoxClass *class)
++{
++ GnomeCanvasItemClass *item_class;
++
++ item_class = (GnomeCanvasItemClass *) class;
++
++ parent_class = g_type_class_peek_parent (class);
++
++ item_class->point = panel_addto_event_box_point;
++}
++
++GType
++panel_addto_event_box_get_type (void)
++{
++ static GType type;
++
++ if (!type) {
++ static const GTypeInfo object_info = {
++ sizeof (PanelAddtoEventBoxClass),
++ (GBaseInitFunc) NULL,
++ (GBaseFinalizeFunc) NULL,
++ (GClassInitFunc) panel_addto_event_box_class_init,
++ (GClassFinalizeFunc) NULL,
++ NULL, /* class_data */
++ sizeof (PanelAddtoEventBox),
++ 0, /* n_preallocs */
++ (GInstanceInitFunc) NULL,
++ NULL /* value_table */
++ };
++
++ type = g_type_register_static (GNOME_TYPE_CANVAS_RECT, "PanelAddtoEventBox",
++ &object_info, 0);
++ }
++
++ return type;
++}
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-event-box.h gnome-panel-2.14.1.new/gnome-panel/panel-addto-event-box.h
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-event-box.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-event-box.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,75 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation
++ * All rights reserved.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB. If not,
++ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++/*
++ @NOTATION@
++ */
++/* Event Box item type for GnomeCanvas widget
++ *
++ * GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
++ * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
++ *
++ *
++ * Author: Chris Lahey
++ */
++
++#ifndef PANEL_ADDTO_EVENT_BOX_H
++#define PANEL_ADDTO_EVENT_BOX_H
++
++
++#include
++
++#include
++
++G_BEGIN_DECLS
++
++/* Event Box item. No configurable or queryable arguments are available (use those in
++ * GnomeCanvasRE).
++ */
++
++
++#define PANEL_ADDTO_TYPE_EVENT_BOX (panel_addto_event_box_get_type ())
++#define PANEL_ADDTO_EVENT_BOX(obj) (GTK_CHECK_CAST ((obj), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBox))
++#define PANEL_ADDTO_EVENT_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBoxClass))
++#define PANEL_ADDTO_IS_EVENT_BOX(obj) (GTK_CHECK_TYPE ((obj), PANEL_ADDTO_TYPE_EVENT_BOX))
++#define PANEL_ADDTO_IS_EVENT_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), PANEL_ADDTO_TYPE_EVENT_BOX))
++#define PANEL_ADDTO_EVENT_BOX_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBoxClass))
++
++
++typedef struct _PanelAddtoEventBox PanelAddtoEventBox;
++typedef struct _PanelAddtoEventBoxClass PanelAddtoEventBoxClass;
++
++struct _PanelAddtoEventBox {
++ GnomeCanvasRect item;
++};
++
++struct _PanelAddtoEventBoxClass {
++ GnomeCanvasRectClass parent_class;
++};
++
++
++/* Standard Gtk function */
++GType panel_addto_event_box_get_type (void) G_GNUC_CONST;
++
++G_END_DECLS
++
++#endif
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto.h gnome-panel-2.14.1.new/gnome-panel/panel-addto.h
+--- gnome-panel-2.14.1/gnome-panel/panel-addto.h 2004-06-23 00:21:51.000000000 +0200
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto.h 2006-04-16 22:07:22.000000000 +0200
+@@ -20,6 +20,7 @@
+ *
+ * Authors:
+ * Vincent Untz
++ * Manu Cornet
+ */
+
+ #ifndef __PANEL_ADDTO_H__
+@@ -27,8 +28,144 @@
+
+ G_BEGIN_DECLS
+
+-void panel_addto_present (GtkMenuItem *item,
+- PanelWidget *panel_widget);
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include "menu.h"
++
++#include "launcher.h"
++#include "panel.h"
++#include "drawer.h"
++#include "panel-applet-frame.h"
++#include "panel-action-button.h"
++#include "panel-menu-bar.h"
++#include "panel-separator.h"
++#include "panel-toplevel.h"
++#include "panel-menu-button.h"
++#include "panel-globals.h"
++#include "panel-lockdown.h"
++#include "panel-util.h"
++#include "panel-profile.h"
++
++typedef struct PanelAddtoEntry PanelAddtoEntry;
++
++typedef struct PanelAddtoInformation {
++ GSList *categories;
++ int n_categories;
++} PanelAddtoInformation;
++
++typedef struct {
++ PanelWidget *panel_widget;
++ PanelAddtoInformation *info;
++
++ GtkWidget *addto_dialog;
++ GtkWidget *label;
++ GtkWidget *back_button;
++ GtkWidget *add_button;
++ GtkWidget *tree_view;
++ GtkWidget *canvas;
++ GtkWidget *applets_sw;
++ GtkWidget *applications_sw;
++ GtkWidget *inner_vbox;
++ GtkWidget *statuslabel;
++ GtkWidget *search_entry;
++ GtkWidget *search_label;
++ GtkWidget *launcher_button;
++ GtkWidget *custom_launcher_button;
++ GtkCellRenderer *renderer;
++ GtkTreeModel *applet_model;
++ GtkTreeModel *application_model;
++
++ GMenuTree *menu_tree;
++
++ GSList *applet_list;
++ GSList *application_list;
++ GSList *settings_list;
++ guint name_notify;
++ int insertion_position;
++
++ gint status;
++} PanelAddtoDialog;
++
++enum {
++ APPLETS,
++ APPLICATIONS
++};
++
++typedef enum {
++ PANEL_ADDTO_APPLET,
++ PANEL_ADDTO_ACTION,
++ PANEL_ADDTO_LAUNCHER_MENU,
++ PANEL_ADDTO_LAUNCHER,
++ PANEL_ADDTO_LAUNCHER_NEW,
++ PANEL_ADDTO_MENU,
++ PANEL_ADDTO_MENUBAR,
++ PANEL_ADDTO_SEPARATOR,
++ PANEL_ADDTO_DRAWER
++} PanelAddtoItemType;
++
++
++typedef struct PanelAddtoCategory {
++ GSList *entries;
++ int n_entries;
++
++ char *title;
++ char *english_title;
++
++ gboolean translated;
++
++ gpointer user_data;
++
++ guint real_category : 1;
++} PanelAddtoCategory;
++
++typedef struct PanelAddtoItemInfo {
++ PanelAddtoItemType type;
++ PanelActionButtonType action_type;
++ char *category;
++ char *english_category;
++ char *name;
++ char *description;
++ char *icon;
++ char *launcher_path;
++ char *menu_filename;
++ char *menu_path;
++ char *iid;
++ gboolean static_data;
++} PanelAddtoItemInfo;
++
++struct PanelAddtoEntry {
++ PanelAddtoCategory *category;
++ PanelAddtoItemInfo *item_info;
++ PanelAddtoDialog *dialog;
++
++ char *title;
++ char *comment;
++
++ GdkPixbuf *icon_pixbuf;
++
++ gpointer user_data;
++};
++
++
++typedef struct {
++ GSList *children;
++ PanelAddtoItemInfo item_info;
++} PanelAddtoAppList;
++
++void
++panel_addto_dialog_response (GtkWidget *widget_dialog,
++ guint response_id,
++ PanelAddtoDialog *dialog);
++gboolean panel_addto_add_item (PanelAddtoDialog *dialog,
++ PanelAddtoItemInfo *item_info);
++void panel_addto_debug_print (PanelAddtoInformation *info);
++void panel_addto_present (GtkMenuItem *item,
++ PanelWidget *panel_widget);
+
+ G_END_DECLS
+
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect.c gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect.c
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,103 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * panel-addto-rounded-rect.c: A rectangle with rounded corners
++ *
++ * Copyright (C) 2004 Novell Inc
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of version 2 of the GNU General Public
++ * License as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include
++#include "panel-addto-rounded-rect.h"
++#include "panel-addto-rounded-rect-pixbuf.h"
++#include
++#include
++
++struct _PanelAddtoRoundedRect {
++ GnomeCanvasRect base;
++};
++typedef GnomeCanvasRectClass PanelAddtoRoundedRectClass;
++
++#define GNOMECC_ROUNDED_RECT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNOMECC_TYPE_ROUNDED_RECT, PanelAddtoRoundedRectClass))
++#define GNOMECC_IS_ROUNDED_RECT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNOMECC_TYPE_ROUNDED_RECT))
++
++G_DEFINE_TYPE (PanelAddtoRoundedRect, panel_addto_rounded_rect, GNOME_TYPE_CANVAS_RECT);
++
++/*************************************************************************
++ * Adapted from nautilus/libnautilus-private/nautilus-icon-canvas-item.c
++ */
++/* clear the corners of the selection pixbuf by copying the corners of the passed-in pixbuf */
++static void
++panel_addto_rounded_rect_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
++ int x, int y, int width, int height)
++{
++ static GdkPixbuf *corner_pixbuf = NULL;
++ GnomeCanvasRE const *re = GNOME_CANVAS_RE (item);
++ int dest_width, dest_height, src_width, src_height;
++ int dx, dy;
++ int corner_size = 5;
++ double affine[6];
++
++ GNOME_CANVAS_ITEM_CLASS (panel_addto_rounded_rect_parent_class)->draw (item, drawable, x, y, width, height);
++
++ if (corner_pixbuf == NULL)
++ corner_pixbuf = gdk_pixbuf_new_from_inline (-1,
++ panel_addto_rounded_rect_frame, FALSE, NULL);
++ src_width = gdk_pixbuf_get_width (corner_pixbuf);
++ src_height = gdk_pixbuf_get_height (corner_pixbuf);
++
++ gnome_canvas_item_i2c_affine (item, affine);
++
++ dest_width = fabs (re->x2 - re->x1);
++ dest_height = fabs (re->y2 - re->y1);
++ dx = affine[4] - x;
++ dy = affine[5] - y;
++
++ /* draw top left corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ 0, 0,
++ dx, dy,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw top right corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ src_width - corner_size, 0,
++ dx + dest_width - corner_size, dy,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw bottom left corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ 0, src_height - corner_size,
++ dx, dy + dest_height - corner_size,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw bottom right corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ src_width - corner_size, src_height - corner_size,
++ dx + dest_width - corner_size, dy + dest_height - corner_size,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++}
++
++static void
++panel_addto_rounded_rect_class_init (PanelAddtoRoundedRectClass *klass)
++{
++ GnomeCanvasItemClass *item_klass = (GnomeCanvasItemClass *) klass;
++ item_klass->draw = panel_addto_rounded_rect_draw;
++}
++static void
++panel_addto_rounded_rect_init (PanelAddtoRoundedRect *rr)
++{
++}
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect.h gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect.h
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,39 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * gnomecc-rounded-rect.c: A rectangle with rounded corners
++ *
++ * Copyright (C) 2004 Novell Inc
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of version 2 of the GNU General Public
++ * License as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++#ifndef PANEL_ADDTO_ROUNDED_RECT_H
++#define PANEL_ADDTO_ROUNDED_RECT_H
++
++#include
++#include
++#include
++
++G_BEGIN_DECLS
++
++#define PANEL_ADDTO_TYPE_ROUNDED_RECT (panel_addto_rounded_rect_get_type ())
++#define PANEL_ADDTO_ROUNDED_RECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PANEL_ADDTO_TYPE_ROUNDED_RECT, PanelAddtoRoundedRect))
++#define PANEL_ADDTO_IS_ROUNDED_RECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PANEL_ADDTO_TYPE_ROUNDED_RECT))
++
++typedef struct _PanelAddtoRoundedRect PanelAddtoRoundedRect;
++GType panel_addto_rounded_rect_get_type (void);
++
++G_END_DECLS
++
++#endif /* PANEL_ADDTO_ROUNDED_RECT_H */
+diff -Nur gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect-pixbuf.h gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect-pixbuf.h
+--- gnome-panel-2.14.1/gnome-panel/panel-addto-rounded-rect-pixbuf.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/gnome-panel/panel-addto-rounded-rect-pixbuf.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,319 @@
++/* GdkPixbuf RGBA C-Source image dump */
++
++#ifdef __SUNPRO_C
++#pragma align 4 (panel_addto_rounded_rect_frame)
++#endif
++#ifdef __GNUC__
++static const guint8 panel_addto_rounded_rect_frame[] __attribute__ ((__aligned__ (4))) =
++#else
++static const guint8 panel_addto_rounded_rect_frame[] =
++#endif
++{ ""
++ /* Pixbuf magic (0x47646b50) */
++ "GdkP"
++ /* length: header (24) + pixel_data (5848) */
++ "\0\0\26\360"
++ /* pixdata_type (0x1010002) */
++ "\1\1\0\2"
++ /* rowstride (344) */
++ "\0\0\1X"
++ /* width (86) */
++ "\0\0\0V"
++ /* height (17) */
++ "\0\0\0\21"
++ /* pixel_data: */
++ "\377\377\377\377\377\377\377\377\377\377\377\303\377\377\377q\377\377"
++ "\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377/\377\377\377q\377\377\377\303\377\377"
++ "\377\377\377\377\377\377\377\377\377\377\377\377\377\242\377\377\377"
++ "(\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377(\377\377\377\242\377\377\377\377\377\377\377\303\377\377"
++ "\377(\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377(\377\377\377\303\377\377"
++ "\377q\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377q\377\377\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377/\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377/\377\377"
++ "\377q\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377q\377\377\377\303\377\377\377(\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377(\377\377\377\303\377\377\377\377\377\377\377\242\377\377\377(\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377(\377\377\377\242\377\377\377\377\377\377\377\377\377\377\377"
++ "\377\377\377\377\303\377\377\377q\377\377\377/\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377/\377\377\377q\377\377\377\303\377\377\377\377\377\377\377\377"};
++
++
+diff -Nur gnome-panel-2.14.1/panel-addto-canvas.c gnome-panel-2.14.1.new/panel-addto-canvas.c
+--- gnome-panel-2.14.1/panel-addto-canvas.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-canvas.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,2309 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* Copyright (C) 2005 Carlos Garnacho
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Authors: Jody Goldberg
++ * Carlos Garnacho Parro
++ * Manu Cornet
++ */
++
++
++#include "panel-addto-canvas.h"
++#include "panel-addto.h"
++#include "panel-profile.h"
++
++#define PAD 5 /*when scrolling keep a few pixels above or below if possible */
++#define ABOVE_LINE_SPACING 0
++#define UNDER_LINE_SPACING 0
++#define UNDER_TITLE_SPACING 0 /* manually insert 1 blank line of text */
++#define LINE_HEIGHT 1
++#define BORDERS 7
++#define MAX_ITEM_WIDTH 125
++#define ITEMS_SEPARATION 7
++
++#include "panel-addto-canvas.h"
++#include "panel-addto-event-box.h"
++#include "panel-addto-rounded-rect.h"
++
++#include
++#include
++#include
++#include
++#include
++
++#define PANEL_ADDTO_CANVAS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasPrivate))
++
++typedef struct EntryInfo {
++ PanelAddtoCanvas *canvas;
++
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *text;
++ GnomeCanvasItem *pixbuf;
++ GnomeCanvasItem *highlight_pixbuf;
++ GnomeCanvasItem *cover;
++ GnomeCanvasItem *selection;
++
++ double icon_height;
++ double icon_width;
++ double text_height;
++ guint launching : 1;
++ guint selected : 1;
++ guint highlighted : 1;
++ gboolean visible;
++
++ gint n_category;
++ gint n_entry;
++ gint index;
++} EntryInfo;
++
++typedef struct {
++ GnomeCanvasGroup *group;
++ GnomeCanvasItem *title;
++ GnomeCanvasItem *line;
++ gboolean visible;
++} CategoryInfo;
++
++enum {
++ SELECTION_CHANGED,
++ LAST_SIGNAL
++};
++
++enum {
++ PROP_0,
++ PROP_INFO
++};
++
++
++static guint panel_addto_canvas_signals [LAST_SIGNAL] = { 0 };
++
++
++static void panel_addto_canvas_class_init (PanelAddtoCanvasClass *class);
++static void panel_addto_canvas_init (PanelAddtoCanvas *canvas);
++static void panel_addto_canvas_finalize (GObject *object);
++static void panel_addto_canvas_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec);
++static void panel_addto_canvas_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec);
++static void panel_addto_canvas_draw_background (GnomeCanvas *canvas, GdkDrawable *drawable,
++ int x, int y, int width, int height);
++static void panel_addto_canvas_size_allocate (GtkWidget *canvas,
++ GtkAllocation *allocation);
++static void panel_addto_canvas_style_set (GtkWidget *canvas,
++ GtkStyle *previous_style);
++static void panel_addto_canvas_realize (GtkWidget *canvas);
++
++static void panel_addto_select_east_entry (EntryInfo *ei, PanelAddtoCanvas *canvas);
++static void build_canvas (PanelAddtoCanvas *canvas);
++static void relayout_canvas (PanelAddtoCanvas *canvas);
++static void set_style (PanelAddtoCanvas *canvas, gboolean font_changed);
++
++G_DEFINE_TYPE (PanelAddtoCanvas, panel_addto_canvas, GNOME_TYPE_CANVAS);
++
++
++static AtkObject* panel_addto_canvas_get_accessible (GtkWidget *widget);
++
++#include "panel-addto-event-box.h"
++#include "panel-addto-rounded-rect.h"
++#include "panel-profile.h"
++
++static void
++panel_addto_canvas_class_init (PanelAddtoCanvasClass *class)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS (class);
++ GnomeCanvasClass *canvas_class = GNOME_CANVAS_CLASS (class);
++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
++
++ object_class->set_property = panel_addto_canvas_set_property;
++ object_class->get_property = panel_addto_canvas_get_property;
++ object_class->finalize = panel_addto_canvas_finalize;
++ canvas_class->draw_background = panel_addto_canvas_draw_background;
++
++ widget_class->style_set = panel_addto_canvas_style_set;
++ widget_class->size_allocate = panel_addto_canvas_size_allocate;
++ widget_class->realize = panel_addto_canvas_realize;
++ widget_class->get_accessible = panel_addto_canvas_get_accessible;
++
++ class->changed = NULL;
++
++ g_object_class_install_property (object_class,
++ PROP_INFO,
++ g_param_spec_pointer ("info",
++ "information for the canvas",
++ "information for the canvas",
++ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
++ panel_addto_canvas_signals [SELECTION_CHANGED] =
++ g_signal_new ("selection-changed",
++ G_OBJECT_CLASS_TYPE (object_class),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET (PanelAddtoCanvasClass, changed),
++ NULL, NULL,
++ g_cclosure_marshal_VOID__STRING,
++ G_TYPE_NONE, 1,
++ G_TYPE_STRING);
++
++ g_type_class_add_private (object_class,
++ sizeof (PanelAddtoCanvasPrivate));
++}
++
++
++static void
++panel_addto_canvas_init (PanelAddtoCanvas *canvas)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ g_return_if_fail (PANEL_ADDTO_IS_CANVAS (canvas));
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ priv->max_width = 300;
++ priv->min_height = 0;
++ priv->info = NULL;
++ priv->selected = NULL;
++
++ priv->max_item_width = 0;
++ priv->max_item_height = 0;
++ priv->items_per_row = 0;
++ priv->rtl = (gtk_widget_get_direction (GTK_WIDGET (canvas)) == GTK_TEXT_DIR_RTL);
++ priv->accessible_children = g_hash_table_new (g_int_hash, g_int_equal);
++
++ gtk_widget_show_all (GTK_WIDGET (canvas));
++}
++
++static void
++panel_addto_canvas_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (object);
++
++ switch (prop_id) {
++ case PROP_INFO:
++ priv->info = g_value_get_pointer (value);
++ build_canvas (PANEL_ADDTO_CANVAS (object));
++ break;
++ }
++}
++
++static void
++panel_addto_canvas_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (object);
++
++ switch (prop_id) {
++ case PROP_INFO:
++ g_value_set_pointer (value, priv->info);
++ break;
++ }
++}
++
++static void
++panel_addto_canvas_finalize (GObject *object)
++{
++ if (G_OBJECT_CLASS (panel_addto_canvas_parent_class)->finalize)
++ (* G_OBJECT_CLASS (panel_addto_canvas_parent_class)->finalize) (object);
++}
++
++
++static void
++panel_addto_canvas_draw_background (GnomeCanvas *canvas, GdkDrawable *drawable,
++ int x, int y, int width, int height)
++{
++ /* By default, we use the style base color. */
++ gdk_gc_set_foreground (canvas->pixmap_gc,
++ >K_WIDGET (canvas)->style->base[GTK_STATE_NORMAL]);
++ gdk_draw_rectangle (drawable,
++ canvas->pixmap_gc,
++ TRUE,
++ 0, 0,
++ width, height);
++}
++
++static void
++panel_addto_canvas_size_allocate(GtkWidget *canvas, GtkAllocation *allocation)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ if (GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->size_allocate)
++ (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->size_allocate) (canvas, allocation);
++
++ if (allocation->height == 1 || allocation->width == 1)
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ priv->max_width = allocation->width;
++ priv->min_height = allocation->height;
++
++ relayout_canvas (PANEL_ADDTO_CANVAS (canvas));
++
++ gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, priv->width - 1, priv->height - 1);
++ g_object_set (priv->under_cover,
++ "x2", priv->width,
++ "y2", priv->height,
++ NULL);
++}
++
++static void
++panel_addto_canvas_realize (GtkWidget *canvas)
++{
++ if (GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->realize)
++ (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->realize) (canvas);
++
++ set_style (PANEL_ADDTO_CANVAS (canvas), FALSE);
++}
++
++static void
++panel_addto_canvas_style_set (GtkWidget *canvas, GtkStyle *previous_style)
++{
++ if (!GTK_WIDGET_REALIZED (canvas))
++ return;
++
++ set_style (PANEL_ADDTO_CANVAS (canvas), (previous_style &&
++ canvas->style &&
++ !pango_font_description_equal (canvas->style->font_desc,
++ previous_style->font_desc)));
++}
++
++static void
++gnome_canvas_item_show_hide (GnomeCanvasItem *item, gboolean show)
++{
++ if (show)
++ gnome_canvas_item_show (item);
++ else
++ gnome_canvas_item_hide (item);
++}
++
++static void
++setup_entry (PanelAddtoCanvas *canvas, PanelAddtoEntry *entry)
++{
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei;
++ GtkWidget *widget;
++ GtkStateType state;
++
++ if (!entry)
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ widget = GTK_WIDGET (canvas);
++ ei = entry->user_data;
++
++ if (ei->pixbuf) {
++ gnome_canvas_item_show_hide (ei->highlight_pixbuf, ei->highlighted);
++ gnome_canvas_item_show_hide (ei->pixbuf, !ei->highlighted);
++ }
++ if (!ei->selected)
++ state = GTK_STATE_NORMAL;
++ else if (gtk_window_has_toplevel_focus (GTK_WINDOW (gtk_widget_get_toplevel (widget))))
++ state = GTK_STATE_SELECTED;
++ else
++ state = GTK_STATE_ACTIVE;
++ gnome_canvas_item_show_hide (ei->selection, ei->selected);
++ g_object_set (ei->selection,
++ "fill_color_gdk", &widget->style->base [state],
++ NULL);
++ g_object_set (ei->text,
++ "fill_color_gdk", &widget->style->text [state],
++ NULL);
++}
++
++static gboolean
++cb_entry_info_reset (gpointer data)
++{
++ EntryInfo *ei = data;
++ ei->launching = FALSE;
++ return FALSE;
++}
++
++
++void
++activate_entry (PanelAddtoEntry *entry)
++{
++ EntryInfo *ei = entry->user_data;
++
++ if (!ei->launching) {
++ ei->launching = TRUE;
++ gtk_timeout_add (1000, cb_entry_info_reset, ei);
++
++ if (panel_addto_add_item (entry->dialog, entry->item_info))
++ gtk_widget_destroy (entry->dialog->addto_dialog);
++ }
++}
++
++static void
++panel_addto_drag_data_get_cb (GtkWidget *widget,
++ GdkDragContext *context,
++ GtkSelectionData *selection_data,
++ guint info,
++ guint time,
++ const char *string)
++{
++ gtk_selection_data_set (selection_data,
++ selection_data->target, 8, (guchar *) string,
++ strlen (string));
++}
++
++static void
++panel_addto_drag_begin_cb (GtkWidget *canvas,
++ GdkDragContext *context,
++ gpointer data)
++{
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ entry = priv->selected;
++ gtk_drag_set_icon_pixbuf (context, entry->icon_pixbuf, 0, 0);
++}
++
++static void
++panel_addto_setup_drag (PanelAddtoCanvas *canvas,
++ const GtkTargetEntry *target,
++ const char *text)
++{
++ if (!text || panel_lockdown_get_locked_down ())
++ return;
++
++
++ gtk_drag_source_set (GTK_WIDGET (canvas),
++ GDK_BUTTON1_MASK|GDK_BUTTON2_MASK,
++ target, 1, GDK_ACTION_COPY);
++
++ g_signal_connect_data (G_OBJECT (canvas), "drag_data_get",
++ G_CALLBACK (panel_addto_drag_data_get_cb),
++ g_strdup (text),
++ (GClosureNotify) g_free,
++ 0 /* connect_flags */);
++ g_signal_connect_after (G_OBJECT (canvas), "drag-begin",
++ G_CALLBACK (panel_addto_drag_begin_cb),
++ NULL);
++}
++
++static void
++panel_addto_setup_launcher_drag (PanelAddtoCanvas *canvas,
++ const char *uri)
++{
++ static GtkTargetEntry target[] = {
++ { "text/uri-list", 0, 0 }
++ };
++ char *uri_list;
++
++ uri_list = g_strconcat (uri, "\r\n", NULL);
++ panel_addto_setup_drag (canvas, target, uri_list);
++ g_free (uri_list);
++}
++
++static void
++panel_addto_setup_applet_drag (PanelAddtoCanvas *canvas,
++ const char *iid)
++{
++ static GtkTargetEntry target[] = {
++ { "application/x-panel-applet-iid", 0, 0 }
++ };
++
++ panel_addto_setup_drag (canvas, target, iid);
++}
++
++
++
++static void
++panel_addto_setup_internal_applet_drag (PanelAddtoCanvas *canvas,
++ const char *applet_type)
++{
++ static GtkTargetEntry target[] = {
++ { "application/x-panel-applet-internal", 0, 0 }
++ };
++
++ panel_addto_setup_drag (canvas, target, applet_type);
++}
++
++static void
++panel_addto_selection_changed (PanelAddtoCanvas *canvas,
++ const gchar *status_display,
++ PanelAddtoDialog *dialog)
++{
++ PanelAddtoItemInfo *data;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ data = priv->selected ? priv->selected->item_info : NULL;
++
++
++ if ((!priv->selected) || (!data)) {
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
++ return;
++ }
++
++ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), TRUE);
++
++ if (dialog->statuslabel)
++ gtk_label_set_text (GTK_LABEL (dialog->statuslabel), priv->selected->comment);
++
++ if (data->type == PANEL_ADDTO_LAUNCHER_MENU) {
++ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
++ GTK_STOCK_GO_FORWARD);
++ } else {
++ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
++ GTK_STOCK_ADD);
++ }
++ gtk_button_set_use_stock (GTK_BUTTON (dialog->add_button),
++ TRUE);
++
++}
++
++static void
++select_entry (PanelAddtoCanvas *canvas, PanelAddtoEntry *entry)
++{
++ PanelAddtoDialog *dialog;
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei = NULL;
++ GtkAdjustment *pos;
++ double affine[6];
++ PanelAddtoEntry *selected;
++
++ dialog = entry->dialog;
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ selected = priv->selected;
++
++ if (selected == entry)
++ return;
++
++ if (selected && selected->user_data)
++ ((EntryInfo *) selected->user_data)->selected = FALSE;
++ setup_entry (canvas, selected);
++
++ priv->selected = selected = entry;
++
++ if (selected && selected->user_data)
++ ((EntryInfo *) selected->user_data)->selected = TRUE;
++ setup_entry (canvas, selected);
++
++ g_signal_emit (canvas, panel_addto_canvas_signals [SELECTION_CHANGED], 0,
++ (entry) ? entry->comment : NULL);
++
++ if (!entry)
++ return;
++
++ ei = entry->user_data;
++ gnome_canvas_item_i2c_affine (GNOME_CANVAS_ITEM (ei->group), affine);
++ pos = gtk_layout_get_vadjustment (GTK_LAYOUT (ei->cover->canvas));
++
++ if (affine[5] < pos->value)
++ gtk_adjustment_set_value (pos, MAX (affine[5] - PAD, 0));
++ else if ((affine[5] + priv->max_item_height) > (pos->value+pos->page_size))
++ gtk_adjustment_set_value (pos, MAX (MIN (affine[5] + priv->max_item_height + PAD, pos->upper) - pos->page_size, 0));
++}
++
++static gboolean
++cover_event (GnomeCanvasItem *item, GdkEvent *event, PanelAddtoEntry *entry)
++{
++ EntryInfo *ei = entry->user_data;
++ PanelAddtoCanvas *canvas = ei->canvas;
++ PanelAddtoItemInfo *data;
++ PanelAddtoDialog *dialog = entry->dialog;
++ char *iid;
++
++ data = entry->item_info;
++
++ switch (event->type) {
++ case GDK_ENTER_NOTIFY:
++ ei->highlighted = TRUE;
++ setup_entry (canvas, entry); /* highlight even if it is already selected */
++
++ /* only allow dragging applets if we can add applets */
++ if (panel_profile_id_lists_are_writable ()) {
++ switch (data->type) {
++ case PANEL_ADDTO_LAUNCHER:
++ panel_addto_setup_launcher_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->launcher_path);
++ break;
++ case PANEL_ADDTO_APPLET:
++ panel_addto_setup_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->iid);
++ break;
++ case PANEL_ADDTO_LAUNCHER_MENU:
++ break;
++ case PANEL_ADDTO_MENU:
++ /* build the iid for menus other than the main menu */
++ if (data->iid == NULL) {
++ iid = g_strdup_printf ("MENU:%s/%s",
++ data->menu_filename,
++ data->menu_path);
++ } else {
++ iid = g_strdup (data->iid);
++ }
++ panel_addto_setup_internal_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ iid);
++ g_free (iid);
++ break;
++ default:
++ panel_addto_setup_internal_applet_drag (PANEL_ADDTO_CANVAS (dialog->canvas),
++ data->iid);
++ break;
++ }
++ }
++
++ return TRUE;
++ case GDK_LEAVE_NOTIFY:
++ ei->highlighted = FALSE;
++ setup_entry (canvas, entry);
++ return TRUE;
++ case GDK_BUTTON_PRESS:
++ select_entry (canvas, entry);
++ gtk_widget_grab_focus (GTK_WIDGET (canvas));
++ return TRUE;
++ case GDK_2BUTTON_PRESS:
++ if (event->button.button == 1)
++ activate_entry (entry);
++ return TRUE;
++ default:
++ return FALSE;
++ }
++}
++
++static void
++panel_addto_select_first_entry (PanelAddtoCanvas *canvas)
++{
++ PanelAddtoCategory *category;
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++ EntryInfo *ei;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ category = g_slist_nth_data (priv->info->categories, 0);
++ entry = g_slist_nth_data (category->entries, 0);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ select_entry (canvas, entry);
++}
++
++static gint
++panel_addto_count_visible_entries (PanelAddtoCategory *category)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint n_visible_entries = 0;
++
++ for (l = category->entries; l; l = l->next) {
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible)
++ n_visible_entries++;
++ }
++ return n_visible_entries;
++}
++
++static gint
++panel_addto_get_rank_of_nth_visible_entry (PanelAddtoCategory *category, gint n)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint seen_visible_entries = 0;
++ gint seen_entries = 0;
++ gint farthest_visible_entry = 0;
++
++ l = category->entries;
++
++ while (seen_visible_entries < n) {
++ if (!l) break;
++ seen_entries++;
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible) {
++ seen_visible_entries++;
++ farthest_visible_entry = seen_entries;
++ }
++ l = l->next;
++ }
++
++ return (farthest_visible_entry - 1);
++}
++
++static gint
++panel_addto_how_many_visible_entries_before_me (PanelAddtoCategory *category, gint rank)
++{
++ GSList *l;
++ PanelAddtoEntry *entry;
++ EntryInfo *ei;
++ gint seen_entries = 0;
++ gint seen_visible_entries = 0;
++
++ l = category->entries;
++ while (seen_entries < rank) {
++ entry = l->data;
++ ei = entry->user_data;
++ if (ei->visible)
++ seen_visible_entries++;
++ l = l->next;
++ seen_entries++;
++ }
++ return seen_visible_entries;
++}
++
++static void
++panel_addto_select_east_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category, n_entry;
++ gint n_categories;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ if (ei->n_entry == category->n_entries - 1) {
++ if (n_category == priv->info->n_categories - 1)
++ return;
++ category = g_slist_nth_data (priv->info->categories, ei->n_category + 1);
++ entry = g_slist_nth_data (category->entries, 0);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry + 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_west_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category, n_entry;
++ gint n_categories;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ if (ei->n_entry == 0) {
++ if (n_category == 0)
++ return;
++ category = g_slist_nth_data (priv->info->categories, ei->n_category - 1);
++ entry = g_slist_nth_data (category->entries, category->n_entries - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_west_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_west_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_north_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category = 0;
++ gint n_categories;
++ gint n_visible_entries = 0;
++ gint n_visible_entries_before_me = 0;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++ CategoryInfo *catinfo;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ n_visible_entries_before_me =
++ panel_addto_how_many_visible_entries_before_me (category, ei->n_entry);
++ if (n_visible_entries_before_me + 1 - priv->items_per_row <= 0) {
++ if (n_category == 0) {
++ panel_addto_select_first_entry (canvas);
++ return;
++ }
++ n_category--;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ catinfo = category->user_data;
++ if (!catinfo->visible) {
++ while (!catinfo->visible) {
++ category = g_slist_nth_data (priv->info->categories, --n_category);
++ if (!category)
++ return;
++ catinfo = category->user_data;
++ if (!catinfo)
++ return;
++ }
++ }
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries,
++ panel_addto_get_rank_of_nth_visible_entry
++ (category,
++ ((n_visible_entries - 1) / priv->items_per_row) * priv->items_per_row
++ + ((n_visible_entries_before_me + 1) % priv->items_per_row)));
++ if (!entry)
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry - priv->items_per_row);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static void
++panel_addto_select_south_entry (EntryInfo *ei, PanelAddtoCanvas *canvas)
++{
++ gint n_category = 0;
++ gint n_categories;
++ gint n_visible_entries = 0;
++ gint n_visible_entries_before_me = 0;
++ PanelAddtoEntry *entry;
++ PanelAddtoCategory *category;
++ PanelAddtoCanvasPrivate *priv;
++ CategoryInfo *catinfo;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ n_categories = priv->info->n_categories;
++
++ if (ei) {
++ n_category = ei->n_category;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ n_visible_entries_before_me =
++ panel_addto_how_many_visible_entries_before_me (category, ei->n_entry);
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ if (n_visible_entries_before_me + 1 + priv->items_per_row > n_visible_entries - 1) {
++ if (n_visible_entries_before_me + 1
++ <= ((n_visible_entries - 1) / priv->items_per_row) * priv->items_per_row) {
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ } else {
++ if (n_category == priv->info->n_categories - 1)
++ return;
++ n_category++;
++ category = g_slist_nth_data (priv->info->categories, n_category);
++ catinfo = category->user_data;
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries, ei->n_entry % priv->items_per_row);
++ if (!catinfo->visible) {
++ while (!catinfo->visible) {
++ category = g_slist_nth_data (priv->info->categories, ++n_category);
++ if (!category)
++ return;
++ catinfo = category->user_data;
++ if (!catinfo)
++ return;
++ }
++ }
++ n_visible_entries = panel_addto_count_visible_entries (category);
++ entry = g_slist_nth_data (category->entries,
++ panel_addto_get_rank_of_nth_visible_entry
++ (category,
++ (n_visible_entries_before_me + 1) % priv->items_per_row));
++
++ if (!entry)
++ entry = g_slist_nth_data (category->entries, n_visible_entries - 1);
++ }
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ } else {
++ entry = g_slist_nth_data (category->entries, ei->n_entry + priv->items_per_row);
++ ei = entry->user_data;
++ if (!ei->visible) {
++ panel_addto_select_east_entry (ei, canvas);
++ return;
++ }
++ }
++ select_entry (canvas, entry);
++ } else
++ panel_addto_select_first_entry (canvas);
++}
++
++static gboolean
++cb_canvas_event (GnomeCanvasItem *item, GdkEvent *event, PanelAddtoDialog *dialog)
++{
++ PanelAddtoCanvas *canvas = (PanelAddtoCanvas *) dialog->canvas;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ EntryInfo *ei = NULL;
++ gint n_category, n_entry;
++ gint n_categories, n_entries;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (event->type == GDK_BUTTON_PRESS) {
++ gtk_drag_source_unset (GTK_WIDGET (canvas));
++ select_entry (canvas, NULL);
++ gtk_widget_grab_focus (GTK_WIDGET (dialog->canvas));
++ return TRUE;
++ }
++
++ if (event->type != GDK_KEY_PRESS)
++ return FALSE;
++
++ n_entry = 0;
++ n_category = 0;
++ n_categories = priv->info->n_categories;
++
++ if (priv->selected) {
++ ei = priv->selected->user_data;
++ current_category = g_slist_nth_data (priv->info->categories, ei->n_category);
++ n_entries = current_category->n_entries;
++ }
++
++ switch (event->key.keyval) {
++ case GDK_KP_Right:
++ case GDK_Right:
++ if (priv->rtl)
++ panel_addto_select_west_entry (ei, canvas);
++ else
++ panel_addto_select_east_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Left:
++ case GDK_Left:
++ if (priv->rtl)
++ panel_addto_select_east_entry (ei, canvas);
++ else
++ panel_addto_select_west_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Down:
++ case GDK_Down:
++ panel_addto_select_south_entry (ei, canvas);
++ return TRUE;
++ case GDK_KP_Up:
++ case GDK_Up:
++ panel_addto_select_north_entry (ei, canvas);
++ return TRUE;
++ case GDK_Tab:
++ case GDK_KP_Tab:
++ case GDK_ISO_Left_Tab:
++ gtk_widget_grab_focus (dialog->search_entry);
++ break;
++ case GDK_Return:
++ case GDK_KP_Enter:
++ if (priv->selected)
++ activate_entry (priv->selected);
++
++ return TRUE;
++ break;
++ case GDK_Escape:
++ panel_addto_dialog_response (dialog->addto_dialog,
++ GTK_RESPONSE_CANCEL,
++ dialog);
++ return TRUE;
++ default:
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++
++static void
++calculate_item_width (PanelAddtoCanvas *canvas, EntryInfo *ei)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PangoLayout *layout;
++ PangoRectangle rectangle;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ layout = GNOME_CANVAS_TEXT (ei->text)->layout;
++
++ pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
++ pango_layout_set_width (layout, -1);
++ pango_layout_get_pixel_extents (layout, NULL, &rectangle);
++
++ /* If its too big wrap at the max and regen to find the layout */
++ if (rectangle.width > MAX_ITEM_WIDTH) {
++ pango_layout_set_width (layout, MAX_ITEM_WIDTH * PANGO_SCALE);
++ pango_layout_get_pixel_extents (layout, NULL, &rectangle);
++ rectangle.width = MAX_ITEM_WIDTH;
++ }
++
++ ei->text_height = rectangle.height;
++
++ priv->max_item_width = MAX (priv->max_item_width, rectangle.width);
++}
++
++static void
++calculate_item_height (PanelAddtoCanvas *canvas, EntryInfo *ei)
++{
++ PanelAddtoCanvasPrivate *priv;
++ gint item_height;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (ei->pixbuf)
++ priv->max_icon_height = MAX (priv->max_icon_height, ei->icon_height);
++
++ item_height = ei->icon_height + ei->text_height;
++ priv->max_item_height = MAX (priv->max_item_height, item_height);
++}
++
++static void
++calculate_sizes (PanelAddtoCanvas *canvas)
++{
++ GSList *l, *m;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ priv->max_item_height = 0;
++ priv->max_icon_height = 0;
++ priv->max_item_width = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ for (m = current_category->entries; m; m = m->next) {
++ current_entry = m->data;
++ EntryInfo *ei = current_entry->user_data;
++ calculate_item_width (canvas, ei);
++ calculate_item_height (canvas, ei);
++ }
++ }
++}
++
++static void
++gnome_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy)
++{
++ double translate[6];
++
++ g_return_if_fail (item != NULL);
++ g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
++
++ art_affine_translate (translate, dx, dy);
++
++ gnome_canvas_item_affine_absolute (item, translate);
++}
++
++static guchar
++lighten_component (guchar cur_value)
++{
++ int new_value = cur_value;
++ new_value += 24 + (new_value >> 3);
++ if (new_value > 255) {
++ new_value = 255;
++ }
++ return (guchar) new_value;
++}
++
++static GdkPixbuf *
++create_spotlight_pixbuf (GdkPixbuf* src)
++{
++ GdkPixbuf *dest;
++ int i, j;
++ int width, height, has_alpha, src_row_stride, dst_row_stride;
++ guchar *target_pixels, *original_pixels;
++ guchar *pixsrc, *pixdest;
++
++ g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL);
++ g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src)
++ && gdk_pixbuf_get_n_channels (src) == 3)
++ || (gdk_pixbuf_get_has_alpha (src)
++ && gdk_pixbuf_get_n_channels (src) == 4), NULL);
++ g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (src) == 8, NULL);
++
++ dest = gdk_pixbuf_copy (src);
++
++ has_alpha = gdk_pixbuf_get_has_alpha (src);
++ width = gdk_pixbuf_get_width (src);
++ height = gdk_pixbuf_get_height (src);
++ dst_row_stride = gdk_pixbuf_get_rowstride (dest);
++ src_row_stride = gdk_pixbuf_get_rowstride (src);
++ target_pixels = gdk_pixbuf_get_pixels (dest);
++ original_pixels = gdk_pixbuf_get_pixels (src);
++
++ for (i = 0; i < height; i++) {
++ pixdest = target_pixels + i * dst_row_stride;
++ pixsrc = original_pixels + i * src_row_stride;
++ for (j = 0; j < width; j++) {
++ *pixdest++ = lighten_component (*pixsrc++);
++ *pixdest++ = lighten_component (*pixsrc++);
++ *pixdest++ = lighten_component (*pixsrc++);
++ if (has_alpha) {
++ *pixdest++ = *pixsrc++;
++ }
++ }
++ }
++
++ return dest;
++}
++
++static void
++build_canvas (PanelAddtoCanvas *canvas)
++{
++ GSList *l, *m;
++ EntryInfo *ei;
++ PanelAddtoDialog *dialog;
++ PanelAddtoCategory *current_category = NULL;
++ PanelAddtoInformation *current_info = NULL;
++ PanelAddtoEntry *current_entry = NULL;
++ PanelAddtoCanvasPrivate *priv;
++ GnomeCanvas *gcanvas;
++ GnomeCanvasGroup *hidden_group;
++ int i, j, index;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ gcanvas = GNOME_CANVAS (canvas);
++ current_category = priv->info->categories->data;
++ current_entry = current_category->entries->data;
++ dialog = current_entry->dialog;
++ index = 0;
++
++ priv->under_cover = gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ panel_addto_event_box_get_type(),
++ NULL);
++
++ current_info = priv->info;
++ gnome_canvas_item_grab_focus (GNOME_CANVAS_ITEM (gnome_canvas_root (gcanvas)));
++ g_signal_connect (gnome_canvas_root (gcanvas), "event",
++ G_CALLBACK (cb_canvas_event), dialog);
++
++ hidden_group = GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ gnome_canvas_group_get_type (),
++ NULL));
++ for (l = priv->info->categories, i = 0; l; l = l->next, i++) {
++
++ CategoryInfo *catinfo;
++ current_category = l->data;
++
++ if (current_category->user_data == NULL)
++ current_category->user_data = g_new (CategoryInfo, 1);
++
++ catinfo = current_category->user_data;
++ catinfo->group = NULL;
++ catinfo->title = NULL;
++ catinfo->line = NULL;
++
++ catinfo->group =
++ GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root (gcanvas),
++ gnome_canvas_group_get_type (),
++ NULL));
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (catinfo->group), 0, BORDERS);
++
++ catinfo->line = gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_rect_get_type (),
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++
++ catinfo->title = NULL;
++
++ if (current_category && (priv->info->n_categories != 1)) {
++ char *label = g_strdup_printf ("%s", current_category->title);
++ catinfo->title = gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_text_get_type (),
++ "text", current_category->title,
++ "markup", label,
++ "anchor", GTK_ANCHOR_NW,
++ NULL);
++ g_free (label);
++ }
++
++ for (m = current_category->entries, j = 0; m; m = m->next, j++) {
++ current_entry = m->data;
++
++ if (current_entry->user_data == NULL)
++ current_entry->user_data = g_new0 (EntryInfo, 1);
++
++ ei = current_entry->user_data;
++
++ ei->canvas = canvas;
++ ei->group = GNOME_CANVAS_GROUP (
++ gnome_canvas_item_new (catinfo->group,
++ gnome_canvas_group_get_type (),
++ NULL));
++ ei->selection = gnome_canvas_item_new (
++ ei->group,
++ PANEL_ADDTO_TYPE_ROUNDED_RECT,
++ NULL);
++
++ if (current_entry->title) {
++ ei->text = gnome_canvas_item_new (ei->group,
++ gnome_canvas_text_get_type (),
++ "anchor", GTK_ANCHOR_NW,
++ "justification", GTK_JUSTIFY_CENTER,
++ "clip", TRUE,
++ NULL);
++ pango_layout_set_alignment (GNOME_CANVAS_TEXT (ei->text)->layout,
++ PANGO_ALIGN_CENTER);
++ pango_layout_set_justify (GNOME_CANVAS_TEXT (ei->text)->layout,
++ FALSE);
++ g_object_set (ei->text,
++ "text", current_entry->title,
++ NULL);
++ } else
++ ei->text = NULL;
++
++ if (current_entry->icon_pixbuf) {
++ GdkPixbuf *pixbuf = current_entry->icon_pixbuf;
++ GdkPixbuf *highlight_pixbuf =
++ create_spotlight_pixbuf (pixbuf);
++
++ ei->icon_height = gdk_pixbuf_get_height (pixbuf);
++ ei->icon_width = gdk_pixbuf_get_width (pixbuf);
++ ei->pixbuf = gnome_canvas_item_new (ei->group,
++ gnome_canvas_pixbuf_get_type (),
++ "pixbuf", pixbuf,
++ NULL);
++ g_object_unref (pixbuf);
++ ei->highlight_pixbuf = gnome_canvas_item_new (ei->group,
++ gnome_canvas_pixbuf_get_type (),
++ "pixbuf", highlight_pixbuf,
++ NULL);
++ g_object_unref (highlight_pixbuf);
++ } else {
++ ei->pixbuf = NULL;
++ ei->highlight_pixbuf = NULL;
++ }
++
++ ei->cover = gnome_canvas_item_new (ei->group,
++ panel_addto_event_box_get_type(),
++ NULL);
++ calculate_item_width (canvas, ei);
++ calculate_item_height (canvas, ei);
++
++ ei->n_category = i;
++ ei->n_entry = j;
++ ei->index = index;
++
++ setup_entry (canvas, current_entry);
++
++ g_signal_connect (ei->cover, "event",
++ G_CALLBACK (cover_event),
++ current_entry);
++ index++;
++ }
++ }
++
++ dialog = current_entry->dialog;
++
++ g_signal_connect (G_OBJECT (canvas), "selection-changed",
++ G_CALLBACK (panel_addto_selection_changed), current_entry->dialog);
++}
++
++
++static const char *
++panel_addto_utf8_casestrstr (const char *haystack, const char *needle)
++{
++
++ if (!haystack)
++ return NULL;
++
++ haystack = g_utf8_strdown (haystack, -1);
++ needle = g_utf8_strdown (needle, -1);
++
++ const char *s;
++ gsize i;
++ gsize haystack_len = g_utf8_strlen (haystack, -1);
++ gsize needle_len = g_utf8_strlen (needle, -1);
++ int needle_size = strlen (needle);
++
++ if (needle_len > haystack_len)
++ return NULL;
++
++ s = haystack;
++ for (i = 0; i <= haystack_len - needle_len; i++) {
++ if (strncmp (s, needle, needle_size) == 0)
++ return s;
++ s = g_utf8_next_char (s);
++ }
++
++ return NULL;
++}
++
++void
++panel_addto_relayout_for_search (GtkWidget *search_entry, PanelAddtoDialog *dialog)
++{
++ gchar *search_text;
++ PanelAddtoCanvasPrivate *priv;
++
++ search_text = g_malloc (strlen ((gchar*) gtk_entry_get_text (GTK_ENTRY (search_entry))) + 1);
++ g_stpcpy (search_text, gtk_entry_get_text (GTK_ENTRY (search_entry)));
++ g_strchomp (search_text);
++ if (dialog->canvas) {
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ priv->search_text = search_text;
++ gtk_widget_queue_resize (GTK_WIDGET (dialog->canvas));
++ }
++}
++
++void
++panel_addto_activate_from_searchbar (GtkWidget *search_entry, PanelAddtoDialog *dialog)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
++ if (priv->selected)
++ activate_entry (priv->selected);
++}
++
++/* If we can't find the search query in the applet's name, in the applet's
++ * description, nor in the applet's category, then the applet has to be hidden.
++ */
++
++static gboolean
++panel_addto_entry_must_be_hidden (PanelAddtoEntry *entry, const gchar **search_terms)
++{
++ gint i;
++ gint nb_search_terms = 0, nb_found = 0;
++ gboolean search_is_null = TRUE;
++
++ for (i = 0; search_terms[i] != NULL; i++) {
++ nb_search_terms ++;
++ search_is_null = FALSE;
++ if (
++ (entry->title
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->title, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL)))
++ || (entry->comment
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->comment, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL)))
++ || (entry->category->title
++ && panel_addto_utf8_casestrstr (g_locale_to_utf8 (entry->category->title, -1, NULL, NULL, NULL),
++ g_locale_to_utf8 (search_terms[i], -1, NULL, NULL, NULL))))
++ nb_found++;
++ }
++
++ if (search_is_null || nb_found == nb_search_terms)
++ return FALSE;
++
++ return TRUE;
++}
++
++/* A category canvas item contains all the elements
++ * for the category, as well as the title and a separator
++ */
++static void
++relayout_category (PanelAddtoCanvas *canvas, CategoryInfo *catinfo,
++ gint vert_pos, gint *category_vert_pos)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (catinfo->group),
++ 0, vert_pos);
++
++ if (catinfo->line) {
++ gnome_canvas_item_move_absolute (catinfo->line, BORDERS, ABOVE_LINE_SPACING);
++
++ gnome_canvas_item_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++ }
++
++ if (catinfo->title) {
++ double text_height, text_width;
++
++ g_object_get (catinfo->title,
++ "text_height", &text_height,
++ "text_width", &text_width,
++ NULL);
++
++ *category_vert_pos += text_height; /* move it down 1 line */
++ gnome_canvas_item_move_absolute (catinfo->title,
++ (priv->rtl) ? priv->max_width - BORDERS - text_width : BORDERS,
++ *category_vert_pos);
++ *category_vert_pos += text_height + text_height/2 + UNDER_TITLE_SPACING;
++ }
++}
++
++static void
++relayout_item (PanelAddtoCanvas *canvas, EntryInfo *ei,
++ gint category_horiz_pos, gint category_vert_pos)
++{
++ PanelAddtoCanvasPrivate *priv;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ gnome_canvas_item_move_absolute (GNOME_CANVAS_ITEM (ei->group),
++ category_horiz_pos,
++ category_vert_pos);
++
++ gnome_canvas_item_set (ei->selection,
++ "x2", (double) priv->max_item_width + 2 * PAD,
++ "y2", (double) ei->text_height + 1, /* expand it down slightly */
++ NULL);
++
++ gnome_canvas_item_move_absolute (ei->selection, -PAD, priv->max_icon_height);
++
++ if (ei->text) {
++ /* canvas asks layout for its extent, layout gives real
++ * size, not fixed width and drawing gets confused.
++ */
++ gnome_canvas_item_set (ei->text,
++ "clip_width", (double) priv->max_item_width,
++ "clip_height", (double) priv->max_item_height,
++ NULL);
++
++ /* text is centered by pango */
++ pango_layout_set_width (GNOME_CANVAS_TEXT (ei->text)->layout,
++ (gint) priv->max_item_width * PANGO_SCALE);
++
++ gnome_canvas_item_move_absolute (ei->text,
++ 0, priv->max_icon_height);
++ }
++
++ if (ei->pixbuf) {
++ /* manually center the icon */
++ gnome_canvas_item_move_absolute (ei->pixbuf,
++ priv->max_item_width / 2 - ei->icon_width / 2, 0);
++ gnome_canvas_item_move_absolute (ei->highlight_pixbuf,
++ priv->max_item_width / 2 - ei->icon_width / 2, 0);
++ }
++
++ /* cover the item */
++ gnome_canvas_item_set (ei->cover,
++ "x2", (double) priv->max_item_width,
++ "y2", (double) priv->max_item_height,
++ NULL);
++}
++
++static void
++relayout_canvas (PanelAddtoCanvas *canvas)
++{
++ gint entry;
++ gint vert_pos, category_vert_pos, category_horiz_pos;
++ gint real_width;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++ CategoryInfo *catinfo;
++ EntryInfo *ei;
++ GSList *l, *m;
++ gboolean at_least_one_found, first_shown_category, first_shown_entry;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ real_width = priv->max_width - 2 * BORDERS + ITEMS_SEPARATION;
++ priv->items_per_row = real_width / ((gint) priv->max_item_width + ITEMS_SEPARATION);
++
++ vert_pos = BORDERS;
++
++ const gchar *search_text = priv->search_text;
++ gchar **search_terms;
++ search_terms = search_text ? g_strsplit (search_text, " ", 0) : NULL;
++
++ first_shown_category = TRUE;
++ first_shown_entry = TRUE;
++
++ for (l = priv->info->categories; l; l = l->next) {
++
++ at_least_one_found = FALSE;
++ category_vert_pos = 0;
++
++ category_horiz_pos = (priv->rtl) ? priv->max_width - (gint) priv->max_item_width - BORDERS : BORDERS;
++
++ current_category = l->data;
++ catinfo = current_category->user_data;
++
++ relayout_category (canvas, catinfo, vert_pos, &category_vert_pos);
++ category_vert_pos += UNDER_LINE_SPACING;
++
++ for (m = current_category->entries, entry = 0; m; m = m->next, entry++) {
++
++ current_entry = m->data;
++ ei = current_entry->user_data;
++
++ /* we don't want the first item to wrap, it would
++ be too separated from the section title */
++
++ if (!search_text || !panel_addto_entry_must_be_hidden (current_entry, (const gchar **)search_terms)) {
++ at_least_one_found = TRUE;
++ gnome_canvas_item_show (GNOME_CANVAS_ITEM (ei->group));
++ ei->visible = TRUE;
++ if ((entry > 0) &&
++ ((priv->items_per_row == 0) ||
++ (priv->items_per_row > 0 && (entry % priv->items_per_row == 0)))) {
++
++ category_horiz_pos = (priv->rtl) ?
++ priv->max_width - (gint) priv->max_item_width - BORDERS : BORDERS;
++ category_vert_pos += (gint) priv->max_item_height + ITEMS_SEPARATION;
++ }
++
++ relayout_item (canvas, ei, category_horiz_pos, category_vert_pos);
++
++ if (priv->rtl)
++ category_horiz_pos -= (gint) priv->max_item_width + ITEMS_SEPARATION;
++ else
++ category_horiz_pos += (gint) priv->max_item_width + ITEMS_SEPARATION;
++
++ /* If the user is actually using the search bar, select
++ * the first shown entry.
++ */
++ if (search_text && first_shown_entry) {
++ select_entry (canvas, current_entry);
++ first_shown_entry = FALSE;
++ }
++ } else {
++ gnome_canvas_item_hide (GNOME_CANVAS_ITEM (ei->group));
++ ei->visible = FALSE;
++ entry --;
++ }
++
++ }
++ if (at_least_one_found) {
++ gnome_canvas_item_show (GNOME_CANVAS_ITEM (catinfo->group));
++ catinfo->visible = TRUE;
++ category_vert_pos += (gint) priv->max_item_height;
++ vert_pos += category_vert_pos + ITEMS_SEPARATION;
++
++ if (first_shown_category) {
++ g_object_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) 0,
++ NULL);
++ first_shown_category = FALSE;
++ } else {
++ g_object_set (catinfo->line,
++ "x2", (double) priv->max_width - 2 * BORDERS,
++ "y2", (double) LINE_HEIGHT,
++ NULL);
++ }
++
++ } else {
++ gnome_canvas_item_hide (GNOME_CANVAS_ITEM (catinfo->group));
++ catinfo->visible = FALSE;
++ }
++ }
++
++ /* substract the last ITEMS_SEPARATION to
++ adjust the canvas size a bit more */
++ vert_pos -= ITEMS_SEPARATION;
++
++ priv->height = MAX (vert_pos, priv->min_height);
++ priv->width = priv->max_width;
++}
++
++
++static void
++set_style (PanelAddtoCanvas *canvas, gboolean font_changed)
++{
++ GSList *l, *m;
++ PanelAddtoCategory *current_category;
++ PanelAddtoEntry *current_entry;
++ PanelAddtoCanvasPrivate *priv;
++ GtkWidget *widget = GTK_WIDGET (canvas);
++
++
++ if (!GTK_WIDGET_REALIZED (widget))
++ return;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ CategoryInfo *catinfo = current_category->user_data;
++
++ if (catinfo->line) {
++ g_object_set (catinfo->line,
++ "fill_color_gdk", &widget->style->text_aa[GTK_STATE_NORMAL],
++ NULL);
++ }
++ if (catinfo->title) {
++ g_object_set (catinfo->title,
++ "fill_color_gdk", &widget->style->text[GTK_STATE_NORMAL],
++ NULL);
++
++ if (font_changed)
++ g_object_set (catinfo->title,
++ "font", NULL,
++ NULL);
++ }
++
++ for (m = current_category->entries; m; m = m->next) {
++ current_entry = m->data;
++ EntryInfo *entryinfo = current_entry->user_data;
++ if (font_changed && entryinfo->text)
++ g_object_set (entryinfo->text,
++ "font", NULL,
++ NULL);
++ setup_entry (canvas, current_entry);
++ }
++ }
++
++ if (font_changed) {
++ calculate_sizes (canvas);
++ relayout_canvas (canvas);
++ }
++}
++
++
++GtkWidget*
++panel_addto_canvas_new (PanelAddtoInformation *info)
++{
++
++ return g_object_new (PANEL_ADDTO_TYPE_CANVAS,
++ "info", info,
++ NULL);
++}
++
++/* Accessibility support */
++
++static gpointer accessible_parent_class;
++static gpointer accessible_item_parent_class;
++
++enum {
++ ACTION_ACTIVATE,
++ LAST_ACTION
++};
++
++typedef struct {
++ AtkObject parent;
++
++ PanelAddtoEntry *entry;
++ AtkStateSet *state_set;
++
++ guint action_idle_handler;
++} PanelAddtoCanvasItemAccessible;
++
++typedef struct {
++ AtkObjectClass parent_class;
++} PanelAddtoCanvasItemAccessibleClass;
++
++static const gchar *const action_names[] =
++{
++ "activate",
++ NULL
++};
++
++static const gchar *const action_descriptions[] =
++{
++ "Activate item",
++ NULL
++};
++
++static void
++panel_addto_canvas_item_accessible_get_extents (AtkComponent *component,
++ gint *x,
++ gint *y,
++ gint *width,
++ gint *height,
++ AtkCoordType coord_type)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvas *canvas;
++ GnomeCanvasItem *cover;
++ AtkObject *parent_object;
++ gint p_x, p_y;
++
++ item = (PanelAddtoCanvasItemAccessible *) component;
++
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++ parent_object = gtk_widget_get_accessible (GTK_WIDGET (canvas));
++ atk_component_get_position (ATK_COMPONENT (parent_object), &p_x, &p_y, coord_type);
++
++
++ /* the cover pretty much represents the item size */
++
++
++ cover = GNOME_CANVAS_ITEM (((EntryInfo *)item->entry->user_data)->cover);
++
++ *x = p_x + cover->x1;
++ *y = p_y + cover->y1;
++ *width = cover->x2 - cover->x1;
++ *height = cover->y2 - cover->y1;
++}
++
++static void
++atk_component_item_interface_init (AtkComponentIface *iface)
++{
++ iface->get_extents = panel_addto_canvas_item_accessible_get_extents;
++}
++
++static gboolean
++idle_do_action (gpointer data)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ item = (PanelAddtoCanvasItemAccessible *) data;
++
++ item->action_idle_handler = 0;
++ activate_entry (item->entry);
++
++ return FALSE;
++}
++
++
++static gboolean
++panel_addto_canvas_item_accessible_action_do_action (AtkAction *action,
++ gint index)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ if (index < 0 || index >= LAST_ACTION)
++ return FALSE;
++
++ item = (PanelAddtoCanvasItemAccessible *) action;
++
++ switch (index) {
++ case ACTION_ACTIVATE:
++ if (!item->action_idle_handler)
++ item->action_idle_handler = g_idle_add (idle_do_action, item);
++ break;
++ default:
++ g_assert_not_reached ();
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++static gint
++panel_addto_canvas_item_accessible_action_get_n_actions (AtkAction *action)
++{
++ return LAST_ACTION;
++}
++
++static const gchar *
++panel_addto_canvas_item_accessible_action_get_description (AtkAction *action,
++ gint index)
++{
++ if (index < 0 || index >= LAST_ACTION)
++ return NULL;
++
++ return action_descriptions[index];
++}
++
++static const gchar *
++panel_addto_canvas_item_accessible_action_get_name (AtkAction *action,
++ gint index)
++{
++ if (index < 0 || index >= LAST_ACTION)
++ return NULL;
++
++ return action_names[index];
++}
++
++static void
++atk_action_item_interface_init (AtkActionIface *iface)
++{
++ iface->do_action = panel_addto_canvas_item_accessible_action_do_action;
++ iface->get_n_actions = panel_addto_canvas_item_accessible_action_get_n_actions;
++ iface->get_description = panel_addto_canvas_item_accessible_action_get_description;
++ iface->get_name = panel_addto_canvas_item_accessible_action_get_name;
++}
++
++static gint
++panel_addto_canvas_item_accessible_get_index_in_parent (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ return ((EntryInfo *) item->entry->user_data)->index;
++}
++
++static G_CONST_RETURN gchar*
++panel_addto_canvas_item_accessible_get_name (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++
++ if (object->name)
++ return object->name;
++ else {
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ if (item->entry && item->entry->title)
++ return item->entry->title;
++ else
++ return "Item with no description";
++ }
++}
++
++static AtkObject*
++panel_addto_canvas_item_accessible_get_parent (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvas *canvas;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++
++ return gtk_widget_get_accessible (GTK_WIDGET (canvas));
++}
++
++static AtkStateSet*
++panel_addto_canvas_item_accessible_ref_state_set (AtkObject *object)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++
++ item = (PanelAddtoCanvasItemAccessible *) object;
++ canvas = ((EntryInfo *) item->entry->user_data)->canvas;
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (item->entry == priv->selected)
++ atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSED);
++ else
++ atk_state_set_remove_state (item->state_set, ATK_STATE_FOCUSED);
++
++ return g_object_ref (item->state_set);
++}
++
++static void
++panel_addto_canvas_item_accessible_class_init (AtkObjectClass *class)
++{
++ GObjectClass *object_class;
++
++ accessible_item_parent_class = g_type_class_peek_parent (class);
++
++ object_class = (GObjectClass *)class;
++
++ class->get_index_in_parent = panel_addto_canvas_item_accessible_get_index_in_parent;
++ class->get_name = panel_addto_canvas_item_accessible_get_name;
++ class->get_parent = panel_addto_canvas_item_accessible_get_parent;
++ class->ref_state_set = panel_addto_canvas_item_accessible_ref_state_set;
++}
++
++static void
++panel_addto_canvas_item_accessible_object_init (PanelAddtoCanvasItemAccessible *item)
++{
++ item->state_set = atk_state_set_new ();
++
++ atk_state_set_add_state (item->state_set, ATK_STATE_ENABLED);
++ atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSABLE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_SENSITIVE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_SELECTABLE);
++ atk_state_set_add_state (item->state_set, ATK_STATE_VISIBLE);
++
++ item->action_idle_handler = 0;
++}
++
++static GType
++panel_addto_canvas_item_accessible_get_type (void)
++{
++ static GType type = 0;
++
++ if (type == 0) {
++ static const GTypeInfo info = {
++ sizeof (PanelAddtoCanvasItemAccessibleClass),
++ (GBaseInitFunc) NULL, /* base init */
++ (GBaseFinalizeFunc) NULL, /* base finalize */
++ (GClassInitFunc) panel_addto_canvas_item_accessible_class_init, /* class init */
++ (GClassFinalizeFunc) NULL, /* class finalize */
++ NULL, /* class data */
++ sizeof (PanelAddtoCanvasItemAccessible), /* instance size */
++ 0, /* nb preallocs */
++ (GInstanceInitFunc) panel_addto_canvas_item_accessible_object_init, /* instance init */
++ NULL /* value table */
++ };
++
++ static const GInterfaceInfo atk_component_info = {
++ (GInterfaceInitFunc) atk_component_item_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ static const GInterfaceInfo atk_action_info = {
++ (GInterfaceInitFunc) atk_action_item_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ type = g_type_register_static (ATK_TYPE_OBJECT,
++ "PanelAddtoCanvasItemAccessible", &info, 0);
++
++ g_type_add_interface_static (type, ATK_TYPE_COMPONENT,
++ &atk_component_info);
++ g_type_add_interface_static (type, ATK_TYPE_ACTION,
++ &atk_action_info);
++ }
++
++ return type;
++}
++
++static gint
++panel_addto_canvas_accessible_get_n_children (AtkObject *accessible)
++{
++ GSList *l;
++ PanelAddtoCategory *current_category;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ gint count;
++
++ widget = GTK_ACCESSIBLE (accessible)->widget;
++
++ if (!widget)
++ return 0;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ count = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ count += current_category->n_entries;
++ }
++
++ return count;
++}
++
++static PanelAddtoEntry*
++panel_addto_canvas_accessible_get_entry (PanelAddtoCanvas *canvas, gint index)
++{
++ GSList *l;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCategory *current_category;
++ gint count;
++
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ count = 0;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ if (index >= count &&
++ index < count + current_category->n_entries) {
++ return g_slist_nth_data (current_category->entries, index - count);
++ } else
++ count += current_category->n_entries;
++ }
++
++ return NULL;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_child (AtkObject *accessible, gint index)
++{
++ PanelAddtoCanvasItemAccessible *item;
++ PanelAddtoEntry *entry;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ AtkObject *object;
++
++ widget = GTK_ACCESSIBLE (accessible)->widget;
++
++ if (!widget)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++ entry = panel_addto_canvas_accessible_get_entry (canvas, index);
++
++ if (!entry)
++ return NULL;
++
++ object = g_hash_table_lookup (priv->accessible_children, &index);
++
++ if (!object) {
++ object = g_object_new (panel_addto_canvas_item_accessible_get_type (), NULL);
++ item = (PanelAddtoCanvasItemAccessible *) object;
++
++ object->role = ATK_ROLE_ICON;
++ item->entry = entry;
++
++ g_hash_table_insert (priv->accessible_children,
++ &((EntryInfo *) entry->user_data)->index, object);
++ }
++
++ return g_object_ref (object);
++}
++
++static void
++panel_addto_canvas_accessible_initialize (AtkObject *accessible, gpointer data)
++{
++ if (ATK_OBJECT_CLASS (accessible_parent_class)->initialize)
++ ATK_OBJECT_CLASS (accessible_parent_class)->initialize (accessible, data);
++
++ accessible->role = ATK_ROLE_LAYERED_PANE;
++}
++
++static void
++panel_addto_canvas_accessible_class_init (AtkObjectClass *class)
++{
++ GObjectClass *object_class;
++ GtkAccessibleClass *accessible_class;
++
++ accessible_parent_class = g_type_class_peek_parent (class);
++
++ object_class = (GObjectClass *)class;
++ accessible_class = (GtkAccessibleClass *)class;
++
++ class->get_n_children = panel_addto_canvas_accessible_get_n_children;
++ class->ref_child = panel_addto_canvas_accessible_ref_child;
++ class->initialize = panel_addto_canvas_accessible_initialize;
++}
++
++static gboolean
++panel_addto_canvas_accessible_add_selection (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++ PanelAddtoEntry *entry;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ entry = panel_addto_canvas_accessible_get_entry (canvas, i);
++ select_entry (canvas, entry);
++
++ return TRUE;
++}
++
++static gboolean
++panel_addto_canvas_accessible_clear_selection (AtkSelection *selection)
++{
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ select_entry (canvas, NULL);
++
++ return TRUE;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_selection (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ if (priv->selected)
++ return atk_object_ref_accessible_child (gtk_widget_get_accessible (widget),
++ ((EntryInfo *)priv->selected->user_data)->index);
++ return NULL;
++}
++
++static gint
++panel_addto_canvas_accessible_get_selection_count (AtkSelection *selection)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return 0;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ return (priv->selected) ? 1 : 0;
++}
++
++static gboolean
++panel_addto_canvas_accessible_is_child_selected (AtkSelection *selection, gint i)
++{
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ GtkWidget *widget;
++
++ widget = GTK_ACCESSIBLE (selection)->widget;
++
++ if (!widget)
++ return FALSE;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ return (priv->selected == panel_addto_canvas_accessible_get_entry (canvas, i));
++}
++
++static gboolean
++panel_addto_canvas_accessible_remove_selection (AtkSelection *selection, gint i)
++{
++ /* There can be only one item selected */
++ return panel_addto_canvas_accessible_clear_selection (selection);
++}
++
++static gboolean
++panel_addto_canvas_accessible_select_all_selection (AtkSelection *selection)
++{
++ /* This can't happen */
++ return FALSE;
++}
++
++static void
++panel_addto_canvas_accessible_selection_interface_init (AtkSelectionIface *iface)
++{
++ iface->add_selection = panel_addto_canvas_accessible_add_selection;
++ iface->clear_selection = panel_addto_canvas_accessible_clear_selection;
++ iface->ref_selection = panel_addto_canvas_accessible_ref_selection;
++ iface->get_selection_count = panel_addto_canvas_accessible_get_selection_count;
++ iface->is_child_selected = panel_addto_canvas_accessible_is_child_selected;
++ iface->remove_selection = panel_addto_canvas_accessible_remove_selection;
++ iface->select_all_selection = panel_addto_canvas_accessible_select_all_selection;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_ref_accessible_at_point (AtkComponent *component,
++ gint x,
++ gint y,
++ AtkCoordType coord_type)
++{
++ GSList *l, *m;
++ GtkWidget *widget;
++ PanelAddtoCanvasPrivate *priv;
++ PanelAddtoCanvas *canvas;
++ PanelAddtoCategory *current_category;
++ EntryInfo *entry;
++ gint x_pos, y_pos, x_w, y_w;
++
++ widget = GTK_ACCESSIBLE (component)->widget;
++
++ if (widget == NULL)
++ return NULL;
++
++ canvas = PANEL_ADDTO_CANVAS (widget);
++ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (canvas);
++
++ atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type);
++ x_w = x - x_pos;
++ y_w = y - y_pos;
++
++ for (l = priv->info->categories; l; l = l->next) {
++ current_category = l->data;
++ for (m = current_category->entries; m; m = m->next) {
++ entry = (EntryInfo *) m->data;
++
++ if (x_w > entry->cover->x1 &&
++ x_w < entry->cover->x2 &&
++ y_w > entry->cover->y1 &&
++ y_w < entry->cover->y2)
++ return panel_addto_canvas_accessible_ref_child (ATK_OBJECT (component), entry->index);
++ }
++ }
++
++ return NULL;
++}
++
++static void
++atk_component_interface_init (AtkComponentIface *iface)
++{
++ iface->ref_accessible_at_point = panel_addto_canvas_accessible_ref_accessible_at_point;
++}
++
++static GType
++panel_addto_canvas_accessible_get_type (void)
++{
++ static GType type = 0;
++ AtkObjectFactory *factory;
++ GType derived_type;
++ GTypeQuery query;
++ GType derived_atk_type;
++
++ if (type == 0) {
++ static GTypeInfo info = {
++ 0, /* class size */
++ (GBaseInitFunc) NULL, /* base init */
++ (GBaseFinalizeFunc) NULL, /* base finalize */
++ (GClassInitFunc) panel_addto_canvas_accessible_class_init,
++ (GClassFinalizeFunc) NULL, /* class finalize */
++ NULL, /* class data */
++ 0, /* instance size */
++ 0, /* nb preallocs */
++ (GInstanceInitFunc) NULL, /* instance init */
++ NULL /* value table */
++ };
++
++ static const GInterfaceInfo atk_component_info = {
++ (GInterfaceInitFunc) atk_component_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ static const GInterfaceInfo atk_selection_info = {
++ (GInterfaceInitFunc) panel_addto_canvas_accessible_selection_interface_init,
++ (GInterfaceFinalizeFunc) NULL,
++ NULL
++ };
++
++ derived_type = g_type_parent (PANEL_ADDTO_TYPE_CANVAS);
++ factory = atk_registry_get_factory (atk_get_default_registry (),
++ derived_type);
++
++ derived_atk_type = atk_object_factory_get_accessible_type (factory);
++ g_type_query (derived_atk_type, &query);
++
++ info.class_size = query.class_size;
++ info.instance_size = query.instance_size;
++
++ type = g_type_register_static (derived_atk_type,
++ "PanelAddtoCanvasAccessible",
++ &info, 0);
++
++ g_type_add_interface_static (type,
++ ATK_TYPE_COMPONENT,
++ &atk_component_info);
++ g_type_add_interface_static (type,
++ ATK_TYPE_SELECTION,
++ &atk_selection_info);
++ }
++
++ return type;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_new (GObject *object)
++{
++ AtkObject *accessible;
++
++ accessible = g_object_new (panel_addto_canvas_accessible_get_type (), NULL);
++ atk_object_initialize (accessible, object);
++
++ return accessible;
++}
++
++static AtkObject*
++panel_addto_canvas_accessible_factory_create_accessible (GObject *object)
++{
++ return panel_addto_canvas_accessible_new (object);
++}
++
++static void
++panel_addto_canvas_accessible_factory_class_init (AtkObjectFactoryClass *class)
++{
++ class->create_accessible = panel_addto_canvas_accessible_factory_create_accessible;
++ class->get_accessible_type = panel_addto_canvas_accessible_get_type;
++}
++
++static GType
++panel_addto_canvas_accessible_factory_get_type (void)
++{
++ static GType type = 0;
++
++ if (type == 0) {
++ static const GTypeInfo info = {
++ sizeof (AtkObjectFactoryClass),
++ NULL, /* base_init */
++ NULL, /* base_finalize */
++ (GClassInitFunc) panel_addto_canvas_accessible_factory_class_init,
++ NULL, /* class_finalize */
++ NULL, /* class_data */
++ sizeof (AtkObjectFactory),
++ 0, /* n_preallocs */
++ NULL, NULL
++ };
++
++ type = g_type_register_static (ATK_TYPE_OBJECT_FACTORY,
++ "PanelAddtoCanvasAccessibleFactory",
++ &info, 0);
++ }
++
++ return type;
++}
++
++static AtkObject*
++panel_addto_canvas_get_accessible (GtkWidget *widget)
++{
++ static gboolean already_here = FALSE;
++
++ if (!already_here) {
++ AtkObjectFactory *factory;
++ AtkRegistry *registry;
++ GType derived_type;
++ GType derived_atk_type;
++
++ already_here = TRUE;
++
++ derived_type = g_type_parent (PANEL_ADDTO_TYPE_CANVAS);
++
++ registry = atk_get_default_registry ();
++ factory = atk_registry_get_factory (registry, derived_type);
++
++ derived_atk_type = atk_object_factory_get_accessible_type (factory);
++
++ if (g_type_is_a (derived_atk_type, GTK_TYPE_ACCESSIBLE)) {
++ atk_registry_set_factory_type (registry,
++ PANEL_ADDTO_TYPE_CANVAS,
++ panel_addto_canvas_accessible_factory_get_type ());
++ }
++ }
++
++ return (* GTK_WIDGET_CLASS (panel_addto_canvas_parent_class)->get_accessible) (widget);
++}
+diff -Nur gnome-panel-2.14.1/panel-addto-canvas.h gnome-panel-2.14.1.new/panel-addto-canvas.h
+--- gnome-panel-2.14.1/panel-addto-canvas.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-canvas.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,88 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* Copyright (C) 2005 Carlos Garnacho
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Authors: Jody Goldberg
++ * Carlos Garnacho Parro
++ * Manu Cornet
++ */
++
++#ifndef PANEL_ADDTO_CANVAS_H
++#define PANEL_ADDTO_CANVAS_H
++
++#include
++#include
++#include "panel-addto.h"
++
++G_BEGIN_DECLS
++
++#define PANEL_ADDTO_TYPE_CANVAS (panel_addto_canvas_get_type ())
++#define PANEL_ADDTO_CANVAS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvas))
++#define PANEL_ADDTO_CANVAS_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasClass))
++#define PANEL_ADDTO_IS_CANVAS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PANEL_ADDTO_TYPE_CANVAS))
++#define PANEL_ADDTO_IS_CANVAS_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), PANEL_ADDTO_TYPE_CANVAS))
++#define PANEL_ADDTO_CANVAS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasClass))
++
++typedef struct _PanelAddtoCanvas PanelAddtoCanvas;
++typedef struct _PanelAddtoCanvasClass PanelAddtoCanvasClass;
++
++struct _PanelAddtoCanvas {
++ GnomeCanvas parent;
++};
++
++struct _PanelAddtoCanvasClass {
++ GnomeCanvasClass parent_class;
++
++ void (*changed) (PanelAddtoCanvas *canvas, gchar *str);
++};
++
++typedef struct _PanelAddtoCanvasPrivate PanelAddtoCanvasPrivate;
++
++struct _PanelAddtoCanvasPrivate {
++ GnomeCanvasItem *under_cover;
++ double height;
++ double width;
++
++ double min_height;
++ double max_width;
++ PanelAddtoInformation *info;
++ PanelAddtoEntry *selected;
++
++ gboolean rtl;
++ gint items_per_row;
++ gint selected_row;
++
++ gchar *search_text;
++
++ /* calculated sizes
++ for the elements */
++ gdouble max_item_width;
++ gdouble max_item_height;
++ gdouble max_icon_height;
++
++ /* accessibility stuff */
++ GHashTable *accessible_children;
++};
++
++GType panel_addto_canvas_get_type (void);
++void activate_entry (PanelAddtoEntry *entry);
++void panel_addto_relayout_for_search (GtkWidget *search_entry, PanelAddtoDialog *dialog);
++void panel_addto_activate_from_searchbar (GtkWidget *search_entry, PanelAddtoDialog *dialog);
++GtkWidget* panel_addto_canvas_new (PanelAddtoInformation *info);
++
++G_END_DECLS
++
++#endif /* PANEL_ADDTO_CANVAS_H */
+diff -Nur gnome-panel-2.14.1/panel-addto-event-box.c gnome-panel-2.14.1.new/panel-addto-event-box.c
+--- gnome-panel-2.14.1/panel-addto-event-box.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-event-box.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,99 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation
++ * All rights reserved.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB. If not,
++ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++/*
++ @NOTATION@
++ */
++/* Event box item type for GnomeCanvas widget
++ *
++ * GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
++ * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
++ *
++ *
++ * Author: Chris Lahey
++ */
++
++#include
++
++#include "panel-addto-event-box.h"
++
++#define noVERBOSE
++
++static GnomeCanvasItemClass *parent_class;
++
++static double
++panel_addto_event_box_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
++ GnomeCanvasItem **actual_item)
++{
++ double x1, x2, y1, y2;
++ g_object_get (item,
++ "x1", &x1,
++ "x2", &x2,
++ "y1", &y1,
++ "y2", &y2,
++ NULL);
++ if (x <= x2 && x >= x1 &&
++ y <= y2 && y >= y1) {
++ *actual_item = item;
++
++ return 0.0;
++ }
++ return 1e12;
++}
++
++static void
++panel_addto_event_box_class_init (PanelAddtoEventBoxClass *class)
++{
++ GnomeCanvasItemClass *item_class;
++
++ item_class = (GnomeCanvasItemClass *) class;
++
++ parent_class = g_type_class_peek_parent (class);
++
++ item_class->point = panel_addto_event_box_point;
++}
++
++GType
++panel_addto_event_box_get_type (void)
++{
++ static GType type;
++
++ if (!type) {
++ static const GTypeInfo object_info = {
++ sizeof (PanelAddtoEventBoxClass),
++ (GBaseInitFunc) NULL,
++ (GBaseFinalizeFunc) NULL,
++ (GClassInitFunc) panel_addto_event_box_class_init,
++ (GClassFinalizeFunc) NULL,
++ NULL, /* class_data */
++ sizeof (PanelAddtoEventBox),
++ 0, /* n_preallocs */
++ (GInstanceInitFunc) NULL,
++ NULL /* value_table */
++ };
++
++ type = g_type_register_static (GNOME_TYPE_CANVAS_RECT, "PanelAddtoEventBox",
++ &object_info, 0);
++ }
++
++ return type;
++}
+diff -Nur gnome-panel-2.14.1/panel-addto-event-box.h gnome-panel-2.14.1.new/panel-addto-event-box.h
+--- gnome-panel-2.14.1/panel-addto-event-box.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-event-box.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,75 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation
++ * All rights reserved.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB. If not,
++ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++/*
++ @NOTATION@
++ */
++/* Event Box item type for GnomeCanvas widget
++ *
++ * GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
++ * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
++ *
++ *
++ * Author: Chris Lahey
++ */
++
++#ifndef PANEL_ADDTO_EVENT_BOX_H
++#define PANEL_ADDTO_EVENT_BOX_H
++
++
++#include
++
++#include
++
++G_BEGIN_DECLS
++
++/* Event Box item. No configurable or queryable arguments are available (use those in
++ * GnomeCanvasRE).
++ */
++
++
++#define PANEL_ADDTO_TYPE_EVENT_BOX (panel_addto_event_box_get_type ())
++#define PANEL_ADDTO_EVENT_BOX(obj) (GTK_CHECK_CAST ((obj), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBox))
++#define PANEL_ADDTO_EVENT_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBoxClass))
++#define PANEL_ADDTO_IS_EVENT_BOX(obj) (GTK_CHECK_TYPE ((obj), PANEL_ADDTO_TYPE_EVENT_BOX))
++#define PANEL_ADDTO_IS_EVENT_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), PANEL_ADDTO_TYPE_EVENT_BOX))
++#define PANEL_ADDTO_EVENT_BOX_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), PANEL_ADDTO_TYPE_EVENT_BOX, PanelAddtoEventBoxClass))
++
++
++typedef struct _PanelAddtoEventBox PanelAddtoEventBox;
++typedef struct _PanelAddtoEventBoxClass PanelAddtoEventBoxClass;
++
++struct _PanelAddtoEventBox {
++ GnomeCanvasRect item;
++};
++
++struct _PanelAddtoEventBoxClass {
++ GnomeCanvasRectClass parent_class;
++};
++
++
++/* Standard Gtk function */
++GType panel_addto_event_box_get_type (void) G_GNUC_CONST;
++
++G_END_DECLS
++
++#endif
+diff -Nur gnome-panel-2.14.1/panel-addto-rounded-rect.c gnome-panel-2.14.1.new/panel-addto-rounded-rect.c
+--- gnome-panel-2.14.1/panel-addto-rounded-rect.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-rounded-rect.c 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,103 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * panel-addto-rounded-rect.c: A rectangle with rounded corners
++ *
++ * Copyright (C) 2004 Novell Inc
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of version 2 of the GNU General Public
++ * License as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include
++#include "panel-addto-rounded-rect.h"
++#include "panel-addto-rounded-rect-pixbuf.h"
++#include
++#include
++
++struct _PanelAddtoRoundedRect {
++ GnomeCanvasRect base;
++};
++typedef GnomeCanvasRectClass PanelAddtoRoundedRectClass;
++
++#define GNOMECC_ROUNDED_RECT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNOMECC_TYPE_ROUNDED_RECT, PanelAddtoRoundedRectClass))
++#define GNOMECC_IS_ROUNDED_RECT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNOMECC_TYPE_ROUNDED_RECT))
++
++G_DEFINE_TYPE (PanelAddtoRoundedRect, panel_addto_rounded_rect, GNOME_TYPE_CANVAS_RECT);
++
++/*************************************************************************
++ * Adapted from nautilus/libnautilus-private/nautilus-icon-canvas-item.c
++ */
++/* clear the corners of the selection pixbuf by copying the corners of the passed-in pixbuf */
++static void
++panel_addto_rounded_rect_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
++ int x, int y, int width, int height)
++{
++ static GdkPixbuf *corner_pixbuf = NULL;
++ GnomeCanvasRE const *re = GNOME_CANVAS_RE (item);
++ int dest_width, dest_height, src_width, src_height;
++ int dx, dy;
++ int corner_size = 5;
++ double affine[6];
++
++ GNOME_CANVAS_ITEM_CLASS (panel_addto_rounded_rect_parent_class)->draw (item, drawable, x, y, width, height);
++
++ if (corner_pixbuf == NULL)
++ corner_pixbuf = gdk_pixbuf_new_from_inline (-1,
++ panel_addto_rounded_rect_frame, FALSE, NULL);
++ src_width = gdk_pixbuf_get_width (corner_pixbuf);
++ src_height = gdk_pixbuf_get_height (corner_pixbuf);
++
++ gnome_canvas_item_i2c_affine (item, affine);
++
++ dest_width = fabs (re->x2 - re->x1);
++ dest_height = fabs (re->y2 - re->y1);
++ dx = affine[4] - x;
++ dy = affine[5] - y;
++
++ /* draw top left corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ 0, 0,
++ dx, dy,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw top right corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ src_width - corner_size, 0,
++ dx + dest_width - corner_size, dy,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw bottom left corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ 0, src_height - corner_size,
++ dx, dy + dest_height - corner_size,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++ /* draw bottom right corner */
++ gdk_draw_pixbuf (drawable, NULL, corner_pixbuf,
++ src_width - corner_size, src_height - corner_size,
++ dx + dest_width - corner_size, dy + dest_height - corner_size,
++ corner_size, corner_size,
++ GDK_RGB_DITHER_NORMAL, 0, 0);
++}
++
++static void
++panel_addto_rounded_rect_class_init (PanelAddtoRoundedRectClass *klass)
++{
++ GnomeCanvasItemClass *item_klass = (GnomeCanvasItemClass *) klass;
++ item_klass->draw = panel_addto_rounded_rect_draw;
++}
++static void
++panel_addto_rounded_rect_init (PanelAddtoRoundedRect *rr)
++{
++}
+diff -Nur gnome-panel-2.14.1/panel-addto-rounded-rect.h gnome-panel-2.14.1.new/panel-addto-rounded-rect.h
+--- gnome-panel-2.14.1/panel-addto-rounded-rect.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-rounded-rect.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,39 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * gnomecc-rounded-rect.c: A rectangle with rounded corners
++ *
++ * Copyright (C) 2004 Novell Inc
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of version 2 of the GNU General Public
++ * License as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++#ifndef PANEL_ADDTO_ROUNDED_RECT_H
++#define PANEL_ADDTO_ROUNDED_RECT_H
++
++#include
++#include
++#include
++
++G_BEGIN_DECLS
++
++#define PANEL_ADDTO_TYPE_ROUNDED_RECT (panel_addto_rounded_rect_get_type ())
++#define PANEL_ADDTO_ROUNDED_RECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PANEL_ADDTO_TYPE_ROUNDED_RECT, PanelAddtoRoundedRect))
++#define PANEL_ADDTO_IS_ROUNDED_RECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PANEL_ADDTO_TYPE_ROUNDED_RECT))
++
++typedef struct _PanelAddtoRoundedRect PanelAddtoRoundedRect;
++GType panel_addto_rounded_rect_get_type (void);
++
++G_END_DECLS
++
++#endif /* PANEL_ADDTO_ROUNDED_RECT_H */
+diff -Nur gnome-panel-2.14.1/panel-addto-rounded-rect-pixbuf.h gnome-panel-2.14.1.new/panel-addto-rounded-rect-pixbuf.h
+--- gnome-panel-2.14.1/panel-addto-rounded-rect-pixbuf.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.1.new/panel-addto-rounded-rect-pixbuf.h 2006-04-16 22:07:22.000000000 +0200
+@@ -0,0 +1,319 @@
++/* GdkPixbuf RGBA C-Source image dump */
++
++#ifdef __SUNPRO_C
++#pragma align 4 (panel_addto_rounded_rect_frame)
++#endif
++#ifdef __GNUC__
++static const guint8 panel_addto_rounded_rect_frame[] __attribute__ ((__aligned__ (4))) =
++#else
++static const guint8 panel_addto_rounded_rect_frame[] =
++#endif
++{ ""
++ /* Pixbuf magic (0x47646b50) */
++ "GdkP"
++ /* length: header (24) + pixel_data (5848) */
++ "\0\0\26\360"
++ /* pixdata_type (0x1010002) */
++ "\1\1\0\2"
++ /* rowstride (344) */
++ "\0\0\1X"
++ /* width (86) */
++ "\0\0\0V"
++ /* height (17) */
++ "\0\0\0\21"
++ /* pixel_data: */
++ "\377\377\377\377\377\377\377\377\377\377\377\303\377\377\377q\377\377"
++ "\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377/\377\377\377q\377\377\377\303\377\377"
++ "\377\377\377\377\377\377\377\377\377\377\377\377\377\242\377\377\377"
++ "(\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
++ "\0\377\377\377(\377\377\377\242\377\377\377\377\377\377\377\303\377\377"
++ "\377(\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377(\377\377\377\303\377\377"
++ "\377q\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377q\377\377\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377/\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377/\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377/\377\377"
++ "\377q\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377q\377\377\377\303\377\377\377(\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377(\377\377\377\303\377\377\377\377\377\377\377\242\377\377\377(\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
++ "\377\377(\377\377\377\242\377\377\377\377\377\377\377\377\377\377\377"
++ "\377\377\377\377\303\377\377\377q\377\377\377/\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
++ "\377/\377\377\377q\377\377\377\303\377\377\377\377\377\377\377\377"};
++
++
--- gnome-panel-2.14.1.orig/debian/patches/99_about-ubuntu-translation.patch
+++ gnome-panel-2.14.1/debian/patches/99_about-ubuntu-translation.patch
@@ -0,0 +1,2689 @@
+diff -Nur gnome-panel-2.14.0/intltool-extract.in gnome-panel-2.14.0.new/intltool-extract.in
+--- gnome-panel-2.14.0/intltool-extract.in 2006-03-13 20:48:07.000000000 +0100
++++ gnome-panel-2.14.0.new/intltool-extract.in 2006-02-08 00:32:13.000000000 +0100
+@@ -32,7 +32,7 @@
+ ## Release information
+ my $PROGRAM = "intltool-extract";
+ my $PACKAGE = "intltool";
+-my $VERSION = "0.34.1";
++my $VERSION = "0.34.2";
+
+ ## Loaded modules
+ use strict;
+diff -Nur gnome-panel-2.14.0/intltool-merge.in gnome-panel-2.14.0.new/intltool-merge.in
+--- gnome-panel-2.14.0/intltool-merge.in 2006-03-13 20:48:07.000000000 +0100
++++ gnome-panel-2.14.0.new/intltool-merge.in 2006-02-08 00:32:13.000000000 +0100
+@@ -35,7 +35,7 @@
+ ## Release information
+ my $PROGRAM = "intltool-merge";
+ my $PACKAGE = "intltool";
+-my $VERSION = "0.34.1";
++my $VERSION = "0.34.2";
+
+ ## Loaded modules
+ use strict;
+diff -Nur gnome-panel-2.14.0/intltool-update.in gnome-panel-2.14.0.new/intltool-update.in
+--- gnome-panel-2.14.0/intltool-update.in 2006-03-13 20:48:07.000000000 +0100
++++ gnome-panel-2.14.0.new/intltool-update.in 2006-02-08 00:32:13.000000000 +0100
+@@ -30,7 +30,7 @@
+
+ ## Release information
+ my $PROGRAM = "intltool-update";
+-my $VERSION = "0.34.1";
++my $VERSION = "0.34.2";
+ my $PACKAGE = "intltool";
+
+ ## Loaded modules
+diff -Nur gnome-panel-2.14.0/po/gnome-panel-2.0.pot gnome-panel-2.14.0.new/po/gnome-panel-2.0.pot
+--- gnome-panel-2.14.0/po/gnome-panel-2.0.pot 1970-01-01 01:00:00.000000000 +0100
++++ gnome-panel-2.14.0.new/po/gnome-panel-2.0.pot 2006-03-14 12:44:58.000000000 +0100
+@@ -0,0 +1,2641 @@
++# SOME DESCRIPTIVE TITLE.
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++# FIRST AUTHOR , YEAR.
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: PACKAGE VERSION\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2006-03-14 12:44+0100\n"
++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
++"Last-Translator: FULL NAME \n"
++"Language-Team: LANGUAGE \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:1
++msgid "Ad_just Date & Time"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:2
++msgid "Copy _Date"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:3
++msgid "Copy _Time"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:4
++#: ../applets/fish/GNOME_FishApplet.xml.h:1
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.xml.h:1
++#: ../applets/wncklet/GNOME_ShowDesktopApplet.xml.h:1
++#: ../applets/wncklet/GNOME_WindowListApplet.xml.h:1
++#: ../applets/wncklet/GNOME_WindowMenuApplet.xml.h:1
++#: ../applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml.h:1
++msgid "_About"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:5
++#: ../applets/fish/GNOME_FishApplet.xml.h:2
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.xml.h:2
++#: ../applets/wncklet/GNOME_ShowDesktopApplet.xml.h:2
++#: ../applets/wncklet/GNOME_WindowListApplet.xml.h:2
++#: ../applets/wncklet/GNOME_WindowMenuApplet.xml.h:2
++#: ../applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml.h:2
++#: ../gnome-panel/drawer.c:600 ../gnome-panel/panel-action-button.c:775
++#: ../gnome-panel/panel-context-menu.c:326 ../gnome-panel/panel-menu-bar.c:412
++#: ../gnome-panel/panel-menu-button.c:685
++msgid "_Help"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet.xml.h:6
++#: ../applets/fish/GNOME_FishApplet.xml.h:3
++#: ../applets/wncklet/GNOME_WindowListApplet.xml.h:3
++#: ../applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml.h:3
++msgid "_Preferences"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet_Factory.server.in.in.h:1
++#: ../applets/fish/GNOME_FishApplet_Factory.server.in.in.h:1
++msgid "Accessories"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet_Factory.server.in.in.h:2
++#: ../applets/clock/clock.c:2738
++msgid "Clock"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet_Factory.server.in.in.h:3
++msgid "Clock Applet Factory"
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet_Factory.server.in.in.h:4
++msgid "Factory for creating clock applets."
++msgstr ""
++
++#: ../applets/clock/GNOME_ClockApplet_Factory.server.in.in.h:5
++msgid "Get the current time and date"
++msgstr ""
++
++#: ../applets/clock/clock.c:312
++msgid "%l:%M:%S %p"
++msgstr ""
++
++#: ../applets/clock/clock.c:312 ../applets/clock/clock.c:633
++msgid "%l:%M %p"
++msgstr ""
++
++#: ../applets/clock/clock.c:314 ../applets/clock/clock.c:1779
++msgid "%H:%M:%S"
++msgstr ""
++
++#: ../applets/clock/clock.c:314 ../applets/clock/clock.c:635
++#: ../applets/clock/clock.c:1781
++msgid "%H:%M"
++msgstr ""
++
++#. translators: replace %e with %d if, when the day of the
++#. * month as a decimal number is a single digit, it
++#. * should begin with a 0 in your locale (e.g. "May
++#. * 01" instead of "May 1").
++#.
++#: ../applets/clock/clock.c:325
++msgid "%a %b %e"
++msgstr ""
++
++#. translators: reverse the order of these arguments
++#. * if the time should come before the
++#. * date on a clock in your locale.
++#.
++#: ../applets/clock/clock.c:332
++#, c-format
++msgid ""
++"%1$s\n"
++"%2$s"
++msgstr ""
++
++#. translators: reverse the order of these arguments
++#. * if the time should come before the
++#. * date on a clock in your locale.
++#.
++#: ../applets/clock/clock.c:339
++#, c-format
++msgid "%1$s, %2$s"
++msgstr ""
++
++#. Show date in tooltip
++#: ../applets/clock/clock.c:420
++msgid "%A %B %d"
++msgstr ""
++
++#: ../applets/clock/clock.c:432
++msgid "Click to view your appointments and tasks"
++msgstr ""
++
++#: ../applets/clock/clock.c:434
++msgid "Click to view month calendar"
++msgstr ""
++
++#. Translators: If the event did not start on the current day
++#. we will display the start date in the most abbreviated way possible.
++#: ../applets/clock/clock.c:640
++msgid "%b %d"
++msgstr ""
++
++#: ../applets/clock/clock.c:987
++msgid "Tasks"
++msgstr ""
++
++#: ../applets/clock/clock.c:1137
++msgid "All Day"
++msgstr ""
++
++#: ../applets/clock/clock.c:1176
++msgid "Appointments"
++msgstr ""
++
++#: ../applets/clock/clock.c:1408
++msgid "Calendar"
++msgstr ""
++
++#: ../applets/clock/clock.c:1697
++msgid "Computer Clock"
++msgstr ""
++
++#: ../applets/clock/clock.c:1774
++msgid "%I:%M:%S %p"
++msgstr ""
++
++#: ../applets/clock/clock.c:1776
++msgid "%I:%M %p"
++msgstr ""
++
++#: ../applets/clock/clock.c:1818
++msgid "%A, %B %d %Y"
++msgstr ""
++
++#: ../applets/clock/clock.c:1875
++#, c-format
++msgid "Failed to launch time configuration tool: %s"
++msgstr ""
++
++#: ../applets/clock/clock.c:1911
++msgid ""
++"Failed to locate a program for configuring the date and time. Perhaps none "
++"is installed?"
++msgstr ""
++
++#: ../applets/clock/clock.c:2389
++msgid "Custom format"
++msgstr ""
++
++#: ../applets/clock/clock.c:2513 ../applets/clock/clock.c:2697
++#: ../applets/fish/fish.c:158 ../applets/notification_area/main.c:83
++#: ../applets/wncklet/window-list.c:114 ../applets/wncklet/wncklet.c:124
++#: ../applets/wncklet/workspace-switcher.c:239
++#, c-format
++msgid "There was an error displaying help: %s"
++msgstr ""
++
++#: ../applets/clock/clock.c:2548
++msgid "Clock Preferences"
++msgstr ""
++
++#: ../applets/clock/clock.c:2572
++msgid "Clock _type:"
++msgstr ""
++
++#: ../applets/clock/clock.c:2583
++msgid "12 hour"
++msgstr ""
++
++#: ../applets/clock/clock.c:2584
++msgid "24 hour"
++msgstr ""
++
++#: ../applets/clock/clock.c:2585
++msgid "UNIX time"
++msgstr ""
++
++#: ../applets/clock/clock.c:2586
++msgid "Internet time"
++msgstr ""
++
++#: ../applets/clock/clock.c:2594
++msgid "Custom _format:"
++msgstr ""
++
++#: ../applets/clock/clock.c:2613
++msgid "Show _seconds"
++msgstr ""
++
++#: ../applets/clock/clock.c:2622
++msgid "Show _date"
++msgstr ""
++
++#: ../applets/clock/clock.c:2631
++msgid "Use _UTC"
++msgstr ""
++
++#: ../applets/clock/clock.c:2741
++msgid "The Clock displays the current time and date"
++msgstr ""
++
++#. Translator credits
++#: ../applets/clock/clock.c:2744 ../applets/fish/fish.c:583
++#: ../applets/notification_area/main.c:134
++#: ../applets/wncklet/showdesktop.c:503 ../applets/wncklet/window-list.c:784
++#: ../applets/wncklet/window-menu.c:75
++#: ../applets/wncklet/workspace-switcher.c:562
++#: ../gnome-panel/panel-context-menu.c:131
++msgid "translator-credits"
++msgstr ""
++
++#. Translators:
++#. This controls whether the GNOME panel clock should display time in 24 hour mode
++#. or 12 hour mode by default. The only valid values for this are "24-hour" and
++#. "12-hour". If your locale uses 24 hour time notation, translate this to "24-hour".
++#. If your locale uses 12 hour time notation with am/pm, translate this to "12-hour".
++#.
++#. Do NOT translate this into anything else than "24-hour" or "12-hour". For example,
++#. if you translate this to "24 sata" or anything else that isn't "24-hour" or
++#. "12-hour", things will not work.
++#.
++#: ../applets/clock/clock.schemas.in.h:11
++msgid "24-hour"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:12
++msgid "Custom format of the clock"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:13
++msgid "Hour format"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:14
++msgid "If true, display date in the clock, in addition to time."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:15
++msgid "If true, display seconds in time."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:16
++msgid "If true, display time in Universal Coordinated Time zone."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:17
++msgid "If true, show date in a tooltip when the pointer is over the clock."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:18
++msgid "If true, show week numbers in the calendar."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:19
++msgid "Show date in clock"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:20
++msgid "Show date in tooltip"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:21
++msgid "Show time with seconds"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:22
++msgid "Show week numbers in calendar"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:23
++msgid ""
++"The use of this key was deprecated in GNOME 2.6 in favour of the 'format' "
++"key. The schema is retained for compatibility with older versions."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:24
++msgid ""
++"This key specifies the format used by the clock applet when the format key "
++"is set to \"custom\". You can use conversion specifiers understood by "
++"strftime() to obtain a specific format."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:25
++msgid ""
++"This key specifies the hour format used by the clock applet. Possible values "
++"are \"12-hour\", \"24-hour\", \"internet\", \"unix\" and \"custom\". If set "
++"to \"internet\", the clock will display Internet time. The Internet time "
++"system divides the day into 1000 \".beats\". There are no time zones in this "
++"system, so time is the same all over the world. If set to \"unix\", the "
++"clock will display time in seconds since Epoch, i.e. 1970-01-01. If set to "
++"\"custom\", the clock will display time according to the format specified in "
++"the custom_format key."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:26
++msgid "This key specifies the program to run in order to configure the time."
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:27
++msgid "Time configuration tool"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:28
++msgid "Use Internet time"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:29
++msgid "Use UNIX time"
++msgstr ""
++
++#: ../applets/clock/clock.schemas.in.h:30
++msgid "Use UTC"
++msgstr ""
++
++#: ../applets/fish/GNOME_FishApplet_Factory.server.in.in.h:2
++msgid "Display a swimming fish or another animated creature"
++msgstr ""
++
++#: ../applets/fish/GNOME_FishApplet_Factory.server.in.in.h:3
++#: ../applets/fish/fish.c:577
++msgid "Fish"
++msgstr ""
++
++#: ../applets/fish/GNOME_FishApplet_Factory.server.in.in.h:4
++msgid "From Whence That Stupid Fish Came"
++msgstr ""
++
++#: ../applets/fish/GNOME_FishApplet_Factory.server.in.in.h:5
++msgid "Wanda Factory"
++msgstr ""
++
++#: ../applets/fish/fish.c:246
++#, c-format
++msgid ""
++"Warning: The command appears to be something actually useful.\n"
++"Since this is a useless applet, you may not want to do this.\n"
++"We strongly advise you against using %s for anything\n"
++"which would make the applet \"practical\" or useful."
++msgstr ""
++
++#: ../applets/fish/fish.c:431 ../gnome-panel/panel-properties-dialog.c:440
++msgid "Images"
++msgstr ""
++
++#: ../applets/fish/fish.c:545 ../applets/fish/fish.c:605
++#: ../applets/fish/fish.c:720
++#, no-c-format
++msgid "%s the Fish"
++msgstr ""
++
++#: ../applets/fish/fish.c:546
++#, c-format
++msgid ""
++"%s has no use what-so-ever. It only takes up disk space and compilation "
++"time, and if loaded it also takes up precious panel space and memory. "
++"Anybody found using it should be promptly sent for a psychiatric evaluation."
++msgstr ""
++
++#: ../applets/fish/fish.c:570
++msgid "(with minor help from George)"
++msgstr ""
++
++#: ../applets/fish/fish.c:606
++#, c-format
++msgid "%s the Fish, a contemporary oracle"
++msgstr ""
++
++#: ../applets/fish/fish.c:676
++msgid "Unable to locate the command to execute"
++msgstr ""
++
++#: ../applets/fish/fish.c:725
++#, no-c-format
++msgid "%s the Fish Says:"
++msgstr ""
++
++#: ../applets/fish/fish.c:794
++#, c-format
++msgid ""
++"Unable to read output from command\n"
++"\n"
++"Details: %s"
++msgstr ""
++
++#: ../applets/fish/fish.c:859
++msgid "_Speak again"
++msgstr ""
++
++#: ../applets/fish/fish.c:940
++#, c-format
++msgid "The configured command is not working and has been replaced by: %s"
++msgstr ""
++
++#: ../applets/fish/fish.c:963
++#, c-format
++msgid ""
++"Unable to execute '%s'\n"
++"\n"
++"Details: %s"
++msgstr ""
++
++#: ../applets/fish/fish.c:979
++#, c-format
++msgid ""
++"Unable to read from '%s'\n"
++"\n"
++"Details: %s"
++msgstr ""
++
++#: ../applets/fish/fish.c:1597
++msgid ""
++"The water needs changing!\n"
++"(Look at today's date)"
++msgstr ""
++
++#: ../applets/fish/fish.c:1691
++#, c-format
++msgid "%s the Fish, the fortune teller"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:1 ../applets/wncklet/window-list.glade.h:1
++#: ../applets/wncklet/workspace-switcher.glade.h:1
++#: ../gnome-panel/panel-properties-dialog.glade.h:1
++msgid " "
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:2
++msgid "Animation"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:3
++msgid "General"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:4
++msgid "Co_mmand to run when clicked:"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:5
++msgid "Fish Preferences"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:6
++msgid "Select an animation"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:7
++msgid "_File:"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:8
++msgid "_Name of fish:"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:9
++msgid "_Pause per frame:"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:10
++msgid "_Rotate on vertical panels"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:11
++msgid "_Total frames in animation:"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:12
++msgid "frames"
++msgstr ""
++
++#: ../applets/fish/fish.glade.h:13
++msgid "seconds"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:1
++msgid ""
++"A fish without a name is a pretty dull fish. Bring your fish to life by "
++"naming him."
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:2
++msgid "Command to execute on click"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:3
++msgid "Frames in fish's animation"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:4
++msgid ""
++"If true, the fish's animation will be displayed rotated on vertical panels."
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:5
++msgid "Pause per frame"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:6
++msgid "Rotate on vertical panels"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:7
++msgid "The fish's animation pixmap"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:8
++msgid "The fish's name"
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:9
++msgid ""
++"This key specifies the command that will be tried to execute when the fish "
++"is clicked."
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:10
++msgid ""
++"This key specifies the filename of the pixmap which will be used for the "
++"animation displayed in the fish applet relative to the pixmap directory."
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:11
++msgid ""
++"This key specifies the number of frames that will be displayed in the fish's "
++"animation."
++msgstr ""
++
++#: ../applets/fish/fish.schemas.in.h:12
++msgid "This key specifies the number of seconds each frame will be displayed."
++msgstr ""
++
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.server.in.in.h:1
++msgid "Area where notification icons appear"
++msgstr ""
++
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.server.in.in.h:2
++#: ../applets/notification_area/main.c:129
++msgid "Notification Area"
++msgstr ""
++
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.server.in.in.h:3
++msgid "Notification Area Factory"
++msgstr ""
++
++#: ../applets/notification_area/GNOME_NotificationAreaApplet.server.in.in.h:4
++#: ../gnome-panel/panel-action-button.c:321
++#: ../gnome-panel/panel-action-button.c:333
++#: ../gnome-panel/panel-action-button.c:356
++#: ../gnome-panel/panel-action-button.c:367 ../gnome-panel/panel-addto.c:70
++#: ../gnome-panel/panel-addto.c:83 ../gnome-panel/panel-addto.c:96
++msgid "Utilities"
++msgstr ""
++
++#: ../applets/notification_area/eggtraymanager.c:146
++msgid "Orientation"
++msgstr ""
++
++#: ../applets/notification_area/eggtraymanager.c:147
++msgid "The orientation of the tray."
++msgstr ""
++
++#: ../applets/notification_area/main.c:308
++msgid "Panel Notification Area"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:1
++msgid "Desktop & Windows"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:2
++msgid "Factory for the window navigation related applets"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:3
++msgid "Hide application windows and show the desktop"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:4
++msgid "Show Desktop"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:5
++msgid "Switch between open windows using a menu"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:6
++msgid "Switch between open windows using buttons"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:7
++msgid "Switch between workspaces"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:8
++#: ../applets/wncklet/window-list.c:787
++msgid "Window List"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:9
++msgid "Window Navigation Applet Factory"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:10
++#: ../applets/wncklet/window-menu.c:78 ../applets/wncklet/window-menu.c:241
++msgid "Window Selector"
++msgstr ""
++
++#: ../applets/wncklet/GNOME_Wncklet_Factory.server.in.in.h:11
++#: ../applets/wncklet/workspace-switcher.c:565
++msgid "Workspace Switcher"
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:161
++#, c-format
++msgid "Failed to load %s: %s\n"
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:162
++msgid "Icon not found"
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:220
++msgid "Click here to restore hidden windows."
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:223
++msgid "Click here to hide all windows and show the desktop."
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:420 ../applets/wncklet/showdesktop.c:506
++msgid "Show Desktop Button"
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:508
++msgid "This button lets you hide all windows and show the desktop."
++msgstr ""
++
++#: ../applets/wncklet/showdesktop.c:538
++msgid ""
++"Your window manager does not support the show desktop button, or you are not "
++"running a window manager."
++msgstr ""
++
++#: ../applets/wncklet/window-list.c:789
++msgid ""
++"The Window List shows a list of all windows in a set of buttons and lets you "
++"browse them."
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:2
++msgid "Restoring Minimized Windows"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:3
++msgid "Window Grouping"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:4
++msgid "Window List Content"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:5
++msgid "Window List Size"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:6
++msgid "Behavior"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:7
++msgid "Group windows when _space is limited"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:8
++msgid "M_inimum size:"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:9
++msgid "Ma_ximum size:"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:10
++msgid "Restore to current _workspace"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:11
++msgid "Restore to na_tive workspace"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:12
++msgid "Sh_ow windows from current workspace"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:13
++msgid "Show windows from a_ll workspaces"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:14
++msgid "Size"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:15
++msgid "Window List Preferences"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:16
++msgid "_Always group windows"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:17
++msgid "_Never group windows"
++msgstr ""
++
++#: ../applets/wncklet/window-list.glade.h:18
++#: ../gnome-panel/panel-properties-dialog.glade.h:28
++msgid "pixels"
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:1
++msgid ""
++"Decides when to group windows from the same application on the window list. "
++"Possible values are \"never\", \"auto\" and \"always\"."
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:2
++msgid ""
++"If true, the window list will show windows from all workspaces. Otherwise it "
++"will only display windows from the current workspace."
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:3
++msgid ""
++"If true, then when unminimizing a window, move it to the current workspace. "
++"Otherwise, switch to the workspace of the window."
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:4
++msgid "Maximum window list size"
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:5
++msgid "Minimum window list size"
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:6
++msgid "Move windows to current workspace when unminimized"
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:7
++msgid "Show windows from all workspaces"
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:8
++msgid ""
++"This key specifies the maximum width that the window list requests. The "
++"maximum width setting is useful to limit the size of the window list in "
++"large panels, where the window list could fill the entire space available."
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:9
++msgid "This key specifies the minimum width that the window list requests."
++msgstr ""
++
++#: ../applets/wncklet/window-list.schemas.in.h:10
++msgid "When to group windows"
++msgstr ""
++
++#: ../applets/wncklet/window-menu.c:82
++msgid ""
++"The Window Selector shows a list of all windows in a menu and lets you "
++"browse them."
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:131
++#: ../applets/wncklet/workspace-switcher.c:866
++#: ../applets/wncklet/workspace-switcher.glade.h:11
++msgid "rows"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:131
++#: ../applets/wncklet/workspace-switcher.c:866
++msgid "columns"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:428
++#, c-format
++msgid "Error loading num_rows value for Workspace Switcher: %s\n"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:439
++#, c-format
++msgid ""
++"Error loading display_workspace_names value for Workspace Switcher: %s\n"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:454
++#, c-format
++msgid "Error loading display_all_workspaces value for Workspace Switcher: %s\n"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.c:567
++msgid ""
++"The Workspace Switcher shows you a small version of your workspaces that "
++"lets you manage your windows."
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:2
++msgid "Switcher"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:3
++msgid "Workspaces"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:4
++msgid "Number of _workspaces:"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:5
++msgid "Show _all workspaces in:"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:6
++msgid "Show _only the current workspace"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:7
++msgid "Show workspace _names in switcher"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:8
++msgid "Workspace Names"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:9
++msgid "Workspace Switcher Preferences"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.glade.h:10
++msgid "Workspace na_mes:"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:1
++msgid "Display all workspaces"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:2
++msgid "Display workspace names"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:3
++msgid ""
++"If true, the workspace switcher will show all workspaces. Otherwise it will "
++"only show the current workspace."
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:4
++msgid ""
++"If true, the workspaces in the workspace switcher will display the names of "
++"the workspaces. Otherwise they will display the windows on the workspace."
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:5
++msgid "Rows in workspace switcher"
++msgstr ""
++
++#: ../applets/wncklet/workspace-switcher.schemas.in.h:6
++msgid ""
++"This key specifies how many rows (for horizontal layout) or columns (for "
++"vertical layout) the workspace switcher shows the workspaces in. This key is "
++"only relevant if the display_all_workspaces key is true."
++msgstr ""
++
++#: ../gnome-panel/GNOME_Panel.server.in.h:1
++msgid "GNOME Panel Shell"
++msgstr ""
++
++#: ../gnome-panel/GNOME_Panel_Popup.xml.h:1 ../gnome-panel/applet.c:540
++msgid "Loc_k To Panel"
++msgstr ""
++
++#: ../gnome-panel/GNOME_Panel_Popup.xml.h:2 ../gnome-panel/applet.c:523
++msgid "_Move"
++msgstr ""
++
++#: ../gnome-panel/GNOME_Panel_Popup.xml.h:3 ../gnome-panel/applet.c:516
++msgid "_Remove From Panel"
++msgstr ""
++
++#: ../gnome-panel/applet.c:433
++msgid "???"
++msgstr ""
++
++#: ../gnome-panel/applet.c:1226
++msgid "Can't find an empty spot"
++msgstr ""
++
++#: ../gnome-panel/button-widget.c:198
++msgid "Could not load icon"
++msgstr ""
++
++#: ../gnome-panel/drawer.c:349 ../gnome-panel/panel-addto.c:111
++#: ../gnome-panel/panel-toplevel.c:1524
++msgid "Drawer"
++msgstr ""
++
++#: ../gnome-panel/drawer.c:588
++msgid "_Add to Drawer..."
++msgstr ""
++
++#: ../gnome-panel/drawer.c:594 ../gnome-panel/launcher.c:946
++#: ../gnome-panel/panel-action-button.c:136
++#: ../gnome-panel/panel-context-menu.c:248
++msgid "_Properties"
++msgstr ""
++
++#. Translators: %s is a URI
++#: ../gnome-panel/egg-recent-view-gtk.c:346
++#: ../gnome-panel/panel-menu-items.c:396 ../gnome-panel/panel-recent.c:202
++#, c-format
++msgid "Open '%s'"
++msgstr ""
++
++#: ../gnome-panel/egg-recent-view-gtk.c:446
++msgid "Empty"
++msgstr ""
++
++#: ../gnome-panel/gnome-desktop-item-edit.c:27
++msgid "Create new file in the given directory"
++msgstr ""
++
++#. class
++#: ../gnome-panel/launcher.c:144 ../gnome-panel/menu-ditem.c:517
++msgid "Could not save launcher to disk"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:175
++msgid "Could not show this URL"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:176
++msgid "No URL was specified."
++msgstr ""
++
++#: ../gnome-panel/launcher.c:188
++#, c-format
++msgid "Could not show '%s'"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:225
++msgid "Could not launch application"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:283
++msgid "Could not use dropped item"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:479
++msgid "No URI provided for panel launcher desktop file\n"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:510
++#, c-format
++msgid "Unable to open desktop file %s for panel launcher%s%s\n"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:828 ../gnome-panel/menu-ditem.c:181
++#: ../gnome-panel/menu-ditem.c:264
++msgid "Launcher Properties"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:940
++msgid "_Launch"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:979
++#, c-format
++msgid "Key %s is not set, can't load launcher\n"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:1034 ../gnome-panel/launcher.c:1053
++#: ../gnome-panel/menu-ditem.c:469 ../gnome-panel/menu-ditem.c:486
++#: ../gnome-panel/menu-ditem.c:542
++msgid "Could not create launcher"
++msgstr ""
++
++#: ../gnome-panel/launcher.c:1035 ../gnome-panel/menu-ditem.c:470
++msgid "You have to specify a name."
++msgstr ""
++
++#: ../gnome-panel/launcher.c:1054 ../gnome-panel/menu-ditem.c:487
++msgid "You have to specify a valid URL or command."
++msgstr ""
++
++#: ../gnome-panel/launcher.c:1098 ../gnome-panel/menu-ditem.c:550
++msgid "Create Launcher"
++msgstr ""
++
++#: ../gnome-panel/menu-ditem.c:126
++msgid "Could not save changes to launcher"
++msgstr ""
++
++#: ../gnome-panel/menu-ditem.c:308
++msgid "Menu"
++msgstr ""
++
++#: ../gnome-panel/menu-ditem.c:543
++msgid "You do not have permission to write to this location."
++msgstr ""
++
++#: ../gnome-panel/menu.c:935
++msgid "Add this launcher to _panel"
++msgstr ""
++
++#: ../gnome-panel/menu.c:946
++msgid "Add this launcher to _desktop"
++msgstr ""
++
++#: ../gnome-panel/menu.c:962
++msgid "_Entire menu"
++msgstr ""
++
++#: ../gnome-panel/menu.c:972
++msgid "Add this as _drawer to panel"
++msgstr ""
++
++#: ../gnome-panel/menu.c:984
++msgid "Add this as _menu to panel"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:124
++msgid "_Activate Screensaver"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:130
++msgid "_Lock Screen"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:208
++#: ../gnome-panel/panel-action-button.c:221
++#: ../gnome-panel/panel-menu-bar.c:488 ../gnome-panel/panel-menu-button.c:1023
++#: ../gnome-panel/panel-util.c:747
++#, c-format
++msgid "Could not execute '%s'"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:257
++msgid "Could not connect to server"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:291
++msgid "Lock Screen"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:292
++#: ../gnome-panel/panel-action-button.c:309
++#: ../gnome-panel/panel-action-button.c:344 ../gnome-panel/panel-addto.c:109
++msgid "Desktop & Windows"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:294
++msgid "Protect your computer from unauthorized use"
++msgstr ""
++
++#. when changing one of those two strings, don't forget to
++#. * update the ones in panel-menu-items.c (look for
++#. * panel:showusername|1)
++#: ../gnome-panel/panel-action-button.c:308
++msgid "Log Out..."
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:311
++msgid "Log out of this session to log in as a different user"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:320
++msgid "Run Application..."
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:323
++msgid "Run an Application by entering a command"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:332
++msgid "Search for Files..."
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:335
++msgid "Find files, folders, and documents on your computer"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:343
++msgid "Force Quit"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:346
++msgid "Force a misbehaving application to quit"
++msgstr ""
++
++#. FIXME icon
++#: ../gnome-panel/panel-action-button.c:355
++msgid "Connect to Server..."
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:358
++msgid "Connect to a remote server"
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:366
++msgid "Shut Down..."
++msgstr ""
++
++#: ../gnome-panel/panel-action-button.c:369
++msgid "Shut down the computer"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:72
++msgid "Main Menu"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:73
++msgid "The main GNOME menu"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:85
++msgid "Menu Bar"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:86
++msgid "A custom menu bar"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:98
++msgid "Separator"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:99
++msgid "A separator to organize the panel items"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:112
++msgid "A pop out drawer to store other items in"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:212
++msgid "(empty)"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:347
++#: ../libpanel-applet/panel-test-applets.c:248
++#, c-format
++msgid "query returned exception %s\n"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:402
++msgid "Miscellaneous"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:1269
++#, c-format
++msgid "Select an _item to add to \"%s\":"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:1273
++msgid "Add to Drawer"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:1275
++msgid "Select an _item to add to the drawer:"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:1277
++msgid "Add to Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-addto.c:1279
++msgid ""
++"Select an _item to add to the panel \n"
++"(you can also directly drag and drop items onto the panel):"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:833
++#, c-format
++msgid "Exception from popup_menu '%s'\n"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:952
++#, c-format
++msgid "\"%s\" has quit unexpectedly"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:954
++msgid "Panel object has quit unexpectedly"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:961
++msgid ""
++"If you reload a panel object, it will automatically be added back to the "
++"panel."
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:967
++msgid "_Don't Reload"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:968
++msgid "_Reload"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:1014
++#, c-format
++msgid "The panel encountered a problem while loading \"%s\"."
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:1031
++msgid "Do you want to delete the applet from your configuration?"
++msgstr ""
++
++#: ../gnome-panel/panel-applet-frame.c:1130
++msgid "Unable to obtain AppletShell interface from control\n"
++msgstr ""
++
++#: ../gnome-panel/panel-bindings.c:168
++#, c-format
++msgid "Error watching gconf key '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-bindings.c:186
++#, c-format
++msgid "Error loading gconf directory '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-bindings.c:200
++#, c-format
++msgid "Error getting value for '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:101
++msgid "And many, many others..."
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:124
++msgid "The GNOME Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:127
++msgid ""
++"This program is responsible for launching other applications and embedding "
++"small applets within itself."
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:167
++msgid "Cannot delete this panel"
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:168
++msgid "You must always have at least one panel."
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:216
++msgid "_Delete This Panel..."
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:219
++#: ../gnome-panel/panel-context-menu.c:261
++msgid "_Delete This Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:233
++msgid "_Add to Panel..."
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:278
++msgid "_New Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-context-menu.c:337
++msgid "A_bout Panels"
++msgstr ""
++
++#: ../gnome-panel/panel-force-quit.c:75
++msgid ""
++"Click on a window to force the application to quit. To cancel press ."
++msgstr ""
++
++#: ../gnome-panel/panel-force-quit.c:203
++msgid ""
++"Force this application to exit?\n"
++"(Any open documents will be lost.)"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:1
++msgid ""
++"A boolean flag to indicate whether the user's previous configuration in /"
++"apps/panel/profiles/default has been copied to the new location in /apps/"
++"panel."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:2
++msgid ""
++"A list of panel IDs. Each ID identifies an individual toplevel panel. The "
++"settings for each of these panels are stored in /apps/panel/toplevels/$(id)."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:3
++msgid ""
++"A list of panel applet IDs. Each ID identifies an individual panel applet. "
++"The settings for each of these applets are stored in /apps/panel/applets/"
++"$(id)."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:4
++msgid ""
++"A list of panel object IDs. Each ID identifies an individual panel object (e."
++"g. a launcher, action button or menu button/bar). The settings for each of "
++"these objects are stored in /apps/panel/objects/$(id)."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:5
++msgid "Enable autocompletion in \"Run Application\" dialog"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:6
++msgid "Enable program list in \"Run Application\" dialog"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:7
++msgid "Expand program list in \"Run Application\" dialog"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:8
++msgid ""
++"If true, autocompletion in the \"Run Application\" dialog is made available."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:9
++msgid ""
++"If true, the \"Known Applications\" listing in the \"Run Application\" "
++"dialog is expanded when the dialog is opened. This key is only relevant if "
++"the enable_program_list key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:10
++msgid ""
++"If true, the \"Known Applications\" listing in the \"Run Application\" "
++"dialog is made available. Whether or not the listing is expanded when the "
++"dialog is shown is controlled by the show_program_list key."
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:11
++msgid "Old profiles configuration migrated"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:12
++msgid "Panel ID list"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:13
++msgid "Panel applet ID list"
++msgstr ""
++
++#: ../gnome-panel/panel-general.schemas.in.h:14
++msgid "Panel object ID list"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:1
++msgid ""
++"A list of applet IIDs that the panel will ignore. This way you can disable "
++"certain applets from loading or showing up in the menu. For example to "
++"disable the mini-commander applet add 'OAFIID:GNOME_MiniCommanderApplet' to "
++"this list. The panel must be restarted for this to take effect."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:2
++msgid "Applet IIDs to disable from loading"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:3
++msgid "Autoclose drawer"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:4
++msgid "Complete panel lockdown"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:5
++msgid "Confirm panel removal"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:6
++msgid "Deprecated"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:7
++msgid "Disable Force Quit"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:8
++msgid "Disable Lock Screen"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:9
++msgid "Disable Logging Out"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:10
++#: ../gnome-panel/panel-toplevel.schemas.in.h:9
++msgid "Enable animations"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:11
++msgid "Enable tooltips"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:12
++msgid "Highlight launchers on mouseover"
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:13
++msgid ""
++"If true, a dialog is shown asking for confirmation if the user wants to "
++"remove a panel."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:14
++msgid ""
++"If true, a drawer will automatically be closed when the user clicks a "
++"launcher in it."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:15
++msgid ""
++"If true, a launcher is highlighted when the user moves the pointer over it."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:16
++msgid ""
++"If true, the panel will not allow a user to force an application to quit by "
++"removing access to the force quit button."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:17
++msgid ""
++"If true, the panel will not allow a user to lock their screen, by removing "
++"access to the lock screen menu entries."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:18
++msgid ""
++"If true, the panel will not allow a user to log out, by removing access to "
++"the log out menu entries."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:19
++msgid ""
++"If true, the panel will not allow any changes to the configuration of the "
++"panel. Individual applets may need to be locked down separately however. The "
++"panel must be restarted for this to take effect."
++msgstr ""
++
++#: ../gnome-panel/panel-global.schemas.in.h:20
++msgid "If true, tooltips are shown for objects in panels."
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:223
++#, c-format
++msgid "You will be automatically logged out in %d second."
++msgid_plural "You will be automatically logged out in %d seconds."
++msgstr[0] ""
++msgstr[1] ""
++
++#: ../gnome-panel/panel-logout.c:230
++#, c-format
++msgid "This system will be automatically shut down in %d second."
++msgid_plural "This system will be automatically shut down in %d seconds."
++msgstr[0] ""
++msgstr[1] ""
++
++#: ../gnome-panel/panel-logout.c:302
++msgid "Log out of this system now?"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:308
++msgid "_Switch User"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:314
++msgid "_Log Out"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:319
++msgid "Shut down this system now?"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:329
++msgid "_Suspend"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:334
++msgid "_Restart"
++msgstr ""
++
++#: ../gnome-panel/panel-logout.c:340
++msgid "_Shut Down"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-bar.c:74
++msgid "Browse and run installed applications"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-bar.c:86
++msgid "Access documents, folders and network places"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-bar.c:98
++msgid "Change desktop appearance and behavior, get help, or log out"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-bar.c:184
++msgid "Applications"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-bar.c:419 ../gnome-panel/panel-menu-button.c:688
++msgid "_Edit Menus"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:114 ../gnome-panel/panel-run-dialog.c:325
++#, c-format
++msgid "Could not open location '%s'"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:375
++msgid "Bookmarks"
++msgstr ""
++
++#. Translators: the first string is a
++#. * path and the second string is a
++#. * hostname. nautilus contains the same
++#. * string to translate.
++#: ../gnome-panel/panel-menu-items.c:431
++#, c-format
++msgid "%1$s on %2$s"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:527
++msgid "Network Places"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:530
++msgid "Removable Media"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:596
++msgid "Documents"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:597
++msgid "Documents directory"
++msgstr ""
++
++#. Translators: Desktop is used here as in
++#. * "Desktop Folder" (this is not the Desktop
++#. * environment). Do not keep "Desktop Folder|"
++#. * in the translation
++#: ../gnome-panel/panel-menu-items.c:612
++msgid "Desktop Folder|Desktop"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:613
++msgid "Open the desktop as a folder"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:734
++msgid "Help"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:742
++msgid "System Documentation"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:745 ../gnome-panel/panel-menu-items.c:746
++msgid "Online Support"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:1060
++msgid "Places"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:1095
++msgid "System"
++msgstr ""
++
++#. Translators: translate "panel:showusername|1" to anything
++#. * but "1" if "Log Out %s" doesn't make any sense in your
++#. * language (where %s is a username).
++#.
++#: ../gnome-panel/panel-menu-items.c:1187
++msgid "panel:showusername|1"
++msgstr ""
++
++#. keep those strings in sync with the ones in
++#. * panel-action-button.c
++#. Translators: this string is used ONLY if you translated
++#. * "panel:showusername|1" to "1"
++#: ../gnome-panel/panel-menu-items.c:1199
++#, c-format
++msgid "Log Out %s..."
++msgstr ""
++
++#. Translators: this string is used ONLY if you translated
++#. * "panel:showusername|1" to "1"
++#: ../gnome-panel/panel-menu-items.c:1203
++#, c-format
++msgid "Log out %s of this session to log in as a different user"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:1251
++msgid "Could not launch menu item"
++msgstr ""
++
++#: ../gnome-panel/panel-menu-items.c:1263
++msgid "Could not load menu item"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:1
++msgid "Action button type"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:2
++msgid "Applet Bonobo IID"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:3
++msgid "Icon used for object's button"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:4
++msgid ""
++"If true, the custom_icon key is used as a custom icon for the button. If "
++"false, the custom_icon key is ignored. This key is only relevant if the "
++"object_type key is \"menu-object\" or \"drawer-object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:5
++msgid ""
++"If true, the menu_path key is used as the path from which the menu contents "
++"should be constructed. If false, the menu_path key is ignored. This key is "
++"only relevant if the object_type key is \"menu-object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:6
++msgid ""
++"If true, the position of the object is interpreted relative to the right (or "
++"bottom if vertical) edge of the panel."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:7
++msgid ""
++"If true, the user may not move the applet without first unlocking the object "
++"using the \"Unlock\" menuitem."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:8
++msgid "Interpret position relative to bottom/right edge"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:9
++msgid "Launcher location"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:10
++msgid "Lock the object to the panel"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:11
++msgid "Menu content path"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:12
++msgid "Object's position on the panel"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:13
++msgid "Panel attached to drawer"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:14
++msgid "Panel object type"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:15
++msgid ""
++"The Bonobo implementation ID of the applet - e.g. \"OAFIID:GNOME_ClockApplet"
++"\". This key is only relevant if the object_type key is \"bonobo-applet\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:16
++msgid ""
++"The action type this button represents. Possible values are \"lock\", "
++"\"logout\", \"run\", \"search\" and \"screenshot\". This key is only "
++"relevant if the object_type key is \"action-applet\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:17
++msgid ""
++"The identifier of the panel attached to this drawer. This key is only "
++"relevant if the object_type key is \"drawer-object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:18
++msgid "The identifier of the toplevel panel which contains this object."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:19
++msgid ""
++"The location of the .desktop file describing the launcher. This key is only "
++"relevant if the object_type key is \"launcher-object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:20
++msgid ""
++"The location of the image file used as the icon for the object's button. "
++"This key is only relevant if the object_type key is \"drawer-object\" or "
++"\"menu-object\" and the use_custom_icon key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:21
++msgid ""
++"The path from which the menu contents is contructed. This key is only "
++"relevant if the use_menu_path key is true and the object_type key is \"menu-"
++"object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:22
++msgid ""
++"The position of this panel object. The position is specified by the number "
++"of pixels from the left (or top if vertical) panel edge."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:23
++msgid ""
++"The text to display in a tooltip for this drawer or this menu. This key is "
++"only relevant if the object_type key is \"drawer-object\" or \"menu-object\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:24
++msgid ""
++"The type of this panel object. Possible values are \"drawer-object\", \"menu-"
++"object\", \"launcher-object\", \"bonobo-applet\", \"action-applet\" and "
++"\"menu-bar\"."
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:25
++msgid "Tooltip displayed for drawer or menu"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:26
++msgid "Toplevel panel containing object"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:27
++msgid "Use custom icon for object's button"
++msgstr ""
++
++#: ../gnome-panel/panel-object.schemas.in.h:28
++msgid "Use custom path for menu contents"
++msgstr ""
++
++#: ../gnome-panel/panel-profile.c:762 ../gnome-panel/panel-profile.c:789
++#: ../gnome-panel/panel-profile.c:825 ../gnome-panel/panel-profile.c:1648
++#, c-format
++msgid "Error reading GConf string value '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-profile.c:804 ../gnome-panel/panel-profile.c:1544
++#: ../gnome-panel/panel-profile.c:1617 ../gnome-panel/panel-profile.c:1680
++#, c-format
++msgid "Error reading GConf integer value '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-profile.c:1554
++#, c-format
++msgid ""
++"Panel '%s' is set to be displayed on screen %d which is not currently "
++"available. Not loading this panel."
++msgstr ""
++
++#: ../gnome-panel/panel-profile.c:1632
++#, c-format
++msgid "Error reading GConf boolean value '%s': %s"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:120
++#: ../libpanel-applet/panel-test-applets.c:53
++msgid "Orientation|Top"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:121
++#: ../libpanel-applet/panel-test-applets.c:54
++msgid "Orientation|Bottom"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:122
++#: ../libpanel-applet/panel-test-applets.c:55
++msgid "Orientation|Left"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:123
++#: ../libpanel-applet/panel-test-applets.c:56
++msgid "Orientation|Right"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:1019
++msgid "Could not display properties dialog"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.c:1020
++#: ../gnome-panel/panel-run-dialog.c:1832
++#, c-format
++msgid "Unable to load file '%s'."
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:2
++msgid "*"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:3
++msgid "Opaque"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:4
++msgid "Transparent"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:5
++msgid "Arro_ws on hide buttons"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:6
++msgid "Background"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:7
++msgid "Background _image:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:8
++msgid "Co_lor:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:9
++msgid "E_xpand"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:10
++msgid "General"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:11
++msgid "Image Background Details"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:12
++msgid "Panel Properties"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:13
++msgid "Pick a color"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:14
++msgid "Rotate image when panel is _vertical"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:15
++msgid "S_tyle:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:16
++msgid "Select background"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:17
++msgid "Show hide _buttons"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:18
++msgid "Solid c_olor"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:19
++msgid "Some of these properties are locked down"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:20
++msgid "St_retch"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:21
++msgid "_Autohide"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:22
++msgid "_Icon:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:23
++msgid "_None (use system theme)"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:24
++#: ../libpanel-applet/panel-test-applets.glade.h:4
++msgid "_Orientation:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:25
++msgid "_Scale"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:26
++#: ../libpanel-applet/panel-test-applets.glade.h:6
++msgid "_Size:"
++msgstr ""
++
++#: ../gnome-panel/panel-properties-dialog.glade.h:27
++msgid "_Tile"
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:54
++msgid "Could not find a suitable application."
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:94 ../gnome-panel/panel-recent.c:102
++#, c-format
++msgid "Could not open recently used document \"%s\""
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:103
++#, c-format
++msgid "An unknown error occurred while trying to open \"%s\""
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:155
++msgid "Clear the Recent Documents list?"
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:157
++msgid ""
++"If you clear the Recent Documents list, you clear the following:\n"
++"\n"
++"• All items from the Places → Recent Documents menu item.\n"
++"• All items from the recent documents list in all applications."
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:225
++msgid "Recent Documents"
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:269
++msgid "Clear Recent Documents"
++msgstr ""
++
++#: ../gnome-panel/panel-recent.c:273
++msgid "Clear all items from the recent documents list"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:299
++#, c-format
++msgid "Could not run command '%s'"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:377
++#, c-format
++msgid "Could not convert '%s' from UTF-8"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:1171
++msgid "Choose a file to append to the command..."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:1538
++#: ../gnome-panel/panel-run-dialog.glade.h:10
++msgid "Select an application to view its description."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:1576
++#, c-format
++msgid "Will run command: '%s'"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:1607
++#, c-format
++msgid "URI list dropped on run dialog had wrong format (%d) or length (%d)\n"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.c:1831
++msgid "Could not display run dialog"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:1
++msgid ""
++"Click this button to browse for a file whose name to append to the command "
++"string."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:2
++msgid ""
++"Click this button to run the selected application or the command in the "
++"command entry field."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:3
++msgid "Command entry"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:4
++msgid "Command icon"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:5
++msgid "Enter a command string here to run it."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:6
++msgid "List of known applications"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:7
++msgid "Run Application"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:8
++msgid "Run in _terminal"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:9
++msgid "Run with _file..."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:11
++msgid "Select this box to run the command in a terminal window."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:12
++msgid "Show list of known _applications"
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:13
++msgid "The icon of the command to be run."
++msgstr ""
++
++#: ../gnome-panel/panel-run-dialog.glade.h:14
++#: ../gnome-panel/panel-stock-icons.c:89
++msgid "_Run"
++msgstr ""
++
++#: ../gnome-panel/panel-shell.c:74
++msgid ""
++"I've detected a panel already running,\n"
++"and will now exit."
++msgstr ""
++
++#: ../gnome-panel/panel-shell.c:78
++#, c-format
++msgid ""
++"There was a problem registering the panel with the bonobo-activation "
++"server.\n"
++"The error code is: %d\n"
++"The panel will now exit."
++msgstr ""
++
++#: ../gnome-panel/panel-stock-icons.c:90
++msgid "_Force quit"
++msgstr ""
++
++#: ../gnome-panel/panel-stock-icons.c:91
++msgid "C_lear"
++msgstr ""
++
++#: ../gnome-panel/panel-stock-icons.c:92
++msgid "D_on't Delete"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1114
++msgid "Hide Panel"
++msgstr ""
++
++#. translators: these string will be shown in MetaCity's switch window
++#. * popup when you pass the focus to a panel
++#: ../gnome-panel/panel-toplevel.c:1495
++msgid "Top Expanded Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1496
++msgid "Top Centered Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1497
++msgid "Top Floating Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1498
++msgid "Top Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1502
++msgid "Bottom Expanded Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1503
++msgid "Bottom Centered Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1504
++msgid "Bottom Floating Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1505
++msgid "Bottom Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1509
++msgid "Left Expanded Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1510
++msgid "Left Centered Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1511
++msgid "Left Floating Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1512
++msgid "Left Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1516
++msgid "Right Expanded Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1517
++msgid "Right Centered Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1518
++msgid "Right Floating Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.c:1519
++msgid "Right Edge Panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:1
++msgid "Animation speed"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:2
++msgid "Automatically hide panel into corner"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:3
++msgid "Background color"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:4
++msgid "Background color opacity"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:5
++msgid "Background image"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:6
++msgid "Background type"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:7
++msgid "Center panel on x-axis"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:8
++msgid "Center panel on y-axis"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:10
++msgid "Enable arrows on hide buttons"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:11
++msgid "Enable hide buttons"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:12
++msgid "Expand to occupy entire screen width"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:13
++msgid "Fit image to panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:14
++msgid ""
++"If true, arrows will be placed on the hide buttons. This key is only "
++"relevant if the enable_buttons key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:15
++msgid ""
++"If true, buttons will be placed on each side of the panel which may be used "
++"to move the panel to edge of the screen, leaving only a button showing."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:16
++msgid ""
++"If true, hiding and un-hiding of this panel will be animated rather than "
++"happening instantly."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:17
++msgid ""
++"If true, the background image will be rotated when the panel is oriented "
++"vertically."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:18
++msgid ""
++"If true, the image will be scaled (retaining the aspect ratio of the image) "
++"to the panel height (if horizontal)."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:19
++msgid ""
++"If true, the image will be scaled to the panel dimensions. The aspect ratio "
++"of the image will not be maintained."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:20
++msgid ""
++"If true, the panel is automatically hidden into a corner of the screen when "
++"the pointer leaves the panel area. Moving the pointer to that corner again "
++"will cause the panel to re-appear."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:21
++msgid ""
++"If true, the panel will occupy the entire screen width (height if this is a "
++"vertical panel). In this mode the panel can only be placed at a screen edge. "
++"If false, the panel will only be large enough to accommodate the applets, "
++"launchers and buttons on the panel."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:22
++msgid ""
++"If true, the x key is ignored and the panel is placed at the center of the x-"
++"axis of the screen. If the panel is resized it will remain at that position "
++"- i.e. the panel will grow on both sides. If false, the x key specifies the "
++"location of the panel."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:23
++msgid ""
++"If true, the y key is ignored and the panel is placed at the center of the y-"
++"axis of the screen. If the panel is resized it will remain at that position "
++"- i.e. the panel will grow on both sides. If false, the y key specifies the "
++"location of the panel."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:24
++msgid ""
++"In a Xinerama setup, you may have panels on each individual monitor. This "
++"key identifies the current monitor the panel is displayed on."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:25
++msgid "Name to identify panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:26
++msgid "Panel autohide delay"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:27
++msgid "Panel autounhide delay"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:28
++msgid "Panel orientation"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:29
++msgid "Panel size"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:30
++msgid "Rotate image on vertical panels"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:31
++msgid "Specifies the background color for the panel in #RGB format."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:32
++msgid ""
++"Specifies the file to be used for the background image. If the image "
++"contains an alpha channel it will be composited onto the desktop background "
++"image."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:33
++msgid ""
++"Specifies the number of milliseconds delay after the pointer enters the "
++"panel area before the panel is automatically re-shown. This key is only "
++"relevant if the auto_hide key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:34
++msgid ""
++"Specifies the number of milliseconds delay after the pointer leaves the "
++"panel area before the panel is automatically hidden. This key is only "
++"relevant if the auto_hide key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:35
++msgid ""
++"Specifies the number of pixels visible when the panel is automatically "
++"hidden into a corner. This key is only relevant if the auto_hide key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:36
++msgid ""
++"Specifies the opacity of the background color format. If the color is not "
++"completely opaque (a value of less than 65535), the color will be composited "
++"onto the desktop background image."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:37
++msgid "Stretch image to panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:38
++msgid ""
++"The height (width for a vertical panel) of the panel. The panel will "
++"determine at runtime a minimum size based on the font size and other "
++"indicators. The maximum size is fixed at one quarter of the screen height "
++"(or width)."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:39
++msgid ""
++"The location of the panel along the x-axis. This key is only relevant in un-"
++"expanded mode. In expanded mode this key is ignored and the panel is placed "
++"at the screen edge specified by the orientation key."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:40
++msgid ""
++"The location of the panel along the y-axis. This key is only relevant in un-"
++"expanded mode. In expanded mode this key is ignored and the panel is placed "
++"at the screen edge specified by the orientation key."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:41
++msgid ""
++"The orientation of the panel. Possible values are \"top\", \"bottom\", \"left"
++"\", \"right\". In expanded mode the key specifies which screen edge the "
++"panel is on. In un-expanded mode the difference between \"top\" and \"bottom"
++"\" is less important - both indicate that this is a horizontal panel - but "
++"still give a useful hint as to how some panel objects should behave. For "
++"example, on a \"top\" panel a menu button will pop up its menu below the "
++"panel, whereas on a \"bottom\" panel the menu will be popped up above the "
++"panel."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:42
++msgid ""
++"The speed in which panel animations should occur. Possible values are \"slow"
++"\", \"medium\" and \"fast\". This key is only relevant if the "
++"enable_animations key is true."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:43
++msgid ""
++"This is a human readable name which you can use to identify a panel. Its "
++"main purpose is to serve as the panel's window title which is useful when "
++"navigating between panels."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:44
++msgid "Visible pixels when hidden"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:45
++msgid ""
++"Which type of background should be used for this panel. Possible values are "
++"\"gtk\" - the default GTK+ widget background will be used, \"color\" - the "
++"color key will be used as background color or \"image\" - the image "
++"specified by the image key will be used as background."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:46
++msgid ""
++"With a multi-screen setup, you may have panels on each individual screen. "
++"This key identifies the current screen the panel is displayed on."
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:47
++msgid "X co-ordinate of panel"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:48
++msgid "X screen where the panel is displayed"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:49
++msgid "Xinerama monitor where the panel is displayed"
++msgstr ""
++
++#: ../gnome-panel/panel-toplevel.schemas.in.h:50
++msgid "Y co-ordinate of panel"
++msgstr ""
++
++#: ../gnome-panel/panel-util.c:89
++msgid "Could not display help document"
++msgstr ""
++
++#: ../gnome-panel/panel-util.c:311
++#, c-format
++msgid "Details: %s"
++msgstr ""
++
++#: ../gnome-panel/panel-util.c:624
++#, c-format
++msgid "Icon '%s' not found"
++msgstr ""
++
++#: ../gnome-panel/panel.c:480
++#, c-format
++msgid "Open URL: %s"
++msgstr ""
++
++#: ../gnome-panel/panel.c:1273
++msgid "Delete this drawer?"
++msgstr ""
++
++#: ../gnome-panel/panel.c:1274
++msgid ""
++"When a drawer is deleted, the drawer and its\n"
++"settings are lost."
++msgstr ""
++
++#: ../gnome-panel/panel.c:1276
++msgid "Delete Drawer"
++msgstr ""
++
++#: ../gnome-panel/panel.c:1278
++msgid "Delete this panel?"
++msgstr ""
++
++#: ../gnome-panel/panel.c:1279
++msgid ""
++"When a panel is deleted, the panel and its\n"
++"settings are lost."
++msgstr ""
++
++#: ../gnome-panel/panel.c:1281
++msgid "Delete Panel"
++msgstr ""
++
++#: ../libpanel-applet/GNOME_Panel_TestApplet.server.in.h:1
++msgid "A simple applet for testing the GNOME-2.0 panel"
++msgstr ""
++
++#: ../libpanel-applet/GNOME_Panel_TestApplet.server.in.h:2
++msgid "Test Bonobo Applet"
++msgstr ""
++
++#: ../libpanel-applet/GNOME_Panel_TestApplet.server.in.h:3
++msgid "Test Bonobo Applet Factory"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1042
++#, c-format
++msgid "Incomplete '%s' background type received"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1056
++#, c-format
++msgid "Incomplete '%s' background type received: %s"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1065
++#, c-format
++msgid "Failed to get pixmap %s"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1072
++msgid "Unknown background type received"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1296
++msgid "The Applet's containing Panel's orientation"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1304
++msgid "The Applet's containing Panel's size in pixels"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1312
++msgid "The Applet's containing Panel's background color or pixmap"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1320
++msgid "The Applet's flags"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1328
++msgid "Ranges that hint what sizes are acceptable for the applet"
++msgstr ""
++
++#: ../libpanel-applet/panel-applet.c:1336
++msgid "The Applet's containing Panel is locked down"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:34
++msgid "Specify an applet IID to load"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:35
++msgid ""
++"Specify a gconf location in which the applet preferences should be stored"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:36
++msgid "Specify the initial size of the applet (xx-small, medium, large etc.)"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:37
++msgid ""
++"Specify the initial orientation of the applet (top, bottom, left or right)"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:61
++msgid "Size|XX Small"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:62
++msgid "Size|X Small"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:63
++msgid "Size|Small"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:64
++msgid "Size|Medium"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:65
++msgid "Size|Large"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:66
++msgid "Size|X Large"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:67
++msgid "Size|XX Large"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.c:129
++#, c-format
++msgid "Failed to load applet %s"
++msgstr ""
++
++#. This is an utility to easily test various applets
++#: ../libpanel-applet/panel-test-applets.glade.h:2
++msgid "Test applet utility"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.glade.h:3
++msgid "_Applet:"
++msgstr ""
++
++#: ../libpanel-applet/panel-test-applets.glade.h:5
++msgid "_Prefs Dir:"
++msgstr ""
++
++#: ../debian/ubuntu-about.desktop.in.h:1
++msgid "About Ubuntu"
++msgstr ""
++
++#: ../debian/ubuntu-about.desktop.in.h:2
++msgid "Learn more about Ubuntu"
++msgstr ""
+diff -Nur gnome-panel-2.14.0/po/POTFILES.in gnome-panel-2.14.0.new/po/POTFILES.in
+--- gnome-panel-2.14.0/po/POTFILES.in 2006-01-16 18:42:56.000000000 +0100
++++ gnome-panel-2.14.0.new/po/POTFILES.in 2006-03-14 12:44:27.000000000 +0100
+@@ -73,3 +73,4 @@
+ libpanel-applet/panel-applet.c
+ libpanel-applet/panel-test-applets.c
+ libpanel-applet/panel-test-applets.glade
++debian/ubuntu-about.desktop.in
--- gnome-panel-2.14.1.orig/debian/maintfiles/09_open_drawers_on_right_screen.patch.NOTWORKING
+++ gnome-panel-2.14.1/debian/maintfiles/09_open_drawers_on_right_screen.patch.NOTWORKING
@@ -0,0 +1,17 @@
+diff -p -u -5 -r1.82 panel-toplevel.c
+--- gnome-panel/gnome-panel/panel-toplevel.c 2004/12/22 18:09:19 1.82
++++ gnome-panel/gnome-panel/panel-toplevel.c 2005/01/06 04:12:41
+@@ -2468,10 +2468,13 @@ panel_toplevel_attach_to_widget (PanelTo
+ panel_toplevel_reverse_arrows (toplevel);
+ panel_toplevel_set_expand (toplevel, FALSE);
+ panel_toplevel_update_attach_orientation (toplevel);
+ panel_toplevel_update_hide_buttons (toplevel);
+
++ gtk_window_set_screen (GTK_WINDOW (toplevel),
++ gtk_widget_get_screen (GTK_WIDGET (toplevel->priv->attach_toplevel)));
++
+ if (toplevel->priv->state == PANEL_STATE_NORMAL)
+ panel_toplevel_push_autohide_disabler (toplevel->priv->attach_toplevel);
+
+ gtk_widget_queue_resize (GTK_WIDGET (toplevel));
+ }
--- gnome-panel-2.14.1.orig/debian/maintfiles/clock_applet_evo_open.patch
+++ gnome-panel-2.14.1/debian/maintfiles/clock_applet_evo_open.patch
@@ -0,0 +1,200 @@
+diff -u -r1.10 calendar-client.c
+--- applets/clock/calendar-client.c 31 Aug 2004 08:18:34 -0000 1.10
++++ applets/clock/calendar-client.c 27 Dec 2004 09:07:15 -0000
+@@ -529,18 +529,6 @@
+ return g_strdup (icalproperty_get_description (prop));
+ }
+
+-static char *
+-get_ical_url (icalcomponent *ical)
+-{
+- icalproperty *prop;
+-
+- prop = icalcomponent_get_first_property (ical, ICAL_URL_PROPERTY);
+- if (!prop)
+- return NULL;
+-
+- return g_strdup (icalproperty_get_url (prop));
+-}
+-
+ static inline GTime
+ get_ical_start_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+@@ -832,7 +820,6 @@
+ null_safe_strcmp (a->summary, b->summary) == 0 &&
+ null_safe_strcmp (a->description, b->description) == 0 &&
+ null_safe_strcmp (a->color_string, b->color_string) == 0 &&
+- null_safe_strcmp (a->url, b->url) == 0 &&
+ a->start_time == b->start_time &&
+ a->due_time == b->due_time &&
+ a->percent_complete == b->percent_complete &&
+@@ -850,7 +837,6 @@
+ task_copy->summary = g_strdup (task->summary);
+ task_copy->description = g_strdup (task->description);
+ task_copy->color_string = g_strdup (task->color_string);
+- task_copy->url = g_strdup (task->url);
+ task_copy->start_time = task->start_time;
+ task_copy->due_time = task->due_time;
+ task_copy->percent_complete = task->percent_complete;
+@@ -872,9 +858,6 @@
+ g_free (task->color_string);
+ task->color_string = NULL;
+
+- g_free (task->url);
+- task->url = NULL;
+-
+ task->percent_complete = 0;
+ }
+
+@@ -888,7 +871,6 @@
+ task->summary = get_ical_summary (ical);
+ task->description = get_ical_description (ical);
+ task->color_string = get_source_color (source->source);
+- task->url = get_ical_url (ical);
+ task->start_time = get_ical_start_time (ical, default_zone);
+ task->due_time = get_ical_due_time (ical, default_zone);
+ task->percent_complete = get_ical_percent_complete (ical);
+@@ -1980,25 +1962,3 @@
+ e_cal_modify_object (esource, ical, CALOBJ_MOD_ALL, NULL);
+ }
+
+-gboolean
+-calendar_client_launch_editor (CalendarClient *client,
+- CalendarEventType event_type,
+- GdkScreen *screen,
+- GError **error)
+-{
+- char *command_line;
+- gboolean retval;
+-
+- g_return_val_if_fail (CALENDAR_IS_CLIENT (client), FALSE);
+- g_return_val_if_fail (event_type == CALENDAR_EVENT_APPOINTMENT ||
+- event_type == CALENDAR_EVENT_TASK, FALSE);
+-
+- command_line = g_strdup_printf ("evolution -c %s",
+- event_type == CALENDAR_EVENT_APPOINTMENT ? "calendar" : "tasks");
+-
+- retval = gdk_spawn_command_line_on_screen (screen, command_line, error);
+-
+- g_free (command_line);
+-
+- return retval;
+-}
+diff -u -r1.4 calendar-client.h
+--- applets/clock/calendar-client.h 19 Jul 2004 19:11:14 -0000 1.4
++++ applets/clock/calendar-client.h 27 Dec 2004 09:07:15 -0000
+@@ -27,7 +27,6 @@
+ #define __CALENDAR_CLIENT_H__
+
+ #include
+-#include
+
+ G_BEGIN_DECLS
+
+@@ -90,7 +89,6 @@
+ char *summary;
+ char *description;
+ char *color_string;
+- char *url;
+ GTime start_time;
+ GTime due_time;
+ guint percent_complete;
+@@ -139,10 +137,6 @@
+ char *task_uid,
+ gboolean task_completed,
+ guint percent_complete);
+-gboolean calendar_client_launch_editor (CalendarClient *client,
+- CalendarEventType event_type,
+- GdkScreen *screen,
+- GError **error);
+
+ void calendar_event_free (CalendarEvent *event);
+
+--- applets/clock/clock.c 2005-01-25 01:37:50.000000000 +0100
++++ applets/clock/clock.c.mod 2005-01-25 01:42:25.000000000 +0100
+@@ -545,7 +545,6 @@
+ TASK_COLUMN_COMPLETED_TIME,
+ TASK_COLUMN_OVERDUE_ATTR,
+ TASK_COLUMN_COLOR,
+- TASK_COLUMN_URL,
+ N_TASK_COLUMNS
+ };
+
+@@ -625,7 +624,6 @@
+ TASK_COLUMN_COMPLETED, task->percent_complete == 100,
+ TASK_COLUMN_COMPLETED_TIME, task->completed_time,
+ TASK_COLUMN_COLOR, task->color_string,
+- TASK_COLUMN_URL, task->url,
+ -1);
+
+ g_free (percent_complete_text);
+@@ -808,17 +806,21 @@
+ GtkTreeViewColumn *column,
+ ClockData *cd)
+ {
+- GError *err = NULL;
+ GtkTreeIter iter;
+- char *uri;
+-
++ gchar *command_line;
++ gchar *uid;
++
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (cd->tasks_model), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (cd->tasks_model), &iter,
+- TASK_COLUMN_URL, &uri, -1);
+-
+- if (uri)
+- gnome_url_show (uri, &err);
+-
++ TASK_COLUMN_UID, &uid, -1);
++
++ command_line = g_strdup_printf ("evolution task:%s", uid);
++
++ gdk_spawn_command_line_on_screen (gtk_widget_get_screen (cd->calendar), command_line, NULL);
++
++ g_free (command_line);
++ g_free (uid);
++
+ return TRUE;
+ }
+
+@@ -909,7 +911,6 @@
+ G_TYPE_LONG, /* completed time */
+ PANGO_TYPE_ATTR_LIST, /* summary text attributes */
+ G_TYPE_STRING, /* color */
+- G_TYPE_STRING /* url */
+ };
+
+ cd->tasks_model = gtk_list_store_newv (N_TASK_COLUMNS, column_types);
+@@ -1137,14 +1138,23 @@
+
+ static void
+ calendar_day_activated (ClockData *cd)
+-{
+- /* FIXME: should be able to launch the editor for
+- * the specific day
+- */
+- calendar_client_launch_editor (cd->client,
+- CALENDAR_EVENT_APPOINTMENT,
+- gtk_widget_get_screen (cd->calendar),
+- NULL);
++{
++ guint day;
++ guint year;
++ guint month;
++
++ GDate *date;
++ gchar command_line[40];
++
++ gtk_calendar_get_date (GTK_CALENDAR(cd->calendar), &year, &month, &day);
++ date = g_date_new ();
++ g_date_set_dmy (date, day, month + 1, year);
++
++ g_date_strftime (command_line, sizeof (command_line), "evolution -c calendar date:%x", date);
++ gdk_spawn_command_line_on_screen (gtk_widget_get_screen (cd->calendar), command_line, NULL);
++ g_date_free (date);
++
++ return;
+ }
+
+ static void
--- gnome-panel-2.14.1.orig/debian/maintfiles/changelog_unreleased
+++ gnome-panel-2.14.1/debian/maintfiles/changelog_unreleased
@@ -0,0 +1,2 @@
+ + modified gnomezilla patch to fix opening evolution at the selected
+ date (also partially fix opening tasks) (Closes: #272777).
--- gnome-panel-2.14.1.orig/debian/maintfiles/improved_open_recent_doc_in_term.patch.NEEDTESTING
+++ gnome-panel-2.14.1/debian/maintfiles/improved_open_recent_doc_in_term.patch.NEEDTESTING
@@ -0,0 +1,34 @@
+--- gnome-panel/panel-recent.c.orig 2005-01-26 00:32:36.000000000 +0100
++++ gnome-panel/panel-recent.c 2005-01-26 00:39:22.000000000 +0100
+@@ -49,6 +49,8 @@
+ char *path;
+ char *quoted;
+ gboolean ret = TRUE;
++ GConfClient *client;
++ gchar *terminal_exec, *terminal_exec_arg;
+
+ /* Don't allow suspicious looking URIs */
+ if (uri [0] == '-')
+@@ -62,13 +64,18 @@
+ return FALSE;
+ }
+
++
+ str = g_string_new ("");
+
+ if (app->requires_terminal) {
+- /* FIXME: we should use their preferred terminal
+- * maybe a multiscreen variant of gnome_execcute_terminal_shell?
+- */
+- g_string_append_printf (str, "gnome-terminal -x %s", app->command);
++ client = panel_gconf_get_client ();
++ terminal_exec = gconf_client_get_string(client, "/desktop/gnome/applications/terminal/exec", NULL);
++ terminal_exec_arg = gconf_client_get_string(client, "/desktop/gnome/applications/terminal/exec_arg", NULL);
++
++ g_string_append_printf (str, "%s %s %s", terminal_exec, terminal_exec_arg, app->command);
++
++ g_free(terminal_exec);
++ g_free(terminal_exec_arg);
+ } else
+ str = g_string_append (str, app->command);
+
--- gnome-panel-2.14.1.orig/debian/control
+++ gnome-panel-2.14.1/debian/control
@@ -0,0 +1,82 @@
+Source: gnome-panel
+Section: gnome
+Priority: optional
+Maintainer: Guilherme de S. Pastore
+Uploaders: Sebastien Bacher , Arnaud Patard , Debian GNOME Maintainers , Akira TAGOH , Andreas Rottmann , Andrew Lau , Carlos Perelló Marín , Clément Stenac , Ed Boraas , Edd Dumbill , Emil Soleyman-Zomalan , Gustavo Noronha Silva , J.H.M. Dassen (Ray) , Joe Drew , Johannes Rohr , Jordi Mallach , Jose Carlos Garcia Sogo , Josselin Mouette , Loic Minier , Marc 'HE' Brockschmidt , Ondřej Surý , Rob Bradford , Robert McQueen , Ross Burton , Sebastien Bacher , Sjoerd Simons , Takuo KITAME
+Standards-Version: 3.6.2.1
+Build-Depends: cdbs (>= 0.4.23-1.1), build-essential, autotools-dev, debhelper (>= 4.1.0), patchutils (>= 0.2.25), debhelper (>= 5.0.7ubuntu4), liborbit2-dev (>= 1:2.12.1-1), intltool, gnome-pkg-tools, libgtk2.0-dev (>= 2.7.1), libglade2-dev (>= 1:2.5.1), libwnck-dev (>= 2.13.5), scrollkeeper (>= 0.3.14-9.1), libgnome2-dev (>= 2.13.0), libgnome-desktop-dev (>= 2.11.1), libpng12-dev, libbonobo2-dev (>= 2.8.1-2), libxmu-dev, libedata-cal1.2-dev (>= 1.2.1-1) [!hurd-i386], libgnome-menu-dev (>= 2.11.1-1), libgnomevfs2-dev (>= 2.10.0-1), libnspr-dev, libxres-dev, sharutils, gnome-doc-utils, libedataserverui1.2-dev (>= 1.5.3), liblpint-bonobo-dev, liblaunchpad-integration-dev, libcairo2-dev
+
+Package: gnome-panel
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-panel-data (= ${Source-Version}), gnome-desktop-data (>= 2.10.0-1), gnome-control-center (>= 1:2.8.2-3), gnome-menus (>= 2.11.1-1), gnome-about (>= 2.10.0-1)
+Recommends: gnome-applets (>= 2.10.1-1), gnome-session, menu-xdg (>= 0.2), alacarte
+Suggests: yelp, gnome2-user-guide, gnome-terminal | x-terminal-emulator, gnome-system-tools, nautilus
+Description: launcher and docking facility for GNOME 2
+ This package contains toolbar-like “panels” which can be attached to
+ the sides of your X desktop, or left “floating”. It is designed to be
+ used in conjunction with the Gnome Desktop Environment. Many features
+ are provided for use with the panels – including an application menu,
+ clock, mail checker, network monitor, quick launch icons and the like.
+
+Package: gnome-panel-dbg
+Architecture: any
+Depends: gnome-panel (= ${Source-Version})
+Description: Launch and/or dock GNOME 2 applications
+ This package contains a toolbar (the "panel") that you can attach to the
+ edge of your X desktop. You can install "applets" on it. Several applets
+ are supplied: an application menu, a clock, a mail checker, a network
+ monitor, etc. You can customize the location, and the "autohide"
+ animations.
+ .
+ This development package contains unstripped binaries compiled with
+ debugging symbols needed by gdb.
+
+Package: libpanel-applet2-0
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}
+Description: library for GNOME 2 panel applets
+ This library is used by GNOME 2 panel applets.
+
+Package: libpanel-applet2-0-dbg
+Section: libdevel
+Architecture: any
+Depends: libpanel-applet2-0 (= ${Source-Version})
+Conflicts: libpanel-applet2-dbg
+Provides: libpanel-applet2-dbg
+Replaces: libpanel-applet2-dbg
+Description: library for GNOME 2 panel applets - library with debugging symbols
+ This library is used by GNOME 2 panel applets.
+ .
+ This package contains unstripped shared libraries. It is provided primarily
+ to provide a backtrace with names in a debugger, this makes it somewhat
+ easier to interpret core dumps. The libraries are installed in
+ /usr/lib/debug and can be used by placing that directory in
+ LD_LIBRARY_PATH.
+ Most people will not need this package.
+
+Package: libpanel-applet2-dev
+Section: libdevel
+Architecture: any
+Depends: libpanel-applet2-0 (= ${Source-Version}), libgnomeui-dev (>= 2.10.0-1)
+Description: library for GNOME 2 panel applets - development files
+ This packages provides the include files and static library for the GNOME 2
+ panel applet library functions.
+
+Package: libpanel-applet2-doc
+Section: doc
+Architecture: all
+Suggests: doc-base
+Description: library for GNOME 2 panel applets - documentation files
+ This packages provides the documentation files for the GNOME 2 panel applet
+ library functions.
+
+Package: gnome-panel-data
+Section: gnome
+Architecture: all
+Depends: scrollkeeper (>= 0.3.14-9.1), ${misc:Depends}
+Recommends: gnome-panel (= ${Source-Version})
+Description: common files for GNOME 2 panel
+ This package includes some files that are needed by the GNOME 2 panel
+ (Pixmaps, .desktop files and internationalization files).
+
--- gnome-panel-2.14.1.orig/debian/changelog
+++ gnome-panel-2.14.1/debian/changelog
@@ -0,0 +1,2210 @@
+gnome-panel (2.14.1-0ubuntu3) dapper; urgency=low
+
+ * debian/patches/11_panel_addto_dialog.patch:
+ - cleanup, marked strings as translatable (Ubuntu: #39790)
+
+ -- Sebastien Bacher Sun, 16 Apr 2006 22:04:19 +0200
+
+gnome-panel (2.14.1-0ubuntu2) dapper; urgency=low
+
+ * debian/patches/09_help_submenu.patch:
+ - fix string not marked for translation
+ * debian/patches/11_applet_use_session_dialog.patch:
+ - define a "/apps/panel/global/upstream_session" gconf key to use the
+ upstream sessions dialogs instead of the Ubuntu one
+ - only the upstream mode has a shutdown applet (Ubuntu: #37179)
+
+ -- Sebastien Bacher Fri, 14 Apr 2006 14:32:00 +0200
+
+gnome-panel (2.14.1-0ubuntu1) dapper; urgency=low
+
+ * New upstream version:
+ Panel:
+ - Don't show an empty label for local URI that are not file: URI in
+ the bookmarks (Ubuntu: #31956, #36775)
+ - Plug leaks
+ - Always canonicalize URIs in launchers before showing them
+ - Cleanups
+ libpanel-applet:
+ - Plug GnomeProgram leak
+ Clock Applet:
+ - Remove GnomeProgram leak
+ - Fix potential crash
+ - Fix potential crash with unknown event types
+ - Launch evolution on the clicked day
+ - Plug leak of a GError
+ Show Desktop Applet:
+ - Use less padding for the focus so the icon doesn't get trimmed
+ Misc:
+ - Use po/LINGUAS to list languages
+ Docs Translators:
+ - Maxim Dziumanenko (uk)
+ Translators:
+ - Vital Khilko (be)
+ - Jrmy Le Floc'h (br)
+ - Pema Geyleg (dz)
+ - Ivar Smolin (et)
+ - Benot Dejean (fr)
+ - Ignacio Casal Quinteiro (gl)
+ - Yuval Tanny (he)
+ - Luca Ferretti (it)
+ - Takeshi AIHANA (ja)
+ - Vladimer Sichinava (ka)
+ - Wouter Bolsterlee (nl)
+ - Gora Mohanty (or)
+ - Dan Damian (ro)
+ * debian/patches/07_clock_applet_spawn_evo_right_day.patch:
+ - fixed with the new version
+ * debian/patches/07_use_beagle.patch:
+ - use beagle for the places menu search item if available (Ubuntu: #38986)
+
+ -- Sebastien Bacher Mon, 10 Apr 2006 17:08:16 +0200
+
+gnome-panel (2.14.0-0ubuntu2) dapper; urgency=low
+
+ * debian/patches/07_clock_applet_spawn_evo_right_day.patch:
+ - make double clicking on a day from the panel calendar open the
+ evolution calendar on the same day, patch by Tollef (Ubuntu :#35167)
+
+ -- Sebastien Bacher Mon, 20 Mar 2006 10:42:28 +0100
+
+gnome-panel (2.14.0-0ubuntu1) dapper; urgency=low
+
+ * New upstream release:
+ - Panel:
+ - Remove the Suspend button on the logout dialog (this is not a
+ regression wrt 2.12)
+ - Ignore unknown options passed to the panel
+ - Fix orientation of handles
+ - Fix help link for the menubar
+ - Fix underscores not being visible in menu items
+ - Workspace Switcher Applet:
+ - Fix crash when scrolling right on the last workspace
+ - Misc:
+ - Update manpage
+ - Translations: be, bg, bn, cs, cy, da, de, el, es, et, eu, fi, hu, it,
+ ja, ka, ku, lt, nb, nl, nn, no, pl, pt_BR, ru, sq, sr, sv, th, uk, vi,
+ zh_CN, zh_HK, zh_TW.
+ * debian/ubuntu-about.desktop{,.in}:
+ - added .in file, added Lithuanian translation (Malone: #34711), added
+ Catalan translation (thanks Jordi Mallach).
+ * debian/patches/99_about-ubuntu-translation.patch:
+ - added debian/ubuntu-about.desktop to POTFILES.in, reran
+ intltool-update -p.
+
+ -- Daniel Holbach Mon, 13 Mar 2006 22:16:31 +0100
+
+gnome-panel (2.13.91-0ubuntu6) dapper; urgency=low
+
+ * debian/patches/09_help_submenu.patch:
+ - make a "help" submenu for support (Ubuntu: #31775)
+
+ -- Sebastien Bacher Thu, 2 Mar 2006 23:49:01 +0100
+
+gnome-panel (2.13.91-0ubuntu5) dapper; urgency=low
+
+ * debian/control.in:
+ - Build-Depends on libpng12 instead of libpng3 (Ubuntu: #32590)
+ * debian/patches/08_default_clock_setting.patch:
+ - display the date with the panel clock by default
+
+ -- Sebastien Bacher Thu, 2 Mar 2006 18:59:41 +0100
+
+gnome-panel (2.13.91-0ubuntu4) dapper; urgency=low
+
+ * debian/patches/11_applet_use_session_dialog.patch:
+ - patch update, use one item for the panel menu and make it open the
+ session dialog
+
+ -- Sebastien Bacher Sat, 25 Feb 2006 00:00:00 +0100
+
+gnome-panel (2.13.91-0ubuntu3) dapper; urgency=low
+
+ * debian/patches/04_default_panel_config.patch:
+ - default browser is firefox not epiphany
+
+ -- Sebastien Bacher Thu, 16 Feb 2006 16:26:39 +0100
+
+gnome-panel (2.13.91-0ubuntu2) dapper; urgency=low
+
+ * debian/ubuntu-about.desktop:
+ - use the distributor-logo as icon (Ubuntu: #10322)
+
+ -- Sebastien Bacher Thu, 16 Feb 2006 15:30:25 +0100
+
+gnome-panel (2.13.91-0ubuntu1) dapper; urgency=low
+
+ * New upstream release:
+ - Panel:
+ - Use Restart instead of Reboot
+ - Remove the Shut Down reference in the tooltip of the Log Out item
+ (Malone: #30293)
+ - Don't reboot/shutdown immediately if other users are connected
+ - Don't display the Shut Down item if GDM is not running
+ - Use a softer countdown for the 30 first seconds in the log out dialogs
+ - Fix critical warning in the run dialog when the program list is
+ disabled
+ - Add "..." at the end of the Log Out and Shut Down items
+ - Make invisible mnemonics in menu work again
+ - Add accelerator for items in the context menu of launchers
+ - Use GOption instead of popt
+ - Fish Applet:
+ - Use gender-neutral wording in about dialog
+ - Window Menu Applet:
+ - Update help link
+ - Misc:
+ - Use GOption instead of popt in the test applet program
+ - Fix build when /usr/lib/X11R6 is a link to /usr
+ - Docs Translators: Luca Ferretti (it)
+ - Translators: Runa Bhattacharjee (bn), Jordi Mallach (ca), Miloslav
+ Trmac (cs), Ole Laursen (da), Ivar Smolin (et), Ignacio Casal Quinteiro
+ (gl), Luca Ferretti (it), Øivind Hoel (nb), Evandro Fernandes Giovanini
+ (pt_BR), Слободан Д. Средојевић (sr), Theppitak Karoonboonyanan (th)
+ * debian/patches/11_panel_addto_dialog.patch,
+ debian/patches/12_autoconf.patch:
+ - updated.
+
+ -- Daniel Holbach Mon, 13 Feb 2006 22:33:00 +0100
+
+gnome-panel (2.13.90-0ubuntu2) dapper; urgency=low
+
+ * debian/rules:
+ - build a .pot
+
+ -- Sebastien Bacher Mon, 6 Feb 2006 22:33:54 +0100
+
+gnome-panel (2.13.90-0ubuntu1) dapper; urgency=low
+
+ * New upstream release:
+ - Panel:
+ - Fix timeout label in the logout dialogs
+ - Don't make it possible to have two logout dialogs at the same time
+ - Put logout dialogs above all windows and on all workspaces
+ - Show the logout dialog on the correct screen
+ - Fix crash with logout dialogs when esd and sound events are enabled
+ - Simplify the logout dialogs questions
+ - Partial fix for Vincent's stupidity :-)
+ - Fix search of application launchers in "Add to panel" dialog
+ - Fix potential crash when there's an error loading an applet
+ - Update libegg code
+ - Fix crash when logout dialogs are closed by the window manager
+ - Remove gnome-screenshot item from the Desktop menu
+ - Look in the XDG data dirs when loading a .desktop file, so we don't
+ need the whole path
+ - Update default panel config to just use basenames for .desktop files
+ - Remove the screenshot action button and migrates the existing config
+ to use gnome-screenshot.desktop (Malone: #19090).
+ - Change accelerator for "Lock To Panel"
+ - Add username to the Logout menu item
+ - Fix crash happening with remote bookmarks in the Places menu
+ - Use an icon for the network places submenu
+ - Update the launcher item description in the "Add to panel" dialog
+ - Simplify and add context for some strings
+ - Fix warnings
+ - Don't show useless separators in context menus of panel objects when
+ the panel is locked down
+ - Fix theoretical breakage if gconf config is broken
+ - Clock Applet:
+ - Fix incoherency in the use of two lines format
+ - Don't offer the 12-hour format to the user if his locale don't
+ support it
+ - Misc:
+ - Add context in some strings of the test applet program
+ - Docs Translators
+ - Vincent Untz (fr)
+ - Translators: Vital Khilko (be), Vladimir Petkov (bg), Hendrik
+ Brandt (de), Kostas Papadimas (el), Adam Weinberger (en_CA), Francisco
+ Javier F. Serrador (es), Ilkka Tuohela (fi), Ignacio Casal Quinteiro
+ (gl), Ankit Patel (gu), Luca Ferretti (it), Takeshi AIHANA (ja),
+ Žygimantas Beručka (lt), Øivind Hoel (nb), Reinout van Schouwen (nl),
+ Øivind Hoel (no), Evandro Fernandes Giovanini (pt_BR), Слободан Д.
+ Средојевић (sr), Theppitak Karoonboonyanan (th), Clytie Siddall (vi),
+ Funda Wang (zh_CN)
+ * Other bugs fixed:
+ - Malone: #28958: "Alt+F2 "Run Dialog" box appears and hides behind"
+ * debian/ubuntu-about.desktop:
+ - dropped, DocPath line, thanks Thierry Moisan .
+ (Malone: #4899)
+ * debian/patches/04_default_panel_config.patch,
+ debian/patches/11_panel_addto_dialog.patch,
+ debian/patches/12_autoconf.patch
+ - updated.
+ * debian/patches/08_cvs_fixes_session.patch,
+ debian/patches/13_fix-bookmarks-crash.patch:
+ - dropped, Fix released.
+
+ -- Daniel Holbach Sat, 28 Jan 2006 15:47:24 +0100
+
+gnome-panel (2.13.5-0ubuntu4) dapper; urgency=low
+
+ * debian/patches/13_fix-bookmarks-crash.patch:
+ + Fix the crash caused by memory corruption when viewing the Locations
+ menu. Patch from CVS
+
+ -- Sebastian Dröge Mon, 23 Jan 2006 22:20:17 +0100
+
+gnome-panel (2.13.5-0ubuntu3) dapper; urgency=low
+
+ * debian/patches/11_applet_use_session_dialog.patch:
+ - use the session dialog, instead of the new panel one, when clicking on
+ the applet, thanks to Vincent Untz for the patch!
+
+ -- Sebastien Bacher Thu, 19 Jan 2006 17:41:04 +0100
+
+gnome-panel (2.13.5-0ubuntu2) dapper; urgency=low
+
+ * debian/patches/08_cvs_fixes_session.patch:
+ - patch from the CVS, fixes different issues with the session dialog
+ - fixes the crash due to sound events of the session dialog
+ (Ubuntu: #28917)
+
+ -- Sebastien Bacher Wed, 18 Jan 2006 22:50:22 +0100
+
+gnome-panel (2.13.5-0ubuntu1) dapper; urgency=low
+
+ * debian/patches/11_panel_addto_dialog.patch:
+ - patch updated for the upstream code changes
+ * debian/patches/12_autotools.patch:
+ - updated
+
+ [ Daniel Holbach ]
+
+ * New upstream release:
+ - Panel:
+ - Remove useless screensaver actions in context menu of the button
+ (William Jon McCann)
+ - Fix tiling for image backgrounds (Vincent)
+ - Update background when size changes (Vincent)
+ - Make image with transparency backgrounds work (Vincent)
+ - Fix critical warnings (Vincent)
+ - Add CD recording item to the Places menu (Sébastien Bacher) (Malone:
+ #18213)
+ - Add separator internal applet (Carlos Garcia Campos, Manu Cornet,
+ Vincent)
+ - Add a search entry to the "add to panel" dialog (Vincent)
+ - Re-cache the applications menu when reloading it after there has been
+ some fam/gamin/inotify events (Vincent)
+ - Add new logout/shutdown dialogs (Vincent)
+ - Fix display of remote bookmarks in Places menu (Bastien Nocera,
+ Vincent)
+ - Small fixes (Vincent)
+ - libpanel-applet:
+ - Fix tiling for image backgrounds (Vincent)
+ - Avoid crashes with image backgrounds (Vincent)
+ - Wnck Applets:
+ - tell libwnck that the applets are pagers (Elijah Newren)
+ - Documentation:
+ - Update for clock and fish applets (Joachim Noreiko)
+ - Misc:
+ - Depend on libwnck 2.13.5 (Vincent)
+ - Docs Translators:
+ - Christophe Bliard (fr)
+ - Translators: Vladimir Petkov (bg), Jordi Mallach (ca), Hendrik Richter
+ (de), Adam Weinberger (en_CA), Ilkka Tuohela (fi), Ignacio Casal
+ Quinteiro (gl), Gabor Kelemen (hu), Takeshi AIHANA (ja), Reinout van
+ Schouwen (nl), Слободан Д. Средојевић (sr), Theppitak Karoonboonyanan
+ (th), Clytie Siddall (vi), Woodman Tuen (zh_HK), Woodman Tuen (zh_TW)
+ * debian/control.in:
+ - bumped Build-Depends on libwnck.
+ * debian/patches/11_panel_addto_dialog.patch:
+ - dropped momentarily.
+ * debian/changes/12_autotools.patch:
+ - updated.
+ * Resynchronized with Debian; changes towards the Debian package are:
+ - debian/application-default-icon.png.uue,
+ debian/rules,
+ debian/patches/01_distrologo.patch
+ - Distro Icon.
+ - debian/control.in,
+ debian/rules:
+ - additional gnome-panel-dbg package.
+ - debian/control.in,
+ debian/patches/09_lpi_src.patch,
+ debian/patches/12_autotools.patch:
+ - Launchpad Integration.
+ - debian/control.in:
+ - different Recommends, Suggests (alacarte, gnome-sytem-tools).
+ - different name for libpanel-applet2-0-dbg.
+ - debian/gnome-panel-data.postinst,
+ debian/panel-default-setup-laptop.entries:
+ - additional laptop detect changes.
+ - debian/watch,
+ debian/control.in:
+ - Newer version.
+
+ -- Sebastien Bacher Wed, 18 Jan 2006 01:38:34 +0100
+
+gnome-panel (2.12.2-3) unstable; urgency=low
+
+ * Upload to unstable (Closes: #347881)
+
+ [ Josselin Mouette ]
+ * Suggest gnome-terminal only, as x-terminal-emulator won't be used
+ (closes: #291058).
+
+ -- Guilherme de S. Pastore Fri, 13 Jan 2006 13:40:37 -0200
+
+gnome-panel (2.13.4-0ubuntu3) dapper; urgency=low
+
+ * debian/patches/11_panel_addto_dialog.patch:
+ - patch update by Manu Cornet
+ - changes according to dapper-desktop-plan
+ - move the menu items to the utilities category
+ - use buttons for the special launchers actions
+
+ -- Sebastien Bacher Thu, 12 Jan 2006 22:41:23 +0100
+
+gnome-panel (2.13.4-0ubuntu2) dapper; urgency=low
+
+ * debian/panel-default-setup-laptop.entries,
+ debian/patches/04_default_panel_config.patch:
+ - update for dapper-desktop-plan
+ - don't put yelp on the default panel
+ - put the session button to the top right corner
+
+ -- Sebastien Bacher Mon, 9 Jan 2006 21:54:49 +0100
+
+gnome-panel (2.13.4-0ubuntu1) dapper; urgency=low
+
+ * New upstream version:
+ Panel:
+ - Don't crash when an applet can't be loaded
+ - Fix critical warnings
+ - Remove useless warning
+ - Add a preview widget in the image background chooser
+ - Don't crash with some themes
+ - Fix sensitivity of "Remove panel" menu item
+ - Reword error dialogs
+ - Update the known applications list while typing and only show the
+ items that match
+ - Make the "add to panel" dialog a bit nicer
+ - Use a close button instead of the cancel one in the "add to panel"
+ dialog
+ - Add tooltips for the menu bar
+ - Update from libegg
+ - Don't do something on double/triple clicks for buttons
+ - Make applet handles handle transparency
+ - Fix crash when a toplevel is destroyed
+ - Fix crash when quitting with "add to dialog" open
+ - Fix auto-hide panel not autohiding after the "Delete dialog" has been
+ opened
+ - Minor fixes
+ - Code cleanups
+ libpanel-applet:
+ - Add new API to automatically update the background of a widget
+ - Emits the background-changed signal when the allocated size changes
+ - Fix criticla warning
+ Clock Applet:
+ - Make task activation work correctly
+ - Sort tasks by due date if priorities are the same
+ - Don't show the date by default
+ Fish Applet:
+ - Fix path to cairo.h
+ - Fix critical warning when choosing a new image
+ Notification Area Applet:
+ - Update from libegg. Should fix some icons not showing
+ Window List Applet:
+ - Fix critical warning and icon not showing during startup notification
+ All Applets:
+ - use new libpanel-applet API for the background
+ Documentation:
+ - Update for clock and fish applets
+ Misc:
+ - change button order and use Execute button for the test applet program
+ - don't crash when an applet can't be loaded in the test applet program
+ - Build fixes
+ * debian/patches/02_incorrect_applet_loading_crash_fix.patch:
+ - fixed with the new version
+ * debian/patches/10_defaulteditor.patch,
+ debian/patches/11_panel_addto_dialog.patch,
+ debian/patches/12_autotools.patch:
+ - updated
+ * debian/patches/08_tray_icons.patch:
+ - fixed with the new version
+
+ -- Sebastien Bacher Mon, 2 Jan 2006 22:49:50 +0100
+
+gnome-panel (2.12.2-2) experimental; urgency=low
+
+ * Build-depend on libedataserverui1.2-dev (>= 1.3.0), so control-center and
+ gnome-panel can't be build with conflicting e-d-s libraries.
+
+ -- Sjoerd Simons Tue, 27 Dec 2005 19:54:59 +0100
+
+gnome-panel (2.13.3-0ubuntu3) dapper; urgency=low
+
+ * debian/patches/02_incorrect_applet_loading_crash_fix.patch:
+ - fix a crasher when a bugged applet is configured (Ubuntu: #20912)
+
+ -- Sebastien Bacher Tue, 20 Dec 2005 15:36:53 +0100
+
+gnome-panel (2.13.3-0ubuntu2) dapper; urgency=low
+
+ * debian/control.in:
+ - build with the current evolution-data-server package
+
+ -- Sebastien Bacher Tue, 13 Dec 2005 21:58:32 +0100
+
+gnome-panel (2.13.3-0ubuntu1) dapper; urgency=low
+
+ * New upstream version:
+ Panel:
+ - Code cleanups
+ - Synchronize the way remote bookmarks are displayed with nautilus
+ - Remove deprecated calls
+ - Update libegg code
+ Clock Applet:
+ - Really fix the orientation change
+ Misc:
+ - Remove the .spec file
+ - Build fixes
+ * debian/patches/02_calendar.patch:
+ - fixed with the new version.
+ * debian/patches/09_lpi_src.patch,
+ debian/patches/12_autotools.patch:
+ - updated
+
+ -- Sebastien Bacher Tue, 13 Dec 2005 12:14:02 +0100
+
+gnome-panel (2.12.2-1) experimental; urgency=low
+
+ * New upstream release
+ * debian/patches/02_panel-menu-items.c.patch:
+ - dropped; applied upstream
+ * Don't build on a separate directory, it breaks gnome-doc-utils
+
+ -- Guilherme de S. Pastore Wed, 30 Nov 2005 14:30:20 -0200
+
+gnome-panel (2.13.2-0ubuntu3) dapper; urgency=low
+
+ * debian/control.in,
+ debian/patches/10_defaulteditor.patch:
+ - update for the menu editor name change ("alacarte" now).
+
+ -- Sebastien Bacher Tue, 22 Nov 2005 14:50:48 +0100
+
+gnome-panel (2.13.2-0ubuntu2) dapper; urgency=low
+
+ * debian/patches/02_calendar.patch:
+ - fix the calendar for the clock applet (Ubuntu: #19819).
+
+ -- Sebastien Bacher Sat, 19 Nov 2005 14:10:37 +0100
+
+gnome-panel (2.13.2-0ubuntu1) dapper; urgency=low
+
+ * Sync with Debian.
+ * New upstream version:
+ Panel
+ - Don't display error when an url show is canceled
+ - Handle glade errors
+ - Revert orientation change
+ - Update libegg code
+ Clock Applet
+ - Updates for the orientation change
+ Fish Applet
+ - Updates for the orientation change
+ * debian/application-default-icon.png.uue:
+ - default icon for the menu entries.
+ * debian/control.in:
+ - Build-Depends on cairo/lpi.
+ - Depends on libnspr4.
+ - updated the libpanel dbg package name, list a gnome-panel-dbg package.
+ - Recommends smeg.
+ * debian/gnome-panel-data.install:
+ - install the "About Ubuntu" menu item.
+ * debian/gnome-panel-data.postinst:
+ - use laptop-detect to determine the default configuration.
+ * debian/panel-default-setup-laptop.entries:
+ - laptop profile.
+ * debian/patches/01_distrologo.patch:
+ - use the distribution logo.
+ * debian/patches/01_layout.patch:
+ - rename the Desktop menu, list the Documents item.
+ * debian/patches/02_panel-menu-items.c.patch:
+ - fixed with the current version.
+ * debian/patches/04_menus_rename.patch:
+ - no name change for the menu files.
+ * debian/patches/04_default_panel_config.patch:
+ - change to the default configuration.
+ * debian/patches/05_submenus.patch:
+ - change the order of the administration and preferences menus.
+ * debian/patches/06_applets_category.patch:
+ - fix applets categories.
+ * debian/patches/07_time_cmd.patch:
+ - use gksudo to set the clock.
+ * debian/patches/08_tray_icons.patch:
+ - fix some bugs with the systray.
+ * debian/patches/09_default_icons.patch:
+ - shows an icon if the .desktop hasn't one.
+ * debian/patches/10_defaulteditor.patch:
+ - change the default editor to smeg.
+ * debian/patches/11_panel_addto_dialog.patch:
+ - new 'add to panel' dialog.
+ * debian/patches/12_autotools.patch:
+ - update the build files.
+ * debian/patches/99_reautogenization.patch:
+ - the previous patch does this job.
+ * debian/rules:
+ - install the default menu icon.
+ - updated for ubuntu dbg packages.
+ * debian/ubuntu-about.desktop:
+ - "About Ubuntu" menu item.
+ * debian/watch:
+ - updated.
+
+ -- Sebastien Bacher Mon, 14 Nov 2005 12:28:01 +0100
+
+gnome-panel (2.12.1-2) experimental; urgency=low
+
+ * New maintainer
+ Thanks for all your work, Marc!
+
+ * debian/patches/06_sync_clear_documents.patch:
+ - patch from upstream CVS to force update when Gamin/FAM
+ notification is not available (Closes: #319800, #330847)
+
+ -- Guilherme de S. Pastore Fri, 11 Nov 2005 20:54:11 -0200
+
+gnome-panel (2.12.1-1) experimental; urgency=low
+
+ [ Gustavo Noronha Silva ]
+ * New upstream release
+ * debian/patches/01_defaults_add_notifarea.patch,
+ debian/patches/02_clockapplet_reload_timezone.patch,
+ debian/patches/03_libpanel-applet_X11_link_missing.patch
+ - removed, applied upstream or fixed otherwise
+ * debian/patches/02_panel-menu-items.c.patch:
+ - added, from Ubuntu's package packaging patch, which added it
+ from GNOME's bugzilla #315322
+ * debian/patches/99_reautogenization.patch:
+ - updated with:
+ libtoolize -c -f --automake && aclocal-1.9 && autoheader && \
+ automake-1.9 -acf && autoconf && rm -rf autom4te.cache
+ * debian/patches/04_menus_rename.patch:
+ - updated
+ * debian/rules:
+ - disable scrollkeeper on build, based on Ubuntu's change
+ * debian/watch:
+ - updated for 2.12 major
+ * debian/control.in:
+ - updated Build-Depends according to Ubuntu's package and on the
+ upstream package's configure.in pkgconfig stuff
+
+ [ Guilherme de S. Pastore ]
+ * debian/control.in:
+ - moved menu-xdg from Suggests to Recommends (Closes: #315782)
+
+ [ Loic Minier ]
+ * Clarify "Copyright" versus "License".
+
+ -- Gustavo Noronha Silva Sat, 29 Oct 2005 19:54:10 -0200
+
+gnome-panel (2.10.2-2) UNRELEASED; urgency=low
+
+ * Menu transition, part 1 and 2: move from #!/usr/sbin/install-menu to
+ #!/usr/bin/install-menu. [debian/gnome-vfolder-user,
+ debian/gnome-panel-data.menu-method.experimental,
+ debian/gnome-panel-data.menu-method]
+
+ -- Loic Minier Thu, 20 Oct 2005 16:33:49 +0200
+
+gnome-panel (2.10.2-1) unstable; urgency=low
+
+ * New upstream release
+ * Removed 06_fr_po_fix.patch now included upstream.
+ * Re-autogen-ized.
+ * Increased Standards-Version (no changes needed).
+
+ -- Marc Dequènes (Duck) Tue, 28 Jun 2005 23:30:00 +0200
+
+gnome-panel (2.10.1-5) unstable; urgency=medium
+
+ * Don't overwrite DEB_CONFIGURE_SCRIPT_ENV completely.
+ * Remove most replaces and conflicts fields, they are unused now.
+ * gnome-panel only Recommends: gnome-session.
+ * gnome-panel-data only Recommends: gnome-panel (breaking a dependency
+ cycle).
+
+ -- Josselin Mouette Sat, 25 Jun 2005 19:45:52 +0200
+
+gnome-panel (2.10.1-4) unstable; urgency=low
+
+ * Replaced Suggests on menu by menu-xdg (Closes: #313011).
+ * Added patch to fix missing includes from Dann Frazier (Closes:
+ #314692).
+ * Fix fr translation s/Environnement de bureau/Bureau/ (from GNOME
+ CVS) (Closes: #313351).
+ * Now building in 'debian/build/' directory (cleaner).
+ * Pass --as-needed to LDFLAGS to reduce dependencies if possible.
+ * Disabled evolution-data-server support on Hurd (thanks to Michael
+ Banck).
+
+ -- Marc Dequènes (Duck) Sun, 19 Jun 2005 11:51:40 +0200
+
+gnome-panel (2.10.1-3) unstable; urgency=low
+
+ * Upload to unstable (Closes: #312609).
+ * Added patch to solve menu files conflicts with other desktop
+ environnements (Closes: #307098) (thanks to seb128).
+ * Removed clean rule hack to work around #299010.
+
+ -- Marc Dequènes (Duck) Tue, 7 Jun 2005 23:44:00 +0200
+
+gnome-panel (2.10.1-2) experimental; urgency=low
+
+ * Some more build-depends, depends, and suggests update (gnome-about
+ and new gnome-menus are now dependencies).
+ * Fixed in 2.10 branch :
+ + drawer does not open at the right place on dual-screen display
+ (Closes: #260480).
+ + click repeat rate in calendar view for clock applet is too fast
+ (Closes: #272885).
+ + panel won't scale some SVGs properly (Closes: #275215).
+ + translation error in pt-BR (Closes: #293656).
+ * Removed 'gnome-panel-screenshot' man page (command moved to gnome-
+ utils).
+ * Fixed stupid cut-and-paste mistake in 'debian/copyright'.
+
+ -- Marc Dequènes (Duck) Sun, 17 Apr 2005 02:25:16 +0200
+
+gnome-panel (2.10.1-1) experimental; urgency=low
+
+ * New upstream release
+ * Removed the following patches now included upstream :
+ + 03_french_typo.patch
+ + 06_translation_silliness.patch
+ + 08_improved_run_in_term_speed.patch
+ * Mass build-depends and depends update.
+ * Patched libpanel-applet to correctly link with X11.
+ * Re-autogen-ized.
+ * Removed '/usr/share/gnome-panel' not used anymore in 'debian/gnome-
+ panel-data.install'.
+ * Updated 'debian/watch'.
+
+ -- Marc Dequènes (Duck) Sun, 10 Apr 2005 21:06:35 +0200
+
+gnome-panel (2.8.3-1) unstable; urgency=medium
+
+ * Marc Dequènes:
+ + Rebuilt with fixed libgnomeui without non-free howl stuff
+ (Closes: #298887) (thus urgency).
+ + Used revised timezone patch for clock applet made by Stephen Gildea
+ (Closes: #294591).
+ + Made load of gconf config quiet (Closes: #293204).
+ + Readded 'userprefix' in menu-method as it broke 'favorites://' in
+ nautilus (Closes: #295091).
+ + Added a menu-method to produce a customisable Debian menu made by
+ Bill Allombert (not activated by default, see README.Debian)
+ (Closes: #259400).
+ * Sjoerd Simons:
+ + New upstream release
+ + debian/patches/07_empty_desktop_keys.patch
+ - Removed. Merged upstream.
+
+ -- Marc Dequènes (Duck) Sun, 13 Mar 2005 11:01:55 +0100
+
+gnome-panel (2.8.2-2) unstable; urgency=medium
+
+ * urgency high because menu bug is very bad for sarge, and custom
+ lauchers are an important feature which is unfortunatly broken.
+ * menu : (thanks to Bill Allombert)
+ + updated suggests and added conflicts for nice woody transition
+ (Closes: #291085).
+ + removed unuseful 'userprefix' in menu-method.
+ * Added patches :
+ + custom lauchers fix from Sjoerd Simons (Closes: #291185).
+ + run-application typing completion speed improvements (from
+ gnomezilla) (Closes: #287120).
+ * Corrected doc-base index location (Closes: #285650).
+ * Corrected descriptions to please lintian.
+
+ -- Marc Dequènes (Duck) Fri, 28 Jan 2005 23:58:50 +0100
+
+gnome-panel (2.8.2-1) unstable; urgency=low
+
+ * New upstream release :
+ + no longer respond to delete event (Closes: #254972).
+ * CDBS Tweaks.
+ * Regenerated '05_clockapplet_reload_timezone.patch'.
+ * Regenerated relibtoolize patch.
+ * Updated policy to 3.6.1.1 (no changes needed).
+ * Patched or and uk translations : some translators should _really_
+ learn how to read english.
+
+ -- Marc Dequènes (Duck) Fri, 10 Dec 2004 02:31:05 +0100
+
+gnome-panel (2.8.1-2) unstable; urgency=low
+
+ * Upload to unstable.
+
+ -- Sebastien Bacher Fri, 19 Nov 2004 13:14:18 +0100
+
+gnome-panel (2.8.1-1) experimental; urgency=low
+
+ * New upstream release.
+ * Removed '03_define_types.patch' not necessary anymore.
+ * Regenerated relibtoolize patch.
+ * Reintroduced '04_french_typo.patch' removed by mistake.
+
+ -- Marc Dequènes (Duck) Thu, 14 Oct 2004 01:28:31 +0200
+
+gnome-panel (2.8.0.1-1) experimental; urgency=low
+
+ * New upstream release :
+ + clock applet : fixed padding on a 24px panel (Closes: #258323).
+ + fix panel orientation badly set/remembered (Closes: #216997).
+ + fix freakiness with autohiding and snap-to-screen-edge
+ (Closes #255608).
+ * [JHM] Added devhelp doc symlink (Closes: #273491)
+ * Dropped '04_french_typo.patch' now included upstream.
+
+ -- Marc Dequènes (Duck) Sun, 3 Oct 2004 15:09:48 +0200
+
+gnome-panel (2.8.0-2) experimental; urgency=low
+
+ * Version 2.8.0 corrects :
+ + run in terminal works again (Closes: #262487).
+ + custom launcher command browser was lacking navigation entries
+ (Closes: #254443).
+ * Enabled evolution-data-server support (Closes: #272061).
+ * Updated versions in 'debian/control'.
+
+ -- Marc Dequènes (Duck) Wed, 22 Sep 2004 00:50:02 +0200
+
+gnome-panel (2.8.0-1) experimental; urgency=low
+
+ * New upstream release.
+ * Updated watch file.
+ * Regenerated relibtoolize patch.
+ * Made build idempotent (typo patch for 'po/fr.po' was causing
+ problems)
+ * Added 'autotools-dev' to build dependencies to take advantage of the
+ CDBS automatic 'config.*' management.
+
+ -- Marc Dequènes (Duck) Tue, 14 Sep 2004 21:16:42 +0200
+
+gnome-panel (2.7.92-1) experimental; urgency=low
+
+ * New upstream release :
+ + correct pointer detection problem on multiscreen causing several
+ problems like autihiding not always working (Closes: #178710)
+ + new add applet dialog (Closes: #247982) (bug obsoleted)
+ * NOTICE : panel settings dialog was removed upstream, use gconf
+ editor instead.
+ * Build-Depends/Depends versions update (Closes: #261327).
+ * Ported changes from 2.6.2-2 & 2.6.2-3.
+ * Removed 03_po_gu_fix.patch now included upstream.
+ * Patch added to correct a typo in french translation (Closes:
+ #268618).
+ * Corrected quoting problem in description (Closes: #244071).
+ * Patch from gnomezilla to reload timezone in clock applet (Closes:
+ #61611).
+ * Regenerated relibtoolize patch.
+
+ -- Marc Dequènes (Duck) Sun, 12 Sep 2004 17:57:49 +0200
+
+gnome-panel (2.7.91.1-1) experimental; urgency=low
+
+ * New upstream development release.
+ * [debian/control.in] Bumped libwnck build dependency as per configure.in.
+ * [debian/patches/02_relibtoolise.patch] Regenerated.
+ * [debian/gnome-panel-data.install] Removed
+ debian/tmp/usr/share/control-center-2.0 .
+ * [debian/rules] Ensure at build time that all symbols are resolvable; make
+ the linker work a bit harder to speed up dynamic loading.
+
+ -- J.H.M. Dassen (Ray) Sat, 21 Aug 2004 13:22:47 +0200
+
+gnome-panel (2.7.4.1-1) experimental; urgency=low
+
+ * New upstream release :
+ + updated translations (Closes: #247982, #247984).
+ * Regenerated relibtoolize patch.
+
+ -- Marc Dequènes (Duck) Wed, 21 Jul 2004 18:24:00 +0200
+
+gnome-panel (2.7.3-1) experimental; urgency=low
+
+ * New upstream release
+ * Regenerated relibtoolize patch.
+
+ -- Marc Dequènes (Duck) Tue, 6 Jul 2004 14:38:10 +0200
+
+gnome-panel (2.7.1-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Marc Dequènes (Duck) Thu, 24 Jun 2004 20:30:55 +0200
+
+gnome-panel (2.6.2-1) unstable; urgency=low
+
+ * New upstream release.
+ * Updated some Build-Depends versions.
+ * Regenerated '02_relibtoolise.patch'.
+
+ -- Marc Dequènes (Duck) Sat, 19 Jun 2004 11:14:06 +0200
+
+gnome-panel (2.6.1-4) unstable; urgency=low
+
+ * GNOME Team Upload.
+ * Upload in unstable.
+ * debian/control.in:
+ + Don't Build-Depends on evolution-data-server since this package is
+ not in unstable
+
+ -- Sebastien Bacher Wed, 26 May 2004 16:38:41 +0200
+
+gnome-panel (2.6.1-3) experimental; urgency=low
+
+ * GNOME Team Upload.
+ * Rebuilt with new evolution-data-server (Closes: #250807).
+
+ -- Sebastien Bacher Tue, 25 May 2004 19:38:22 +0200
+
+gnome-panel (2.6.1-2) experimental; urgency=low
+
+ * Added missing Build-Depends on 'libxmu-dev' (Closes: #247285).
+
+ -- Marc Dequènes (Duck) Thu, 20 May 2004 18:39:24 +0200
+
+gnome-panel (2.6.1-1) experimental; urgency=low
+
+ * New upstream release :
+ - fixed visibility problem with solid-color background
+ (Closes: #179871).
+ * Recreated and split relibtoolize patch.
+ * Improved tight versioning rules.
+ * Deactivated gtk-doc documentation regeneration (see GNOME Policy on
+ Alioth for details).
+ * Removing all remaining 'Makefile' files in clean rule.
+
+ -- Marc Dequènes (Duck) Wed, 21 Apr 2004 02:47:43 +0200
+
+gnome-panel (2.6.0-5) experimental; urgency=low
+
+ * Gustavo Noronha Silva:
+ - debian/gnome-panel-data.postinst:
+ + add a call to gconftool-2 to --load the .entries file which
+ contains the default panel configuration
+
+ -- Gustavo Noronha Silva Thu, 15 Apr 2004 22:14:40 -0300
+
+gnome-panel (2.6.0-4) experimental; urgency=low
+
+ * Added missing Replaces for 'libpanel-applet2-dev' on 'gnome-panel-
+ data' for 2.4->2.6 transition.
+ * J.H.M. Dassen (Ray):
+ - [debian/patches/01_relibtoolise.patch] New. Cut down direct
+ dependencies.
+ * Jordi Mallach:
+ - debian/control.in: build-depend on an epoched libglade2-dev.
+ - debian/rules: don't let clean fail if find returns error.
+
+ -- Marc Dequènes (Duck) Fri, 9 Apr 2004 04:02:26 +0200
+
+gnome-panel (2.6.0-3) experimental; urgency=low
+
+ * Rebuilt to use 'evolution-data-server'.
+
+ -- Marc Dequènes (Duck) Mon, 29 Mar 2004 23:56:27 +0200
+
+gnome-panel (2.6.0-2) experimental; urgency=low
+
+ * Corrected 'gnome-applet' tight dependency on 'libpanel-applet2-0'.
+ * Corrected missing Build-Depends on 'cdbs'.
+ * Updated Depends & Recommends.
+
+ -- Marc Dequènes (Duck) Sun, 28 Mar 2004 23:29:52 +0200
+
+gnome-panel (2.6.0-1) experimental; urgency=low
+
+ * New Maintainer (Closes: 238884).
+ * New upstream release:
+ + fix X resource leak (Closes: #235903).
+ + fix auto-open behaviour for drawers (Closes: #216577).
+ * Switched to CDBS.
+ * Updated Uploaders and using the 'gnome-pkg-tools' pkg.
+ * Added some Replaces/Conflicts for smoother upgrade.
+ * Compatibility level switched to 4, and old patches were deactivated.
+ * Cleaned dirty 'debian/*' made by CM, now using simple and clean CDBS
+ rules and '*.install' files.
+ * Improved 'debian/copyright'.
+ * Removed now unused 'go.uue' to genrate 'go.png'.
+ * 'debian/control', 'debian/changelog' and 'debian/copyright' are now
+ UTF-8 encoded.
+
+ -- Marc Dequènes (Duck) Sun, 28 Mar 2004 23:21:32 +0200
+
+gnome-panel (2.4.2-4) unstable; urgency=low
+
+ * the right
+
+ -- Christian Marillat Fri, 19 Mar 2004 15:39:39 +0100
+
+gnome-panel (2.4.2-3) unstable; urgency=low
+
+ * Remove DTD hack and update scrollkeeper dependency to 0.3.14-5
+ * Add outputencoding="UTF-8" in menu-method file (Closes: #230804)
+
+ -- Christian Marillat Sun, 8 Feb 2004 11:09:26 +0100
+
+gnome-panel (2.4.2-2) unstable; urgency=low
+
+ * Suggests gnome-system-tools for gnome-panel, needed if you want to set
+ up the system time (Closes: #229043)
+
+ -- Christian Marillat Fri, 23 Jan 2004 11:52:49 +0100
+
+gnome-panel (2.4.2-1) unstable; urgency=low
+
+ * New upstream release.
+ * Remove 05_manpage patch, included by upstream
+
+ -- Christian Marillat Fri, 16 Jan 2004 10:22:17 +0100
+
+gnome-panel (2.4.1-7) unstable; urgency=low
+
+ * debian/prerm Unregister schemas file from the database.
+
+ -- Christian Marillat Fri, 9 Jan 2004 15:48:01 +0100
+
+gnome-panel (2.4.1-6) unstable; urgency=low
+
+ * Add a version (>= 2.4.0) to the gnome-applets recommends (Closes: #223550)
+
+ -- Christian Marillat Wed, 31 Dec 2003 09:21:18 +0100
+
+gnome-panel (2.4.1-5) unstable; urgency=low
+
+ * Add a -dbg package for libpanel-applet2 library (Closes: #220734)
+ * Add missing manpages.
+
+ -- Christian Marillat Sun, 7 Dec 2003 11:05:31 +0100
+
+gnome-panel (2.4.1-4) unstable; urgency=low
+
+ * Panel should conflicts with metacity <= 2.6.0 (Closes: #217122)
+ * Patch from bugzilla to fix duplicate entries in the help message (Closes: #183130)
+ * debian/control update build-dependecies to GNOME 2.4 packages (Closes: #217497)
+
+ -- Christian Marillat Sat, 25 Oct 2003 09:54:07 +0200
+
+gnome-panel (2.4.1-3) unstable; urgency=low
+
+ * Register default panel configuration with gconftool (Closes: #216600)
+
+ -- Christian Marillat Mon, 20 Oct 2003 01:19:20 +0200
+
+gnome-panel (2.4.1-2) unstable; urgency=low
+
+ * gnome-panel-data should replaces gnome-desktop-data (Closes: #216458)
+ * Rebuild to remove liblinc dependency in the -dev package
+
+ -- Christian Marillat Sun, 19 Oct 2003 10:01:36 +0200
+
+gnome-panel (2.4.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Should suggest a terminal emulator for the run program dialog (Closes: #214650)
+ * Don't need to depends on xbase-clients
+
+ -- Christian Marillat Sat, 18 Oct 2003 10:36:24 +0200
+
+gnome-panel (2.2.2.2-2) unstable; urgency=low
+
+ * Change userprefix in menu-method. You can access user generated Debian
+ menus with favorites:/// in nautilus
+ * Use theme folder icons for Debian menus (Closes: #207494)
+ * New patch to fix manpage entry for gnome-panel (Closes: #212037)
+
+ -- Christian Marillat Sun, 21 Sep 2003 23:33:11 +0200
+
+gnome-panel (2.2.2.2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 15 Jul 2003 15:28:51 +0200
+
+gnome-panel (2.2.2.1-2) unstable; urgency=low
+
+ * Patch 04_drawer.c to fix a panel crash when a new drawer is added
+ (Closes: #198695)
+
+ -- Christian Marillat Sat, 28 Jun 2003 14:35:49 +0200
+
+gnome-panel (2.2.2.1-1) unstable; urgency=low
+
+ * New upstream release
+ * Add a gnome-control-center (>= 2.2.2) dependency (Closes: #198371)
+ * New patch (01) to fix broken translation in bn.po (Closes: #193635)
+
+ -- Christian Marillat Sun, 22 Jun 2003 15:44:58 +0200
+
+gnome-panel (2.2.2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Fri, 16 May 2003 17:45:28 +0200
+
+gnome-panel (2.2.1-2) unstable; urgency=low
+
+ * Only add longtitle as tooltip in Debian menu (Closes: #186697)
+ * Update section
+ * Add go icon
+
+ -- Christian Marillat Sun, 13 Apr 2003 08:29:10 +0200
+
+gnome-panel (2.2.1-1.1) unstable; urgency=low
+
+ * zero source change NMU to resolve problems on ia64 that binary NMU caused
+
+ -- Bdale Garbee Fri, 11 Apr 2003 02:13:24 -0600
+
+gnome-panel (2.2.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Remove notification applet patch
+
+ -- Christian Marillat Tue, 11 Mar 2003 15:51:00 +0100
+
+gnome-panel (2.2.0.1-2) unstable; urgency=low
+
+ * Patch to fix the notification applet crash (Closes: #180133)
+
+ -- Christian Marillat Mon, 17 Feb 2003 16:04:23 +0100
+
+gnome-panel (2.2.0.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Remove replaces libpanel-applet-dev in the -dev package.
+
+ -- Christian Marillat Tue, 4 Feb 2003 14:36:28 +0100
+
+gnome-panel (2.2.0-2) unstable; urgency=low
+
+ * Conflicts with system-tray-applet (Closes: #178278)
+ * Add versioned conflicts for gnome-core (Closes: #178401)
+
+ -- Christian Marillat Sat, 25 Jan 2003 23:52:18 +0100
+
+gnome-panel (2.2.0-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 21 Jan 2003 15:33:47 +0100
+
+gnome-panel (2.1.90.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Add a quick-lounge-applet (<= 0.98-1) conflicts, this applet crash the panel.
+ * Launcher are restored properly (Closes: #172385)
+ * Menu panel doesn't disappears (Closes: #172848)
+ * Fixes panel hogging the CPU when hide_delay and show_delay are zero (Closes: #174002)
+ * Fix inbox monitor randomly displays wildly inaccurate info (Closes: #168877)
+ * debian/control Add yelp and gnome2-user-guide in Suggests for the panel
+
+ -- Christian Marillat Sat, 18 Jan 2003 17:12:02 +0100
+
+gnome-panel (2.0.11-3) unstable; urgency=low
+
+ * Bump Standards-Version to 3.5.8
+
+ -- Christian Marillat Sat, 28 Dec 2002 17:55:58 +0100
+
+gnome-panel (2.0.11-2) unstable; urgency=low
+
+ * Move libpanel documentation in a -doc package (Closes: #171007)
+
+ -- Christian Marillat Fri, 20 Dec 2002 16:18:00 +0100
+
+gnome-panel (2.0.11-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Fri, 15 Nov 2002 14:40:58 +0100
+
+gnome-panel (2.0.10-2) unstable; urgency=low
+
+ * Upload to unstable
+ * Gnome-hints has been removed (Closes: #152335)
+ * Fix in clock update (Closes: #156401)
+ * Applets save their properties (Closes: #135569)
+ * No more buttons in the tasklist applet (Closes: #116205)
+ * Docklet has been removed (Closes: #137450)
+ * Launcher properties are now saved (Closes: #139827)
+ * Now menus are always sorted (Closes: #150649)
+ * kmail doesn't crash the panel (Closes: #146706)
+ * The tasklist isn't dynamic resizable (Closes: #89752)
+ * No more problem with windowmaker and the panel (Closes: #94592)
+ * No more duplicate entrie in the main menu (Closes: #97473)
+ * No more memory leak in the tasklist applet (Closes: #103880)
+ * Tasklist doen't display app titles (Closes: #112059)
+ * Netscape entry menu is fixed (Closes: #135992)
+ * No more "Fill window thumbnails" option in tasklist (Closes: #151134)
+ * Tooltips in the arrows panel are correctly displayed (Closes: #113642)
+ * Completion in run dialog work with ctrl-TAB (Closes: #75665)
+ * gmenu has been removed (Closes: #95014)
+ * menu have a mozilla entry (if mozilla is present) (Closes: #135993)
+ * Xemacs.desktop has been removed (Closes: #148500)
+
+ -- Christian Marillat Mon, 28 Oct 2002 16:08:15 +0100
+
+gnome-panel (2.0.10-1) experimental; urgency=low
+
+ * New upstream release.
+ * gnome-panel should depends on xbase-clients for xrdb
+ * Add build-dependency for xbase-clients
+
+ -- Christian Marillat Mon, 14 Oct 2002 16:47:55 +0200
+
+gnome-panel (2.0.9-4) experimental; urgency=low
+
+ * Upload with original tarball
+
+ -- Christian Marillat Sun, 29 Sep 2002 17:45:08 +0200
+
+gnome-panel2 (2.0.9-3) experimental; urgency=low
+
+ * Upload without the 2 suffix
+
+ -- Christian Marillat Sat, 28 Sep 2002 18:46:17 +0200
+
+gnome-panel2 (2.0.9-2) experimental; urgency=low
+
+ * Add libmpg3-dev in build-depends (Closes: #160758)
+ * Update to standards version 3.5.7
+ * -dev package should depends on the same lib version
+
+ -- Christian Marillat Mon, 16 Sep 2002 11:35:00 +0200
+
+gnome-panel2 (2.0.9-1) experimental; urgency=low
+
+ * New upstream release.
+ * Update lignome-ui-dev dependencies to 2.0.5-2
+
+ -- Christian Marillat Fri, 6 Sep 2002 13:50:51 +0200
+
+gnome-panel2 (2.0.8-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Thu, 5 Sep 2002 19:00:46 +0200
+
+gnome-panel2 (2.0.7-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 27 Aug 2002 11:19:52 +0200
+
+gnome-panel2 (2.0.6-2) experimental; urgency=low
+
+ * Add scrollkeeper in build-depends
+ * Build against the latest libgnomevfs2-dev 2.0.2-4
+
+ -- Christian Marillat Fri, 16 Aug 2002 17:36:42 +0200
+
+gnome-panel2 (2.0.6-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 12 Aug 2002 19:44:49 +0200
+
+gnome-panel2 (2.0.5-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Thu, 8 Aug 2002 16:46:21 +0200
+
+gnome-panel2 (2.0.4-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 5 Aug 2002 19:35:26 +0200
+
+gnome-panel2 (2.0.3-2) experimental; urgency=low
+
+ * Recompiled against the latest lignome-vfs to remove libssl dependency.
+
+ -- Christian Marillat Fri, 2 Aug 2002 17:14:51 +0200
+
+gnome-panel2 (2.0.3-1) experimental; urgency=low
+
+ * New upstream release.
+ * Remove gmenu entry in menu file (Closes: #153213)
+ * debian/menu s/panel/gnome-panel/
+
+ -- Christian Marillat Tue, 30 Jul 2002 17:08:21 +0200
+
+gnome-panel2 (2.0.2-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 15 Jul 2002 15:31:05 +0200
+
+gnome-panel2 (2.0.1-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 17 Jun 2002 16:07:40 +0200
+
+gnome-panel2 (2.0.0-1) experimental; urgency=low
+
+ * New upstream release.
+ * Replace "Distribution menu" by "Debian menu"
+
+ -- Christian Marillat Mon, 10 Jun 2002 16:51:50 +0200
+
+gnome-panel2 (1.5.24-2) experimental; urgency=low
+
+ * Build against the latest libraries.
+
+ -- Christian Marillat Sun, 9 Jun 2002 18:29:23 +0200
+
+gnome-panel2 (1.5.24-1) experimental; urgency=low
+
+ * New upstream release.
+ * Remove call to Internet DTD (Closes: #148899)
+ * Call scrollkeeper-update in gnome-panel-data2.postrm
+
+ -- Christian Marillat Tue, 4 Jun 2002 17:22:35 +0200
+
+gnome-panel2 (1.5.23-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 28 May 2002 15:51:18 +0200
+
+gnome-panel2 (1.5.22-2) experimental; urgency=low
+
+ * debian/rules Add GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 in install target.
+ * gnome-panel2 should depends on gnome-desktop-data
+ * debian/gnome-panel-data2.postinst check if schemas files are present
+ before calling gconftool-2
+
+ -- Christian Marillat Mon, 27 May 2002 16:01:57 +0200
+
+gnome-panel2 (1.5.22-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 20 May 2002 21:58:18 +0200
+
+gnome-panel2 (1.5.21-1) experimental; urgency=low
+
+ * New upstream release.
+ * Add support for DEB_HOST_GNU_TYPE DEB_BUILD_GNU_TYPE and
+ DEB_BUILD_OPTIONS
+
+ -- Christian Marillat Wed, 15 May 2002 20:39:24 +0200
+
+gnome-panel2 (1.5.20-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Sun, 12 May 2002 14:25:08 +0200
+
+gnome-panel2 (1.5.19-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 29 Apr 2002 20:51:20 +0200
+
+gnome-panel2 (1.5.18-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 22 Apr 2002 16:41:41 +0200
+
+gnome-panel2 (1.5.17-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Wed, 17 Apr 2002 15:46:23 +0200
+
+gnome-panel2 (1.5.16-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Mon, 1 Apr 2002 22:40:37 +0200
+
+gnome-panel2 (1.5.15-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Fri, 29 Mar 2002 17:01:04 +0100
+
+gnome-panel2 (1.5.12-2) experimental; urgency=low
+
+ * Add libwnck-dev in build-depends (Closes: #137954)
+
+ -- Christian Marillat Wed, 13 Mar 2002 10:51:00 +0100
+
+gnome-panel2 (1.5.12-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 5 Mar 2002 14:47:36 +0100
+
+gnome-panel2 (1.5.11-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Tue, 26 Feb 2002 15:37:43 +0100
+
+gnome-panel2 (1.5.10-2) experimental; urgency=low
+
+ * Replace gettext by intltoo in build-depends
+
+ -- Christian Marillat Mon, 25 Feb 2002 15:40:43 +0100
+
+gnome-panel2 (1.5.10-1) experimental; urgency=low
+
+ * new upstream release.
+
+ -- Christian Marillat Mon, 18 Feb 2002 22:06:48 +0100
+
+gnome-panel2 (1.5.9-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Fri, 15 Feb 2002 00:38:51 +0100
+
+gnome-panel2 (1.5.7-1) experimental; urgency=low
+
+ * New upstrema release.
+
+ -- Christian Marillat Tue, 5 Feb 2002 14:41:01 +0100
+
+gnome-core2 (1.5.4-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Christian Marillat Sun, 20 Jan 2002 16:21:40 +0100
+
+gnome-core (1.4.0.4-16) unstable; urgency=low
+
+ * Fix typo in gnome-terminal.wrapper (Closes: #127768)
+ * Remove gnome-hint patche (Closes: #121390, #129184)
+ * debian/control Replace libpng-dev by libpng2-dev in Build-Depends
+ (Closes: #128377)
+
+ -- Christian Marillat Mon, 14 Jan 2002 15:04:52 +0100
+
+gnome-core (1.4.0.4-15) unstable; urgency=low
+
+ * Build against the latest gnome-libs to update the libzvt2 dependency
+ (Closes: #127309, #127271)
+ * debian/control Replace libpng2-dev by libpng-dev in Build-Depends.
+ * debian/control Build-depends on libzvt-dev (>= 1.4.1.2-9)
+
+ -- Christian Marillat Tue, 1 Jan 2002 15:27:43 +0100
+
+gnome-core (1.4.0.4-14) unstable; urgency=low
+
+ * Fix typo in gnome-terminal.1 (Closes: #123073)
+ * Fix base page for doc-base in libpanel-applet-dev package.
+ * Fix typo in gnome-help documentation (Closes: #126566)
+ * Apply patch to allows meta functionnality in gnome-terminal (Closes: #50427)
+
+ -- Christian Marillat Thu, 27 Dec 2001 14:47:36 +0100
+
+gnome-core (1.4.0.4-13) unstable; urgency=low
+
+ * Default font for gnome-terminal is "fixed" only (Closes: #117126)
+ * Patch against gnome-hint.c Don't use gettext for font descriptor
+ (Closes: #116606)
+ * Patch against gnome-about/Makefile.am to use new gdk_pixbuf include path
+ (Closes: #120312)
+ * Revert my change on logout.c Only root can shutdown/reboot from the
+ panel (Closes: #119316, #120127)
+
+ -- Christian Marillat Tue, 20 Nov 2001 11:36:05 +0100
+
+gnome-core (1.4.0.4-12) unstable; urgency=low
+
+ * gnome-wm honour --default-wm (Closes: #115668)
+ * Build against the latest gnome-libs
+
+ -- Christian Marillat Sun, 21 Oct 2001 14:11:19 +0200
+
+gnome-core (1.4.0.4-11) unstable; urgency=low
+
+ * debian/control lynx comeback in Recommends (Closes: #114142)
+ * debian/control replaces xml-i18n-tools by intltool (Closes: #115024)
+ * Fix automake 1.5 errors. Thanks to Denis Barbier (Closes: #114369)
+ * Build against the latest orbit (Closes: #115309)
+
+ -- Christian Marillat Fri, 12 Oct 2001 10:46:49 +0200
+
+gnome-core (1.4.0.4-10) unstable; urgency=low
+
+ * Fix typo in panel/panel.hints (Closes: #113590)
+ * Replace lynx by w3m (Closes: #113613)
+ * Move gnome-terminal.desktop in gnome-terminal package (Closes: #113736)
+ * Move gnome-help.desktop in gnome-help package
+ * debian:control Add Replaces: gnome-panel-data (<= 1.4.0.4-9) for above
+ * Patch against gsm/logout.c Now you can reboot/halt your machine from the
+ panel. This only work for root, because shutdown doesn't understand the
+ -a option. Read README.debian in gnome-panel package.
+ * debian/rules Remove less files in clean target (Closes: #114020)
+
+ -- Christian Marillat Mon, 1 Oct 2001 11:34:06 +0200
+
+gnome-core (1.4.0.4-9) unstable; urgency=low
+
+ * Add Debian menu for panel and gmenu (Closes: #112176)
+ * Remove /var/lib/gnome on purge (Closes: #113005)
+ * Remove /etc/gnome/config on purge (Closes: #112994)
+ * Remove /etc/gnome on purge (Closes: #112995)
+ * debian/control replace cygnus-stylesheets by docbook-utils
+
+ -- Christian Marillat