diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-02-22 21:51:24 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-02-22 21:51:24 (GMT) |
commit | 6756c00917fec4892444fa8dfd70dee99c99f291 (patch) | |
tree | 5c2b077f3064bf4e27bc8d250b5e067f64121d56 /shell/view/frame/framepopupcontext.py | |
parent | 7ef6283ac4b7833982d864a92992efa188546238 (diff) |
Added tooltips to CanvasIcon and implement popup positioning in the Frame.
Diffstat (limited to 'shell/view/frame/framepopupcontext.py')
-rw-r--r-- | shell/view/frame/framepopupcontext.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/shell/view/frame/framepopupcontext.py b/shell/view/frame/framepopupcontext.py index cf35293..b4b5c09 100644 --- a/shell/view/frame/framepopupcontext.py +++ b/shell/view/frame/framepopupcontext.py @@ -14,13 +14,52 @@ # License along with this library; if not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. +import logging + import gobject +import gtk import hippo from sugar.graphics.popupcontext import PopupContext +from sugar.graphics import units class FramePopupContext(PopupContext): __gtype_name__ = 'SugarFramePopupContext' def __init__(self): PopupContext.__init__(self) + + def get_position(self, control, popup): + [item_x, item_y] = control.get_context().translate_to_screen(control) + [item_w, item_h] = control.get_allocation() + [popup_w, popup_h] = popup.get_request() + + left_x = item_x + item_w + left_y = item_y + right_x = item_x + item_w + right_y = item_y + top_x = item_x + top_y = item_y + item_h + bottom_x = item_x + bottom_y = item_y - popup_h + + grid_size = units.grid_to_pixels(1) + if item_x < grid_size: + [x, y] = [left_x, left_y] + elif item_x >= (gtk.gdk.screen_width() - grid_size): + [x, y] = [right_x, right_y] + elif item_y < grid_size: + [x, y] = [top_x, top_y] + elif item_y >= (gtk.gdk.screen_height() - grid_size): + [x, y] = [bottom_x, bottom_y] + else: + logging.error('Item not in the frame!') + return [None, None] + + x = min(x, gtk.gdk.screen_width() - popup_w) + x = max(0, x) + + y = min(y, gtk.gdk.screen_height() - popup_h) + y = max(0, y) + + return [x, y] |