Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/frame/framepopupcontext.py
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-02-22 21:51:24 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-02-22 21:51:24 (GMT)
commit6756c00917fec4892444fa8dfd70dee99c99f291 (patch)
tree5c2b077f3064bf4e27bc8d250b5e067f64121d56 /shell/view/frame/framepopupcontext.py
parent7ef6283ac4b7833982d864a92992efa188546238 (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.py39
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]