<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dnarvaez</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dnarvaez"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Dnarvaez"/>
	<updated>2026-06-15T10:51:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=85440</id>
		<title>Development Team/Sugar-Build</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=85440"/>
		<updated>2013-01-12T01:46:29Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://git.sugarlabs.org/sugar-build/sugar-build sugar-build] is a set of scripts to make it easy to build all the sugar modules and some of the required dependencies. Please see the [http://sugarlabs.org/~buildbot/docs/build.html documentation].&lt;br /&gt;
&lt;br /&gt;
If you find any issue please report them instead of documenting workarounds on this page. The tips get out of date really quickly and unreported bugs are never fixed. The goal here is to always work out of the box for everyone.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=84066</id>
		<title>Development Team/Sugar-Build</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=84066"/>
		<updated>2012-11-18T09:15:58Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://git.sugarlabs.org/sugar-build/sugar-build sugar-build] is a set of scripts to make it easy to build all the sugar modules and some of the required dependencies. Please see the [http://sugarlabs.org/~dnarvaez/sugar-docs/build.html documentation].&lt;br /&gt;
&lt;br /&gt;
If you find any issue please report them instead of documenting workarounds on this page. The tips get out of date really quickly and unreported bugs are never fixed. The goal here is to always work out of the box for everyone.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=84065</id>
		<title>Development Team/Sugar-Build</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugar-Build&amp;diff=84065"/>
		<updated>2012-11-18T09:14:19Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sugar-build is a set of scripts to make it easy to build all the sugar modules and some of the required dependencies. Please see the [documentation http://git.sugarlabs.org/sugar-build/sugar-build].&lt;br /&gt;
&lt;br /&gt;
If you find any issue please report them instead of documenting workarounds on this page. The tips get out of date really quickly and unreported bugs are never fixed. The goal here is to always work out of the box for everyone.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82512</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82512"/>
		<updated>2012-08-24T12:57:19Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* gtk_clipboard_set_with_data not introspected */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
It seems like functions with multiple callbacks are still unsupported in pygi. I opened https://bugzilla.gnome.org/show_bug.cgi?id=682604 but unless someone suggest a way to not break API perhaps we should just add our own sugar_clipboard_set_data using closures for now --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have a wrapper for this in sugar-toolkit-gtk3 --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
Maybe add to gdkwrapper in sugar-toolkit-gtk3? --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Sergey V. Udaltsov &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82446</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82446"/>
		<updated>2012-08-23T06:47:59Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* gtk_clipboard_set_with_data not introspected */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
It seems like functions with multiple callbacks are still unsupported in pygi --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have a wrapper for this in sugar-toolkit-gtk3 --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
Maybe add to gdkwrapper in sugar-toolkit-gtk3? --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Sergey V. Udaltsov &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82445</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82445"/>
		<updated>2012-08-23T06:44:02Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* gdk_property_get */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have a wrapper for this in sugar-toolkit-gtk3 --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
Maybe add to gdkwrapper in sugar-toolkit-gtk3? --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Sergey V. Udaltsov &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82444</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82444"/>
		<updated>2012-08-23T06:43:17Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* gdk_property_change */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have a wrapper for this in sugar-toolkit-gtk3 --dnarvaez&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Sergey V. Udaltsov &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82443</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82443"/>
		<updated>2012-08-23T05:49:37Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Sergey V. Udaltsov &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82442</id>
		<title>Features/GTK3/Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82442"/>
		<updated>2012-08-23T05:43:57Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* Custom tree model for journal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the hippo removal. The main issues were identified by Daniel Drake some months ago and fortunately most of them are fixed at this point.&lt;br /&gt;
&lt;br /&gt;
Daniel Narvaez set up a sugar-build branch to make the port. To test:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port.git&lt;br /&gt;
&lt;br /&gt;
That is sugar-build with this sugar components branched:&lt;br /&gt;
&lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port  &lt;br /&gt;
 http://git.sugarlabs.org/~manuq/sugar-toolkit-gtk3/manuqs-sugar-toolkit-gtk3&lt;br /&gt;
&lt;br /&gt;
==Open==&lt;br /&gt;
&lt;br /&gt;
=== Custom tree model for journal ===&lt;br /&gt;
&lt;br /&gt;
Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html [https://bugzilla.gnome.org/show_bug.cgi?id=680812 this bug] might be related see 8f31e85db1392eb7222593fc0d05144c2bca06a3 in pygobject.&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it.&lt;br /&gt;
&lt;br /&gt;
Current patch: http://dev.laptop.org/~manuq/journal_gtk3-2.patch&lt;br /&gt;
&lt;br /&gt;
Previous patch that includes the switch to new toolbars: http://dev.laptop.org/~manuq/journal_gtk3.patch .&lt;br /&gt;
&lt;br /&gt;
=== Xkl.ConfigRec does not have set_model() method ===&lt;br /&gt;
This should be called in the setup keyboard at the startup. setup_keyboard_cb in sugar/bin/sugar-session .  Reported in pygobject as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
Seems that libxklavier needs a setter.  Reported to libxklavier as https://bugzilla.freedesktop.org/show_bug.cgi?id=53547&lt;br /&gt;
&lt;br /&gt;
===key grabber===&lt;br /&gt;
- grab_keys needs to be introspectable, [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039190.html patch]&lt;br /&gt;
- is_modifier does not allow to pass no mask anymore, has to be something like &amp;quot;is_modifier(keycode, mask=Gdk.ModifierType.MOD1_MASK)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===gtk_clipboard_set_with_data not introspected===&lt;br /&gt;
In the [http://git.gnome.org/browse/gtk+/tree/gtk/gtkclipboard.c#n655 annotations] it is marked as non-introspectable.&lt;br /&gt;
&lt;br /&gt;
http://www.daa.com.au/pipermail/pygtk/2011-July/019940.html&lt;br /&gt;
&lt;br /&gt;
- check with pygobject devs if the above statement is still the case&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_change ===&lt;br /&gt;
Is [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11332 marked as non-introspectable] in the annotations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gi.repository import Gdk&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; Gdk.property_change&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 266, in __getattr__&lt;br /&gt;
    return getattr(self._introspection_module, name)&lt;br /&gt;
  File &amp;quot;/home/erikos/sources/manuqs-shell-port/install/lib/python2.7/site-packages/gi/module.py&amp;quot;, line 115, in __getattr__&lt;br /&gt;
    self.__name__, name))&lt;br /&gt;
AttributeError: &#039;gi.repository.Gdk&#039; object has no attribute &#039;property_change&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gdk_property_get ===&lt;br /&gt;
The [http://git.gnome.org/browse/gtk+/tree/gdk/gdkwindow.c#n11261 gdk_property_get annotations] mark it as introspectable.&lt;br /&gt;
&lt;br /&gt;
Not working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def _property_get_trapped(window, prop, prop_type):&lt;br /&gt;
    Gdk.error_trap_push()&lt;br /&gt;
&lt;br /&gt;
    prop_atom = Gdk.Atom.intern(prop, False)&lt;br /&gt;
    type_atom = Gdk.Atom.intern(prop_type, False)&lt;br /&gt;
&lt;br /&gt;
    logging.warning(&amp;quot;get prop %s %s %s&amp;quot;, window, prop_atom, type_atom)&lt;br /&gt;
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 TypeError: Could not caller allocate argument 6 of callable property_get&lt;br /&gt;
&lt;br /&gt;
=== Port hardcoded styles to the CSS stylesheet ===&lt;br /&gt;
&lt;br /&gt;
For example in sugar/extensions/cpsection/network/view.py we have things like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        label_server = gtk.Label(_(&#039;Server:&#039;))&lt;br /&gt;
        label_server.set_alignment(1, 0.5)&lt;br /&gt;
        label_server.modify_fg(gtk.STATE_NORMAL,&lt;br /&gt;
                               style.COLOR_SELECTION_GREY.get_gdk_color())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Palettes can&#039;t include menu and widgets at the same time ===&lt;br /&gt;
&lt;br /&gt;
We can use anything like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class SugarMenuItem(gtk.EventBox):&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;clicked&#039;: (gobject.SIGNAL_RUN_FIRST, None, [])&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, icon_name, label_text):&lt;br /&gt;
        gtk.EventBox.__init__(self)&lt;br /&gt;
        self._sensitive = True&lt;br /&gt;
        vbox = gtk.VBox()&lt;br /&gt;
        hbox = gtk.HBox()&lt;br /&gt;
        vbox.set_border_width(style.DEFAULT_PADDING)&lt;br /&gt;
        self.icon = Icon()&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
        hbox.pack_start(self.icon, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label = gtk.Label()&lt;br /&gt;
        self.label.set_use_markup(True)&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
        align.add(self.label)&lt;br /&gt;
        hbox.pack_start(align, expand=True, fill=True,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        vbox.pack_start(hbox, expand=False, fill=False,&lt;br /&gt;
                padding=style.DEFAULT_PADDING)&lt;br /&gt;
        self.add(vbox)&lt;br /&gt;
        self.id_bt_release_cb = self.connect(&#039;button-release-event&#039;,&lt;br /&gt;
                self.__button_release_cb)&lt;br /&gt;
        self.id_enter_notify_cb = self.connect(&#039;enter-notify-event&#039;,&lt;br /&gt;
                self.__enter_notify_cb)&lt;br /&gt;
        self.id_leave_notify_cb = self.connect(&#039;leave-notify-event&#039;,&lt;br /&gt;
                self.__leave_notify_cb)&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
        self.show_all()&lt;br /&gt;
        self.set_above_child(True)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_cb(self, widget, event):&lt;br /&gt;
        self.emit(&#039;clicked&#039;)&lt;br /&gt;
&lt;br /&gt;
    def __enter_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL,&lt;br /&gt;
                style.COLOR_BUTTON_GREY.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def __leave_notify_cb(self, widget, event):&lt;br /&gt;
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
    def set_icon(self, icon_name):&lt;br /&gt;
        self.icon.props.icon_name = icon_name&lt;br /&gt;
&lt;br /&gt;
    def set_label(self, label_text):&lt;br /&gt;
        text = &#039;&amp;lt;span foreground=&amp;quot;%s&amp;quot;&amp;gt;&#039; % style.COLOR_WHITE.get_html() + \&lt;br /&gt;
                    label_text + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        self.label.set_markup(text)&lt;br /&gt;
&lt;br /&gt;
    def set_sensitive(self, sensitive):&lt;br /&gt;
        if self._sensitive == sensitive:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        self._sensitive = sensitive&lt;br /&gt;
        if sensitive:&lt;br /&gt;
            self.handler_unblock(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_unblock(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_unblock(self.id_leave_notify_cb)&lt;br /&gt;
        else:&lt;br /&gt;
            self.handler_block(self.id_bt_release_cb)&lt;br /&gt;
            self.handler_block(self.id_enter_notify_cb)&lt;br /&gt;
            self.handler_block(self.id_leave_notify_cb)&lt;br /&gt;
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add them to a vbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # TODO: private!!!&lt;br /&gt;
        self._content.set_border_width(0)&lt;br /&gt;
 &lt;br /&gt;
        self._play_pause_button = SugarMenuItem(&#039;player_play&#039;,&lt;br /&gt;
                _(&#039;Say selected text&#039;))&lt;br /&gt;
        self._play_pause_button.connect(&#039;clicked&#039;, self.__play_clicked_cb)&lt;br /&gt;
        vbox_menu.add(self._play_pause_button)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,&lt;br /&gt;
but that is a private member. Then we need to look if we add a method to set the it, &lt;br /&gt;
or change the api to make the first container (where is the menu today) useful for other type of widgets.&lt;br /&gt;
&lt;br /&gt;
In Manuq branch, palettes are blinking when mouse is over the icon.&lt;br /&gt;
&lt;br /&gt;
AssertionError:&lt;br /&gt;
&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
    File &amp;quot;/home/manuq/prog/manuqs-shell-port/install/lib/python2.7/site-packages/sugar3/graphics/palette.py&amp;quot;, line&lt;br /&gt;
      or isinstance(self._widget, _PaletteWindowWidget)&lt;br /&gt;
  AssertionError&lt;br /&gt;
&lt;br /&gt;
=== A handful of NMClient issues ===&lt;br /&gt;
&lt;br /&gt;
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.&lt;br /&gt;
&lt;br /&gt;
===Drag-and-drop in home view, random layout===&lt;br /&gt;
Partially done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/204899e21435d12114747127feee2122e6c3efe3 commit 204899e2].  Pending issue: the activity icon is not being displayed while dragging.&lt;br /&gt;
&lt;br /&gt;
  (sugar-session:13647): Gtk-CRITICAL **: gtk_drag_source_set_icon_pixbuf: assertion `site != NULL&#039; failed&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activity launch icon in the frame does not stop fading in and out, like loading&lt;br /&gt;
* widgets like icons and texts have grey background instead of black (toolbar-grey) - this is because of a change in gtk (seen in Browse too)&lt;br /&gt;
&lt;br /&gt;
==Done==&lt;br /&gt;
&lt;br /&gt;
===Owner icon allocation issue===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Schampijer &amp;lt;/span&amp;gt; in commit cd29d065.&lt;br /&gt;
&lt;br /&gt;
=== Port the gstreamer code to pygi ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Daniel Narvaez &amp;lt;/span&amp;gt; in commit f74489e6 .&lt;br /&gt;
&lt;br /&gt;
=== Remove resize grips ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resize grip has been moved from GtkStatusbar to GtkWindow.  See &amp;quot;Resize grip&amp;quot; section of the [http://developer.gnome.org/gtk3/3.1/ch25s02.html GTK+2 &amp;gt; GTK+3 porting guide].&lt;br /&gt;
&lt;br /&gt;
Done in [http://git.sugarlabs.org/sugar/manuqs-erikos-shell-port/commit/3efb87f349f56e4167010ac020ad31521e2533a2 commit 3efb87f3].&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported&lt;br /&gt;
&lt;br /&gt;
=== gconf_client_get_list not introspectable ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Workaround from: Daniel Drake &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://git.gnome.org/browse/gconf/tree/gconf/gconf-client.c#n1838 annotations] mark it as non-introspectale.&lt;br /&gt;
&lt;br /&gt;
opened an upstream bug: https://bugzilla.gnome.org/show_bug.cgi?id=681433&lt;br /&gt;
&lt;br /&gt;
similar boxed types fix: https://bugzilla.gnome.org/show_bug.cgi?id=613247&lt;br /&gt;
&lt;br /&gt;
The keyboard is not set up yet because of this as is being called in setup_keyboard_cb in sugar/bin/sugar-session .&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/74c77ed68912ec9253f509ba25ff05cebb4fba97&lt;br /&gt;
* http://git.sugarlabs.org/~manuq/sugar/manuqs-erikos-shell-port/commit/be519897a1cbd759e4feca640a95317804bedbc0&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Simon Feltman, Manuel Quiñones &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can&#039;t inherit GtkTreeModelSort and pass a model to the parent constructor.  Filed as: https://bugzilla.gnome.org/show_bug.cgi?id=681477&lt;br /&gt;
&lt;br /&gt;
Working testcase for pygtk: http://dev.laptop.org/~manuq/test_listmodel2_gtk2.py&lt;br /&gt;
&lt;br /&gt;
Testcase that shows the issue in PyGi: http://dev.laptop.org/~manuq/test_listmodel2_gtk3.py&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* can be made to work by passing keyword arguments e.g. &amp;quot;Gtk.TreeModelSort.__init__(self, model=self._model_filter)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== can&#039;t call gdk_window_set_user_data() ===&lt;br /&gt;
In the latest implementation we don&#039;t use set_user_data anymore AFAIK.&lt;br /&gt;
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html&lt;br /&gt;
&lt;br /&gt;
=== do_forall not working in pygobject ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Tomeu Vizoso, John Palmieri, Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=663052 gobject-introspection was merged 2012-07-13&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=644926 pygobject missing header file in patch. was merged 2012-03-27&lt;br /&gt;
* http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb fix which landed in GTK+&lt;br /&gt;
&lt;br /&gt;
=== cant call gdkwindow.raise() ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Martin Pitt &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=676746 fix landed in pygobject&lt;br /&gt;
* use gtk_window.get_window().raise_ instead&lt;br /&gt;
&lt;br /&gt;
=== can not listen to signals in subclassed subclasses ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Carlos Garnacho &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActivityIcon.do_draw never called, see http://bugs.sugarlabs.org/ticket/3386&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* https://bugzilla.gnome.org/show_bug.cgi?id=672864 fix landed in pygobject&lt;br /&gt;
&lt;br /&gt;
=== set_data/get_data not available anymore===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix in toolkit-gtk3 from: Simon Schampijer &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More background info in: https://bugzilla.gnome.org/show_bug.cgi?id=641944&lt;br /&gt;
&lt;br /&gt;
Needs:&lt;br /&gt;
* http://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3/commit/af320f91f800ed9a46e84f12e9aa1ae3b95493b4 we can use python attributes here&lt;br /&gt;
&lt;br /&gt;
=== libxklavier ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.fedorahosted.org/cgit/anaconda.git/tree/pyanaconda/keyboard.py This is] how [http://fedoraproject.org/wiki/Anaconda Anaconda] is using [http://cgit.freedesktop.org/libxklavier/libxklaview libxklavier] in Python (found when coming across [https://bugzilla.redhat.com/show_bug.cgi?id=772664 this bug], Colin [https://mail.gnome.org/archives/commits-list/2012-May/msg00247.html enabled introspection for libxklavier]).&lt;br /&gt;
&lt;br /&gt;
You have to use Xkl.Engine.get_instance(display) [https://bugzilla.gnome.org/show_bug.cgi?id=680202 instead of the constructor]. Manuq made sure the API we use is there.  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py This testcase] was useful.&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Humitos/SugarToolkitDocs&amp;diff=80533</id>
		<title>User talk:Humitos/SugarToolkitDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Humitos/SugarToolkitDocs&amp;diff=80533"/>
		<updated>2012-07-05T12:07:24Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: Created page with &amp;quot;Just a couple of suggestions. Make it a Makefile target and use a better theme like sphinxdoc :) --dnarvaez&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just a couple of suggestions. Make it a Makefile target and use a better theme like sphinxdoc :) --dnarvaez&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=79715</id>
		<title>Machine/bender</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=79715"/>
		<updated>2012-06-22T08:41:02Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* Hosted VMs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* bender.codewiz.org&lt;br /&gt;
* bender.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* Crappy minitower&lt;br /&gt;
* Core 2 Duo 1.8GHz&lt;br /&gt;
* 6GB RAM&lt;br /&gt;
* 2x1TB RAID1, 2x320GB RAID1&lt;br /&gt;
* Fedora 13 x86_64&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
Hosted by [http://www.develer.com/ Develer]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], _bernie on #sugar Freenode&lt;br /&gt;
* [[User:dnarvaez|Daniel Narvaez]], dnarvaez on #sugar Freenode&lt;br /&gt;
* [[User:sascha_silbe|sascha_silbe]] (silbe on #sugar Freenode)&lt;br /&gt;
* Stefano Fedrigo &amp;lt;aleph AT develer.com&amp;gt;, sometimes _aleph on Freenode (local access, office hours CET)&lt;br /&gt;
* Develer Infrastructure &amp;lt;it AT lists.develer.com&amp;gt; (local access, office hours CET)&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
&lt;br /&gt;
Develer has a 10mbit up/downlink and asks to limit bandwidth usage from hosted services.&lt;br /&gt;
There is a traffic shaper, but it may have trouble shaping 6to4 traffic.&lt;br /&gt;
&lt;br /&gt;
Bender is globally accessible through public, static IPv4 as well as the 6to4 subnet associated&lt;br /&gt;
to it: 2002:5395:9edc::/48.&lt;br /&gt;
&lt;br /&gt;
The tun6to4 interface on bender is assigned the globally visible address 2002:5395:9edc::1.&lt;br /&gt;
The subnet 2002:5395:9edc:1::/64 of our 6to4 net is assigned to the bridge virbr0, which binds together&lt;br /&gt;
several virtual interfaces connected to the libvirt guests. With this network setup, IPv6 routing works&lt;br /&gt;
naturally, without the need to add any special routing rules on bender.&lt;br /&gt;
&lt;br /&gt;
The virbr0 bridge is created by libvirt on startup with &amp;lt;code&amp;gt;/etc/libvirt/qemu/networks/default.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
Libvirt does not yet support assigning IPv6 addresses to bridges, therefore we do this in &amp;lt;code&amp;gt;/etc/rc.local&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ip addr add 2002:5395:9edc:1::1/64 dev virbr0&lt;br /&gt;
&lt;br /&gt;
To automatically configure network and on the gursts, Bender also runs radvd, the IPv6 Routing Advertisement&lt;br /&gt;
daemon. The contents of &amp;lt;code&amp;gt;/etc/radvd.conf&amp;lt;/code&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
 interface virbr0&lt;br /&gt;
 {&lt;br /&gt;
        IgnoreIfMissing on;&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 30;&lt;br /&gt;
        MaxRtrAdvInterval 100;&lt;br /&gt;
        AdvDefaultPreference low;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
        &lt;br /&gt;
        #bernie: subnet 1 of our /48 6to4 on Develer Consiagnet&lt;br /&gt;
        prefix 2002:5395:9edc:1::1/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
        };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Guests simply need to be configured to accept IPv6 routing advertisements. The DNS must be assigned manually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hosted VMs ==&lt;br /&gt;
All buildslaves currently run off bender as KVM virtual machines managed by libvirtd.&lt;br /&gt;
&lt;br /&gt;
The machines are not globally addressable on IPv4 and are only reachable by IPv6.  The&lt;br /&gt;
IPv6 address is dynamically configured by radvd to a subnet of the public 6to4 net.&lt;br /&gt;
&lt;br /&gt;
All the VMs are in /srv/images. See the README in the same directory.&lt;br /&gt;
&lt;br /&gt;
They have been created with&lt;br /&gt;
&lt;br /&gt;
 virt-install --name buildslave-name --ram 512 \&lt;br /&gt;
 --disk path=/srv/images/buildslave-name.img,size=10&lt;br /&gt;
 --network network:default \&lt;br /&gt;
 --location &amp;quot;mirror-http-address&amp;quot; \&lt;br /&gt;
 --extra-args=&amp;quot;console=tty0 console=ttyS0,115200n8 serial&amp;quot;&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=79714</id>
		<title>Machine/bender</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=79714"/>
		<updated>2012-06-22T08:30:12Z</updated>

		<summary type="html">&lt;p&gt;Dnarvaez: /* Admins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* bender.codewiz.org&lt;br /&gt;
* bender.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* Crappy minitower&lt;br /&gt;
* Core 2 Duo 1.8GHz&lt;br /&gt;
* 6GB RAM&lt;br /&gt;
* 2x1TB RAID1, 2x320GB RAID1&lt;br /&gt;
* Fedora 13 x86_64&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
Hosted by [http://www.develer.com/ Develer]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], _bernie on #sugar Freenode&lt;br /&gt;
* [[User:dnarvaez|Daniel Narvaez]], dnarvaez on #sugar Freenode&lt;br /&gt;
* [[User:sascha_silbe|sascha_silbe]] (silbe on #sugar Freenode)&lt;br /&gt;
* Stefano Fedrigo &amp;lt;aleph AT develer.com&amp;gt;, sometimes _aleph on Freenode (local access, office hours CET)&lt;br /&gt;
* Develer Infrastructure &amp;lt;it AT lists.develer.com&amp;gt; (local access, office hours CET)&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
&lt;br /&gt;
Develer has a 10mbit up/downlink and asks to limit bandwidth usage from hosted services.&lt;br /&gt;
There is a traffic shaper, but it may have trouble shaping 6to4 traffic.&lt;br /&gt;
&lt;br /&gt;
Bender is globally accessible through public, static IPv4 as well as the 6to4 subnet associated&lt;br /&gt;
to it: 2002:5395:9edc::/48.&lt;br /&gt;
&lt;br /&gt;
The tun6to4 interface on bender is assigned the globally visible address 2002:5395:9edc::1.&lt;br /&gt;
The subnet 2002:5395:9edc:1::/64 of our 6to4 net is assigned to the bridge virbr0, which binds together&lt;br /&gt;
several virtual interfaces connected to the libvirt guests. With this network setup, IPv6 routing works&lt;br /&gt;
naturally, without the need to add any special routing rules on bender.&lt;br /&gt;
&lt;br /&gt;
The virbr0 bridge is created by libvirt on startup with &amp;lt;code&amp;gt;/etc/libvirt/qemu/networks/default.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
Libvirt does not yet support assigning IPv6 addresses to bridges, therefore we do this in &amp;lt;code&amp;gt;/etc/rc.local&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ip addr add 2002:5395:9edc:1::1/64 dev virbr0&lt;br /&gt;
&lt;br /&gt;
To automatically configure network and on the gursts, Bender also runs radvd, the IPv6 Routing Advertisement&lt;br /&gt;
daemon. The contents of &amp;lt;code&amp;gt;/etc/radvd.conf&amp;lt;/code&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
 interface virbr0&lt;br /&gt;
 {&lt;br /&gt;
        IgnoreIfMissing on;&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 30;&lt;br /&gt;
        MaxRtrAdvInterval 100;&lt;br /&gt;
        AdvDefaultPreference low;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
        &lt;br /&gt;
        #bernie: subnet 1 of our /48 6to4 on Develer Consiagnet&lt;br /&gt;
        prefix 2002:5395:9edc:1::1/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
        };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Guests simply need to be configured to accept IPv6 routing advertisements. The DNS must be assigned manually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hosted VMs ==&lt;br /&gt;
All buildslaves currently run off bender as KVM virtual machines managed by libvirtd.&lt;br /&gt;
&lt;br /&gt;
The machines are not globally addressable on IPv4 and are only reachable by IPv6.  The&lt;br /&gt;
IPv6 address is dynamically configured by radvd to a subnet of the public 6to4 net.&lt;br /&gt;
Please remember to update the sugarlanbs.org zone when adding new build slaves.&lt;br /&gt;
{{Special:PrefixIndex/{{PAGENAME}}/}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Machine]]&lt;/div&gt;</summary>
		<author><name>Dnarvaez</name></author>
	</entry>
</feed>