<?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=Manuq</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=Manuq"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Manuq"/>
	<updated>2026-05-30T11:57:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Optimize_TreeViews&amp;diff=91575</id>
		<title>Features/Optimize TreeViews</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Optimize_TreeViews&amp;diff=91575"/>
		<updated>2014-02-24T22:49:13Z</updated>

		<summary type="html">&lt;p&gt;Manuq: Created page with &amp;quot;&amp;lt;noinclude&amp;gt; Category:Feature Page Incomplete . &amp;lt;/noinclude&amp;gt;  == Summary == Gonzalo Odiard and Manuel Quiñones did a hackaton to find out why the list...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature Page Incomplete]]&lt;br /&gt;
[[Category:Feature|.]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Gonzalo Odiard and Manuel Quiñones did a hackaton to find out why the&lt;br /&gt;
lists that contain icons are so slow.  The affected views in Sugar are&lt;br /&gt;
the Journal list and the activities list.  This feature is about improving the TreeView performance.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
* Name: [[User:Godiard| Gonzalo Odiard]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Feb 24, 2014&lt;br /&gt;
* Percentage of completion: 60%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
* The source of the performance issues is Sugar CellRendererIcon, a treeview without it works ok. https://github.com/sugarlabs/sugar-toolkit-gtk3/blob/master/src/sugar3/graphics/icon.py#L781&lt;br /&gt;
&lt;br /&gt;
* Sugar CellRendererIcon has too much logic inside.  It should only handle how to render itself.&lt;br /&gt;
&lt;br /&gt;
* Sugar CellRendererIcon is connected to many signals.  Just detaching them while scrolling provides a performance boost.&lt;br /&gt;
&lt;br /&gt;
* Sugar CellRendererIcon could benefit from caching values instead of calculating them on each render.&lt;br /&gt;
&lt;br /&gt;
We couldn&#039;t find what&#039;s wrong with the Journal.  We guess there is a DBus blocking call, but we could&#039;t confirm that.&lt;br /&gt;
&lt;br /&gt;
=== GTK+ concepts ===&lt;br /&gt;
&lt;br /&gt;
* GtkTreeView — A widget for displaying both trees and lists https://developer.gnome.org/gtk3/stable/GtkTreeView&lt;br /&gt;
&lt;br /&gt;
* GtkTreeViewColumn — A visible column in a GtkTreeView widget https://developer.gnome.org/gtk3/stable/GtkTreeViewColumn.html&lt;br /&gt;
&lt;br /&gt;
* GtkCellRenderer — An object for rendering a single cell https://developer.gnome.org/gtk3/stable/GtkCellRenderer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
Performance!&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
Affects Shell and Toolkit.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
We should not regress treeviews.  Pay special attention to Journal list and activities list. &lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
We did a test program that has a list (treeview) with many rows.  Each row has a cellrenderer icon.  The program automatically starts scrolling until the end of the list is reached.  Then we can get profiling information using Python cProfile http://docs.python.org/2/library/profile.html .  We ran the test like this inside a Sugar shell:&lt;br /&gt;
&lt;br /&gt;
    python -m cProfile test_treeview.py &amp;gt; profile.txt&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Users should notice a performance boost.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
No deps.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
These optimizations can come in small steps, so there is no need for a contingency plan.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
Your comments are very welcome. Please discuss through the mailing list.&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91293</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91293"/>
		<updated>2014-01-31T17:02:47Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Jan 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Demo in a branch of Hello World:&lt;br /&gt;
https://github.com/manuq/hello-world/tree/start-activity&lt;br /&gt;
&lt;br /&gt;
Current API:&lt;br /&gt;
https://github.com/manuq/hello-world/blob/start-activity/activity.py#L124&lt;br /&gt;
&lt;br /&gt;
Changes in sugar&lt;br /&gt;
* branch: https://github.com/manuq/sugar/tree/start-activity&lt;br /&gt;
* comparison: https://github.com/manuq/sugar/compare/start-activity?expand=1&lt;br /&gt;
* patch: https://github.com/manuq/sugar/compare/start-activity.patch&lt;br /&gt;
&lt;br /&gt;
Changes in sugar-toolkit-gtk3&lt;br /&gt;
* branch: https://github.com/manuq/sugar-toolkit-gtk3/tree/start-activity&lt;br /&gt;
* comparison: https://github.com/manuq/sugar-toolkit-gtk3/compare/start-activity?expand=1&lt;br /&gt;
* patch: https://github.com/manuq/sugar-toolkit-gtk3/compare/start-activity.patch&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components like Android apps.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
* Android Intents use a URI for data, usually a content provider like &amp;quot;content://..&amp;quot;.  The current way to reference an object in Sugar is by its ID.  Currently, we can&#039;t pass arbitrary data to an activity.&lt;br /&gt;
&lt;br /&gt;
* In Android, the component to be called can be implied from the data.  We do the same.  Our components are the Sugar bundles.&lt;br /&gt;
&lt;br /&gt;
* In Android, extra data can be passed.  We can&#039;t do that in current activities.&lt;br /&gt;
&lt;br /&gt;
* In Android, the mime type can be explicit or implied from the data.  We do the same.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91292</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91292"/>
		<updated>2014-01-31T16:45:56Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Jan 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Links to GitHub branches here.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components like Android apps.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
* Android Intents use a URI for data, usually a content provider like &amp;quot;content://..&amp;quot;.  The current way to reference an object in Sugar is by its ID.  Currently, we can&#039;t pass arbitrary data to an activity.&lt;br /&gt;
&lt;br /&gt;
* In Android, the component to be called can be implied from the data.  We do the same.  Our components are the Sugar bundles.&lt;br /&gt;
&lt;br /&gt;
* In Android, extra data can be passed.  We can&#039;t do that in current activities.&lt;br /&gt;
&lt;br /&gt;
* In Android, the mime type can be explicit or implied from the data.  We do the same.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91291</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91291"/>
		<updated>2014-01-31T16:39:41Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Jan 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Links to GitHub branches here.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components like Android apps.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
* Android Intents use a URI for data, usually a content provider like &amp;quot;content://..&amp;quot;.  The current way to reference an object in Sugar is by its ID.  Currently, we can&#039;t pass arbitrary data to an activity.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=0.102/Feature_List&amp;diff=91290</id>
		<title>0.102/Feature List</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=0.102/Feature_List&amp;diff=91290"/>
		<updated>2014-01-31T16:22:20Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Proposed Features for 0.102 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:FeatureList]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Proposed Features for 0.102 ==&lt;br /&gt;
These features have been proposed to the Release Manager for the Sugar 0.102 Release.&lt;br /&gt;
{| border=1 cellpadding=3 style=&amp;quot;border: 1px solid white; border-collapse: collapse; background: #e3e4e5;&amp;quot;&lt;br /&gt;
 |-style=&amp;quot;background:#787878; color: white;&amp;quot;&lt;br /&gt;
! Owner !! Complete !!Name !!Summary !!Updated&lt;br /&gt;
|-&lt;br /&gt;
| Walter || 100% || [[Features/Launch_Limits|Launch Limits]] || Provide limits to the number of open activities and number of open instances of an activity. || 4 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Walter || 100% || [[Features/AboutMe|Age and Gender]] || Provide a mechanism for users to specify age and gender. || 4 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Walter || 100% || [[Features/UpdateFavorites|Update Favorites]] || Add dbus service to update favorites.. || 4 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Walter || 0% || [[Features/Join Limits|Join Limits]] || Honor limits to the number of buddies who can join a shared activity. || 4 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Kalpa || 100% || [[Features/Activity Help|Activity Help]] || Display the help for the activity in the activity itself.  || 7 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Gonzalo || 100% || [[Features/Add Information In About Computer|Add Information in About Computer]] || Add information needed by deployments in About this computer.  || 11 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| Gonzalo || 50% || [[Features/Backup_and_Restore|Backup and Restore]] || Allow do backup/restore of the Journal using a pen drive.  || 11 Nov 2013&lt;br /&gt;
|-&lt;br /&gt;
| FGrose || 100% || [[Features/Network control panel|Network control panel]] || Rework Wireless control panel to respect non-wireless connections  || 28 Jan 2014&lt;br /&gt;
|-&lt;br /&gt;
| manuq || 99% || [[Features/Start_activity_from_another_activity|Start activity from another activity]] || Provides a new way of interoperability between activities. || Jan 31 2014&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91289</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91289"/>
		<updated>2014-01-31T15:51:38Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Current status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Jan 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Links to GitHub branches here.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91288</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91288"/>
		<updated>2014-01-31T15:12:38Z</updated>

		<summary type="html">&lt;p&gt;Manuq: fix release target&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.102&lt;br /&gt;
* Last updated: Feb 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Links to GitHub branches here.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91287</id>
		<title>Features/Start activity from another activity</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Start_activity_from_another_activity&amp;diff=91287"/>
		<updated>2014-01-31T14:42:08Z</updated>

		<summary type="html">&lt;p&gt;Manuq: Created page with &amp;quot;&amp;lt;noinclude&amp;gt; Category:Feature &amp;lt;/noinclude&amp;gt;  == Summary ==  This feature provides a new way of interoperability between activities, the current ones being the Journal and th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Feature]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This feature provides a new way of interoperability between&lt;br /&gt;
activities, the current ones being the Journal and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
Activities are provided with a new API to call other activities.  This&lt;br /&gt;
API allows the expression of phrases such as &amp;quot;read this book&amp;quot; or &amp;quot;edit&lt;br /&gt;
this code with that editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is important for activities that handle sets of objects.  For&lt;br /&gt;
example a gallery of images, a content catalog.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Manuq| Manuel Quiñones]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.100&lt;br /&gt;
* Last updated: Feb 31, 2014&lt;br /&gt;
* Percentage of completion: 99%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
One of Sugar key principles is simplicity.  Activities are meant to be&lt;br /&gt;
simple, and users can make interesting things happen when they&lt;br /&gt;
interoperate with them.  Currently, they do so by using the Journal&lt;br /&gt;
and the Clipboard.&lt;br /&gt;
&lt;br /&gt;
However, there are cases where you want to start an activity from&lt;br /&gt;
inside another, thus skipping the step through the Journal.&lt;br /&gt;
&lt;br /&gt;
This feature provides a third way of interoperability between&lt;br /&gt;
activities.&lt;br /&gt;
&lt;br /&gt;
For example, an activity whose purpose is to download content, would&lt;br /&gt;
like to display the content right away.&lt;br /&gt;
&lt;br /&gt;
The following considerations are made.&lt;br /&gt;
&lt;br /&gt;
* This solution is based on current activities, ie does not imply a change in activities.  It uses the available information that Sugar has now:&lt;br /&gt;
** the bundle registry&lt;br /&gt;
** the activity declared mime types&lt;br /&gt;
** the metadata in datastore objects&lt;br /&gt;
&lt;br /&gt;
* This solution is for every bundle, not just activities.  This includes content bundles.&lt;br /&gt;
&lt;br /&gt;
* This solution considers Rainbow security.&lt;br /&gt;
&lt;br /&gt;
An activity can start other activity by:&lt;br /&gt;
&lt;br /&gt;
* knowing the activity ID - starts that specific activity&lt;br /&gt;
&lt;br /&gt;
* passing a datastore object - if the activity ID is also passed, starts the object with that specific activity.  Otherwise starts the first activity that can handle the object.&lt;br /&gt;
&lt;br /&gt;
* passing a mime type - if the activity ID is not passed, start the first activity that can handle the mime type.&lt;br /&gt;
&lt;br /&gt;
An error is reported to the user of the API if the request couldn&#039;t be&lt;br /&gt;
accomplished, with a message.  For example &amp;quot;no activity can start this&lt;br /&gt;
object&amp;quot; or &amp;quot;activity with ID XYZ not found&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
The code that starts activities in Sugar currently lives in the&lt;br /&gt;
Journal.  The idea is to move the code to a more general module in&lt;br /&gt;
Sugar, and make the Journal a user of it.  Then, add a DBUS service so&lt;br /&gt;
that the activitie&#039;s toolkit can use the API too.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This will enhace the interoperability of Sugar activities, removing&lt;br /&gt;
the need to pass through the Journal in the cases where it makes sense&lt;br /&gt;
and feels indirect or complicated.  Thus, is an enhacement of the user&lt;br /&gt;
experience.&lt;br /&gt;
&lt;br /&gt;
The lack of this capability made Uruguay deployment (Ceibal) go for a&lt;br /&gt;
custom solution regarding content obtention and consumption.  They&lt;br /&gt;
mixed the capabilities of activities GetBooks, Read and Jukebox into a&lt;br /&gt;
monolithic activity &amp;quot;Biblioteca Segura&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This feature affects only Sugar modules.  Current activities can take&lt;br /&gt;
advantage of the new API provided by this feature.&lt;br /&gt;
&lt;br /&gt;
The Journal is adapted to be a user of this API.  In fact, all the&lt;br /&gt;
code is adapted from the Journal code.&lt;br /&gt;
&lt;br /&gt;
==UI Design==&lt;br /&gt;
&lt;br /&gt;
Video that shows the user experience:&lt;br /&gt;
https://dl.dropboxusercontent.com/u/588753/start.webm&lt;br /&gt;
&lt;br /&gt;
There is no UI in this feature.  Activities that currently have a&lt;br /&gt;
button &amp;quot;Show in Journal&amp;quot; can move to this API and change the button&lt;br /&gt;
label to &amp;quot;Start&amp;quot; or &amp;quot;Display&amp;quot; or something more specific like &amp;quot;Read&lt;br /&gt;
Book&amp;quot; or &amp;quot;Edit Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
Links to GitHub branches here.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
UX enhacement is described in the section above &amp;quot;Benefit to Sugar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
This feature does not depend on the completion of other features.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
Not including.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Previous attempts ===&lt;br /&gt;
&lt;br /&gt;
In 2011 Martin Abente (tch) sent a patch that enhaced sugar-launch&lt;br /&gt;
http://marc.info/?l=olpc-sugar&amp;amp;m=129485435106175&amp;amp;w=2&lt;br /&gt;
&lt;br /&gt;
As discussed in the mailing list, this solution is not appropiate&lt;br /&gt;
because it skips Rainbox security (http://wiki.laptop.org/go/Rainbow)&lt;br /&gt;
in secured systems, and seems odd that the child activity process is&lt;br /&gt;
spawned from the parent activity process.  Sugar &amp;quot;the shell&amp;quot; should&lt;br /&gt;
spawn the activity processes.&lt;br /&gt;
&lt;br /&gt;
=== Android Intents as reference ===&lt;br /&gt;
&lt;br /&gt;
I loosely based this feature in Android Intents:&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
Android has a similar mechanism than the proposed here.  Is much more&lt;br /&gt;
powerful and used system-wide and also internally per application.&lt;br /&gt;
Android apps are made of components, and those components declare&lt;br /&gt;
which actions can perform as intent filters.  Using a data structure&lt;br /&gt;
called Intent, one component can call an action of another component.&lt;br /&gt;
That data stracture holds an abstract description of the action to be&lt;br /&gt;
performed.  Android has an intent resolution mechanism to determine&lt;br /&gt;
the component that matches the intent.&lt;br /&gt;
&lt;br /&gt;
The main similarities and differences are:&lt;br /&gt;
&lt;br /&gt;
* Currently we can only have one action: &amp;quot;Start&amp;quot; that launches an activiy.  Our activities are not made of components.  If that were the case, we could be able to do neat things like &amp;quot;take a photo&amp;quot; from any activity, that would call the correspondent component of Record or other available activity to take a photo from the camera. This is a major change that implies a change in activities, so is out of the scope of this feature.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
To be written.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
&lt;br /&gt;
Your comments are very welcome.  Please discuss through the mailing list.&lt;br /&gt;
&lt;br /&gt;
* First discussion on the mailing list:&lt;br /&gt;
  http://lists.sugarlabs.org/archive/sugar-devel/2014-January/046911.html&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugargame&amp;diff=89800</id>
		<title>Development Team/Sugargame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugargame&amp;diff=89800"/>
		<updated>2013-09-30T15:52:15Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Wrapping a Pygame program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sugargame ==&lt;br /&gt;
&lt;br /&gt;
Sugargame is a Python package which allows [http://www.pygame.org/ PyGame] &lt;br /&gt;
programs to run well under Sugar.&lt;br /&gt;
It is a fork of olcpgames, which is no longer maintained.&lt;br /&gt;
&lt;br /&gt;
Get it from:&lt;br /&gt;
&lt;br /&gt;
http://git.sugarlabs.org/projects/sugargame&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Wraps a Sugar activity around an existing PyGame program with few changes&lt;br /&gt;
* Allows Sugar toolbars and other widgets to be added to the activity UI&lt;br /&gt;
* Provides hooks for saving to and restoring from the Journal&lt;br /&gt;
&lt;br /&gt;
== Using Sugargame ==&lt;br /&gt;
&lt;br /&gt;
See also [[Development Team/Sugargame/Examples]].&lt;br /&gt;
&lt;br /&gt;
==== Wrapping a PyGame program ====&lt;br /&gt;
&lt;br /&gt;
To use Sugargame to Sugarize a PyGame program, set up an activity directory and copy the Sugargame package into it. For an example, see the directory named test, inside the Sugargame repository.  It is in fact a Sugargame activity. &lt;br /&gt;
&lt;br /&gt;
The activity directory should look something like this:&lt;br /&gt;
 &lt;br /&gt;
   activity/            - Activity directory: activity.info, SVG icon, etc.&lt;br /&gt;
   sugargame/           - Sugargame package&lt;br /&gt;
   MyActivity.py        - Activity class&lt;br /&gt;
   mygame.py            - Pygame code&lt;br /&gt;
   setup.py             - Install script&lt;br /&gt;
&lt;br /&gt;
To make the Activity class, start with test/TestActivity.py from the Sugargame distribution.&lt;br /&gt;
&lt;br /&gt;
The activity must create a single PygameCanvas widget:&lt;br /&gt;
 self._canvas = sugargame.canvas.PygameCanvas(self)&lt;br /&gt;
 self.set_canvas(self._canvas)&lt;br /&gt;
&lt;br /&gt;
The activity may assign keyboard focus to the PygameCanvas widget, so that keyboard events generate pygame events:&lt;br /&gt;
 self._canvas.grab_focus()&lt;br /&gt;
&lt;br /&gt;
The activity must call the run_pygame method of the PygameCanvas widget, passing the main loop function of the Pygame program.&lt;br /&gt;
 # Start the game running.&lt;br /&gt;
 self._canvas.run_pygame(self.game.run)&lt;br /&gt;
&lt;br /&gt;
In your Pygame main loop, you must pump the GTK event loop:&lt;br /&gt;
&lt;br /&gt;
   while gtk.events_pending():&lt;br /&gt;
       gtk.main_iteration()&lt;br /&gt;
&lt;br /&gt;
==== Adding Pygame to a PyGTK activity ====&lt;br /&gt;
&lt;br /&gt;
To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call &lt;br /&gt;
run_pygame on it.  &lt;br /&gt;
&lt;br /&gt;
 widget = sugargame.canvas.PygameCanvas(self)&lt;br /&gt;
 vbox.pack_start(widget)&lt;br /&gt;
 &lt;br /&gt;
 widget.run_pygame(self.game.run)&lt;br /&gt;
&lt;br /&gt;
Due to limitations of Pygame and SDL, there can only be one PygameCanvas in the &lt;br /&gt;
entire activity.&lt;br /&gt;
&lt;br /&gt;
The argument to run_pygame is a function structured like a Pygame program.  In the &lt;br /&gt;
main loop, remember to dispatch GTK messages using gtk.main_iteration().&lt;br /&gt;
&lt;br /&gt;
 def main_loop():&lt;br /&gt;
        clock = pygame.time.Clock()&lt;br /&gt;
        screen = pygame.display.get_surface()&lt;br /&gt;
 &lt;br /&gt;
        while self.running:&lt;br /&gt;
            # Pump GTK messages.&lt;br /&gt;
            while gtk.events_pending():&lt;br /&gt;
                gtk.main_iteration()&lt;br /&gt;
 &lt;br /&gt;
            # Pump PyGame messages.&lt;br /&gt;
            for event in pygame.event.get():&lt;br /&gt;
                if event.type == pygame.QUIT:&lt;br /&gt;
                    return&lt;br /&gt;
                elif event.type == pygame.VIDEORESIZE:&lt;br /&gt;
                    pygame.display.set_mode(event.size, pygame.RESIZABLE)&lt;br /&gt;
 &lt;br /&gt;
            # Check the mouse position&lt;br /&gt;
            x, y = pygame.mouse.get_pos()&lt;br /&gt;
  &lt;br /&gt;
            # Clear Display&lt;br /&gt;
            screen.fill((255,255,255)) #255 for white&lt;br /&gt;
 &lt;br /&gt;
            # Draw stuff here&lt;br /&gt;
            .................&lt;br /&gt;
 &lt;br /&gt;
            # Flip Display&lt;br /&gt;
            pygame.display.flip()  &lt;br /&gt;
             &lt;br /&gt;
            # Try to stay at 30 FPS&lt;br /&gt;
            self.clock.tick(30)&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
For help with Sugargame, please email the Sugar Labs development list:&lt;br /&gt;
&lt;br /&gt;
: sugar-devel@lists.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
Sugargame is developed by Wade Brainerd &amp;lt;wadetb@gmail.com&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
It is loosely based on the source code to the olpcgames framework, developed by &lt;br /&gt;
the One Laptop per Child project.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
===v1.1===&lt;br /&gt;
* Fix bugs in event handling.  (Pablo Moleri)&lt;br /&gt;
* Remove reference to gtk.Socket.get_window() method, which is missing in older versions of PyGTK.&lt;br /&gt;
&lt;br /&gt;
===v1.0===&lt;br /&gt;
* Initial version of Sugargame&lt;br /&gt;
&lt;br /&gt;
== Differences between Sugargame and olpcgames ==&lt;br /&gt;
&lt;br /&gt;
The olpcgames framework provides a wrapper around Pygame which attempts to &lt;br /&gt;
allow a Pygame program to run mostly unmodified under Sugar.  To this end, &lt;br /&gt;
the Pygame program is run in a separate thread with its own Pygame message &lt;br /&gt;
loop while the main thread runs the GTK message loop.  Also, olpcgames wraps &lt;br /&gt;
Sugar APIs such as the journal and mesh into a Pygame-like API.&lt;br /&gt;
&lt;br /&gt;
Sugargame takes a simpler approach; it provides a way to embed Pygame into a &lt;br /&gt;
GTK widget.  The Sugar APIs are used to interact with Sugar, the Pygame APIs &lt;br /&gt;
are used for the game.  &lt;br /&gt;
&lt;br /&gt;
Sugargame advantages:&lt;br /&gt;
&lt;br /&gt;
* Simpler code&lt;br /&gt;
* More elegant interface between Pygame and GTK&lt;br /&gt;
* Runs as a single thread: no thread related segfaults&lt;br /&gt;
* Possible to use Sugar widgets with Pygame&lt;br /&gt;
&lt;br /&gt;
Sugargame limitations:&lt;br /&gt;
&lt;br /&gt;
* No support for Pango or SVG sprites (yet)&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugargame&amp;diff=89799</id>
		<title>Development Team/Sugargame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Sugargame&amp;diff=89799"/>
		<updated>2013-09-30T15:47:47Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Sugargame */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sugargame ==&lt;br /&gt;
&lt;br /&gt;
Sugargame is a Python package which allows [http://www.pygame.org/ PyGame] &lt;br /&gt;
programs to run well under Sugar.&lt;br /&gt;
It is a fork of olcpgames, which is no longer maintained.&lt;br /&gt;
&lt;br /&gt;
Get it from:&lt;br /&gt;
&lt;br /&gt;
http://git.sugarlabs.org/projects/sugargame&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Wraps a Sugar activity around an existing PyGame program with few changes&lt;br /&gt;
* Allows Sugar toolbars and other widgets to be added to the activity UI&lt;br /&gt;
* Provides hooks for saving to and restoring from the Journal&lt;br /&gt;
&lt;br /&gt;
== Using Sugargame ==&lt;br /&gt;
&lt;br /&gt;
See also [[Development Team/Sugargame/Examples]].&lt;br /&gt;
&lt;br /&gt;
==== Wrapping a Pygame program ====&lt;br /&gt;
&lt;br /&gt;
To use Sugargame to Sugarize a Pygame program, set up an activity directory and copy the Sugargame package to it.&lt;br /&gt;
&lt;br /&gt;
The activity directory should look something like this:&lt;br /&gt;
 &lt;br /&gt;
   activity/            - Activity directory: activity.info, SVG icon, etc.&lt;br /&gt;
   sugargame/           - Sugargame package&lt;br /&gt;
   MyActivity.py        - Activity class&lt;br /&gt;
   mygame.py            - Pygame code&lt;br /&gt;
   setup.py             - Install script&lt;br /&gt;
&lt;br /&gt;
To make the Activity class, start with test/TestActivity.py from the Sugargame distribution.&lt;br /&gt;
&lt;br /&gt;
The activity must create a single PygameCanvas widget:&lt;br /&gt;
 self._canvas = sugargame.canvas.PygameCanvas(self)&lt;br /&gt;
 self.set_canvas(self._canvas)&lt;br /&gt;
&lt;br /&gt;
The activity may assign keyboard focus to the PygameCanvas widget, so that keyboard events generate pygame events:&lt;br /&gt;
 self._canvas.grab_focus()&lt;br /&gt;
&lt;br /&gt;
The activity must call the run_pygame method of the PygameCanvas widget, passing the main loop function of the Pygame program.&lt;br /&gt;
 # Start the game running.&lt;br /&gt;
 self._canvas.run_pygame(self.game.run)&lt;br /&gt;
&lt;br /&gt;
In your Pygame main loop, you must pump the GTK event loop:&lt;br /&gt;
&lt;br /&gt;
   while gtk.events_pending():&lt;br /&gt;
       gtk.main_iteration()&lt;br /&gt;
&lt;br /&gt;
==== Adding Pygame to a PyGTK activity ====&lt;br /&gt;
&lt;br /&gt;
To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call &lt;br /&gt;
run_pygame on it.  &lt;br /&gt;
&lt;br /&gt;
 widget = sugargame.canvas.PygameCanvas(self)&lt;br /&gt;
 vbox.pack_start(widget)&lt;br /&gt;
 &lt;br /&gt;
 widget.run_pygame(self.game.run)&lt;br /&gt;
&lt;br /&gt;
Due to limitations of Pygame and SDL, there can only be one PygameCanvas in the &lt;br /&gt;
entire activity.&lt;br /&gt;
&lt;br /&gt;
The argument to run_pygame is a function structured like a Pygame program.  In the &lt;br /&gt;
main loop, remember to dispatch GTK messages using gtk.main_iteration().&lt;br /&gt;
&lt;br /&gt;
 def main_loop():&lt;br /&gt;
        clock = pygame.time.Clock()&lt;br /&gt;
        screen = pygame.display.get_surface()&lt;br /&gt;
 &lt;br /&gt;
        while self.running:&lt;br /&gt;
            # Pump GTK messages.&lt;br /&gt;
            while gtk.events_pending():&lt;br /&gt;
                gtk.main_iteration()&lt;br /&gt;
 &lt;br /&gt;
            # Pump PyGame messages.&lt;br /&gt;
            for event in pygame.event.get():&lt;br /&gt;
                if event.type == pygame.QUIT:&lt;br /&gt;
                    return&lt;br /&gt;
                elif event.type == pygame.VIDEORESIZE:&lt;br /&gt;
                    pygame.display.set_mode(event.size, pygame.RESIZABLE)&lt;br /&gt;
 &lt;br /&gt;
            # Check the mouse position&lt;br /&gt;
            x, y = pygame.mouse.get_pos()&lt;br /&gt;
  &lt;br /&gt;
            # Clear Display&lt;br /&gt;
            screen.fill((255,255,255)) #255 for white&lt;br /&gt;
 &lt;br /&gt;
            # Draw stuff here&lt;br /&gt;
            .................&lt;br /&gt;
 &lt;br /&gt;
            # Flip Display&lt;br /&gt;
            pygame.display.flip()  &lt;br /&gt;
             &lt;br /&gt;
            # Try to stay at 30 FPS&lt;br /&gt;
            self.clock.tick(30)&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
For help with Sugargame, please email the Sugar Labs development list:&lt;br /&gt;
&lt;br /&gt;
: sugar-devel@lists.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
Sugargame is developed by Wade Brainerd &amp;lt;wadetb@gmail.com&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
It is loosely based on the source code to the olpcgames framework, developed by &lt;br /&gt;
the One Laptop per Child project.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
===v1.1===&lt;br /&gt;
* Fix bugs in event handling.  (Pablo Moleri)&lt;br /&gt;
* Remove reference to gtk.Socket.get_window() method, which is missing in older versions of PyGTK.&lt;br /&gt;
&lt;br /&gt;
===v1.0===&lt;br /&gt;
* Initial version of Sugargame&lt;br /&gt;
&lt;br /&gt;
== Differences between Sugargame and olpcgames ==&lt;br /&gt;
&lt;br /&gt;
The olpcgames framework provides a wrapper around Pygame which attempts to &lt;br /&gt;
allow a Pygame program to run mostly unmodified under Sugar.  To this end, &lt;br /&gt;
the Pygame program is run in a separate thread with its own Pygame message &lt;br /&gt;
loop while the main thread runs the GTK message loop.  Also, olpcgames wraps &lt;br /&gt;
Sugar APIs such as the journal and mesh into a Pygame-like API.&lt;br /&gt;
&lt;br /&gt;
Sugargame takes a simpler approach; it provides a way to embed Pygame into a &lt;br /&gt;
GTK widget.  The Sugar APIs are used to interact with Sugar, the Pygame APIs &lt;br /&gt;
are used for the game.  &lt;br /&gt;
&lt;br /&gt;
Sugargame advantages:&lt;br /&gt;
&lt;br /&gt;
* Simpler code&lt;br /&gt;
* More elegant interface between Pygame and GTK&lt;br /&gt;
* Runs as a single thread: no thread related segfaults&lt;br /&gt;
* Possible to use Sugar widgets with Pygame&lt;br /&gt;
&lt;br /&gt;
Sugargame limitations:&lt;br /&gt;
&lt;br /&gt;
* No support for Pango or SVG sprites (yet)&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Release&amp;diff=85269</id>
		<title>Development Team/Release</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Release&amp;diff=85269"/>
		<updated>2013-01-07T17:00:45Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Branching */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Development Team|roadmap_link={{Upcoming Stable Release}}/Roadmap}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Goals and modules proposal ==&lt;br /&gt;
&lt;br /&gt;
At the beginning of each release [[:Category:Platform Cycle|cycle]], maintainers will work on a set of goals, document them and assign owners. See the upcoming stable release, [[{{Upcoming Stable Release}}/Roadmap]]. (These goals typically involve major interventions or the addition of new components, e.g., someone develops a speech engine specially for his mother tongue and wants it in Sugar. Hence, the process described below is primarily for module maintainers. If you are a developer with a feature or bug fix, you may want to refer to the [[Features/Policy|new feature process]].)&lt;br /&gt;
&lt;br /&gt;
=== New modules proposal ===&lt;br /&gt;
&lt;br /&gt;
The time period available to make a proposal is indicated on the schedule. To propose a new activity send mail to the [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org], providing the following information:&lt;br /&gt;
&lt;br /&gt;
(See [[Features/Feature Template]].)&lt;br /&gt;
&lt;br /&gt;
* Short description of the features.&lt;br /&gt;
* Screenshots or screencasts.&lt;br /&gt;
* Are you willing to follow the [[Development Team/Release/Roadmap#Schedule|Schedule]]?&lt;br /&gt;
* Are you willing to provide regular source releases? (releases need to be done as well when there are only changes in translations)&lt;br /&gt;
* System components the activity depends on.&lt;br /&gt;
* Maintainer and members of the developer team, with links to a User page on the wiki or their homepage on the web.&lt;br /&gt;
* Status of internationalization.&lt;br /&gt;
* Code repository.&lt;br /&gt;
* Bug tracking system.&lt;br /&gt;
* Homepage.&lt;br /&gt;
&lt;br /&gt;
Criteria for approval will be:&lt;br /&gt;
&lt;br /&gt;
* Supports internationalisation and localisation.&lt;br /&gt;
* Does not duplicate the functionalities of other activities.&lt;br /&gt;
* Provide functionality that the community judges as important for reaching the goals of the project.&lt;br /&gt;
* Maintainer responsiveness and willingness to provide regular releases. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not required but preferred:&lt;br /&gt;
&lt;br /&gt;
 * Use the Sugar Labs infrastructure. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Module release ==&lt;br /&gt;
&lt;br /&gt;
For both intermediates and final releases module maintainers are responsible to announce the module release and make the sources available. Note that the release number of the module does not need to match the Sucrose release number.&lt;br /&gt;
More in detail:&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Glucose}}&lt;br /&gt;
=== &amp;lt;abbr title=&amp;quot;Glucose, the base Sugar environment&amp;quot;&amp;gt;Glucose&amp;lt;/abbr&amp;gt; (base) modules===&lt;br /&gt;
* Build a source tarball &lt;br /&gt;
 &lt;br /&gt;
 make distcheck&lt;br /&gt;
&lt;br /&gt;
* In git add a tag to reference the release. The tag name should be in the vXXX form (for example v0.81.9).&lt;br /&gt;
&lt;br /&gt;
* test it carefully and make it available in a stable location. You need a developer account with Sugar Labs to be able to upload there. The preferred location for glucose modules is: &lt;br /&gt;
 shell.sugarlabs.org:/upload/sources/sucrose/glucose/(module_name)/ &lt;br /&gt;
which translates to: &lt;br /&gt;
 http://download.sugarlabs.org/sources/sucrose/glucose/(module_name)/ &lt;br /&gt;
&lt;br /&gt;
* Send an announce mail to sugar-devel@lists.sugarlabs.org, with [RELEASE] in the subject. The form will be decided by each maintainer but it should at least include a reference to the source code tarball and an high level, user oriented list of changes.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Fructose}}&lt;br /&gt;
===&amp;lt;abbr title=&amp;quot;Fructose, the base set of demonstration activities&amp;quot;&amp;gt;Fructose&amp;lt;/abbr&amp;gt; (base activity) modules===&lt;br /&gt;
* Build a source tarball&lt;br /&gt;
If your activity uses bundlebuilder you can use the dist_source command to generate a source tarball. Note, use a clean checkout of the repository - due to how bundlebuilder works at the moment files you would place in the directory e.g. x.patch would be included in the tarball as well.&lt;br /&gt;
&lt;br /&gt;
 python setup.py dist_source&lt;br /&gt;
