Line 25: |
Line 25: |
| | | |
| * Sugar CellRendererIcon has too much logic inside. It should only handle how to render itself. | | * Sugar CellRendererIcon has too much logic inside. It should only handle how to render itself. |
| + | In particular, a CellRenderer is not a Widget, then do not have event to know when the mouse interact, |
| + | then needed attach to the events on the treeview [https://github.com/sugarlabs/sugar-toolkit-gtk3/blob/master/src/sugar3/graphics/icon.py#L826] |
| | | |
| * Sugar CellRendererIcon is connected to many signals. Just detaching them while scrolling provides a performance boost. | | * Sugar CellRendererIcon is connected to many signals. Just detaching them while scrolling provides a performance boost. |
Line 30: |
Line 32: |
| * Sugar CellRendererIcon could benefit from caching values instead of calculating them on each render. | | * Sugar CellRendererIcon could benefit from caching values instead of calculating them on each render. |
| | | |
− | We couldn't find what's wrong with the Journal. We guess there is a DBus blocking call, but we could't confirm that.
| + | * There are a additional block in the Journal. That is not addressed by this feature, we guess there is a DBus blocking call, |
| + | but we could't confirm that. |
| + | |
| + | === Implementation === |
| + | |
| + | * ScrollingDetector: A new class ScrollingDetector allow simplify slow operations while the treeview is scrolling. |
| + | To use it, just do: |
| + | |
| + | scrolling_detector = ScrollingDetector(self._scrolled_window) |
| + | scrolling_detector.connect_treeview(self._tree_view) |
| + | |
| + | * CellRendererIcon changes: |
| + | |
| + | The CellRendererIcon is not a widget, then, do not receive events when the mouse |
| + | enter or leaves, and all the logic in the CellRendererInvoker is more complex than should be. |
| + | Worst, we had 6 different CellRendererIcons in the Journal, then we simplified (and solved issues) implementing a |
| + | TreeViewInvoker. The TreeView knows where is every cell then the code is much more simple. |
| + | |
| + | The ObjectPalettes was created in the mouse enter callback, then if a user moved |
| + | the mouse cursor over the activity icons, many palettes were created, and that palette creation is expensive [http://bugs.sugarlabs.org/ticket/4343]. |
| + | Moving the palette creation to the treeview, we can create the palette when the mouse was in a cell for a specified timeout and not before. |
| | | |
| === GTK+ concepts === | | === GTK+ concepts === |
Line 39: |
Line 61: |
| | | |
| * GtkCellRenderer — An object for rendering a single cell https://developer.gnome.org/gtk3/stable/GtkCellRenderer | | * GtkCellRenderer — An object for rendering a single cell https://developer.gnome.org/gtk3/stable/GtkCellRenderer |
− |
| |
| | | |
| == Benefit to Sugar == | | == Benefit to Sugar == |