diff options
author | Bernie Innocenti <bernie@codewiz.org> | 2010-07-29 15:55:47 (GMT) |
---|---|---|
committer | Bernie Innocenti <bernie@codewiz.org> | 2010-07-29 15:55:47 (GMT) |
commit | 67f5a8185d878bd0fc8e83aa9150ed02bf745924 (patch) | |
tree | 433a9869091624d4e8237639f1d783c8fe004e46 /rpms | |
parent | 028da6dd8bc6a0375498b51278f874a9cb7691c0 (diff) |
Add all pending Sugar patches
Diffstat (limited to 'rpms')
69 files changed, 11187 insertions, 0 deletions
diff --git a/rpms/sugar-artwork/revert-to-GTK_WIDGET_IS_SENSITIVE.patch b/rpms/sugar-artwork/revert-to-GTK_WIDGET_IS_SENSITIVE.patch new file mode 100644 index 0000000..882b785 --- /dev/null +++ b/rpms/sugar-artwork/revert-to-GTK_WIDGET_IS_SENSITIVE.patch @@ -0,0 +1,29 @@ +--- sugar-artwork-0.88.1/gtk/engine/sugar-style.c.orig 2010-07-01 07:42:50.000000000 -0400 ++++ sugar-artwork-0.88.1/gtk/engine/sugar-style.c 2010-07-01 07:43:49.000000000 -0400 +@@ -444,7 +444,7 @@ sugar_style_draw_box (GtkStyle *st + + sugar_fill_generic_info (&info, style, state_type, shadow_type, widget, detail, x, y, width, height); + +- if (widget && !gtk_widget_is_sensitive (widget)) ++ if (widget && !GTK_WIDGET_IS_SENSITIVE (widget)) + info.state = GTK_STATE_INSENSITIVE; + + /* Needed because the trough and bar are cached in a buffer inside GtkProgress. */ +@@ -458,7 +458,7 @@ sugar_style_draw_box (GtkStyle *st + + sugar_fill_generic_info (&info, style, state_type, shadow_type, widget, detail, x, y, width, height); + +- if (widget && !gtk_widget_is_sensitive (widget)) ++ if (widget && !GTK_WIDGET_IS_SENSITIVE (widget)) + info.state = GTK_STATE_INSENSITIVE; + + if (widget && GTK_IS_PROGRESS_BAR (widget)) { +@@ -641,7 +641,7 @@ sugar_style_draw_shadow (GtkStyle + if (widget && GTK_WIDGET_HAS_FOCUS (widget)) { + info.state = GTK_STATE_ACTIVE; + } +- if (widget && !gtk_widget_is_sensitive (widget)) { ++ if (widget && !GTK_WIDGET_IS_SENSITIVE (widget)) { + info.state = GTK_STATE_INSENSITIVE; + } + diff --git a/rpms/sugar-artwork/sizelist-0001-add-icons-for-the-sorting-options-in-the-Journal.patch b/rpms/sugar-artwork/sizelist-0001-add-icons-for-the-sorting-options-in-the-Journal.patch new file mode 100644 index 0000000..d59067b --- /dev/null +++ b/rpms/sugar-artwork/sizelist-0001-add-icons-for-the-sorting-options-in-the-Journal.patch @@ -0,0 +1,113 @@ +From 9df080ca84bf63c39daaa8074bf6e1d1116b3cbf Mon Sep 17 00:00:00 2001 +Message-Id: <9df080ca84bf63c39daaa8074bf6e1d1116b3cbf.1274926564.git.andresambrois@gmail.com> +From: =?utf-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Wed, 26 May 2010 23:15:21 -0300 +Subject: [PATCH] Add icons for the sorting options in the Journal +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +Thanks to Gary C. Martin for the icons. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + icons/scalable/actions/Makefile.am | 3 +++ + icons/scalable/actions/view-created.svg | 21 +++++++++++++++++++++ + icons/scalable/actions/view-lastedit.svg | 23 +++++++++++++++++++++++ + icons/scalable/actions/view-size.svg | 12 ++++++++++++ + 4 files changed, 59 insertions(+), 0 deletions(-) + create mode 100644 icons/scalable/actions/view-created.svg + create mode 100644 icons/scalable/actions/view-lastedit.svg + create mode 100644 icons/scalable/actions/view-size.svg + +diff --git a/icons/scalable/actions/Makefile.am b/icons/scalable/actions/Makefile.am +index 42a06a3..a00a2df 100644 +--- a/icons/scalable/actions/Makefile.am ++++ b/icons/scalable/actions/Makefile.am +@@ -94,6 +94,9 @@ icon_DATA = \ + view-freeform.svg \ + view-fullscreen.svg \ + view-list.svg \ ++ view-size.svg \ ++ view-lastedit.svg \ ++ view-created.svg \ + view-radial.svg \ + view-refresh.svg \ + view-return.svg \ +diff --git a/icons/scalable/actions/view-created.svg b/icons/scalable/actions/view-created.svg +new file mode 100644 +index 0000000..7d3ba09 +--- /dev/null ++++ b/icons/scalable/actions/view-created.svg +@@ -0,0 +1,21 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ ++ <!ENTITY fill_color "#000000"> ++ <!ENTITY stroke_color "#FFFFFF"> ++]> ++<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55"> ++ <defs> ++ <mask id="Mask" maskUnits="userSpaceOnUse" x="0" y="0" width="55" height="55"> ++ <rect x="0" y="0" width="55" height="55" fill="#FFFFFF" stroke="none"/> ++ <circle cx="27.5" cy="15" r="1.75" style="fill:#000000;;stroke:none"/> ++ <circle cx="27.5" cy="40" r="1.75" style="fill:#000000;;stroke:none"/> ++ <circle cx="15" cy="27.5" r="1.75" style="fill:#000000;;stroke:none"/> ++ <circle cx="40" cy="27.5" r="1.75" style="fill:#000000;;stroke:none"/> ++ <line x1="27.5" y1="27.5" x2="34.5" y2="17" stroke="#000000" stroke-width="2.5" stroke-linecap="round"/> ++ <line x1="27.5" y1="27.5" x2="35" y2="32.5" stroke="#000000" stroke-width="2.5" stroke-linecap="round"/> ++ </mask> ++ </defs> ++ <circle cx="27.5" cy="27.5" r="17" style="fill:&stroke_color;;stroke:&stroke_color;;stroke-width:3.5" mask="url(#Mask)"/> ++ <!-- ++ --> ++</svg> +diff --git a/icons/scalable/actions/view-lastedit.svg b/icons/scalable/actions/view-lastedit.svg +new file mode 100644 +index 0000000..fe3e077 +--- /dev/null ++++ b/icons/scalable/actions/view-lastedit.svg +@@ -0,0 +1,23 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ ++ <!ENTITY fill_color "#000000"> ++ <!ENTITY stroke_color "#FFFFFF"> ++]> ++<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55"> ++ <defs> ++ <mask id="Mask" maskUnits="userSpaceOnUse" x="0" y="0" width="55" height="55"> ++ <rect x="0" y="0" width="55" height="55" fill="#FFFFFF" stroke="none"/> ++ <line x1="19" y1="19" x2="27" y2="19" stroke="#000000" stroke-width="2.5"/> ++ <line x1="28" y1="19" x2="31" y2="19" stroke="#000000" stroke-width="2.5"/> ++ <line x1="19" y1="24" x2="21" y2="24" stroke="#000000" stroke-width="2.5"/> ++ <line x1="22" y1="24" x2="26" y2="24" stroke="#000000" stroke-width="2.5"/> ++ <line x1="19" y1="29" x2="22" y2="29" stroke="#000000" stroke-width="2.5"/> ++ <path d="M 24 35 l 2 -6 l 19 -19 l 4 3 l -19 19 z" fill="#000000" stroke="#000000" stroke-width="3"/> ++ </mask> ++ </defs> ++ <rect x="15" y="14" width="25" height="27" style="fill:&stroke_color;;stroke:&stroke_color;;stroke-width:3.5" mask="url(#Mask)"/> ++ <path d="M 24 35 l 1 -5 l 4 3 z" fill="&stroke_color;" stroke="none"/> ++ <path d="M 24 35 m 2 -6 l 19 -19 l 4 3 l -19 19 z" fill="&stroke_color;" stroke="none"/> ++ <!-- ++ --> ++</svg> +diff --git a/icons/scalable/actions/view-size.svg b/icons/scalable/actions/view-size.svg +new file mode 100644 +index 0000000..e87f978 +--- /dev/null ++++ b/icons/scalable/actions/view-size.svg +@@ -0,0 +1,12 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ ++ <!ENTITY fill_color "#000000"> ++ <!ENTITY stroke_color "#FFFFFF"> ++]> ++<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55"> ++ <line x1="12" y1="17.5" x2="43" y2="17.5" stroke="&stroke_color;" stroke-width="2.5"/> ++ <line x1="16" y1="22.5" x2="39" y2="22.5" stroke="&stroke_color;" stroke-width="2.5"/> ++ <line x1="20" y1="27.5" x2="35" y2="27.5" stroke="&stroke_color;" stroke-width="2.5"/> ++ <line x1="23.5" y1="32.5" x2="31.5" y2="32.5" stroke="&stroke_color;" stroke-width="2.5"/> ++ <line x1="28.5" y1="37.5" x2="26.5" y2="37.5" stroke="&stroke_color;" stroke-width="2.5"/> ++</svg> +-- +1.6.3.3 + diff --git a/rpms/sugar-artwork/sl2006-icons-for-touchpad-panel.patch b/rpms/sugar-artwork/sl2006-icons-for-touchpad-panel.patch new file mode 100644 index 0000000..93da715 --- /dev/null +++ b/rpms/sugar-artwork/sl2006-icons-for-touchpad-panel.patch @@ -0,0 +1,84 @@ +From 582755ecf47bb044e3e9b9e42c50ebe6406f9534 Mon Sep 17 00:00:00 2001 +From: Walter Bender <walter@sugarlabs.org> +Date: Wed, 19 May 2010 08:25:29 -0400 +Subject: [PATCH] icons for touchpad panel + +--- + icons/scalable/device/capacitive.svg | 18 ++++++++++++++++++ + icons/scalable/device/resistive.svg | 21 +++++++++++++++++++++ + 2 files changed, 39 insertions(+), 0 deletions(-) + create mode 100644 icons/scalable/device/capacitive.svg + create mode 100644 icons/scalable/device/resistive.svg + +--- sugar-artwork-0.88.0/icons/scalable/device/Makefile.am.orig 2010-05-20 03:35:54.000000000 -0400 ++++ sugar-artwork-0.88.0/icons/scalable/device/Makefile.am 2010-05-20 03:36:22.000000000 -0400 +@@ -38,6 +38,7 @@ icon_DATA = \ + battery-charging-100.svg \ + camera-external.svg \ + camera.svg \ ++ capacitive.svg \ + computer.svg \ + computer-xo.svg \ + drive.svg \ +@@ -77,6 +78,7 @@ icon_DATA = \ + network-wireless-connected-100.svg \ + network-wireless-connected-100.icon \ + printer.svg \ ++ resistive.svg \ + speaker-000.svg \ + speaker-033.svg \ + speaker-066.svg \ +diff --git a/icons/scalable/device/capacitive.svg b/icons/scalable/device/capacitive.svg +new file mode 100644 +index 0000000..e223b66 +--- /dev/null ++++ b/icons/scalable/device/capacitive.svg +@@ -0,0 +1,18 @@ ++<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ ++ <!ENTITY stroke_color "#010101"> ++ <!ENTITY fill_color "#ffffff"> ++]><svg enable-background="new 0 0 55 55" height="55px" id="Layer_1" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"> ++<g ++ transform="translate(0,-15.65)"> ++<path ++ d="m 2.934,28.664 0,18.209 49.391,0 0,-18.209 -49.391,0 z M 36,45.833 l -17,0 0,-16.129 17,0 0,16.129 z" ++ fill="&fill_color;" ++ stroke="&stroke_color;" ++ style="stroke-width:2" /> ++</g> ++<path ++ d="m 22.817123,49.135003 c 0,0 -3.23492,-8.766448 -3.243008,-9.837791 -0.0135,-1.797291 -2.398098,-2.342156 -2.398098,-2.342156 0,0 -0.621319,-2.249376 0,-2.770053 0.656117,-0.549837 2.934483,-0.629824 3.735004,0.330634 l 2.413094,2.895211 0,-12.75 c 0,0 0.888891,-1.589214 1.643962,-1.454545 0.745806,0.133019 1.356038,1.454545 1.356038,1.454545 l 0,10.5 0,-4.5 c 0,0 0.947828,-0.746067 1.5,-0.75 0.552172,-0.0039 1.5,0.75 1.5,0.75 l 0,4.5 0,-3.75 c 0,0 0.675747,-0.758712 1.5,-0.75 0.824253,0.0087 1.5,0.568182 1.5,0.568182 l 0,3.931818 0,-3 c 0,0 0.857274,-0.33549 1.5,-0.375 0.526597,-0.03237 1.448303,0.97351 1.5,1.575 0.220672,2.567514 0.969363,5.350927 0.823983,7.574377 -0.100086,1.53071 -0.67874,8.199778 -2.212713,8.199778 l -11.118262,0 z" ++ fill="&fill_color;" ++ stroke="&stroke_color;" ++ style="stroke-width:1.5;" /> ++</svg> +diff --git a/icons/scalable/device/resistive.svg b/icons/scalable/device/resistive.svg +new file mode 100644 +index 0000000..3eb8cb4 +--- /dev/null ++++ b/icons/scalable/device/resistive.svg +@@ -0,0 +1,21 @@ ++<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ ++ <!ENTITY stroke_color "#010101"> ++ <!ENTITY fill_color "#ffffff"> ++]><svg enable-background="new 0 0 55 55" height="55px" id="Layer_1" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"> ++<g ++ transform="translate(0,-15.6)"> ++<path ++ d="m 2.934,28.664 0,18.209 49.391,0 0,-18.209 -49.391,0 z" ++ fill="&fill_color;" ++ stroke="&stroke_color;" ++ style="stroke-width:2" /> ++</g><path ++ d="m 10.113335,17.999995 c 4.481574,10.248626 12.299223,4.823443 18.006668,1.48 3.636065,-2.130021 10.421669,1.48 10.421669,1.48" ++ fill="none" ++ stroke="&stroke_color;" ++ style="stroke-width:2;stroke-linecap:round" /><path ++ d="m 46.742465,8.1381941 -5.095999,6.7474989 -1.044001,1.3585 -1.7375,4.133 c -0.023,0.052 -0.009,0.1115 0.0345,0.1475 0.0445,0.036 0.1055,0.042 0.1535,0.01 l 3.913,-2.5185 c 0.0055,-0.004 0.0055,-0.0135 0.011,-0.0215 0.0325,-0.0245 0.071,-0.046 0.098,-0.081 0.0015,-10e-4 0.017,-0.0205 0.017,-0.0245 l 0.9155,-1.1355 2.7345,-3.527 4.005501,-5.1644989 c 0.011,-0.0115 0.0745,-0.1015 0.0745,-0.1015 0.048,-0.0805 0.074,-0.1725 0.074,-0.278 0,-0.0305 0,-0.059 -0.006,-0.088 -0.0435,-0.3815 -0.357501,-0.841 -0.819501,-1.2065 -0.4615,-0.364 -0.9845,-0.5615 -1.364,-0.517 -0.163,0.021 -0.3945,0.1875 -0.3945,0.1875 l -1.5695,2.0795 z" ++ fill="&fill_color;" ++ stroke="&stroke_color;" ++ style="stroke-width:1.5" /> ++</svg> +-- +1.7.0.4 + diff --git a/rpms/sugar-artwork/sugar-artwork-gtkdep.patch b/rpms/sugar-artwork/sugar-artwork-gtkdep.patch new file mode 100644 index 0000000..ba69ee6 --- /dev/null +++ b/rpms/sugar-artwork/sugar-artwork-gtkdep.patch @@ -0,0 +1,25 @@ +From ac029997d30ed0e76b319d0ccadb058e21f4d054 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg <benjamin@sipsolutions.net> +Date: Thu, 6 May 2010 19:13:51 +0200 +Subject: [PATCH 1/2] Revert 5d88c89 and instead disable the just remove time flags. #1899 +Organization: Sugar Labs Foundation +X-Subversion: sucks + +--- + gtk/engine/Makefile.am | 3 --- + gtk/engine/sugar-info.c | 2 +- + gtk/engine/sugar-style.c | 6 +++--- + 3 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/gtk/engine/Makefile.am b/gtk/engine/Makefile.am +index eb720ff..d23508a 100644 +--- a/gtk/engine/Makefile.am ++++ b/gtk/engine/Makefile.am +@@ -1,7 +1,4 @@ + INCLUDES = \ +- -DGTK_DISABLE_DEPRECATED \ +- -DGDK_DISABLE_DEPRECATED \ +- -DG_DISABLE_DEPRECATED \ + $(ENGINE_CFLAGS) $(WARN_CFLAGS) + + enginedir = $(libdir)/gtk-2.0/$(GTK_VERSION)/engines diff --git a/rpms/sugar-artwork/sugar-artwork.spec b/rpms/sugar-artwork/sugar-artwork.spec new file mode 100644 index 0000000..b7062e5 --- /dev/null +++ b/rpms/sugar-artwork/sugar-artwork.spec @@ -0,0 +1,448 @@ +Summary: Artwork for Sugar look-and-feel +Name: sugar-artwork +Version: 0.88.1 +Release: 1.3bernie%{?dist} +URL: http://sugarlabs.org +Group: User Interface/Desktops +License: LGPLv2+ +Source0: http://download.sugarlabs.org/sources/sucrose/glucose/%{name}/%{name}-%{version}.tar.bz2 + +# Bugfixes +Patch1: revert-to-GTK_WIDGET_IS_SENSITIVE.patch + +# Experimental patches +Patch101: sl2006-icons-for-touchpad-panel.patch +Patch102: sizelist-0001-add-icons-for-the-sorting-options-in-the-Journal.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: gtk2-devel >= 2.9.0 +BuildRequires: xorg-x11-apps +BuildRequires: perl-XML-Parser +BuildRequires: python +BuildRequires: icon-naming-utils +BuildRequires: icon-slicer + +Requires: gtk2 >= 2.9.0 + +%description +sugar-artwork contains the themes and icons that make up the OLPC default +look and feel. + +%prep +%setup -q +%patch1 -p1 +%patch101 -p1 +%patch102 -p1 + +%build +autoreconf +%configure +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install + +rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/*/engines/*.la + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +touch --no-create %{_datadir}/icons/sugar || : +%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/sugar || : + +%postun +touch --no-create %{_datadir}/icons/sugar || : +%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/sugar || : + +%files +%defattr(-,root,root) +%doc README COPYING + +%{_datadir}/icons/sugar +%{_datadir}/themes/sugar-100/gtk-2.0/gtkrc +%{_datadir}/themes/sugar-72/gtk-2.0/gtkrc +%{_libdir}/gtk-2.0/*/engines/*.so + +%changelog +* Thu Jun 3 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.1-1 +- New upstream stable 0.88.1 release + +* Tue Apr 13 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-2 +- Add patch for deprecated gtk functions to fix borked sugar + +* Tue Mar 20 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-1 +- New upstream stable 0.88.0 release + +* Wed Mar 10 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.3-1 +- New upstream release + +* Fri Feb 12 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.2-1 +- New upstream release + +* Sat Dec 05 2009 Mathieu Bridon <bochecha@fedoraproject.org> - 0.87.1-1 +- New upstream release + +* Thu Sep 24 2009 Mathieu Bridon <bochecha@fedoraproject.org> - 0.86.0-1 +- New upstream release + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-2 +- Upload sources + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-1 +- New upstream release + +* Fri Sep 11 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.3-1 +- New upstream release + +* Fri Jul 31 2009 Mathieu Bridon (bochecha) <bochecha@fedoraproject.org> - 0.85.2-1 +- New upstream release + +* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.85.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sat Jul 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.1-2 +- Remove matchbox theme dir + +* Sat Jul 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.1-1 +- New upstream release + +* Wed Apr 08 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-3 +- Another rebuild for icon-slicer-0.3-12 + +* Wed Apr 08 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-2 +- Rebuild for icon-slicer-0.3-12 + +* Wed Mar 11 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.84.1-1 +- Add back some icons to the Makefile (Simon) + +* Tue Mar 03 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-1 +- Rebuild for 0.84 + +* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.83.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Simon Schampijer <simon@schampijer.de> - 0.83.5-1 +- Icon for a generic document, part of #360 +- Add view source icon + +* Mon Feb 16 2009 Simon Schampijer <simon@schampijer.de> - 0.83.4-1 +- Add documend-send icon (Gary C Martin) #227 +- Add application-x-generic as a copy of application-octet-stream #13 +- Add icons drive-harddisk and drive + +* Fri Feb 06 2009 Simon Schampijer <simon@schampijer.de> - 0.83.3-2.20090206giteb39d7b3b2b +- Add documend-send icon (Gary C Martin) #227 +- Add application-x-generic as a copy of application-octet-stream #13 +- Add icons drive-harddisk and drive + +* Tue Jan 20 2009 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.3-1 +- add activity-journal icon to artwork +- add system-logout icon (part of #207) +- add everything needed for the colorpicker. That is a small icon and a bit in the gtkrc. +- fix triangular arrows by looking at the parent_bg_color option +- add icons for object transfers + +* Sun Jan 04 2009 Simon Schampijer <simon@laptop.org> - 0.83.2-1 +- New icon for the wired network + +* Tue Nov 4 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.1-1 +- Update to 0.83.1 + +* Tue Sep 23 2008 Simon Schampijer <simon@laptop.org> - 0.82.3-1 +- Fix corrupted network-wireless-060.svg + +* Sat Sep 20 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.2-1 +- #7685 Alternate home layouts; fixed ring scaling; better modularization of layouts +- #8554 Indicate connected AP in Neighborhood view. +- #8198 Use a plainer "wrench" for the Settings icon +- #7987 Home view XO icon palette for Control Panel has wrong icon + +* Sat Sep 6 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.82.1-2 +- fix license tag + +* Thu Aug 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.1-1 +- #4312 need volume button icons for totem player +- #7939 Missing stock icons + +* Thu Aug 07 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.0-1 +- 7641 Install GTK compatibility symlinks using icon-naming-utils package + +* Wed Jul 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-2.20080709gitc77b345c02 +- git snapshot +- 7385 Add view-freeform icon (eben) + +* Sat Jun 21 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.81.1 +- Some improvements to the gtk theme (benzea) + +* Fri Jun 13 2008 Simon Schampijer <simon@laptop.org> - 0.79.3-1 +- Update to 0.79.3 + +* Wed Apr 09 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.79.2 +- Misc. icon fixes. + +* Thu Apr 03 2008 Simon Schampijer <simon@laptop.org> - 0.79.1 +- Frame/Home redesign - Put corner stone + +* Sat Feb 9 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.0-1 +- Update to 0.79.0 + +* Fri Nov 02 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.33.20071102git0763fefc48 +- #4610 Prevent a division by zero while making icons insensitive. (benzea) + +* Fri Nov 02 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.32.20071102git9bc8be4d48 +- #4568 Implement a better effect for insensitive icons [may need more tweaking] (benzea) +- Added tray-hide/show icons (eben) +- Added a zoom-original button for returning to actual size (eben) +- Updated the full media button set to the new design spec (eben) +- Added fullscreen (and return) buttons (eben) +- #4595 Fixed the "wiggle" in the busy cursor (eben) + +* Fri Oct 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.31.20071019git811b41812a +- New snapshot + +* Tue Oct 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.30.20071009git91d9239340 +- New snapshot + +* Sun Oct 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.29.20071007git9b93ff3a3f +- New snapshot + +* Fri Sep 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.28.20070914git2aac89b4fe +- New snapshot + +* Wed Sep 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.26.20070912gite4fd20770c +- New snapshot + +* Sun Sep 9 2007 Dan Williams <dcbw@redhat.com> - 0.34-0.25.20070909git2e13ad392d +- New snapshot + +* Thu Sep 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.24.20070906gitf89f6e00cc +- New snapshot + +* Thu Aug 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.23.20070830gitd2120f79b7 +- New snapshot + +* Wed Aug 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.21.20070829git60139d01c3 +- New snapshot + +* Tue Aug 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.20.20070827git931d3dee31 +- New snapshot + +* Wed Aug 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.19.20070822git8de1d5be84 +- New snapshot + +* Mon Aug 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.18.20070820git81695a321f +- New snapshot + +* Tue Aug 14 2007 John (J5) Palmieri <johnp@redhat.com> - 0.34-0.15.20070814gitb0228a578f +- New snapshot + +* Fri Jul 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.15.20070727git359c47de2c +- New snapshot + +* Wed Jul 25 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.14.20070725git37744886a7 +- New snapshot + +* Tue Jul 24 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.13.20070724git3368046fdc +- New snapshot + +* Sat Jul 21 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.12.20070721gitb4d5062514 +- New snapshot + +* Thu Jul 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.11.20070719gitf662ad4507 +- New snapshot + +* Wed Jul 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.10.20070718giteb3ffd0171 +- New snapshot + +* Tue Jul 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.9.20070716gita0c7965b7b +- New snapshot + +* Mon Jul 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.8.20070715git7724264dab +- New snapshot + +* Fri Jul 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.7.20070713git454a63a3f0 +- New snapshot + +* Wed Jul 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.6.20070711git4d612c6644 +- New snapshot + +* Fri Jul 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.5.20070705gitaddbcacbc5 +- Several new icons for network and journal + +* Fri Jun 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.4.20070629git13fafab42e +- Minor tweaks to the controls style. + +* Thu Jun 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.3.20070628git6c74e162ca +- New snapshot + +* Tue Jun 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-0.2.20070626gitc788870202 +- New snapshot + +* Sat Jun 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.33-3.git5aef11739b +- Spec cleanups, patch by ivazqueznet@gmail.com +- Rename to sugar-artwork + +* Thu Jun 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.33-3.git5640efb030 +- Fix comboboxes on the toolbars + +* Mon Jun 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.33-2.gitc3d3dce71b +- New snapshot + +* Mon May 28 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.20.20070528git +- More work on the gtk theme + +* Wed May 16 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.19.20070516git +- Add icon for call + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.17.20070514git +- More work on the theme + +* Thu May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.16.20070511git +- Fix cursors + +* Thu May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.15.20070511git +- Better gtk theme + +* Thu May 10 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.14.20070510git +- New snapshot + +* Thu Mar 29 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.12.20070329git +- Add an icon for the mesh device + +* Thu Mar 22 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.11.20070322git +- Remove conflict with redhat-artwork + +* Wed Mar 21 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.10.20070321git +- Fix italic icon + +* Tue Mar 20 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.9.20070320git +- New icons for the write activity + +* Mon Mar 19 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.8.20070319git +- More matchbox theme fixes + +* Mon Mar 19 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.7.20070319git +- Fix matchbox font size + +* Thu Mar 15 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.6.20070315git +- Fix font an icons size + +* Wed Mar 7 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.5.20070307git +- Put back the gtk theme + +* Fri Mar 2 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.4.20070302git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.3.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.2.20070228git +- Update snapshot + +* Sat Feb 24 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-2.1.20070224git +- Update to 2.1.20070224git + +* Wed Feb 8 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.33-1 +- Update to 0.33 + +* Wed Jan 31 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.32-1 +- Update to 0.32 + +* Mon Jan 29 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.31-1 +- Update to 0.31 + +* Tue Jan 16 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.30-1 +- Update to 0.30 + +* Wed Jan 11 2007 Marco Pesenti Gritti <mpg@redhat.com> 0.29-1 +- Update to 0.29 + +* Tue Dec 19 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.28-1 +- Update to 0.28 + +* Tue Dec 19 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.27-1 +- Update to 0.27 + +* Fri Nov 17 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.26-1 +- Update 0.26 + +* Thu Nov 9 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.25-1 +- Update to 0.25 + +* Wed Nov 8 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.24-1 +- Update to 0.24 + +* Sat Nov 4 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.23-1 +- Update to 0.23 + +* Fri Nov 3 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.22-1 +- Update to 0.22 + +* Mon Oct 30 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.21-1 +- Update to 0.21 + +* Wed Oct 25 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.20-1 +- Update to 0.20 + +* Tue Oct 24 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.19-1 +- Update to 0.19 + +* Fri Oct 20 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.18-1 +- Update to 0.18 + +* Thu Oct 19 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.17-1 +- Update to 0.17 + +* Wed Oct 18 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.16-1 +- Update to 0.16 + +* Tue Oct 17 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.15-1 +- Update to 0.15 + +* Thu Oct 13 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.14-1 +- Buld 0.14 + +* Thu Oct 5 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.13-1 +- Build 0.13 + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.12-1 +- Build 0.12 + +* Fri Aug 21 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.11-1 +- Build 0.11 + +* Fri Jun 30 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.10-1 +- Build 0.10 and add xorg-x11-apps + +* Fri Jun 29 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.9-1 +- Build 0.9 + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.8-1 +- Build 0.8 + +* Thu Jun 21 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.7-2 +- Add some unpackaged files + +* Thu Jun 7 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.7-1 +- Build 0.7 + +* Thu Jun 7 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.6-1 +- Build 0.6 + +* Thu Jun 7 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.5-1 +- Build 0.5 + +* Thu Jun 7 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.4-2 +- Add build require (perl xml parser) + +* Thu Jun 7 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.4-1 +- Build 0.4 + +* Thu May 23 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.3-1 +- Build 0.3 + +* Thu May 22 2006 Marco Pesenti Gritti <mpg@redhat.com> 0.2-1 +- Build 0.2 diff --git a/rpms/sugar-datastore/sizelist-0000-cover-letter.patch b/rpms/sugar-datastore/sizelist-0000-cover-letter.patch new file mode 100644 index 0000000..455dc75 --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0000-cover-letter.patch @@ -0,0 +1,43 @@ +From adf903b541e0bc31a3aec6199930451476400e3d Mon Sep 17 00:00:00 2001 +Message-Id: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 4 Jul 2010 03:41:21 -0300 +Subject: [PATCH v2 0/7] Add ctime and filesize properties to the datastore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This new version addresses two problems with the last patchset: + +Bert Freudenberg kindly reminded me that the 'ctime' property had a documented +string format [0], which Etoys was using. This version uses that format so we +don't break any activities expecting it. + +Bernie Innocenti produced a datastore that was unable to successfuly upgrade +(reindex) to the new version. The problem was that indexing a document failed +miserably when ctime or filesize didn't exist, this version avoids that. This +version also contains a new patch that checks for and adds the new metadata +when rebuilding the index so that old entries can be sorted. + +[0] http://wiki.sugarlabs.org/go/Development_Team/Low-level_Activity_API#Meta_Data + +v0: Initial submission to sugar-devel +v1: Split ctime and filesize patches as requested by Sascha +v2: Change ctime format to '%Y-%m-%dT%H:%M:%S'. Add ctime and filesize metadata +when reindexing. + +Andrés Ambrois (7): + Add filesize property to the index. + Add migration code from DS v0 for the filesize property + Check filesize property on index rebuild. + Add ctime property to the index and datastore + Check ctime on index rebuild + Implement migration from DS v0 for ctime property. + Increment CURRENT_LAYOUT_VERSION to trigger an index rebuild + + src/carquinyol/datastore.py | 28 ++++++++++++++++++++++++++++ + src/carquinyol/indexstore.py | 22 ++++++++++++++++++++++ + src/carquinyol/layoutmanager.py | 2 +- + src/carquinyol/migration.py | 12 +++++++++++- + 4 files changed, 62 insertions(+), 2 deletions(-) + diff --git a/rpms/sugar-datastore/sizelist-0001-Add-filesize-property-to-the-index.patch b/rpms/sugar-datastore/sizelist-0001-Add-filesize-property-to-the-index.patch new file mode 100644 index 0000000..b3b145c --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0001-Add-filesize-property-to-the-index.patch @@ -0,0 +1,98 @@ +From 2b14f8b279734cebecb3ac532ee912c3b2f5726c Mon Sep 17 00:00:00 2001 +Message-Id: <2b14f8b279734cebecb3ac532ee912c3b2f5726c.1278225681.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:34:23 -0300 +Subject: [PATCH v2 1/7] Add filesize property to the index. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Don't fail indexing if filesize is missing. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/datastore.py | 12 ++++++++++++ + src/carquinyol/indexstore.py | 14 ++++++++++++++ + 2 files changed, 26 insertions(+), 0 deletions(-) + +diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py +index a556869..93ad419 100644 +--- a/src/carquinyol/datastore.py ++++ b/src/carquinyol/datastore.py +@@ -157,6 +157,12 @@ class DataStore(dbus.service.Object): + if not props.get('timestamp', ''): + props['timestamp'] = int(time.time()) + ++ if os.path.exists(file_path): ++ stat = os.stat(file_path) ++ props['filesize'] = stat.st_size ++ else: ++ props['filesize'] = 0 ++ + self._metadata_store.store(uid, props) + self._index_store.store(uid, props) + self._file_store.store(uid, file_path, transfer_ownership, +@@ -193,6 +199,12 @@ class DataStore(dbus.service.Object): + if not props.get('timestamp', ''): + props['timestamp'] = int(time.time()) + ++ if os.path.exists(file_path): ++ stat = os.stat(file_path) ++ props['filesize'] = stat.st_size ++ else: ++ props['filesize'] = 0 ++ + self._metadata_store.store(uid, props) + self._index_store.store(uid, props) + +diff --git a/src/carquinyol/indexstore.py b/src/carquinyol/indexstore.py +index 8a69334..1b32a01 100644 +--- a/src/carquinyol/indexstore.py ++++ b/src/carquinyol/indexstore.py +@@ -28,6 +28,8 @@ from carquinyol.layoutmanager import MAX_QUERY_LIMIT + _VALUE_UID = 0 + _VALUE_TIMESTAMP = 1 + _VALUE_TITLE = 2 ++# 3 reserved for version support ++_VALUE_FILESIZE = 4 + + _PREFIX_NONE = 'N' + _PREFIX_FULL_VALUE = 'F' +@@ -57,6 +59,7 @@ _QUERY_TERM_MAP = { + + _QUERY_VALUE_MAP = { + 'timestamp': {'number': _VALUE_TIMESTAMP, 'type': float}, ++ 'filesize': {'number': _VALUE_FILESIZE, 'type': int}, + } + + +@@ -66,6 +69,13 @@ class TermGenerator (xapian.TermGenerator): + document.add_value(_VALUE_TIMESTAMP, + xapian.sortable_serialise(float(properties['timestamp']))) + document.add_value(_VALUE_TITLE, properties.get('title', '').strip()) ++ if 'filesize' in properties: ++ try: ++ document.add_value(_VALUE_FILESIZE, ++ xapian.sortable_serialise(int(properties['filesize']))) ++ except ValueError: ++ logging.debug('Invalid value for filesize property: %s', ++ properties['filesize']) + + self.set_document(document) + +@@ -284,6 +294,10 @@ class IndexStore(object): + enquire.set_sort_by_value(_VALUE_TITLE, True) + elif order_by == '-title': + enquire.set_sort_by_value(_VALUE_TITLE, False) ++ elif order_by == '+filesize': ++ enquire.set_sort_by_value(_VALUE_FILESIZE, True) ++ elif order_by == '-filesize': ++ enquire.set_sort_by_value(_VALUE_FILESIZE, False) + else: + logging.warning('Unsupported property for sorting: %s', order_by) + +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0002-Add-migration-code-from-DS-v0-for-the-filesize-prope.patch b/rpms/sugar-datastore/sizelist-0002-Add-migration-code-from-DS-v0-for-the-filesize-prope.patch new file mode 100644 index 0000000..6261930 --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0002-Add-migration-code-from-DS-v0-for-the-filesize-prope.patch @@ -0,0 +1,48 @@ +From 82858a507553015b2fb1e8fa7adbb72882b3afb9 Mon Sep 17 00:00:00 2001 +Message-Id: <82858a507553015b2fb1e8fa7adbb72882b3afb9.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:35:47 -0300 +Subject: [PATCH v2 2/7] Add migration code from DS v0 for the filesize property +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/migration.py | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/src/carquinyol/migration.py b/src/carquinyol/migration.py +index 95ee391..228467c 100644 +--- a/src/carquinyol/migration.py ++++ b/src/carquinyol/migration.py +@@ -45,8 +45,8 @@ def migrate_from_0(): + + logging.debug('Migrating entry %r', uid) + try: +- _migrate_metadata(root_path, old_root_path, uid) + _migrate_file(root_path, old_root_path, uid) ++ _migrate_metadata(root_path, old_root_path, uid) + _migrate_preview(root_path, old_root_path, uid) + except Exception: + logging.exception('Error while migrating entry %r', uid) +@@ -73,6 +73,13 @@ def _migrate_metadata(root_path, old_root_path, uid): + metadata['timestamp'] = \ + time.mktime(time.strptime(metadata['mtime'], DATE_FORMAT)) + ++ file_path = layoutmanager.get_instance().get_data_path(uid) ++ if 'filesize' not in metadata: ++ if os.path.exists(file_path): ++ metadata['filesize'] = int(os.stat(file_path).st_size) ++ else: ++ metadata['filesize'] = 0 ++ + for key, value in metadata.items(): + try: + f = open(os.path.join(metadata_path, key), 'w') +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0003-Check-filesize-property-on-index-rebuild.patch b/rpms/sugar-datastore/sizelist-0003-Check-filesize-property-on-index-rebuild.patch new file mode 100644 index 0000000..2272a73 --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0003-Check-filesize-property-on-index-rebuild.patch @@ -0,0 +1,41 @@ +From 54a0d9aab34d5d6ce731a931e6adc165c6191221 Mon Sep 17 00:00:00 2001 +Message-Id: <54a0d9aab34d5d6ce731a931e6adc165c6191221.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:36:56 -0300 +Subject: [PATCH v2 3/7] Check filesize property on index rebuild. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This will ensure it gets set when upgrading from older datastores. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/datastore.py | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py +index 93ad419..357591f 100644 +--- a/src/carquinyol/datastore.py ++++ b/src/carquinyol/datastore.py +@@ -120,7 +120,15 @@ class DataStore(dbus.service.Object): + + if not self._index_store.contains(uid): + try: ++ update_metadata = False + props = self._metadata_store.retrieve(uid) ++ if 'filesize' not in props: ++ path = self._file_store.get_file_path(uid) ++ if os.path.exists(path): ++ props['filesize'] = os.stat(path).st_size ++ update_metadata = True ++ if update_metadata: ++ self._metadata_store.store(uid, props) + self._index_store.store(uid, props) + except Exception: + logging.exception('Error processing %r', uid) +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0004-Add-ctime-property-to-the-index-and-datastore.patch b/rpms/sugar-datastore/sizelist-0004-Add-ctime-property-to-the-index-and-datastore.patch new file mode 100644 index 0000000..c6f857c --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0004-Add-ctime-property-to-the-index-and-datastore.patch @@ -0,0 +1,83 @@ +From f04bad9371a81749ae7ce8f7a7b0694f0a4931dc Mon Sep 17 00:00:00 2001 +Message-Id: <f04bad9371a81749ae7ce8f7a7b0694f0a4931dc.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:40:10 -0300 +Subject: [PATCH v2 4/7] Add ctime property to the index and datastore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/datastore.py | 4 ++++ + src/carquinyol/indexstore.py | 8 ++++++++ + 2 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py +index 357591f..73e2d74 100644 +--- a/src/carquinyol/datastore.py ++++ b/src/carquinyol/datastore.py +@@ -42,6 +42,8 @@ DS_SERVICE = "org.laptop.sugar.DataStore" + DS_DBUS_INTERFACE = "org.laptop.sugar.DataStore" + DS_OBJECT_PATH = "/org/laptop/sugar/DataStore" + ++CTIME_FORMAT = '%Y-%m-%dT%H:%M:%S' ++ + logger = logging.getLogger(DS_LOG_CHANNEL) + + +@@ -164,6 +166,8 @@ class DataStore(dbus.service.Object): + + if not props.get('timestamp', ''): + props['timestamp'] = int(time.time()) ++ if not props.get('ctime', ''): ++ props['ctime'] = time.strftime(CTIME_FORMAT, time.localtime()) + + if os.path.exists(file_path): + stat = os.stat(file_path) +diff --git a/src/carquinyol/indexstore.py b/src/carquinyol/indexstore.py +index 1b32a01..29d9590 100644 +--- a/src/carquinyol/indexstore.py ++++ b/src/carquinyol/indexstore.py +@@ -30,6 +30,7 @@ _VALUE_TIMESTAMP = 1 + _VALUE_TITLE = 2 + # 3 reserved for version support + _VALUE_FILESIZE = 4 ++_VALUE_CTIME = 5 + + _PREFIX_NONE = 'N' + _PREFIX_FULL_VALUE = 'F' +@@ -60,6 +61,7 @@ _QUERY_TERM_MAP = { + _QUERY_VALUE_MAP = { + 'timestamp': {'number': _VALUE_TIMESTAMP, 'type': float}, + 'filesize': {'number': _VALUE_FILESIZE, 'type': int}, ++ 'ctime': {'number': _VALUE_CTIME, 'type': str}, + } + + +@@ -76,6 +78,8 @@ class TermGenerator (xapian.TermGenerator): + except ValueError: + logging.debug('Invalid value for filesize property: %s', + properties['filesize']) ++ if 'ctime' in properties: ++ document.add_value(_VALUE_CTIME, properties['ctime']) + + self.set_document(document) + +@@ -290,6 +294,10 @@ class IndexStore(object): + enquire.set_sort_by_value(_VALUE_TIMESTAMP, True) + elif order_by == '-timestamp': + enquire.set_sort_by_value(_VALUE_TIMESTAMP, False) ++ elif order_by == '+ctime': ++ enquire.set_sort_by_value(_VALUE_CTIME, True) ++ elif order_by == '-ctime': ++ enquire.set_sort_by_value(_VALUE_CTIME, False) + elif order_by == '+title': + enquire.set_sort_by_value(_VALUE_TITLE, True) + elif order_by == '-title': +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0005-Check-ctime-on-index-rebuild.patch b/rpms/sugar-datastore/sizelist-0005-Check-ctime-on-index-rebuild.patch new file mode 100644 index 0000000..731675f --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0005-Check-ctime-on-index-rebuild.patch @@ -0,0 +1,35 @@ +From 1b599d880e994ac9380c0447eeb0749c311a8cf5 Mon Sep 17 00:00:00 2001 +Message-Id: <1b599d880e994ac9380c0447eeb0749c311a8cf5.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:40:51 -0300 +Subject: [PATCH v2 5/7] Check ctime on index rebuild +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/datastore.py | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py +index 73e2d74..82d5700 100644 +--- a/src/carquinyol/datastore.py ++++ b/src/carquinyol/datastore.py +@@ -129,6 +129,10 @@ class DataStore(dbus.service.Object): + if os.path.exists(path): + props['filesize'] = os.stat(path).st_size + update_metadata = True ++ if 'ctime' not in props: ++ props['ctime'] = time.strftime(CTIME_FORMAT, ++ time.localtime(int(props['timestamp']))) ++ update_metadata = True + if update_metadata: + self._metadata_store.store(uid, props) + self._index_store.store(uid, props) +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0006-Implement-migration-from-DS-v0-for-ctime-property.patch b/rpms/sugar-datastore/sizelist-0006-Implement-migration-from-DS-v0-for-ctime-property.patch new file mode 100644 index 0000000..975bd04 --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0006-Implement-migration-from-DS-v0-for-ctime-property.patch @@ -0,0 +1,34 @@ +From fe96ed9a8c026f594fe4e8074af2ab8d95ccad99 Mon Sep 17 00:00:00 2001 +Message-Id: <fe96ed9a8c026f594fe4e8074af2ab8d95ccad99.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:41:13 -0300 +Subject: [PATCH v2 6/7] Implement migration from DS v0 for ctime property. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/migration.py | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/src/carquinyol/migration.py b/src/carquinyol/migration.py +index 228467c..80adbae 100644 +--- a/src/carquinyol/migration.py ++++ b/src/carquinyol/migration.py +@@ -73,6 +73,9 @@ def _migrate_metadata(root_path, old_root_path, uid): + metadata['timestamp'] = \ + time.mktime(time.strptime(metadata['mtime'], DATE_FORMAT)) + ++ if 'ctime' not in metadata: ++ metadata['ctime'] = int(os.stat(old_metadata_path).st_ctime) ++ + file_path = layoutmanager.get_instance().get_data_path(uid) + if 'filesize' not in metadata: + if os.path.exists(file_path): +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sizelist-0007-Increment-CURRENT_LAYOUT_VERSION-to-trigger-an-index.patch b/rpms/sugar-datastore/sizelist-0007-Increment-CURRENT_LAYOUT_VERSION-to-trigger-an-index.patch new file mode 100644 index 0000000..c35ce8e --- /dev/null +++ b/rpms/sugar-datastore/sizelist-0007-Increment-CURRENT_LAYOUT_VERSION-to-trigger-an-index.patch @@ -0,0 +1,33 @@ +From adf903b541e0bc31a3aec6199930451476400e3d Mon Sep 17 00:00:00 2001 +Message-Id: <adf903b541e0bc31a3aec6199930451476400e3d.1278225682.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278225681.git.andresambrois@gmail.com> +References: <cover.1278225681.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 03:41:36 -0300 +Subject: [PATCH v2 7/7] Increment CURRENT_LAYOUT_VERSION to trigger an index rebuild +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/carquinyol/layoutmanager.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/carquinyol/layoutmanager.py b/src/carquinyol/layoutmanager.py +index 8402b6d..aee5efb 100644 +--- a/src/carquinyol/layoutmanager.py ++++ b/src/carquinyol/layoutmanager.py +@@ -18,7 +18,7 @@ import os + import logging + + MAX_QUERY_LIMIT = 40960 +-CURRENT_LAYOUT_VERSION = 4 ++CURRENT_LAYOUT_VERSION = 5 + + class LayoutManager(object): + """Provide the logic about how entries are stored inside the datastore +-- +1.7.0.4 + diff --git a/rpms/sugar-datastore/sugar-datastore.spec b/rpms/sugar-datastore/sugar-datastore.spec new file mode 100644 index 0000000..ea57ff9 --- /dev/null +++ b/rpms/sugar-datastore/sugar-datastore.spec @@ -0,0 +1,342 @@ +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} + +Name: sugar-datastore +Version: 0.88.0 +Release: 3.2bernie%{?dist} +#Release: 2.%{alphatag}%{?dist} +Summary: Sugar Datastore + +Group: Development/Libraries +License: GPLv2+ +URL: http://sugarlabs.org/ +Source0: http://download.sugarlabs.org/sources/sucrose/glucose/%{name}/%{name}-%{version}.tar.bz2 + +# aa's "sort by filesize" patch series +#Patch0: sizelist-0000-cover-letter.patch +Patch1: sizelist-0001-Add-filesize-property-to-the-index.patch +Patch2: sizelist-0002-Add-migration-code-from-DS-v0-for-the-filesize-prope.patch +Patch3: sizelist-0003-Check-filesize-property-on-index-rebuild.patch +Patch4: sizelist-0004-Add-ctime-property-to-the-index-and-datastore.patch +Patch5: sizelist-0005-Check-ctime-on-index-rebuild.patch +Patch6: sizelist-0006-Implement-migration-from-DS-v0-for-ctime-property.patch +Patch7: sizelist-0007-Increment-CURRENT_LAYOUT_VERSION-to-trigger-an-index.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: python-devel + +Requires: gnome-python2-gnomevfs +Requires: xapian-bindings-python +Requires: python-cjson + +%description +sugar-datastore is a simple log like datastore able to connect with multiple +backends. The datastore supports connectionig and disconnecting from +backends on the fly to help the support the limit space/memory +characteristics of the OLPC system and the fact that network services +may become unavailable at times + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 + +%build +%configure +make %{?_smp_mflags} V=1 + +%install +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} INSTALL='install -p' + +#Remove libtool archives. +find %{buildroot} -name '*.la' -exec rm -f {} ';' + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING NEWS README +%{python_sitelib}/* +%{_bindir}/* +%{_datadir}/dbus-1/services/*.service + +%changelog +* Mon Mar 29 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-1 +- New upstream stable 0.88.0 release + +* Wed Mar 10 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.4-1 +- New upstream release + +* Tue Mar 09 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.3-1 +- #1787 rebuild index on migration + +* Sat Jan 9 2010 Peter Robinson <pbrobinson@gmail.com> - 0.87.2-2 +- Updated to the new python sysarch spec file reqs + +* Wed Dec 23 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.2-1 +- New upstream release + +* Fri Dec 18 2009 Peter Robinson <pbrobinson@gmail.com> 0.87.1-2 +- Remove libtool archives + +* Tue Dec 01 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.1-1 +- New upstream release + +* Sun Sep 27 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.0-1 +- New upstream release + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-3 +- Rename files in docs accordingly + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-2 +- Upload sources + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-1 +- New upstream release + +* Fri Sep 11 2009 Simon Schampijer <simon@schampijer.de> - 0.85.3-1 +- Fix memory leaks after many get_properties() ds calls #1240 + +* Wed Aug 26 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.2-1 +- Update to new upstream release + +* Fri Aug 07 2009 Simon Schampijer <simon@schampijer.de> - 0.85.1-1 +- PEP8 compliance fixes #1108 +- Rebuild index when an inconsistency between the index and the metadata is detected +- Implement sorting by timestamp and title +- Return a consistent entry count when some entries are missing (dsd) +- Don't include in find() results entries without metadata +- Remove title option (copy-from-journal) #896 +- Only one dot for the filename if we specify an extension (copy-from-journal) + +* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.84.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Mar 03 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-1 +- Rebuild for 0.84 + +* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.83.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 04 2009 Simon Schampijer <simon@schampijer.de> - 0.83.3-1 +- Only try to remove the checksum dir if it already exists +- Rename the installed package from olpc.datastore to carquinyol + +* Fri Jan 30 2009 Simon Schampijer <simon@schampijer.de> - 0.83.2-2.20090130gite999c1c1e1 +- Only try to remove the checksum dir if it already exists + +* Tue Jan 20 2009 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-1 +- #181 Replace deprecated os.popen by subprocess +- #140 Crash when joining a shared Read + +* Sun Jan 04 2009 Simon Schampijer <simon@laptop.org> - 0.83.1-1 +- contains a bunch of stability and robustness improvements + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.83.0-2 +- Rebuild for Python 2.6 + +* Tue Nov 4 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.1-1 +- Update to 0.83.1 + +* Sat Sep 6 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.8.3-2 +- fix license tag + +* Tue Jul 08 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.8.3-1 +- Update to 0.8.3 + +* Fri Jun 13 2008 Simon Schampijer <simon@laptop.org> - 0.8.1-1 +- Update to 0.8.1 + +* Tue Dec 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.6.0-1 +- Fix #5218 #5254 + +* Wed Dec 5 2007 Marco Pesenti Gritti <marco@localhost.localdomain> - 0.5-1 +- Update to 0.5 + +* Tue Nov 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.3-1 +- Update to 0.3 + +* Wed Nov 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.40.20071114gitea0764a9e9 +- #4662 Add the 'source' property to the model. (marco) +- #4558 Correctly encode characters in URI. (tomeu) + +* Wed Nov 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.39.20071114gita42f40d575 +- #4784 Use valid FAT names when saving entries to usb sticks. (tomeu) + +* Mon Nov 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.38.20071112git6d3d607ec7 +- #4783 Try harder to guess the file extension. (tomeu) +- #4796 Ignore failure to chmod files in usb sticks. (tomeu) + +* Fri Nov 09 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.37.20071109git62a5c30d81 +- Copy files to the profile dir when asked by an out-of-container process. (tomeu) + +* Wed Nov 07 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.36.20071107git3b70954e71 +- #3801 Check out files in the activity instance dir with the correct + permissions. (tomeu) +- #4704 Fix copy of entries with file to removable devices. (tomeu) +- #4714 Fix copy of entries without file to removable devices. (tomeu) + +* Tue Nov 06 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.35.20071106git74cbc13878 +- #4654 Hard link files on check out instead of copying if possible. (tomeu) + +* Fri Nov 02 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.34.20071102git2b5596554c +- #4234 Fix copying a download to an usb stick. (marco) + +* Tue Oct 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.33.20071009gitcb0acdf653 +- New snapshot + +* Sun Oct 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.32.20071007gitb603f340b2 +- New snapshot + +* Sat Oct 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.31.20071005git23becaa683 +- New snapshot + +* Fri Oct 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.30.20071005git64abebe398 +- New snapshot + +* Fri Oct 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.29.20071005git87204de5b9 +- New snapshot + +* Thu Oct 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.28.20071004git902883ab7c +- New snapshot + +* Thu Oct 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.27.20071004git23f5b3439e +- New snapshot + +* Thu Sep 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.26.20070920gitdce9c18d56 +- New snapshot + +* Wed Sep 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.25.20070919git11013dc3ca +- New snapshot + +* Tue Sep 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.24.20070918git48ab782a01 +- New snapshot + +* Fri Sep 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.23.20070914gitea13f75d6a +- New snapshot + +* Wed Sep 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.22.20070912git7655f4d99a +- New snapshot + +* Tue Sep 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.21.20070911gitb0b4c4115a +- New snapshot + +* Mon Sep 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.20.20070910git617bf5d005 +- New snapshot + +* Sun Sep 09 2007 Dan Williams <dcbw@redhat.com> - 0.2.2-0.19.20070909git0a7e80f01a +- New snapshot (async writes and ownership transfer on update/create) + +* Wed Aug 01 2007 Dan Williams <dcbw@redhat.com> - 0.2.2-0.18.20070801gita111996299 +- New snapshot (fix #2607) + +* Tue Jul 31 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.18.20070731git356b35a278 +- New snapshot + +* Sun Jul 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.17.20070729git4a4283978f +- New snapshot + +* Fri Jul 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.16.20070727gitd0bcbf67d1 +- New snapshot + +* Wed Jul 25 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.15.20070725git30ce1b1378 +- New snapshot + +* Mon Jul 23 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.14.20070723git00570bc517 +- New snapshot + +* Sat Jul 21 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.13.20070720git033d224d3b +- New snapshot + +* Fri Jul 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.12.20070720gite30379af95 +- New snapshot + +* Thu Jul 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.11.20070719git9aabdfb24b +- New snapshot + +* Wed Jul 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.2.20070718git535d9835e2 +- New snapshot + +* Tue Jul 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.10.20070716git2978ff86bd +- New snapshot + +* Tue Jul 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.9.20070716git643ac4dad8 +- New snapshot + +* Mon Jul 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.8.20070715git6666e28e60 +- New snapshot + +* Fri Jul 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.7.20070713git33bf60bb4f +- Remove dependencies on sqlalchemy and pyxapian +- New snapshot + +* Fri Jul 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.6.20070705git18b7951026 +- Full indexing refactor +- Support or in the queries + +* Tue Jul 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.5.20070703gita248b5cb79 +- Support for binary properties +- Indexer fixes +- External devices fixes + +* Thu Jun 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.4.20070628gitd23ee8a383 +- New snapshot + +* Wed Jun 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.3.20070627gitf5a5d0ff66 +- New snapshot + +* Tue Jun 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.2.20070626git30c1a1abb8 +- New snapshot + +* Wed Jun 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.2-0.1.20070620git49f3211d34 +- Update to 0.2.2 +- Fix rpmlint complaints + +* Mon Jun 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.1-3.git8d46929bf7.1 +- New snapshot + +* Wed May 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-2.gita7ec17405d +- Fix locks + +* Tue May 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.9.20070529git +- New snapshot + +* Tue May 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.9.20070516.2git +- Remove setuptools again + +* Tue May 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.9.20070516git +- More performance work + +* Tue May 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.7.20070515git +- Performance fix + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.7.20070514git.4 +- Disable indexer, fix empty files + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.7.20070514git.3 +- Fixes + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.7.20070514git.2 +- Fix startup + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.7.20070514git +- New snapshot, use auto* + +* Thu May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.6.20070511git +- Fix service path + +* Thu May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.5.20070511git +- Update snapshot + +* Thu May 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.4.20070510git +- Require pyxapian + +* Thu May 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.2.0-1.3.20070510git +- Initial build diff --git a/rpms/sugar-toolkit/change-keep-string-to-keep-a-copy.patch b/rpms/sugar-toolkit/change-keep-string-to-keep-a-copy.patch new file mode 100644 index 0000000..5afc4d3 --- /dev/null +++ b/rpms/sugar-toolkit/change-keep-string-to-keep-a-copy.patch @@ -0,0 +1,26 @@ +>From 8a2da36117aa8b5e38fb0ead9664024d47ab4e96 Mon Sep 17 00:00:00 2001 +From: Jorge Saldivar <jsaldivar@paraguayeduca.org> +Date: Wed, 21 Apr 2010 17:26:50 -0400 +Subject: [PATCH] Change keep string to keep a copy + +--- + src/sugar/activity/widgets.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/sugar/activity/widgets.py b/src/sugar/activity/widgets.py +index 2867666..5ce82bd 100644 +--- a/src/sugar/activity/widgets.py ++++ b/src/sugar/activity/widgets.py +@@ -163,7 +163,7 @@ class KeepButton(ToolButton): + + def __init__(self, activity, **kwargs): + ToolButton.__init__(self, **kwargs) +- self.props.tooltip = _('Keep') ++ self.props.tooltip = _('Keep a copy') + self.props.accelerator = '<Ctrl>S' + + client = gconf.client_get_default() +-- +1.6.3.3 + + diff --git a/rpms/sugar-toolkit/fix-two-trivial-shell-log-warnings.patch b/rpms/sugar-toolkit/fix-two-trivial-shell-log-warnings.patch new file mode 100644 index 0000000..bb0ce34 --- /dev/null +++ b/rpms/sugar-toolkit/fix-two-trivial-shell-log-warnings.patch @@ -0,0 +1,93 @@ +From sugar-devel-bounces@lists.sugarlabs.org Mon May 10 07:07:31 2010 +Return-Path: <sugar-devel-bounces@lists.sugarlabs.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from solarsail.media.mit.edu (solarsail.media.mit.edu + [18.85.2.155]) by trinity.develer.com (Postfix) with ESMTPS id 750921D606F + for <bernie@codewiz.org>; Mon, 10 May 2010 07:07:31 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: from solarsail.media.mit.edu (localhost [127.0.0.1]) by + solarsail.media.mit.edu (Postfix) with ESMTP id 7F8508109; Mon, 10 May 2010 + 01:07:29 -0400 (EDT) +Received: from enchanter.real-time.com (enchanter.real-time.com + [63.170.91.11]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 + bits)) (No client certificate requested) by solarsail.media.mit.edu + (Postfix) with ESMTPS id 0BE748108 for <sugar-devel@lists.sugarlabs.org>; + Mon, 10 May 2010 01:07:25 -0400 (EDT) +Received: from dors.lan (quozl2.real-time.com [65.165.43.5]) by + enchanter.real-time.com (8.12.10/8.12.10) with ESMTP id o4A57GG0010693 + (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Mon, 10 May + 2010 00:07:20 -0500 +Received: from james by dors.lan with local (Exim 4.71) (envelope-from + <quozl.2005@bigpond.com>) id 1OBLCx-0000Yy-GM; Mon, 10 May 2010 15:07:11 + +1000 +From: James Cameron <quozl@laptop.org> +To: Sayamindu Dasgupta <sayamindu@gmail.com>, Daniel Drake <dsd@laptop.org> +Date: Mon, 10 May 2010 15:06:14 +1000 +Message-Id: <1273467974-2104-1-git-send-email-quozl@laptop.org> +X-Mailer: git-send-email 1.7.1 +Cc: sugar-devel@lists.sugarlabs.org, James Cameron <quozl@laptop.org> +Subject: [Sugar-devel] [PATCH] fix two trivial shell.log warnings +X-BeenThere: sugar-devel@lists.sugarlabs.org +X-Mailman-Version: 2.1.9 +Precedence: list +List-Id: "Discussion of Sugar development and other technical matters." + <sugar-devel.lists.sugarlabs.org> +List-Unsubscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=unsubscribe> +List-Archive: <http://lists.sugarlabs.org/archive/sugar-devel> +List-Post: <mailto:sugar-devel@lists.sugarlabs.org> +List-Help: <mailto:sugar-devel-request@lists.sugarlabs.org?subject=help> +List-Subscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: sugar-devel-bounces@lists.sugarlabs.org +Errors-To: sugar-devel-bounces@lists.sugarlabs.org +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,UNPARSEABLE_RELAY + autolearn=ham version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +"DeprecationWarning: integer argument expected, got float" was happening +in two places. An issue that has been with us for at least 12 months, +since it was also seen in logs attached to SL #870. +--- + src/sugar/graphics/icon.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py +index 57c53f5..8e3861c 100644 +--- a/src/sugar/graphics/icon.py ++++ b/src/sugar/graphics/icon.py +@@ -133,7 +133,7 @@ class _IconBuffer(object): + if self.width != None: + size = self.width + +- info = theme.lookup_icon(self.icon_name, size, 0) ++ info = theme.lookup_icon(self.icon_name, int(size), 0) + if info: + attach_x, attach_y = self._get_attach_points(info, size) + +@@ -178,8 +178,8 @@ class _IconBuffer(object): + + def _get_size(self, icon_width, icon_height, padding): + if self.width is not None and self.height is not None: +- width = self.width + padding +- height = self.height + padding ++ width = int(self.width) + padding ++ height = int(self.height) + padding + else: + width = icon_width + padding + height = icon_height + padding +-- +1.7.1 + +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar-toolkit/kill-the-delayed-menus-for-good.patch b/rpms/sugar-toolkit/kill-the-delayed-menus-for-good.patch new file mode 100644 index 0000000..43da274 --- /dev/null +++ b/rpms/sugar-toolkit/kill-the-delayed-menus-for-good.patch @@ -0,0 +1,114 @@ +From sugar-devel-bounces@lists.sugarlabs.org Tue Oct 13 02:36:45 2009 +Return-Path: <sugar-devel-bounces@lists.sugarlabs.org> +Delivered-To: bernie@codewiz.org +Received: (qmail 5091 invoked from network); 13 Oct 2009 02:36:45 -0000 +Received: by simscan 1.4.0 ppid: 5072, pid: 5073, t: 2.5265s scanners: + clamav: 0.93.3/m:48/d:8412 spam: 3.2.5 +X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on + trinity.develer.com +X-Spam-Level: +X-Spam-Status: No, score=-6.6 required=3.0 tests=BAYES_00,RCVD_IN_DNSWL_MED + autolearn=ham version=3.2.5 +Received: from solarsail.media.mit.edu (18.85.2.155) by trinity.develer.com + with ESMTP; 13 Oct 2009 02:36:43 -0000 +Received: from solarsail.media.mit.edu (localhost [127.0.0.1]) by + solarsail.media.mit.edu (Postfix) with ESMTP id 77346805B; Mon, 12 Oct 2009 + 22:36:41 -0400 (EDT) +Received: from trinity.develer.com (trinity.develer.com [83.149.158.210]) + by solarsail.media.mit.edu (Postfix) with ESMTP id 72B6F8042 for + <sugar-devel@lists.sugarlabs.org>; Mon, 12 Oct 2009 22:36:18 -0400 (EDT) +Received: (qmail 4993 invoked from network); 13 Oct 2009 02:36:16 -0000 +Received: from 75-147-59-54-newengland.hfc.comcastbusiness.net (HELO + ?172.16.1.6?) (bernie@75.147.59.54) by trinity.develer.com with ESMTPA; 13 + Oct 2009 02:36:16 -0000 +From: Bernie Innocenti <bernie@codewiz.org> +To: Sugar Devel <sugar-devel@lists.sugarlabs.org> +Organization: Sugar Labs - http://www.sugarlabs.org/ +Date: Mon, 12 Oct 2009 22:36:12 -0400 +Message-Id: <1255401372.1477.549.camel@giskard> +Mime-Version: 1.0 +X-Mailer: Evolution 2.28.0 (2.28.0-2.fc12) +Subject: [Sugar-devel] RFC: Kill the delayed menus for good +X-BeenThere: sugar-devel@lists.sugarlabs.org +X-Mailman-Version: 2.1.9 +Precedence: list +List-Id: "Discussion of Sugar development and other technical matters." + <sugar-devel.lists.sugarlabs.org> +List-Unsubscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=unsubscribe> +List-Archive: <http://lists.sugarlabs.org/archive/sugar-devel> +List-Post: <mailto:sugar-devel@lists.sugarlabs.org> +List-Help: <mailto:sugar-devel-request@lists.sugarlabs.org?subject=help> +List-Subscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=subscribe> +Content-Type: text/plain; charset="us-ascii" +Sender: sugar-devel-bounces@lists.sugarlabs.org +Errors-To: sugar-devel-bounces@lists.sugarlabs.org +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +Hello, + +Michael just passed by the Acetarium and, since the dinner was late, we +found the time to test and review his latest prototype^W patch. + +I'm loving how the menus suddenly are now snappy and responsive. Please, +test it yourself and report back. If we like this change, I think we +should go on and also kill the code that this patch makes redundant. +(please, let's not add another configurable knob!) + +>From 83ef08969ed7bee08f90c12bfa1eedcb7fb0500c Mon Sep 17 00:00:00 2001 +From: Michael Stone <michael@laptop.org> +Date: Mon, 14 Sep 2009 22:33:12 -0400 +Subject: Make various palette animations happen more quickly. + +--- + src/sugar/graphics/palette.py | 2 +- + src/sugar/graphics/palettewindow.py | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/sugar/graphics/palette.py +b/src/sugar/graphics/palette.py +index bb2b605..466edef 100644 +--- a/src/sugar/graphics/palette.py ++++ b/src/sugar/graphics/palette.py +@@ -103,7 +103,7 @@ class Palette(PaletteWindow): + + self._menu_content_separator = gtk.HSeparator() + +- self._secondary_anim = animator.Animator(2.0, 10) ++ self._secondary_anim = animator.Animator(0.0, 10) + self._secondary_anim.add(_SecondaryAnimation(self)) + + # we init after initializing all of our containers +diff --git a/src/sugar/graphics/palettewindow.py +b/src/sugar/graphics/palettewindow.py +index 3049f55..4bc07e2 100644 +--- a/src/sugar/graphics/palettewindow.py ++++ b/src/sugar/graphics/palettewindow.py +@@ -148,10 +148,10 @@ class PaletteWindow(gtk.Window): + self._up = False + self._old_alloc = None + +- self._popup_anim = animator.Animator(.5, 10) ++ self._popup_anim = animator.Animator(0.0, 10) + self._popup_anim.add(_PopupAnimation(self)) + +- self._popdown_anim = animator.Animator(0.6, 10) ++ self._popdown_anim = animator.Animator(0.0, 10) + self._popdown_anim.add(_PopdownAnimation(self)) + + gobject.GObject.__init__(self, **kwargs) +-- +1.5.6.5 + + +-- + // Bernie Innocenti - http://codewiz.org/ + \X/ Sugar Labs - http://sugarlabs.org/ + +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar-toolkit/remove-incomplete-MANIFEST-support.patch b/rpms/sugar-toolkit/remove-incomplete-MANIFEST-support.patch new file mode 100644 index 0000000..c36224c --- /dev/null +++ b/rpms/sugar-toolkit/remove-incomplete-MANIFEST-support.patch @@ -0,0 +1,255 @@ +From 07b6cc041fe9a0ecd798ec67e8d27728d33001e3 Mon Sep 17 00:00:00 2001 +From: Bernie Innocenti <bernie@codewiz.org> +Date: Thu, 20 May 2010 02:19:14 -0400 +Subject: [PATCH] Remove incomplete MANIFEST support +Organization: Sugar Labs Foundation +X-Subversion: sucks + +This incomplete feature contributes to confuse new activity authors and +slightly complicates our bundle installation logic. + +The day someone finds something useful to do with the MANIFEST +specification, we can revert this patch in no time. + +Signed-off-by: Bernie Innocenti <bernie@codewiz.org> +Tested-by: Bernie Innocenti <bernie@codewiz.org> +--- + src/sugar/activity/bundlebuilder.py | 48 ++--------------- + src/sugar/bundle/activitybundle.py | 99 +---------------------------------- + src/sugar/bundle/bundle.py | 9 --- + 3 files changed, 6 insertions(+), 150 deletions(-) + +diff --git a/src/sugar/activity/bundlebuilder.py b/src/sugar/activity/bundlebuilder.py +index 868ca3d..630a3e4 100644 +--- a/src/sugar/activity/bundlebuilder.py ++++ b/src/sugar/activity/bundlebuilder.py +@@ -141,37 +141,9 @@ class Builder(object): + f.close() + + def get_files(self): +- files = self.config.bundle.get_files() +- +- if not files: +- logging.error('No files found, fixing the MANIFEST.') +- self.fix_manifest() +- files = self.config.bundle.get_files() +- +- return files +- +- def check_manifest(self): +- missing_files = [] +- + allfiles = list_files(self.config.source_dir, + IGNORE_DIRS, IGNORE_FILES) +- for path in allfiles: +- if path not in self.config.bundle.manifest: +- missing_files.append(path) +- +- return missing_files +- +- def fix_manifest(self): +- self.build() +- +- manifest = self.config.bundle.manifest +- +- for path in self.check_manifest(): +- manifest.append(path) +- +- f = open(os.path.join(self.config.source_dir, "MANIFEST"), "wb") +- for line in manifest: +- f.write(line + "\n") ++ return allfiles + + + class Packager(object): +@@ -197,13 +169,6 @@ class XOPackager(Packager): + bundle_zip = zipfile.ZipFile(self.package_path, 'w', + zipfile.ZIP_DEFLATED) + +- missing_files = self.builder.check_manifest() +- if missing_files: +- logging.warn('These files are not included in the manifest ' \ +- 'and will not be present in the bundle:\n\n' + +- '\n'.join(missing_files) + +- '\n\nUse fix_manifest if you want to add them.') +- + for f in self.builder.get_files(): + bundle_zip.write(os.path.join(self.config.source_dir, f), + os.path.join(self.config.bundle_root_dir, f)) +@@ -307,14 +272,11 @@ def cmd_dist_xo(config, args): + + + def cmd_fix_manifest(config, args): +- '''Add missing files to the manifest''' ++ '''Add missing files to the manifest (OBSOLETE)''' + +- if args: +- print 'Usage: %prog fix_manifest' +- return +- +- builder = Builder(config) +- builder.fix_manifest() ++ print "WARNING: the fix_manifest command is obsolete" ++ print "the MANIFEST file is no longer used in bundles, please remove it" ++ pass + + + def cmd_dist_source(config, args): +--- sugar-toolkit-0.88.1/src/sugar/bundle/activitybundle.py.orig 2010-06-03 02:56:29.000000000 -0400 ++++ sugar-toolkit-0.88.1/src/sugar/bundle/activitybundle.py 2010-06-06 10:36:58.000000000 -0400 +@@ -59,7 +59,6 @@ class ActivityBundle(Bundle): + self._tags = None + self._activity_version = 0 + self._installation_time = os.stat(path).st_mtime +- self._manifest = None + + info_file = self.get_file('activity/activity.info') + if info_file is None: +@@ -73,74 +72,6 @@ class ActivityBundle(Bundle): + if self._local_name == None: + self._local_name = self._name + +- def _get_manifest(self): +- if self._manifest is None: +- self._manifest = self._read_manifest() +- return self._manifest +- +- manifest = property(_get_manifest, None, None, +- "NOTICE: this property is potentially quite slow, so better make sure " +- "that it's not called at performance-critical points like shell or " +- "activity startup.") +- +- def _raw_manifest(self): +- f = self.get_file("MANIFEST") +- if not f: +- logging.warning("Activity directory lacks a MANIFEST file.") +- return [] +- +- ret = [line.strip() for line in f.readlines()] +- f.close() +- return ret +- +- def _read_manifest(self): +- """return a list with the lines in MANIFEST, with invalid lines +- replaced by empty lines. +- +- Since absolute order carries information on file history, it should +- be preserved. For instance, when renaming a file, you should leave +- the new name on the same line as the old one. +- """ +- logging.debug('STARTUP: Reading manifest') +- lines = self._raw_manifest() +- +- # Remove trailing newlines, they do not help keep absolute position. +- while lines and lines[-1] == "": +- lines = lines[:-1] +- +- for num, line in enumerate(lines): +- if not line: +- continue +- +- # Remove duplicates +- if line in lines[0:num]: +- lines[num] = "" +- logging.warning('Bundle %s: duplicate entry in MANIFEST: %s', +- self._name, line) +- continue +- +- # Remove MANIFEST +- if line == "MANIFEST": +- lines[num] = "" +- logging.warning('Bundle %s: MANIFEST includes itself: %s', +- self._name, line) +- +- # Remove invalid files +- if not self.is_file(line): +- lines[num] = "" +- logging.warning('Bundle %s: invalid entry in MANIFEST: %s', +- self._name, line) +- +- return lines +- +- def get_files(self, manifest = None): +- files = [line for line in (manifest or self.manifest) if line] +- +- if self.is_file('MANIFEST'): +- files.append('MANIFEST') +- +- return files +- + def _parse_info(self, info_file): + cp = ConfigParser() + cp.readfp(info_file) +@@ -300,41 +231,13 @@ class ActivityBundle(Bundle): + """Get whether there should be a visible launcher for the activity""" + return self._show_launcher + +- def install(self, install_dir=None, strict_manifest=False): ++ def install(self, install_dir=None): + if install_dir is None: + install_dir = env.get_user_activities_path() + + self._unzip(install_dir) + + install_path = os.path.join(install_dir, self._zip_root_dir) +- +- # List installed files +- manifestfiles = self.get_files(self._raw_manifest()) +- paths = [] +- for root, dirs_, files in os.walk(install_path): +- rel_path = root[len(install_path) + 1:] +- for f in files: +- paths.append(os.path.join(rel_path, f)) +- +- # Check the list against the MANIFEST +- for path in paths: +- if path in manifestfiles: +- manifestfiles.remove(path) +- elif path != "MANIFEST": +- logging.warning('Bundle %s: %s not in MANIFEST', self._name, +- path) +- if strict_manifest: +- os.remove(os.path.join(install_path, path)) +- +- # Is anything in MANIFEST left over after accounting for all files? +- if manifestfiles: +- err = ("Bundle %s: files in MANIFEST not included: %s"% +- (self._name, str(manifestfiles))) +- if strict_manifest: +- raise MalformedBundleException(err) +- else: +- logging.warning(err) +- + self.install_mime_type(install_path) + + return install_path +diff --git a/src/sugar/bundle/bundle.py b/src/sugar/bundle/bundle.py +index a04c873..adba480 100644 +--- a/src/sugar/bundle/bundle.py ++++ b/src/sugar/bundle/bundle.py +@@ -80,14 +80,6 @@ class Bundle(object): + % (self._path, ziperror)) + self._check_zip_bundle() + +- # manifest = self._get_file(self._infodir + '/contents') +- # if manifest is None: +- # raise MalformedBundleException('No manifest file') +- +- # signature = self._get_file(self._infodir + '/contents.sig') +- # if signature is None: +- # raise MalformedBundleException('No signature file') +- + def __del__(self): + if self._zip_file is not None: + self._zip_file.close() +@@ -176,7 +168,6 @@ class Bundle(object): + # correctly by hand, but handling all the oddities of + # Windows/UNIX mappings, extension attributes, deprecated + # features, etc makes it impractical. +- # FIXME: use manifest + if os.spawnlp(os.P_WAIT, 'unzip', 'unzip', '-o', self._path, + '-x', 'mimetype', '-d', install_dir): + # clean up install dir after failure +-- +1.7.0.1 + diff --git a/rpms/sugar-toolkit/set-default-accelerators-for-Copy-and-Paste-buttons.patch b/rpms/sugar-toolkit/set-default-accelerators-for-Copy-and-Paste-buttons.patch new file mode 100644 index 0000000..2bf3d9d --- /dev/null +++ b/rpms/sugar-toolkit/set-default-accelerators-for-Copy-and-Paste-buttons.patch @@ -0,0 +1,34 @@ +From 1bd42e5922736b729941ec5fb1dc4a7ede4f169b Mon Sep 17 00:00:00 2001 +From: Bernie Innocenti <bernie@codewiz.org> +Date: Sat, 19 Jun 2010 08:23:04 -0400 +Subject: [PATCH] Set default accelerators for Copy and Paste buttons +Organization: Sugar Labs Foundation +X-Subversion: sucks + +--- + src/sugar/activity/widgets.py | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/sugar/activity/widgets.py b/src/sugar/activity/widgets.py +index 83b689c..f89ac1f 100644 +--- a/src/sugar/activity/widgets.py ++++ b/src/sugar/activity/widgets.py +@@ -108,6 +108,7 @@ class CopyButton(ToolButton): + def __init__(self, **kwargs): + ToolButton.__init__(self, 'edit-copy', **kwargs) + self.props.tooltip = _('Copy') ++ self.props.accelerator = '<Ctrl>C' + + + class PasteButton(ToolButton): +@@ -115,6 +116,7 @@ class PasteButton(ToolButton): + def __init__(self, **kwargs): + ToolButton.__init__(self, 'edit-paste', **kwargs) + self.props.tooltip = _('Paste') ++ self.props.accelerator = '<Ctrl>V' + + + class ShareButton(RadioMenuButton): +-- +1.7.1 + diff --git a/rpms/sugar-toolkit/sl1842-notify-red-alert.patch b/rpms/sugar-toolkit/sl1842-notify-red-alert.patch new file mode 100644 index 0000000..51e66e6 --- /dev/null +++ b/rpms/sugar-toolkit/sl1842-notify-red-alert.patch @@ -0,0 +1,74 @@ +From: anishmangal2002@gmail.com +To: sugar-devel@lists.sugarlabs.org +Cc: bernie@codewiz.org, anishmangal2002 <anishmangal2002@gmail.com> +Subject: [PATCH] Add NotifyRedAlert inherited from NotifyAlert +Date: Mon, 14 Jun 2010 02:51:23 +0530 + +Adds the NotifyRedAlert class which is an alert inherited from + NotifyAlert. When the alert message is displayed, it glows the +alert bar Red before slowly fading out to black, thus resulting +in a more visible notification. + +Signed-off-by: anishmangal2002 <anishmangal2002@gmail.com> +--- + src/sugar/graphics/alert.py | 46 +++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 46 insertions(+), 0 deletions(-) + +diff --git a/src/sugar/graphics/alert.py b/src/sugar/graphics/alert.py +index 4441909..b4dfee1 100644 +--- a/src/sugar/graphics/alert.py ++++ b/src/sugar/graphics/alert.py +@@ -432,3 +432,49 @@ class NotifyAlert(Alert): + self._response(gtk.RESPONSE_OK) + return False + return True ++ ++class NotifyRedAlert(NotifyAlert): ++ """ ++ Timeout alert with only an "OK" button and a glowing Red border- just for notifications ++ ++ Examples ++ -------- ++ ++ .. code-block:: python ++ from sugar.graphics.alert import NotifyRedAlert ++ ... ++ #### Method: _alert_notify, create a NotifyRed alert (with only an 'OK' ++ button) ++ # and add it to the UI. ++ def _alert_notify(self): ++ #Notice that for a NotifyRedAlert, you pass the number of seconds in ++ #which to notify. By default, this is 5. ++ alert = NotifyRedAlert(10) ++ alert.props.title=_('Title of Alert Goes Here') ++ alert.props.msg = _('Text message of notify alert goes here') ++ alert.connect('response', self._alert_response_cb) ++ self.add_alert(alert) ++ ++ """ ++ ++ def __init__(self, timeout=5, **kwargs): ++ NotifyAlert.__init__(self, timeout, **kwargs) ++ self.saturation = 255 ++ ++ gobject.timeout_add(20, self.__modify_color_timeout) ++ ++ def __modify_color_timeout(self): ++ if self.saturation: ++ self.saturation -= 1 ++ ++ # Form the hex color representation ++ if self.saturation <= 15: ++ color = '#0%s0000' % hex(self.saturation)[2:] ++ else: ++ color = '#%s0000' % hex(self.saturation)[2:] ++ else: ++ return False ++ ++ self.modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color(color)) ++ self.show() ++ return True +-- +1.7.0.4 + + diff --git a/rpms/sugar-toolkit/sl1876.patch b/rpms/sugar-toolkit/sl1876.patch new file mode 100644 index 0000000..ac80ce6 --- /dev/null +++ b/rpms/sugar-toolkit/sl1876.patch @@ -0,0 +1,16 @@ +--- sugar-toolkit-0.88.1/src/sugar/bundle/bundle.py.orig 2010-06-03 02:55:42.000000000 -0400 ++++ sugar-toolkit-0.88.1/src/sugar/bundle/bundle.py 2010-06-06 10:09:00.000000000 -0400 +@@ -71,7 +71,12 @@ class Bundle(object): + self._zip_file = None + + if not os.path.isdir(self._path): +- self._zip_file = zipfile.ZipFile(self._path) ++ try: ++ self._zip_file = zipfile.ZipFile(self._path) ++ except (zipfile.error, LargeZipFile), ziperror: ++ raise MalformedBundleException( ++ "Error accessing zip file %s: %s" ++ % (self._path, ziperror)) + self._check_zip_bundle() + + # manifest = self._get_file(self._infodir + '/contents') diff --git a/rpms/sugar-toolkit/sl1948-Race-condition-with-name-widget-in-the-activ.patch b/rpms/sugar-toolkit/sl1948-Race-condition-with-name-widget-in-the-activ.patch new file mode 100644 index 0000000..e402617 --- /dev/null +++ b/rpms/sugar-toolkit/sl1948-Race-condition-with-name-widget-in-the-activ.patch @@ -0,0 +1,68 @@ +From 9b6ea6ed9d97b617b4c9633068369c074b3173b8 Mon Sep 17 00:00:00 2001 +From: Bernie Innocenti <bernie@codewiz.org> +Date: Tue, 18 May 2010 18:30:34 -0400 +Subject: [sugar-toolkit] sl#1948: Race condition with name widget in the activity toolbar (0.88) +Organization: Sugar Labs Foundation +X-Subversion: sucks + +The fix consists in updating the datastore metadata on "focus-out-event". +Previously, we were using the "change" event along with a 1s timeout, which +was likely to trigger while the user was still typing into the text +entry widget. + +Signed-off-by: Bernie Innocenti <bernie@codewiz.org> +--- + src/sugar/activity/widgets.py | 23 ++++++++--------------- + 1 files changed, 8 insertions(+), 15 deletions(-) + +--- sugar-toolkit-0.88.1/src/sugar/activity/widgets.py.orig 2010-06-02 10:57:58.000000000 -0400 ++++ sugar-toolkit-0.88.1/src/sugar/activity/widgets.py 2010-06-06 10:17:43.000000000 -0400 +@@ -183,12 +183,11 @@ class TitleEntry(gtk.ToolItem): + def __init__(self, activity, **kwargs): + gtk.ToolItem.__init__(self) + self.set_expand(False) +- self._update_title_sid = None + + self.entry = gtk.Entry(**kwargs) + self.entry.set_size_request(int(gtk.gdk.screen_width() / 3), -1) + self.entry.set_text(activity.metadata['title']) +- self.entry.connect('changed', self.__title_changed_cb, activity) ++ self.entry.connect('focus-out-event', self.__title_changed_cb, activity) + self.entry.show() + self.add(self.entry) + +@@ -202,23 +201,16 @@ class TitleEntry(gtk.ToolItem): + self.entry.set_text(jobject['title']) + + def __title_changed_cb(self, entry, activity): +- if self._update_title_sid is not None: +- gobject.source_remove(self._update_title_sid) +- self._update_title_sid = gobject.timeout_add_seconds( +- 1, self.__update_title_cb, activity) +- +- def __update_title_cb(self, activity): + title = self.entry.get_text() ++ if title != self._activity.metadata['title']: ++ activity.metadata['title'] = title ++ activity.metadata['title_set_by_user'] = '1' ++ activity.save() ++ ++ shared_activity = activity.get_shared_activity() ++ if shared_activity is not None: ++ shared_activity.props.name = title + +- activity.metadata['title'] = title +- activity.metadata['title_set_by_user'] = '1' +- activity.save() +- +- shared_activity = activity.get_shared_activity() +- if shared_activity is not None: +- shared_activity.props.name = title +- +- self._update_title_sid = None + return False + + +-- +1.7.0.1 + diff --git a/rpms/sugar-toolkit/sugar-toolkit-dont-configure-fonts.patch b/rpms/sugar-toolkit/sugar-toolkit-dont-configure-fonts.patch new file mode 100644 index 0000000..fa92187 --- /dev/null +++ b/rpms/sugar-toolkit/sugar-toolkit-dont-configure-fonts.patch @@ -0,0 +1,16 @@ +diff -ur a/src/sugar/activity/main.py b/src/sugar/activity/main.py +--- a/src/sugar/activity/main.py 2010-02-10 16:28:23.000000000 +0100 ++++ b/src/sugar/activity/main.py 2010-02-16 19:06:30.000000000 +0100 +@@ -98,12 +98,6 @@ + + gtk.icon_theme_get_default().append_search_path(bundle.get_icons_path()) + +- # This code can be removed when we grow an xsettings daemon (the GTK+ +- # init routines will then automatically figure out the font settings) +- settings = gtk.settings_get_default() +- settings.set_property('gtk-font-name', +- '%s %f' % (style.FONT_FACE, style.FONT_SIZE)) +- + locale_path = i18n.get_locale_path(bundle.get_bundle_id()) + + gettext.bindtextdomain(bundle.get_bundle_id(), locale_path) diff --git a/rpms/sugar-toolkit/sugar-toolkit.spec b/rpms/sugar-toolkit/sugar-toolkit.spec new file mode 100644 index 0000000..bcd2a2d --- /dev/null +++ b/rpms/sugar-toolkit/sugar-toolkit.spec @@ -0,0 +1,436 @@ +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} + +Summary: Sugar toolkit +Name: sugar-toolkit +Version: 0.88.1 +Release: 4.3bernie%{?dist} +URL: http://wiki.laptop.org/go/Sugar +Source0: http://download.sugarlabs.org/sources/sucrose/glucose/%{name}/%{name}-%{version}.tar.bz2 +Source1: macros.sugar + +# Bug fixes + +#bernie: sugar-settings-manager breaks Browse +#Patch0: sugar-toolkit-dont-configure-fonts.patch + +Patch1: fix-two-trivial-shell-log-warnings.patch +Patch2: sl1876.patch +Patch3: sl1948-Race-condition-with-name-widget-in-the-activ.patch +Patch4: sl1842-notify-red-alert.patch +Patch5: use-set_toolbar_box-in-example-code.patch +Patch6: set-default-accelerators-for-Copy-and-Paste-buttons.patch + +# Experimental patches +Patch101: remove-incomplete-MANIFEST-support.patch +Patch102: kill-the-delayed-menus-for-good.patch +Patch103: change-keep-string-to-keep-a-copy.patch + +License: LGPLv2+ +Group: System Environment/Libraries +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: pkgconfig +BuildRequires: pygtk2-devel +BuildRequires: gettext +BuildRequires: gtk2-devel +BuildRequires: perl-XML-Parser +BuildRequires: libSM-devel +BuildRequires: alsa-lib-devel +BuildRequires: intltool + +Requires: gnome-python2-rsvg +Requires: dbus-python +Requires: pygtk2 +Requires: hippo-canvas-python +Requires: sugar-datastore +Requires: sugar-base +Requires: sugar-presence-service +Requires: python-simplejson +Requires: python-dateutil +Requires: libxml2-python +Requires: unzip + +%description +Sugar is the core of the OLPC Human Interface. The toolkit provides +a set of widgets to build HIG compliant applications and interfaces +to interact with system services like presence and the datastore. + +%prep +%setup -q + +#%patch0 -p1 + +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 + +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 + +%build +%configure +make %{?_smp_mflags} V=1 + +%install +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} + +mkdir -p %{buildroot}/%{_sysconfdir}/rpm/ +install -p %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/rpm/macros.sugar + +%find_lang %name + +#Remove libtool archives. +find %{buildroot} -name '*.la' -exec rm -f {} ';' + +%clean +rm -rf %{buildroot} + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc COPYING README + +%{python_sitelib}/* +%{_sysconfdir}/rpm/macros.sugar + +%changelog +* Thu Jun 3 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.1-1 +- New upstream stable 0.88.1 release + +* Tue Mar 20 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-1 +- New upstream stable 0.88.0 release + +* Wed Mar 10 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.8-1 +- New upstream release + +* Wed Feb 17 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.6-1 +- New upstream release + +* Tue Feb 16 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.5-4 +- Make sure to use correct patch + +* Tue Feb 16 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.5-3 +- Enable sugar-settings-manager support + +* Sat Feb 13 2010 Simon Schampijer <simon@schampijer.de> - 0.87.5-2 +- Add the requires field for python-dateutil (brings back activity start) + +* Thu Feb 11 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.5-1 +- New upstream release + +* Sun Feb 07 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.4-1 +- New upstream release + +* Tue Jan 12 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.3-1 +- New upstream release + +* Sat Jan 9 2010 Peter Robinson <pbrobinson@gmail.com> - 0.87.2-2 +- Updated to the new python sysarch spec file reqs + +* Wed Dec 23 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.2-1 +- New upstream release + +* Fri Dec 18 2009 Peter Robinson <pbrobinson@gmail.com> 0.87.1-2 +- Remove libtool archives + +* Tue Dec 01 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.1-1 +- New upstream release + +* Wed Oct 21 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.2-1 +- Do not stop processing motion-notify-event #1507 + +* Tue Oct 13 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.86.0-3 +- Add unzip as a dependency + +* Fri Oct 09 2009 Luke Macken <lmacken@redhat.com> - 0.86.0-2 +- Remove python-json requirement, which is now provided by Python 2.6 + +* Sun Sep 27 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.0-1 +- New upstream release + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.8-1 +- New upstream release + +* Fri Sep 11 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.7-1 +- New upstream release + +* Wed Sep 05 2009 Peter Robinson <pbrobinson@gmail.com> - 0.85.6-2 +- Drop Requires: gettext, it should be just a BuildReq + +* Wed Sep 02 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.6-1 +- New upstream release + +* Wed Aug 26 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.5-1 +- New upstream release + +* Sun Aug 02 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.3-1 +- New upstream release + +* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.85.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sat Jul 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.2-1 +- New upstream release + +* Mon Apr 06 2009 Simon Schampijer <simon@schampijer.de> - 0.84.4-1 +- new german and spanish translations + +* Mon Apr 06 2009 Simon Schampijer <simon@schampijer.de> - 0.84.3-1 +- Journal Palette does not manage too many characters for a title correctly #610 +- Bundlebuilder list_files: Better error handling #635 +- Only call read_file once on activity startup #428 +- Revert "Listen for map in Window instead of in Canvas (alsroot) #428" +- Use git ls-files instead of git-ls-files, to work with newer Git. d.sl.o #647 +- Bundlebuilder: Don't include whole directory in src tarball #397 + +* Wed Apr 01 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-2.20090401git0a65259dc5 +- git snapshot + +* Sun Mar 22 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-1 +- Fix palettes scaling when using scaling factor 72 #504 +- Use Popen.communicate() to avoid hang (Sascha Silbe) #397 +- Change property type to object because int cannot be None #157 + +* Wed Mar 18 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-2.20090318git29aa6cbe65 +- git snapshot + +* Tue Mar 03 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-1 +- Catch all exceptions while saving #224 +- Listen for map in Window instead of in Canvas (alsroot) #428 +- Restore minimal .xol support #459 +- Use the same font size independent from scaling +- Don't recursively clean an activity if it's a symbolic link #444 +- Add extension to temp icon file names #458 +- Process .py files in subdirectories './setup genplot' #391 (alsroot) +- Improve error handling of calls to XGrabKey #431 +- Cleanup temp files at exit #435 +- Let activities provide their own implementation of get_preview() #152 +- Show/Hide the color palette correctly (#374) +- Support setting None as the secondary text #384 +- Only display one line in the secondary text of a clipping palette #384 +- Switch to existing instance of an activity if it's already running #410 +- Reveal the palette on right click on an activity icon #409 + +* Fri Feb 27 2009 Simon Schampijer <simon@schampijer.de> - 0.83.7-3.20090227git6f210f0e33 +- git snapshot +- Process .py files in subdirectories './setup genplot' #391 (alsroot) +- Improve error handling of calls to XGrabKey #431 +- Cleanup temp files at exit #435 +- Let activities provide their own implementation of get_preview() #152 +- Show/Hide the color palette correctly (#374) +- Support setting None as the secondary text #384 +- Only display one line in the secondary text of a clipping palette #384 +- Switch to existing instance of an activity if it's already running #410 +- Reveal the palette on right click on an activity icon #409 + +* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.83.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Simon Schampijer <simon@schampijer.de> - 0.83.7-1 +- Don't try to hide the tray if the activity has none (alsroot) #395 +- NamingAlert: Icon dependent on the entry type #353 +- Updated Languages + +* Mon Feb 16 2009 Simon Schampijer <simon@schampijer.de> - 0.83.6-1 +- Dates in journal are not translated #55 +- Keep error when displaying a file in Browse, Read, ImageViewer, etc #258 +- Palette positioning fixes #298 +- 'Resume' activity window when NamingAlert is displayed #293 +- Naming alert prevents activity close on keep error #224 + +* Fri Feb 06 2009 Simon Schampijer <simon@schampijer.de> - 0.83.5-2.20090206git474b2c3476 +- Set the locale path for sugar-toolkit #55 +- Don't push to the DS a file path pointing to nowhere #258 + +* Wed Feb 04 2009 Simon Schampijer <simon@schampijer.de> - 0.83.5-1 +- Palette positioning fixes #298 +- 'Resume' activity window when NamingAlert is displayed #293 +- Naming alert prevents activity close on keep error #224 + +* Fri Jan 30 2009 Simon Schampijer <simon@schampijer.de> - 0.83.4-2.20090130git073336585d +- Translation updates +- Naming alert prevents activity close on keep error #224 + +* Tue Jan 20 2009 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.4-1 +- separate debug settings from xsession #163 +- show an alert on activity close for suggesting the user to set properties of the entry #215 +- add a colorpicker to Sugar, only the ColorToolButton is public for now +- move the palette to new style gobject properties +- #3060 Add the possibility of filtering the object chooser by data type +- fix uninstallling of activities that use symlinks #171 +- remove the hacks for asking the X server for screenshots and use gtk.Widget.get_snapshot() instead + +* Sun Jan 04 2009 Simon Schampijer <simon@laptop.org> - 0.83.3-1 +- remove session shutdown patch +- add intltool as build requires +- new download url +- Fix palette highlighting on tray icons. Patch by benzea, style tweaks by marcopg +- Rework palette state logic. Fix #42 +- Use g_timeout_add_seconds() for power efficiency +- Add colors to icons in menu items +- Add accelerator support to menu items +- Simplify activity bundle installation +- Dont pop down the palette when a submenu opens + +* Mon Dec 5 2008 Peter Robinson<pbrobinson@gmail.com> - 0.83.2-4 +- Rebuild for python 2.6 + +* Sat Nov 29 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-3 +- Fix session shutdown + +* Fri Nov 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-1 +- Update to 0.83.2 + +* Tue Nov 4 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.1-2 +- Update to 0.83.1 + +* Wed Sep 24 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.11-1 +- #8626 Icons overlap unnecessarily in crowded neighborhood view. + +* Sat Sep 20 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.10-1 +- #8532 SIGCHLD fights with threads. +- #8485 Switching between zoom levels seem to leak + +* Tue Sep 16 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.8-2 +- Fix a crash when we cannot access the alsa device + +* Sat Sep 13 2008 Simon Schampijer <simon@laptop.org> - 0.82.7-1 +- #8375 gst usage in the shell wastes 2.6mb +- #8394 sugar shell leaks presence service info +- #8469 palette.menu is leaked + +* Thu Sep 11 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.6-1 +- #8394 sugar shell leaks presence service info +- #8392 Remove "dynamic" font height computation + +* Tue Sep 9 2008 Simon Schampijer <simon@laptop.org> - 0.82.5-4 +- remove pseudo.po from the source tarball + +* Wed Sep 3 2008 Jeremy Katz <katzj@redhat.com> - 0.82.5-3 +- requires gettext for bundlebuilder + +* Mon Sep 01 2008 Simon Schampijer <simon@laptop.org> - 0.82.5-2 +- added the python-json dependency + +* Mon Sep 01 2008 Simon Schampijer <simon@laptop.org> - 0.82.5-1 +- Translation updates +- Add plural information for all languages +- Fix plural form equations + +* Thu Aug 31 2008 Simon Schampijer <simon@laptop.org> - 0.82.4-1 +- 8136 Do a more 'standard' system installation for bundlebuilder +- 7837 Do not try to list the mimetypes directory if it does not exist +- 8220 Ensure that the widget is fully onscreen before taking a screenshot + +* Thu Aug 28 2008 Marco Pesenti Gritti <mpgritti@gmail.com> - 0.82.3-1 +- Translation updates + +* Thu Aug 28 2008 Marco Pesenti Gritti <mpgritti@gmail.com> - 0.82.2-1 +- #5428 downloads not starting in Browse due to old compreg.dat +- #7733 Cannot install Wikipedia-10.xo +- #7533 Activity does not respond to ctrl-q keyboard shortcut unless the 'Activity' tab is visible +- #8000 Pulsing icon on activity launch significantly slows activity start-up +- #8000 Pulsing icon on activity launch significantly slows activity start-up +- #7270 /setup release does not update the bundle number +- #7680 Activity name box is too small for localizaed name +- #7881 Accelerator labels don't show up for most toolbar buttons +- #7800 time stamps doesn't use translations + +* Tue Aug 22 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.82.1-2.20080822git2e6be9ea55 +- #7270 Add update functionality to Config in bundlebuilder +- #7680 Widen activity tile entry +- #7841 Wrap message in alert +- #7881 Make Palette handle changes of the invoker widget + +* Tue Aug 12 2008 Marco Pesenti Gritti <mpgritti@gmail.com> - 0.82.1-1 +- Fix crash on startup on x86_64 + +* Thu Aug 07 2008 Marco Pesenti Gritti <mpgritti@gmail.com> - 0.82.0-2 +- Rebuild + +* Thu Aug 07 2008 Marco Pesenti Gritti <mpgritti@gmail.com> - 0.82.0-1 +- #7759 Default home view should be Ring, not Freeform +- #4084 Palette persist over zoom levels +- #7754 Handle multiple Activity per process correctly +- Add git tagging to the 'setup.py release' command + +* Fri Aug 01 2008 Morgan Collett <morgan@laptop.org> - 0.81.8-1 +- #7566 sugar-shell enters in infinite loop after a failed shutdown +- #7534 Safer to always install, rather than comparing versions +- #7494 Updates to Browse-92 fail + +* Wed Jul 23 2008 Simon Schampijer <simon@laptop.org> - 0.81.7-1 +- 5136 Keep error alert hard to find +- 6014 Shutdown should sync activities data +- 7532 install + open content bundles with journal +- 7523 library index regeneration fails due to no XDG_DATA_DIRS +- 4208 Battery indicator's icon fullness inconsistent with indicator %. +- 7444 cannot close a shared activity when the initiator has disconnected +- 7430 Favorites view is not preserved +- 7434 Control panel UI for power management. +- 5079 Could simplify sharing code + +* Tue Jul 15 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-3.20080715gitd17347cc19 +- git snapshot +- 7523 fix content bundle installation +- 5079 simplify sharing code +- 4208 get_icon_state accepts negative step kwarg +- 7444 Fix crash in get_joined_buddies when a buddy disappears uncleanly + +* Wed Jul 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-2.20080709git92ef9d298a +- git snapshot +- 7430 Preserve the favorites layout across reboots +- 7434 Add power section to the control panel + +* Wed Jul 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-1 +- 7015 Add proper alignment support to the tray control +- 7054 Journal doesn't show correct colors for activity instances +- 7046 Deleting activity bundle with journal leaves it showing in Home list view until reboot +- 3939 Keep button should use XO colors +- 7248 Speaker device has inconsistent behavior + +* Sat Jun 21 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.81.5-1 +- Add build dependency on libSM-devel +- Support for session management (marco) +- Make MANIFEST mandatory in bundlebuilder (homunq) +- Add a position attribute to activity bundles (tomeu) +- Add a scroll_to_item method to the tray (benzea) + +* Mon Jun 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.4-1 +- Add an installation time property to the activity bundle (Tomeu) +- Reveal palettes on right-click (Eben) +- Refactor bundlebuilder and add dist_source command (Marco) +- Enable journal to do open-with for activity bundles (Chema) +- Add timezone, hot_corners, warm_edges to the profile (Simon) + +* Thu Apr 24 2008 Simon Schampijer <simon@laptop.org> - 0.79.6-1 +- Fix activity installation + +* Tue Apr 22 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.79.5-1 +- Correctly use tempfile.mkstemp(). + +* Tue Apr 22 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.79.4-1 +- Pylint cleanup. + +* Wed Apr 09 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.79.3 +- Added default to label arg in palette constructor (eben) + +* Fri Apr 04 2008 Dennis Gilmore <dennis@ausil.us> - 0.79.2-3 +- add macro defining sugaractivitydir + +* Thu Apr 03 2008 Simon Schampijer <simon@laptop.org> - 0.79.2 +- add python-simplejson as dependency +- #5474: Scale emblems + +* Wed Apr 2 2008 Simon Schampijer <simon@laptop.org> - 0.79.1 +- Frame/Home redesign - Put corner stone + +* Fri Feb 8 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.0-2 +- Fix source reference + +* Wed Feb 6 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.0-1 +- Initial build diff --git a/rpms/sugar-toolkit/use-set_toolbar_box-in-example-code.patch b/rpms/sugar-toolkit/use-set_toolbar_box-in-example-code.patch new file mode 100644 index 0000000..1995184 --- /dev/null +++ b/rpms/sugar-toolkit/use-set_toolbar_box-in-example-code.patch @@ -0,0 +1,30 @@ +From c13910dc358ba3793d5d150f336be0bcc1ef47eb Mon Sep 17 00:00:00 2001 +From: Bernie Innocenti <bernie@codewiz.org> +Date: Sat, 19 Jun 2010 08:50:08 -0400 +Subject: [PATCH] Use set_toolbar_box() in example code. +Organization: Sugar Labs Foundation +X-Subversion: sucks + +The set_toolbox() method is obsolete, so let's not advertise it. + +Signed-off-by: Bernie Innocenti <bernie@codewiz.org> +--- + src/sugar/activity/widgets.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/sugar/activity/widgets.py b/src/sugar/activity/widgets.py +index f89ac1f..8df04ea 100644 +--- a/src/sugar/activity/widgets.py ++++ b/src/sugar/activity/widgets.py +@@ -328,7 +328,7 @@ class ActivityToolbox(Toolbox): + ... your code, inserting all other toolbars you need, like EditToolbar + + # Add the toolbox to the activity frame: +- self.set_toolbox(toolbox) ++ self.set_toolbar_box(toolbox) + # And make it visible: + toolbox.show() + """ +-- +1.7.1 + diff --git a/rpms/sugar/add-font-dpi-schema.patch b/rpms/sugar/add-font-dpi-schema.patch new file mode 100644 index 0000000..ddbc019 --- /dev/null +++ b/rpms/sugar/add-font-dpi-schema.patch @@ -0,0 +1,45 @@ +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: sayamindu@laptop.org +Cc: bernie@codewiz.org, Jorge Saldivar <jsaldivar@paraguayeduca.org> +Subject: [PATCH] Add font dpi schema +Date: Fri, 18 Jun 2010 13:02:46 -0400 + +From: Jorge Saldivar <jsaldivar@paraguayeduca.org> + +--- + data/sugar.schemas.in | 12 +++++++++++- + 1 files changed, 11 insertions(+), 1 deletions(-) + +diff --git a/data/sugar.schemas.in b/data/sugar.schemas.in +index b9606ba..78aea9d 100644 +--- a/data/sugar.schemas.in ++++ b/data/sugar.schemas.in +@@ -249,6 +249,17 @@ + <long>Font size that is used throughout the desktop.</long> + </locale> + </schema> ++ <schema> ++ <key>/schemas/desktop/sugar/font/dpi</key> ++ <applyto>/desktop/sugar/font/dpi</applyto> ++ <owner>sugar</owner> ++ <type>int</type> ++ <default>200</default> ++ <locale name="C"> ++ <short>Default font dpi</short> ++ <long>Font dpi that is used throughout the desktop.</long> ++ </locale> ++ </schema> + + <schema> + <key>/schemas/desktop/sugar/i18n/langpackdir</key> +@@ -328,6 +339,5 @@ + <long>GSM network personal unlock key configuration</long> + </locale> + </schema> +- + </schemalist> + </gconfschemafile> +-- +1.7.0.4 + + diff --git a/rpms/sugar/avoid-popping-an-empty-list-in-the-software-updater.patch b/rpms/sugar/avoid-popping-an-empty-list-in-the-software-updater.patch new file mode 100644 index 0000000..a9a2245 --- /dev/null +++ b/rpms/sugar/avoid-popping-an-empty-list-in-the-software-updater.patch @@ -0,0 +1,36 @@ +Date: Sun, 23 May 2010 14:50:16 -0400 +From: Michael Stone <michael@laptop.org> +To: sugar-devel@lists.sugarlabs.org +Subject: [Sugar-devel] [PATCH] Avoid popping an empty list in the software + updater. + +When you run Sugar with no activities installed, UpdateModel._bundles_to_check +is empty. Attempting to unconditionally pop this list results in an IndexError. +Instead, the updater should stop trying to update bundles when it determines +that it has no more bundles to check. + +Signed-off-by: Michael Stone <michael@laptop.org> +--- + extensions/cpsection/updater/model.py | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/extensions/cpsection/updater/model.py b/extensions/cpsection/updater/model.py +index f2de65b..c45dcd3 100755 +--- a/extensions/cpsection/updater/model.py ++++ b/extensions/cpsection/updater/model.py +@@ -71,6 +71,8 @@ class UpdateModel(gobject.GObject): + total = len(bundleregistry.get_registry()) + current = total - len(self._bundles_to_check) + ++ if len(self._bundles_to_check) == 0: ++ return False + bundle = self._bundles_to_check.pop() + self.emit('progress', UpdateModel.ACTION_CHECKING, bundle.get_name(), + current, total) +-- +1.7.1 +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar/backup-0001-Volumes-Backup-and-Restore.patch b/rpms/sugar/backup-0001-Volumes-Backup-and-Restore.patch new file mode 100644 index 0000000..0cafc79 --- /dev/null +++ b/rpms/sugar/backup-0001-Volumes-Backup-and-Restore.patch @@ -0,0 +1,705 @@ +From 9e7b9820f39d7f8f04099c9051e0db59c841d263 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Tue, 22 Jun 2010 15:59:13 -0400 +Subject: [PATCH] Journal Volumes Backup and Restore +Organization: Paraguay Educa + +Add a basic backup and restore feature for the Sugar Journal. +It provides: + +- Generic Backup and Restore dialog GUI. +- Process manager class as an abstraction layer between the dialog and + backup/restore scripts. (Allowing to work with many backup and restore + technologies, using the same GUI, with no need for script rewrite). +- Basic file system Volume Restore and Backup scripts implemented in Python. +- New backup and restore options for journal volumes palettes. + +This patch is based on Esteban Arias (Plan Ceibal) Volume Backup and Restore +patch, with a few changes: + +- Refactor original Backup dialog class into a generic dialog class. +- Create specialized VolumeBackupDialog and VolumeRestoreDialog subclasses. +- Rewrite backup and restore scripts in python for an easier sugar interaction. +- Add backup identification helpers to jarabe.journal.misc. +--- + bin/Makefile.am | 4 +- + bin/journal-backup-volume | 57 ++++++++ + bin/journal-restore-volume | 67 +++++++++ + src/jarabe/journal/Makefile.am | 3 +- + src/jarabe/journal/misc.py | 27 ++++ + src/jarabe/journal/processdialog.py | 248 +++++++++++++++++++++++++++++++++ + src/jarabe/journal/volumestoolbar.py | 5 +- + src/jarabe/model/Makefile.am | 3 +- + src/jarabe/model/processmanagement.py | 98 +++++++++++++ + src/jarabe/view/palettes.py | 44 ++++++ + 10 files changed, 551 insertions(+), 5 deletions(-) + create mode 100644 bin/journal-backup-volume + create mode 100644 bin/journal-restore-volume + create mode 100644 src/jarabe/journal/processdialog.py + create mode 100644 src/jarabe/model/processmanagement.py + +diff --git a/bin/Makefile.am b/bin/Makefile.am +index 05a9215..8cc87b5 100644 +--- a/bin/Makefile.am ++++ b/bin/Makefile.am +@@ -5,7 +5,9 @@ python_scripts = \ + sugar-install-bundle \ + sugar-launch \ + sugar-session \ +- sugar-ui-check ++ sugar-ui-check \ ++ journal-backup-volume \ ++ journal-restore-volume + + bin_SCRIPTS = \ + sugar \ +diff --git a/bin/journal-backup-volume b/bin/journal-backup-volume +new file mode 100644 +index 0000000..4f3ec8a +--- /dev/null ++++ b/bin/journal-backup-volume +@@ -0,0 +1,57 @@ ++#!/usr/bin/env python ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> ++# ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>. ++# ++ ++import os ++import sys ++import subprocess ++import logging ++ ++from sugar import env ++#from sugar.datastore import datastore ++ ++backup_identifier = sys.argv[2] ++volume_path = sys.argv[1] ++ ++if len(sys.argv) != 3: ++ print 'Usage: %s <volume_path> <backup_identifier>' % sys.argv[0] ++ exit(1) ++ ++logging.debug('Backup started') ++ ++backup_path = os.path.join(volume_path, 'backup', backup_identifier) ++ ++if not os.path.exists(backup_path): ++ os.makedirs(backup_path) ++ ++#datastore.freeze() ++subprocess.call(['pkill', '-9', '-f', 'python.*datastore-service']) ++ ++result = 0 ++try: ++ cmd = ['tar', '-C', env.get_profile_path(), '-czf', \ ++ os.path.join(backup_path, 'datastore.tar.gz'), 'datastore'] ++ ++ subprocess.check_call(cmd) ++ ++except Exception, e: ++ logging.error('Backup failed: %s', str(e)) ++ result = 1 ++ ++#datastore.thaw() ++ ++logging.debug('Backup finished') ++exit(result) +diff --git a/bin/journal-restore-volume b/bin/journal-restore-volume +new file mode 100644 +index 0000000..aa14ad0 +--- /dev/null ++++ b/bin/journal-restore-volume +@@ -0,0 +1,67 @@ ++#!/usr/bin/env python ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> ++# ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>. ++# ++ ++import os ++import sys ++import shutil ++import logging ++import subprocess ++ ++from sugar import env ++#from sugar.datastore import datastore ++ ++backup_identifier = sys.argv[2] ++volume_path = sys.argv[1] ++ ++if len(sys.argv) != 3: ++ print 'Usage: %s <volume_path> <backup_identifier>' % sys.argv[0] ++ exit(1) ++ ++logging.debug('Restore started') ++ ++journal_path = os.path.join(env.get_profile_path(), 'datastore') ++backup_path = os.path.join(volume_path, 'backup', backup_identifier, 'datastore.tar.gz') ++ ++if not os.path.exists(backup_path): ++ logging.error('Could not find backup file %s', backup_path) ++ exit(1) ++ ++#datastore.freeze() ++subprocess.call(['pkill', '-9', '-f', 'python.*datastore-service']) ++ ++result = 0 ++try: ++ if os.path.exists(journal_path): ++ shutil.rmtree(journal_path) ++ ++ subprocess.check_call(['tar', '-C', env.get_profile_path(), '-xzf', backup_path]) ++ ++except Exception, e: ++ logging.error('Restore failed: %s', str(e)) ++ result = 1 ++ ++try: ++ shutil.rmtree(os.path.join(journal_path, 'index')) ++ os.remove(os.path.join(journal_path, 'index_updated')) ++ os.remove(os.path.join(journal_path, 'version')) ++except: ++ logging.debug('Restore has no index files') ++ ++#datastore.thaw() ++ ++logging.debug('Restore finished') ++exit(result) +diff --git a/src/jarabe/journal/Makefile.am b/src/jarabe/journal/Makefile.am +index f4bf273..a760869 100644 +--- a/src/jarabe/journal/Makefile.am ++++ b/src/jarabe/journal/Makefile.am +@@ -14,4 +14,5 @@ sugar_PYTHON = \ + model.py \ + objectchooser.py \ + palettes.py \ +- volumestoolbar.py ++ volumestoolbar.py \ ++ processdialog.py +diff --git a/src/jarabe/journal/misc.py b/src/jarabe/journal/misc.py +index 24ad216..6e3cb95 100644 +--- a/src/jarabe/journal/misc.py ++++ b/src/jarabe/journal/misc.py +@@ -1,4 +1,5 @@ + # Copyright (C) 2007, One Laptop Per Child ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> + # + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -249,3 +250,29 @@ def get_icon_color(metadata): + return XoColor(client.get_string('/desktop/sugar/user/color')) + else: + return XoColor(metadata['icon-color']) ++ ++def get_backup_identifier(): ++ serial_number = get_xo_serial() ++ if serial_number is None: ++ serial_number = get_nick() ++ return serial_number ++ ++def get_xo_serial(): ++ path = '/ofw/serial-number' ++ ++ if os.access(path, os.R_OK) == 0: ++ return None ++ ++ file_descriptor = open(path, 'r') ++ content = file_descriptor.read() ++ file_descriptor.close() ++ ++ if content: ++ return content.strip() ++ else: ++ logging.error('No serial number at %s', path) ++ return None ++ ++def get_nick(): ++ client = gconf.client_get_default() ++ return client.get_string("/desktop/sugar/user/nick") +diff --git a/src/jarabe/journal/processdialog.py b/src/jarabe/journal/processdialog.py +new file mode 100644 +index 0000000..8217973 +--- /dev/null ++++ b/src/jarabe/journal/processdialog.py +@@ -0,0 +1,248 @@ ++#!/usr/bin/env python ++# Copyright (C) 2010, Plan Ceibal <comunidad@plan.ceibal.edu.uy> ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> ++# ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>. ++ ++import gtk ++import gobject ++import gconf ++import logging ++ ++from gettext import gettext as _ ++from sugar.graphics import style ++from sugar.graphics.icon import Icon ++from sugar.graphics.xocolor import XoColor ++ ++from jarabe.journal import misc ++from jarabe.model import shell ++from jarabe.model import processmanagement ++from jarabe.model.session import get_session_manager ++ ++class ProcessDialog(gtk.Window): ++ ++ __gtype_name__ = 'SugarProcessDialog' ++ ++ def __init__(self, process_script='', process_params=[], restart_after=True): ++ ++ #FIXME: Workaround limitations of Sugar core modal handling ++ shell_model = shell.get_model() ++ shell_model.set_zoom_level(shell_model.ZOOM_HOME) ++ ++ gtk.Window.__init__(self) ++ ++ self._process_script = processmanagement.find_and_absolutize(process_script) ++ self._process_params = process_params ++ self._restart_after = restart_after ++ self._start_message = _('Running') ++ self._failed_message = _('Failed') ++ self._finished_message = _('Finished') ++ ++ self.set_border_width(style.LINE_WIDTH) ++ width = gtk.gdk.screen_width() ++ height = gtk.gdk.screen_height() ++ self.set_size_request(width, height) ++ self.set_position(gtk.WIN_POS_CENTER_ALWAYS) ++ self.set_decorated(False) ++ self.set_resizable(False) ++ self.set_modal(True) ++ ++ self._colored_box = gtk.EventBox() ++ self._colored_box.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white")) ++ self._colored_box.show() ++ ++ self._vbox = gtk.VBox() ++ self._vbox.set_spacing(style.DEFAULT_SPACING) ++ self._vbox.set_border_width(style.GRID_CELL_SIZE) ++ ++ self._colored_box.add(self._vbox) ++ self.add(self._colored_box) ++ ++ self._setup_information() ++ self._setup_progress_bar() ++ self._setup_options() ++ ++ self._vbox.show() ++ ++ self.connect("realize", self.__realize_cb) ++ ++ self._process_management = processmanagement.ProcessManagement() ++ self._process_management.connect('process-management-running', self._set_status_updated) ++ self._process_management.connect('process-management-started', self._set_status_started) ++ self._process_management.connect('process-management-finished', self._set_status_finished) ++ self._process_management.connect('process-management-failed', self._set_status_failed) ++ ++ def _setup_information(self): ++ client = gconf.client_get_default() ++ color = XoColor(client.get_string('/desktop/sugar/user/color')) ++ ++ self._icon = Icon(icon_name='activity-journal', pixel_size=style.XLARGE_ICON_SIZE, xo_color=color) ++ self._icon.show() ++ ++ self._vbox.pack_start(self._icon, False) ++ ++ self._title = gtk.Label() ++ self._title.modify_fg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color()) ++ self._title.set_use_markup(True) ++ self._title.set_justify(gtk.JUSTIFY_CENTER) ++ self._title.show() ++ ++ self._vbox.pack_start(self._title, False) ++ ++ self._message = gtk.Label() ++ self._message.modify_fg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color()) ++ self._message.set_use_markup(True) ++ self._message.set_line_wrap(True) ++ self._message.set_justify(gtk.JUSTIFY_CENTER) ++ self._message.show() ++ ++ self._vbox.pack_start(self._message, True) ++ ++ def _setup_options(self): ++ hbox = gtk.HBox(True, 3) ++ hbox.show() ++ ++ icon = Icon(icon_name='dialog-ok') ++ ++ self._start_button = gtk.Button() ++ self._start_button.set_image(icon) ++ self._start_button.set_label(_('Start')) ++ self._start_button.connect('clicked', self.__start_cb) ++ self._start_button.show() ++ ++ icon = Icon(icon_name='dialog-cancel') ++ ++ self._close_button = gtk.Button() ++ self._close_button.set_image(icon) ++ self._close_button.set_label(_('Cancel')) ++ self._close_button.connect('clicked', self.__close_cb) ++ self._close_button.show() ++ ++ icon = Icon(icon_name='system-restart') ++ ++ self._restart_button = gtk.Button() ++ self._restart_button.set_image(icon) ++ self._restart_button.set_label(_('Restart')) ++ self._restart_button.connect('clicked', self.__restart_cb) ++ self._restart_button.hide() ++ ++ hbox.add(self._start_button) ++ hbox.add(self._close_button) ++ hbox.add(self._restart_button) ++ ++ halign = gtk.Alignment(1, 0, 0, 0) ++ halign.show() ++ halign.add(hbox) ++ ++ self._vbox.pack_start(halign, False, False, 3) ++ ++ def _setup_progress_bar(self): ++ alignment = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.5) ++ alignment.show() ++ ++ self._progress_bar = gtk.ProgressBar(adjustment=None) ++ self._progress_bar.hide() ++ ++ alignment.add(self._progress_bar) ++ self._vbox.pack_start(alignment) ++ ++ def __realize_cb(self, widget): ++ self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) ++ self.window.set_accept_focus(True) ++ ++ def __close_cb(self, button): ++ self.destroy() ++ ++ def __start_cb(self, button): ++ self._process_management.do_process([self._process_script] + self._process_params) ++ ++ def __restart_cb(self, button): ++ session_manager = get_session_manager() ++ session_manager.logout() ++ ++ def _set_status_started(self, model, data=None): ++ self._message.set_markup(self._start_message) ++ ++ self._start_button.hide() ++ self._close_button.hide() ++ ++ self._progress_bar.set_fraction(0.05) ++ self._progress_bar_handler = gobject.timeout_add(1000, self.__progress_bar_handler_cb) ++ self._progress_bar.show() ++ ++ def __progress_bar_handler_cb(self): ++ self._progress_bar.pulse() ++ return True ++ ++ def _set_status_updated(self, model, data): ++ pass ++ ++ def _set_status_finished(self, model, data=None): ++ self._message.set_markup(self._finished_message) ++ ++ self._progress_bar.hide() ++ self._start_button.hide() ++ ++ if self._restart_after: ++ self._restart_button.show() ++ else: ++ self._close_button.show() ++ ++ def _set_status_failed(self, model, error_message=''): ++ self._message.set_markup('%s %s' % (self._failed_message, error_message)) ++ ++ self._progress_bar.hide() ++ self._start_button.show() ++ self._close_button.show() ++ ++ logging.error(error_message) ++ ++ ++class VolumeBackupDialog(ProcessDialog): ++ ++ def __init__(self, volume_path): ++ ProcessDialog.__init__(self, 'journal-backup-volume', \ ++ [volume_path, misc.get_backup_identifier()]) ++ ++ self._resetup_information(volume_path) ++ ++ def _resetup_information(self, volume_path): ++ self._start_message = '%s %s. \n\n' % (_('Please wait, saving Journal content to'), volume_path) + \ ++ '<big><b>%s</b></big>' % _('Do not remove the storage device!') ++ ++ self._finished_message = _('The Journal content has been saved.') ++ ++ self._title.set_markup('<big><b>%s</b></big>' % _('Backup')) ++ ++ self._message.set_markup('%s %s' % (_('Journal content will be saved to'), volume_path)) ++ ++class VolumeRestoreDialog(ProcessDialog): ++ ++ def __init__(self, volume_path): ++ ProcessDialog.__init__(self, 'journal-restore-volume', \ ++ [volume_path, misc.get_backup_identifier()]) ++ ++ self._resetup_information(volume_path) ++ ++ def _resetup_information(self, volume_path): ++ self._start_message = '%s %s. \n\n' % (_('Please wait, restoring Journal content from'), volume_path) + \ ++ '<big><b>%s</b></big>' % _('Do not remove the storage device!') ++ ++ self._finished_message = _('The Journal content has been restored.') ++ ++ self._title.set_markup('<big><b>%s</b></big>' % _('Restore')) ++ ++ self._message.set_markup('%s %s.\n\n' % (_('Journal content will be restored from'), volume_path) + \ ++ '<big><b>%s</b> %s</big>' % (_('Warning:'), _('Current Journal content will be deleted!'))) ++ +diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py +index 74b974c..2e64fe2 100644 +--- a/src/jarabe/journal/volumestoolbar.py ++++ b/src/jarabe/journal/volumestoolbar.py +@@ -27,7 +27,7 @@ from sugar.graphics.palette import Palette + from sugar.graphics.xocolor import XoColor + + from jarabe.journal import model +-from jarabe.view.palettes import VolumePalette ++from jarabe.view.palettes import JournalVolumePalette + + class VolumesToolbar(gtk.Toolbar): + __gtype_name__ = 'VolumesToolbar' +@@ -164,11 +164,12 @@ class VolumeButton(BaseButton): + self.props.xo_color = color + + def create_palette(self): +- palette = VolumePalette(self._mount) ++ palette = JournalVolumePalette(self._mount) + #palette.props.invoker = FrameWidgetInvoker(self) + #palette.set_group_id('frame') + return palette + ++ + class JournalButton(BaseButton): + def __init__(self): + BaseButton.__init__(self, mount_point='/') +diff --git a/src/jarabe/model/Makefile.am b/src/jarabe/model/Makefile.am +index e9f0700..8fdc552 100644 +--- a/src/jarabe/model/Makefile.am ++++ b/src/jarabe/model/Makefile.am +@@ -15,4 +15,5 @@ sugar_PYTHON = \ + shell.py \ + screen.py \ + session.py \ +- sound.py ++ sound.py \ ++ processmanagement.py +diff --git a/src/jarabe/model/processmanagement.py b/src/jarabe/model/processmanagement.py +new file mode 100644 +index 0000000..466e1f6 +--- /dev/null ++++ b/src/jarabe/model/processmanagement.py +@@ -0,0 +1,98 @@ ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> ++# Copyright (C) 2010, Plan Ceibal <comunidad@plan.ceibal.edu.uy> ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++import os ++import gobject ++import glib ++import gio ++ ++from sugar import env ++from gettext import gettext as _ ++ ++BYTES_TO_READ = 100 ++ ++class ProcessManagement(gobject.GObject): ++ ++ __gtype_name__ = 'ProcessManagement' ++ ++ __gsignals__ = { ++ 'process-management-running' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([str])), ++ 'process-management-started' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'process-management-finished' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'process-management-failed' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([str])) ++ } ++ ++ def __init__(self): ++ gobject.GObject.__init__(self) ++ self._running = False ++ ++ def do_process(self, cmd): ++ self._run_cmd_async(cmd) ++ ++ def _report_process_status(self, stream, result): ++ data = stream.read_finish(result) ++ ++ if len(data): ++ self.emit('process-management-running', data) ++ stream.read_async(BYTES_TO_READ, self._report_process_status) ++ ++ def _report_process_error(self, stream, result, concat_err=''): ++ data = stream.read_finish(result) ++ concat_err = concat_err + data ++ ++ if len(data) == 0: ++ self.emit('process-management-failed', concat_err) ++ else: ++ stream.read_async(BYTES_TO_READ, self._report_process_error, user_data=concat_err) ++ ++ def _notify_error(self, stderr): ++ stdin_stream = gio.unix.InputStream(stderr, True) ++ stdin_stream.read_async(BYTES_TO_READ, self._report_process_error) ++ ++ def _notify_process_status(self, stdout): ++ stdin_stream = gio.unix.InputStream(stdout, True) ++ stdin_stream.read_async(BYTES_TO_READ, self._report_process_status) ++ ++ def _run_cmd_async(self, cmd): ++ if self._running == False: ++ try: ++ pid, stdin, stdout, stderr = glib.spawn_async(cmd, flags=glib.SPAWN_DO_NOT_REAP_CHILD, standard_output=True, standard_error=True) ++ gobject.child_watch_add(pid, _handle_process_end, (self, stderr)) ++ except Exception: ++ self.emit('process-management-failed', _("Error - Call process: ") + str(cmd)) ++ else: ++ self._notify_process_status(stdout) ++ self._running = True ++ self.emit('process-management-started') ++ ++def _handle_process_end(pid, condition, (myself, stderr)): ++ myself._running = False ++ ++ if os.WIFEXITED(condition) and\ ++ os.WEXITSTATUS(condition) == 0: ++ myself.emit('process-management-finished') ++ else: ++ myself._notify_error(stderr) ++ ++def find_and_absolutize(script_name): ++ paths = env.os.environ['PATH'].split(':') ++ for path in paths: ++ looking_path = path + '/' + script_name ++ if env.os.path.isfile(looking_path): ++ return looking_path ++ ++ return None +diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py +index ad84f08..2fc4d5f 100644 +--- a/src/jarabe/view/palettes.py ++++ b/src/jarabe/view/palettes.py +@@ -1,4 +1,6 @@ + # Copyright (C) 2008 One Laptop Per Child ++# Copyright (C) 2010, Plan Ceibal <comunidad@plan.ceibal.edu.uy> ++# Copyright (C) 2010, Paraguay Educa <tecnologia@paraguayeduca.org> + # + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -31,6 +33,7 @@ from sugar.graphics.xocolor import XoColor + from sugar.activity import activityfactory + from sugar.activity.activityhandle import ActivityHandle + ++from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog + from jarabe.model import shell + from jarabe.view import launcher + from jarabe.view.viewsource import setup_view_source +@@ -258,3 +261,44 @@ class VolumePalette(Palette): + self._free_space_label.props.label = _('%(free_space)d MB Free') % \ + {'free_space': free_space / (1024 * 1024)} + ++ ++class JournalVolumePalette(VolumePalette): ++ ++ __gtype_name__ = 'JournalVolumePalette' ++ ++ def __init__(self, mount): ++ VolumePalette.__init__(self, mount) ++ ++ journal_separator = gtk.SeparatorMenuItem() ++ journal_separator.show() ++ ++ self.menu.prepend(journal_separator) ++ ++ icon = Icon(icon_name='transfer-from', icon_size=gtk.ICON_SIZE_MENU) ++ icon.show() ++ ++ menu_item_journal_restore = MenuItem(_('Restore Journal')) ++ menu_item_journal_restore.set_image(icon) ++ menu_item_journal_restore.connect('activate', self.__journal_restore_activate_cb, mount.get_root().get_path()) ++ menu_item_journal_restore.show() ++ ++ self.menu.prepend(menu_item_journal_restore) ++ ++ icon = Icon(icon_name='transfer-to', icon_size=gtk.ICON_SIZE_MENU) ++ icon.show() ++ ++ menu_item_journal_backup = MenuItem(_('Backup Journal')) ++ menu_item_journal_backup.set_image(icon) ++ menu_item_journal_backup.connect('activate', self.__journal_backup_activate_cb, mount.get_root().get_path()) ++ menu_item_journal_backup.show() ++ ++ self.menu.prepend(menu_item_journal_backup) ++ ++ def __journal_backup_activate_cb(self, menu_item, mount_path): ++ dialog = VolumeBackupDialog(mount_path) ++ dialog.show() ++ ++ def __journal_restore_activate_cb(self, menu_item, mount_path): ++ dialog = VolumeRestoreDialog(mount_path) ++ dialog.show() ++ +-- +1.6.0.4 + diff --git a/rpms/sugar/backup-0002-Journal-XS-backup-and-restore.patch b/rpms/sugar/backup-0002-Journal-XS-backup-and-restore.patch new file mode 100644 index 0000000..3fb69a1 --- /dev/null +++ b/rpms/sugar/backup-0002-Journal-XS-backup-and-restore.patch @@ -0,0 +1,209 @@ +From 630cff5c5ffecb70fd96faa568ad3ae270f8b0e3 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Wed, 23 Jun 2010 17:12:59 -0400 +Subject: [PATCH] Journal XS backup and restore +Organization: Paraguay Educa + +Include a new journal volumes toolbar icon. The icon represents +the schoolserver. The icon palette provides a backup and restore +options. +--- + src/jarabe/desktop/favoritesview.py | 2 + + src/jarabe/journal/processdialog.py | 30 ++++++++++++++++++++++++++ + src/jarabe/journal/volumestoolbar.py | 37 +++++++++++++++++++++++++++++-- + src/jarabe/view/palettes.py | 39 +++++++++++++++++++++++++++++++++- + 4 files changed, 104 insertions(+), 4 deletions(-) + +diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py +index aca945a..a311b52 100644 +--- a/src/jarabe/desktop/favoritesview.py ++++ b/src/jarabe/desktop/favoritesview.py +@@ -42,6 +42,7 @@ from jarabe.view import launcher + from jarabe.model.buddy import BuddyModel + from jarabe.model import shell + from jarabe.model import bundleregistry ++from jarabe.journal.journalactivity import get_journal + from jarabe.journal import misc + + from jarabe.desktop import schoolserver +@@ -328,6 +329,7 @@ class FavoritesView(hippo.Canvas): + alert.props.msg = _('You are now registered ' \ + 'with your school server.') + self._my_icon.remove_register_menu() ++ get_journal()._volumes_toolbar.setup_xs_button() + + ok_icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon) +diff --git a/src/jarabe/journal/processdialog.py b/src/jarabe/journal/processdialog.py +index 8217973..4d8704e 100644 +--- a/src/jarabe/journal/processdialog.py ++++ b/src/jarabe/journal/processdialog.py +@@ -246,3 +246,33 @@ class VolumeRestoreDialog(ProcessDialog): + self._message.set_markup('%s %s.\n\n' % (_('Journal content will be restored from'), volume_path) + \ + '<big><b>%s</b> %s</big>' % (_('Warning:'), _('Current Journal content will be deleted!'))) + ++class XSBackupDialog(ProcessDialog): ++ ++ def __init__(self, xs_hostname): ++ ProcessDialog.__init__(self, 'journal-backup') ++ self._resetup_information(xs_hostname) ++ ++ def _resetup_information(self, xs_hostname): ++ self._start_message = '%s %s.' % (_('Please wait, saving Journal content to'), xs_hostname) ++ ++ self._finished_message = _('The journal content has been saved.') ++ ++ self._title.set_markup('<big><b>%s</b></big>' % _('Backup')) ++ ++ self._message.set_text('%s %s.' % (_('Journal content will be saved to'), xs_hostname)) ++ ++class XSRestoreDialog(ProcessDialog): ++ ++ def __init__(self, xs_hostname): ++ ProcessDialog.__init__(self, 'journal-restore') ++ self._resetup_information(xs_hostname) ++ ++ def _resetup_information(self, xs_hostname): ++ self._start_message = '%s %s.' % (_('Please wait, restoring journal content from'), xs_hostname) ++ ++ self._finished_message = _('The journal content has been restored.') ++ ++ self._title.set_markup('<big><b>%s</b></big>' % _('Restore')) ++ ++ self._message.set_text('%s %s.' % (_('Journal content will be restored from'), xs_hostname)) ++ +diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py +index 2e64fe2..e1f9ce0 100644 +--- a/src/jarabe/journal/volumestoolbar.py ++++ b/src/jarabe/journal/volumestoolbar.py +@@ -22,12 +22,14 @@ import gio + import gtk + import gconf + ++from sugar.graphics.toolbutton import ToolButton + from sugar.graphics.radiotoolbutton import RadioToolButton ++from sugar.graphics.icon import Icon + from sugar.graphics.palette import Palette + from sugar.graphics.xocolor import XoColor + + from jarabe.journal import model +-from jarabe.view.palettes import JournalVolumePalette ++from jarabe.view.palettes import JournalVolumePalette, JournalXSPalette + + class VolumesToolbar(gtk.Toolbar): + __gtype_name__ = 'VolumesToolbar' +@@ -52,6 +54,7 @@ class VolumesToolbar(gtk.Toolbar): + + self.connect('destroy', self.__destroy_cb) + ++ self.setup_xs_button() + gobject.idle_add(self._set_up_volumes) + + def __destroy_cb(self, widget): +@@ -59,6 +62,21 @@ class VolumesToolbar(gtk.Toolbar): + volume_monitor.disconnect(self._mount_added_hid) + volume_monitor.disconnect(self._mount_removed_hid) + ++ def setup_xs_button(self): ++ client = gconf.client_get_default() ++ backup_url = client.get_string('/desktop/sugar/backup_url') ++ ++ if backup_url: ++ xs_button = XSButton() ++ xs_button.set_palette(JournalXSPalette(backup_url)) ++ #xs_button.props.group = self._volume_buttons[0] ++ xs_button.show() ++ ++ self._volume_buttons.append(xs_button) ++ position = len(self._volume_buttons) - 1 ++ self.insert(xs_button, position) ++ self.show() ++ + def _set_up_volumes(self): + volume_monitor = gio.volume_monitor_get() + self._mount_added_hid = \ +@@ -104,8 +122,9 @@ class VolumesToolbar(gtk.Toolbar): + def _get_button_for_mount(self, mount): + mount_point = mount.get_root().get_path() + for button in self.get_children(): +- if button.mount_point == mount_point: +- return button ++ if type(button) == VolumeButton and \ ++ button.mount_point == mount_point: ++ return button + logging.error('Couldnt find button with mount_point %r', mount_point) + return None + +@@ -180,3 +199,15 @@ class JournalButton(BaseButton): + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color + ++class XSButton(ToolButton): ++ def __init__(self): ++ ToolButton.__init__(self) ++ self.set_icon('school-server') ++ ++ def set_icon(self, icon_name): ++ client = gconf.client_get_default() ++ color = XoColor(client.get_string('/desktop/sugar/user/color')) ++ icon = Icon(icon_name=icon_name, xo_color=color, icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) ++ icon.show() ++ ++ self.set_icon_widget(icon) +diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py +index 2fc4d5f..51c40f1 100644 +--- a/src/jarabe/view/palettes.py ++++ b/src/jarabe/view/palettes.py +@@ -33,7 +33,7 @@ from sugar.graphics.xocolor import XoColor + from sugar.activity import activityfactory + from sugar.activity.activityhandle import ActivityHandle + +-from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog ++from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog, XSBackupDialog, XSRestoreDialog + from jarabe.model import shell + from jarabe.view import launcher + from jarabe.view.viewsource import setup_view_source +@@ -302,3 +302,40 @@ class JournalVolumePalette(VolumePalette): + dialog = VolumeRestoreDialog(mount_path) + dialog.show() + ++class JournalXSPalette(Palette): ++ def __init__(self, xs_hostname): ++ Palette.__init__(self, _('School Server')) ++ ++ self.props.secondary_text = xs_hostname ++ ++ vbox = gtk.VBox() ++ self.set_content(vbox) ++ vbox.show() ++ ++ icon = Icon(icon_name='transfer-to', icon_size=gtk.ICON_SIZE_MENU) ++ icon.show() ++ ++ menu_item_journal_backup = MenuItem(_('Backup Journal')) ++ menu_item_journal_backup.set_image(icon) ++ menu_item_journal_backup.connect('activate', self.__journal_backup_activate_cb, xs_hostname) ++ menu_item_journal_backup.show() ++ ++ self.menu.append(menu_item_journal_backup) ++ ++ icon = Icon(icon_name='transfer-from', icon_size=gtk.ICON_SIZE_MENU) ++ icon.show() ++ ++ menu_item_journal_restore = MenuItem(_('Restore Journal')) ++ menu_item_journal_restore.set_image(icon) ++ menu_item_journal_restore.connect('activate', self.__journal_restore_activate_cb, xs_hostname) ++ menu_item_journal_restore.show() ++ ++ self.menu.append(menu_item_journal_restore) ++ ++ def __journal_backup_activate_cb(self, menu_item, xs_hostname): ++ dialog = XSBackupDialog(xs_hostname) ++ dialog.show() ++ ++ def __journal_restore_activate_cb(self, menu_item, xs_hostname): ++ dialog = XSRestoreDialog(xs_hostname) ++ dialog.show() +-- +1.6.0.4 + diff --git a/rpms/sugar/backup-0003-Journal-documents-volume-button.patch b/rpms/sugar/backup-0003-Journal-documents-volume-button.patch new file mode 100644 index 0000000..05b00cc --- /dev/null +++ b/rpms/sugar/backup-0003-Journal-documents-volume-button.patch @@ -0,0 +1,74 @@ +From c5f5aaa9c887ccee31fca91d96a3692a999cec7d Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Fri, 25 Jun 2010 09:40:17 -0400 +Subject: [PATCH] Journal documents volume button +Organization: Paraguay Educa + +Simplified version of Jorge Saldivar's patch. Add a new volume toolbar +button for xdg-user-dir DOCUMENTS directory. +--- + src/jarabe/journal/volumestoolbar.py | 30 ++++++++++++++++++++++++++++++ + 1 files changed, 30 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py +index a245b1f..448e228 100644 +--- a/src/jarabe/journal/volumestoolbar.py ++++ b/src/jarabe/journal/volumestoolbar.py +@@ -21,6 +21,7 @@ import gobject + import gio + import gtk + import gconf ++import subprocess + + from sugar.graphics.radiotoolbutton import RadioToolButton + from sugar.graphics.palette import Palette +@@ -53,6 +54,7 @@ class VolumesToolbar(gtk.Toolbar): + self.connect('destroy', self.__destroy_cb) + + self.setup_xs_button() ++ self.setup_documents_button() + gobject.idle_add(self._set_up_volumes) + + def __destroy_cb(self, widget): +@@ -75,6 +77,18 @@ class VolumesToolbar(gtk.Toolbar): + self.insert(xs_button, position) + self.show() + ++ def setup_documents_button(self): ++ button = DocumentsButton() ++ button.props.group = self._volume_buttons[0] ++ button.set_palette(Palette(_('Documents'))) ++ button.connect('toggled', self._button_toggled_cb) ++ button.show() ++ ++ position = len(self._volume_buttons) - 1 ++ self.insert(button, position) ++ self._volume_buttons.append(button) ++ self.show() ++ + def _set_up_volumes(self): + volume_monitor = gio.volume_monitor_get() + self._mount_added_hid = \ +@@ -211,3 +225,19 @@ class XSButton(RadioToolButton): + + def _button_toggled_cb(self): + pass ++ ++class DocumentsButton(BaseButton): ++ def __init__(self): ++ self.__mount_directory_path = subprocess.Popen(["xdg-user-dir", "DOCUMENTS"], stdout=subprocess.PIPE).stdout.read().strip() ++ ++ BaseButton.__init__(self, mount_point=self.__mount_directory_path) ++ ++ self.props.named_icon = 'drive' ++ ++ client = gconf.client_get_default() ++ color = XoColor(client.get_string('/desktop/sugar/user/color')) ++ self.props.xo_color = color ++ ++ def get_mount_point(self): ++ return self.__mount_directory_path ++ +-- +1.6.0.4 + diff --git a/rpms/sugar/backup-0004-es-translations.patch b/rpms/sugar/backup-0004-es-translations.patch new file mode 100644 index 0000000..541032b --- /dev/null +++ b/rpms/sugar/backup-0004-es-translations.patch @@ -0,0 +1,1559 @@ +From 0604fea518d6f5fe8280dad1452acec2b92258b4 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Wed, 30 Jun 2010 14:01:27 -0400 +Subject: [PATCH] Backup and Restore translations +Organization: Paraguay Educa + +--- + po/POTFILES.in | 3 +- + po/es.po | 786 ++++++++++++++++++++++++++++++++++++-------------------- + 2 files changed, 512 insertions(+), 277 deletions(-) + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index e9a7f1c..a7dc31e 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -57,10 +57,11 @@ src/jarabe/journal/misc.py + src/jarabe/journal/modalalert.py + src/jarabe/journal/objectchooser.py + src/jarabe/journal/palettes.py ++src/jarabe/journal/processdialog.py + src/jarabe/journal/volumestoolbar.py ++src/jarabe/model/processmanagement.py + src/jarabe/view/buddymenu.py + src/jarabe/view/keyhandler.py + src/jarabe/view/launcher.py + src/jarabe/view/palettes.py + src/jarabe/view/viewsource.py +- +diff --git a/po/es.po b/po/es.po +index 587608f..84a5a52 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -6,14 +6,14 @@ msgid "" + msgstr "" + "Project-Id-Version: olpc-sugar\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2009-09-05 00:31-0400\n" ++"POT-Creation-Date: 2010-06-30 13:58-0400\n" + "PO-Revision-Date: 2010-01-18 19:18+0200\n" + "Last-Translator: Chris <cjl@laptop.org>\n" + "Language-Team: Fedora Spanish <fedora-trans-es@redhat.com>\n" +-"Language: es\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"Language: es\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Pootle 2.0.1\n" + "X-Poedit-Language: Spanish\n" +@@ -56,7 +56,7 @@ msgstr "Error en modificadores de color especificados." + msgid "Error in specified colors." + msgstr "Error en colores especificados." + +-#: ../extensions/cpsection/aboutme/view.py:94 ../src/jarabe/intro/window.py:92 ++#: ../extensions/cpsection/aboutme/view.py:94 ../src/jarabe/intro/window.py:93 + msgid "Name:" + msgstr "Nombre:" + +@@ -129,7 +129,7 @@ msgstr "Fecha y hora" + msgid "Error timezone does not exist." + msgstr "Error, zona horaria no existe." + +-#: ../extensions/cpsection/datetime/view.py:68 ../data/sugar.schemas.in.h:27 ++#: ../extensions/cpsection/datetime/view.py:68 ../data/sugar.schemas.in.h:47 + msgid "Timezone" + msgstr "Zona horaria" + +@@ -172,15 +172,15 @@ msgstr "Borde" + msgid "Keyboard" + msgstr "Teclado" + +-#: ../extensions/cpsection/keyboard/view.py:187 ++#: ../extensions/cpsection/keyboard/view.py:189 + msgid "Keyboard Model" + msgstr "Modelo de teclado" + +-#: ../extensions/cpsection/keyboard/view.py:243 ++#: ../extensions/cpsection/keyboard/view.py:248 + msgid "Key(s) to change layout" + msgstr "Tecla(s) para cambiar el diseño" + +-#: ../extensions/cpsection/keyboard/view.py:311 ++#: ../extensions/cpsection/keyboard/view.py:318 + msgid "Keyboard Layout(s)" + msgstr "Diseño(s) de teclado" + +@@ -212,6 +212,43 @@ msgstr "" + "Añade idiomas en el orden que prefieres. Si una traducción no se encuentra " + "disponible, se usará la siguiente en la lista." + ++#: ../extensions/cpsection/modemconfiguration/__init__.py:21 ++msgid "Modem Configuration" ++msgstr "Configuración del Modem" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:91 ++#, fuzzy ++msgid "Username:" ++msgstr "Nombre de usuario" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:102 ++msgid "Password:" ++msgstr "Contraseña:" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:113 ++#, fuzzy ++msgid "Number:" ++msgstr "Número:" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:124 ++msgid "Access Point Name (APN):" ++msgstr "Punto de Acceso (APN):" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:135 ++msgid "Personal Identity Number (PIN):" ++msgstr "Número de Identificación Personal (PIN):" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:146 ++msgid "Personal Unblocking Key (PUK):" ++msgstr "Llave de Desbloqueo Personal (PUK):" ++ ++#: ../extensions/cpsection/modemconfiguration/view.py:167 ++msgid "" ++"You will need to provide the following information to set up a mobile " ++"broadband connection to a cellular (3G) network." ++msgstr "Será necesario proveer la siguiente información a fin de utilizar " ++"el dispositivo celular (3G)." ++ + #: ../extensions/cpsection/network/__init__.py:21 + #: ../extensions/cpsection/network/view.py:28 + msgid "Network" +@@ -270,11 +307,11 @@ msgstr "Servidor:" + msgid "Power" + msgstr "Energía" + +-#: ../extensions/cpsection/power/model.py:54 ++#: ../extensions/cpsection/power/model.py:85 + msgid "Error in automatic pm argument, use on/off." + msgstr "Error en argumento automático de pm, use on/off." + +-#: ../extensions/cpsection/power/model.py:81 ++#: ../extensions/cpsection/power/model.py:112 + msgid "Error in extreme pm argument, use on/off." + msgstr "Error en argumento extremo de pm, use on/off." + +@@ -298,7 +335,7 @@ msgstr "" + msgid "Software update" + msgstr "Actualización de Software" + +-#: ../extensions/cpsection/updater/view.py:62 ++#: ../extensions/cpsection/updater/view.py:63 + msgid "" + "Software updates correct errors, eliminate security vulnerabilities, and " + "provide new features." +@@ -306,79 +343,79 @@ msgstr "" + "Las actualizaciones de software corrigen errores, eliminan vulnerabilidades " + "de seguridad y proveen nuevas características." + +-#: ../extensions/cpsection/updater/view.py:122 ++#: ../extensions/cpsection/updater/view.py:125 + #, python-format + msgid "Checking %s..." + msgstr "Probando %s..." + +-#: ../extensions/cpsection/updater/view.py:124 ++#: ../extensions/cpsection/updater/view.py:127 + #, python-format + msgid "Downloading %s..." + msgstr "Descargando %s..." + +-#: ../extensions/cpsection/updater/view.py:126 ++#: ../extensions/cpsection/updater/view.py:129 + #, python-format + msgid "Updating %s..." + msgstr "Actualizando %s..." + +-#: ../extensions/cpsection/updater/view.py:135 ++#: ../extensions/cpsection/updater/view.py:139 + msgid "Your software is up-to-date" + msgstr "Tu software esta actualizado" + +-#: ../extensions/cpsection/updater/view.py:137 ++#: ../extensions/cpsection/updater/view.py:141 + #, python-format + msgid "You can install %s update" + msgid_plural "You can install %s updates" + msgstr[0] "Puedes instalar %s actualización" + msgstr[1] "Puedes instalar %s actualizaciones" + +-#: ../extensions/cpsection/updater/view.py:155 ++#: ../extensions/cpsection/updater/view.py:159 + msgid "Checking for updates..." + msgstr "Buscando actualizaciones..." + +-#: ../extensions/cpsection/updater/view.py:160 ++#: ../extensions/cpsection/updater/view.py:164 + msgid "Installing updates..." + msgstr "Instalando actualizaciones..." + +-#: ../extensions/cpsection/updater/view.py:165 ++#: ../extensions/cpsection/updater/view.py:172 + #, python-format + msgid "%s update was installed" + msgid_plural "%s updates were installed" + msgstr[0] "%s actualización fue instalada" + msgstr[1] "%s actualizaciones fueron instaladas" + +-#: ../extensions/cpsection/updater/view.py:244 ++#: ../extensions/cpsection/updater/view.py:253 + msgid "Install selected" + msgstr "Instalación seleccionada" + +-#: ../extensions/cpsection/updater/view.py:265 ++#: ../extensions/cpsection/updater/view.py:274 + #, python-format + msgid "Download size: %s" + msgstr "Tamaño de descarga: %s" + +-#: ../extensions/cpsection/updater/view.py:353 ++#: ../extensions/cpsection/updater/view.py:362 + #, python-format + msgid "From version %(current)d to %(new)s (Size: %(size)s)" + msgstr "Desde la version %(current)d hacia %(new)s (Size: %(size)s)" + + #. TRANS: download size is 0 +-#: ../extensions/cpsection/updater/view.py:373 ++#: ../extensions/cpsection/updater/view.py:382 + msgid "None" + msgstr "Ninguno" + + #. TRANS: download size of very small updates +-#: ../extensions/cpsection/updater/view.py:376 ++#: ../extensions/cpsection/updater/view.py:385 + msgid "1 KB" + msgstr "1 KB" + + #. TRANS: download size of small updates, e.g. '250 KB' +-#: ../extensions/cpsection/updater/view.py:379 ++#: ../extensions/cpsection/updater/view.py:388 + #, python-format + msgid "%.0f KB" + msgstr "%.0f KB" + + #. TRANS: download size of updates, e.g. '2.3 MB' +-#: ../extensions/cpsection/updater/view.py:382 ++#: ../extensions/cpsection/updater/view.py:391 + #, python-format + msgid "%.1f MB" + msgstr "%.1f MB" +@@ -408,7 +445,7 @@ msgstr "Quedan %(hour)d:%(min).2d" + msgid "Charged" + msgstr "Cargada" + +-#: ../extensions/deviceicon/network.py:44 ++#: ../extensions/deviceicon/network.py:49 + #, python-format + msgid "IP address: %s" + msgstr "Direccion IP: %s" +@@ -417,43 +454,102 @@ msgstr "Direccion IP: %s" + # priority over the normal wireless device. NM doesn't have a "disconnect" + # method for a device either (for various reasons) so this doesn't + # have a good mapping +-#: ../extensions/deviceicon/network.py:110 ++#: ../extensions/deviceicon/network.py:112 + msgid "Disconnect..." + msgstr "Desconectando..." + +-#: ../extensions/deviceicon/network.py:114 ++#: ../extensions/deviceicon/network.py:117 + msgid "Create new wireless network" + msgstr "Crear nueva red inalámbrica" + +-#: ../extensions/deviceicon/network.py:120 +-#: ../src/jarabe/desktop/meshbox.py:264 ++#: ../extensions/deviceicon/network.py:123 ++#: ../extensions/deviceicon/network.py:285 ++#: ../src/jarabe/desktop/meshbox.py:247 ../src/jarabe/desktop/meshbox.py:536 + msgid "Connecting..." + msgstr "Conectando..." + + # TODO: show the channel number +-#: ../extensions/deviceicon/network.py:124 +-#: ../extensions/deviceicon/network.py:186 +-#: ../src/jarabe/desktop/meshbox.py:270 ++#: ../extensions/deviceicon/network.py:127 ++#: ../extensions/deviceicon/network.py:199 ++#: ../extensions/deviceicon/network.py:289 ++#: ../src/jarabe/desktop/meshbox.py:253 ../src/jarabe/desktop/meshbox.py:542 + msgid "Connected" + msgstr "Conectado" + +-#: ../extensions/deviceicon/network.py:146 ++#: ../extensions/deviceicon/network.py:159 + msgid "Channel" + msgstr "Canal" + +-#: ../extensions/deviceicon/network.py:161 ++#: ../extensions/deviceicon/network.py:174 + msgid "Wired Network" + msgstr "Red Cableada" + +-#: ../extensions/deviceicon/network.py:189 ++#: ../extensions/deviceicon/network.py:202 + msgid "Speed" + msgstr "Velocidad" + +-#: ../extensions/deviceicon/network.py:415 +-#, python-format +-msgid "%s's network %s" ++#: ../extensions/deviceicon/network.py:229 ++#, fuzzy ++msgid "Wireless modem" ++msgstr "Modem inalámbrico" ++ ++#: ../extensions/deviceicon/network.py:277 ++msgid "Please wait..." ++msgstr "Favor espere..." ++ ++#: ../extensions/deviceicon/network.py:280 ++#: ../src/jarabe/desktop/meshbox.py:163 ../src/jarabe/desktop/meshbox.py:493 ++msgid "Connect" ++msgstr "Conectar" ++ ++#: ../extensions/deviceicon/network.py:281 ++msgid "Disconnected" ++msgstr "Desconectado" ++ ++#: ../extensions/deviceicon/network.py:284 ++#: ../src/jarabe/controlpanel/toolbar.py:115 ++#: ../src/jarabe/desktop/homebox.py:68 ++#: ../src/jarabe/frame/activitiestray.py:708 ++#: ../src/jarabe/frame/activitiestray.py:807 ++#: ../src/jarabe/frame/activitiestray.py:835 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: ../extensions/deviceicon/network.py:288 ++#: ../src/jarabe/desktop/meshbox.py:167 ++msgid "Disconnect" ++msgstr "Desconectar" ++ ++#: ../extensions/deviceicon/network.py:292 ++msgid "Sim requires Pin/Puk" ++msgstr "Requiere PIN y PUK." ++ ++#: ../extensions/deviceicon/network.py:293 ++#, fuzzy ++msgid "Authentication Error" ++msgstr "Error de autenticación:" ++ ++#: ../extensions/deviceicon/network.py:538 ++#, fuzzy, python-format ++msgid "%s's network" + msgstr "%s's red %s" + ++#: ../extensions/deviceicon/network.py:605 ++#: ../extensions/deviceicon/network.py:664 ++msgid "Mesh Network" ++msgstr "Red Malla" ++ ++#: ../extensions/deviceicon/network.py:869 ++#, python-format ++msgid "Data sent %d KB / received %d KB" ++msgstr "" ++ ++# TODO: show the channel number ++#: ../extensions/deviceicon/network.py:880 ++#, fuzzy ++msgid "Connection time " ++msgstr "Conectado" ++ + #: ../extensions/deviceicon/speaker.py:59 + msgid "My Speakers" + msgstr "Mis parlantes" +@@ -467,39 +563,49 @@ msgstr "Dar voz" + msgid "Mute" + msgstr "Silenciar" + +-#: ../extensions/globalkey/screenshot.py:56 ++#: ../extensions/globalkey/screenshot.py:59 + msgid "Mesh" + msgstr "Malla" + +-#: ../extensions/globalkey/screenshot.py:58 ++#: ../extensions/globalkey/screenshot.py:61 + #: ../src/jarabe/frame/zoomtoolbar.py:39 + msgid "Group" + msgstr "Grupo" + +-#: ../extensions/globalkey/screenshot.py:60 ++#: ../extensions/globalkey/screenshot.py:63 + #: ../src/jarabe/frame/zoomtoolbar.py:41 + msgid "Home" + msgstr "Hogar" + +-#: ../extensions/globalkey/screenshot.py:66 ++#: ../extensions/globalkey/screenshot.py:69 + #: ../src/jarabe/frame/zoomtoolbar.py:43 + msgid "Activity" + msgstr "Actividad" + +-#: ../extensions/globalkey/screenshot.py:69 ++#: ../extensions/globalkey/screenshot.py:72 + msgid "Screenshot" + msgstr "Captura de pantalla" + +-#: ../extensions/globalkey/screenshot.py:71 ++#: ../extensions/globalkey/screenshot.py:74 + #, python-format + msgid "Screenshot of \"%s\"" + msgstr "Captura pantalla de \"%s\"" + + #: ../data/sugar.schemas.in.h:1 ++msgid "" ++"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " ++"long name." ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:2 ++msgid "Additional directories which can contain updated translations." ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:3 + msgid "Backup URL" + msgstr "URL de Respaldo" + +-#: ../data/sugar.schemas.in.h:2 ++#: ../data/sugar.schemas.in.h:4 + msgid "" + "Color for the XO icon that is used throughout the desktop. The string is " + "composed of the stroke color and fill color, format is that of rbg colors. " +@@ -510,32 +616,109 @@ msgstr "" + "colores RBG. Ejemplo: #AC32FF, #9A5200" + + # es la mejor traduccion ? +-#: ../data/sugar.schemas.in.h:3 ++#: ../data/sugar.schemas.in.h:5 + msgid "Corner Delay" + msgstr "Retraso de las Esquinas" + +-#: ../data/sugar.schemas.in.h:4 ++#: ../data/sugar.schemas.in.h:6 ++msgid "Default font face" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:7 ++msgid "Default font size" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:8 ++msgid "Default nick" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:9 + msgid "Delay for the activation of the frame using the corners." + msgstr "Retraso para la activación del cuadro utilizando las esquinas." + +-#: ../data/sugar.schemas.in.h:5 ++#: ../data/sugar.schemas.in.h:10 + msgid "Delay for the activation of the frame using the edges." + msgstr "Retraso para la activación del cuadro utilizando los bordes." + ++#: ../data/sugar.schemas.in.h:11 ++msgid "Directory to search for translations" ++msgstr "" ++ + # es la mejor traduccion ? +-#: ../data/sugar.schemas.in.h:6 ++#: ../data/sugar.schemas.in.h:12 + msgid "Edge Delay" + msgstr "Retraso del Borde" + +-#: ../data/sugar.schemas.in.h:7 ++#: ../data/sugar.schemas.in.h:13 + msgid "Favorites Layout" + msgstr "Diseño de favoritos" + +-#: ../data/sugar.schemas.in.h:8 ++#: ../data/sugar.schemas.in.h:14 + msgid "Favorites resume mode" + msgstr "Modo de reanudar favoritos" + +-#: ../data/sugar.schemas.in.h:9 ++#: ../data/sugar.schemas.in.h:15 ++#, fuzzy ++msgid "Font face that is used throughout the desktop." ++msgstr "Nombre de usuario que se utiliza en todo el escritorio." ++ ++#: ../data/sugar.schemas.in.h:16 ++#, fuzzy ++msgid "Font size that is used throughout the desktop." ++msgstr "Nombre de usuario que se utiliza en todo el escritorio." ++ ++#: ../data/sugar.schemas.in.h:17 ++#, fuzzy ++msgid "GSM network APN" ++msgstr "%s's red %s" ++ ++#: ../data/sugar.schemas.in.h:18 ++#, fuzzy ++msgid "GSM network PIN" ++msgstr "%s's red %s" ++ ++#: ../data/sugar.schemas.in.h:19 ++#, fuzzy ++msgid "GSM network PUK" ++msgstr "%s's red %s" ++ ++#: ../data/sugar.schemas.in.h:20 ++msgid "GSM network access point name configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:21 ++msgid "GSM network number" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:22 ++msgid "GSM network password" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:23 ++msgid "GSM network password configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:24 ++msgid "GSM network personal identification number configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:25 ++msgid "GSM network personal unlock key configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:26 ++msgid "GSM network telephone number configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:27 ++msgid "GSM network username" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:28 ++msgid "GSM network username configuration" ++msgstr "" ++ ++#: ../data/sugar.schemas.in.h:29 + msgid "" + "If TRUE, Sugar will make us searchable for the other users of the Jabber " + "server." +@@ -543,110 +726,110 @@ msgstr "" + "Si es TRUE, Azúcar habilitará que otros usuarios nos busquen en el servidor " + "Jabber." + +-#: ../data/sugar.schemas.in.h:10 ++#: ../data/sugar.schemas.in.h:30 + msgid "If TRUE, Sugar will show a \"Log out\" option." + msgstr "Si es TRUE, Azúcar mostrará una opción \"Terminar Sesión\"." + +-#: ../data/sugar.schemas.in.h:11 ++#: ../data/sugar.schemas.in.h:31 + msgid "Jabber Server" + msgstr "Servidor Jabber" + +-#: ../data/sugar.schemas.in.h:12 ++#: ../data/sugar.schemas.in.h:32 + msgid "Keyboard layouts" + msgstr "Distribuciones del teclado" + +-#: ../data/sugar.schemas.in.h:13 ++#: ../data/sugar.schemas.in.h:33 + msgid "Keyboard model" + msgstr "Modelo del teclado" + +-#: ../data/sugar.schemas.in.h:14 ++#: ../data/sugar.schemas.in.h:34 + msgid "Keyboard options" + msgstr "Opciones del teclado" + +-#: ../data/sugar.schemas.in.h:15 ++#: ../data/sugar.schemas.in.h:35 + msgid "Layout of the favorites view." + msgstr "Distribución de las actividades favoritas." + +-#: ../data/sugar.schemas.in.h:16 ++#: ../data/sugar.schemas.in.h:36 + msgid "" + "List of keyboard layouts. Each entry should be in the form layout(variant)" + msgstr "" + "Lista de las distribuciones de teclado. Cada entrada debe ser en la forma " + "distribución(variante)" + +-#: ../data/sugar.schemas.in.h:17 ++#: ../data/sugar.schemas.in.h:37 + msgid "List of keyboard options." + msgstr "Lista de las opciones del teclado." + +-#: ../data/sugar.schemas.in.h:18 ++#: ../data/sugar.schemas.in.h:38 + msgid "Power Automatic" + msgstr "Manejo automática de energía" + +-#: ../data/sugar.schemas.in.h:19 ++#: ../data/sugar.schemas.in.h:39 + msgid "Power Automatic." + msgstr "Manejo automática de energía." + +-#: ../data/sugar.schemas.in.h:20 ++#: ../data/sugar.schemas.in.h:40 + msgid "Power Extreme" + msgstr "Manejo extremo de energía" + +-#: ../data/sugar.schemas.in.h:21 ++#: ../data/sugar.schemas.in.h:41 + msgid "Power Extreme." + msgstr "Manejo extremo de energía." + +-#: ../data/sugar.schemas.in.h:22 ++#: ../data/sugar.schemas.in.h:42 + msgid "Publish to Gadget" + msgstr "Publicar en Gadget" + +-#: ../data/sugar.schemas.in.h:23 ++#: ../data/sugar.schemas.in.h:43 + msgid "Setting for muting the sound device." + msgstr "Configuración para silenciar el dispositivo de sonido." + +-#: ../data/sugar.schemas.in.h:24 ++#: ../data/sugar.schemas.in.h:44 + msgid "Show Log out" + msgstr "Mostrar Terminar Sesión" + +-#: ../data/sugar.schemas.in.h:25 ++#: ../data/sugar.schemas.in.h:45 + msgid "Sound Muted" + msgstr "Sonido silenciado" + +-#: ../data/sugar.schemas.in.h:26 ++#: ../data/sugar.schemas.in.h:46 + msgid "The keyboard model to be used" + msgstr "El modelo del teclado que se utilizará" + +-#: ../data/sugar.schemas.in.h:28 ++#: ../data/sugar.schemas.in.h:48 + msgid "Timezone setting for the system." + msgstr "Configuración de zona horaria para el sistema." + +-#: ../data/sugar.schemas.in.h:29 ++#: ../data/sugar.schemas.in.h:49 + msgid "Url of the jabber server to use." + msgstr "URL del servidor de Jabber para usar." + +-#: ../data/sugar.schemas.in.h:30 ++#: ../data/sugar.schemas.in.h:50 + msgid "Url where the backup is saved to." + msgstr "URL donde se guarda el backup." + +-#: ../data/sugar.schemas.in.h:31 ++#: ../data/sugar.schemas.in.h:51 + msgid "User Color" + msgstr "Color del usuario" + +-#: ../data/sugar.schemas.in.h:32 ++#: ../data/sugar.schemas.in.h:52 + msgid "User Name" + msgstr "Nombre de usuario" + +-#: ../data/sugar.schemas.in.h:33 ++#: ../data/sugar.schemas.in.h:53 + msgid "User name that is used throughout the desktop." + msgstr "Nombre de usuario que se utiliza en todo el escritorio." + +-#: ../data/sugar.schemas.in.h:34 ++#: ../data/sugar.schemas.in.h:54 + msgid "Volume Level" + msgstr "Nivel de volumen" + +-#: ../data/sugar.schemas.in.h:35 ++#: ../data/sugar.schemas.in.h:55 + msgid "Volume level for the sound device." + msgstr "Nivel de volumen para el dispositivo de sonido." + +-#: ../data/sugar.schemas.in.h:36 ++#: ../data/sugar.schemas.in.h:56 + msgid "" + "When in resume mode, clicking on a favorite icon will cause the last entry " + "for that activity to be resumed." +@@ -705,68 +888,47 @@ msgstr "" + msgid "To apply your changes you have to restart sugar.\n" + msgstr "Para aplicar sus cambios tiene que reiniciar Azúcar.\n" + +-#: ../src/jarabe/controlpanel/gui.py:280 ++#: ../src/jarabe/controlpanel/gui.py:281 + msgid "Warning" + msgstr "Advertencia" + +-#: ../src/jarabe/controlpanel/gui.py:281 ++#: ../src/jarabe/controlpanel/gui.py:282 + #: ../src/jarabe/controlpanel/sectionview.py:42 + msgid "Changes require restart" + msgstr "Los cambios requieren reiniciar" + +-#: ../src/jarabe/controlpanel/gui.py:284 ++#: ../src/jarabe/controlpanel/gui.py:285 + msgid "Cancel changes" + msgstr "Cancelar cambios" + +-#: ../src/jarabe/controlpanel/gui.py:289 ../src/jarabe/desktop/homebox.py:70 ++#: ../src/jarabe/controlpanel/gui.py:290 ../src/jarabe/desktop/homebox.py:70 + msgid "Later" + msgstr "Después" + +-#: ../src/jarabe/controlpanel/gui.py:293 ++#: ../src/jarabe/controlpanel/gui.py:294 + msgid "Restart now" + msgstr "Reiniciar ahora" + +-#: ../src/jarabe/controlpanel/toolbar.py:61 ../src/jarabe/intro/window.py:188 ++#: ../src/jarabe/controlpanel/toolbar.py:61 ../src/jarabe/intro/window.py:206 + msgid "Done" + msgstr "Hecho" + +-#: ../src/jarabe/controlpanel/toolbar.py:115 +-#: ../src/jarabe/desktop/homebox.py:68 +-#: ../src/jarabe/frame/activitiestray.py:726 +-#: ../src/jarabe/frame/activitiestray.py:822 +-#: ../src/jarabe/frame/activitiestray.py:850 +-msgid "Cancel" +-msgstr "Cancelar" +- + #: ../src/jarabe/controlpanel/toolbar.py:121 +-#: ../src/jarabe/desktop/favoritesview.py:332 ++#: ../src/jarabe/desktop/favoritesview.py:335 ++#: ../src/jarabe/desktop/favoritesview.py:660 + msgid "Ok" + msgstr "Ok" + +-#: ../src/jarabe/desktop/activitieslist.py:80 +-#: ../src/jarabe/journal/listview.py:147 +-msgid "Title" +-msgstr "Título" +- +-#: ../src/jarabe/desktop/activitieslist.py:91 +-msgid "Version" +-msgstr "Versión" +- +-#: ../src/jarabe/desktop/activitieslist.py:105 +-#: ../src/jarabe/journal/listview.py:178 +-msgid "Date" +-msgstr "Fecha" +- +-#: ../src/jarabe/desktop/activitieslist.py:234 ++#: ../src/jarabe/desktop/activitieslist.py:236 + #, python-format + msgid "Version %s" + msgstr "Versión %s" + +-#: ../src/jarabe/desktop/activitieslist.py:355 ++#: ../src/jarabe/desktop/activitieslist.py:357 + msgid "Confirm erase" + msgstr "Confirmar borrado" + +-#: ../src/jarabe/desktop/activitieslist.py:357 ++#: ../src/jarabe/desktop/activitieslist.py:359 + #, python-format + msgid "Confirm erase: Do you want to permanently erase %s?" + msgstr "Confirmar el borrado: ¿Quiere borrar %s de forma permanente?" +@@ -775,24 +937,24 @@ msgstr "Confirmar el borrado: ¿Quiere borrar %s de forma permanente?" + # TODO: Implement stopping downloads + # self._stop_item.connect('activate', self._stop_item_activate_cb) + # self.append_menu_item(self._stop_item) +-#: ../src/jarabe/desktop/activitieslist.py:361 +-#: ../src/jarabe/frame/clipboardmenu.py:62 ++#: ../src/jarabe/desktop/activitieslist.py:363 ++#: ../src/jarabe/frame/clipboardmenu.py:63 + #: ../src/jarabe/view/viewsource.py:218 + msgid "Keep" + msgstr "Guardar" + +-#: ../src/jarabe/desktop/activitieslist.py:364 +-#: ../src/jarabe/desktop/activitieslist.py:407 +-#: ../src/jarabe/journal/journaltoolbox.py:360 +-#: ../src/jarabe/journal/palettes.py:112 ++#: ../src/jarabe/desktop/activitieslist.py:366 ++#: ../src/jarabe/desktop/activitieslist.py:409 ++#: ../src/jarabe/journal/journaltoolbox.py:361 ++#: ../src/jarabe/journal/palettes.py:106 + msgid "Erase" + msgstr "Borrar" + +-#: ../src/jarabe/desktop/activitieslist.py:428 ++#: ../src/jarabe/desktop/activitieslist.py:430 + msgid "Remove favorite" + msgstr "Remover favorito" + +-#: ../src/jarabe/desktop/activitieslist.py:432 ++#: ../src/jarabe/desktop/activitieslist.py:434 + msgid "Make favorite" + msgstr "Hacer favorito" + +@@ -826,27 +988,38 @@ msgstr "Caja" + msgid "Triangle" + msgstr "Triángulo" + +-#: ../src/jarabe/desktop/favoritesview.py:323 ++#: ../src/jarabe/desktop/favoritesview.py:325 + msgid "Registration Failed" + msgstr "Registro fallido" + +-#: ../src/jarabe/desktop/favoritesview.py:324 ++#: ../src/jarabe/desktop/favoritesview.py:326 + #, python-format + msgid "%s" + msgstr "%s" + +-#: ../src/jarabe/desktop/favoritesview.py:326 ++#: ../src/jarabe/desktop/favoritesview.py:328 + msgid "Registration Successful" + msgstr "Registro exitoso" + +-#: ../src/jarabe/desktop/favoritesview.py:327 ++#: ../src/jarabe/desktop/favoritesview.py:329 + msgid "You are now registered with your school server." + msgstr "Ahora estás registrado en el servidor de colegio." + +-#: ../src/jarabe/desktop/favoritesview.py:671 ++#: ../src/jarabe/desktop/favoritesview.py:633 ++#: ../src/jarabe/desktop/favoritesview.py:638 + msgid "Register" + msgstr "Registro" + ++#: ../src/jarabe/desktop/favoritesview.py:658 ++#, fuzzy ++msgid "Unregistration Successful" ++msgstr "Registro exitoso" ++ ++#: ../src/jarabe/desktop/favoritesview.py:659 ++#, fuzzy ++msgid "You are not registered anymore" ++msgstr "Ahora estás registrado en el servidor de colegio." ++ + #: ../src/jarabe/desktop/homebox.py:63 + msgid "Software Update" + msgstr "Actualización de Software" +@@ -877,112 +1050,109 @@ msgid "<Ctrl>1" + msgstr "<Ctrl>1" + + # This is an encryption key type, not a keyboard key +-#: ../src/jarabe/desktop/keydialog.py:131 ++#: ../src/jarabe/desktop/keydialog.py:135 + msgid "Key Type:" + msgstr "Tipo de clave:" + +-#: ../src/jarabe/desktop/keydialog.py:151 ++#: ../src/jarabe/desktop/keydialog.py:155 + msgid "Authentication Type:" + msgstr "Tipo de autenticación:" + +-#: ../src/jarabe/desktop/keydialog.py:215 ++#: ../src/jarabe/desktop/keydialog.py:220 + msgid "WPA & WPA2 Personal" + msgstr "WPA y WPA2 Personal" + +-#: ../src/jarabe/desktop/keydialog.py:224 ++#: ../src/jarabe/desktop/keydialog.py:229 + msgid "Wireless Security:" + msgstr "Seguridad inalámbrica:" + +-#: ../src/jarabe/desktop/meshbox.py:136 +-msgid "Connect" +-msgstr "Conectar" +- +-#: ../src/jarabe/desktop/meshbox.py:140 +-msgid "Disconnect" +-msgstr "Desconectar" ++#: ../src/jarabe/desktop/meshbox.py:491 ++#, fuzzy, python-format ++msgid "Mesh Network %d" ++msgstr "Red Malla" + + # TRANS: Action label for resuming an activity. + #. TRANS: Action label for resuming an activity. +-#: ../src/jarabe/desktop/meshbox.py:466 +-#: ../src/jarabe/frame/activitiestray.py:761 +-#: ../src/jarabe/journal/journaltoolbox.py:428 +-#: ../src/jarabe/journal/palettes.py:72 ../src/jarabe/view/palettes.py:64 ++#: ../src/jarabe/desktop/meshbox.py:628 ++#: ../src/jarabe/frame/activitiestray.py:743 ++#: ../src/jarabe/journal/journaltoolbox.py:440 ++#: ../src/jarabe/journal/palettes.py:66 ../src/jarabe/view/palettes.py:82 + msgid "Resume" + msgstr "Retomar" + +-#: ../src/jarabe/desktop/meshbox.py:471 +-#: ../src/jarabe/frame/activitiestray.py:235 ++#: ../src/jarabe/desktop/meshbox.py:633 ++#: ../src/jarabe/frame/activitiestray.py:241 + msgid "Join" + msgstr "Unirse" + +-#: ../src/jarabe/desktop/schoolserver.py:103 ++#: ../src/jarabe/desktop/schoolserver.py:104 + msgid "Cannot connect to the server." + msgstr "No se puede conectar al servidor." + +-#: ../src/jarabe/desktop/schoolserver.py:108 ++#: ../src/jarabe/desktop/schoolserver.py:109 + msgid "The server could not complete the request." + msgstr "El servidor no pudo completar el pedido." + +-#: ../src/jarabe/frame/activitiestray.py:240 +-#: ../src/jarabe/frame/activitiestray.py:698 ++#: ../src/jarabe/frame/activitiestray.py:246 ++#: ../src/jarabe/frame/activitiestray.py:680 + msgid "Decline" + msgstr "Rechazar" + +-#: ../src/jarabe/frame/activitiestray.py:650 ++#: ../src/jarabe/frame/activitiestray.py:632 + #, python-format + msgid "%dB" + msgstr "%dB" + +-#: ../src/jarabe/frame/activitiestray.py:652 ++#: ../src/jarabe/frame/activitiestray.py:634 + #, python-format + msgid "%dKB" + msgstr "%dKB" + +-#: ../src/jarabe/frame/activitiestray.py:654 ++#: ../src/jarabe/frame/activitiestray.py:636 + #, python-format + msgid "%dMB" + msgstr "%dMB" + +-#: ../src/jarabe/frame/activitiestray.py:671 ++#: ../src/jarabe/frame/activitiestray.py:653 + #, python-format + msgid "%s of %s" + msgstr "%s de %s" + +-#: ../src/jarabe/frame/activitiestray.py:683 ++#: ../src/jarabe/frame/activitiestray.py:665 + #, python-format + msgid "Transfer from %r" + msgstr "Transferencia desde %r" + +-#: ../src/jarabe/frame/activitiestray.py:693 ++#: ../src/jarabe/frame/activitiestray.py:675 + msgid "Accept" + msgstr "Aceptar" + +-#: ../src/jarabe/frame/activitiestray.py:716 +-#: ../src/jarabe/frame/activitiestray.py:840 ++#: ../src/jarabe/frame/activitiestray.py:698 ++#: ../src/jarabe/frame/activitiestray.py:825 + #, python-format + msgid "%s (%s)" + msgstr "%s (%s)" + +-#: ../src/jarabe/frame/activitiestray.py:750 +-#: ../src/jarabe/frame/activitiestray.py:875 ++#: ../src/jarabe/frame/activitiestray.py:732 ++#: ../src/jarabe/frame/activitiestray.py:860 + msgid "Dismiss" + msgstr "Descartar" + +-#: ../src/jarabe/frame/activitiestray.py:810 ++#: ../src/jarabe/frame/activitiestray.py:795 + #, python-format + msgid "Transfer to %r" + msgstr "Transferencia a %r" + +-#: ../src/jarabe/frame/clipboardmenu.py:52 ../src/jarabe/view/palettes.py:218 ++#: ../src/jarabe/frame/clipboardmenu.py:53 ../src/jarabe/view/palettes.py:236 + msgid "Remove" +-msgstr "Eliminar" ++msgstr "Quitar" + +-#: ../src/jarabe/frame/clipboardmenu.py:57 +-#: ../src/jarabe/frame/clipboardmenu.py:80 ++#: ../src/jarabe/frame/clipboardmenu.py:58 ++#: ../src/jarabe/frame/clipboardmenu.py:81 + msgid "Open" + msgstr "Abrir" + +-#: ../src/jarabe/frame/clipboardmenu.py:85 ++#: ../src/jarabe/frame/clipboardmenu.py:86 + msgid "Open with" + msgstr "Abrir con" + +@@ -1011,140 +1181,142 @@ msgstr "F3" + msgid "F4" + msgstr "F4" + +-#: ../src/jarabe/intro/window.py:124 ++#: ../src/jarabe/intro/window.py:128 + msgid "Click to change color:" + msgstr "Clic para cambiar de color:" + +-#: ../src/jarabe/intro/window.py:174 ../src/jarabe/journal/detailview.py:103 ++#: ../src/jarabe/intro/window.py:192 ../src/jarabe/journal/detailview.py:103 + msgid "Back" + msgstr "Atrás" + +-#: ../src/jarabe/intro/window.py:191 ++#: ../src/jarabe/intro/window.py:209 + msgid "Next" + msgstr "Siguiente" + +-#: ../src/jarabe/journal/expandedentry.py:164 +-#: ../src/jarabe/journal/palettes.py:66 ++#: ../src/jarabe/journal/expandedentry.py:151 ++#: ../src/jarabe/journal/palettes.py:60 + msgid "Untitled" + msgstr "Sin título" + +-#: ../src/jarabe/journal/expandedentry.py:210 ++#: ../src/jarabe/journal/expandedentry.py:242 + msgid "No preview" + msgstr "Sin vista previa" + +-#: ../src/jarabe/journal/expandedentry.py:229 ++#: ../src/jarabe/journal/expandedentry.py:261 + #, python-format + msgid "Kind: %s" + msgstr "Tipo: %s" + +-#: ../src/jarabe/journal/expandedentry.py:229 ++#: ../src/jarabe/journal/expandedentry.py:261 + msgid "Unknown" + msgstr "Desconocido" + +-#: ../src/jarabe/journal/expandedentry.py:230 ++#: ../src/jarabe/journal/expandedentry.py:262 + #, python-format + msgid "Date: %s" + msgstr "Fecha: %s" + +-#: ../src/jarabe/journal/expandedentry.py:231 ++#: ../src/jarabe/journal/expandedentry.py:263 + #, python-format + msgid "Size: %s" + msgstr "Tamaño: %s" + +-#: ../src/jarabe/journal/expandedentry.py:253 ../src/jarabe/journal/misc.py:92 ++#: ../src/jarabe/journal/expandedentry.py:285 ../src/jarabe/journal/misc.py:94 + msgid "No date" + msgstr "Sin fecha" + +-#: ../src/jarabe/journal/expandedentry.py:260 ++#: ../src/jarabe/journal/expandedentry.py:292 + msgid "Participants:" + msgstr "Participantes:" + +-#: ../src/jarabe/journal/expandedentry.py:283 ++#: ../src/jarabe/journal/expandedentry.py:315 + msgid "Description:" + msgstr "Descripción:" + +-#: ../src/jarabe/journal/expandedentry.py:309 ++#: ../src/jarabe/journal/expandedentry.py:340 + msgid "Tags:" + msgstr "Etiquetas:" + + #: ../src/jarabe/journal/journalactivity.py:108 +-#: ../src/jarabe/journal/volumestoolbar.py:47 ++#: ../src/jarabe/journal/journaltoolbox.py:411 ++#: ../src/jarabe/journal/volumestoolbar.py:49 + msgid "Journal" + msgstr "Diario" + +-#: ../src/jarabe/journal/journaltoolbox.py:67 ++#: ../src/jarabe/journal/journaltoolbox.py:68 + msgid "Search" + msgstr "Buscar" + +-#: ../src/jarabe/journal/journaltoolbox.py:126 ++#: ../src/jarabe/journal/journaltoolbox.py:127 + msgid "Anytime" + msgstr "Cualquier momento" + +-#: ../src/jarabe/journal/journaltoolbox.py:128 ++#: ../src/jarabe/journal/journaltoolbox.py:129 + msgid "Today" + msgstr "Hoy" + +-#: ../src/jarabe/journal/journaltoolbox.py:130 ++#: ../src/jarabe/journal/journaltoolbox.py:131 + msgid "Since yesterday" + msgstr "Desde ayer" + + # TRANS: Filter entries modified during the last 7 days. + #. TRANS: Filter entries modified during the last 7 days. +-#: ../src/jarabe/journal/journaltoolbox.py:132 ++#: ../src/jarabe/journal/journaltoolbox.py:133 + msgid "Past week" + msgstr "Última semana" + + # TRANS: Filter entries modified during the last 30 days. + #. TRANS: Filter entries modified during the last 30 days. +-#: ../src/jarabe/journal/journaltoolbox.py:134 ++#: ../src/jarabe/journal/journaltoolbox.py:135 + msgid "Past month" + msgstr "Último mes" + + # TRANS: Filter entries modified during the last 356 days. + #. TRANS: Filter entries modified during the last 356 days. +-#: ../src/jarabe/journal/journaltoolbox.py:136 ++#: ../src/jarabe/journal/journaltoolbox.py:137 + msgid "Past year" + msgstr "Último año" + +-#: ../src/jarabe/journal/journaltoolbox.py:143 ++#: ../src/jarabe/journal/journaltoolbox.py:144 + msgid "Anyone" + msgstr "Cualquiera" + +-#: ../src/jarabe/journal/journaltoolbox.py:145 ++#: ../src/jarabe/journal/journaltoolbox.py:146 + msgid "My friends" + msgstr "Mis amigos" + +-#: ../src/jarabe/journal/journaltoolbox.py:146 ++#: ../src/jarabe/journal/journaltoolbox.py:147 + msgid "My class" + msgstr "Mi clase" + + # TRANS: Item in a combo box that filters by entry type. +-#: ../src/jarabe/journal/journaltoolbox.py:274 ++#: ../src/jarabe/journal/journaltoolbox.py:275 + msgid "Anything" + msgstr "Cualquiera" + + # TODO: Add "Start with" menu item +-#: ../src/jarabe/journal/journaltoolbox.py:350 +-#: ../src/jarabe/journal/palettes.py:90 ++#: ../src/jarabe/journal/journaltoolbox.py:351 ++#: ../src/jarabe/journal/palettes.py:84 + msgid "Copy" + msgstr "Copiar" + + # TRANS: Action label for starting an entry. + #. TRANS: Action label for starting an entry. +-#: ../src/jarabe/journal/journaltoolbox.py:431 +-#: ../src/jarabe/journal/palettes.py:75 ++#: ../src/jarabe/journal/journaltoolbox.py:443 ++#: ../src/jarabe/journal/palettes.py:69 ++#: ../src/jarabe/journal/processdialog.py:115 + msgid "Start" + msgstr "Iniciar" + +-#: ../src/jarabe/journal/listview.py:361 ++#: ../src/jarabe/journal/listview.py:373 + msgid "Your Journal is empty" + msgstr "Su diario está vacío" + +-#: ../src/jarabe/journal/listview.py:363 ++#: ../src/jarabe/journal/listview.py:375 + msgid "No matching entries" + msgstr "No hay entradas coincidentes" + +-#: ../src/jarabe/journal/listview.py:374 ++#: ../src/jarabe/journal/listview.py:386 + msgid "Clear search" + msgstr "Limpiar búsqueda" + +@@ -1167,44 +1339,118 @@ msgid "Choose an object" + msgstr "Escoja un objeto" + + #: ../src/jarabe/journal/objectchooser.py:151 +-#: ../src/jarabe/view/viewsource.py:308 ++#: ../src/jarabe/journal/processdialog.py:120 ++#: ../src/jarabe/view/viewsource.py:310 + msgid "Close" + msgstr "Cerrar" + +-#: ../src/jarabe/journal/palettes.py:73 ++#: ../src/jarabe/journal/palettes.py:67 + msgid "Resume with" + msgstr "Reiniciar con" + +-#: ../src/jarabe/journal/palettes.py:76 ++#: ../src/jarabe/journal/palettes.py:70 + msgid "Start with" + msgstr "Empezar con" + +-#: ../src/jarabe/journal/palettes.py:98 ++#: ../src/jarabe/journal/palettes.py:92 + msgid "Send to" + msgstr "Enviar a" + +-#: ../src/jarabe/journal/palettes.py:107 ++#: ../src/jarabe/journal/palettes.py:101 + msgid "View Details" + msgstr "Ver detalles" + +-#: ../src/jarabe/journal/palettes.py:185 ++#: ../src/jarabe/journal/palettes.py:179 + msgid "No friends present" + msgstr "No hay amigos presentes" + + # tildes +-#: ../src/jarabe/journal/palettes.py:190 ++#: ../src/jarabe/journal/palettes.py:184 + msgid "No valid connection found" + msgstr "No se encontró una conexión válida" + + # tildes... +-#: ../src/jarabe/journal/palettes.py:218 ++#: ../src/jarabe/journal/palettes.py:212 + msgid "No activity to resume entry" + msgstr "No se encontró una actividad para retomar la entrada" + +-#: ../src/jarabe/journal/palettes.py:220 ++#: ../src/jarabe/journal/palettes.py:214 + msgid "No activity to start entry" + msgstr "No se encontró una actividad para iniciar la entrada" + ++# TRANS: label for the ring layout in the favorites view ++#: ../src/jarabe/journal/processdialog.py:48 ++#, fuzzy ++msgid "Running" ++msgstr "Ejecutando" ++ ++#: ../src/jarabe/journal/processdialog.py:49 ++msgid "Failed" ++msgstr "Fallado" ++ ++#: ../src/jarabe/journal/processdialog.py:50 ++msgid "Finished" ++msgstr "Terminado" ++ ++#: ../src/jarabe/journal/processdialog.py:125 ++#, fuzzy ++msgid "Restart" ++msgstr "Reiniciar" ++ ++#: ../src/jarabe/journal/processdialog.py:211 ++#, python-format ++msgid "Please wait, saving journal content to %s." ++msgstr "Favor espere, guardando el contenido del Diario en " ++ ++#: ../src/jarabe/journal/processdialog.py:212 ++#: ../src/jarabe/journal/processdialog.py:242 ++msgid "The journal content has been saved." ++msgstr "El contenido del Diario ha sido guardado." ++ ++#: ../src/jarabe/journal/processdialog.py:214 ++#: ../src/jarabe/journal/processdialog.py:244 ++#, fuzzy ++msgid "Backup" ++msgstr "Respaldar" ++ ++#: ../src/jarabe/journal/processdialog.py:215 ++#: ../src/jarabe/journal/processdialog.py:245 ++#, python-format ++msgid "Journal content will be saved to %s" ++msgstr "El contenido del Diario será guardado en " ++ ++#: ../src/jarabe/journal/processdialog.py:228 ++#: ../src/jarabe/journal/processdialog.py:255 ++#, python-format ++msgid "Please wait, restoring journal content from %s" ++msgstr "Favor espere, restaurando el contenido del Diario desde " ++ ++#: ../src/jarabe/journal/processdialog.py:229 ++#: ../src/jarabe/journal/processdialog.py:256 ++msgid "The journal content has been restored." ++msgstr "El contendo del Diario ha sido restaurado." ++ ++#: ../src/jarabe/journal/processdialog.py:231 ++#: ../src/jarabe/journal/processdialog.py:258 ++#, fuzzy ++msgid "Restore" ++msgstr "Restaurar" ++ ++#: ../src/jarabe/journal/processdialog.py:232 ++#: ../src/jarabe/journal/processdialog.py:259 ++#, python-format ++msgid "Journal content will be restored from %s" ++msgstr "El contenido del Diario será restaurado desde " ++ ++#: ../src/jarabe/journal/processdialog.py:241 ++#, python-format ++msgid "Please wait, saving journal content to %s" ++msgstr "Favor espere, guardando el contenido del Diario en " ++ ++#: ../src/jarabe/model/processmanagement.py:76 ++msgid "Error - Call process: " ++msgstr "Fallo en la llamada: " ++ + # "Eliminate friend"??? That's a bit harsh. Wouldn't "quitar amigo" be a better choice?-- + # agree but i preffer remover :). that verbe has the exact meaning we are looking on here. + #: ../src/jarabe/view/buddymenu.py:62 +@@ -1232,32 +1478,57 @@ msgstr "Mis ajustes" + msgid "Invite to %s" + msgstr "Invitar a %s" + +-#: ../src/jarabe/view/palettes.py:45 ++#: ../src/jarabe/view/launcher.py:190 ++#, python-format ++msgid "<b>%s</b> failed to start." ++msgstr "" ++ ++#: ../src/jarabe/view/palettes.py:50 + msgid "Starting..." + msgstr "Iniciando..." + ++#: ../src/jarabe/view/palettes.py:60 ++#, fuzzy ++msgid "Activity failed to start" ++msgstr "No se encontró una actividad para iniciar la entrada" ++ + #. TODO: share-with, keep +-#: ../src/jarabe/view/palettes.py:71 ++#: ../src/jarabe/view/palettes.py:89 + msgid "View Source" + msgstr "Ver fuente" + +-#: ../src/jarabe/view/palettes.py:82 ++#: ../src/jarabe/view/palettes.py:100 + msgid "Stop" + msgstr "Parar" + +-#: ../src/jarabe/view/palettes.py:122 ++#: ../src/jarabe/view/palettes.py:140 + msgid "Start new" + msgstr "Empezar nuevo" + +-#: ../src/jarabe/view/palettes.py:171 ++#: ../src/jarabe/view/palettes.py:189 + msgid "Show contents" + msgstr "Mostrar contenidos" + +-#: ../src/jarabe/view/palettes.py:193 ../src/jarabe/view/palettes.py:243 ++#: ../src/jarabe/view/palettes.py:211 ../src/jarabe/view/palettes.py:261 + #, python-format + msgid "%(free_space)d MB Free" + msgstr "%(free_space)d MB libres" + ++#: ../src/jarabe/view/palettes.py:280 ../src/jarabe/view/palettes.py:328 ++#, fuzzy ++msgid "Restore Journal" ++msgstr "Restaurar Diario" ++ ++#: ../src/jarabe/view/palettes.py:290 ../src/jarabe/view/palettes.py:318 ++#, fuzzy ++msgid "Backup Journal" ++msgstr "Respaldar Diario" ++ ++#: ../src/jarabe/view/palettes.py:307 ++#, fuzzy ++msgid "School Server" ++msgstr "Servidor Escuela" ++ + #: ../src/jarabe/view/viewsource.py:208 + msgid "Instance Source" + msgstr "Fuente de la instancia" +@@ -1266,31 +1537,40 @@ msgstr "Fuente de la instancia" + msgid "Source" + msgstr "Fuente" + +-#: ../src/jarabe/view/viewsource.py:292 ++#: ../src/jarabe/view/viewsource.py:294 + msgid "Activity Bundle Source" + msgstr "Fuente del paquete de la actividad" + +-#: ../src/jarabe/view/viewsource.py:299 ++#: ../src/jarabe/view/viewsource.py:301 + #, python-format + msgid "View source: %r" + msgstr "Ver código fuente: %r" + ++#, fuzzy ++#~ msgid "Documents" ++#~ msgstr "Documento" ++ ++#~ msgid "Title" ++#~ msgstr "Título" ++ ++#~ msgid "Version" ++#~ msgstr "Versión" ++ ++#~ msgid "Date" ++#~ msgstr "Fecha" ++ + #~ msgid "Cannot obtain data needed for registration." + #~ msgstr "No se puede obtener datos necesarios para el registro" + + #~ msgid "Unmount" + #~ msgstr "Desmontar" + +-#~ msgid "Restart" +-#~ msgstr "Reiniciar" +- + #~ msgid "" +-#~ "© 2008 One Laptop per Child Association Inc; Red Hat Inc; and Contributors." ++#~ "© 2008 One Laptop per Child Association Inc; Red Hat Inc; and " ++#~ "Contributors." + #~ msgstr "" +-#~ "© 2008 One Laptop per Child Association Inc; Red Hat Inc; y Contribuyentes." +- +-#~ msgid "Document" +-#~ msgstr "Documento" ++#~ "© 2008 One Laptop per Child Association Inc; Red Hat Inc; y " ++#~ "Contribuyentes." + + #~ msgid "Resume by default" + #~ msgstr "Continuar de forma predeterminada" +@@ -1306,12 +1586,6 @@ msgstr "Ver código fuente: %r" + #~ msgid "Disconnecting..." + #~ msgstr "Desconectando..." + +-#~ msgid "Mesh Network" +-#~ msgstr "Red Malla" +- +-#~ msgid "Disconnected" +-#~ msgstr "Desconectado" +- + #~ msgid "About my XO" + #~ msgstr "Acerca de mi XO" + +@@ -1340,7 +1614,6 @@ msgstr "Ver código fuente: %r" + #~ msgid "Settings" + #~ msgstr "Configuración " + +-#, python-format + #~ msgid "Clipboard object: %s." + #~ msgstr "Objeto de portapapel: %s." + +@@ -1385,16 +1658,15 @@ msgstr "Ver código fuente: %r" + #~ msgstr "encendido" + + #~ msgid "Permission denied. You need to be root to run this method." +-#~ msgstr "permiso denegado. Usted necesita ser root para ejecutar este método." ++#~ msgstr "" ++#~ "permiso denegado. Usted necesita ser root para ejecutar este método." + + #~ msgid "Error in reading timezone" + #~ msgstr "Error en la lectura de la zona horaria" + +-#, python-format + #~ msgid "Error copying timezone (from %s): %s" + #~ msgstr "Error copiando zona horaria (desde %s): %s" + +-#, python-format + #~ msgid "Changing permission of timezone: %s" + #~ msgstr "Cambiando permisos de zona horaria: %s" + +@@ -1458,43 +1730,18 @@ msgstr "Ver código fuente: %r" + #~ msgid "Paste" + #~ msgstr "Pegar" + +-#, python-format + #~ msgid "%s Activity" + #~ msgstr "Actividad %s" + +-#, python-format +-#~ msgid "Text snippet" +-#~ "Web Page" +-#~ "PDF file" +-#~ "MS Word file" +-#~ "RTF file" +-#~ "Abiword file" +-#~ "Squeak project" +-#~ "OpenOffice text file" +-#~ "Object" +-#~ "Pick a buddy picture" +-#~ "My Picture:" +-#~ "My Color:" +-#~ "Stop download" +-#~ "Close" +-#~ "No options" +-#~ "Send" +-#~ msgstr "Recorte de texto" +-#~ "Página web" +-#~ "Archivo PDF" +-#~ "Archivo MS-Word" +-#~ "Archivo RTF" +-#~ "Archivo Abiword" +-#~ "Proyecto de Squeak" +-#~ "Archivo de texto de OpenOffice" +-#~ "Objeto" +-#~ "Elegir la imagen de amigo" +-#~ "Mi imagen:" +-#~ "Mi color:" +-#~ "Interrumpir la bajada" +-#~ "Cerrar" +-#~ "Ninguna opción" +-#~ "Enviar" ++#~ msgid "" ++#~ "Text snippetWeb PagePDF fileMS Word fileRTF fileAbiword fileSqueak " ++#~ "projectOpenOffice text fileObjectPick a buddy pictureMy Picture:My Color:" ++#~ "Stop downloadCloseNo optionsSend" ++#~ msgstr "" ++#~ "Recorte de textoPágina webArchivo PDFArchivo MS-WordArchivo RTFArchivo " ++#~ "AbiwordProyecto de SqueakArchivo de texto de OpenOfficeObjetoElegir la " ++#~ "imagen de amigoMi imagen:Mi color:Interrumpir la bajadaCerrarNinguna " ++#~ "opciónEnviar" + + #~ msgid "Keep error" + #~ msgstr "Error de guardado" +@@ -1514,55 +1761,42 @@ msgstr "Ver código fuente: %r" + #~ msgid "OK" + #~ msgstr "OK" + +-#, python-format + #~ msgid "%d year" + #~ msgstr "%d año" + +-#, python-format + #~ msgid "%d years" + #~ msgstr "%d años" + +-#, python-format + #~ msgid "%d month" + #~ msgstr "%d mes" + +-#, python-format + #~ msgid "%d months" + #~ msgstr "%d meses" + +-#, python-format + #~ msgid "%d week" + #~ msgstr "%d semana" + +-#, python-format + #~ msgid "%d weeks" + #~ msgstr "%d semanas" + +-#, python-format + #~ msgid "%d day" + #~ msgstr "%d día" + +-#, python-format + #~ msgid "%d days" + #~ msgstr "%d días" + +-#, python-format + #~ msgid "%d hour" + #~ msgstr "%d hora" + +-#, python-format + #~ msgid "%d hours" + #~ msgstr "%d horas" + +-#, python-format + #~ msgid "%d minute" + #~ msgstr "%d minuto" + +-#, python-format + #~ msgid "%d minutes" + #~ msgstr "%d minutos" + +-#, python-format + #~ msgid "%d second" + #~ msgstr "%d segundo" + +-- +1.6.0.4 + diff --git a/rpms/sugar/backup-0005-save-lease.patch b/rpms/sugar/backup-0005-save-lease.patch new file mode 100644 index 0000000..6aa278f --- /dev/null +++ b/rpms/sugar/backup-0005-save-lease.patch @@ -0,0 +1,38 @@ +From b6b7fda25326042720d11434829e9ccddd0564da Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Tue, 13 Jul 2010 11:02:27 -0400 +Subject: [PATCH] Journal Backup save lease +Organization: Paraguay Educa + +This feature was requested by Caacupe CATS. +--- + bin/journal-backup-volume | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/bin/journal-backup-volume b/bin/journal-backup-volume +index 4f3ec8a..fe13004 100644 +--- a/bin/journal-backup-volume ++++ b/bin/journal-backup-volume +@@ -23,6 +23,7 @@ import logging + from sugar import env + #from sugar.datastore import datastore + ++lease_path = '/security/lease.sig' + backup_identifier = sys.argv[2] + volume_path = sys.argv[1] + +@@ -37,6 +38,11 @@ backup_path = os.path.join(volume_path, 'backup', backup_identifier) + if not os.path.exists(backup_path): + os.makedirs(backup_path) + ++# Save activation file ++if os.path.isfile(lease_path): ++ lease_content = open(lease_path).read() ++ open(os.path.join(volume_path, 'lease.sig'), 'a+').write(lease_content) ++ + #datastore.freeze() + subprocess.call(['pkill', '-9', '-f', 'python.*datastore-service']) + +-- +1.6.0.4 + diff --git a/rpms/sugar/bundle-Delete-profile-data-only-when-erased.patch b/rpms/sugar/bundle-Delete-profile-data-only-when-erased.patch new file mode 100644 index 0000000..24e64fb --- /dev/null +++ b/rpms/sugar/bundle-Delete-profile-data-only-when-erased.patch @@ -0,0 +1,52 @@ +From c0dcfaf0a0aa3fadc0c9b4c5b7f40fb0f98f21b8 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Tue, 6 Jul 2010 15:39:48 -0400 +Subject: [PATCH] Delete profile data only when erased +Organization: Paraguay Educa + +Profile data should be deleted _only_ when the +user explicitly erases the activity from the +activities list. +--- + src/jarabe/desktop/activitieslist.py | 2 +- + src/jarabe/model/bundleregistry.py | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py +index 87f2af0..0bd5aab 100644 +--- a/src/jarabe/desktop/activitieslist.py ++++ b/src/jarabe/desktop/activitieslist.py +@@ -376,7 +376,7 @@ class ActivitiesList(gtk.VBox): + if response_id == gtk.RESPONSE_OK: + registry = bundleregistry.get_registry() + bundle = registry.get_bundle(bundle_id) +- registry.uninstall(bundle) ++ registry.uninstall(bundle, delete_profile=True) + + class ActivityListPalette(ActivityPalette): + __gtype_name__ = 'SugarActivityListPalette' +diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py +index 86a2738..ae42583 100644 +--- a/src/jarabe/model/bundleregistry.py ++++ b/src/jarabe/model/bundleregistry.py +@@ -376,7 +376,7 @@ class BundleRegistry(gobject.GObject): + elif not self.add_bundle(install_path): + raise RegistrationException + +- def uninstall(self, bundle, force=False): ++ def uninstall(self, bundle, force=False, delete_profile=False): + # TODO treat ContentBundle in special way + # needs rethinking while fixing ContentBundle support + if isinstance(bundle, ContentBundle) or \ +@@ -399,7 +399,7 @@ class BundleRegistry(gobject.GObject): + + install_path = act.get_path() + +- bundle.uninstall(install_path, force) ++ bundle.uninstall(install_path, force, delete_profile) + + if not self.remove_bundle(install_path): + raise RegistrationException +-- +1.6.0.4 + diff --git a/rpms/sugar/caacupe-Protected-activities-list.patch b/rpms/sugar/caacupe-Protected-activities-list.patch new file mode 100644 index 0000000..0157ee9 --- /dev/null +++ b/rpms/sugar/caacupe-Protected-activities-list.patch @@ -0,0 +1,123 @@ +From da2f3c80ed902e40270deb4b584ca654aea6b35d Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Wed, 7 Jul 2010 11:32:30 -0400 +Subject: [PATCH] Protected activities list +Organization: Paraguay Educa + +Does not allow sugar to display erase option +for activities that are included in the +activities.protected list. + +This feature was requested by many teachers +from different diployments, in example Paraguay. +--- + data/Makefile.am | 1 + + data/activities.protected | 14 ++++++++++++++ + src/jarabe/desktop/activitieslist.py | 17 +++++++++-------- + src/jarabe/model/bundleregistry.py | 19 +++++++++++++++++-- + 4 files changed, 41 insertions(+), 10 deletions(-) + create mode 100644 data/activities.protected + +diff --git a/data/Makefile.am b/data/Makefile.am +index 6a62d23..e34930b 100644 +--- a/data/Makefile.am ++++ b/data/Makefile.am +@@ -11,6 +11,7 @@ sugar-100.gtkrc: gtkrc.em + sugardir = $(pkgdatadir)/data + sugar_DATA = \ + activities.defaults \ ++ activities.protected \ + kbdconfig \ + mime.defaults \ + GPLv2 \ +diff --git a/data/activities.protected b/data/activities.protected +new file mode 100644 +index 0000000..e3907ba +--- /dev/null ++++ b/data/activities.protected +@@ -0,0 +1,14 @@ ++# Protected activities list ++ ++org.laptop.WebActivity ++org.laptop.Calculate ++org.laptop.Chat ++org.vpri.EtoysActivity ++org.laptop.ImageViewerActivity ++org.laptop.sugar.Jukebox ++org.laptop.Log ++org.laptop.Pippy ++org.laptop.sugar.ReadActivity ++org.laptop.Terminal ++org.laptop.TurtleArtActivity ++org.laptop.AbiWordActivity +diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py +index 0bd5aab..ac9cadf 100644 +--- a/src/jarabe/desktop/activitieslist.py ++++ b/src/jarabe/desktop/activitieslist.py +@@ -405,14 +405,15 @@ class ActivityListPalette(ActivityPalette): + self.menu.append(self._favorite_item) + self._favorite_item.show() + +- if activity_info.is_user_activity(): +- menu_item = MenuItem(_('Erase'), 'list-remove') +- menu_item.connect('activate', self.__erase_activate_cb) +- self.menu.append(menu_item) +- menu_item.show() +- +- if not os.access(activity_info.get_path(), os.W_OK): +- menu_item.props.sensitive = False ++ if activity_info.is_user_activity() and \ ++ not registry.protects_activity(self._bundle_id): ++ menu_item = MenuItem(_('Erase'), 'list-remove') ++ menu_item.connect('activate', self.__erase_activate_cb) ++ self.menu.append(menu_item) ++ menu_item.show() ++ ++ if not os.access(activity_info.get_path(), os.W_OK): ++ menu_item.props.sensitive = False + + registry = bundleregistry.get_registry() + self._activity_changed_sid = registry.connect('bundle_changed', +diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py +index ae42583..20b095e 100644 +--- a/src/jarabe/model/bundleregistry.py ++++ b/src/jarabe/model/bundleregistry.py +@@ -65,11 +65,13 @@ class BundleRegistry(gobject.GObject): + + self._last_defaults_mtime = -1 + self._favorite_bundles = {} ++ self._protected_activities = [] + + try: + self._load_favorites() +- except Exception: +- logging.exception('Error while loading favorite_activities.') ++ self._load_protected() ++ except Exception, e: ++ logging.exception('Error while loading activities defaults: %s' % str(e)) + + self._merge_default_favorites() + +@@ -126,6 +128,19 @@ class BundleRegistry(gobject.GObject): + self._last_defaults_mtime = float(favorites_data['defaults-mtime']) + self._favorite_bundles = favorite_bundles + ++ def _load_protected(self): ++ f = open(os.path.join(config.data_path, 'activities.protected'), 'r') ++ ++ for line in f.readlines(): ++ line = line.strip() ++ if line and not line.startswith('#'): ++ self._protected_activities.append(line) ++ ++ f.close() ++ ++ def protects_activity(self, bundle_id): ++ return (bundle_id in self._protected_activities) ++ + def _merge_default_favorites(self): + default_activities = [] + defaults_path = os.path.join(config.data_path, 'activities.defaults') +-- +1.6.0.4 + diff --git a/rpms/sugar/click-on-journal-icons-with-a-exclusive-time-frame.patch b/rpms/sugar/click-on-journal-icons-with-a-exclusive-time-frame.patch new file mode 100644 index 0000000..c7e702b --- /dev/null +++ b/rpms/sugar/click-on-journal-icons-with-a-exclusive-time-frame.patch @@ -0,0 +1,62 @@ +From 44df38015ab61cdcb82b71d372534f4788ee3670 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Tue, 1 Jun 2010 16:50:17 -0400 +Subject: [PATCH] Click on journal icons with a exclusive time frame +Organization: Paraguay Educa + +Double-or-more clicks on Journal icons causes multiple activities +instances, saturating the whole evironment +--- + src/jarabe/journal/listview.py | 15 ++++++++++++++- + 1 files changed, 14 insertions(+), 1 deletions(-) + +diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py +index 9e19f70..2974f16 100644 +--- a/src/jarabe/journal/listview.py ++++ b/src/jarabe/journal/listview.py +@@ -39,6 +39,8 @@ UPDATE_INTERVAL = 300 + MESSAGE_EMPTY_JOURNAL = 0 + MESSAGE_NO_MATCH = 1 + ++EXCLUSIVITY_TIME = 2000 ++ + class TreeView(gtk.TreeView): + __gtype_name__ = 'JournalTreeView' + +@@ -467,6 +469,7 @@ class ListView(BaseListView): + def __init__(self): + BaseListView.__init__(self) + self._is_dragging = False ++ self._exclusivity_timer = None + + self.tree_view.connect('drag-begin', self.__drag_begin_cb) + self.tree_view.connect('button-release-event', +@@ -475,7 +478,7 @@ class ListView(BaseListView): + self.cell_title.connect('edited', self.__cell_title_edited_cb) + self.cell_title.connect('editing-canceled', self.__editing_canceled_cb) + +- self.cell_icon.connect('clicked', self.__icon_clicked_cb) ++ self.cell_icon.connect('clicked', self.__icon_clicked_exclusively) + self.cell_icon.connect('detail-clicked', self.__detail_clicked_cb) + + cell_detail = CellRendererDetail(self.tree_view) +@@ -518,6 +521,16 @@ class ListView(BaseListView): + def __detail_clicked_cb(self, cell, uid): + self.emit('detail-clicked', uid) + ++ def __icon_clicked_exclusively(self, cell, path): ++ if self._exclusivity_timer == None: ++ self._exclusivity_timer = gobject.timeout_add(EXCLUSIVITY_TIME, self.__allow_clicking) ++ self.__icon_clicked_cb(cell, path) ++ else: ++ logging.debug(_('Sorry, too soon to activate this icon again')) ++ ++ def __allow_clicking(self): ++ self._exclusivity_timer = None ++ + def __icon_clicked_cb(self, cell, path): + row = self.tree_view.get_model()[path] + metadata = model.get(row[ListModel.COLUMN_UID]) +-- +1.6.0.4 + diff --git a/rpms/sugar/cpu-and-memory-resource-indicator.patch b/rpms/sugar/cpu-and-memory-resource-indicator.patch new file mode 100644 index 0000000..e97d110 --- /dev/null +++ b/rpms/sugar/cpu-and-memory-resource-indicator.patch @@ -0,0 +1,258 @@ +From sugar-devel-bounces@lists.sugarlabs.org Fri Jul 2 17:17:43 2010 +Return-Path: <sugar-devel-bounces@lists.sugarlabs.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from solarsail.media.mit.edu (solarsail.media.mit.edu + [18.85.2.155]) by trinity.develer.com (Postfix) with ESMTPS id 47A8F1D6043 + for <bernie@codewiz.org>; Fri, 2 Jul 2010 17:17:43 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.3 at trinity.develer.com +Received: from solarsail.media.mit.edu (localhost [127.0.0.1]) by + solarsail.media.mit.edu (Postfix) with ESMTP id BF8718105; Fri, 2 Jul 2010 + 11:17:40 -0400 (EDT) +Received: from mail-pv0-f170.google.com (mail-pv0-f170.google.com + [74.125.83.170]) by solarsail.media.mit.edu (Postfix) with ESMTP id + 71632805B for <sugar-devel@lists.sugarlabs.org>; Fri, 2 Jul 2010 11:17:37 + -0400 (EDT) +Received: by pvc22 with SMTP id 22so297585pvc.29 for + <sugar-devel@lists.sugarlabs.org>; Fri, 02 Jul 2010 08:17:36 -0700 (PDT) +Received: by 10.114.146.5 with SMTP id t5mr1209378wad.4.1278083856260; Fri, + 02 Jul 2010 08:17:36 -0700 (PDT) +Received: from localhost.localdomain ([59.178.42.124]) by mx.google.com + with ESMTPS id q6sm11900844waj.10.2010.07.02.08.17.32 (version=TLSv1/SSLv3 + cipher=RC4-MD5); Fri, 02 Jul 2010 08:17:35 -0700 (PDT) +From: anishmangal2002 <anishmangal2002@gmail.com> +To: +Date: Fri, 2 Jul 2010 20:47:28 +0530 +Message-Id: <1278083848-18942-1-git-send-email-anishmangal2002@gmail.com> +X-Mailer: git-send-email 1.7.0.1 +In-Reply-To: <1> +References: <1> +Cc: sugar-devel@lists.sugarlabs.org, anishmangal2002 + <anishmangal2002@gmail.com> +Subject: [Sugar-devel] [PATCH] Add cpu and memory resource indicator to + frame +X-BeenThere: sugar-devel@lists.sugarlabs.org +X-Mailman-Version: 2.1.9 +Precedence: list +List-Id: "Discussion of Sugar development and other technical matters." + <sugar-devel.lists.sugarlabs.org> +List-Unsubscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=unsubscribe> +List-Archive: <http://lists.sugarlabs.org/archive/sugar-devel> +List-Post: <mailto:sugar-devel@lists.sugarlabs.org> +List-Help: <mailto:sugar-devel-request@lists.sugarlabs.org?subject=help> +List-Subscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: sugar-devel-bounces@lists.sugarlabs.org +Errors-To: sugar-devel-bounces@lists.sugarlabs.org +X-Spam-Status: No, score=-3.6 required=3.5 tests=AWL,BAYES_00, + DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,RCVD_IN_DNSWL_MED,T_TO_NO_BRKTS_FREEMAIL + autolearn=ham version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +Content-Transfer-Encoding: 8bit + +This patch adds an icon to the frame, whose palette +menu displays the memory and cpu resources. For computing +free memory, the code reads the /proc/meminfo file (thanks +quozl) and for computing cpu usage, the code reads the +/proc/stat file. + +The palette menu entries are only updated (in one second +intervals) when the palette menu is visible thus +possibly saving cpu cycles. + +Signed-off-by: anishmangal2002 <anishmangal2002@gmail.com> +--- + extensions/deviceicon/Makefile.am | 3 +- + extensions/deviceicon/resources.py | 159 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 161 insertions(+), 1 deletions(-) + create mode 100644 extensions/deviceicon/resources.py + +diff --git a/extensions/deviceicon/Makefile.am b/extensions/deviceicon/Makefile.am +index 8a2e765..038c059 100644 +--- a/extensions/deviceicon/Makefile.am ++++ b/extensions/deviceicon/Makefile.am +@@ -5,4 +5,5 @@ sugar_PYTHON = \ + battery.py \ + network.py \ + speaker.py \ +- volume.py ++ volume.py \ ++ resources.py +diff --git a/extensions/deviceicon/resources.py b/extensions/deviceicon/resources.py +new file mode 100644 +index 0000000..ab3fc08 +--- /dev/null ++++ b/extensions/deviceicon/resources.py +@@ -0,0 +1,159 @@ ++# Copyright (C) Anish Mangal <anishmangal2002@gmail.com> ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++from gettext import gettext as _ ++ ++import logging ++import gobject ++import gtk ++import gconf ++import os ++ ++from sugar.graphics.tray import TrayIcon ++from sugar.graphics.xocolor import XoColor ++from sugar.graphics.palette import Palette ++from sugar.graphics import style ++from jarabe.frame.frameinvoker import FrameWidgetInvoker ++ ++class DeviceView(TrayIcon): ++ ++ FRAME_POSITION_RELATIVE = 500 ++ ++ def __init__(self): ++ icon_name = 'computer' ++ ++ client = gconf.client_get_default() ++ color = XoColor(client.get_string('/desktop/sugar/user/color')) ++ TrayIcon.__init__(self, icon_name=icon_name, xo_color=color) ++ self.set_palette_invoker(FrameWidgetInvoker(self)) ++ ++ def create_palette(self): ++ palette = ResourcePalette(_('System resources')) ++ palette.set_group_id('frame') ++ return palette ++ ++class ResourcePalette(Palette): ++ ++ def __init__(self, primary_text): ++ Palette.__init__(self, label=primary_text) ++ ++ self.connect('popup', self._popup_cb) ++ self.connect('popdown', self._popdown_cb) ++ ++ self._popped_up = False ++ self._cpu_times = self._get_cpu_times_list() ++ ++ vbox = gtk.VBox() ++ self.set_content(vbox) ++ ++ self._cpu_text = gtk.Label() ++ vbox.pack_start(self._cpu_text, padding=10) ++ self._cpu_text.show() ++ ++ self._cpu_bar = gtk.ProgressBar() ++ self._cpu_bar.set_size_request( ++ style.zoom(style.GRID_CELL_SIZE * 4), -1) ++ vbox.pack_start(self._cpu_bar, padding=10) ++ self._cpu_bar.show() ++ ++ self._memory_text = gtk.Label() ++ vbox.pack_start(self._memory_text, padding=10) ++ self._memory_text.show() ++ ++ self._memory_bar = gtk.ProgressBar() ++ self._memory_bar.set_size_request( ++ style.zoom(style.GRID_CELL_SIZE * 4), -1) ++ vbox.pack_start(self._memory_bar, padding=10) ++ self._memory_bar.show() ++ ++ vbox.show() ++ ++ def _get_cpu_times_list(self): ++ """Return various cpu times as read from /proc/stat ++ ++ This method returns the following cpu times as an ordered ++ list of numbers - [user, nice, system, idle, iowait] where, ++ ++ user: normal processes executing in user mode ++ nice: niced processes executing in user mode ++ system: processes executing in kernel mode ++ idle: twiddling thumbs ++ iowait: waiting for I/O to complete ++ ++ """ ++ return [int(count) ++ for count in file('/proc/stat').readline().split()[1:6]] ++ ++ def _percentage_cpu_available(self): ++ """ ++ Return free CPU resources as a percentage ++ ++ """ ++ _cpu_times_new = self._get_cpu_times_list() ++ _cpu_times_current = [(new - old) ++ for new, old in zip(_cpu_times_new, ++ self._cpu_times)] ++ user, nice, system, idle, iowait = _cpu_times_current ++ cpu_free = (idle + iowait) * 100.0 / sum(_cpu_times_current) ++ self._cpu_times = self._get_cpu_times_list() ++ return cpu_free ++ ++ def _percentage_memory_available(self): ++ """ ++ Return free memory as a percentage ++ ++ """ ++ for line in file('/proc/meminfo'): ++ name, value, unit = line.split()[:3] ++ if 'MemTotal:' == name: total = int(value) ++ elif 'MemFree:' == name: free = int(value) ++ elif 'Buffers:' == name: buffers = int(value) ++ elif 'Cached:' == name: cached = int(value) ++ elif 'Active:' == name: break ++ ++ return (free + buffers + cached) * 100.0 / total ++ ++ def __timer_cb(self): ++ # Get free CPU resources ++ cpu_free = self._percentage_cpu_available() ++ # Get free memory resources ++ memory_free = self._percentage_memory_available() ++ ++ # Update CPU and Memory labels and progressbars ++ self._cpu_text.set_label('CPU free: %d%%' % cpu_free) ++ self._cpu_text.show() ++ self._cpu_bar.set_fraction(cpu_free/100.0) ++ self._memory_text.set_label('Memory free: %d%%' % memory_free) ++ self._memory_text.show() ++ self._memory_bar.set_fraction(memory_free/100.0) ++ ++ # Keep invoking this method if we are popped up ++ return self._popped_up ++ ++ def _popup_cb(self, gobject_ref): ++ gobject.timeout_add(1000, self.__timer_cb) ++ self._popped_up = True ++ ++ def _popdown_cb(self, gobject_ref): ++ # Kill timer if we are not popped up ++ self._popped_up = False ++ ++ ++def setup(tray): ++ if os.path.exists('/proc/stat') and os.path.exists('/proc/meminfo'): ++ tray.add_device(DeviceView()) ++ else: ++ logging.warning('CPU and Memory statistics cannot be computed') +-- +1.7.0.1 + +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar/dynamically-set-number-of-control-panel-columns.patch b/rpms/sugar/dynamically-set-number-of-control-panel-columns.patch new file mode 100644 index 0000000..2c4365f --- /dev/null +++ b/rpms/sugar/dynamically-set-number-of-control-panel-columns.patch @@ -0,0 +1,96 @@ +From: anishmangal2002@gmail.com +To: sugar-devel@lists.sugarlabs.org +Cc: alsroot@member.fsf.org, sascha-pgp@silbe.org, bernie@codewiz.org, + anishmangal2002 <anishmangal2002@gmail.com> +Subject: [PATCH] Dynamically set number of control panel columns +Date: Sun, 20 Jun 2010 22:57:46 +0530 + +From: anishmangal2002 <anishmangal2002@gmail.com> + +This patch sets the number of icon-columns in the control +panel based on the screen resolution. This patch also sets +the table row spacing to GRID_CELL_SIZE. + +How the number of columns are calculated: +Let 'W' be the screen width, 's' be the GRID_CELL_SIZE and +'n' be the number of icon columns that can be comfortably +accomodated. Further, lets assume that the width an icon +and its text-label occupies a horizontal space equivalent to +(2.5 * s). We may represent 'W', 'n' and 's' by the following +expression: + + W - (2 * s) = (n * s + s) + (2.5 * n * s) + +where 'W - (2 * s)' is the width of the control panel menu, +'(n * s + s)' is the cumulative column spacing of 'n' icons, +and '(2.5 * n * s)' is the width occupied by 'n' icons and +their text-labels. From the above, 'n' may be computed as + + n = (1/3.5) * ( w/s - 3 ) + +Signed-off-by: anishmangal2002 <anishmangal2002@gmail.com> +--- + src/jarabe/controlpanel/gui.py | 18 ++++++++++++++---- + 1 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/src/jarabe/controlpanel/gui.py b/src/jarabe/controlpanel/gui.py +index 51d9820..4a54310 100644 +--- a/src/jarabe/controlpanel/gui.py ++++ b/src/jarabe/controlpanel/gui.py +@@ -33,7 +33,6 @@ from jarabe.controlpanel.toolbar import SectionToolbar + from jarabe import config + + _logger = logging.getLogger('ControlPanel') +-_MAX_COLUMNS = 5 + + class ControlPanel(gtk.Window): + __gtype_name__ = 'SugarControlPanel' +@@ -41,6 +40,9 @@ class ControlPanel(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + ++ self._MAX_COLUMNS = int( 0.285 * ( ( gtk.gdk.screen_width() / ++ style.GRID_CELL_SIZE ) - 3.0 ) ) ++ + self.set_border_width(style.LINE_WIDTH) + offset = style.GRID_CELL_SIZE + width = gtk.gdk.screen_width() - offset * 2 +@@ -110,6 +112,7 @@ class ControlPanel(gtk.Window): + + self._table = gtk.Table() + self._table.set_col_spacings(style.GRID_CELL_SIZE) ++ self._table.set_row_spacings(style.GRID_CELL_SIZE) + self._table.set_border_width(style.GRID_CELL_SIZE) + + self._scrolledwindow = gtk.ScrolledWindow() +@@ -134,8 +137,15 @@ class ControlPanel(gtk.Window): + except ImportError: + del self._options['keyboard'] + +- row = 0 +- column = 2 ++ # If the screen width only supports two columns, start ++ # placing from the second row. ++ if self._MAX_COLUMNS == 2: ++ row = 1 ++ column = 0 ++ else: ++ row = 0 ++ column = 2 ++ + options = self._options.keys() + options.sort() + +@@ -157,7 +167,7 @@ class ControlPanel(gtk.Window): + column, column + 1, + row, row + 1) + column += 1 +- if column == _MAX_COLUMNS: ++ if column == self._MAX_COLUMNS: + column = 0 + row += 1 + +-- +1.7.0.1 + + diff --git a/rpms/sugar/fix-duplication-of-OLPC-mesh-icons.patch b/rpms/sugar/fix-duplication-of-OLPC-mesh-icons.patch new file mode 100644 index 0000000..3448cf0 --- /dev/null +++ b/rpms/sugar/fix-duplication-of-OLPC-mesh-icons.patch @@ -0,0 +1,80 @@ +From 9082631642b84270f4825bcf420eb7447b0fc91e Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Wed, 9 Jun 2010 16:31:29 -0400 +Subject: [PATCH] Fix duplication of OLPC mesh icons +Organization: Paraguay Educa + +Three or more mesh icons were being added after every suspend/resume. + +There was already code present to detect when the device goes away and +remove the icons, but it was not working. NetworkManagerObserver was +attempting to look at the properties of the gone-away device in order to +see if it is a mesh device, but this was failing because the device has +already been destroyed at this point. + +Solve this by recording the device path of the mesh device when it is +detected, so that we can later determine if the gone-away device is the +mesh device. + +Signed-off-by: Martin Abente <mabente@paraguayeduca.org> +--- + src/jarabe/desktop/meshbox.py | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py +index a04922b..eabc737 100644 +--- a/src/jarabe/desktop/meshbox.py ++++ b/src/jarabe/desktop/meshbox.py +@@ -574,13 +574,15 @@ class OlpcMeshView(CanvasPulsingIcon): + self._update_color() + + def disconnect(self): ++ device_object_path = self._mesh_mgr.mesh_device.object_path ++ + self._bus.remove_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', +- path=self._device.object_path, ++ path=device_object_path, + dbus_interface=_NM_DEVICE_IFACE) + self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', +- path=self._device.object_path, ++ path=device_object_path, + dbus_interface=_NM_OLPC_MESH_IFACE) + + +@@ -821,6 +823,7 @@ class NetworkManagerObserver(object): + self._bus = None + self._devices = {} + self._netmgr = None ++ self._olpc_mesh_device_o = None + + def listen(self): + try: +@@ -885,6 +888,7 @@ class NetworkManagerObserver(object): + if device_type == network.DEVICE_TYPE_802_11_WIRELESS: + self._devices[device_o] = DeviceObserver(self._box, device) + elif device_type == network.DEVICE_TYPE_802_11_OLPC_MESH: ++ self._olpc_mesh_device_o = device_o + self._box.enable_olpc_mesh(device) + + def _get_device_path_error_cb(self, err): +@@ -899,12 +903,9 @@ class NetworkManagerObserver(object): + observer.disconnect() + del self._devices[device_o] + return +- +- device = self._bus.get_object(_NM_SERVICE, device_o) +- props = dbus.Interface(device, 'org.freedesktop.DBus.Properties') +- device_type = props.Get(_NM_DEVICE_IFACE, 'DeviceType') +- if device_type == network.DEVICE_TYPE_802_11_OLPC_MESH: +- self._box.disable_olpc_mesh(device) ++ ++ if self._olpc_mesh_device_o == device_o: ++ self._box.disable_olpc_mesh(device_o) + + class MeshBox(gtk.VBox): + __gtype_name__ = 'SugarMeshBox' +-- +1.6.0.4 + diff --git a/rpms/sugar/fix-for-file-list-sorting-for-FAT32-formatted-flash-drives-in-journal.patch b/rpms/sugar/fix-for-file-list-sorting-for-FAT32-formatted-flash-drives-in-journal.patch new file mode 100644 index 0000000..b8f4dc8 --- /dev/null +++ b/rpms/sugar/fix-for-file-list-sorting-for-FAT32-formatted-flash-drives-in-journal.patch @@ -0,0 +1,89 @@ +From sugar-devel-bounces@lists.sugarlabs.org Thu May 13 06:21:46 2010 +Return-Path: <sugar-devel-bounces@lists.sugarlabs.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from solarsail.media.mit.edu (solarsail.media.mit.edu + [18.85.2.155]) by trinity.develer.com (Postfix) with ESMTPS id A20571D6066 + for <bernie@codewiz.org>; Thu, 13 May 2010 06:21:46 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: from solarsail.media.mit.edu (localhost [127.0.0.1]) by + solarsail.media.mit.edu (Postfix) with ESMTP id 0E855810F; Thu, 13 May 2010 + 00:21:45 -0400 (EDT) +Received: from mail-gx0-f225.google.com (mail-gx0-f225.google.com + [209.85.217.225]) by solarsail.media.mit.edu (Postfix) with ESMTP id + D1691810D for <sugar-devel@lists.sugarlabs.org>; Thu, 13 May 2010 00:21:42 + -0400 (EDT) +Received: by gxk25 with SMTP id 25so562494gxk.11 for + <sugar-devel@lists.sugarlabs.org>; Wed, 12 May 2010 21:21:42 -0700 (PDT) +Received: by 10.100.244.32 with SMTP id r32mr5462417anh.28.1273724502212; + Wed, 12 May 2010 21:21:42 -0700 (PDT) +Received: from localhost.localdomain ([186.16.14.172]) by mx.google.com + with ESMTPS id 20sm275799yxe.4.2010.05.12.21.21.36 (version=TLSv1/SSLv3 + cipher=RC4-MD5); Wed, 12 May 2010 21:21:41 -0700 (PDT) +From: Kenny Meyer <knny.myer@gmail.com> +To: sugar-devel@lists.sugarlabs.org +Date: Thu, 13 May 2010 00:21:11 -0400 +Message-Id: <1273724471-4615-1-git-send-email-knny.myer@gmail.com> +X-Mailer: git-send-email 1.7.0.4 +Cc: Kenny Meyer <knny.myer@gmail.com> +Subject: [Sugar-devel] [PATCH] Fix for file list sorting for FAT32 + formatted flash drives in Journal. +X-BeenThere: sugar-devel@lists.sugarlabs.org +X-Mailman-Version: 2.1.9 +Precedence: list +List-Id: "Discussion of Sugar development and other technical matters." + <sugar-devel.lists.sugarlabs.org> +List-Unsubscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=unsubscribe> +List-Archive: <http://lists.sugarlabs.org/archive/sugar-devel> +List-Post: <mailto:sugar-devel@lists.sugarlabs.org> +List-Help: <mailto:sugar-devel-request@lists.sugarlabs.org?subject=help> +List-Subscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: sugar-devel-bounces@lists.sugarlabs.org +Errors-To: sugar-devel-bounces@lists.sugarlabs.org +X-Spam-Status: No, score=-1.9 required=5.0 + tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, + FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,T_TO_NO_BRKTS_FREEMAIL,UNPARSEABLE_RELAY + autolearn=ham version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +Bernie, and I have had a special situation where a flash drive, which +has been formatted on Windows with (apparently) a FAT32 file-system. +Some of the files on the flash drive had a negative `changetime`, which +resulted in automatically making the `changetime` of type long, whereas +the sort() function expected an integer. + +This behaviour was reproduced on sugar-0.84.16. Should be backported to +older versions. [?] +--- + src/jarabe/journal/model.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py +index 50e8dc1..5abab07 100644 +--- a/src/jarabe/journal/model.py ++++ b/src/jarabe/journal/model.py +@@ -289,7 +289,7 @@ class InplaceResultSet(BaseResultSet): + self._stopped = True + + def setup_ready(self): +- self._file_list.sort(lambda a, b: b[2] - a[2]) ++ self._file_list.sort(lambda a, b: cmp(b[2], a[2])) + self.ready.send(self) + + def find(self, query): +-- +1.7.0.4 + +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar/fix-name-clash-set_state.patch b/rpms/sugar/fix-name-clash-set_state.patch new file mode 100644 index 0000000..31f08e8 --- /dev/null +++ b/rpms/sugar/fix-name-clash-set_state.patch @@ -0,0 +1,101 @@ +From sugar-devel-bounces@lists.sugarlabs.org Wed May 19 21:25:50 2010 +Return-Path: <sugar-devel-bounces@lists.sugarlabs.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from solarsail.media.mit.edu (solarsail.media.mit.edu + [18.85.2.155]) by trinity.develer.com (Postfix) with ESMTPS id 9091F1D608E + for <bernie@codewiz.org>; Wed, 19 May 2010 21:25:50 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: from solarsail.media.mit.edu (localhost [127.0.0.1]) by + solarsail.media.mit.edu (Postfix) with ESMTP id 8BD587BC73E; Wed, 19 May + 2010 15:25:48 -0400 (EDT) +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 + bits)) (No client certificate requested) by solarsail.media.mit.edu + (Postfix) with ESMTPS id 0020A7BC739 for <sugar-devel@lists.sugarlabs.org>; + Wed, 19 May 2010 15:25:44 -0400 (EDT) +Received: (qmail 25017 invoked by uid 508); 19 May 2010 15:35:59 -0400 +Received: from unknown (HELO localhost.localdomain) (192.168.0.233) by + buho.paraguayeduca.org with SMTP; 19 May 2010 15:35:59 -0400 +From: Martin Abente <mabente@paraguayeduca.org> +To: tomeu@sugarlabs.org +Date: Wed, 19 May 2010 15:25:41 -0400 +Message-Id: <1274297141-6580-1-git-send-email-mabente@paraguayeduca.org> +X-Mailer: git-send-email 1.6.0.4 +In-Reply-To: <AANLkTinBDTbCkAzRZG6qUOzknKKpLzBqsDSTBOThZ2Cj@mail.gmail.com> +References: <AANLkTinBDTbCkAzRZG6qUOzknKKpLzBqsDSTBOThZ2Cj@mail.gmail.com> +Organization: Paraguay Educa +Cc: sugar-devel@lists.sugarlabs.org, Martin Abente + <mabente@paraguayeduca.org>, bernie@sugarlabs.org +Subject: [Sugar-devel] [sugar] Fixed name clash set_state +X-BeenThere: sugar-devel@lists.sugarlabs.org +X-Mailman-Version: 2.1.9 +Precedence: list +List-Id: "Discussion of Sugar development and other technical matters." + <sugar-devel.lists.sugarlabs.org> +List-Unsubscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=unsubscribe> +List-Archive: <http://lists.sugarlabs.org/archive/sugar-devel> +List-Post: <mailto:sugar-devel@lists.sugarlabs.org> +List-Help: <mailto:sugar-devel-request@lists.sugarlabs.org?subject=help> +List-Subscribe: <http://lists.sugarlabs.org/listinfo/sugar-devel>, + <mailto:sugar-devel-request@lists.sugarlabs.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: sugar-devel-bounces@lists.sugarlabs.org +Errors-To: sugar-devel-bounces@lists.sugarlabs.org +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,UNPARSEABLE_RELAY + autolearn=ham version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +Method set_state at GsmPalette class was unintentionally overiding +its parent method. + +Signed-off-by: Martin Abente <mabente@paraguayeduca.org> +--- + extensions/deviceicon/network.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py +index 94a4293..5f10ce3 100644 +--- a/extensions/deviceicon/network.py ++++ b/extensions/deviceicon/network.py +@@ -235,7 +235,7 @@ class GsmPalette(Palette): + self.menu.append(self._toggle_state_item) + self._toggle_state_item.show() + +- self.set_state(_GSM_STATE_NOT_READY) ++ self.set_gsm_state(_GSM_STATE_NOT_READY) + + self.info_box = gtk.VBox() + +@@ -267,7 +267,7 @@ class GsmPalette(Palette): + alignment.add(child) + return alignment + +- def set_state(self, state): ++ def set_gsm_state(self, state): + self._current_state = state + self._update_label_and_text() + +@@ -852,7 +852,7 @@ class GsmDeviceView(TrayIcon): + gsm_state = _GSM_STATE_NEED_AUTH + + if self._palette is not None: +- self._palette.set_state(gsm_state) ++ self._palette.set_gsm_state(gsm_state) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__state_changed_cb, +-- +1.6.0.4 + +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar/gsm-errors-palette.patch b/rpms/sugar/gsm-errors-palette.patch new file mode 100644 index 0000000..756526e --- /dev/null +++ b/rpms/sugar/gsm-errors-palette.patch @@ -0,0 +1,540 @@ +From 8b76b39bfcc29d1382c85a7c334e5e037d1487b9 Mon Sep 17 00:00:00 2001 +From: dcastelo <dcastelo@plan.ceibal.edu.uy> +Date: Tue, 1 Jun 2010 11:36:35 -0300 +Subject: [PATCH] Showing-Errors-Pallete-Mockup-V5.patch + +--- + extensions/deviceicon/network.py | 189 ++++++++++++++++++++++++++------------ + src/jarabe/model/network.py | 160 ++++++++++++++++++++++++++++++-- + 2 files changed, 280 insertions(+), 69 deletions(-) + +diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py +index 94a4293..d695fad 100644 +--- a/extensions/deviceicon/network.py ++++ b/extensions/deviceicon/network.py +@@ -39,6 +39,8 @@ from sugar.graphics.tray import TrayIcon + from sugar.graphics import xocolor + from sugar.util import unique_id + from sugar import profile ++from sugar.graphics.icon import Icon ++from sugar.graphics.menuitem import MenuItem + + from jarabe.model import network + from jarabe.model.network import Settings +@@ -63,7 +65,7 @@ _GSM_STATE_NOT_READY = 0 + _GSM_STATE_DISCONNECTED = 1 + _GSM_STATE_CONNECTING = 2 + _GSM_STATE_CONNECTED = 3 +-_GSM_STATE_NEED_AUTH = 4 ++_GSM_STATE_FAILED = 4 + + def frequency_to_channel(frequency): + ftoc = { 2412: 1, 2417: 2, 2422: 3, 2427: 4, +@@ -214,6 +216,7 @@ class WiredPalette(Palette): + ip_address_text = "" + self._ip_address_label.set_text(ip_address_text) + ++ + class GsmPalette(Palette): + __gtype_name__ = 'SugarGsmPalette' + +@@ -227,36 +230,53 @@ class GsmPalette(Palette): + def __init__(self): + + Palette.__init__(self, label=_('Wireless modem')) +- + self._current_state = None ++ self._alert = False + +- self._toggle_state_item = gtk.MenuItem('') ++ self._toggle_state_item = MenuItem('') + self._toggle_state_item.connect('activate', self.__toggle_state_cb) + self.menu.append(self._toggle_state_item) + self._toggle_state_item.show() + +- self.set_state(_GSM_STATE_NOT_READY) +- + self.info_box = gtk.VBox() + +- self.data_label = gtk.Label() +- self.data_label.props.xalign = 0.0 +- label_alignment = self._add_widget_with_padding(self.data_label) +- self.info_box.pack_start(label_alignment) +- self.data_label.show() ++ self.error_description_label = gtk.Label("") ++ self.error_description_label.set_line_wrap(True) ++ self.info_box.pack_start(self.error_description_label) ++ ++ self.connection_info_box = gtk.HBox() ++ ++ icon = Icon(icon_name='data-upload', icon_size=gtk.ICON_SIZE_MENU) ++ self.connection_info_box.pack_start(icon) ++ icon.show() ++ self._data_label_up = gtk.Label() ++ self._data_label_up.props.xalign = 0.0 ++ label_alignment = self._add_widget_with_padding(self._data_label_up) ++ self.connection_info_box.pack_start(label_alignment) ++ self._data_label_up.show() + label_alignment.show() + +- self.connection_time_label = gtk.Label() +- self.connection_time_label.props.xalign = 0.0 +- label_alignment = self._add_widget_with_padding( \ +- self.connection_time_label) +- self.info_box.pack_start(label_alignment) +- self.connection_time_label.show() ++ icon = Icon(icon_name='data-download', icon_size=gtk.ICON_SIZE_MENU) ++ self.connection_info_box.pack_start(icon) ++ icon.show() ++ self._data_label_down = gtk.Label() ++ self._data_label_down.props.xalign = 0.0 ++ label_alignment = self._add_widget_with_padding(self._data_label_down) ++ self.connection_info_box.pack_start(label_alignment) ++ self._data_label_down.show() + label_alignment.show() ++ ++ self.info_box.pack_start(self.connection_info_box) + ++ self._error_accept_item = MenuItem('') ++ self._error_accept_item.connect('activate', self.__error_accept_cb) ++ self.menu.append(self._error_accept_item) ++ + self.info_box.show() + self.set_content(self.info_box) + ++ self.set_state(_GSM_STATE_NOT_READY) ++ + def _add_widget_with_padding(self, child, xalign=0, yalign=0.5): + alignment = gtk.Alignment(xalign=xalign, yalign=yalign, + xscale=1, yscale=0.33) +@@ -267,35 +287,90 @@ class GsmPalette(Palette): + alignment.add(child) + return alignment + +- def set_state(self, state): ++ def set_state(self, state, reason=0): + self._current_state = state +- self._update_label_and_text() ++ self._update_label_and_text(reason) + +- def _update_label_and_text(self): ++ def _update_label_and_text(self, reason=0): ++ + if self._current_state == _GSM_STATE_NOT_READY: + self._toggle_state_item.get_child().set_label('...') + self.props.secondary_text = _('Please wait...') +- ++ + elif self._current_state == _GSM_STATE_DISCONNECTED: + self._toggle_state_item.get_child().set_label(_('Connect')) +- self.props.secondary_text = _('Disconnected') +- ++ if not self._alert: ++ self.props.secondary_text = _('Disconnected') ++ icon = Icon(icon_name='dialog-ok', \ ++ icon_size=gtk.ICON_SIZE_MENU) ++ self._toggle_state_item.set_image(icon) ++ + elif self._current_state == _GSM_STATE_CONNECTING: + self._toggle_state_item.get_child().set_label(_('Cancel')) + self.props.secondary_text = _('Connecting...') ++ icon = Icon(icon_name='dialog-cancel', \ ++ icon_size=gtk.ICON_SIZE_MENU) ++ self._toggle_state_item.set_image(icon) + + elif self._current_state == _GSM_STATE_CONNECTED: + self._toggle_state_item.get_child().set_label(_('Disconnect')) +- self.props.secondary_text = _('Connected') +- +- elif self._current_state == _GSM_STATE_NEED_AUTH: +- self._toggle_state_item.get_child().set_label(_('Sim requires Pin/Puk')) +- self.props.secondary_text = _('Authentication Error') +- ++ self.update_connection_time() ++ icon = Icon(icon_name='media-eject', \ ++ icon_size=gtk.ICON_SIZE_MENU) ++ self._toggle_state_item.set_image(icon) ++ ++ elif self._current_state == _GSM_STATE_FAILED: ++ message_error = self._get_error_by_nm_reason(reason) ++ self.add_alert(_('Error: %s') % message_error[0], \ ++ message_error[1]) + else: + raise ValueError('Invalid GSM state while updating label and ' \ + 'text, %s' % str(self._current_state)) +- ++ ++ def add_alert(self, title, message): ++ self._alert = True ++ self.props.secondary_text = _("Connection Error") ++ self._error_accept_item.get_child().set_label(title) ++ self._error_accept_item.show() ++ self.error_description_label.set_text(message) ++ self.error_description_label.show() ++ self._toggle_state_item.set_sensitive(False) ++ ++ def __error_accept_cb(self, alert): ++ self._alert = False ++ self._update_label_and_text() ++ self._error_accept_item.get_child().set_label('') ++ self._error_accept_item.hide() ++ self.error_description_label.hide() ++ self._toggle_state_item.set_sensitive(True) ++ self._full_request = [0, 0] ++ ++ def update_connection_time(self, connection_time=None): ++ if (connection_time is not None): ++ self.props.secondary_text = _('Connected for ' + \ ++ connection_time.strftime('%H:%M:%S')) ++ else: ++ self.props.secondary_text = _('Connected for ' \ ++ + '00:00:00') ++ ++ def update_stats(self, in_bytes, out_bytes): ++ in_KBytes = in_bytes / 1024 ++ out_KBytes = out_bytes / 1024 ++ self._data_label_up.set_text(_("%d KB") % (out_KBytes)) ++ self._data_label_down.set_text(_("%d KB") % (in_KBytes)) ++ ++ def _get_error_by_nm_reason(self, reason): ++ if reason in [network.NM_DEVICE_STATE_REASON_NO_SECRETS, network.NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED]: ++ message = _('Suggestion: Check your Pin/Puk configuration.') ++ elif reason in [network.NM_DEVICE_STATE_REASON_PPP_DISCONNECT, network.NM_DEVICE_STATE_REASON_PPP_FAILED]: ++ message = _('Suggestion: Check your Access Point Name (APN) configuration') ++ elif reason in [network.NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER, network.NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT]: ++ message = _('Suggestion: Check the Number configuration.') ++ else: ++ message = '' ++ message_tuple = (network.NM_DEVICE_STATE_REASON_DESCRIPTION[reason], message) ++ return message_tuple ++ + def __toggle_state_cb(self, menuitem): + if self._current_state == _GSM_STATE_NOT_READY: + pass +@@ -305,12 +380,10 @@ class GsmPalette(Palette): + self.emit('gsm-disconnect') + elif self._current_state == _GSM_STATE_CONNECTED: + self.emit('gsm-disconnect') +- elif self._current_state == _GSM_STATE_NEED_AUTH: +- self.emit('gsm-disconnect') + else: + raise ValueError('Invalid GSM state while emitting signal, %s' % \ + str(self._current_state)) +- ++ + + class WirelessDeviceView(ToolButton): + +@@ -747,6 +820,7 @@ class GsmDeviceView(TrayIcon): + signal_name='PppStats', + path=self._device.object_path, + dbus_interface=_NM_SERIAL_IFACE) ++ + def create_palette(self): + palette = GsmPalette() + +@@ -774,6 +848,9 @@ class GsmDeviceView(TrayIcon): + '/', + reply_handler=self.__connect_cb, + error_handler=self.__connect_error_cb) ++ else: ++ self._palette.add_alert(_('Connection Error'), \ ++ _('There is no gsm connection available')) + + def __connect_cb(self, active_connection): + logging.debug('Connected successfully to gsm device, %s', +@@ -807,15 +884,15 @@ class GsmDeviceView(TrayIcon): + + def __state_changed_cb(self, new_state, old_state, reason): + logging.debug('State: %s to %s, reason %s', old_state, new_state, reason) +- self._update_state(int(new_state)) ++ self._update_state(int(new_state), int(old_state), int(reason)) + + def __current_state_check_cb(self, properties): +- self._update_state(int(properties['State'])) ++ self._update_state(int(properties['State']), 0, 0) + + def __current_state_check_error_cb(self, error): + raise RuntimeError('Error when checking gsm device state, %s' % error) + +- def _update_state(self, state): ++ def _update_state(self, state, old_state, reason): + gsm_state = None + + if state is network.DEVICE_STATE_ACTIVATED: +@@ -823,20 +900,22 @@ class GsmDeviceView(TrayIcon): + connection = network.find_gsm_connection() + if connection is not None: + connection.set_connected() +- self._connection_timestamp = time.time() - \ ++ self._connection_timestamp = time.time() - \ + connection.get_settings().connection.timestamp + self._connection_time_handler = gobject.timeout_add_seconds( \ + 1, self.__connection_timecount_cb) +- self._update_stats(0, 0) +- self._update_connection_time() +- self._palette.info_box.show() ++ self._palette.update_connection_time() ++ self._palette.update_stats(0, 0) ++ if self._palette is not None: ++ self._palette.connection_info_box.show() + + elif state is network.DEVICE_STATE_DISCONNECTED: + gsm_state = _GSM_STATE_DISCONNECTED + self._connection_timestamp = 0 + if self._connection_time_handler is not None: + gobject.source_remove(self._connection_time_handler) +- self._palette.info_box.hide() ++ if self._palette is not None: ++ self._palette.connection_info_box.hide() + + elif state in [network.DEVICE_STATE_UNMANAGED, + network.DEVICE_STATE_UNAVAILABLE, +@@ -845,14 +924,15 @@ class GsmDeviceView(TrayIcon): + + elif state in [network.DEVICE_STATE_PREPARE, + network.DEVICE_STATE_CONFIG, +- network.DEVICE_STATE_IP_CONFIG]: ++ network.DEVICE_STATE_IP_CONFIG, ++ network.DEVICE_STATE_NEED_AUTH]: + gsm_state = _GSM_STATE_CONNECTING +- +- elif state in [network.DEVICE_STATE_NEED_AUTH]: +- gsm_state = _GSM_STATE_NEED_AUTH ++ ++ elif state == network.DEVICE_STATE_FAILED: ++ gsm_state = _GSM_STATE_FAILED + + if self._palette is not None: +- self._palette.set_state(gsm_state) ++ self._palette.set_state(gsm_state, reason) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__state_changed_cb, +@@ -861,25 +941,17 @@ class GsmDeviceView(TrayIcon): + dbus_interface=_NM_DEVICE_IFACE) + + def __ppp_stats_changed_cb(self, in_bytes, out_bytes): +- self._update_stats(in_bytes, out_bytes) +- +- def _update_stats(self, in_bytes, out_bytes): +- in_KBytes = in_bytes / 1024 +- out_KBytes = out_bytes / 1024 +- text = _("Data sent %d KB / received %d KB") % (out_KBytes, in_KBytes) +- self._palette.data_label.set_text(text) ++ self._palette.update_stats(in_bytes, out_bytes) + + def __connection_timecount_cb(self): + self._connection_timestamp = self._connection_timestamp + 1 +- self._update_connection_time() ++ connection_time = \ ++ datetime.datetime.fromtimestamp(self._connection_timestamp) ++ self._palette.update_connection_time(connection_time) + return True + +- def _update_connection_time(self): +- connection_time = datetime.datetime.fromtimestamp( \ +- self._connection_timestamp) +- text = _("Connection time ") + connection_time.strftime('%H : %M : %S') +- self._palette.connection_time_label.set_text(text) + ++ + class WirelessDeviceObserver(object): + def __init__(self, device, tray, device_type): + self._device = device +@@ -950,6 +1022,7 @@ class WiredDeviceObserver(object): + del self._device_view + self._device_view = None + ++ + class GsmDeviceObserver(object): + def __init__(self, device, tray): + self._device = device +diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py +index 3a949da..04391f8 100644 +--- a/src/jarabe/model/network.py ++++ b/src/jarabe/model/network.py +@@ -18,6 +18,7 @@ + # along with this program; if not, write to the Free Software + # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + ++from gettext import gettext as _ + import logging + import os + import time +@@ -54,6 +55,138 @@ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0 + NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1 + NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2 + ++ ++NM_DEVICE_STATE_REASON_UNKNOWN = 0 ++NM_DEVICE_STATE_REASON_NONE = 1 ++NM_DEVICE_STATE_REASON_NOW_MANAGED = 2 ++NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3 ++NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4 ++NM_DEVICE_STATE_REASON_CONFIG_UNAVAILABLE = 5 ++NM_DEVICE_STATE_REASON_CONFIG_EXPIRED = 6 ++NM_DEVICE_STATE_REASON_NO_SECRETS = 7 ++NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8 ++NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9 ++NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10 ++NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11 ++NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12 ++NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13 ++NM_DEVICE_STATE_REASON_PPP_FAILED = 14 ++NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15 ++NM_DEVICE_STATE_REASON_DHCP_ERROR = 16 ++NM_DEVICE_STATE_REASON_DHCP_FAILED = 17 ++NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18 ++NM_DEVICE_STATE_REASON_SHARED_FAILED = 19 ++NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20 ++NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21 ++NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22 ++NM_DEVICE_STATE_REASON_MODEM_BUSY = 23 ++NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24 ++NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25 ++NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26 ++NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27 ++NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28 ++NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29 ++NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30 ++NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31 ++NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32 ++NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33 ++NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34 ++NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35 ++NM_DEVICE_STATE_REASON_REMOVED = 36 ++NM_DEVICE_STATE_REASON_SLEEPING = 37 ++NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38 ++NM_DEVICE_STATE_REASON_USER_REQUESTED = 39 ++NM_DEVICE_STATE_REASON_CARRIER = 40 ++ ++ ++ ++NM_DEVICE_STATE_REASON_DESCRIPTION = { ++ NM_DEVICE_STATE_REASON_UNKNOWN: \ ++ _("The reason for the device state change \ is unknown"), ++ NM_DEVICE_STATE_REASON_NONE: \ ++ _("The state change is normal."), ++ NM_DEVICE_STATE_REASON_NOW_MANAGED: \ ++ _("The device is now managed."), ++ NM_DEVICE_STATE_REASON_NOW_UNMANAGED: \ ++ _("The device is no longer managed."), ++ NM_DEVICE_STATE_REASON_CONFIG_FAILED: \ ++ _("The device could not be readied for configuration."), ++ NM_DEVICE_STATE_REASON_CONFIG_UNAVAILABLE : \ ++ _("IP configuration could not be reserved \ ++ (no available address, timeout, etc)."), ++ NM_DEVICE_STATE_REASON_CONFIG_EXPIRED : \ ++ _("The IP configuration is no longer valid."), ++ NM_DEVICE_STATE_REASON_NO_SECRETS : \ ++ _("Secrets were required, but not provided."), ++ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT : \ ++ _("The 802.1X supplicant disconnected from \ ++ the access point or authentication server."), ++ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED : \ ++ _("Configuration of the 802.1X supplicant failed."), ++ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED : \ ++ _("The 802.1X supplicant quit or failed unexpectedly."), ++ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT : \ ++ _("The 802.1X supplicant took too long to authenticate."), ++ NM_DEVICE_STATE_REASON_PPP_START_FAILED : \ ++ _("The PPP service failed to start within the allowed time."), ++ NM_DEVICE_STATE_REASON_PPP_DISCONNECT : \ ++ _("The PPP service disconnected unexpectedly."), ++ NM_DEVICE_STATE_REASON_PPP_FAILED : \ ++ _("The PPP service quit or failed unexpectedly."), ++ NM_DEVICE_STATE_REASON_DHCP_START_FAILED : \ ++ _("The DHCP service failed to start within the allowed time."), ++ NM_DEVICE_STATE_REASON_DHCP_ERROR : \ ++ _("The DHCP service reported an unexpected error"), ++ NM_DEVICE_STATE_REASON_DHCP_FAILED : \ ++ _("The DHCP service quit or failed unexpectedly."), ++ NM_DEVICE_STATE_REASON_SHARED_START_FAILED : \ ++ _("The shared connection service failed to start."), ++ NM_DEVICE_STATE_REASON_SHARED_FAILED : \ ++ _("The shared connection service quit or failed unexpectedly"), ++ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED : \ ++ _("The AutoIP service failed to start."), ++ NM_DEVICE_STATE_REASON_AUTOIP_ERROR : ++ _("The AutoIP service reported an unexpected error."), ++ NM_DEVICE_STATE_REASON_AUTOIP_FAILED : \ ++ _("The AutoIP service quit or failed unexpectedly."), ++ NM_DEVICE_STATE_REASON_MODEM_BUSY : \ ++ _("Dialing failed because the line was busy."), ++ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE : \ ++ _("Dialing failed because there was no dial tone. "), ++ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER : \ ++ _("Dialing failed because there was carrier."), ++ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT : \ ++ _("Dialing timed out."), ++ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED : \ ++ _("Dialing failed."), ++ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED : \ ++ _("Modem initialization failed."), ++ NM_DEVICE_STATE_REASON_GSM_APN_FAILED : \ ++ _("Failed to select the specified GSM APN."), ++ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING : \ ++ _("Not searching for networks."), ++ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED : \ ++ _("Network registration was denied."), ++ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT : \ ++ _("Network registration timed out."), ++ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED : \ ++ _("Failed to register with the requested GSM network."), ++ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED : \ ++ _("PIN check failed."), ++ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING : \ ++ _("Necessary firmware for the device may be missing."), ++ NM_DEVICE_STATE_REASON_REMOVED : \ ++ _("The device was removed."), ++ NM_DEVICE_STATE_REASON_SLEEPING : \ ++ _("NetworkManager went to sleep."), ++ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED : \ ++ _("The device's active connection was removed or disappeared."), ++ NM_DEVICE_STATE_REASON_USER_REQUESTED : ++ _("A user or client requested the disconnection."), ++ NM_DEVICE_STATE_REASON_CARRIER : ++ _("The device's carrier/link changed.") ++} ++ + NM_802_11_AP_FLAGS_NONE = 0x00000000 + NM_802_11_AP_FLAGS_PRIVACY = 0x00000001 + +@@ -444,17 +577,22 @@ class NMSettingsConnection(dbus.service.Object): + def GetSecrets(self, setting_name, hints, request_new, reply, error): + logging.debug('Secrets requested for connection %s request_new=%s', + self.path, request_new) +- if request_new or self._secrets is None: +- # request_new is for example the case when the pw on the AP changes +- response = SecretsResponse(self, reply, error) +- try: +- self.secrets_request.send(self, response=response) +- except Exception: +- logging.exception('Error requesting the secrets via dialog') +- else: +- reply(self._secrets.get_dict()) +- +- ++ if self._settings.connection.type is not 'gsm': ++ if request_new or self._secrets is None: ++ # request_new is for example the case when the pw on the AP changes ++ response = SecretsResponse(self, reply, error) ++ try: ++ self.secrets_request.send(self, response=response) ++ except Exception: ++ logging.exception('Error requesting the secrets via dialog') ++ else: ++ reply(self._secrets.get_dict()) ++ else: ++ if not request_new: ++ reply(self._secrets.get_dict()) ++ else: ++ raise Exception('The stored GSM secret has already been supplied ') ++ + class AccessPoint(gobject.GObject): + __gsignals__ = { + 'props-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, +-- +1.6.2.5 + diff --git a/rpms/sugar/jasg-register-rename.patch b/rpms/sugar/jasg-register-rename.patch new file mode 100644 index 0000000..7d4f303 --- /dev/null +++ b/rpms/sugar/jasg-register-rename.patch @@ -0,0 +1,62 @@ +From 54b22ed40b3b96dcbce8493fe1a1bd3d51703b00 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Tue, 13 Jul 2010 16:11:45 -0400 +Subject: [PATCH] Rename Register button to re-register +Organization: Paraguay Educa + +Jorge Saldivar's patch ported to build py 3xx + +Signed-off-by: Martin Abente <mabente@paraguayeduca.org> +--- + src/jarabe/desktop/favoritesview.py | 18 +++++++++++++----- + 1 files changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py +index a311b52..450aab0 100644 +--- a/src/jarabe/desktop/favoritesview.py ++++ b/src/jarabe/desktop/favoritesview.py +@@ -328,7 +328,7 @@ class FavoritesView(hippo.Canvas): + alert.props.title = _('Registration Successful') + alert.props.msg = _('You are now registered ' \ + 'with your school server.') +- self._my_icon.remove_register_menu() ++ self._my_icon.change_register_menu() + get_journal()._volumes_toolbar.setup_xs_button() + + ok_icon = Icon(icon_name='dialog-ok') +@@ -629,11 +629,15 @@ class _MyIcon(MyIcon): + + client = gconf.client_get_default() + backup_url = client.get_string('/desktop/sugar/backup_url') ++ + if not backup_url: + self._register_menu = MenuItem(_('Register'), 'media-record') +- self._register_menu.connect('activate', self.__register_activate_cb) +- palette.menu.append(self._register_menu) +- self._register_menu.show() ++ else: ++ self._register_menu = MenuItem(_('Register Again'), 'media-record') ++ ++ self._register_menu.connect('activate', self.__register_activate_cb) ++ palette.menu.append(self._register_menu) ++ self._register_menu.show() + + return palette + +@@ -643,8 +647,12 @@ class _MyIcon(MyIcon): + def __register_activate_cb(self, menuitem): + self.emit('register-activate') + +- def remove_register_menu(self): ++ def change_register_menu(self): + self.palette.menu.remove(self._register_menu) ++ self._register_menu = MenuItem(_('Register Again'), 'media-record') ++ self._register_menu.connect('activate', self.__register_activate_cb) ++ self.palette.menu.append(self._register_menu) ++ self._register_menu.show() + + class FavoritesSetting(object): + +-- +1.6.0.4 + diff --git a/rpms/sugar/pe558-add-option-to-mount-any-user-directory-to-journal.patch b/rpms/sugar/pe558-add-option-to-mount-any-user-directory-to-journal.patch new file mode 100644 index 0000000..c4b099d --- /dev/null +++ b/rpms/sugar/pe558-add-option-to-mount-any-user-directory-to-journal.patch @@ -0,0 +1,140 @@ +From tecnologia-bounces@paraguayeduca.org Fri May 21 23:19:02 2010 +Return-Path: <tecnologia-bounces@paraguayeduca.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from mail-gw0-f54.google.com (mail-gw0-f54.google.com + [74.125.83.54]) by trinity.develer.com (Postfix) with ESMTP id 9ED291D6098 + for <bernie@codewiz.org>; Fri, 21 May 2010 23:19:02 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: by gwj16 with SMTP id 16sf817614gwj.41 for <bernie@codewiz.org>; + Fri, 21 May 2010 14:19:01 -0700 (PDT) +Received: by 10.150.252.8 with SMTP id z8mr3479199ybh.3.1274476741641; Fri, + 21 May 2010 14:19:01 -0700 (PDT) +Received: by 10.150.252.8 with SMTP id z8mr3479183ybh.3.1274476739872; Fri, + 21 May 2010 14:18:59 -0700 (PDT) +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) by mx.google.com with ESMTP id + u10si6938424ybe.65.2010.05.21.14.18.58; Fri, 21 May 2010 14:18:59 -0700 + (PDT) +Received-SPF: pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) client-ip=190.104.152.113; +Authentication-Results: mx.google.com; spf=pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) smtp.mail=tecnologia-bounces@paraguayeduca.org +Received: (qmail 12533 invoked by uid 508); 21 May 2010 17:28:43 -0400 +Received: from localhost.localdomain (HELO buho.paraguayeduca.org) + (127.0.0.1) by buho.paraguayeduca.org with SMTP; 21 May 2010 17:28:43 -0400 +Delivered-To: paraguayeduca.org-tecnologia@paraguayeduca.org +Received: (qmail 12501 invoked by uid 508); 21 May 2010 17:28:41 -0400 +Received: from jorge-laptop.oficina.paraguayeduca.org (HELO + localhost.localdomain) (192.168.0.176) by buho.paraguayeduca.org with SMTP; + 21 May 2010 17:28:41 -0400 +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: bernie@codewiz.org +Date: Fri, 21 May 2010 17:18:13 -0400 +Message-Id: <1274476695-12808-2-git-send-email-jsaldivar@paraguayeduca.org> +X-Mailer: git-send-email 1.7.0.4 +In-Reply-To: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +References: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +Cc: Jorge Saldivar Galli <jorgesaldivar@gmail.com>, + tecnologia@paraguayeduca.org +Subject: [Tecnologia] [sugar 2/4] Add the option to mount any user + directory to journal +X-BeenThere: tecnologia@paraguayeduca.org +X-Mailman-Version: 2.1.12 +Precedence: list +Reply-To: tecnologia@paraguayeduca.org +List-Id: <tecnologia.paraguayeduca.org> +List-Unsubscribe: + <http://mail.paraguayeduca.org/mailman/options/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=unsubscribe> +List-Archive: <http://mail.paraguayeduca.org/mailman/private/tecnologia/> +List-Post: <mailto:tecnologia@paraguayeduca.org> +List-Help: <mailto:tecnologia-request@paraguayeduca.org?subject=help> +List-Subscribe: + <http://mail.paraguayeduca.org/mailman/listinfo/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: tecnologia-bounces@paraguayeduca.org +Errors-To: tecnologia-bounces@paraguayeduca.org +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS, + T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +From: Jorge Saldivar <jorge@jorge-laptop.(none)> + + +Signed-off-by: Jorge Saldivar Galli <jorgesaldivar@gmail.com> +--- + src/jarabe/journal/volumestoolbar.py | 22 ++++++++++++++++++++++ + 1 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py +index 74b974c..07e63a6 100644 +--- a/src/jarabe/journal/volumestoolbar.py ++++ b/src/jarabe/journal/volumestoolbar.py +@@ -21,6 +21,7 @@ import gobject + import gio + import gtk + import gconf ++import os + + from sugar.graphics.radiotoolbutton import RadioToolButton + from sugar.graphics.palette import Palette +@@ -50,9 +51,18 @@ class VolumesToolbar(gtk.Toolbar): + button.show() + self._volume_buttons = [button] + ++ button = DirectoryButton() ++ button.props.group = self._volume_buttons[0] ++ button.set_palette(Palette(_('Directory GNOME'))) ++ button.connect('toggled', self._button_toggled_cb) ++ self.insert(button, 1) ++ button.show() ++ self._volume_buttons.append(button) ++ + self.connect('destroy', self.__destroy_cb) + + gobject.idle_add(self._set_up_volumes) ++ + + def __destroy_cb(self, widget): + volume_monitor = gio.volume_monitor_get() +@@ -69,6 +79,7 @@ class VolumesToolbar(gtk.Toolbar): + for mount in volume_monitor.get_mounts(): + self._add_button(mount) + ++ + def __mount_added_cb(self, volume_monitor, mount): + self._add_button(mount) + +@@ -179,3 +190,14 @@ class JournalButton(BaseButton): + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color + ++class DirectoryButton(BaseButton): ++ def __init__(self): ++ BaseButton.__init__(self, mount_point=os.environ['HOME']) ++ #BaseButton.__init__(self, mount_point="/tmp/hola") ++ ++ #self.props.active = False ++ self.props.named_icon = 'drive' ++ ++ client = gconf.client_get_default() ++ color = XoColor(client.get_string('/desktop/sugar/user/color')) ++ self.props.xo_color = color +-- +1.7.0.4 + +_______________________________________________ +Tecnologia mailing list +Tecnologia@paraguayeduca.org +http://mail.paraguayeduca.org/mailman/listinfo/tecnologia + + diff --git a/rpms/sugar/pe558-backup-restore-front-end-for-control-panel.patch b/rpms/sugar/pe558-backup-restore-front-end-for-control-panel.patch new file mode 100644 index 0000000..640f1fe --- /dev/null +++ b/rpms/sugar/pe558-backup-restore-front-end-for-control-panel.patch @@ -0,0 +1,588 @@ +From jsaldivar@paraguayeduca.org Fri May 21 23:18:20 2010 +Return-Path: <jsaldivar@paraguayeduca.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) by trinity.develer.com (Postfix) with ESMTPS id + 189E81D6098 for <bernie@codewiz.org>; Fri, 21 May 2010 23:18:20 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: (qmail 12492 invoked by uid 508); 21 May 2010 17:28:41 -0400 +Received: from jorge-laptop.oficina.paraguayeduca.org (HELO + localhost.localdomain) (192.168.0.176) by buho.paraguayeduca.org with SMTP; + 21 May 2010 17:28:41 -0400 +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: bernie@codewiz.org +Cc: tecnologia@paraguayeduca.org, Martin Abente + <mabente@paraguayeduca.org>, Jorge Saldivar Galli <jorgesaldivar@gmail.com> +Subject: [sugar 1/4] Backup & Restore front end for control panel +Date: Fri, 21 May 2010 17:18:12 -0400 +Message-Id: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +X-Mailer: git-send-email 1.7.0.4 +X-Spam-Status: No, score=-1.9 required=5.0 + tests=BAYES_00,T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham + version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit +Mime-Version: 1.0 + +From: Martin Abente <mabente@paraguayeduca.org> + + +Signed-off-by: Jorge Saldivar Galli <jorgesaldivar@gmail.com> +--- + configure.ac | 1 + + data/icons/Makefile.am | 1 + + data/icons/module-journalmanagement.svg | 127 +++++++++++ + extensions/cpsection/Makefile.am | 2 +- + extensions/cpsection/journalmanagement/Makefile.am | 6 + + extensions/cpsection/journalmanagement/__init__.py | 22 ++ + extensions/cpsection/journalmanagement/model.py | 78 +++++++ + extensions/cpsection/journalmanagement/view.py | 236 ++++++++++++++++++++ + 8 files changed, 472 insertions(+), 1 deletions(-) + create mode 100644 data/icons/module-journalmanagement.svg + create mode 100644 extensions/cpsection/journalmanagement/Makefile.am + create mode 100644 extensions/cpsection/journalmanagement/__init__.py + create mode 100644 extensions/cpsection/journalmanagement/model.py + create mode 100644 extensions/cpsection/journalmanagement/view.py + +diff --git a/configure.ac b/configure.ac +index 4f60892..d6bc609 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -53,6 +53,7 @@ extensions/cpsection/aboutcomputer/Makefile + extensions/cpsection/aboutme/Makefile + extensions/cpsection/datetime/Makefile + extensions/cpsection/frame/Makefile ++extensions/cpsection/journalmanagement/Makefile + extensions/cpsection/keyboard/Makefile + extensions/cpsection/language/Makefile + extensions/cpsection/modemconfiguration/Makefile +diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am +index a35643a..4957276 100644 +--- a/data/icons/Makefile.am ++++ b/data/icons/Makefile.am +@@ -5,6 +5,7 @@ sugar_DATA = \ + module-about_my_computer.svg \ + module-date_and_time.svg \ + module-frame.svg \ ++ module-journalmanagement.svg \ + module-keyboard.svg \ + module-language.svg \ + module-modemconfiguration.svg \ +diff --git a/data/icons/module-journalmanagement.svg b/data/icons/module-journalmanagement.svg +new file mode 100644 +index 0000000..9250c6f +--- /dev/null ++++ b/data/icons/module-journalmanagement.svg +@@ -0,0 +1,127 @@ ++<?xml version="1.0" encoding="UTF-8" standalone="no"?> ++<svg ++ xmlns:dc="http://purl.org/dc/elements/1.1/" ++ xmlns:cc="http://creativecommons.org/ns#" ++ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ++ xmlns:svg="http://www.w3.org/2000/svg" ++ xmlns="http://www.w3.org/2000/svg" ++ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" ++ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" ++ enable-background="new 0 0 55 55" ++ height="55px" ++ id="Layer_1" ++ version="1.1" ++ viewBox="0 0 55 55" ++ width="55px" ++ x="0px" ++ xml:space="preserve" ++ y="0px" ++ sodipodi:version="0.32" ++ inkscape:version="0.46" ++ sodipodi:docname="journalmanagement.svg" ++ inkscape:output_extension="org.inkscape.output.svg.inkscape"><sodipodi:namedview ++ inkscape:window-height="827" ++ inkscape:window-width="1440" ++ inkscape:pageshadow="2" ++ inkscape:pageopacity="0.0" ++ guidetolerance="10.0" ++ gridtolerance="10.0" ++ objecttolerance="10.0" ++ borderopacity="1.0" ++ bordercolor="#666666" ++ pagecolor="#ffffff" ++ id="base" ++ showgrid="false" ++ inkscape:zoom="8.9818182" ++ inkscape:cx="7.7378543" ++ inkscape:cy="27.5" ++ inkscape:window-x="0" ++ inkscape:window-y="25" ++ inkscape:current-layer="Layer_1" /><metadata ++ id="metadata35"><rdf:RDF><cc:Work ++ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type ++ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs ++ id="defs33"><inkscape:perspective ++ sodipodi:type="inkscape:persp3d" ++ inkscape:vp_x="0 : 27.5 : 1" ++ inkscape:vp_y="0 : 1000 : 0" ++ inkscape:vp_z="55 : 27.5 : 1" ++ inkscape:persp3d-origin="27.5 : 18.333333 : 1" ++ id="perspective37" /><inkscape:perspective ++ id="perspective12" ++ inkscape:persp3d-origin="27.5 : 18.333333 : 1" ++ inkscape:vp_z="55 : 27.5 : 1" ++ inkscape:vp_y="0 : 1000 : 0" ++ inkscape:vp_x="0 : 27.5 : 1" ++ sodipodi:type="inkscape:persp3d" /></defs> ++ ++<g ++ display="block" ++ id="document-save" ++ transform="matrix(1.2198714,0,0,1.0017443,-2.2062535,-2.4418416)" ++ style="display:block"> ++ <g ++ id="g4"> ++ <g ++ id="g6"> ++ <g ++ id="g8"> ++ <path ++ d="M 6.736,49.002 L 31.256,49.002 C 33.481,49.002 34.695,47.555 34.695,45.561 L 34.695,18.281 C 34.695,16.551 32.963,14.84 31.256,14.84 L 26.867,14.84" ++ id="path10" ++ style="fill:#ffffff;stroke:#010101;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round" /> ++ </g> ++ </g> ++ <g ++ id="g12"> ++ <g ++ id="g14"> ++ <path ++ d="M 26.867,38.592 C 26.867,40.428 25.522,41.793 23.426,42.639 L 6.736,49.002 L 6.736,14.84 L 23.426,6.241 C 25.654,5.847 26.867,7.081 26.867,9.075 L 26.867,38.592 z" ++ id="path16" ++ style="fill:#ffffff;stroke:#010101;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round" /> ++ </g> ++ </g> ++ <path ++ d="M 9.424,42.607 C 9.424,42.607 8.073,42.064 6.722,42.064 C 5.371,42.064 4.019,42.607 4.019,42.607" ++ id="path18" ++ style="fill:none;stroke:#010101;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round" /> ++ <path ++ d="M 9.424,32.006 C 9.424,32.006 8.185,31.463 6.609,31.463 C 5.032,31.463 4.019,32.006 4.019,32.006" ++ id="path20" ++ style="fill:none;stroke:#010101;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round" /> ++ <path ++ d="M 9.424,21.678 C 9.424,21.678 8.299,21.134 6.497,21.134 C 4.695,21.134 4.019,21.678 4.019,21.678" ++ id="path22" ++ style="fill:none;stroke:#010101;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round" /> ++ ++ <line ++ x1="13.209" ++ x2="13.209" ++ y1="46.533001" ++ y2="11.505" ++ id="line24" ++ style="fill:none;stroke:#010101;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round" /> ++ ++ <g ++ id="g26"> ++ ++ ++ </g> ++ </g> ++</g><rect ++ y="28.864494" ++ x="28.753164" ++ height="22.87829" ++ width="23.546305" ++ id="rect2668" ++ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.99260712;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><g ++ id="view-expand" ++ display="block" ++ transform="matrix(0.4680612,0,0,0.4482681,27.768809,28.143274)" ++ style="fill:#000000;display:block"> ++ <path ++ id="path5" ++ d="M 4.875,5 L 4.875,50 L 49.875,50 L 49.875,5 L 4.875,5 z M 23.638,44.051 L 12.574,44.051 C 12.503,44.051 12.433,44.038 12.364,44.03 C 12.322,44.025 12.28,44.026 12.238,44.017 C 12.205,44.01 12.174,43.997 12.141,43.989 C 12.062,43.968 11.983,43.949 11.907,43.918 C 11.894,43.912 11.882,43.903 11.869,43.897 C 11.779,43.857 11.691,43.813 11.607,43.757 C 11.511,43.694 11.42,43.62 11.338,43.538 C 11.255,43.455 11.181,43.363 11.116,43.266 C 11.086,43.22 11.065,43.17 11.04,43.122 C 11.012,43.07 10.98,43.02 10.957,42.965 C 10.925,42.889 10.905,42.809 10.885,42.73 C 10.877,42.7 10.864,42.67 10.858,42.639 C 10.839,42.541 10.831,42.443 10.829,42.343 C 10.829,42.328 10.825,42.315 10.825,42.3 L 10.825,31.236 C 10.825,30.267 11.608,29.485 12.574,29.485 C 13.542,29.485 14.325,30.267 14.325,31.236 L 14.325,38.075 L 22.337,30.06 C 23.021,29.378 24.129,29.378 24.813,30.06 C 25.495,30.744 25.495,31.852 24.813,32.537 L 16.8,40.549 L 23.638,40.549 L 23.638,40.552 C 24.604,40.552 25.388,41.334 25.388,42.3 C 25.389,43.267 24.604,44.051 23.638,44.051 z M 42.573,25.114 C 41.605,25.114 40.822,24.331 40.822,23.363 L 40.822,16.523 L 31.809,25.536 C 31.467,25.878 31.019,26.049 30.571,26.049 C 30.124,26.049 29.675,25.878 29.334,25.536 C 28.651,24.852 28.651,23.745 29.334,23.061 L 38.345,14.049 L 31.511,14.049 C 30.545,14.049 29.76,13.264 29.76,12.298 C 29.76,11.332 30.545,10.547 31.511,10.547 L 42.573,10.547 C 42.677,10.547 42.782,10.559 42.885,10.578 C 42.892,10.579 42.9,10.579 42.906,10.58 C 42.961,10.591 43.012,10.611 43.066,10.627 C 43.124,10.644 43.182,10.657 43.238,10.68 C 43.27,10.693 43.3,10.713 43.331,10.729 C 43.402,10.763 43.475,10.796 43.541,10.841 C 43.598,10.878 43.646,10.924 43.697,10.968 C 43.734,10.999 43.774,11.025 43.809,11.059 C 43.856,11.106 43.892,11.16 43.933,11.211 C 43.963,11.25 43.999,11.285 44.027,11.326 C 44.088,11.417 44.137,11.513 44.178,11.611 C 44.181,11.617 44.185,11.622 44.188,11.628 C 44.222,11.711 44.245,11.796 44.265,11.883 C 44.272,11.908 44.283,11.933 44.287,11.959 C 44.299,12.02 44.301,12.083 44.306,12.145 C 44.311,12.196 44.322,12.247 44.322,12.298 L 44.324,23.363 C 44.324,24.332 43.54,25.114 42.573,25.114 z" ++ style="fill:#000000" /> ++</g></svg> +\ No newline at end of file +diff --git a/extensions/cpsection/Makefile.am b/extensions/cpsection/Makefile.am +index a92b5dd..8edc4b7 100644 +--- a/extensions/cpsection/Makefile.am ++++ b/extensions/cpsection/Makefile.am +@@ -1,4 +1,4 @@ +-SUBDIRS = aboutme aboutcomputer datetime frame keyboard language \ ++SUBDIRS = aboutme aboutcomputer datetime frame journalmanagement keyboard language \ + modemconfiguration network power updater + + sugardir = $(pkgdatadir)/extensions/cpsection +diff --git a/extensions/cpsection/journalmanagement/Makefile.am b/extensions/cpsection/journalmanagement/Makefile.am +new file mode 100644 +index 0000000..ed68aa7 +--- /dev/null ++++ b/extensions/cpsection/journalmanagement/Makefile.am +@@ -0,0 +1,6 @@ ++sugardir = $(pkgdatadir)/extensions/cpsection/journalmanagement ++ ++sugar_PYTHON = \ ++ __init__.py \ ++ model.py \ ++ view.py +diff --git a/extensions/cpsection/journalmanagement/__init__.py b/extensions/cpsection/journalmanagement/__init__.py +new file mode 100644 +index 0000000..6eace00 +--- /dev/null ++++ b/extensions/cpsection/journalmanagement/__init__.py +@@ -0,0 +1,22 @@ ++# Copyright (C) 2010 Paraguay Educa, Martin Abente ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US ++ ++from gettext import gettext as _ ++ ++CLASS = 'JournalManagement' ++ICON = 'module-journalmanagement' ++TITLE = _('Journal Management') ++ +diff --git a/extensions/cpsection/journalmanagement/model.py b/extensions/cpsection/journalmanagement/model.py +new file mode 100644 +index 0000000..811bdfb +--- /dev/null ++++ b/extensions/cpsection/journalmanagement/model.py +@@ -0,0 +1,78 @@ ++# Copyright (C) 2010 Paraguay Educa, Martin Abente, Bernie Innocenti ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US ++ ++import os ++import gobject ++import glib ++import gio ++import logging ++ ++BYTES_TO_READ = 100 ++ ++class JournalManagementModel(gobject.GObject): ++ ++ __gtype_name__ = 'JournalManagementModel' ++ ++ __gsignals__ = { ++ 'journal-management-running' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([str])), ++ 'journal-management-started' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'journal-management-finished' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'journal-management-failed' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) ++ } ++ ++ def __init__(self): ++ gobject.GObject.__init__(self) ++ ++ self._running = False ++ self._backup_script_path = ['/usr/bin/journal-backup'] ++ self._restore_script_path = ['/usr/bin/journal-restore'] ++ ++ def do_backup(self): ++ self.run_cmd_async(self._backup_script_path) ++ ++ def do_restore(self): ++ self.run_cmd_async(self._restore_script_path) ++ ++ def report_process_status(self, stream, result): ++ data = stream.read_finish(result) ++ ++ if len(data): ++ self.emit('journal-management-running', data) ++ stream.read_async(BYTES_TO_READ, self.report_process_status) ++ ++ def run_cmd_async(self, cmd): ++ if self._running == False: ++ try: ++ pid, stdin, stdout, stderr = glib.spawn_async(cmd, flags=glib.SPAWN_DO_NOT_REAP_CHILD, standard_output=True) ++ gobject.child_watch_add(pid, _handle_process_end, (self)) ++ except Exception: ++ self.emit('journal-management-failed') ++ else: ++ stdin_stream = gio.unix.InputStream(stdout, True) ++ stdin_stream.read_async(BYTES_TO_READ, self.report_process_status) ++ ++ self._running = True ++ self.emit('journal-management-started') ++ ++def _handle_process_end(pid, condition, myself): ++ myself._running = False ++ ++ if os.WIFEXITED(condition) and\ ++ os.WEXITSTATUS(condition) == 0: ++ myself.emit('journal-management-finished') ++ else: ++ myself.emit('journal-management-failed') ++ +diff --git a/extensions/cpsection/journalmanagement/view.py b/extensions/cpsection/journalmanagement/view.py +new file mode 100644 +index 0000000..ae3194c +--- /dev/null ++++ b/extensions/cpsection/journalmanagement/view.py +@@ -0,0 +1,236 @@ ++# Copyright (C) 2010 Paraguay Educa, Martin Abente ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US. ++ ++import gtk ++import gobject ++import logging ++from gettext import gettext as _ ++ ++from jarabe.model.session import get_session_manager ++ ++from sugar.graphics import style ++from sugar.graphics.alert import Alert ++from sugar.graphics.icon import Icon ++ ++from jarabe.controlpanel.sectionview import SectionView ++ ++from model import JournalManagementModel ++ ++class JournalManagement(SectionView): ++ def __init__(self, model, alerts): ++ SectionView.__init__(self) ++ ++ self._model = JournalManagementModel() ++ self._model.connect('journal-management-running', self._set_update_log) ++ self._model.connect('journal-management-started', self._set_status_started) ++ self._model.connect('journal-management-finished', self._set_status_finished) ++ self._model.connect('journal-management-failed', self._set_status_failed) ++ ++ self.restart_alerts = alerts ++ self._showing_alert = False ++ self._process_name = None ++ self._needs_restart = True ++ ++ self.set_border_width(style.DEFAULT_SPACING) ++ self.set_spacing(style.DEFAULT_SPACING) ++ self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) ++ ++ self._vbox = gtk.VBox() ++ ++ self._setup_options() ++ self._setup_status_info() ++ self._setup_more_info() ++ ++ self._vbox.show() ++ self.pack_start(self._vbox, expand=True) ++ ++ def _setup_options(self): ++ self._setup_separator(_('Options')) ++ ++ self._setup_option(_('Backup'), \ ++ _('Save your Journal to the School Server'), \ ++ self._pre_start_backup_cb) ++ ++ self._setup_option(_('Restore'), \ ++ _('Restore your Journal to the last backup'), \ ++ self._pre_start_restore_cb) ++ ++ def _setup_option(self, button_text, description_text, button_callback): ++ option_hbox = gtk.HBox() ++ ++ button = gtk.Button(label=button_text) ++ button.connect('pressed', button_callback) ++ button.show() ++ option_hbox.pack_start(button, expand=True, fill=True) ++ ++ label = gtk.Label(description_text) ++ label.show() ++ option_hbox.pack_start(label, expand=True, fill=True) ++ ++ option_hbox.show() ++ self._vbox.pack_start(option_hbox, expand=False, padding=5) ++ ++ def _setup_expander(self): ++ expander = gtk.Expander(_('Show')) ++ expander.connect("notify::expanded", self._log_menu_control) ++ expander.show() ++ ++ self._vbox.pack_start(expander, expand=False) ++ ++ def _setup_more_info(self): ++ self._setup_separator(_('Log')) ++ self._setup_expander() ++ self._setup_log() ++ ++ def _setup_status_info(self): ++ self._setup_separator(_('Status')) ++ ++ self._status_label = gtk.Label(_('No process is running')) ++ self._status_label.show() ++ ++ self._vbox.pack_start(self._status_label, expand=False, fill=False) ++ ++ def _setup_log(self): ++ self._log_vbox = gtk.VBox() ++ ++ scrolled_window = gtk.ScrolledWindow() ++ scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) ++ self._log_vbox.pack_start(scrolled_window, expand=True, padding= 10) ++ ++ self._log_view = gtk.TextView() ++ self._log_view.set_editable(False) ++ self._log_buffer = self._log_view.get_buffer() ++ scrolled_window.add(self._log_view) ++ ++ self._vbox.pack_start(self._log_vbox, expand=True) ++ ++ def _setup_separator(self, label_text): ++ separator_vbox = gtk.VBox() ++ ++ separator = gtk.HSeparator() ++ separator.show() ++ separator_vbox.pack_start(separator, expand=False) ++ ++ label = gtk.Label(label_text) ++ label.set_alignment(0, 0) ++ label.show() ++ separator_vbox.pack_start(label, expand=False) ++ ++ separator_vbox.show() ++ self._vbox.pack_start(separator_vbox, expand=False, padding=10) ++ ++ def _log_menu_control(self, expander, data= None): ++ if expander.get_expanded(): ++ self._log_vbox.show_all() ++ else: ++ self._log_vbox.hide() ++ ++ def _pre_start_restore_cb(self, button, data= None): ++ self._show_alert(_('Restore Warning!'), \ ++ _('You are about to delete all your journal, are you sure?'), \ ++ self._response_restore_cb) ++ ++ def _response_restore_cb(self, alert, response_id): ++ if response_id == gtk.RESPONSE_APPLY: ++ self._process_name = _('Restore') ++ self._needs_restart = True ++ self._model.do_restore() ++ ++ self._destroy_alert(alert) ++ ++ def _pre_start_backup_cb(self, button, data= None): ++ self._show_alert(_('Backup Warning!'), \ ++ _('This process could take several minutes, are you sure?'), \ ++ self._response_backup_cb) ++ ++ def _response_backup_cb(self, alert, response_id): ++ if response_id == gtk.RESPONSE_APPLY: ++ self._process_name = _('Backup') ++ self._needs_restart = False ++ self._model.do_backup() ++ ++ self._destroy_alert(alert) ++ ++ def _set_update_log(self, model, data): ++ self._log_buffer.insert(self._log_buffer.get_end_iter(), data) ++ self._log_view.scroll_to_iter(self._log_buffer.get_end_iter(), 0) ++ ++ def _set_status_started(self, model, data=None): ++ self._status_label.set_text(self._process_name + ' ' +\ ++ _('is running, please wait...')) ++ ++ self._hack_hide_toolbar_buttons() ++ ++ def _set_status_finished(self, model, data=None): ++ self._status_label.set_text(self._process_name + ' ' + \ ++ _('has finished, please check the logs.')) ++ ++ if self._needs_restart == True: ++ self._show_alert(self._process_name + ' ' + \ ++ _('Warning!'), \ ++ _('The process has finished, Sugar will restart now.'), \ ++ self._post_process_restart_cb, \ ++ True) ++ else: ++ self._hack_show_toolbar_buttons() ++ ++ def _post_process_restart_cb(self, alert, responde_id): ++ session_manager = get_session_manager() ++ session_manager.logout() ++ ++ def _set_status_failed(self, model, data=None): ++ self._status_label.set_text(self._process_name + ' ' +\ ++ _('has failed.')) ++ ++ self._hack_show_toolbar_buttons() ++ ++ def _show_alert(self, title, msg, response_listener_cb, only_yes= False): ++ if self._showing_alert == False and \ ++ self._model._running == False: ++ alert = Alert() ++ alert.props.title = title ++ alert.props.msg = msg ++ ++ if only_yes == False: ++ icon = Icon(icon_name='dialog-cancel') ++ alert.add_button(gtk.RESPONSE_CANCEL, _('No'), icon) ++ icon.show() ++ ++ icon = Icon(icon_name='dialog-ok') ++ alert.add_button(gtk.RESPONSE_APPLY, _('Yes'), icon) ++ icon.show() ++ ++ alert.connect('response', response_listener_cb) ++ alert.show() ++ ++ self._vbox.pack_start(alert, False) ++ self._vbox.reorder_child(alert, 0) ++ self._showing_alert = True ++ ++ def _destroy_alert(self, alert): ++ self._vbox.remove(alert) ++ self._showing_alert = False ++ ++ def _hack_show_toolbar_buttons(self): ++ panel_control = self.get_toplevel() ++ panel_control._section_toolbar.cancel_button.show() ++ panel_control._section_toolbar.accept_button.show() ++ ++ def _hack_hide_toolbar_buttons(self): ++ panel_control = self.get_toplevel() ++ panel_control._section_toolbar.cancel_button.hide() ++ panel_control._section_toolbar.accept_button.hide() ++ +-- +1.7.0.4 + + diff --git a/rpms/sugar/pe558-journal-management-control-panel-feature.patch b/rpms/sugar/pe558-journal-management-control-panel-feature.patch new file mode 100644 index 0000000..2b8d7ca --- /dev/null +++ b/rpms/sugar/pe558-journal-management-control-panel-feature.patch @@ -0,0 +1,465 @@ +From tecnologia-bounces@paraguayeduca.org Fri May 21 23:18:52 2010 +Return-Path: <tecnologia-bounces@paraguayeduca.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from mail-yw0-f195.google.com (mail-yw0-f195.google.com + [209.85.211.195]) by trinity.develer.com (Postfix) with ESMTP id + 8B2D61D6098 for <bernie@codewiz.org>; Fri, 21 May 2010 23:18:52 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: by mail-yw0-f195.google.com with SMTP id 33sf772845ywh.11 for + <bernie@codewiz.org>; Fri, 21 May 2010 14:18:52 -0700 (PDT) +Received: by 10.150.187.8 with SMTP id k8mr3859160ybf.219.1274476732273; + Fri, 21 May 2010 14:18:52 -0700 (PDT) +Received: by 10.150.187.8 with SMTP id k8mr3859143ybf.219.1274476731724; + Fri, 21 May 2010 14:18:51 -0700 (PDT) +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) by mx.google.com with ESMTP id + z29si6953160ybc.29.2010.05.21.14.18.50; Fri, 21 May 2010 14:18:51 -0700 + (PDT) +Received-SPF: pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) client-ip=190.104.152.113; +Authentication-Results: mx.google.com; spf=pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) smtp.mail=tecnologia-bounces@paraguayeduca.org +Received: (qmail 12576 invoked by uid 508); 21 May 2010 17:28:43 -0400 +Received: from localhost.localdomain (HELO buho.paraguayeduca.org) + (127.0.0.1) by buho.paraguayeduca.org with SMTP; 21 May 2010 17:28:43 -0400 +Delivered-To: paraguayeduca.org-tecnologia@paraguayeduca.org +Received: (qmail 12527 invoked by uid 508); 21 May 2010 17:28:42 -0400 +Received: from jorge-laptop.oficina.paraguayeduca.org (HELO + localhost.localdomain) (192.168.0.176) by buho.paraguayeduca.org with SMTP; + 21 May 2010 17:28:42 -0400 +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: bernie@codewiz.org +Date: Fri, 21 May 2010 17:18:15 -0400 +Message-Id: <1274476695-12808-4-git-send-email-jsaldivar@paraguayeduca.org> +X-Mailer: git-send-email 1.7.0.4 +In-Reply-To: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +References: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +Cc: Jorge Saldivar Galli <jorgesaldivar@gmail.com>, + tecnologia@paraguayeduca.org +Subject: [Tecnologia] [sugar 4/4] Journal management control panel feature +X-BeenThere: tecnologia@paraguayeduca.org +X-Mailman-Version: 2.1.12 +Precedence: list +Reply-To: tecnologia@paraguayeduca.org +List-Id: <tecnologia.paraguayeduca.org> +List-Unsubscribe: + <http://mail.paraguayeduca.org/mailman/options/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=unsubscribe> +List-Archive: <http://mail.paraguayeduca.org/mailman/private/tecnologia/> +List-Post: <mailto:tecnologia@paraguayeduca.org> +List-Help: <mailto:tecnologia-request@paraguayeduca.org?subject=help> +List-Subscribe: + <http://mail.paraguayeduca.org/mailman/listinfo/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: tecnologia-bounces@paraguayeduca.org +Errors-To: tecnologia-bounces@paraguayeduca.org +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS, + T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +From: Jorge Saldivar <jorge@jorge-laptop.(none)> + + +Signed-off-by: Jorge Saldivar Galli <jorgesaldivar@gmail.com> +--- + extensions/cpsection/journalmanagement/__init__.py | 8 +- + extensions/cpsection/journalmanagement/model.py | 43 +++- + extensions/cpsection/journalmanagement/view.py | 223 ++++++++++++++++++-- + 3 files changed, 240 insertions(+), 34 deletions(-) + +diff --git a/extensions/cpsection/journalmanagement/__init__.py b/extensions/cpsection/journalmanagement/__init__.py +index 6eace00..c98456b 100644 +--- a/extensions/cpsection/journalmanagement/__init__.py ++++ b/extensions/cpsection/journalmanagement/__init__.py +@@ -1,4 +1,4 @@ +-# Copyright (C) 2010 Paraguay Educa, Martin Abente ++# Copyright (C) 2010 Paraguay Educa, Martin Abente, Jorge Saldivar + # + # 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 +@@ -15,8 +15,14 @@ + # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US + + from gettext import gettext as _ ++import gconf ++ ++from sugar.graphics.xocolor import XoColor + + CLASS = 'JournalManagement' + ICON = 'module-journalmanagement' + TITLE = _('Journal Management') ++client = gconf.client_get_default() ++COLOR = XoColor(client.get_string('/desktop/sugar/user/color')) ++ + +diff --git a/extensions/cpsection/journalmanagement/model.py b/extensions/cpsection/journalmanagement/model.py +index 811bdfb..80642e8 100644 +--- a/extensions/cpsection/journalmanagement/model.py ++++ b/extensions/cpsection/journalmanagement/model.py +@@ -1,4 +1,4 @@ +-# Copyright (C) 2010 Paraguay Educa, Martin Abente, Bernie Innocenti ++# Copyright (C) 2010 Paraguay Educa, Martin Abente, Bernie Innocenti, Jorge Saldivar + # + # 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 +@@ -18,19 +18,22 @@ import os + import gobject + import glib + import gio ++import gconf + import logging + ++from jarabe.journal.volumestoolbar import MOUNT_DIRECTORY_PATH, MOUNT_DIRECTORY_VALUE ++ + BYTES_TO_READ = 100 + +-class JournalManagementModel(gobject.GObject): ++class JournalBackupRestoreModel(gobject.GObject): + +- __gtype_name__ = 'JournalManagementModel' ++ __gtype_name__ = 'JournalBackupRestoreModel' + + __gsignals__ = { +- 'journal-management-running' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([str])), +- 'journal-management-started' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), +- 'journal-management-finished' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), +- 'journal-management-failed' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) ++ 'journal-backuprestore-running' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([str])), ++ 'journal-backuprestore-started' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'journal-backuprestore-finished' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), ++ 'journal-backuprestore-failed' : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) + } + + def __init__(self): +@@ -50,7 +53,7 @@ class JournalManagementModel(gobject.GObject): + data = stream.read_finish(result) + + if len(data): +- self.emit('journal-management-running', data) ++ self.emit('journal-backuprestore-running', data) + stream.read_async(BYTES_TO_READ, self.report_process_status) + + def run_cmd_async(self, cmd): +@@ -59,20 +62,36 @@ class JournalManagementModel(gobject.GObject): + pid, stdin, stdout, stderr = glib.spawn_async(cmd, flags=glib.SPAWN_DO_NOT_REAP_CHILD, standard_output=True) + gobject.child_watch_add(pid, _handle_process_end, (self)) + except Exception: +- self.emit('journal-management-failed') ++ self.emit('journal-backuprestore-failed') + else: + stdin_stream = gio.unix.InputStream(stdout, True) + stdin_stream.read_async(BYTES_TO_READ, self.report_process_status) + + self._running = True +- self.emit('journal-management-started') ++ self.emit('journal-backuprestore-started') + + def _handle_process_end(pid, condition, myself): + myself._running = False + + if os.WIFEXITED(condition) and\ + os.WEXITSTATUS(condition) == 0: +- myself.emit('journal-management-finished') ++ myself.emit('journal-backuprestore-finished') + else: +- myself.emit('journal-management-failed') ++ myself.emit('journal-backuprestore-failed') ++ ++def get_directory_path(): ++ client = gconf.client_get_default() ++ value = client.get_string(MOUNT_DIRECTORY_PATH) or os.environ['HOME'] ++ return value ++ ++def get_mount_directory_option(): ++ client = gconf.client_get_default() ++ return client.get_string(MOUNT_DIRECTORY_VALUE) or 'False' ++ ++def set_directory_path(directory_path): ++ client = gconf.client_get_default() ++ client.set_string(MOUNT_DIRECTORY_PATH, directory_path) + ++def set_mount_directory_option(mount_directory_value): ++ client = gconf.client_get_default() ++ client.set_string(MOUNT_DIRECTORY_VALUE, mount_directory_value) +diff --git a/extensions/cpsection/journalmanagement/view.py b/extensions/cpsection/journalmanagement/view.py +index ae3194c..0fd6339 100644 +--- a/extensions/cpsection/journalmanagement/view.py ++++ b/extensions/cpsection/journalmanagement/view.py +@@ -1,4 +1,4 @@ +-# Copyright (C) 2010 Paraguay Educa, Martin Abente ++# Copyright (C) 2010 Paraguay Educa, Martin Abente, Jorge Saldivar + # + # 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 +@@ -14,40 +14,96 @@ + # along with this program; if not, write to the Free Software + # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US. + ++import os + import gtk + import gobject +-import logging + from gettext import gettext as _ ++import time ++import logging + +-from jarabe.model.session import get_session_manager +- +-from sugar.graphics import style +-from sugar.graphics.alert import Alert + from sugar.graphics.icon import Icon ++from sugar.graphics import style ++from sugar.graphics.xocolor import XoColor + + from jarabe.controlpanel.sectionview import SectionView ++from jarabe.controlpanel.inlinealert import InlineAlert + +-from model import JournalManagementModel ++from cpsection.modemconfiguration.view import EntryWithLabel + +-class JournalManagement(SectionView): +- def __init__(self, model, alerts): +- SectionView.__init__(self) ++from model import JournalBackupRestoreModel + +- self._model = JournalManagementModel() +- self._model.connect('journal-management-running', self._set_update_log) +- self._model.connect('journal-management-started', self._set_status_started) +- self._model.connect('journal-management-finished', self._set_status_finished) +- self._model.connect('journal-management-failed', self._set_status_failed) ++APPLY_TIMEOUT = 1000 ++ ++class DirectoryPathEntry(EntryWithLabel): ++ def __init__(self, model): ++ EntryWithLabel.__init__(self, '') ++ self._entry.set_max_length(256) ++ self._entry.set_width_chars(40) ++ self._entry.modify_bg(gtk.STATE_INSENSITIVE, gtk.gdk.color_parse("white")) ++ self._entry.connect('changed', self.__entry_changed_cb) ++ self._model = model ++ self._fail = '' ++ ++ def __entry_changed_cb(self, widget, data=None): ++ if self._timeout_sid: ++ gobject.source_remove(self._timeout_sid) ++ self._timeout_sid = gobject.timeout_add(APPLY_TIMEOUT, ++ self.__timeout_cb) ++ ++ def __timeout_cb(self): ++ self._timeout_sid = 0 ++ ++ if not os.access(self._entry.get_text(), os.F_OK): ++ self._is_valid = False ++ self._fail = _("Directory path does not exist. Please write down a valid one.") ++ else: ++ try: ++ self.set_value(self._entry.get_text()) ++ except ValueError, detail: ++ self._is_valid = False ++ self._fail = detail ++ else: ++ self._is_valid = True ++ self._fail = '' ++ ++ self.notify('is-valid') ++ ++ return False ++ ++ def get_value(self): ++ value = self._model.get_directory_path() ++ return value ++ ++ def set_value(self, directory_path): ++ self._model.set_directory_path(directory_path) ++ ++ def set_enable(self): ++ self._entry.set_sensitive(True) ++ self._entry.set_editable(True) ++ ++ def set_disable(self): ++ self._entry.set_sensitive(False) ++ self._entry.set_editable(False) ++ ++ def get_fail(self): ++ return self._fail ++ ++ def _get_is_valid(self): ++ return self._is_valid ++ is_valid = gobject.property(type=bool, getter=_get_is_valid, default=True) ++ ++class JournalBackupRestore(): ++ def __init__(self): ++ self._model = JournalBackupRestoreModel() ++ self._model.connect('journal-backuprestore-running', self._set_update_log) ++ self._model.connect('journal-backuprestore-started', self._set_status_started) ++ self._model.connect('journal-backuprestore-finished', self._set_status_finished) ++ self._model.connect('journal-backuprestore-failed', self._set_status_failed) + +- self.restart_alerts = alerts + self._showing_alert = False + self._process_name = None + self._needs_restart = True + +- self.set_border_width(style.DEFAULT_SPACING) +- self.set_spacing(style.DEFAULT_SPACING) +- self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) +- + self._vbox = gtk.VBox() + + self._setup_options() +@@ -55,7 +111,9 @@ class JournalManagement(SectionView): + self._setup_more_info() + + self._vbox.show() +- self.pack_start(self._vbox, expand=True) ++ ++ def get_widgets(self): ++ return self._vbox + + def _setup_options(self): + self._setup_separator(_('Options')) +@@ -234,3 +292,126 @@ class JournalManagement(SectionView): + panel_control._section_toolbar.cancel_button.hide() + panel_control._section_toolbar.accept_button.hide() + ++class JournalMountDirectory(): ++ def __init__(self, main_view, model): ++ self._model = model ++ self._main_view = main_view ++ self._vbox = gtk.VBox() ++ self._setup_widgets() ++ self._directory_path_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) ++ self._directory_path_alert = InlineAlert() ++ self._directory_path_alert_box.pack_start(self._directory_path_alert, False) ++ self._vbox.pack_start(self._directory_path_alert_box) ++ self._vbox.show() ++ ++ def get_widgets(self): ++ return self._vbox ++ ++ def _setup_separator(self, label_text): ++ separator_vbox = gtk.VBox() ++ ++ separator = gtk.HSeparator() ++ separator.show() ++ separator_vbox.pack_start(separator, expand=False) ++ ++ label = gtk.Label(label_text) ++ label.set_alignment(0, 0) ++ label.show() ++ separator_vbox.pack_start(label, expand=False) ++ ++ separator_vbox.show() ++ self._vbox.pack_start(separator_vbox, expand=False, padding=10) ++ ++ def _setup_directory_path_entry(self): ++ self._directory_path_entry = DirectoryPathEntry(self._model) ++ self._directory_path_entry.set_text_from_model() ++ self._directory_path_entry.connect('notify::is-valid', self.__notify_is_valid_cb) ++ self._directory_path_entry.show() ++ self._vbox.pack_start(self._directory_path_entry, expand=False) ++ ++ def _setup_option_checkbox(self): ++ self._check_box = gtk.CheckButton(_('Mount GNOME Directory')) ++ self._check_box.connect('clicked', self.__checkbox_state_change_cb) ++ if self._model.get_mount_directory_option() == "True": ++ self._check_box.set_active(True) ++ else: ++ self._check_box.set_active(False) ++ self._check_box.show() ++ ++ self._vbox.pack_start(self._check_box, False) ++ ++ def _setup_widgets(self): ++ self._setup_separator(_("Options")) ++ self._setup_option_checkbox() ++ self._setup_separator(_("Directory Path")) ++ self._setup_directory_path_entry() ++ self.__set_directory_path_entry_state() ++ ++ self._main_view.needs_restart = False ++ ++ def __checkbox_state_change_cb(self, checkbox, data=None): ++ if checkbox.get_active(): ++ self._model.set_mount_directory_option("True") ++ else: ++ self._model.set_mount_directory_option("False") ++ self.__set_directory_path_entry_state() ++ ++ def __set_directory_path_entry_state(self): ++ if self._check_box.get_active(): ++ self._directory_path_entry.set_enable() ++ else: ++ self._directory_path_entry.set_disable() ++ ++ def _validate(self): ++ if self._directory_path_entry.is_valid: ++ self._main_view.props.is_valid = True ++ self._directory_path_alert.hide() ++ self._directory_path_alert_box.hide() ++ else: ++ self._main_view.props.is_valid = False ++ self._directory_path_alert.props.msg = self._directory_path_entry.get_fail() ++ self._directory_path_alert_box.show() ++ self._directory_path_alert.show() ++ ++ def __notify_is_valid_cb(self, entry, pspec): ++ if entry.is_valid: ++ self._main_view.needs_restart = True ++ self._validate() ++ ++class JournalManagement(SectionView): ++ def __init__(self, model, alerts): ++ SectionView.__init__(self) ++ ++ self._model = model ++ self.restart_alerts = alerts ++ ++ self._showing_alert = False ++ self._needs_restart = True ++ ++ self.set_border_width(style.DEFAULT_SPACING) ++ self.set_spacing(style.DEFAULT_SPACING) ++ self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) ++ ++ self._configurations_tabs = gtk.Notebook() ++ self._configurations_tabs.set_tab_pos(gtk.POS_TOP) ++ self._configurations_tabs.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white")) ++ ++ label = gtk.Label(_("Mount Directory")) ++ self._configurations_tabs.append_page(self._setup_mount_directory_tab(self, model), label) ++ ++ label = gtk.Label(_("Restore/Backup")) ++ self._configurations_tabs.append_page(self._setup_restore_backup_tab(), label) ++ ++ self._group.add_widget(self._configurations_tabs) ++ self.pack_start(self._configurations_tabs, expand=False) ++ self._configurations_tabs.show() ++ ++ def _setup_mount_directory_tab(self, main_view, model): ++ return JournalMountDirectory(main_view, model).get_widgets() ++ ++ def _setup_restore_backup_tab(self): ++ return JournalBackupRestore().get_widgets() ++ ++ def undo(self): ++ self._model.undo() ++ +-- +1.7.0.4 + +_______________________________________________ +Tecnologia mailing list +Tecnologia@paraguayeduca.org +http://mail.paraguayeduca.org/mailman/listinfo/tecnologia + + diff --git a/rpms/sugar/pe558-modify-volumnestoolbar-to-mount-a-directory.patch b/rpms/sugar/pe558-modify-volumnestoolbar-to-mount-a-directory.patch new file mode 100644 index 0000000..619a73c --- /dev/null +++ b/rpms/sugar/pe558-modify-volumnestoolbar-to-mount-a-directory.patch @@ -0,0 +1,160 @@ +From tecnologia-bounces@paraguayeduca.org Fri May 21 23:18:59 2010 +Return-Path: <tecnologia-bounces@paraguayeduca.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from mail-gw0-f54.google.com (mail-gw0-f54.google.com + [74.125.83.54]) by trinity.develer.com (Postfix) with ESMTP id 144411D6098 + for <bernie@codewiz.org>; Fri, 21 May 2010 23:18:59 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.2 at trinity.develer.com +Received: by gwj16 with SMTP id 16sf817599gwj.41 for <bernie@codewiz.org>; + Fri, 21 May 2010 14:18:58 -0700 (PDT) +Received: by 10.150.240.16 with SMTP id n16mr3879747ybh.256.1274476738934; + Fri, 21 May 2010 14:18:58 -0700 (PDT) +Received: by 10.150.240.16 with SMTP id n16mr3879740ybh.256.1274476738661; + Fri, 21 May 2010 14:18:58 -0700 (PDT) +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) by mx.google.com with ESMTP id + c5si6951324ybi.40.2010.05.21.14.18.57; Fri, 21 May 2010 14:18:58 -0700 (PDT) +Received-SPF: pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) client-ip=190.104.152.113; +Authentication-Results: mx.google.com; spf=pass (google.com: domain of + tecnologia-bounces@paraguayeduca.org designates 190.104.152.113 as + permitted sender) smtp.mail=tecnologia-bounces@paraguayeduca.org +Received: (qmail 12554 invoked by uid 508); 21 May 2010 17:28:43 -0400 +Received: from localhost.localdomain (HELO buho.paraguayeduca.org) + (127.0.0.1) by buho.paraguayeduca.org with SMTP; 21 May 2010 17:28:43 -0400 +Delivered-To: paraguayeduca.org-tecnologia@paraguayeduca.org +Received: (qmail 12505 invoked by uid 508); 21 May 2010 17:28:42 -0400 +Received: from jorge-laptop.oficina.paraguayeduca.org (HELO + localhost.localdomain) (192.168.0.176) by buho.paraguayeduca.org with SMTP; + 21 May 2010 17:28:42 -0400 +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: bernie@codewiz.org +Date: Fri, 21 May 2010 17:18:14 -0400 +Message-Id: <1274476695-12808-3-git-send-email-jsaldivar@paraguayeduca.org> +X-Mailer: git-send-email 1.7.0.4 +In-Reply-To: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +References: <1274476695-12808-1-git-send-email-jsaldivar@paraguayeduca.org> +Cc: Jorge Saldivar Galli <jorgesaldivar@gmail.com>, + tecnologia@paraguayeduca.org +Subject: [Tecnologia] [sugar 3/4] Modify a few lines of volumnestoolber to + allow it mount a directory +X-BeenThere: tecnologia@paraguayeduca.org +X-Mailman-Version: 2.1.12 +Precedence: list +Reply-To: tecnologia@paraguayeduca.org +List-Id: <tecnologia.paraguayeduca.org> +List-Unsubscribe: + <http://mail.paraguayeduca.org/mailman/options/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=unsubscribe> +List-Archive: <http://mail.paraguayeduca.org/mailman/private/tecnologia/> +List-Post: <mailto:tecnologia@paraguayeduca.org> +List-Help: <mailto:tecnologia-request@paraguayeduca.org?subject=help> +List-Subscribe: + <http://mail.paraguayeduca.org/mailman/listinfo/tecnologia>, + <mailto:tecnologia-request@paraguayeduca.org?subject=subscribe> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: tecnologia-bounces@paraguayeduca.org +Errors-To: tecnologia-bounces@paraguayeduca.org +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS, + T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +X-Evolution-Source: imap://bernie@imap.develer.com/ +Content-Transfer-Encoding: 8bit + +From: Jorge Saldivar <jorge@jorge-laptop.(none)> + + +Signed-off-by: Jorge Saldivar Galli <jorgesaldivar@gmail.com> + +--- + +--- a/src/jarabe/journal/volumestoolbar.py.orig 2010-05-23 20:28:37.000000000 -0400 ++++ b/src/jarabe/journal/volumestoolbar.py 2010-05-23 20:28:55.000000000 -0400 +@@ -30,6 +30,9 @@ from sugar.graphics.xocolor import XoCol + from jarabe.journal import model + from jarabe.view.palettes import VolumePalette + ++MOUNT_DIRECTORY_PATH = '/desktop/sugar/journal/mount-directory-path' ++MOUNT_DIRECTORY_VALUE = '/desktop/sugar/journal/mount-directory-value' ++ + class VolumesToolbar(gtk.Toolbar): + __gtype_name__ = 'VolumesToolbar' + +@@ -51,25 +54,29 @@ class VolumesToolbar(gtk.Toolbar): + button.show() + self._volume_buttons = [button] + +- button = DirectoryButton() +- button.props.group = self._volume_buttons[0] +- button.set_palette(Palette(_('Directory GNOME'))) +- button.connect('toggled', self._button_toggled_cb) +- self.insert(button, 1) +- button.show() +- self._volume_buttons.append(button) +- + self.connect('destroy', self.__destroy_cb) + + gobject.idle_add(self._set_up_volumes) +- ++ ++ client = gconf.client_get_default() ++ mount_directory = client.get_string(MOUNT_DIRECTORY_VALUE) or 'False' ++ if mount_directory == 'True': ++ button = DirectoryButton() ++ button.props.group = self._volume_buttons[0] ++ button.set_palette(Palette(_('Directory') + ' ' + str(button.get_mount_point()))) ++ button.connect('toggled', self._button_toggled_cb) ++ position = self.get_item_index(self._volume_buttons[-1]) + 1 ++ self.insert(button, position) ++ button.show() ++ self._volume_buttons.append(button) ++ self.show() + + def __destroy_cb(self, widget): + volume_monitor = gio.volume_monitor_get() + volume_monitor.disconnect(self._mount_added_hid) + volume_monitor.disconnect(self._mount_removed_hid) + +- def _set_up_volumes(self): ++ def _set_up_volumes(self): + volume_monitor = gio.volume_monitor_get() + self._mount_added_hid = \ + volume_monitor.connect('mount-added', self.__mount_added_cb) +@@ -79,7 +86,6 @@ class VolumesToolbar(gtk.Toolbar): + for mount in volume_monitor.get_mounts(): + self._add_button(mount) + +- + def __mount_added_cb(self, volume_monitor, mount): + self._add_button(mount) + +@@ -192,12 +198,15 @@ class JournalButton(BaseButton): + + class DirectoryButton(BaseButton): + def __init__(self): +- BaseButton.__init__(self, mount_point=os.environ['HOME']) +- #BaseButton.__init__(self, mount_point="/tmp/hola") ++ client = gconf.client_get_default() ++ self.__mount_directory_path = client.get_string(MOUNT_DIRECTORY_PATH) or os.environ['HOME'] ++ BaseButton.__init__(self, mount_point=self.__mount_directory_path) + + #self.props.active = False + self.props.named_icon = 'drive' +- +- client = gconf.client_get_default() ++ + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color ++ ++ def get_mount_point(self): ++ return self.__mount_directory_path + +-- +1.7.0.4 + + diff --git a/rpms/sugar/reverse-sort-order-of-activities-list.patch b/rpms/sugar/reverse-sort-order-of-activities-list.patch new file mode 100644 index 0000000..d03b9bb --- /dev/null +++ b/rpms/sugar/reverse-sort-order-of-activities-list.patch @@ -0,0 +1,53 @@ +From jsaldivar@paraguayeduca.org Thu Jul 1 23:39:31 2010 +Return-Path: <jsaldivar@paraguayeduca.org> +X-Original-To: bernie@codewiz.org +Delivered-To: bernie@trinity.develer.com +Received: from buho.paraguayeduca.org (mail.paraguayeduca.org + [190.104.152.113]) by trinity.develer.com (Postfix) with ESMTPS id + F2DC21D6066 for <bernie@codewiz.org>; Thu, 1 Jul 2010 23:39:31 +0200 (CEST) +X-Virus-Status: Clean +X-Virus-Scanned: clamav-milter 0.95.3 at trinity.develer.com +Received: (qmail 2089 invoked by uid 508); 1 Jul 2010 17:49:19 -0400 +Received: from jorge-laptop.oficina.paraguayeduca.org (HELO + localhost.localdomain) (192.168.0.176) by buho.paraguayeduca.org with SMTP; + 1 Jul 2010 17:49:19 -0400 +From: "Jorge (jasg) Saldivar" <jsaldivar@paraguayeduca.org> +To: bernie@codewiz.org +Cc: tecnologia@paraguayeduca.org, Jorge Saldivar + <jsaldivar@paraguayeduca.org> +Subject: [PATCH] Change the method to add new actitivities in the + activities list in home view +Date: Thu, 1 Jul 2010 17:39:24 -0400 +Message-Id: <1278020364-18182-1-git-send-email-jsaldivar@paraguayeduca.org> +X-Mailer: git-send-email 1.7.0.4 +Organization: Paraguay Educa +X-Spam-Status: No, score=-1.7 required=3.5 tests=AWL,BAYES_00,SPF_PASS, + T_RP_MATCHES_RCVD autolearn=ham version=3.3.1 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + trinity.develer.com +Content-Transfer-Encoding: 8bit +Mime-Version: 1.0 + +From: Jorge Saldivar <jsaldivar@paraguayeduca.org> + +--- + src/jarabe/desktop/activitieslist.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py +index 87f2af0..546ac6f 100644 +--- a/src/jarabe/desktop/activitieslist.py ++++ b/src/jarabe/desktop/activitieslist.py +@@ -228,7 +228,7 @@ class ListModel(gtk.TreeModelSort): + '<span style="italic" weight="light">%s</span>' % \ + (activity_info.get_name(), tags) + +- self._model.append([activity_info.get_bundle_id(), ++ self._model.prepend([activity_info.get_bundle_id(), + favorite, + activity_info.get_icon(), + title, +-- +1.7.0.4 + + diff --git a/rpms/sugar/set-default-scaling-to-100.patch b/rpms/sugar/set-default-scaling-to-100.patch new file mode 100644 index 0000000..4b99b77 --- /dev/null +++ b/rpms/sugar/set-default-scaling-to-100.patch @@ -0,0 +1,11 @@ +--- sugar-0.88.1/bin/sugar.in.orig 2010-06-07 15:28:56.000000000 -0400 ++++ sugar-0.88.1/bin/sugar.in 2010-06-07 15:29:35.000000000 -0400 +@@ -37,7 +37,7 @@ while [ $# -ne 0 ] ; do + done + + if test -z "$SUGAR_SCALING"; then +- export SUGAR_SCALING=72 ++ export SUGAR_SCALING=100 + fi + + export GTK2_RC_FILES="@prefix@/share/sugar/data/sugar-$SUGAR_SCALING.gtkrc" diff --git a/rpms/sugar/simplify-the-definition-of-UpdateModel._bundles_to_check..patch b/rpms/sugar/simplify-the-definition-of-UpdateModel._bundles_to_check..patch new file mode 100644 index 0000000..ae86b48 --- /dev/null +++ b/rpms/sugar/simplify-the-definition-of-UpdateModel._bundles_to_check..patch @@ -0,0 +1,37 @@ +Date: Sun, 23 May 2010 14:50:26 -0400 +From: Michael Stone <michael@laptop.org> +To: sugar-devel@lists.sugarlabs.org +Subject: [Sugar-devel] [PATCH] Simplify the definition of + UpdateModel._bundles_to_check. + +The only purposes of the list comprehension in UpdateModel.check_updates() is +to set self._bundles_to_check to a list containing the elements returned by +bundleregistry.get_registry(). This purpose can be more succinctly achieved by +means of the list() constructor. + +Signed-off-by: Michael Stone <michael@laptop.org> +--- + extensions/cpsection/updater/model.py | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/extensions/cpsection/updater/model.py b/extensions/cpsection/updater/model.py +index c45dcd3..5bb8cf4 100755 +--- a/extensions/cpsection/updater/model.py ++++ b/extensions/cpsection/updater/model.py +@@ -63,8 +63,7 @@ class UpdateModel(gobject.GObject): + + def check_updates(self): + self.updates = [] +- self._bundles_to_check = \ +- [bundle for bundle in bundleregistry.get_registry()] ++ self._bundles_to_check = list(bundleregistry.get_registry()) + self._check_next_update() + + def _check_next_update(self): +-- +1.7.1 +_______________________________________________ +Sugar-devel mailing list +Sugar-devel@lists.sugarlabs.org +http://lists.sugarlabs.org/listinfo/sugar-devel + diff --git a/rpms/sugar/sizelist-0000-cover-letter.patch b/rpms/sugar/sizelist-0000-cover-letter.patch new file mode 100644 index 0000000..02082ac --- /dev/null +++ b/rpms/sugar/sizelist-0000-cover-letter.patch @@ -0,0 +1,42 @@ +From def49facd34182305e5d8c1ea273c0992aa90af0 Mon Sep 17 00:00:00 2001 +Message-Id: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Fri, 2 Jul 2010 04:10:01 -0300 +Subject: [PATCH v2 00/10] Journal sorting by file size and creation time. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This new version addresses two problems with the last patchset: + +Bert Freudenberg kindly reminded me that the 'ctime' property had a documented +string format [0], which Etoys was using. This version uses that format so we +don't break any activities expecting it. + +Bernie Innocenti produced a datastore that was unable to successfuly upgrade +(reindex) to the new version. The problem was that indexing a document failed +miserably when ctime or filesize didn't exist, this version avoids that. This +version also contains a new patch that checks for and adds the new metadata +when rebuilding the index so that old entries can be sorted. + +[0] http://wiki.sugarlabs.org/go/Development_Team/Low-level_Activity_API#Meta_Data + +Andrés Ambrois (10): + Journal: Retrieve filesize from the datastore + Add a filesize column to the journal list model + Journaltoolbox: Add add_separator method for convenience. + Add a ListViewButton to the journal search toolbar. + Rename the date column to 'sort_column' + Display the sorting property in the last column. + Expandedentry: Try to use the filesize property. + Implement sorting for removable devices. + Add sort by creation time option to the ListViewButton + Add ctime property to the journal model. + + src/jarabe/journal/expandedentry.py | 5 +- + src/jarabe/journal/journaltoolbox.py | 86 ++++++++++++++++++++++++++++++++++ + src/jarabe/journal/listmodel.py | 29 +++++++++-- + src/jarabe/journal/listview.py | 33 +++++++------ + src/jarabe/journal/model.py | 22 ++++++-- + 5 files changed, 147 insertions(+), 28 deletions(-) + diff --git a/rpms/sugar/sizelist-0001-Journal-Retrieve-filesize-from-the-datastore.patch b/rpms/sugar/sizelist-0001-Journal-Retrieve-filesize-from-the-datastore.patch new file mode 100644 index 0000000..7e1e108 --- /dev/null +++ b/rpms/sugar/sizelist-0001-Journal-Retrieve-filesize-from-the-datastore.patch @@ -0,0 +1,39 @@ +From 6df603a75bbae1d5a3ef23d3c2b6f3fe0d9b45c7 Mon Sep 17 00:00:00 2001 +Message-Id: <6df603a75bbae1d5a3ef23d3c2b6f3fe0d9b45c7.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 03:41:23 -0300 +Subject: [PATCH v2 01/10] Journal: Retrieve filesize from the datastore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add the filesize property to the list of properties we ask the datastore +for. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/model.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py +index ffc62e0..874d7bd 100644 +--- a/src/jarabe/journal/model.py ++++ b/src/jarabe/journal/model.py +@@ -36,9 +36,9 @@ DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' + DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + + # Properties the journal cares about. +-PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'keep', 'buddies', +- 'icon-color', 'mime_type', 'progress', 'activity', 'mountpoint', +- 'activity_id', 'bundle_id'] ++PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'filesize', ++ 'keep', 'buddies', 'icon-color', 'mime_type', 'progress', ++ 'activity', 'mountpoint', 'activity_id', 'bundle_id'] + + MIN_PAGES_TO_CACHE = 3 + MAX_PAGES_TO_CACHE = 5 +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0002-Add-a-filesize-column-to-the-journal-list-model.patch b/rpms/sugar/sizelist-0002-Add-a-filesize-column-to-the-journal-list-model.patch new file mode 100644 index 0000000..029f911 --- /dev/null +++ b/rpms/sugar/sizelist-0002-Add-a-filesize-column-to-the-journal-list-model.patch @@ -0,0 +1,63 @@ +From 65efc3575138a4d299edf7c1a59263ea57db588e Mon Sep 17 00:00:00 2001 +Message-Id: <65efc3575138a4d299edf7c1a59263ea57db588e.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 03:50:01 -0300 +Subject: [PATCH v2 02/10] Add a filesize column to the journal list model +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This will make it easy to display the current sorting column by +associating a cell renderer with it. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/listmodel.py | 17 +++++++++++------ + 1 files changed, 11 insertions(+), 6 deletions(-) + +diff --git a/src/jarabe/journal/listmodel.py b/src/jarabe/journal/listmodel.py +index 07f8544..135dc95 100644 +--- a/src/jarabe/journal/listmodel.py ++++ b/src/jarabe/journal/listmodel.py +@@ -48,18 +48,20 @@ class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + COLUMN_ICON = 2 + COLUMN_ICON_COLOR = 3 + COLUMN_TITLE = 4 +- COLUMN_DATE = 5 +- COLUMN_PROGRESS = 6 +- COLUMN_BUDDY_1 = 7 +- COLUMN_BUDDY_2 = 8 +- COLUMN_BUDDY_3 = 9 ++ COLUMN_TIMESTAMP = 5 ++ COLUMN_FILESIZE = 6 ++ COLUMN_PROGRESS = 7 ++ COLUMN_BUDDY_1 = 8 ++ COLUMN_BUDDY_2 = 9 ++ COLUMN_BUDDY_3 = 10 + + _COLUMN_TYPES = {COLUMN_UID: str, + COLUMN_FAVORITE: bool, + COLUMN_ICON: str, + COLUMN_ICON_COLOR: object, + COLUMN_TITLE: str, +- COLUMN_DATE: str, ++ COLUMN_TIMESTAMP: str, ++ COLUMN_FILESIZE: str, + COLUMN_PROGRESS: int, + COLUMN_BUDDY_1: object, + COLUMN_BUDDY_3: object, +@@ -141,6 +143,9 @@ class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + timestamp = int(metadata.get('timestamp', 0)) + self._cached_row.append(util.timestamp_to_elapsed_string(timestamp)) + ++ size = int(metadata.get('filesize', 0)) ++ self._cached_row.append(util.format_size(size)) ++ + self._cached_row.append(int(metadata.get('progress', 100))) + + if metadata.get('buddies', ''): +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0003-Journaltoolbox-Add-add_separator-method-for-convenie.patch b/rpms/sugar/sizelist-0003-Journaltoolbox-Add-add_separator-method-for-convenie.patch new file mode 100644 index 0000000..da49600 --- /dev/null +++ b/rpms/sugar/sizelist-0003-Journaltoolbox-Add-add_separator-method-for-convenie.patch @@ -0,0 +1,42 @@ +From 9bebd9d9d6dbae0dad35cb58d9eabdbc37c0b18c Mon Sep 17 00:00:00 2001 +Message-Id: <9bebd9d9d6dbae0dad35cb58d9eabdbc37c0b18c.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 03:56:45 -0300 +Subject: [PATCH v2 03/10] Journaltoolbox: Add add_separator method for convenience. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/journaltoolbox.py | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py +index 61671bc..7466461 100644 +--- a/src/jarabe/journal/journaltoolbox.py ++++ b/src/jarabe/journal/journaltoolbox.py +@@ -154,6 +154,17 @@ class SearchToolbar(gtk.Toolbar): + with_search.connect('changed', self._combo_changed_cb) + return with_search + ++ def _add_separator(self, expand=False): ++ separator = gtk.SeparatorToolItem() ++ separator.props.draw = False ++ if expand: ++ separator.set_expand(True) ++ else: ++ separator.set_size_request(style.GRID_CELL_SIZE, ++ style.GRID_CELL_SIZE) ++ self.insert(separator, -1) ++ separator.show() ++ + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0004-Add-a-ListViewButton-to-the-journal-search-toolbar.patch b/rpms/sugar/sizelist-0004-Add-a-ListViewButton-to-the-journal-search-toolbar.patch new file mode 100644 index 0000000..6e6f258 --- /dev/null +++ b/rpms/sugar/sizelist-0004-Add-a-ListViewButton-to-the-journal-search-toolbar.patch @@ -0,0 +1,135 @@ +From b11b8660eace20a81455195433096b8037cdad3b Mon Sep 17 00:00:00 2001 +Message-Id: <b11b8660eace20a81455195433096b8037cdad3b.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:33:06 -0300 +Subject: [PATCH v2 04/10] Add a ListViewButton to the journal search toolbar. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add a button to display the sorting options. Rebuild the query when the +sort option changes. + +Use a RadioToolButton for a future implementation of multiple journal +views (as described in the Journal Design Proposal). + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/journaltoolbox.py | 74 ++++++++++++++++++++++++++++++++++ + 1 files changed, 74 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py +index 7466461..995cc73 100644 +--- a/src/jarabe/journal/journaltoolbox.py ++++ b/src/jarabe/journal/journaltoolbox.py +@@ -30,6 +30,7 @@ from sugar.graphics.toolbox import Toolbox + from sugar.graphics.toolcombobox import ToolComboBox + from sugar.graphics.toolbutton import ToolButton + from sugar.graphics.toggletoolbutton import ToggleToolButton ++from sugar.graphics.radiotoolbutton import RadioToolButton + from sugar.graphics.combobox import ComboBox + from sugar.graphics.menuitem import MenuItem + from sugar.graphics.icon import Icon +@@ -109,6 +110,17 @@ class SearchToolbar(gtk.Toolbar): + self.insert(tool_item, -1) + tool_item.show() + ++ self._add_separator(expand=True) ++ ++ self._list_view_button = ListViewButton() ++ # TODO: Connect when Grid View is implemented ++ #self._list_view.connect('toggled', self.__view_button_toggled_cb) ++ self._list_view_button.set_active(True) ++ self.insert(self._list_view_button, -1) ++ self._list_view_button.connect('sort-property-changed', ++ self.__sort_changed_cb) ++ self._list_view_button.show() ++ + # TODO: enable it when the DS supports saving the buddies. + #self._with_search_combo = self._get_with_search_combo() + #tool_item = ToolComboBox(self._with_search_combo) +@@ -202,6 +214,14 @@ class SearchToolbar(gtk.Toolbar): + if text: + query['query'] = text + ++ property, order = self._list_view_button.get_current_sort() ++ ++ if order == gtk.SORT_ASCENDING: ++ sign = '+' ++ else: ++ sign = '-' ++ query['order_by'] = [sign + property] ++ + return query + + def _get_date_range(self): +@@ -224,6 +244,9 @@ class SearchToolbar(gtk.Toolbar): + def _combo_changed_cb(self, combo): + self._update_if_needed() + ++ def __sort_changed_cb(self, button): ++ self._update_if_needed() ++ + def _update_if_needed(self): + new_query = self._build_query() + if self._query != new_query: +@@ -467,3 +490,54 @@ class EntryToolbar(gtk.Toolbar): + activity_info.get_bundle_id()) + palette.menu.append(menu_item) + menu_item.show() ++ ++class ListViewButton(RadioToolButton): ++ __gtype_name__ = 'JournalListViewButton' ++ ++ __gsignals__ = { ++ 'sort-property-changed': (gobject.SIGNAL_RUN_FIRST, ++ gobject.TYPE_NONE, ++ ([])), ++ } ++ ++ _SORT_OPTIONS = [ ++ ('timestamp', 'view-lastedit', _('View by last edit')), ++ ('filesize', 'view-size', _('View by size')), ++ ] ++ ++ def __init__(self): ++ RadioToolButton.__init__(self) ++ ++ self._property = 'timestamp' ++ self._order = gtk.SORT_ASCENDING ++ ++ self.props.tooltip = _('List view') ++ self.props.named_icon = 'view-list' ++ # TODO: Set accelerator when Grid View is implemented ++ #self.props.accelerator = _('<Ctrl>2') ++ self.props.group = None ++ ++ for property, icon, label in self._SORT_OPTIONS: ++ button = MenuItem(icon_name=icon, text_label=label) ++ button.connect('activate', ++ self.__sort_type_changed_cb, ++ property, ++ icon) ++ button.show() ++ self.props.palette.menu.insert(button, -1) ++ ++ def __sort_type_changed_cb(self, widget, property, named_icon): ++ self._property = property ++ #FIXME: Implement sorting order ++ self._order = gtk.SORT_ASCENDING ++ self.emit('sort-property-changed') ++ ++ self.props.named_icon = named_icon ++ ++ if not self.props.active: ++ self.props.active = True ++ else: ++ self.emit('toggled') ++ ++ def get_current_sort(self): ++ return (self._property, self._order) +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0005-Rename-the-date-column-to-sort_column.patch b/rpms/sugar/sizelist-0005-Rename-the-date-column-to-sort_column.patch new file mode 100644 index 0000000..2369ad2 --- /dev/null +++ b/rpms/sugar/sizelist-0005-Rename-the-date-column-to-sort_column.patch @@ -0,0 +1,68 @@ +From de3299824908e2135cf48d8fb9818d4c8f8a128e Mon Sep 17 00:00:00 2001 +Message-Id: <de3299824908e2135cf48d8fb9818d4c8f8a128e.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:01:09 -0300 +Subject: [PATCH v2 05/10] Rename the date column to 'sort_column' +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As it will be used to display the currently active sorting property. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/listview.py | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py +index 9e19f70..375a8ee 100644 +--- a/src/jarabe/journal/listview.py ++++ b/src/jarabe/journal/listview.py +@@ -97,7 +97,7 @@ class BaseListView(gtk.Bin): + self.cell_title = None + self.cell_icon = None + self._title_column = None +- self.date_column = None ++ self.sort_column = None + self._add_columns() + + self.tree_view.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, +@@ -190,15 +190,15 @@ class BaseListView(gtk.Bin): + date = util.timestamp_to_elapsed_string(timestamp) + date_width = self._get_width_for_string(date) + +- self.date_column = gtk.TreeViewColumn() +- self.date_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED +- self.date_column.props.fixed_width = date_width +- self.date_column.set_alignment(1) +- self.date_column.props.resizable = True +- self.date_column.props.clickable = True +- self.date_column.pack_start(cell_text) +- self.date_column.add_attribute(cell_text, 'text', ListModel.COLUMN_DATE) +- self.tree_view.append_column(self.date_column) ++ self.sort_column = gtk.TreeViewColumn() ++ self.sort_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED ++ self.sort_column.props.fixed_width = date_width ++ self.sort_column.set_alignment(1) ++ self.sort_column.props.resizable = True ++ self.sort_column.props.clickable = True ++ self.sort_column.pack_start(cell_text) ++ self.sort_column.add_attribute(cell_text, 'text', ListModel.COLUMN_TIMESTAMP) ++ self.tree_view.append_column(self.sort_column) + + def _get_width_for_string(self, text): + # Add some extra margin +@@ -415,7 +415,7 @@ class BaseListView(gtk.Bin): + + while True: + x, y, width, height = self.tree_view.get_cell_area(path, +- self.date_column) ++ self.sort_column) + x, y = self.tree_view.convert_tree_to_widget_coords(x, y) + self.tree_view.queue_draw_area(x, y, width, height) + if path == end_path: +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0006-Display-the-sorting-property-in-the-last-column.patch b/rpms/sugar/sizelist-0006-Display-the-sorting-property-in-the-last-column.patch new file mode 100644 index 0000000..a7bfb46 --- /dev/null +++ b/rpms/sugar/sizelist-0006-Display-the-sorting-property-in-the-last-column.patch @@ -0,0 +1,46 @@ +From 58c5a4d007acc23f62f9636c45e1b63af3c487f9 Mon Sep 17 00:00:00 2001 +Message-Id: <58c5a4d007acc23f62f9636c45e1b63af3c487f9.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:07:20 -0300 +Subject: [PATCH v2 06/10] Display the sorting property in the last column. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +update_with_query() is called when the query is modified in the toolbox. +Get the name of the property and set the sort_column cell renderer accordingly. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/listview.py | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py +index 375a8ee..deffe84 100644 +--- a/src/jarabe/journal/listview.py ++++ b/src/jarabe/journal/listview.py +@@ -252,11 +252,16 @@ class BaseListView(gtk.Bin): + + def update_with_query(self, query_dict): + logging.debug('ListView.update_with_query') ++ if 'order_by' not in query_dict: ++ query_dict['order_by'] = ['+timestamp'] ++ if query_dict['order_by'] != self._query.get('order_by'): ++ property = query_dict['order_by'][0][1:] ++ cell_text = self.sort_column.get_cell_renderers()[0] ++ self.sort_column.set_attributes(cell_text, ++ text=getattr(ListModel, 'COLUMN_' + property.upper(), ++ ListModel.COLUMN_TIMESTAMP)) + self._query = query_dict + +- if 'order_by' not in self._query: +- self._query['order_by'] = ['+timestamp'] +- + self.refresh() + + def refresh(self): +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0007-Expandedentry-Try-to-use-the-filesize-property.patch b/rpms/sugar/sizelist-0007-Expandedentry-Try-to-use-the-filesize-property.patch new file mode 100644 index 0000000..db9abda --- /dev/null +++ b/rpms/sugar/sizelist-0007-Expandedentry-Try-to-use-the-filesize-property.patch @@ -0,0 +1,37 @@ +From 14f5407570cff02172b439f1144b93b6a54c2263 Mon Sep 17 00:00:00 2001 +Message-Id: <14f5407570cff02172b439f1144b93b6a54c2263.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:21:37 -0300 +Subject: [PATCH v2 07/10] Expandedentry: Try to use the filesize property. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Instead of calling the datastore again. + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/expandedentry.py | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py +index c8e40c1..725c0f9 100644 +--- a/src/jarabe/journal/expandedentry.py ++++ b/src/jarabe/journal/expandedentry.py +@@ -260,8 +260,9 @@ class ExpandedEntry(hippo.CanvasBox): + lines = [ + _('Kind: %s') % (self._metadata.get('mime_type') or _('Unknown'),), + _('Date: %s') % (self._format_date(),), +- _('Size: %s') % (format_size(model.get_file_size( +- self._metadata['uid'])),)] ++ _('Size: %s') % (format_size(int(self._metadata.get('filesize', ++ model.get_file_size(self._metadata['uid']))))), ++ ] + + for line in lines: + text = hippo.CanvasText(text=line, +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0008-Implement-sorting-for-removable-devices.patch b/rpms/sugar/sizelist-0008-Implement-sorting-for-removable-devices.patch new file mode 100644 index 0000000..b767c51 --- /dev/null +++ b/rpms/sugar/sizelist-0008-Implement-sorting-for-removable-devices.patch @@ -0,0 +1,82 @@ +From ba306490c248fada6bc7858ae4660b9aca9bcfcd Mon Sep 17 00:00:00 2001 +Message-Id: <ba306490c248fada6bc7858ae4660b9aca9bcfcd.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:23:12 -0300 +Subject: [PATCH v2 08/10] Implement sorting for removable devices. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/model.py | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py +index 874d7bd..4fd81ac 100644 +--- a/src/jarabe/journal/model.py ++++ b/src/jarabe/journal/model.py +@@ -21,6 +21,7 @@ import time + import shutil + from stat import S_IFMT, S_IFDIR, S_IFREG + import re ++from operator import itemgetter + + import gobject + import dbus +@@ -246,6 +247,8 @@ class InplaceResultSet(BaseResultSet): + + self._mime_types = query.get('mime_type', []) + ++ self._sort = query.get('order_by', ['+timestamp'])[0] ++ + def setup(self): + self._file_list = [] + self._recurse_dir(self._mount_point) +@@ -254,7 +257,13 @@ class InplaceResultSet(BaseResultSet): + self._stopped = True + + def setup_ready(self): +- self._file_list.sort(lambda a, b: cmp(b[2], a[2])) ++ if self._sort[1:] == 'filesize': ++ keygetter = itemgetter(3) ++ else: ++ keygetter = itemgetter(2) # timestamp ++ self._file_list.sort(lambda a, b: cmp(b, a), ++ key=keygetter, ++ reverse=self._sort[0]=='-') + self.ready.send(self) + + def find(self, query): +@@ -273,7 +282,7 @@ class InplaceResultSet(BaseResultSet): + files = self._file_list[offset:offset + limit] + + entries = [] +- for file_path, stat, mtime_ in files: ++ for file_path, stat, mtime_, size_ in files: + metadata = _get_file_metadata(file_path, stat) + metadata['mountpoint'] = self._mount_point + entries.append(metadata) +@@ -331,7 +340,7 @@ class InplaceResultSet(BaseResultSet): + add_to_list = False + + if add_to_list: +- file_info = (full_path, stat, int(stat.st_mtime)) ++ file_info = (full_path, stat, int(stat.st_mtime), stat.st_size) + self._file_list.append(file_info) + + self.progress.send(self) +@@ -344,6 +353,7 @@ def _get_file_metadata(path, stat): + return {'uid': path, + 'title': os.path.basename(path), + 'timestamp': stat.st_mtime, ++ 'filesize': stat.st_size, + 'mime_type': gio.content_type_guess(filename=path), + 'activity': '', + 'activity_id': '', +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0009-Add-sort-by-creation-time-option-to-the-ListViewButt.patch b/rpms/sugar/sizelist-0009-Add-sort-by-creation-time-option-to-the-ListViewButt.patch new file mode 100644 index 0000000..254e010 --- /dev/null +++ b/rpms/sugar/sizelist-0009-Add-sort-by-creation-time-option-to-the-ListViewButt.patch @@ -0,0 +1,32 @@ +From 0e289d4cc2d92574b27be3806bff6e6dae6bb48b Mon Sep 17 00:00:00 2001 +Message-Id: <0e289d4cc2d92574b27be3806bff6e6dae6bb48b.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:42:55 -0300 +Subject: [PATCH v2 09/10] Add sort by creation time option to the ListViewButton +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/journaltoolbox.py | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py +index 995cc73..03afb4e 100644 +--- a/src/jarabe/journal/journaltoolbox.py ++++ b/src/jarabe/journal/journaltoolbox.py +@@ -502,6 +502,7 @@ class ListViewButton(RadioToolButton): + + _SORT_OPTIONS = [ + ('timestamp', 'view-lastedit', _('View by last edit')), ++ ('ctime', 'view-created', _('View by creation date')), + ('filesize', 'view-size', _('View by size')), + ] + +-- +1.7.0.4 + diff --git a/rpms/sugar/sizelist-0010-Add-ctime-property-to-the-journal-model.patch b/rpms/sugar/sizelist-0010-Add-ctime-property-to-the-journal-model.patch new file mode 100644 index 0000000..5fd3ee9 --- /dev/null +++ b/rpms/sugar/sizelist-0010-Add-ctime-property-to-the-journal-model.patch @@ -0,0 +1,95 @@ +From def49facd34182305e5d8c1ea273c0992aa90af0 Mon Sep 17 00:00:00 2001 +Message-Id: <def49facd34182305e5d8c1ea273c0992aa90af0.1278054601.git.andresambrois@gmail.com> +In-Reply-To: <cover.1278054601.git.andresambrois@gmail.com> +References: <cover.1278054601.git.andresambrois@gmail.com> +From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= <andresambrois@gmail.com> +Date: Sun, 23 May 2010 04:44:04 -0300 +Subject: [PATCH v2 10/10] Add ctime property to the journal model. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +Signed-off-by: Andrés Ambrois <andresambrois@gmail.com> +--- + src/jarabe/journal/listmodel.py | 22 +++++++++++++++++----- + src/jarabe/journal/model.py | 2 +- + 2 files changed, 18 insertions(+), 6 deletions(-) + +diff --git a/src/jarabe/journal/listmodel.py b/src/jarabe/journal/listmodel.py +index 135dc95..c07d9e1 100644 +--- a/src/jarabe/journal/listmodel.py ++++ b/src/jarabe/journal/listmodel.py +@@ -19,6 +19,7 @@ import logging + import simplejson + import gobject + import gtk ++import time + + from sugar.graphics.xocolor import XoColor + from sugar.graphics import style +@@ -31,6 +32,8 @@ DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' + DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' + DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + ++CTIME_FORMAT = '%Y-%m-%dT%H:%M:%S' ++ + class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + __gtype_name__ = 'JournalListModel' + +@@ -49,11 +52,12 @@ class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + COLUMN_ICON_COLOR = 3 + COLUMN_TITLE = 4 + COLUMN_TIMESTAMP = 5 +- COLUMN_FILESIZE = 6 +- COLUMN_PROGRESS = 7 +- COLUMN_BUDDY_1 = 8 +- COLUMN_BUDDY_2 = 9 +- COLUMN_BUDDY_3 = 10 ++ COLUMN_CTIME = 6 ++ COLUMN_FILESIZE = 7 ++ COLUMN_PROGRESS = 8 ++ COLUMN_BUDDY_1 = 9 ++ COLUMN_BUDDY_2 = 10 ++ COLUMN_BUDDY_3 = 11 + + _COLUMN_TYPES = {COLUMN_UID: str, + COLUMN_FAVORITE: bool, +@@ -61,6 +65,7 @@ class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + COLUMN_ICON_COLOR: object, + COLUMN_TITLE: str, + COLUMN_TIMESTAMP: str, ++ COLUMN_CTIME: str, + COLUMN_FILESIZE: str, + COLUMN_PROGRESS: int, + COLUMN_BUDDY_1: object, +@@ -143,6 +148,13 @@ class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + timestamp = int(metadata.get('timestamp', 0)) + self._cached_row.append(util.timestamp_to_elapsed_string(timestamp)) + ++ ctime = metadata.get('ctime') ++ if ctime: ++ ctime = time.mktime(time.strptime(ctime, CTIME_FORMAT)) ++ else: ++ ctime = 0 ++ self._cached_row.append(util.timestamp_to_elapsed_string(ctime)) ++ + size = int(metadata.get('filesize', 0)) + self._cached_row.append(util.format_size(size)) + +diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py +index 4fd81ac..ae77e72 100644 +--- a/src/jarabe/journal/model.py ++++ b/src/jarabe/journal/model.py +@@ -37,7 +37,7 @@ DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' + DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + + # Properties the journal cares about. +-PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'filesize', ++PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'ctime', 'filesize', + 'keep', 'buddies', 'icon-color', 'mime_type', 'progress', + 'activity', 'mountpoint', 'activity_id', 'bundle_id'] + +-- +1.7.0.4 + diff --git a/rpms/sugar/sl1842-journal-show-error-on-write-failure.patch b/rpms/sugar/sl1842-journal-show-error-on-write-failure.patch new file mode 100644 index 0000000..87b267a --- /dev/null +++ b/rpms/sugar/sl1842-journal-show-error-on-write-failure.patch @@ -0,0 +1,123 @@ +From: anishmangal2002 <anishmangal2002@gmail.com> +To: Bernie Innocenti <bernie@codewiz.org> +Cc: sugar-devel <sugar-devel@lists.sugarlabs.org>, anishmangal2002 <anishmangal2002@gmail.com> +Subject: [PATCH] Journal:show error message on write failure: #1842 +Date: Sat, 3 Jul 2010 00:55:56 +0530 + +volumestoolbar.py now catches the IOError and ValueError +exceptions and emits 'volume-error'signal. This signal is +caught in journalactivity.py which displays the error as +an ErrorAlert message. + +Signed-off-by: anishmangal2002 <anishmangal2002@gmail.com> +--- + src/jarabe/journal/journalactivity.py | 16 ++++++++++++++++ + src/jarabe/journal/volumestoolbar.py | 22 +++++++++++++++++++++- + 2 files changed, 37 insertions(+), 1 deletions(-) + +diff --git a/src/jarabe/journal/journalactivity.py b/src/jarabe/journal/journalactivity.py +index 0559560..eab292b 100644 +--- a/src/jarabe/journal/journalactivity.py ++++ b/src/jarabe/journal/journalactivity.py +@@ -27,6 +27,9 @@ import statvfs + import os + + from sugar.graphics.window import Window ++from sugar.graphics.alert import ErrorAlert ++from sugar.graphics.icon import Icon ++ + from sugar.bundle.bundle import ZipExtractException, RegistrationException + from sugar import env + from sugar.activity import activityfactory +@@ -138,6 +141,17 @@ class JournalActivity(Window): + self._critical_space_alert = None + self._check_available_space() + ++ def _alert_notify_cb(self, gobject, strerror, severity): ++ alert = ErrorAlert() ++ alert.props.title= severity ++ alert.props.msg = strerror ++ alert.connect('response', self._alert_response_cb) ++ self.add_alert(alert) ++ alert.show() ++ ++ def _alert_response_cb(self, alert, response_id): ++ self.remove_alert(alert) ++ + def __realize_cb(self, window): + wm.set_bundle_id(window.window, _BUNDLE_ID) + activity_id = activityfactory.create_activity_id() +@@ -161,6 +175,8 @@ class JournalActivity(Window): + self._volumes_toolbar = VolumesToolbar() + self._volumes_toolbar.connect('volume-changed', + self.__volume_changed_cb) ++ self._volumes_toolbar.connect('volume-error', self._alert_notify_cb, ++ 'Error') + self._main_view.pack_start(self._volumes_toolbar, expand=False) + + search_toolbar = self._main_toolbox.search_toolbar +diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py +index 74b974c..a6acebe 100644 +--- a/src/jarabe/journal/volumestoolbar.py ++++ b/src/jarabe/journal/volumestoolbar.py +@@ -35,6 +35,9 @@ class VolumesToolbar(gtk.Toolbar): + __gsignals__ = { + 'volume-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ++ ([str])), ++ 'volume-error': (gobject.SIGNAL_RUN_FIRST, ++ gobject.TYPE_NONE, + ([str])) + } + +@@ -81,6 +84,7 @@ class VolumesToolbar(gtk.Toolbar): + button = VolumeButton(mount) + button.props.group = self._volume_buttons[0] + button.connect('toggled', self._button_toggled_cb) ++ button.connect('volume-error', self._volume_error_cb) + position = self.get_item_index(self._volume_buttons[-1]) + 1 + self.insert(button, position) + button.show() +@@ -90,6 +94,9 @@ class VolumesToolbar(gtk.Toolbar): + if len(self.get_children()) > 1: + self.show() + ++ def _volume_error_cb(self, button, strerror): ++ self.emit('volume-error', strerror) ++ + def _button_toggled_cb(self, button): + if button.props.active: + self.emit('volume-changed', button.mount_point) +@@ -123,6 +130,12 @@ class VolumesToolbar(gtk.Toolbar): + button.props.active = True + + class BaseButton(RadioToolButton): ++ __gsignals__ = { ++ 'volume-error': (gobject.SIGNAL_RUN_FIRST, ++ gobject.TYPE_NONE, ++ ([str])) ++ } ++ + def __init__(self, mount_point): + RadioToolButton.__init__(self) + +@@ -137,7 +150,14 @@ class BaseButton(RadioToolButton): + info, timestamp): + object_id = selection_data.data + metadata = model.get(object_id) +- model.copy(metadata, self.mount_point) ++ try: ++ model.copy(metadata, self.mount_point) ++ except IOError as (errno, strerror): ++ logging.error('BaseButton._drag_data_received_cb: IOError: %s; %s' % (errno, strerror)) ++ self.emit('volume-error', strerror) ++ except ValueError as (strerror): ++ logging.error('BaseButton._drag_data_received_cb: ValueError: %s' % (strerror)) ++ self.emit('volume-error', strerror) + + class VolumeButton(BaseButton): + def __init__(self, mount): +-- +1.7.0.1 + + diff --git a/rpms/sugar/sl2006-file-exists-check.patch b/rpms/sugar/sl2006-file-exists-check.patch new file mode 100644 index 0000000..0981b99 --- /dev/null +++ b/rpms/sugar/sl2006-file-exists-check.patch @@ -0,0 +1,26 @@ +From 3f52994220944760786a161c8046c2fbbd7ca89a Mon Sep 17 00:00:00 2001 +From: Walter Bender <walter@sugarlabs.org> +Date: Fri, 21 May 2010 11:08:06 -0400 +Subject: [PATCH] file exisits check + +--- + extensions/cpsection/touchpad/model.py | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/extensions/cpsection/touchpad/model.py b/extensions/cpsection/touchpad/model.py +index 77eefa4..8c17cb9 100644 +--- a/extensions/cpsection/touchpad/model.py ++++ b/extensions/cpsection/touchpad/model.py +@@ -38,7 +38,8 @@ def get_touchpad(): + def set_touchpad(touchpad): + """Set the touchpad mode.""" + if touchpad == _CAPACITIVE: +- system("rm %s" % (_flag_path)) ++ if path.exists(_flag_path): ++ system("rm %s" % (_flag_path)) + system("echo 0 > %s" % (_node_path)) + else: + system("touch %s" % (_flag_path)) +-- +1.7.0.4 + diff --git a/rpms/sugar/sl2006-touchpad-section-for-control-panel.patch b/rpms/sugar/sl2006-touchpad-section-for-control-panel.patch new file mode 100644 index 0000000..914477c --- /dev/null +++ b/rpms/sugar/sl2006-touchpad-section-for-control-panel.patch @@ -0,0 +1,404 @@ +From f485b65a85609713e0fdb179f354977e63646f33 Mon Sep 17 00:00:00 2001 +From: Walter Bender <walter@sugarlabs.org> +Date: Wed, 19 May 2010 08:29:22 -0400 +Subject: [PATCH] touchpad section for control panel + +--- + configure.ac | 1 + + data/icons/Makefile.am | 1 + + data/icons/module-touchpad.svg | 36 ++++++ + extensions/cpsection/Makefile.am | 2 +- + extensions/cpsection/touchpad/Makefile.am | 6 + + extensions/cpsection/touchpad/__init__.py | 25 ++++ + extensions/cpsection/touchpad/model.py | 59 ++++++++++ + extensions/cpsection/touchpad/view.py | 178 +++++++++++++++++++++++++++++ + 8 files changed, 307 insertions(+), 1 deletions(-) + create mode 100644 data/icons/module-touchpad.svg + create mode 100644 extensions/cpsection/touchpad/Makefile.am + create mode 100644 extensions/cpsection/touchpad/__init__.py + create mode 100644 extensions/cpsection/touchpad/model.py + create mode 100644 extensions/cpsection/touchpad/view.py + +diff --git a/configure.ac b/configure.ac +index 4f60892..e7d1c73 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -59,6 +59,7 @@ extensions/cpsection/modemconfiguration/Makefile + extensions/cpsection/Makefile + extensions/cpsection/network/Makefile + extensions/cpsection/power/Makefile ++extensions/cpsection/touchpad/Makefile + extensions/cpsection/updater/backends/Makefile + extensions/cpsection/updater/Makefile + extensions/deviceicon/Makefile +diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am +index a35643a..b65b34e 100644 +--- a/data/icons/Makefile.am ++++ b/data/icons/Makefile.am +@@ -10,6 +10,7 @@ sugar_DATA = \ + module-modemconfiguration.svg \ + module-network.svg \ + module-power.svg \ ++ module-touchpad.svg \ + module-updater.svg + + EXTRA_DIST = $(sugar_DATA) +diff --git a/data/icons/module-touchpad.svg b/data/icons/module-touchpad.svg +new file mode 100644 +index 0000000..5794fd7 +--- /dev/null ++++ b/data/icons/module-touchpad.svg +@@ -0,0 +1,36 @@ ++<?xml version="1.0" encoding="UTF-8" standalone="no"?> ++<!-- Created with Inkscape (http://www.inkscape.org/) --> ++ ++<svg ++ xmlns:svg="http://www.w3.org/2000/svg" ++ xmlns="http://www.w3.org/2000/svg" ++ version="1.1" ++ width="55" ++ height="55" ++ viewBox="0 0 55 55" ++ id="Layer_1" ++ xml:space="preserve"><defs ++ id="defs2829" /> ++<g ++ transform="translate(0,-3.9)" ++ id="g2817"> ++</g> ++ ++ ++ ++<g ++ transform="translate(0,4.3506441)" ++ id="g2928"><g ++ transform="translate(0,-20)" ++ id="g2819"> ++<path ++ d="m 2.934,28.664 0,18.209 49.391,0 0,-18.209 -49.391,0 z M 36,45.833 l -17,0 0,-16.129 17,0 0,16.129 z" ++ id="path2821" ++ style="fill:#ffffff;stroke:#666666;stroke-width:2" /> ++</g><path ++ d="m 46.742465,3.78755 -5.095999,6.747499 -1.044001,1.3585 -1.7375,4.133 c -0.023,0.052 -0.009,0.1115 0.0345,0.1475 0.0445,0.036 0.1055,0.042 0.1535,0.01 l 3.913,-2.5185 c 0.0055,-0.004 0.0055,-0.0135 0.011,-0.0215 0.0325,-0.0245 0.071,-0.046 0.098,-0.081 0.0015,-10e-4 0.017,-0.0205 0.017,-0.0245 l 0.9155,-1.1355 2.7345,-3.527 4.005501,-5.164499 c 0.011,-0.0115 0.0745,-0.1015 0.0745,-0.1015 0.048,-0.0805 0.074,-0.1725 0.074,-0.278 0,-0.0305 0,-0.059 -0.006,-0.088 -0.0435,-0.3815 -0.357501,-0.841 -0.819501,-1.2065 -0.4615,-0.364 -0.9845,-0.5615 -1.364,-0.517 -0.163,0.021 -0.3945,0.1875 -0.3945,0.1875 l -1.5695,2.0795 z" ++ id="path2823" ++ style="fill:#ffffff;stroke:#666666;stroke-width:1.5" /><path ++ d="m 22.817123,44.784359 c 0,0 -3.23492,-8.766448 -3.243008,-9.837791 -0.0135,-1.797291 -2.398098,-2.342156 -2.398098,-2.342156 0,0 -0.621319,-2.249376 0,-2.770053 0.656117,-0.549837 2.934483,-0.629824 3.735004,0.330634 l 2.413094,2.895211 0,-12.75 c 0,0 0.888891,-1.589214 1.643962,-1.454545 0.745806,0.133019 1.356038,1.454545 1.356038,1.454545 l 0,10.5 0,-4.5 c 0,0 0.947828,-0.746067 1.5,-0.75 0.552172,-0.0039 1.5,0.75 1.5,0.75 l 0,4.5 0,-3.75 c 0,0 0.675747,-0.758712 1.5,-0.75 0.824253,0.0087 1.5,0.568182 1.5,0.568182 l 0,3.931818 0,-3 c 0,0 0.857274,-0.33549 1.5,-0.375 0.526597,-0.03237 1.448303,0.97351 1.5,1.575 0.220672,2.567514 0.969363,5.350927 0.823983,7.574377 -0.100086,1.53071 -0.67874,8.199778 -2.212713,8.199778 l -11.118262,0 z" ++ id="path2825" ++ style="fill:#ffffff;stroke:#666666;stroke-width:1.5" /></g></svg> +\ No newline at end of file +--- sugar-0.88.0/extensions/cpsection/Makefile.am.orig 2010-05-23 17:22:09.000000000 -0400 ++++ sugar-0.88.0/extensions/cpsection/Makefile.am 2010-05-23 17:23:42.000000000 -0400 +@@ -1,5 +1,16 @@ +-SUBDIRS = aboutme aboutcomputer datetime frame keyboard language \ +- modemconfiguration network power updater ++SUBDIRS = \ ++ aboutme \ ++ aboutcomputer \ ++ datetime \ ++ frame \ ++ keyboard \ ++ language \ ++ modemconfiguration \ ++ network \ ++ power \ ++ touchpad \ ++ updater \ ++ # + + sugardir = $(pkgdatadir)/extensions/cpsection + sugar_PYTHON = __init__.py +diff --git a/extensions/cpsection/touchpad/Makefile.am b/extensions/cpsection/touchpad/Makefile.am +new file mode 100644 +index 0000000..fd83e2f +--- /dev/null ++++ b/extensions/cpsection/touchpad/Makefile.am +@@ -0,0 +1,6 @@ ++sugardir = $(pkgdatadir)/extensions/cpsection/touchpad ++ ++sugar_PYTHON = \ ++ __init__.py \ ++ model.py \ ++ view.py +diff --git a/extensions/cpsection/touchpad/__init__.py b/extensions/cpsection/touchpad/__init__.py +new file mode 100644 +index 0000000..95c1af8 +--- /dev/null ++++ b/extensions/cpsection/touchpad/__init__.py +@@ -0,0 +1,25 @@ ++# Copyright (C) 2008, OLPC ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++from gettext import gettext as _ ++from os import path ++ ++# Only include this Control Panel section if on OLPC XO-1.0 CL1 hardware. ++if path.exists('/sys/devices/platform/i8042/serio1/ptmode'): ++ CLASS = 'Touchpad' ++ ICON = 'module-touchpad' ++ TITLE = _('Touchpad') ++ KEYWORDS = ['touchpad'] +diff --git a/extensions/cpsection/touchpad/model.py b/extensions/cpsection/touchpad/model.py +new file mode 100644 +index 0000000..77eefa4 +--- /dev/null ++++ b/extensions/cpsection/touchpad/model.py +@@ -0,0 +1,59 @@ ++# Copyright (C) 2010, Walter Bender, Sugar Labs ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# ++from gettext import gettext as _ ++from os import system, path ++import gconf ++ ++_CAPACITIVE = 0 ++_RESISTIVE = 1 ++_flag_path = '/home/olpc/.olpc-pentablet-mode' ++_node_path = '/sys/devices/platform/i8042/serio1/ptmode' ++ ++def get_touchpad(): ++ """Get the touchpad mode.""" ++ ++ _file_handle = open(_node_path, "r") ++ _text = _file_handle.read() ++ _file_handle.close() ++ ++ if _text[0] == '1': ++ return _RESISTIVE ++ else: ++ return _CAPACITIVE ++ ++def set_touchpad(touchpad): ++ """Set the touchpad mode.""" ++ if touchpad == _CAPACITIVE: ++ system("rm %s" % (_flag_path)) ++ system("echo 0 > %s" % (_node_path)) ++ else: ++ system("touch %s" % (_flag_path)) ++ system("echo 1 > %s" % (_node_path)) ++ return ++ ++def print_touchpad(): ++ """Print the future touchpad mode.""" ++ if get_touchpad == _CAPACITIVE: ++ print _('Touchpad set to finger mode.') ++ else: ++ print _('Touchpad set to stylus mode.') ++ ++def get_color_xo(): ++ """Get xo color""" ++ client = gconf.client_get_default() ++ return client.get_string("/desktop/sugar/user/color") ++ +diff --git a/extensions/cpsection/touchpad/view.py b/extensions/cpsection/touchpad/view.py +new file mode 100644 +index 0000000..19fb686 +--- /dev/null ++++ b/extensions/cpsection/touchpad/view.py +@@ -0,0 +1,178 @@ ++# Copyright (C) 2008, OLPC ++# Copyright (C) 2010, Walter Bender, Sugar Labs ++# ++# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++import gtk ++import gobject ++from gettext import gettext as _ ++ ++from sugar.graphics.icon import Icon ++from sugar.graphics import style ++from sugar.graphics.xocolor import XoColor ++ ++from jarabe.controlpanel.sectionview import SectionView ++from jarabe.controlpanel.inlinealert import InlineAlert ++ ++_CAPACITIVE = 0 ++_RESISTIVE = 1 ++ ++class TouchpadEventIcon(gtk.EventBox): ++ """A subclass of the Sugar Event Icon""" ++ __gtype_name__ = "SugarEventIcon" ++ ++ def __init__(self, **kwargs): ++ """Create an extra-large, clickable icon.""" ++ gtk.EventBox.__init__(self) ++ ++ self.icon = Icon(pixel_size = style.XLARGE_ICON_SIZE, **kwargs) ++ ++ self.set_visible_window(False) ++ self.set_app_paintable(True) ++ self.set_events(gtk.gdk.BUTTON_PRESS_MASK) ++ ++ self.add(self.icon) ++ self.icon.show() ++ ++class TouchpadPicker(TouchpadEventIcon): ++ """A class for the touchpad selection buttons""" ++ __gsignals__ = { ++ 'touchpad-changed': (gobject.SIGNAL_RUN_FIRST, ++ gobject.TYPE_NONE, ++ ([object])) ++ } ++ ++ def __init__(self, touchpad_mode): ++ """Create icons for the touchpad mode buttons.""" ++ TouchpadEventIcon.__init__(self) ++ ++ if touchpad_mode == _CAPACITIVE: ++ self.icon.props.icon_name = 'capacitive' ++ else: ++ self.icon.props.icon_name = 'resistive' ++ self._touchpad_mode = touchpad_mode ++ ++ self.icon.props.pixel_size = style.XLARGE_ICON_SIZE ++ ++ self.connect('button_press_event', self.__pressed_cb, touchpad_mode) ++ ++ def update(self, touchpad, xo_color): ++ """Update the button states.""" ++ if self._touchpad_mode == _CAPACITIVE: ++ self.icon.props.icon_name = 'capacitive' ++ if touchpad == _CAPACITIVE: ++ self.icon.props.xo_color = xo_color ++ else: ++ self.icon.props.xo_color = XoColor('#666666,#FFFFFF') ++ elif self._touchpad_mode == _RESISTIVE: ++ self.icon.props.icon_name = 'resistive' ++ if touchpad == _RESISTIVE: ++ self.icon.props.xo_color = xo_color ++ else: ++ self.icon.props.xo_color = XoColor('#666666,#FFFFFF') ++ ++ def __pressed_cb(self, button, event, touchpad_mode): ++ """Callback for button click.""" ++ self.emit('touchpad-changed', touchpad_mode) ++ ++class Touchpad(SectionView): ++ """A class for the touchpad selection panel""" ++ ++ def __init__(self, model, alerts): ++ """ Create the touchpad panel.""" ++ SectionView.__init__(self) ++ ++ self._model = model ++ self._color = XoColor(self._model.get_color_xo()) ++ self._handlers = [] ++ ++ self.set_border_width(style.DEFAULT_SPACING * 2) ++ self.set_spacing(style.DEFAULT_SPACING) ++ self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) ++ ++ self._touchpad_label = gtk.HBox(spacing=style.DEFAULT_SPACING) ++ self._touchpad_box = gtk.HBox(spacing=style.DEFAULT_SPACING) ++ self._touchpad_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) ++ self._touchpad_alert = None ++ ++ self._pickers = { ++ _CAPACITIVE: TouchpadPicker(_CAPACITIVE), ++ _RESISTIVE: TouchpadPicker(_RESISTIVE)} ++ ++ self._setup_touchpad() ++ self._initial_value = self._model.get_touchpad() ++ self._update_pickers(self._initial_value) ++ ++ self.setup() ++ ++ def _setup_touchpad(self): ++ """Layout the panel: label, buttons, alert""" ++ label_touchpad = gtk.Label(_('Click to change your touchpad:')) ++ label_touchpad.modify_fg(gtk.STATE_NORMAL, ++ style.COLOR_SELECTION_GREY.get_gdk_color()) ++ self._group.add_widget(label_touchpad) ++ self._touchpad_label.pack_start(label_touchpad, expand=False) ++ label_touchpad.show() ++ ++ for touchpad_mode in sorted(self._pickers.keys()): ++ picker = self._pickers[touchpad_mode] ++ picker.show() ++ self._touchpad_box.pack_start(picker, expand=False) ++ ++ label_touchpad_error = gtk.Label() ++ self._group.add_widget(label_touchpad_error) ++ self._touchpad_alert_box.pack_start(label_touchpad_error, expand=False) ++ label_touchpad_error.show() ++ ++ self._touchpad_alert = InlineAlert() ++ self._touchpad_alert_box.pack_start(self._touchpad_alert) ++ ++ self._center_in_panel = gtk.Alignment(0.5) ++ self._center_in_panel.add(self._touchpad_box) ++ self.pack_start(self._touchpad_label, False) ++ self.pack_start(self._center_in_panel, False) ++ self.pack_start(self._touchpad_alert_box, False) ++ self._touchpad_label.show() ++ self._touchpad_box.show() ++ self._touchpad_alert_box.show() ++ self._center_in_panel.show() ++ ++ def setup(self): ++ """Set up the buttons.""" ++ self.needs_restart = False ++ ++ def connect(widget, signal, callback): ++ self._handlers.append((widget, widget.connect(signal, callback))) ++ ++ for picker in self._pickers.values(): ++ connect(picker, 'touchpad-changed', self.__touchpad_changed_cb) ++ ++ def undo(self): ++ """Undo any changes.""" ++ for widget, handler in self._handlers: ++ widget.disconnect(handler) ++ self._model.set_touchpad(self._initial_value) ++ self._touchpad_alert.hide() ++ ++ def _update_pickers(self, touchpad): ++ """Update the buttons to reflect selection""" ++ for picker in self._pickers.values(): ++ picker.update(touchpad, self._color) ++ ++ def __touchpad_changed_cb(self, touchpadpicker, touchpad): ++ """Callback for mode change -- no restart alert is needed.""" ++ self._model.set_touchpad(touchpad) ++ self._update_pickers(touchpad) ++ return False +-- +1.7.0.4 + diff --git a/rpms/sugar/sl2062.patch b/rpms/sugar/sl2062.patch new file mode 100644 index 0000000..bda59e7 --- /dev/null +++ b/rpms/sugar/sl2062.patch @@ -0,0 +1,21 @@ +Subject: [PATCH] schoolserver.register_laptop() complains when offline + +register_laptop() now raises the TypeError raised by +xmlrpclib as a RegisterError. This also provides visual +feedback to the user, prompting to connect to the network. +--- + src/jarabe/desktop/schoolserver.py | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/src/jarabe/desktop/schoolserver.py b/src/jarabe/desktop/schoolserver.py +index fc9ddeb..a05f56c 100644 +--- a/src/jarabe/desktop/schoolserver.py ++++ b/src/jarabe/desktop/schoolserver.py +@@ -99,7 +99,7 @@ def register_laptop(url=REGISTER_URL): + server = ServerProxy(url) + try: + data = server.register(sn, nick, uuid_, profile.pubkey) +- except (Error, socket.error): ++ except (Error, TypeError, socket.error): + logging.exception('Registration: cannot connect to server') + raise RegisterError(_('Cannot connect to the server.')) diff --git a/rpms/sugar/sl2064-always-listen-for-NameOwnerChanged-DBus-message.patch b/rpms/sugar/sl2064-always-listen-for-NameOwnerChanged-DBus-message.patch new file mode 100644 index 0000000..0cbd586 --- /dev/null +++ b/rpms/sugar/sl2064-always-listen-for-NameOwnerChanged-DBus-message.patch @@ -0,0 +1,33 @@ +From d2b9c7b0f43d7fd9295d07341629ed55016d5f36 Mon Sep 17 00:00:00 2001 +From: Aleksey Lim <alsroot@member.fsf.org> +Date: Mon, 28 Jun 2010 05:02:52 +0000 +Subject: Listen for NameOwnerChanged DBus siginal all time for activities #2064 + + +diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py +index 553e889..69b45e2 100644 +--- a/src/jarabe/model/shell.py ++++ b/src/jarabe/model/shell.py +@@ -254,10 +254,15 @@ class Activity(gobject.GObject): + + def _name_owner_changed_cb(self, name, old, new): + if name == self._get_service_name(): +- self._retrieve_service() +- self.set_active(True) +- self._name_owner_changed_handler.remove() +- self._name_owner_changed_handler = None ++ if (old and len(old)) and (not new and not len(new)): ++ logging.debug('Activity %s went away', name) ++ self._name_owner_changed_handler.remove() ++ self._name_owner_changed_handler = None ++ self._service = None ++ elif (not old and not len(old)) and (new and len(new)): ++ logging.debug('Activity %s started up', name) ++ self._retrieve_service() ++ self.set_active(True) + + def set_active(self, state): + """Propagate the current state to the activity object""" +-- +1.7.0.4 + diff --git a/rpms/sugar/sugar-enable-settings-manager.patch b/rpms/sugar/sugar-enable-settings-manager.patch new file mode 100644 index 0000000..038f04b --- /dev/null +++ b/rpms/sugar/sugar-enable-settings-manager.patch @@ -0,0 +1,13 @@ +diff --git a/bin/sugar.in b/bin/sugar.in +index 498b573..813b189 100644 +--- a/bin/sugar.in ++++ b/bin/sugar.in +@@ -36,6 +36,8 @@ while [ $# -ne 0 ] ; do + shift + done + ++sugar-settings-manager & ++ + if test -z "$SUGAR_SCALING"; then + export SUGAR_SCALING=72 + fi diff --git a/rpms/sugar/sugar.spec b/rpms/sugar/sugar.spec new file mode 100644 index 0000000..0405895 --- /dev/null +++ b/rpms/sugar/sugar.spec @@ -0,0 +1,1619 @@ +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} + +Summary: Constructionist learning platform +Name: sugar +Version: 0.88.1 +Release: 5.19bernie%{?dist} +URL: http://sugarlabs.org/ +Source0: http://download.sugarlabs.org/sources/sucrose/glucose/%{name}/%{name}-%{version}.tar.bz2 + +#bernie: breaks Browse +#Patch0: sugar-enable-settings-manager.patch + +# Bug fixes +Patch1: dynamically-set-number-of-control-panel-columns.patch +Patch2: click-on-journal-icons-with-a-exclusive-time-frame.patch +Patch3: set-default-scaling-to-100.patch +Patch4: fix-for-file-list-sorting-for-FAT32-formatted-flash-drives-in-journal.patch +Patch5: avoid-popping-an-empty-list-in-the-software-updater.patch +Patch6: simplify-the-definition-of-UpdateModel._bundles_to_check..patch +Patch7: fix-duplication-of-OLPC-mesh-icons.patch +Patch8: use-the-spanish-verb-quitar-for-unmounting-devices.patch +#Patch9: fix-name-clash-set_state.patch +Patch10: sl1842-journal-show-error-on-write-failure.patch +Patch11: add-font-dpi-schema.patch +Patch12: reverse-sort-order-of-activities-list.patch +Patch13: sl2062.patch +Patch14: gsm-errors-palette.patch + +# Andres' journal filesize enhancement +Patch101: sizelist-0001-Journal-Retrieve-filesize-from-the-datastore.patch +Patch102: sizelist-0002-Add-a-filesize-column-to-the-journal-list-model.patch +Patch103: sizelist-0003-Journaltoolbox-Add-add_separator-method-for-convenie.patch +Patch104: sizelist-0004-Add-a-ListViewButton-to-the-journal-search-toolbar.patch +Patch105: sizelist-0005-Rename-the-date-column-to-sort_column.patch +Patch106: sizelist-0006-Display-the-sorting-property-in-the-last-column.patch +Patch107: sizelist-0007-Expandedentry-Try-to-use-the-filesize-property.patch +Patch108: sizelist-0008-Implement-sorting-for-removable-devices.patch +Patch109: sizelist-0009-Add-sort-by-creation-time-option-to-the-ListViewButt.patch +Patch110: sizelist-0010-Add-ctime-property-to-the-journal-model.patch + +# Esteban + Tch Backup and restore +Patch201: backup-0001-Volumes-Backup-and-Restore.patch +Patch202: backup-0002-Journal-XS-backup-and-restore.patch +#Patch203: backup-0003-Journal-documents-volume-button.patch +#Patch204: backup-0004-es-translations.patch +Patch205: backup-0005-save-lease.patch + +# experimental patches +Patch501: sl2006-touchpad-section-for-control-panel.patch +Patch502: sl2006-file-exists-check.patch +Patch503: cpu-and-memory-resource-indicator.patch +Patch504: sl2064-always-listen-for-NameOwnerChanged-DBus-message.patch +Patch506: jasg-register-rename.patch + +# tch experimental patches +patch601: bundle-Delete-profile-data-only-when-erased.patch +patch602: caacupe-Protected-activities-list.patch +patch603: tch-Add-missing-restart-button.patch + +License: GPLv2+ +Group: User Interface/Desktops +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: pkgconfig +BuildRequires: perl-XML-Parser +BuildRequires: gettext +BuildRequires: python +BuildRequires: pygtk2-devel +BuildRequires: gtk2-devel +BuildRequires: GConf2-devel +BuildRequires: intltool + +Requires: sugar-artwork +Requires: sugar-toolkit +Requires: sugar-settings-manager +Requires: gnome-python2-libwnck +Requires: gnome-python2-gconf +Requires: metacity +Requires: python-telepathy +Requires: gstreamer-python +Requires: pygtksourceview +Requires: python-xklavier + +# for dbus-launch +Requires: dbus-x11 +# for ssh-keygen +Requires: openssh + +Obsoletes: sugar-journal <= 99 +Obsoletes: sugar-update-control <= 99 + +BuildArch: noarch + +%description +Sugar provides simple yet powerful means of engaging young children in the +world of learning that is opened up by computers and the Internet. With Sugar, +even the youngest learner will quickly become proficient in using the +computer as a tool to engage in authentic problem-solving. Sugar promotes +sharing, collaborative learning, and reflection, developing skills that help +them in all aspects of life. + +Sugar is also the learning environment for the One Laptop Per Child project. +See http://www.laptop.org for more information on this project. + +%package emulator +Summary: The emulator for the Sugar Learning Platform +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: xorg-x11-server-Xephyr +# for xdpyinfo +Requires: xorg-x11-utils + +%description emulator +The emulator let's you test and debug sugar. For example it allows you to run +multiple instances of sugar. + +%prep +%setup -q + +#bernie: breaks Browse +#%patch0 -p1 + +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +#%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 + +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 +%patch104 -p1 +%patch105 -p1 +%patch106 -p1 +%patch107 -p1 +%patch108 -p1 +%patch109 -p1 +%patch110 -p1 + +%patch201 -p1 +%patch202 -p1 +#%patch203 -p1 +#%patch204 -p1 +%patch205 -p1 + +%patch501 -p1 +%patch502 -p1 +%patch503 -p1 +%patch504 -p1 +%patch506 -p1 + +%patch601 -p1 +%patch602 -p1 +%patch603 -p1 + +%build +autoreconf +%configure +make + +%install +rm -rf %{buildroot} + +export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 +make install DESTDIR=%{buildroot} +mkdir %{buildroot}/%{_datadir}/sugar/activities +unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL + +%find_lang %{name} + +%post +if (update-mime-database -v &> /dev/null); then + update-mime-database "%{_datadir}/mime" > /dev/null +fi + +export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` +gconftool-2 --makefile-install-rule \ + %{_sysconfdir}/gconf/schemas/sugar.schemas > /dev/null || : + +%pre +if [ "$1" -gt 1 ]; then + export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` + gconftool-2 --makefile-uninstall-rule \ + %{_sysconfdir}/gconf/schemas/sugar.schemas > /dev/null || : +fi + +%preun +if [ "$1" -eq 0 ]; then + export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` + gconftool-2 --makefile-uninstall-rule \ + %{_sysconfdir}/gconf/schemas/sugar.schemas > /dev/null || : +fi + +%postun +if (update-mime-database -v &> /dev/null); then + update-mime-database "%{_datadir}/mime" > /dev/null +fi + +%clean +rm -rf %{buildroot} + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc COPYING README + +%config %{_sysconfdir}/dbus-1/system.d/nm-user-settings.conf +%config %{_sysconfdir}/gconf/schemas/sugar.schemas + +%dir %{_datadir}/sugar +%dir %{_datadir}/sugar/activities +%dir %{_datadir}/sugar/data +%dir %{_datadir}/sugar/extensions +%{_datadir}/sugar/data/* +%{_datadir}/sugar/extensions/* + +%{python_sitelib}/* + +%{_datadir}/xsessions/sugar.desktop + +%{_bindir}/* +%exclude %{_bindir}/sugar-emulator + +%{_datadir}/mime/packages/sugar.xml + +%files emulator +%defattr(-,root,root,-) +%{_bindir}/sugar-emulator +%{_datadir}/applications/sugar-emulator.desktop +%{_datadir}/icons/hicolor/scalable/apps/sugar-xo.svg + +%changelog +* Thu Jun 3 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.1-1 +- New upstream stable 0.88.1 release + +* Sat May 30 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-3 +- Bump build + +* Sat May 30 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-2 +- Clean up some descriptions + +* Tue Mar 20 2010 Peter Robinson <pbrobinson@gmail.com> - 0.88.0-1 +- New upstream stable 0.88.0 release + +* Wed Mar 10 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.8-1 +- New upstream release + +* Tue Mar 02 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.6-1 +- New upstream release + +* Wed Feb 17 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.5-1 +- New upstream release + +* Tue Feb 16 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.4-2 +- Enable sugar-settings-manager support + +* Thu Feb 11 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.4-1 +- New upstream release + +* Tue Jan 12 2010 Sebastian Dziallas <sebastian@when.com> - 0.87.3-1 +- New upstream release + +* Sat Jan 9 2010 Peter Robinson <pbrobinson@gmail.com> - 0.87.2-2 +- Updated to the new python sysarch spec file reqs + +* Wed Dec 23 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.2-1 +- New upstream release + +* Tue Dec 01 2009 Sebastian Dziallas <sebastian@when.com> - 0.87.1-1 +- New upstream release +- Make this noarch again + +* Fri Nov 20 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.86.3-5 +- One more try + +* Fri Nov 20 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.86.3-4 +- Create %{_datadir}/sugar/activities + +* Fri Nov 20 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.86.3-3 +- Own %{_datadir}/sugar/activities. Fixes #532796 + +* Wed Oct 21 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.3-2 +- add missing file to appropriate section + +* Wed Oct 21 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.3-1 +- Sporadic freezes while scrolling journal #1506 +- Suppress race condition with Journal appearing on sugar startup #1373 +- Alt+Space not working to show/hide the tray #1476 + +* Sun Sep 27 2009 Sebastian Dziallas <sebastian@when.com> - 0.86.0-1 +- New upstream release + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.8-2 +- Package /usr/share/applications/sugar-emulator.desktop + +* Fri Sep 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.8-1 +- New upstream release + +* Fri Sep 11 2009 Simon Schampijer <simon@schampijer.de> - 0.85.7-2 +- add python-xklavier dependency + +* Fri Sep 11 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.7-1 +- New upstream release + +* Wed Sep 02 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.5-1 +- New upstream release + +* Wed Aug 26 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.4-1 +- New upstream release + +* Sun Aug 02 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.3-1 +- New upstream release + +* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.85.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sat Jul 18 2009 Tomeu Vizoso <tomeu@sugarlabs.org> - 0.85.2-1 +- New upstream release + +* Thu Apr 16 2009 Simon Schampijer <simon@schampijer.de> - 0.84.6-1 +- Only update the connections file when the AP changes state #756 +- Initialize the ResultSet after the widget changes size #733 + +* Wed Apr 08 2009 Simon Schampijer <simon@schampijer.de> - 0.84.5-1 +- Remove fixed width from speaker palette #719 +- Correctly close the input stream in file transfers #682 + +* Mon Apr 06 2009 Simon Schampijer <simon@schampijer.de> - 0.84.4-1 +- new german and spanish translations + +* Mon Apr 06 2009 Simon Schampijer <simon@schampijer.de> - 0.84.3-1 +- If user updates an activity installed in /usr/share/activities, both versions remain installed #707 +- Sometimes an activity will not start #461 +- Grey out the erase option if an activity bundle cannot be erased #620 +- AP: Do not write timestamp when not managed to connect #623 +- Correct date in 'About my Computer' CP section #639 +- Make Jukebox the default activity for ogg-vorbis #423 +- Find an available icon for displaying the removable device #627 +- CP: Disallow the user from selecting any fallbacks if English (USA) is +selected (#slo:561) +- Call *mount_finish when the callback is called #326 +- Add full licence to data dir #357 +- The logout option is available by default +- Resume from home is duplicating activity instances again #600 + +* Wed Apr 01 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-4.20090401git4232758da5 +- git snapshot + +* Tue Mar 24 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-3.20090324gite16cf854aa +- rebuild without the logout patch + +* Tue Mar 24 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-2.20090324gite16cf854aa +- git snapshot + +* Sun Mar 22 2009 Simon Schampijer <simon@schampijer.de> - 0.84.1-1 +- Update to latest NM-User config file (same as nm-applet) +- Fix nondeterministic denials for no-interface messages #575 + (Thanks to Dan Williams and Colin Walters for their assistance + in spotting this. upstream bug fdo #18961) +- Draw the rounding box inside the icon bounds (benzea) #567 +- Add Dismiss option to the palette of finished transfers #484 +- Resume-by-default uses open with, not just open #547 +- Set Pippy as the default for opening python files #287 +- Remove duplicates from the activities submenu #497 +- Remove transfer icon from frame when the local user cancels it #483 +- Restore the icon size after a layout change #157 +- enable logout option + +* Wed Mar 18 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-2.20090318gitd3a0839735 +- git snapshot + +* Tue Mar 03 2009 Simon Schampijer <simon@schampijer.de> - 0.84.0-1 +- Focus rectangle corners should be rounded #406 +- Restore minimal .xol support #459 +- Check the activity version and replace an older version upon download #464 +- Friendstray: icon reacting to right click #441 +- Network device icons don't react on right click #463 +- Don't open a launcher window when that activity is already running #426 +- Fall back to application-octet-stream for unknown types #458 +- Show a generic icon for clippings, if available #454 +- Don't add_bundle on activity dir change when installed already #442 +- Make mute sound code togglable +- Keyhandler: Map XF86Search to the journal search +- Keyhandler: Catch all exceptions (thanks to Sascha Silbe) +- Give time for exit to execute when closing the emulator #435 +- Dont hardcode the maximum amount of entries to cache in the journal #72 +- Add standard Print shortcut to take a screenshot +- Use keyboard specific keys to set the volume #430 +- Update to new DBus policy #307 +- Fix palette appearance on right-click #403 +- Switch to existing instance of an activity if it's already running #410 + +* Fri Feb 27 2009 Simon Schampijer <simon@schampijer.de> - 0.83.8-3.20090227gitae381ce5b6 +- git snapshot +- Don't add_bundle on activity dir change when installed already #442 +- Make mute sound code togglable +- Keyhandler: Map XF86Search to the journal search +- Keyhandler: Catch all exceptions (thanks to silbe) +- Give time for atexit to execute when closing the emulator #435 +- Dont hardcode the maximum amount of entries to cache in the journal #72 +- Add standard 'Print' shortcut to take a screenshot +- Use keyboard specific keys to set the volume #430 +- Update to new DBus policy #307 +- Fix palette appearance on right-click #403 +- Switch to existing instance of an activity if it's already running #410 + +* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.83.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Simon Schampijer <simon@schampijer.de> - 0.83.8-1 +- Revert "Add a favorites mode setting for deciding if the favorites view resumes by default or not" +- Listen for changes in the Activities dir and install/uninstall activities accordingly #235 +- Fix sorting of favorite icons by installation_time #387 +- View Source: Option and accelerator in activity frame palette +- View Source: Use activity icon outline for Bundle Source, part of #360 +- View Source: Hide Python Bytecode files #361 +- Use the file transfer icons +- Many new translations! + +* Thu Feb 19 2009 Simon Schampijer <simon@schampijer.de> - 0.83.7-3 +- actually adding pygtksourceview2 as a dependency + +* Thu Feb 19 2009 Simon Schampijer <simon@schampijer.de> - 0.83.7-2 +- adding gtksourceview2 as a dependency + +* Mon Feb 16 2009 Simon Schampijer <simon@schampijer.de> - 0.83.7-1 +- Resume Activity list is not updated directly #322 +- Fix network panel on XO (Sascha Silbe) #290 +- Only show cp power section on xo #320 +- Add logout option to the buddy menu (Sayamindu) #207 +- Launch activity also when clicking on the palette icon #335 +- Use the activity icon for the 'Start new' palette item #314 +- Close the object chooser when the activity is closed #329 +- Dates in journal are not translated #55 +- Don't mute when right-clicking the speaker icon #278 +- Correctly cache the connection to the OHM service #249 +- Show launcher screen immediately after the user clicks to start an activity #243 +- Use documend-send icon (Gary C Martin) #227 +- Try harder to get an icon for a clipping +- Hide the journal activity in the home view #87 +- Correctly initialize the TrayIcon +- Add 'View Details' option to object palette in journal +- Translation updates +- Hide OLPC-specific fields on non-xo machines #133 +- Add a 'Clear search' button to 'No matching entries' message #266 +- Correctly detect when a query in the journal is empty #255 +- Avoid launching two instances of the same activity instance #238 +- Add start-with option to objectpalette in the journal +- Fix dnd of icons in the favorite view #213 +- Right click on AP should reveal palette not connect to AP #10 +- Display space used and left in the volume palette in the journal #33 +- Don't update the zoom level when a dialog window pops up +- Fix filtering the objectchooser with data types #219 + +* Fri Feb 06 2009 Simon Schampijer <simon@schampijer.de> - 0.83.6-2.20090206git7115089fb0 +- Fix italian translation +- Set the locale path for sugar-toolkit #55 +- Don't mute when right-clicking the speaker icon #278 +- Correctly cache the connection to the OHM service #249 +- Show launcher screen as soon as possible #243 +- Use documend-send icon (Gary C Martin) #227 + +* Wed Feb 04 2009 Simon Schampijer <simon@schampijer.de> - 0.83.6-1 +- Try harder to get an icon for a clipping +- Hide the journal activity in the home view #87 +- Correctly initialize the TrayIcon +- Add 'View Details' option to object palette in journal +- Translation updates +- Hide OLPC-specific fields on non-xo machines #133 +- Add a 'Clear search' button to 'No matching entries' message #266 +- Correctly detect when a query in the journal is empty #255 +- Avoid launching two instances of the same activity instance #238 +- Add start-with option to objectpalette in the journal +- Fix dnd of icons in the favorite view #213 +- Right click on AP should reveal palette not connect to AP #10 +- Display space used and left in the volume palette in the journal #33 +- Don't update the zoom level when a dialog window pops up +- Fix filtering the objectchooser with data types #219 + +* Fri Jan 30 2009 Simon Schampijer <simon@schampijer.de> - 0.83.5-3.20090130gitf7807dddc0 +- Add 'View Details' option to object palette in journal +- Translation updates +- Hide OLPC-specific fields on non-xo machines #133 +- Add a 'Clear search' button to 'No matching entries' message #266 +- Correctly detect when a query in the journal is empty #255 +- Avoid launching two instances of the same activity instance #238 +- Add start-with option to objectpalette in the journal +- Fix dnd of icons in the favorite view #213 +- Right click on AP should reveal palette not connect to AP #10 +- Display space used and left in the volume palette in the journal #33 +- Don't update the zoom level when a dialog window pops up +- Fix filtering the objectchooser with data types #219 + +* Tue Jan 27 2009 Bernie Innocenti <bernie@codewiz.org> - 0.83.5-2 +- Obsolete sugar-journal + +* Tue Jan 20 2009 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.5-1 +- make the journal entries in the favorites palette resumable +- simplify the constants used to identify favorite layouts +- separate debug settings from xsession #163 +- add logout option #207 to xomenu (sayamindu, icon by eben) +- change jabber server without sugar restart #142 +- About my XO -> About my Computer +- #196 Fix setting the timezone in debian +- autoconnect to AP that we connected to last #8 +- add a favorites mode setting for deciding if the favorites view resumes by default or not +- resume by default the last activity from the favorites view +- implement filtering by file type for removable devices +- #132 Filter by timestamp, not by mtime +- add support for text queries on removable devices +- dont abort if we cannot read a file from a removable device +- add a favorite filter to the journal toolbar +- sanitize the file name when we copy to removable devices +- #36 Refresh the detailed view when the entry changes +- #38 Refresh full metadata when editing so we dont lose properties +- Focus Search is not exposed via dbus anymore #89 +- #131 'open with' does not work for clipboard item +- #165 Install bundles when they get into the journal +- add Resume item to the file transfer palette +- #126 Fix erase button in the journal +- following eben's spec for the device positions + +* Sun Jan 04 2009 Simon Schampijer <simon@laptop.org> - 0.83.4-2 +- add intltool build require + +* Sun Jan 04 2009 Simon Schampijer <simon@laptop.org> - 0.83.4-1 +- New download url +- Fix language parsing on Gentoo and ALTLinux #81 (alsroot) +- Change the FRAME_POSITION_RELATIVE to follow eben's spec +- exec sugar-session +- Add wired device icon for the frame +- Only show wireless device in the frame when connecting/connected +- Use jabber.sugarlabs.org by default +- Only create a keydialog for the activating connection +- CanvasPulsingIcon: Don't begin pulse loop on resume if not pulsing +- Use g_timeout_add_seconds() for power efficiency +- Add the journal button to the volumes toolbar in the journal +- Remove jarabe/model/volume.py and use gio instead +- First try at restoring removable devices support in the journal +- make the image viewer activity the default one for iamges + +* Wed Dec 21 2008 Bernie Innocenti <bernie@codewiz.org> - 0.83.3-6 +- Add missing dependencies on xorg-x11-utils, dbus-x11 and openssh + +* Wed Dec 10 2008 Bernie Innocenti <bernie@codewiz.org> - 0.83.3-5 +- Spec file cleanup and updates + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.83.3-4 +- Rebuild for Python 2.6 + +* Fri Nov 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.3-3 +- Really add the patch + +* Fri Nov 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.3-2 +- Fix the desktop file executable + +* Fri Nov 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.3-1 +- Update to 0.83.3 + +* Thu Nov 6 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-4 +- Fix translations + +* Thu Nov 6 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-2 +- Fix gconf schemas installation + +* Tue Nov 4 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.83.2-1 +- Update to 0.83.2 + +* Thu Sep 25 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.9-1 +- #7969 Accidental searches lead to a "blank" Home screen +- #8662 xo man jumps around while zooming +- #8642 Bug in WPA key dialog prevents certain passwords from being accepted +- #8657 Help activity doesn't show up on a clean install. +- #8234 Software update (in Control Panel) crashes X-server. + +* Sat Sep 20 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.8-1 +- #8554 Indicate connected AP in Neighborhood view. +- #7987 Home view XO icon palette for Control Panel has wrong icon +- #7685 Alternate home layouts; fixed ring scaling; better modularization of layouts +- #8148 control panel does have layout problems with languages like mongolian +- #8485 Switching between zoom levels seem to leak + +* Tue Sep 16 2008 Simon Schampijer <simon@laptop.org> - 0.82.7-1 +- remove numpy finally + +* Sat Sep 13 2008 Simon Schampijer <simon@laptop.org> - 0.82.6-1 +- #8438 control panel fails when run with python -OO +- #8470 SpreadLayout leaks self._collisions +- #8375 gst usage in the shell wastes 2.6mb +- #8372 Remove numpy usage from the shell + +* Thu Sep 12 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.5-1 +- #8427 Sugar does not send SetActive(True) +- #8409 Sugar does not save network's BSSIDs in networks.cfg + +* Thu Sep 11 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.4-1 +- #7480 Need to 'reset' the network configurations - short term fix +- #8368 Disable the server plugin if no server was specified + +* Sat Sep 6 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.82.3-2 +- fix license tag + +* Sat Sep 6 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.3-1 +- #8300 Shell _launchers are leaked +- #7856 notify::active behaviour change +- #8250 Invalid POT for "Copyright and License" of control panel + +* Wed Sep 3 2008 Jeremy Katz <katzj@redhat.com> - 0.82.2-2 +- Require gstreamer-python and telepathy-python (rhbz#447589) + +* Fri Aug 29 2008 Simon Schampijer <simon@laptop.org> - 0.82.2-1 +- 6929 Control panel: include copyright/licensing info in about dialogue +- Fix some launcher issues + +* Thu Aug 28 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.82.1-1 +- #2866 Network Manager GUI doesn't report success or failure +- #3993 The color of network icon in Home view becomes white after restarting Sugar. +- #2866 Network Manager GUI doesn't report success or failure +- #7988 Sugar control panel doesn't have a language entry for kreyol +- #7823 Non-modal alerts in CP remain when they shouldn't +- #7733 Cannot install Wikipedia-10.xo +- #7356 regression in activity view performance. +- #7660 XO Neighborhood icon drawing & erase glitches +- #6605 Screen rotates clockwise, while rotation button shows counter clockwise arrows +- #7877 Control Panel / Data & Time: Selecting timezone by typing locks up UI +- #7965 Mirror activities list in RTL locales +- #7220 Mark newly downloaded activities as favorites by default +- #7874 Search entry in Home focuses list view when cleared +- #7971 CP fails to validate all settings correctly +- #7970 Some CP modules set needs_restart to False when they shouldn't +- #7764 Reset Registration with school servers - short term solution +- #7823 Non-modal alerts in CP remain when they shouldn't +- #7874 Search entry in Home focuses list view when cleared +- #7730 Clicking on Speaker icon should Mute/Unmute Sound +- #4656 Non-olpc buddies not shown in the meshview (using salut) +- #7873 Search entry in Home should be focused implicitly + +* Fri Aug 22 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.0-2.20080822git454def195d +- Fix #6605 #7877 #7965 #7220 #7874 #7971 #7970 #7764 #7823 #7841 + +* Thu Aug 07 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.82.0-1 +- Mirror the intro screen in rtl. Patch by Khaled Kosny Fix #3108 +- #7740 react gracefully to dbus services being restarted +- Fix case when already registered 7836 +- Redirect keyboard brightness and DCON freeze requests to OHM #7357 +- open cp software-updater on first boot after an update 7495 +- Activate threads support 7486 +- added languages Norwegian and Slovenian +- translation updates + +* Fri Aug 01 2008 Simon Schampijer <simon@laptop.org> - 0.81.8-1 +- 7248 Speaker device has inconsistent behavior +- 7625 alt+tab switching is slow because activities are notified unneccessary +- 7560 cp: Inconsistent behavior after changing the xo color +- 7641 Control panel sugar theme infelicities. +- 6136 No feedback from 'register' request. + +* Wed Jul 23 2008 Simon Schampijer <simon@laptop.org> - 0.81.7-1 +- 7546 Activity launcher fails to show when launching from the journal +- 5664 Copying formatted text out of Browse breaks Journal/clipboard interaction +- 7385 Change the accelerator for switching between views in the home level +- 7249 Device ordering in Frame is not fixed +- 7510 Control Panel 'About Me' incorrectly keeps a name edit when you choose to Cancel out +- 7071 Activities cannot be deleted via GUI +- 4208 Battery indicator's icon fullness inconsistent with indicator %. +- 7430 Favorites view is not preserved +- 7434 Control panel UI for power management. + +* Thu Jul 17 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-4.20080715git8137d5c37f +- split the sugar-emulator in it's own package to get rid of the + xephyr dependency + +* Tue Jul 15 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.81.6-3.20080715git8137d5c37f +- 7071 Add an option for uninstalling activities from the home view +- 7476 Order control panel modules logically +- 4208 battery icon consistency fix +- 7354 Maintain correct zoom level after activity launch + +* Wed Jul 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-2.20080709git8f4819a62e +- git snapshot +- 7430 Preserve the favorites layout across reboots +- 7434 Add power section to the control panel + +* Wed Jul 09 2008 Simon Schampijer <simon@laptop.org> - 0.81.6-1 +- 7438 sugar shuts down when you click Restart +- 7365 Invites not working +- 7248 Speaker device has inconsistent behavior +- 7339 CPU Spins after starting an activity +- 7015 Add proper alignment support to the tray control +- 5613 Cannot set non-ASCII nick name +- 7046 Deleting activity bundle with journal leaves it showing in Home list view until reboot +- 7391 Make the search field in Home reveal the list view +- 7248 Speaker device has inconsistent behavior +- 7272 Notifications are redundant with new launching feedback +- 7273 Activity icons remain colored after launch + +* Sat Jun 21 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.81.5-1 +- Fix a bug with activity switching (benzea) +- UI improvements to the control panel frame section (erikos) +- First go at session management implementation (marco) +- New activity launching feedback (eben and marco) +- Speaker device implementation cleanups (mtd) +- Support for 1-1 chat with other xmpp clients (morgs and cassidy) +- Shortcuts improvements for emulation (mtd) +- Additional free form layout for the home view and allow to reorder icons (tomeu) +- Improve layout logic for the icons in the mesh view (tomeu) +- Support for switching activities using alt+tab (benzea) + +* Mon Jun 09 2008 Simon Schampijer <simon@schampijer.de> - 0.81.3-1 +- Search in the activity list (Tomeu) +- Add installation date in the activity list (Tomeu) +- Improve performance of the activity list (Tomeu) +- Sort activities in the list and ring by installation date (Tomeu) +- Speaker device (Martin Dengler) +- Graphical frontend for the control panel (Simon) +- Rotate the dpad keys when the screen rotate button is pressed (Erik Garrison) + +* Thu May 22 2008 Simon Schampijer <simon@schampijer.de> - 0.81.1-2 +- Removed patch to fix activity location + +* Thu May 22 2008 Simon Schampijer <simon@schampijer.de> - 0.81.1-1 +- Make arrows scroll up and down in scroll views +- Merge activities.default into favorites + +* Tue Apr 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.4-1 +- Pylint cleanup. +- Misc graphical fixes. + +* Mon Apr 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.3-2 +- Patch to fix system activities location + +* Wed Apr 09 2008 Tomeu Vizoso <tomeu@tomeuvizoso.net> - 0.79.3-1 +- Misc graphical fixes. + +* Wed Apr 2 2008 Simon Schampijer <simon@laptop.org> - 0.79.2-1 +- Frame/Home redesign - Put corner stone + +* Fri Mar 28 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.1-1 +- Update to 0.79.1 + +* Mon Feb 11 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.0-2 +- Require sugar-artwork + +* Fri Feb 8 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.79.0-1 +- Update to 0.79.0, rework dependencies because of the toolkit split + +* Sat Feb 2 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.11-2 +- Rebuild + +* Tue Jan 29 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.11-1 +- Fix #5904 + +* Fri Jan 18 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.10-1 +- Fix #1406 #5944 #6051 + +* Wed Jan 16 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.8-2 +- Update the mime db. Fix #5815 + +* Fri Jan 11 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.8-1 +- Fix #5489 #4562 #5765 #5559 #5493 #5573 #5648 + +* Thu Jan 10 2008 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.7-1 +- Fix #4145 #5538 #5760 #5532 #5884 + +* Sat Dec 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.6-1 +- Fix #5489 + +* Wed Dec 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.5-1 +- Fix #5526 #5512 #4909 + +* Wed Dec 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.4-1 +- Fix #4906 #5382 #5364 + +* Wed Dec 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.3-1 +- Fix #4965 + +* Tue Dec 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.1-1 +- Fix #5154 #5221 #5080 + +* Wed Dec 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.75.0-1 +- Update to 0.75.0 + +* Fri Nov 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.70.3-1 +- Update to 0.70.3 + +* Thu Nov 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.70.2-2 +- Change the jabber server + +* Tue Nov 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.70.2-1 +- Update to 0.70.2 + +* Mon Nov 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.70.1-1 +- Update to 0.70.1 + +* Wed Nov 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.89.20071114git411879e9de +- #4768 Fix memory leak when switching between activities. (marco) + +* Tue Nov 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.88.20071113git9d28557bbd +- Fix randr. (marco) +- Do not fail if there is not an activity service. (marco) +- Alert when an activity cannot be saved. (rwh) + +* Tue Nov 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.87.20071113git47e231311b +- Get rid of sound competely to be sure we don't block the device. (marco) + +* Tue Nov 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.86.20071112git1bf6cdaa81 +- #4728, #4764: Set the correct colors for filtered out mesh view icons. (tomeu) + +* Fri Nov 09 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.85.20071109gitd6bac927e1 +- #4667 Do not display XO outside the mesh view. (marco) +- #4687 Use the right free function, fix a crash. (sjoerd) +- #4724 Display meshbox invite palette menu with colored + activity icon (erikos) +- Always checkin to the DS from a new file. (tomeu) + +* Fri Nov 09 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.84.20071109git55864fa3f6 +- Support for the espeak service. (codyl) +- Fix typo in activity launching code. (marco) + +* Thu Nov 08 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.83.20071108gite23f012e08 +- Launch a few activities outside rainbow containers. (marco) + +* Thu Nov 08 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.82.20071108git3e491c2dc7 +- #4715: Filter new items that appear in the mesh view. (tomeu) +- #4716: Filter correctly activity icons in the mesh view. (tomeu) +- Use HOME/.i18n in control panel and reset jabber_registered to False (erikos) + +* Wed Nov 07 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.81.20071107gitdae3ebe8d1 +Snapshot 306d32832f + +* Tue Nov 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.80.20071106git306d32832f +- Add missing dependency to sugar-base + +* Tue Nov 06 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.79.20071106git306d32832f +- Associate ctrl+s to keep. (rwh) + +* Tue Nov 06 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.78.20071105git73cae198f5 +- Remove the startup sound for now, to not break audio + for all the activities. (marco) + +* Mon Nov 05 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.77.20071105git0a9676171d +- #4650: Failure to write journal files. (marco) + +* Mon Nov 05 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.76.20071105gitee8712d1c4 +- #3119: Implement some basic search capabilities in the mesh view. (tomeu) + +* Sun Nov 04 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.75.20071104gitd456f6c633 +- New experimental screenshot code. (marco) + +* Sat Nov 03 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.74.20071103gite748f756c0 +- #4618: Make the shell service more resilient to failure. (tomeu) + +* Fri Nov 02 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.73.20071102git39aca0154d +- Get bundle installation to work again. (marco) + +* Fri Nov 02 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.72.20071102gitb6422678e6 +- #1941 Call FocusSearch method for popping up the journal. (rwh) + +* Fri Oct 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.71.20071019gitefd0bbd326 +- New snapshot + +* Thu Oct 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.70.20071018git78f51a1b56 +- New snapshot + +* Thu Oct 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.69.20071010git9c5755d85a +- New snapshot + +* Tue Oct 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.68.20071009git6c7c6a503b +- New snapshot + +* Sun Oct 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.67.20071007git143f9ac9c6 +- New snapshot + +* Sun Oct 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.66.20071007git143f9ac9c6 +- New snapshot + +* Sat Oct 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.65.20071006gitc74013db1f +- New snapshot + +* Sat Oct 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.64.20071005git79ba6b91b7 +- New snapshot + +* Thu Oct 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.63.20071004gitacca55e861 +- New snapshot + +* Mon Oct 1 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.61.20071001gited40d65791 +- New snapshot + +* Fri Sep 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.60.20070928gitb8ec83c5b8 +- New snapshot + +* Wed Sep 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.59.20070926git5a595ea04e +- New snapshot + +* Tue Sep 25 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.58.20070925git5a595ea04e +- New snapshot + +* Mon Sep 24 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.57.20070924git5a595ea04e +- New snapshot + +* Sat Sep 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.56.20070922git5a595ea04e +- New snapshot + +* Thu Sep 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.55.20070920git5a595ea04e +- New snapshot + +* Wed Sep 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.54.20070919gitb8ce5083b7 +- New snapshot + +* Wed Sep 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.53.20070919gitb8ce5083b7 +- New snapshot + +* Tue Sep 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.52.20070918gitb8ce5083b7 +- New snapshot + +* Tue Sep 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.51.20070917gitb8ce5083b7 +- New snapshot +- Add a patch to set the jabber server to jabber.laptop.org + +* Mon Sep 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.50.20070917gited22733941 +- New snapshot + +* Sat Sep 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.49.20070915git8ef6c57f8b +- New snapshot + +* Fri Sep 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.48.20070914git0a666e23cf +- New snapshot + +* Wed Sep 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.47.20070912git47f473189e +- New snapshot + +* Tue Sep 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.46.20070911git8b784a6223 +- New snapshot + +* Mon Sep 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.45.20070910git79237f3114 +- New snapshot + +* Sun Sep 9 2007 Dan Williams <dcbw@redhat.com> - 0.65-0.44.20070909gita1f5cece18 +- New snapshot + +* Sun Sep 9 2007 Dan Williams <dcbw@redhat.com> - 0.65-0.43.20070909git6b6470ebcb +- New snapshot + +* Fri Sep 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.42.20070907gitc8700feccf +- New snapshot + +* Thu Sep 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.41.20070906gitd9a30c23ff +- New snapshot + +* Tue Sep 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.40.20070904git0ad6398cf1 +- New snapshot + +* Mon Sep 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.39.20070903git0b3f687749 +- New snapshot + +* Sat Sep 1 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.34.20070901gitfeb462d08d +- New snapshot + +* Thu Aug 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.33.20070830gite65fef5c79 +- New snapshot + +* Wed Aug 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.32.20070829git23ad88db0c +- New snapshot + +* Tue Aug 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.30.20070827git246ec1e4aa +- New snapshot + +* Wed Aug 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.29.20070822gitd38cacfe2c +- New snapshot + +* Mon Aug 20 2007 John (J5) Palmieri <mpg@redhat.com> - 0.65-0.28.20070820gite83b98a8f6 +- New snapshot + +* Mon Aug 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.28.20070820gitb24a28a77d +- New snapshot + +* Tue Aug 14 2007 John (J5) Palmieri <johnp@redhat.com> - 0.65-0.27.20070814gitd93122bf5e +- New snapshot + +* Wed Aug 1 2007 Dan Williams <dcbw@redhat.com> - 0.65-0.27.20070801gitd22f00d894 +- New snapshot + * Don't set a presence server by default (except in the emulator) (dcbw) + +* Tue Jul 31 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.26.20070731git7ddd46589e +- New snapshot + +* Sun Jul 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.25.20070729git285099fe08 +- New snapshot + +* Fri Jul 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.24.20070727git285099fe08 +- New snapshot + +* Wed Jul 25 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.23.20070725git088c7612e3 +- New snapshot + +* Tue Jul 24 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.22.20070724git9ac5d38e90 +- New snapshot + +* Mon Jul 23 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.21.20070723git4a924a8e5d +- New snapshot + +* Mon Jul 23 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.20.20070723git943c78ffa7 +- New snapshot + +* Fri Jul 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.19.20070720git8ae99aaa87 +- New snapshot + +* Thu Jul 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.18.20070719gitf6f3f2b520 +- New snapshot + +* Tue Jul 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.16.20070717git5212790236 +- New snapshot + +* Tue Jul 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.15.20070716gitfd7336c2f1 +- New snapshot + +* Mon Jul 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.14.20070715git9f4da4e6d1 +- New snapshot + +* Fri Jul 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.13.20070713git4c352d1f83 +- New snapshot + +* Wed Jul 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.12.20070711gitec7eb2ebbb +- New snapshot + +* Tue Jul 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.11.20070710gitb83a9ec27d +- New snapshot + +* Tue Jul 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.4.20070710git42f0bcc48d +- New snapshot + +* Tue Jul 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.3.20070710git757b2b8ce6 +- New snapshot + +* Mon Jul 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.2.20070709gitaa6a024368 +- New snapshot + +* Sun Jul 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.10.20070708gitf8cf7ff1ce +- New snapshot + +* Fri Jul 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.9.20070706gitcebf25739b +- #1930: Only take preview before closing. (tomeu) + +* Fri Jul 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.7.20070706git8af15d4e73 +- Nicer tooltips. Improved sizing logic. (marco) +- Do not popdown the frame when palettes are active. (marco) +- Add macedonian translation. (ArangelAngov) +- Add brazilian translation. (DiegoZacarao) +- Some fixes for changing the selected clipboard object. (tomeu) +- Fix palettes around the mesh edges. (edsiper) + +* Fri Jul 6 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.6.20070706gitde8b3b4c01 +- Use HAL to get battery informations. +- Improvements in the mesh view layout. +- Hide the active palette when another popup. +- Icons in the buddy menu items + +* Tue Jul 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.4.20070703gitcc2b8884c0 +- Use the new palette widget everywhere in the UI +- Do not always show the shutdown palette on startup +- Implement primary and secondary state for palettes +- Fix several frame/zoom level bugs + +* Fri Jun 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.3.20070629git30bee7e43a +- Better palette positioning +- Reject invalid nick names in the intro screen +- Make startup notification work from the journal and clipboard +- Do not create a new object when resuming from the journal + +* Thu Jun 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.2.20070628git0d6760b194 +- New snapshot + +* Thu Jun 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.10.20070628git03ef9c034e +- New snapshot + +* Wed Jun 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.9.20070627git381df08442 +- New snapshot + +* Wed Jun 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.8.20070627git69ba74ddc2 +- New snapshot + +* Tue Jun 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.7.20070626git4f748dba9b +- New snapshot + +* Tue Jun 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.4.20070626gitgit84127380dc +- New snapshot + +* Thu Jun 21 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.3.20070620git0e4efae7ae +- python-telepathy is the name of the package in Fedora + +* Wed Jun 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.65-0.2.20070620git0e4efae7ae +- Update to 0.65 +- Fix versioning scheme + +* Tue Jun 19 2007 John (J5) Palmieri <johnp@redhat.com> - 0.64-7.git3b1ee5a0bc.1 +- add a %%doc line with COPYING COPYING.LIB and README +- fix up BR's +- fix buildroot + +* Thu Jun 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.64-6.git3b1ee5a0bc.1 +- Remove gst-plugins build dep + +* Thu Jun 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.64-5.gita1e3dbaf9e.1 +- New snapshot + +* Mon Jun 4 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.64-3.gitb2980d7bd6.1 +- New snapshot + +* Wed May 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.git9ea6b18027.1 +- Updated snapshot + +* Thu May 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-1.gitb1ed24498c.1 +- Journal API fixes + +* Thu May 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-1.git0c77275ba7.2 +- New snapshot + +* Thu May 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.87.20070517git +- Presence service fixes + +* Thu May 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.86.20070517git +- Ps and browser fixes + +* Wed May 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.85.20070516git +- Journal perf fixes + +* Tue May 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.84.20070515git +- Some ps fixes + +* Tue May 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.83.20070515git +- Fix mozilla components initialization + +* Tue May 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.82.20070515git +- Journal and ps fixes + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.81.20070514git +- Improved activity toolbar + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.80.20070514git +- Fix sugar browser + +* Mon May 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.79.20070514git +- Several datastore and presence service fixes + +* Fri May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.78.20070511git +- Fix cursors + +* Fri May 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.77.20070511git +- Various theme fixes and correct dpi + +* Thu May 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.76.20070510git +- New snapshot + +* Mon May 7 2007 Dan Williams <dcbw@redhat.com> - 0.63-2.75.20070406git +- Fix nickname encoding and length issues + +* Fri Apr 6 2007 Dan Williams <dcbw@redhat.com> - 0.63-2.74.20070406git +- Network manager UI fixes (don't show adhoc APs) +- Fix the 'execute' command so the camera button works +- Blacklist failed buddy service resolutions in the PS + +* Thu Apr 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.73.20070405git +- Network manager UI fixes + +* Tue Apr 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.72.20070403git +- Do not abort on X errors + +* Tue Apr 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.71.20070403git +- Do not kill the process for X errors in mozilla + +* Fri Mar 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.70.20070331git +- Fix for back/forward on frames + +* Fri Mar 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.69.20070330git +- Fix pdf downloading on broken servers + +* Fri Mar 30 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.68.20070330git +- Some fixes for the new ap status feedback + +* Thu Mar 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.67.20070329git +- Fixes for the mesh device UI + +* Thu Mar 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.66.20070329git +- Better feedback for the ap states on the mesh view. + +* Thu Mar 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.65.20070329git +- Fix pdf mime type. Mesh network support. + +* Wed Mar 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.64.20070328git +- Improve rollovers behavior. Disable the presence service. + +* Mon Mar 26 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.62.20070326git +- Misc bugfixes + +* Fri Mar 23 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.61.20070323git +- Support for translations. Bugfixes. + +* Thu Mar 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.60.20070322git +- Fix gtkrc path + +* Thu Mar 22 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.59.20070322git +- Add a gtkrc. Some fixes. + +* Wed Mar 21 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.58.20070321git +- Don't hardcode font for arabic. Entry style fixes. + +* Tue Mar 20 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.57.20070320git +- Some style fixes + +* Mon Mar 19 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.56.20070319git +- File chooser size fixes + +* Sun Mar 18 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.55.20070318git +- More frame and saving fixes + +* Sat Mar 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.54.20070317git +- Suggest name on save. Frame fixes. + +* Fri Mar 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.53.20070316git +- Several bug fixes + +* Fri Mar 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.52.20070316git +- FIx file picker buttons + +* Thu Mar 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.51.20070315git +- Fix donut and devices sizing + +* Thu Mar 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.50.20070315git +- Several bugfixes + +* Thu Mar 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.49.20070315git +- Downloads fixes and improvements + +* Wed Mar 14 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.48.20070314git +- Improve the frame behavior and animation +- Add API to save image and web pages + +* Sun Mar 11 2007 Dan Williams <dcbw@redhat.com> - 0.63-2.47.20070308git.1 +- Better frame animation + +* Thu Mar 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.47.20070308git +- Add a default picture + +* Wed Mar 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.46.20070307git +- More nm fixes. Fix keyboard grabbing. + +* Wed Mar 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.45.20070307git +- Some nmclient signals cleanups + +* Wed Mar 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.44.20070307git +- Fix the doubling access points bug. Fix some access point state bugs. + +* Wed Mar 7 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.43.20070307git +- Simple but efficient implementation of spreadbox + +* Mon Mar 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.42.20070306git +- Update snapshot + +* Mon Mar 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.41.20070305git +- Update snapshot + +* Mon Mar 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.40.20070305git +- Update snapshot + +* Sat Mar 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.39.20070305git +- Update snapshot + +* Sat Mar 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.38.20070304git +- Update snapshot + +* Sat Mar 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.37.20070304git +- Update snapshot + +* Fri Mar 2 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.36.20070302git +- Update snapshot + +* Thu Mar 2 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.34.20070302git +- Update snapshot + +* Thu Mar 2 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.33.20070302git +- Update snapshot + +* Thu Feb 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.32.20070302git +- Update snapshot + +* Thu Feb 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.31.20070301git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.30.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.28.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.27.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.26.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.25.20070228git +- Update snapshot + +* Wed Feb 28 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.24.20070228git +- Update snapshot + +* Tue Feb 27 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.23.20070227git +- Update snapshot + +* Sat Feb 24 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.22.20070224git +- Update to 0.63-2.22.20070224git + +* Thu Feb 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.21.20070215git +- Update to 0.63-2.21.20070215git + +* Thu Feb 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.20.20070208git +- Update to 0.63-2.20.20070208git + +* Tue Feb 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.20.20070203git.1 +- Remove dep on pygtkmozembed + +* Sun Feb 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.20.20070203git +- Update to 0.63-2.20.20070203git + +* Sun Feb 3 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.19.20070203git +- Update to 0.63-2.19.20070203git + +* Wed Jan 31 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.18.20070131git +- Update to 0.63-2.18.20070131git + +* Wed Jan 31 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.17.20070131git +- Update to 0.63-2.17.20070131git + +* Wed Jan 31 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.16.20070131git +- Update to 0.63-2.16.20070131git + +* Wed Jan 29 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.15.20070129git +- Update to 0.63-2.15.20070129git + +* Wed Jan 17 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.14.20070167git +- Update to 0.63-2.14.20070117git + +* Tue Jan 16 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.13.20070116git +- Update to 0.63-2.13.20070116git + +* Mon Jan 15 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.12.20070115git +- Update to 0.63-2.12.20070115git + +* Sat Jan 13 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.11.20070113git +- Update to 0.63-2.11.20070113git + +* Fri Jan 12 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.10.20070112git +- Update to 0.63-2.10.20070112git + +* Thu Jan 11 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.9.20070111git +- Update to 0.63-2.9.20070111git + +* Wed Jan 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.8.20070110git +- Update to 0.63-2.8.20070110git + +* Wed Jan 10 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.7.20070110git +- Update to 0.63-2.7.20070110git + +* Tue Jan 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.6.20070109git +- Update to 2.6.20070109git + +* Tue Jan 9 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.5.20070109git +- Update to 2.5.20070109git + +* Mon Jan 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.4.20070108git +- Update to 2.4.20070108git + +* Mon Jan 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.3.20070108git +- Update to 2.3.20070108git + +* Mon Jan 8 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.1.20070108git +- Update to 2.1.20070108git + +* Fri Jan 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.2.20070105git +- Update to 0.63-2.2.20070105git + +* Fri Jan 5 2007 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-2.1.20070105git +- Update to 0.63-2.1.20070105git + +* Thu Nov 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.63-1 +- Update to 0.63 + +* Wed Nov 20 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.62-1 +- Update to 0.62 + +* Mon Nov 18 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.61-1 +- Update to 0.61 + +* Mon Nov 18 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.60-1 +- Update 0.60 +- Addd the service files + +* Fri Nov 17 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.59.1-1 +- Update to 0.59.1 + +* Mon Nov 14 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.59-1 +- Update to 0.59 + +* Mon Nov 14 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.58-1 +- Update to 0.58 + +* Sun Nov 12 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.57-1 +- Update 0.57 + +* Sun Nov 12 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.56-1 +- Update 0.56 + +* Sun Nov 12 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.54-1 +- Updat 0.54 + +* Fri Nov 10 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.53-1 +- Update 0.53 + +* Fri Nov 10 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.52-1 +- Update to 0.52 + +* Thu Nov 9 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.51-1 +- Update to 0.51 + +* Wed Nov 8 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.50-1 +- Update to 0.50 + +* Sun Nov 5 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.49-1 +- Update to 0.49 + +* Sat Nov 4 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.48-1 +- Update to 0.48 + +* Fri Nov 3 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.47-1 +- Update to 0.47 + +* Mon Oct 30 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.46-1 +- Update to 0.46 + +* Sat Oct 28 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.45-1 +- Update to 0.45 + +* Thu Oct 26 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.44-1 +- Update to 0.44 + +* Thu Oct 26 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.43-1 +- Update to 0.43 + +* Wed Oct 25 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.42-1 +- Update to 0.42 + +* Tue Oct 24 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.41-1 +- Update to 0.41 + +* Fri Oct 20 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.40-1 +- Update to 0.40 + +* Fri Oct 20 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.39-1 +- Update to 0.39 + +* Thu Oct 19 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.38-1 +- Update to 0.38 + +* Wed Oct 18 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.37-1 +- Update to 0.37 + +* Tue Oct 17 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.36-1 +- Update to 0.36 + +* Tue Oct 17 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.35-1 +- Update to 0.35 + +* Fri Oct 13 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.34-1 +- Update to 0.34 + +* Fri Oct 6 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.33-1 +- Update 0.33 + +* Fri Oct 6 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.32-1 +- Update 0.32 + +* Fri Oct 6 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.31-3 +- Add req for vte + +* Fri Oct 6 2006 John (J5) Palmieri <johnp@redhat.com> - 0.31-2 +- Add req for hippo-canvas-python + +* Thu Oct 5 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.31-1 +- Update to 0.31 + +* Wed Oct 4 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.30-1 +- Update to 0.30 +- Update dependencies + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.29-1 +- Update to 0.29 + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.29-1 +- Update to 0.29 + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.28-1 +- Update to 0.28 + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.27-1 +- Update to 0.27 + +* Mon Sep 11 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.26-1 +- Update to 0.26 + +* Fri Aug 25 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.25-1 +- Update to 0.25 + +* Fri Aug 25 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.24-1 +- Update to 0.24 + +* Fri Aug 25 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.23-1 +- Update to 0.23 +- Add build req pygtk2-devel + +* Wed Aug 23 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.22-2 +- Rebuild + +* Wed Aug 23 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.22-1 +- Update to 0.22 + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.21-1 +- Update to 0.21 + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.20-2 +- Requires matchbox-window-manager + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.20-1 +- Update to 0.20 +- Fix requires +- Require python-devel +- Require perl-XML-Parser +- Missing make on build +- Require gettext + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.19-3 +- Remove .la + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.19-2 +- Package some missing files + +* Tue Aug 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.19-1 +- Build 0.19 + +* Sun Jun 30 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.18-1 +- Build 0.18 + +* Sun Jun 30 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.17-1 +- Build 0.17 + +* Sun Jun 29 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.16-1 +- Build 0.16 + +* Sun Jun 24 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.15-1 +- Build 0.15 + +* Sat Jun 23 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.14-1 +- Build 0.14 + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.13-1 +- Build 0.13 + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.12-4 +- Add pkgconfig to build requires + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.12-3 +- Remove build requires + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.12-2 +- Make this noarch + +* Fri Jun 22 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.12-1 +- Update to release 0.12 + +* Tue Jun 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.11-1 +- Update to release 0.11 + +* Tue Jun 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.10-1 +- Update to release 0.10 + +* Tue May 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.9-1 +- Update to release 0.9 + +* Tue May 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.8-1 +- Update to release 0.8 + +* Tue May 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.7-1 +- Update to release 0.7 + +* Tue May 21 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.6-1 +- Update to release 0.6 + +* Tue May 17 2006 Marco Pesenti Gritti <mpg@redhat.com> - 0.4-1 +- Update to release 0.4 +- No more dbus .services files + +* Tue May 16 2006 David Zeuthen <davidz@redhat.com> - 0.3-1 +- Update to release 0.3 + +* Tue May 16 2006 David Zeuthen <davidz@redhat.com> - 0.2-3 +- Add Requires: avahi-tools + +* Tue May 16 2006 David Zeuthen <davidz@redhat.com> - 0.2-2 +- Add Requires: libxml2-python + +* Mon May 08 2006 David Zeuthen <davidz@redhat.com> - 0.2-1 +- Initial package diff --git a/rpms/sugar/tch-Add-missing-restart-button.patch b/rpms/sugar/tch-Add-missing-restart-button.patch new file mode 100644 index 0000000..baac267 --- /dev/null +++ b/rpms/sugar/tch-Add-missing-restart-button.patch @@ -0,0 +1,29 @@ +From 25d05d8936e73ed04371b286a008da5866d33958 Mon Sep 17 00:00:00 2001 +From: Martin Abente <mabente@paraguayeduca.org> +Date: Thu, 15 Jul 2010 11:43:17 -0400 +Subject: [PATCH] Add missing restart button +Organization: Paraguay Educa + +--- + src/jarabe/view/buddymenu.py | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/src/jarabe/view/buddymenu.py b/src/jarabe/view/buddymenu.py +index 4637751..e21b617 100644 +--- a/src/jarabe/view/buddymenu.py ++++ b/src/jarabe/view/buddymenu.py +@@ -84,6 +84,11 @@ class BuddyMenu(Palette): + self.menu.append(item) + item.show() + ++ item = MenuItem(_('Restart'), 'system-restart') ++ item.connect('activate', self.__reboot_activate_cb) ++ self.menu.append(item) ++ item.show() ++ + client = gconf.client_get_default() + + if client.get_bool('/desktop/sugar/show_logout'): +-- +1.6.0.4 + diff --git a/rpms/sugar/use-the-spanish-verb-quitar-for-unmounting-devices.patch b/rpms/sugar/use-the-spanish-verb-quitar-for-unmounting-devices.patch new file mode 100644 index 0000000..fb15754 --- /dev/null +++ b/rpms/sugar/use-the-spanish-verb-quitar-for-unmounting-devices.patch @@ -0,0 +1,37 @@ +From 32043cb14603584e19c0edf34e272763779f95da Mon Sep 17 00:00:00 2001 +From: Bernie Innocenti <bernie@codewiz.org> +Date: Sun, 16 May 2010 13:29:38 -0400 +Subject: [PATCH] use the spanish verb "quitar" for unmounting devices +Organization: Sugar Labs Foundation +X-Subversion: sucks + +In Sugar 0.88, the command for unmounting removable devices has been +renamed from "Unmount" to "Remove", which is used throughout the GUI +with several slightly different meanings. + +The common translation for "remove" was "eliminar", whose semantic +meaning is "eliminate", thus inappropriate for the unmount operation. + +Other languages may not be so lucky. We may have to keep the string for +unmounting devices distinct from the others, along with a TRNAS comment +to warn translators about the context. +--- + po/es.po | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/po/es.po b/po/es.po +index 587608f..6702db6 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -975,7 +975,7 @@ msgstr "Transferencia a %r" + + #: ../src/jarabe/frame/clipboardmenu.py:52 ../src/jarabe/view/palettes.py:218 + msgid "Remove" +-msgstr "Eliminar" ++msgstr "Quitar" + + #: ../src/jarabe/frame/clipboardmenu.py:57 + #: ../src/jarabe/frame/clipboardmenu.py:80 +-- +1.7.0.1 + |