From 4c1ec241f584adffc23af3fd5fa458017b081fd2 Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Sun, 22 Aug 2010 16:56:53 +0000
Subject: [PATCH] Accelerators doesn't work if toolitems are in sub-pallete in ToolbarBox #2220
---
src/sugar/graphics/toolbarbox.py | 13 +++++++++++++
src/sugar/graphics/toolbutton.py | 15 ++++++++++-----
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/src/sugar/graphics/toolbarbox.py b/src/sugar/graphics/toolbarbox.py
index b674e8d..720fbd4 100644
a
|
b
|
class ToolbarButton(ToolButton): |
36 | 36 | self.connect('clicked', |
37 | 37 | lambda widget: self.set_expanded(not self.is_expanded())) |
38 | 38 | |
| 39 | def do_hierarchy_changed(self, previous_toplevel): |
| 40 | # XXX Workaround for http://bugs.sugarlabs.org/ticket/2220 |
| 41 | # until implementing more robust scheme |
| 42 | |
| 43 | def update_accelerator(parent): |
| 44 | for child in parent.get_children(): |
| 45 | if hasattr(child, 'update_accelerator'): |
| 46 | child.update_accelerator(self.get_toplevel()) |
| 47 | if isinstance(child, gtk.Container): |
| 48 | update_accelerator(child) |
| 49 | |
| 50 | update_accelerator(self.props.page) |
| 51 | |
39 | 52 | def get_toolbar_box(self): |
40 | 53 | if not hasattr(self.parent, 'owner'): |
41 | 54 | return None |
diff --git a/src/sugar/graphics/toolbutton.py b/src/sugar/graphics/toolbutton.py
index f15e406..f2594ad 100644
a
|
b
|
from sugar.graphics.icon import Icon |
29 | 29 | from sugar.graphics.palette import Palette, ToolInvoker |
30 | 30 | |
31 | 31 | |
32 | | def _add_accelerator(tool_button): |
33 | | if not tool_button.props.accelerator or not tool_button.get_toplevel() or \ |
| 32 | def _add_accelerator(tool_button, toplevel): |
| 33 | if not tool_button.props.accelerator or not toplevel or \ |
34 | 34 | not tool_button.child: |
35 | 35 | return |
36 | 36 | |
37 | 37 | # TODO: should we remove the accelerator from the prev top level? |
38 | 38 | |
39 | | accel_group = tool_button.get_toplevel().get_data('sugar-accel-group') |
| 39 | accel_group = toplevel.get_data('sugar-accel-group') |
40 | 40 | if not accel_group: |
41 | 41 | logging.warning('No gtk.AccelGroup in the top level window.') |
42 | 42 | return |
… |
… |
def _add_accelerator(tool_button): |
49 | 49 | |
50 | 50 | |
51 | 51 | def _hierarchy_changed_cb(tool_button, previous_toplevel): |
52 | | _add_accelerator(tool_button) |
| 52 | _add_accelerator(tool_button, tool_button.get_toplevel()) |
53 | 53 | |
54 | 54 | |
55 | 55 | def setup_accelerator(tool_button): |
56 | | _add_accelerator(tool_button) |
| 56 | _add_accelerator(tool_button, tool_button.get_toplevel()) |
57 | 57 | tool_button.connect('hierarchy-changed', _hierarchy_changed_cb) |
58 | 58 | |
59 | 59 | |
… |
… |
class ToolButton(gtk.ToolButton): |
105 | 105 | tooltip = gobject.property(type=str, setter=set_tooltip, |
106 | 106 | getter=get_tooltip) |
107 | 107 | |
| 108 | def update_accelerator(self, toplevel): |
| 109 | # XXX Workaround for http://bugs.sugarlabs.org/ticket/2220 |
| 110 | # until implementing more robust scheme |
| 111 | _add_accelerator(self, toplevel) |
| 112 | |
108 | 113 | def set_accelerator(self, accelerator): |
109 | 114 | self._accelerator = accelerator |
110 | 115 | setup_accelerator(self) |