&lt;br /&gt;
The tarball will be generated inside the dist directory.&lt;br /&gt;
&lt;br /&gt;
* In git add a tag to reference the release. The tag name should be in the vXXX form (for example v20).&lt;br /&gt;
&lt;br /&gt;
* Test it carefully and make it available in a stable location. You need a developer account with Sugar Labs to be able to upload there. &lt;br /&gt;
&lt;br /&gt;
The preferred location for fructose components is: &lt;br /&gt;
 shell.sugarlabs.org:/upload/sources/sucrose/fructose/(module_name)/ &lt;br /&gt;
which translates to: &lt;br /&gt;
 http://download.sugarlabs.org/sources/sucrose/fructose/(module_name)/ &lt;br /&gt;
&lt;br /&gt;
* Send an announce mail to sugar-devel@lists.sugarlabs.org, with [RELEASE] in the subject. The form will be decided by each maintainer but it should at least include a reference to the source code tarball and an high level, user oriented list of changes.&lt;br /&gt;
&lt;br /&gt;
=== Using the release script ===&lt;br /&gt;
For both, fructose and glucose components you can use the release script in [http://git.sugarlabs.org/projects/sugar-tools sugar-tools] to do the above tasks in one go.&lt;br /&gt;
&lt;br /&gt;
You can check out the available commands (Note, the script does try to release the software of the directory you are currently in):&lt;br /&gt;
&lt;br /&gt;
 ./release --help&lt;br /&gt;
&lt;br /&gt;
==== For sucrose activities ====&lt;br /&gt;
&lt;br /&gt;
===== Before release =====&lt;br /&gt;
&lt;br /&gt;
Be sure to have the same state as origin/master, git pull, git log, gitstatus, git reset --hard origin/master&lt;br /&gt;
&lt;br /&gt;
===== Release =====&lt;br /&gt;
&lt;br /&gt;
cd into the activity directory, run the sugar-tools &#039;release&#039; script from there&lt;br /&gt;
&lt;br /&gt;
 ~/prog/sugar-tools/release&lt;br /&gt;
&lt;br /&gt;
If you want to be sure about the version you can pass the version you want it to be to the script:&lt;br /&gt;
&lt;br /&gt;
 ~/prog/sugar-tools/release -v 0.96.5&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
&lt;br /&gt;
* has to be done in a sugar shell&lt;br /&gt;
* user needs ssh access to sugarlabs.org&lt;br /&gt;
* user needs write access to the upload directory: http://download.sugarlabs.org/sources/sucrose/fructose/&lt;br /&gt;
&lt;br /&gt;
===== Upload the .xo file to ASLO =====&lt;br /&gt;
&lt;br /&gt;
Tarball is uploaded but you&#039;re not done yet, you need to upload the .xo file to ASLO manually.&lt;br /&gt;
&lt;br /&gt;
== Sugar release cycle==&lt;br /&gt;
{{Template:Platform Cycle Linkbar}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each release cycle will include development, beta, release candidate and final releases. The release team is responsible to coordinate with module maintainers, pull the updated modules together, perform basic QA and announce it. More in detail:&lt;br /&gt;
&lt;br /&gt;
* Ensure that all the module releases are available by the scheduled date.&lt;br /&gt;
* Construct a sugar-jhbuild moduleset out of them. Run automatic and manual QA on it.&lt;br /&gt;
* If issues arise coordinate with the relevant module maintainers to solve them.&lt;br /&gt;
* Announce the release on sugar-devel@lists.sugarlabs.org, including a reference to the sugar-jhbuild moduleset, references to each source module and a global list of changes.&lt;br /&gt;
&lt;br /&gt;
=== Roadmap Update ===&lt;br /&gt;
&lt;br /&gt;
The Development Team&#039;s [[{{Upcoming Stable Release}}/Roadmap|Roadmap]] is updated at the beginning of each release cycle by the release team. It includes:&lt;br /&gt;
&lt;br /&gt;
* Detailed schedule of release dates and freeze points.&lt;br /&gt;
* List of modules and external dependencies.&lt;br /&gt;
* Reference to all the tickets considered for the release.&lt;br /&gt;
* References to the new feature proposals.&lt;br /&gt;
&lt;br /&gt;
=== Feature freeze ===&lt;br /&gt;
By Feature Freeze all new features have to be complete, reviewed and pushed to the repository. &amp;quot;Feature&amp;quot; should be interpreted as &amp;quot;Functionality&amp;quot; or &amp;quot;Ability&amp;quot;. Bug fixes of existing features are not affected.&lt;br /&gt;
&lt;br /&gt;
This allows developers to concentrate on refining the new features instead of adding yet more functionality. &lt;br /&gt;
&lt;br /&gt;
The feature freeze affects all the modules included in the release and comprise also ABI for public libraries. Exceptions might be considered by the release team but they will be extremely rare. To request an exception send mail to [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org], referencing the patches you would like to land. It will have to be granted by two [[Development Team/Release/Contacts|members]] of the release team, on the base of community feedback.&lt;br /&gt;
&lt;br /&gt;
=== UI Freeze ===&lt;br /&gt;
Major UI revisions or changes must be done before this date.&lt;br /&gt;
&lt;br /&gt;
This encourages developers to focus on stability and bug-fixing rather than UI changes. At this point, documentation writers do not have to worry that their work will become outdated. &lt;br /&gt;
&lt;br /&gt;
If you really need to do an UI change you have to ask an exception from the release team and must notify the documentation team when accepted.&lt;br /&gt;
&lt;br /&gt;
=== String cooling===&lt;br /&gt;
String changes have to be announced, but no exceptions have to be requested. As soon as the change is committed in git, notify the [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org localization list] about it.&lt;br /&gt;
&lt;br /&gt;
=== String Freeze===&lt;br /&gt;
After this date every string change has to be requested and to be approved. Please send an exception to the [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org localization list] and [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org] if you need to break the string freeze and ask for an exception. The localization team lead and two members of the release team need to approve such a break.&lt;br /&gt;
&lt;br /&gt;
=== Stabilizing ===&lt;br /&gt;
In the stabilizing phase we request every bug fix to be tied to a ticket including a testing plan. Please add the testcase in the ticket comment field. You need to mark it with |TestCase|. This adds better readability and our script that pulls together the test cases for each release is able to find it as well. For example:&lt;br /&gt;
 |TestCase|&lt;br /&gt;
 Click on Browse, Read, Pippy icons in the homepage and make sure all of them starts correctly.&lt;br /&gt;
&lt;br /&gt;
=== Hard code freeze ===&lt;br /&gt;
When the hard code freeze is in effect, each and every code change should be approved by the release team. Only critical fixes will be considered. To request approval send mail to sugar-devel@lists.sugarlabs.org, including the patch and a detailed description of the changes, the benefits and the risks. Approval will have to be granted by two [[Development Team/Release/Contacts#People|members]] of the team.&lt;br /&gt;
&lt;br /&gt;
=== Branching ===&lt;br /&gt;
&lt;br /&gt;
After the final release of a module, a branch should be created to host further stable development. Please use a name in the form: sucrose-XXX (for example sucrose-0.84). Each module maintainer is responsible to inform the [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org] and [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org] lists about the branch.&lt;br /&gt;
&lt;br /&gt;
A new branch is created on the Pootle server, e.g., Fructose-0.96 and Fructose-0.98. The Localization team (the coordinator of a translation team) may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches as well.&lt;br /&gt;
&lt;br /&gt;
You can create a remote branch like this (in your repository):&lt;br /&gt;
&lt;br /&gt;
 git branch sucrose-0.98&lt;br /&gt;
 git push origin sucrose-0.98&lt;br /&gt;
&lt;br /&gt;
You can list the remote branches to make sure what is the next one with:&lt;br /&gt;
&lt;br /&gt;
 git branch --remote&lt;br /&gt;
&lt;br /&gt;
You can as well branch off at a specific commit:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b [commit id] [branch name]&lt;br /&gt;
 e.g. git checkout -b 1641b9ae0703190df383619202ac33e60c130bb9 sugar-0.96&lt;br /&gt;
&lt;br /&gt;
And to work on it (in your repository):&lt;br /&gt;
&lt;br /&gt;
 git checkout -b sucrose-0.98 origin/sucrose-0.98&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
== Bug triaging ==&lt;br /&gt;
&lt;br /&gt;
Module maintainers should ensure that their plans for the release are clearly reflected in the bug tracking system. They are responsible to set milestones and priorities accordingly, in cooperation with the release and the QA teams.&lt;br /&gt;
&lt;br /&gt;
Each commit or set of commit should have a ticket associated. The ticket number should be always mentioned in the git log and is used to automatically build the list of module changes for the releases.&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
TBD Many of the steps described in this document can be easily automated for maintainers which are using the Sugar Labs infrastructure and for the release team. Though as a first pass we want to get the workflow right, even if it involves more manual step than strictly required.&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
{{Template:Platform Cycle Linkbar}}&lt;br /&gt;
&lt;br /&gt;
See also [[:Category:Release Notes]]{{Special:PrefixIndex/{{PAGENAME}}/}}&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Google_Code-In_2012&amp;diff=84000</id>
		<title>Google Code-In 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Google_Code-In_2012&amp;diff=84000"/>
		<updated>2012-11-13T18:33:47Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Mentors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sugar Labs is &amp;lt;strike&amp;gt;applying to&amp;lt;/strike&amp;gt; participating in Google Code-in for 2012.&lt;br /&gt;
&lt;br /&gt;
=== Message to potential participants ===&lt;br /&gt;
&lt;br /&gt;
It is important that you obtain permission of your parents.&lt;br /&gt;
&lt;br /&gt;
Es importante que obtengas el permiso de tus padres para participar.&lt;br /&gt;
&lt;br /&gt;
http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/help_page#eligibility&lt;br /&gt;
&lt;br /&gt;
Please see the Contest Rules for Eligibility and Registration process.&lt;br /&gt;
&lt;br /&gt;
http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/terms_and_conditions&lt;br /&gt;
&lt;br /&gt;
=== Why we are applying ===&lt;br /&gt;
&lt;br /&gt;
Sugar is written and maintained by volunteers, who range from seasoned professionals to children as young as 12-years of age. Children who have grown up with Sugar have transitioned from Sugar users to Sugar App developers to Sugar maintainers. They hang out on IRC with the global Sugar developer community and are full-fledged members of the Sugar development team. It is this latter group of children we hope will participate in and benefit from Google Code-in. Specifically we want to re-enforce the message that Sugar belongs to its users and that they have both ownership and the responsibility that ownership implies. Just as learning is not something done to you, but something you do, learning with Sugar ultimately means participating in the Sugar development process. At Sugar Labs, we are trying to bring the culture of Free Software into the culture of school. So the Code-in is not just an opportunity for us to get some tasks accomplished, it is quintessential to our overall mission.&lt;br /&gt;
&lt;br /&gt;
=== About GCI ===&lt;br /&gt;
&lt;br /&gt;
[http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/help_page Code-in FAQ]&lt;br /&gt;
&lt;br /&gt;
=== Tasks ===&lt;br /&gt;
This [[GoogleCodeIn2012/GCI2012_Brainstorming|brainstorming]] page lists some general categories from which specific individual tasks can be specified. (Note: We had [[Summer_of_Code/2012#Project_candidates|a number of tasks]] listed in our GSOC application that may be relevant to GCI. We also have many [[Features]] that are still pending.)&lt;br /&gt;
&lt;br /&gt;
;Code: Tasks related to writing or refactoring code&lt;br /&gt;
# Write a new pootle-helper script for doing preventative [[GoogleCodeIn2012/MsgfmtChecker|msgfmt checks]].&lt;br /&gt;
# Sugarize [[GoogleCodeIn2012/Virtaal|Virtaal]] for L10n &amp;quot;bootstrapping&amp;quot;.&lt;br /&gt;
# Convert Sugar activities from [[Features/GTK3/Porting|GTK-2 to GTK-3]] framework.&lt;br /&gt;
# [[Features/Touch/Development|Enable touch]] for activities that use direct keyboard input.&lt;br /&gt;
# Implement the [[Features/Background_image_on_home_view|set background image on Home View Feature]].&lt;br /&gt;
# Package Sugar activity utilities (e.g., [http://git.sugarlabs.org/portfolio/portfolio/blobs/master/toolbar_utils.py]) for inclusion in the [http://git.sugarlabs.org/sugar-toolkit-gtk3 Sugar toolkit].&lt;br /&gt;
&lt;br /&gt;
;Documentation/Training: Tasks related to creating/editing documents and helping others learn more&lt;br /&gt;
# Write a [[GoogleCodeIn2012/Turtle Art|Turtle Art]] introductory tutorial.&lt;br /&gt;
# Identify and document a generalized (ideally automated) method for taking nearly identical screen shots with the desktop set to a selected list of different languages. (Possibly Orca?).&lt;br /&gt;
# Flesh out the [[Features/GTK3/Porting|GTK-2 to GTK-3]] conversion documentation to include more comprehensive coverage of Pango.&lt;br /&gt;
# Better document the process of creating and using [[Sugar_on_a_Stick|Sugar on a Stick]], the LiveUSB version of Sugar.&lt;br /&gt;
# Better document the process of running Sugar in a [[Sugar_Creation_Kit/VirtualBox|virtual machine (VM)]].&lt;br /&gt;
# Create videos on how to use Sugar and how to use core Sugar activities.&lt;br /&gt;
&lt;br /&gt;
;Outreach/Research: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions&lt;br /&gt;
# Research internationalization of [[GoogleCodeIn2012/SVG images| SVG images]].&lt;br /&gt;
# Research what [[Platform_Team/sugar-stats|metadata about Sugar activity usage]] would be helpful to teachers for assessment purposes.&lt;br /&gt;
# Research what opportunities/roadblocks exist for running Sugar in your local schools.&lt;br /&gt;
# Research what is missing from Sugar that makes it unused by your local schools.&lt;br /&gt;
# Research the issues involved with porting Sugar to &amp;quot;the Cloud&amp;quot;.&lt;br /&gt;
# Research the issues involved with porting Sugar to Android.&lt;br /&gt;
&lt;br /&gt;
;Quality Assurance: Tasks related to testing and ensuring code is of high quality.&lt;br /&gt;
# Do an analysis of which Sugar activities are are orphaned.&lt;br /&gt;
# Do an analysis of which Sugar activities are touch-enabled or need modifications to support touch.&lt;br /&gt;
# Do an analysis of which Sugar activities are lacking in documentation (e.g., [[Activities|Activity wiki page]]).&lt;br /&gt;
# Do an analysis of which Sugar activities are have issues running on non-x86 architectures (e.g. ARM).&lt;br /&gt;
# Do an analysis of which Sugar activities are lacking i18n support.&lt;br /&gt;
&lt;br /&gt;
;User Interface: Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
# Analyze Sugar from the point of view of special needs and make recommendations for improvements.&lt;br /&gt;
# Help us design the Sugar affordances for Sugar on tablet computers (Sugar Touch).&lt;br /&gt;
# Develop new Maliit keyboard files for additional languages(beyond those already developed by garycmartin).&lt;br /&gt;
# Think of ways to further leverage the use of an accelerometer in Sugar (and other common sensors found in portable computing devices).&lt;br /&gt;
# Assessing how Sugar is used by students. What is learnt? Survey students and teachers. How well does it deliver its goals?&lt;br /&gt;
# Survey Sugar users to find out what UI features they want from Sugar in the future.&lt;br /&gt;
&lt;br /&gt;
=== Mentors ===&lt;br /&gt;
Depending on the project, we will assign multiple mentors from our various development and support teams.&lt;br /&gt;
* Chris Leonard&lt;br /&gt;
* Walter Bender&lt;br /&gt;
* Claudia Urrea&lt;br /&gt;
* Pacita Pena&lt;br /&gt;
* Rosamel Ramirez&lt;br /&gt;
* Sdenka Salas&lt;br /&gt;
* Sam Greenfeld&lt;br /&gt;
* Gonzalo Odiard&lt;br /&gt;
* Simon Schampijer&lt;br /&gt;
* Manuel Quiñones&lt;br /&gt;
* Tony Forster&lt;br /&gt;
* Guzman Trinidad&lt;br /&gt;
* Adam Holt&lt;br /&gt;
* Sean Daly&lt;br /&gt;
* Manuel Kaufmann&lt;br /&gt;
* Mark Bradley&lt;br /&gt;
* Alan Aguiar&lt;br /&gt;
* Bernie Innocenti&lt;br /&gt;
* Daniel Drake&lt;br /&gt;
* Martin Abente&lt;br /&gt;
* Raul Guttierrez Segales&lt;br /&gt;
* C Scott Ananian&lt;br /&gt;
et al.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: GCI2012]]&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Google_Code-In_2012&amp;diff=83999</id>
		<title>Google Code-In 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Google_Code-In_2012&amp;diff=83999"/>
		<updated>2012-11-13T18:30:19Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Message to potential participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sugar Labs is &amp;lt;strike&amp;gt;applying to&amp;lt;/strike&amp;gt; participating in Google Code-in for 2012.&lt;br /&gt;
&lt;br /&gt;
=== Message to potential participants ===&lt;br /&gt;
&lt;br /&gt;
It is important that you obtain permission of your parents.&lt;br /&gt;
&lt;br /&gt;
Es importante que obtengas el permiso de tus padres para participar.&lt;br /&gt;
&lt;br /&gt;
http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/help_page#eligibility&lt;br /&gt;
&lt;br /&gt;
Please see the Contest Rules for Eligibility and Registration process.&lt;br /&gt;
&lt;br /&gt;
http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/terms_and_conditions&lt;br /&gt;
&lt;br /&gt;
=== Why we are applying ===&lt;br /&gt;
&lt;br /&gt;
Sugar is written and maintained by volunteers, who range from seasoned professionals to children as young as 12-years of age. Children who have grown up with Sugar have transitioned from Sugar users to Sugar App developers to Sugar maintainers. They hang out on IRC with the global Sugar developer community and are full-fledged members of the Sugar development team. It is this latter group of children we hope will participate in and benefit from Google Code-in. Specifically we want to re-enforce the message that Sugar belongs to its users and that they have both ownership and the responsibility that ownership implies. Just as learning is not something done to you, but something you do, learning with Sugar ultimately means participating in the Sugar development process. At Sugar Labs, we are trying to bring the culture of Free Software into the culture of school. So the Code-in is not just an opportunity for us to get some tasks accomplished, it is quintessential to our overall mission.&lt;br /&gt;
&lt;br /&gt;
=== About GCI ===&lt;br /&gt;
&lt;br /&gt;
[http://www.google-melange.com/gci/document/show/gci_program/google/gci2012/help_page Code-in FAQ]&lt;br /&gt;
&lt;br /&gt;
=== Tasks ===&lt;br /&gt;
This [[GoogleCodeIn2012/GCI2012_Brainstorming|brainstorming]] page lists some general categories from which specific individual tasks can be specified. (Note: We had [[Summer_of_Code/2012#Project_candidates|a number of tasks]] listed in our GSOC application that may be relevant to GCI. We also have many [[Features]] that are still pending.)&lt;br /&gt;
&lt;br /&gt;
;Code: Tasks related to writing or refactoring code&lt;br /&gt;
# Write a new pootle-helper script for doing preventative [[GoogleCodeIn2012/MsgfmtChecker|msgfmt checks]].&lt;br /&gt;
# Sugarize [[GoogleCodeIn2012/Virtaal|Virtaal]] for L10n &amp;quot;bootstrapping&amp;quot;.&lt;br /&gt;
# Convert Sugar activities from [[Features/GTK3/Porting|GTK-2 to GTK-3]] framework.&lt;br /&gt;
# [[Features/Touch/Development|Enable touch]] for activities that use direct keyboard input.&lt;br /&gt;
# Implement the [[Features/Background_image_on_home_view|set background image on Home View Feature]].&lt;br /&gt;
# Package Sugar activity utilities (e.g., [http://git.sugarlabs.org/portfolio/portfolio/blobs/master/toolbar_utils.py]) for inclusion in the [http://git.sugarlabs.org/sugar-toolkit-gtk3 Sugar toolkit].&lt;br /&gt;
&lt;br /&gt;
;Documentation/Training: Tasks related to creating/editing documents and helping others learn more&lt;br /&gt;
# Write a [[GoogleCodeIn2012/Turtle Art|Turtle Art]] introductory tutorial.&lt;br /&gt;
# Identify and document a generalized (ideally automated) method for taking nearly identical screen shots with the desktop set to a selected list of different languages. (Possibly Orca?).&lt;br /&gt;
# Flesh out the [[Features/GTK3/Porting|GTK-2 to GTK-3]] conversion documentation to include more comprehensive coverage of Pango.&lt;br /&gt;
# Better document the process of creating and using [[Sugar_on_a_Stick|Sugar on a Stick]], the LiveUSB version of Sugar.&lt;br /&gt;
# Better document the process of running Sugar in a [[Sugar_Creation_Kit/VirtualBox|virtual machine (VM)]].&lt;br /&gt;
# Create videos on how to use Sugar and how to use core Sugar activities.&lt;br /&gt;
&lt;br /&gt;
;Outreach/Research: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions&lt;br /&gt;
# Research internationalization of [[GoogleCodeIn2012/SVG images| SVG images]].&lt;br /&gt;
# Research what [[Platform_Team/sugar-stats|metadata about Sugar activity usage]] would be helpful to teachers for assessment purposes.&lt;br /&gt;
# Research what opportunities/roadblocks exist for running Sugar in your local schools.&lt;br /&gt;
# Research what is missing from Sugar that makes it unused by your local schools.&lt;br /&gt;
# Research the issues involved with porting Sugar to &amp;quot;the Cloud&amp;quot;.&lt;br /&gt;
# Research the issues involved with porting Sugar to Android.&lt;br /&gt;
&lt;br /&gt;
;Quality Assurance: Tasks related to testing and ensuring code is of high quality.&lt;br /&gt;
# Do an analysis of which Sugar activities are are orphaned.&lt;br /&gt;
# Do an analysis of which Sugar activities are touch-enabled or need modifications to support touch.&lt;br /&gt;
# Do an analysis of which Sugar activities are lacking in documentation (e.g., [[Activities|Activity wiki page]]).&lt;br /&gt;
# Do an analysis of which Sugar activities are have issues running on non-x86 architectures (e.g. ARM).&lt;br /&gt;
# Do an analysis of which Sugar activities are lacking i18n support.&lt;br /&gt;
&lt;br /&gt;
;User Interface: Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
# Analyze Sugar from the point of view of special needs and make recommendations for improvements.&lt;br /&gt;
# Help us design the Sugar affordances for Sugar on tablet computers (Sugar Touch).&lt;br /&gt;
# Develop new Maliit keyboard files for additional languages(beyond those already developed by garycmartin).&lt;br /&gt;
# Think of ways to further leverage the use of an accelerometer in Sugar (and other common sensors found in portable computing devices).&lt;br /&gt;
# Assessing how Sugar is used by students. What is learnt? Survey students and teachers. How well does it deliver its goals?&lt;br /&gt;
# Survey Sugar users to find out what UI features they want from Sugar in the future.&lt;br /&gt;
&lt;br /&gt;
=== Mentors ===&lt;br /&gt;
Depending on the project, we will assign multiple mentors from our various development and support teams.&lt;br /&gt;
* Chris Leonard&lt;br /&gt;
* Walter Bender&lt;br /&gt;
* Claudia Urrea&lt;br /&gt;
* Pacita Pena&lt;br /&gt;
* Rosamel Ramirez&lt;br /&gt;
* Sdenka Salas&lt;br /&gt;
* Sam Greenfeld&lt;br /&gt;
* Gonzalo Odiard&lt;br /&gt;
* Simon Schampijer&lt;br /&gt;
* Manuel Quinines&lt;br /&gt;
* Tony Forster&lt;br /&gt;
* Guzman Trinidad&lt;br /&gt;
* Adam Holt&lt;br /&gt;
* Sean Daly&lt;br /&gt;
* Manuel Kaufmann&lt;br /&gt;
* Mark Bradley&lt;br /&gt;
* Alan Aguiar&lt;br /&gt;
* Bernie Innocenti&lt;br /&gt;
* Daniel Drake&lt;br /&gt;
* Martin Abente&lt;br /&gt;
* Raul Guttierrez Segales&lt;br /&gt;
* C Scott Ananian&lt;br /&gt;
et al.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: GCI2012]]&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Release&amp;diff=83200</id>
		<title>Development Team/Release</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Release&amp;diff=83200"/>
		<updated>2012-09-28T16:52:13Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Using the release script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Development Team|roadmap_link={{Upcoming Stable Release}}/Roadmap}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Goals and modules proposal ==&lt;br /&gt;
&lt;br /&gt;
At the beginning of each release [[:Category:Platform Cycle|cycle]], maintainers will work on a set of goals, document them and assign owners. See the upcoming stable release, [[{{Upcoming Stable Release}}/Roadmap]]. (These goals typically involve major interventions or the addition of new components, e.g., someone develops a speech engine specially for his mother tongue and wants it in Sugar. Hence, the process described below is primarily for module maintainers. If you are a developer with a feature or bug fix, you may want to refer to the [[Features/Policy|new feature process]].)&lt;br /&gt;
&lt;br /&gt;
=== New modules proposal ===&lt;br /&gt;
&lt;br /&gt;
The time period available to make a proposal is indicated on the schedule. To propose a new activity send mail to the [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org], providing the following information:&lt;br /&gt;
&lt;br /&gt;
(See [[Features/Feature Template]].)&lt;br /&gt;
&lt;br /&gt;
* Short description of the features.&lt;br /&gt;
* Screenshots or screencasts.&lt;br /&gt;
* Are you willing to follow the [[Development Team/Release/Roadmap#Schedule|Schedule]]?&lt;br /&gt;
* Are you willing to provide regular source releases? (releases need to be done as well when there are only changes in translations)&lt;br /&gt;
* System components the activity depends on.&lt;br /&gt;
* Maintainer and members of the developer team, with links to a User page on the wiki or their homepage on the web.&lt;br /&gt;
* Status of internationalization.&lt;br /&gt;
* Code repository.&lt;br /&gt;
* Bug tracking system.&lt;br /&gt;
* Homepage.&lt;br /&gt;
&lt;br /&gt;
Criteria for approval will be:&lt;br /&gt;
&lt;br /&gt;
* Supports internationalisation and localisation.&lt;br /&gt;
* Does not duplicate the functionalities of other activities.&lt;br /&gt;
* Provide functionality that the community judges as important for reaching the goals of the project.&lt;br /&gt;
* Maintainer responsiveness and willingness to provide regular releases. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not required but preferred:&lt;br /&gt;
&lt;br /&gt;
 * Use the Sugar Labs infrastructure. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Module release ==&lt;br /&gt;
&lt;br /&gt;
For both intermediates and final releases module maintainers are responsible to announce the module release and make the sources available. Note that the release number of the module does not need to match the Sucrose release number.&lt;br /&gt;
More in detail:&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Glucose}}&lt;br /&gt;
=== &amp;lt;abbr title=&amp;quot;Glucose, the base Sugar environment&amp;quot;&amp;gt;Glucose&amp;lt;/abbr&amp;gt; (base) modules===&lt;br /&gt;
* Build a source tarball &lt;br /&gt;
 &lt;br /&gt;
 make distcheck&lt;br /&gt;
&lt;br /&gt;
* In git add a tag to reference the release. The tag name should be in the vXXX form (for example v0.81.9).&lt;br /&gt;
&lt;br /&gt;
* test it carefully and make it available in a stable location. You need a developer account with Sugar Labs to be able to upload there. The preferred location for glucose modules is: &lt;br /&gt;
 shell.sugarlabs.org:/upload/sources/sucrose/glucose/(module_name)/ &lt;br /&gt;
which translates to: &lt;br /&gt;
 http://download.sugarlabs.org/sources/sucrose/glucose/(module_name)/ &lt;br /&gt;
&lt;br /&gt;
* Send an announce mail to sugar-devel@lists.sugarlabs.org, with [RELEASE] in the subject. The form will be decided by each maintainer but it should at least include a reference to the source code tarball and an high level, user oriented list of changes.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Fructose}}&lt;br /&gt;
===&amp;lt;abbr title=&amp;quot;Fructose, the base set of demonstration activities&amp;quot;&amp;gt;Fructose&amp;lt;/abbr&amp;gt; (base activity) modules===&lt;br /&gt;
* Build a source tarball&lt;br /&gt;
If your activity uses bundlebuilder you can use the dist_source command to generate a source tarball. Note, use a clean checkout of the repository - due to how bundlebuilder works at the moment files you would place in the directory e.g. x.patch would be included in the tarball as well.&lt;br /&gt;
&lt;br /&gt;
 python setup.py dist_source&lt;br /&gt;
&lt;br /&gt;
The tarball will be generated inside the dist directory.&lt;br /&gt;
&lt;br /&gt;
* In git add a tag to reference the release. The tag name should be in the vXXX form (for example v20).&lt;br /&gt;
&lt;br /&gt;
* Test it carefully and make it available in a stable location. You need a developer account with Sugar Labs to be able to upload there. &lt;br /&gt;
&lt;br /&gt;
The preferred location for fructose components is: &lt;br /&gt;
 shell.sugarlabs.org:/upload/sources/sucrose/fructose/(module_name)/ &lt;br /&gt;
which translates to: &lt;br /&gt;
 http://download.sugarlabs.org/sources/sucrose/fructose/(module_name)/ &lt;br /&gt;
&lt;br /&gt;
* Send an announce mail to sugar-devel@lists.sugarlabs.org, with [RELEASE] in the subject. The form will be decided by each maintainer but it should at least include a reference to the source code tarball and an high level, user oriented list of changes.&lt;br /&gt;
&lt;br /&gt;
=== Using the release script ===&lt;br /&gt;
For both, fructose and glucose components you can use the release script in [http://git.sugarlabs.org/projects/sugar-tools sugar-tools] to do the above tasks in one go.&lt;br /&gt;
&lt;br /&gt;
You can check out the available commands (Note, the script does try to release the software of the directory you are currently in):&lt;br /&gt;
&lt;br /&gt;
 ./release --help&lt;br /&gt;
&lt;br /&gt;
==== For sucrose activities ====&lt;br /&gt;
&lt;br /&gt;
===== Before release =====&lt;br /&gt;
&lt;br /&gt;
Be sure to have the same state as origin/master, git pull, git log, gitstatus, git reset --hard origin/master&lt;br /&gt;
&lt;br /&gt;
===== Release =====&lt;br /&gt;
&lt;br /&gt;
cd into the activity directory, run the sugar-tools &#039;release&#039; script from there&lt;br /&gt;
&lt;br /&gt;
 ~/prog/sugar-tools/release&lt;br /&gt;
&lt;br /&gt;
If you want to be sure about the version you can pass the version you want it to be to the script:&lt;br /&gt;
&lt;br /&gt;
 ~/prog/sugar-tools/release -v 0.96.5&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
&lt;br /&gt;
* has to be done in a sugar shell&lt;br /&gt;
* user needs ssh access to sugarlabs.org&lt;br /&gt;
* user needs write access to the upload directory: http://download.sugarlabs.org/sources/sucrose/fructose/&lt;br /&gt;
&lt;br /&gt;
===== Upload the .xo file to ASLO =====&lt;br /&gt;
&lt;br /&gt;
Tarball is uploaded but you&#039;re not done yet, you need to upload the .xo file to ASLO manually.&lt;br /&gt;
&lt;br /&gt;
== Sugar release cycle==&lt;br /&gt;
{{Template:Platform Cycle Linkbar}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each release cycle will include development, beta, release candidate and final releases. The release team is responsible to coordinate with module maintainers, pull the updated modules together, perform basic QA and announce it. More in detail:&lt;br /&gt;
&lt;br /&gt;
* Ensure that all the module releases are available by the scheduled date.&lt;br /&gt;
* Construct a sugar-jhbuild moduleset out of them. Run automatic and manual QA on it.&lt;br /&gt;
* If issues arise coordinate with the relevant module maintainers to solve them.&lt;br /&gt;
* Announce the release on sugar-devel@lists.sugarlabs.org, including a reference to the sugar-jhbuild moduleset, references to each source module and a global list of changes.&lt;br /&gt;
&lt;br /&gt;
=== Roadmap Update ===&lt;br /&gt;
&lt;br /&gt;
The Development Team&#039;s [[{{Upcoming Stable Release}}/Roadmap|Roadmap]] is updated at the beginning of each release cycle by the release team. It includes:&lt;br /&gt;
&lt;br /&gt;
* Detailed schedule of release dates and freeze points.&lt;br /&gt;
* List of modules and external dependencies.&lt;br /&gt;
* Reference to all the tickets considered for the release.&lt;br /&gt;
* References to the new feature proposals.&lt;br /&gt;
&lt;br /&gt;
=== Feature freeze ===&lt;br /&gt;
By Feature Freeze all new features have to be complete, reviewed and pushed to the repository. &amp;quot;Feature&amp;quot; should be interpreted as &amp;quot;Functionality&amp;quot; or &amp;quot;Ability&amp;quot;. Bug fixes of existing features are not affected.&lt;br /&gt;
&lt;br /&gt;
This allows developers to concentrate on refining the new features instead of adding yet more functionality. &lt;br /&gt;
&lt;br /&gt;
The feature freeze affects all the modules included in the release and comprise also ABI for public libraries. Exceptions might be considered by the release team but they will be extremely rare. To request an exception send mail to [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org], referencing the patches you would like to land. It will have to be granted by two [[Development Team/Release/Contacts|members]] of the release team, on the base of community feedback.&lt;br /&gt;
&lt;br /&gt;
=== UI Freeze ===&lt;br /&gt;
Major UI revisions or changes must be done before this date.&lt;br /&gt;
&lt;br /&gt;
This encourages developers to focus on stability and bug-fixing rather than UI changes. At this point, documentation writers do not have to worry that their work will become outdated. &lt;br /&gt;
&lt;br /&gt;
If you really need to do an UI change you have to ask an exception from the release team and must notify the documentation team when accepted.&lt;br /&gt;
&lt;br /&gt;
=== String cooling===&lt;br /&gt;
String changes have to be announced, but no exceptions have to be requested. As soon as the change is committed in git, notify the [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org localization list] about it.&lt;br /&gt;
&lt;br /&gt;
=== String Freeze===&lt;br /&gt;
After this date every string change has to be requested and to be approved. Please send an exception to the [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org localization list] and [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org] if you need to break the string freeze and ask for an exception. The localization team lead and two members of the release team need to approve such a break.&lt;br /&gt;
&lt;br /&gt;
=== Stabilizing ===&lt;br /&gt;
In the stabilizing phase we request every bug fix to be tied to a ticket including a testing plan. Please add the testcase in the ticket comment field. You need to mark it with |TestCase|. This adds better readability and our script that pulls together the test cases for each release is able to find it as well. For example:&lt;br /&gt;
 |TestCase|&lt;br /&gt;
 Click on Browse, Read, Pippy icons in the homepage and make sure all of them starts correctly.&lt;br /&gt;
&lt;br /&gt;
=== Hard code freeze ===&lt;br /&gt;
When the hard code freeze is in effect, each and every code change should be approved by the release team. Only critical fixes will be considered. To request approval send mail to sugar-devel@lists.sugarlabs.org, including the patch and a detailed description of the changes, the benefits and the risks. Approval will have to be granted by two [[Development Team/Release/Contacts#People|members]] of the team.&lt;br /&gt;
&lt;br /&gt;
=== Branching ===&lt;br /&gt;
&lt;br /&gt;
After the final release of a module, a branch should be created to host further stable development. Please use a name in the form: sucrose-XXX (for example sucrose-0.84). Each module maintainer is responsible to inform the [http://lists.sugarlabs.org/listinfo/sugar-devel sugar-devel@lists.sugarlabs.org] and [http://lists.laptop.org/mailman/listinfo/localization localization@lists.laptop.org] lists about the branch.&lt;br /&gt;
&lt;br /&gt;
A new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team (the coordinator of a translation team) may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches as well.&lt;br /&gt;
&lt;br /&gt;
You can create a remote branch like this (in your repository):&lt;br /&gt;
&lt;br /&gt;
 git branch sucrose-0.84&lt;br /&gt;
 git push origin sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
You can as well branch off at a specific commit:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b [commit id] [branch name]&lt;br /&gt;
 e.g. git checkout -b 1641b9ae0703190df383619202ac33e60c130bb9 sugar-0.96&lt;br /&gt;
&lt;br /&gt;
And to work on it (in your repository):&lt;br /&gt;
&lt;br /&gt;
 git checkout -b sucrose-0.84 origin/sucrose-0.84&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
== Bug triaging ==&lt;br /&gt;
&lt;br /&gt;
Module maintainers should ensure that their plans for the release are clearly reflected in the bug tracking system. They are responsible to set milestones and priorities accordingly, in cooperation with the release and the QA teams.&lt;br /&gt;
&lt;br /&gt;
Each commit or set of commit should have a ticket associated. The ticket number should be always mentioned in the git log and is used to automatically build the list of module changes for the releases.&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
TBD Many of the steps described in this document can be easily automated for maintainers which are using the Sugar Labs infrastructure and for the release team. Though as a first pass we want to get the workflow right, even if it involves more manual step than strictly required.&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
{{Template:Platform Cycle Linkbar}}&lt;br /&gt;
&lt;br /&gt;
See also [[:Category:Release Notes]]{{Special:PrefixIndex/{{PAGENAME}}/}}&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82631</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=82631"/>
		<updated>2012-08-31T00:53:07Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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;
===foreach/forall===&lt;br /&gt;
Using gtk_container_foreach or [ http://developer.gnome.org/gtk3/3.4/GtkContainer.html#gtk-container-foreach  gtk_container_forall] does expect the callback data to be passed in Python, it does work in a subclassed container due to Carlos [http://git.gnome.org/browse/gtk+/commit/?id=db569cbee7e3842d802c5f1d53e28d0dde98ffeb  fix in the GtkCallback annotations].&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;
===Palettes with Menus===&lt;br /&gt;
Palettes can not mix both Menus and Widgets. Gonzalo has implemented a [http://git.sugarlabs.org/read/mainline/blobs/master/sugarmenuitem.py SugarMenuItem] which can be used instead.&lt;br /&gt;
&lt;br /&gt;
===Icon/EventIcon: badge is not drawn at the correct position===&lt;br /&gt;
Filed as [http://bugs.sugarlabs.org/ticket/3835 SL #3835]&lt;br /&gt;
&lt;br /&gt;
===Artwork===&lt;br /&gt;
Changes in the theme to adopt to:&lt;br /&gt;
* [http://bugs.sugarlabs.org/ticket/3836 Palette Icon: background]&lt;br /&gt;
* [http://lists.sugarlabs.org/archive/sugar-devel/2012-August/039359.html GtkLabel: background]&lt;br /&gt;
* [http://bugs.sugarlabs.org/ticket/3837 Browse: Notebook label: background]&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;
=== Custom tree model for journal ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#2ce713;&amp;quot;&amp;gt; Fix from: Manuel Quiñones, Simon Schampijer, Gonzalo Odiard &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom tree model sample: http://dev.laptop.org/~manuq/shell-port/test_custom_treemodel-gtk3.py&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;
===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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82459</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=82459"/>
		<updated>2012-08-23T12:45:08Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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 --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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82437</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=82437"/>
		<updated>2012-08-23T02:33:31Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82346</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=82346"/>
		<updated>2012-08-20T15:03:50Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Done */&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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82267</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=82267"/>
		<updated>2012-08-17T14:47:41Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Drag-and-drop in home view, random layout */&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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82264</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=82264"/>
		<updated>2012-08-17T01:41:54Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
===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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82260</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=82260"/>
		<updated>2012-08-16T20:35:58Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Xkl.ConfigRec does not have set_model() method */&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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
===Other issues===&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82259</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=82259"/>
		<updated>2012-08-16T20:32:04Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* 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;
Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
===Other issues===&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82258</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=82258"/>
		<updated>2012-08-16T20:26:40Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&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;
===Other issues===&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
=== 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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82146</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=82146"/>
		<updated>2012-08-10T15:11:57Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Other issues */&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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82126</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=82126"/>
		<updated>2012-08-10T13:01:17Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82104</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=82104"/>
		<updated>2012-08-09T22:51:02Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Xkl.ConfigRec does not have set_model() method */&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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 as: https://bugzilla.gnome.org/show_bug.cgi?id=681566&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82100</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=82100"/>
		<updated>2012-08-09T20:15:48Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* 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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&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 .&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82077</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=82077"/>
		<updated>2012-08-08T20:05:23Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Open */&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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom TreeModelSort for home list view ===&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;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82076</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=82076"/>
		<updated>2012-08-08T16:48:36Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* 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 and home list view===&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: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82063</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=82063"/>
		<updated>2012-08-08T14:41:21Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Other issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
===Owner icon allocation issue===&lt;br /&gt;
&lt;br /&gt;
The owner icon is displayed above the center in home and neighborhood views.  If we don&#039;t take into account the container offset it looks ok, (test removing this line: y -= allocation.y) but then is bad aligned if an alert is displayed in the view.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=82021</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=82021"/>
		<updated>2012-08-08T12:31:48Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82020</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=82020"/>
		<updated>2012-08-08T12:31:32Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* A handful of NMClient issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
===Other issues===&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* activities launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;br /&gt;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82019</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=82019"/>
		<updated>2012-08-08T12:30:23Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Palettes can&amp;#039;t include menu and widgets at the same time */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82017</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=82017"/>
		<updated>2012-08-08T12:27:35Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Custom tree model for journal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
=== 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;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82015</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=82015"/>
		<updated>2012-08-08T12:26:35Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
Gonzalo provided an initial patch, and Manuq worked over it: http://dev.laptop.org/~manuq/journal_gtk3.patch .  Calling Gio.VolumeMonitor.get() crashes Sugar.&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
=== 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;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell&amp;diff=82012</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=82012"/>
		<updated>2012-08-08T12:11:05Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:&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&lt;br /&gt;
&lt;br /&gt;
=== Custom Icon cell renderer ===&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;
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;
===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;
=== 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;
&lt;br /&gt;
==Done==&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;
&lt;br /&gt;
=== do_forall not working in pygobject ===&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;
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;
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;
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;
[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>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81399</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81399"/>
		<updated>2012-07-20T17:16:56Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Journal does not start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 sent a patch].&lt;br /&gt;
&lt;br /&gt;
&#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.  Fixed: use Gio.VolumeMonitor.get()&lt;br /&gt;
&lt;br /&gt;
Current issue: Journal crashes Sugar:&lt;br /&gt;
&lt;br /&gt;
  1342801014.701506 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.703394 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.795809 DEBUG root: window_state_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  1342801014.797290 DEBUG root: visibility_notify_event_cb &amp;lt;JournalActivity object at 0x3c5fc80 (jarabe+journal+journalactivity+JournalActivity at 0x3672900)&amp;gt;&lt;br /&gt;
  TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases&lt;br /&gt;
  **&lt;br /&gt;
  ERROR:/home/manuq/prog/manuqs-shell-port/source/pygobject/gi/_gobject/pygobject.c:946:pygobject_new_full: assertion failed: (tp != NULL)&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81376</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81376"/>
		<updated>2012-07-20T16:15:18Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Journal does not start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.  Fix: use Gio.VolumeMonitor.get()&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81373</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81373"/>
		<updated>2012-07-20T15:57:39Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81372</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81372"/>
		<updated>2012-07-20T15:54:31Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Keybindings do not work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81371</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81371"/>
		<updated>2012-07-20T15:54:07Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Journal does not start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at this [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81370</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81370"/>
		<updated>2012-07-20T15:53:54Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Keybindings do not work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at this [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 | sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81369</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81369"/>
		<updated>2012-07-20T15:53:31Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Keybindings do not work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at this [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202 | reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 | sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81368</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81368"/>
		<updated>2012-07-20T15:53:08Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Keybindings do not work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at this [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 | sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81365</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81365"/>
		<updated>2012-07-20T15:49:40Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Journal does not start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320 | sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81363</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81363"/>
		<updated>2012-07-20T15:48:57Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Journal does not start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320| sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81331</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81331"/>
		<updated>2012-07-20T14:30:20Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.&lt;br /&gt;
&lt;br /&gt;
gtk_tree_view_column_set_attributes () is not introspectable . I have a workaround working, as it is just wrapping gtk_tree_view_column_add_attribute () but better is to add an override in pygobect,  [https://bugzilla.gnome.org/show_bug.cgi?id=680320|sent a patch].&lt;br /&gt;
&lt;br /&gt;
Current issue: &#039;gi.repository.Gio&#039; object has no attribute &#039;volume_monitor_get&#039;.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking&lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81262</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81262"/>
		<updated>2012-07-19T17:34:09Z</updated>

		<summary type="html">&lt;p&gt;Manuq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===Battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===Menu palettes===&lt;br /&gt;
They 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;
===Keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Journal does not start===&lt;br /&gt;
&lt;br /&gt;
The custom tree model of the Journal is being ported ([[Features/GTK3/Shell#Custom_tree_model_for_journal|see dsd notes]]).  Gonzalo provided an initial patch, and I&#039;m working over it.  Current issue: gtk_tree_view_column_set_attributes () is not introspectable . A workaround is possible, but better is to add an override in pygobect.&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking &lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81252</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81252"/>
		<updated>2012-07-19T15:14:58Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* Current issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===battery deviceicon issue===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===menu palettes===&lt;br /&gt;
They 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;
===keybindings do not work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* journal does not start&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking &lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81230</id>
		<title>Features/GTK3/Shell/GTK3 Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/GTK3/Shell/GTK3_Port&amp;diff=81230"/>
		<updated>2012-07-19T00:02:18Z</updated>

		<summary type="html">&lt;p&gt;Manuq: /* keybindings do not work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manuq started the port of the shell branching the [[Features/GTK3/Shell/Hippo_Removal|hippo removal]].  The [[Features/GTK3/Shell|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 [http://git.sugarlabs.org/~dnarvaez/sugar-build/manuqs-shell-port 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;
==Current issues==&lt;br /&gt;
&lt;br /&gt;
===battery deviceicon isse===&lt;br /&gt;
Gives OverflowError while registering property &#039;time-remaining&#039; https://bugzilla.gnome.org/show_bug.cgi?id=680005&lt;br /&gt;
&lt;br /&gt;
===menu palettes===&lt;br /&gt;
They 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;
===keybindings do n ot work===&lt;br /&gt;
&lt;br /&gt;
Solved the switch from xklavier to introspectable Xkl. I&#039;ve learn how to use it looking at  [http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py|this testcase].  Found that the constructor is giving a segfault and [https://bugzilla.gnome.org/show_bug.cgi?id=680202|reported a bug].  However, The keyboard is not set up yet because GConf.Client.get_list is not introspectable.  Also see [[Features/GTK3/Shell#xklavier|dsd notes]].&lt;br /&gt;
&lt;br /&gt;
===Other issues===&lt;br /&gt;
* journal does not start&lt;br /&gt;
* control panel does not open, crashes sugar&lt;br /&gt;
* home, list view not being displayed&lt;br /&gt;
* launch screen does not go away&lt;br /&gt;
* activity icon in the frame does not stop blinking &lt;br /&gt;
* buddy icon in home view and network view is some pixels above the center (maybe because is being set in the wrong grid cell)&lt;br /&gt;
* the corners of the frame have grey color&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;
* home, favorites view, random layout, can&#039;t drag icons&lt;/div&gt;</summary>
		<author><name>Manuq</name></author>
	</entry>
</feed>