Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-10-05 15:46:36 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-10-05 15:46:36 (GMT)
commit0533d1ffd60f9f37e6606e0218b36eeeca79fef9 (patch)
tree41b0e18587e88ecd4da419513a2b33de055aa07e /shell
parent6479962ca7740a7784953ffcc6ce00544bd21004 (diff)
Rewrite for hippo
Diffstat (limited to 'shell')
-rw-r--r--shell/view/frame/MenuStrategy.py30
1 files changed, 20 insertions, 10 deletions
diff --git a/shell/view/frame/MenuStrategy.py b/shell/view/frame/MenuStrategy.py
index 34353f8..e95fffc 100644
--- a/shell/view/frame/MenuStrategy.py
+++ b/shell/view/frame/MenuStrategy.py
@@ -3,27 +3,37 @@ import hippo
from sugar.graphics.grid import Grid
class MenuStrategy:
- def get_menu_position(self, menu, item):
- [x, y] = item.get_context().translate_to_widget(item)
-
+ def _get_canvas(self, item):
canvas = item
while (not isinstance(canvas, hippo.Canvas)):
canvas = canvas.get_context()
+ return canvas
+
+ def _get_item_origin(self, canvas, item):
+ [x, y] = item.get_context().translate_to_widget(item)
[origin_x, origin_y] = canvas.window.get_origin()
x += origin_x
y += origin_y
- [width, height] = item.get_allocation()
+ return [x, y]
+
+ def get_menu_position(self, menu, item):
+ canvas = self._get_canvas(item)
- grid = Grid()
+ [x, y] = self._get_item_origin(canvas, item)
+ [width, height] = item.get_allocation()
- [grid_x1, grid_y1] = grid.fit_point(x, y)
- [grid_x2, grid_y2] = grid.fit_point(x + width, y + height)
+ [canvas_x, canvas_y] = canvas.window.get_origin()
+ canvas_rect = canvas.get_allocation()
+ [menu_w, menu_h] = menu.size_request()
- menu_grid_x = grid_x1
- menu_grid_y = grid_y2
+ menu_x = x
+ menu_y = y + height
- [menu_x, menu_y] = grid.point(menu_grid_x, menu_grid_y)
+ if (menu_x + menu_w > canvas_x) and \
+ (menu_y < canvas_y + canvas_rect.height):
+ menu_x = x - menu_w
+ menu_y = y
return [menu_x, menu_y]