From 290a0538926dd90266a4745155a73a1d76428f2a Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 05 Jul 2007 19:24:50 +0000 Subject: Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar --- (limited to 'sugar') diff --git a/sugar/graphics/Makefile.am b/sugar/graphics/Makefile.am index a945960..d906569 100644 --- a/sugar/graphics/Makefile.am +++ b/sugar/graphics/Makefile.am @@ -11,6 +11,7 @@ sugar_PYTHON = \ font.py \ frame.py \ notebook.py \ + menuitem.py \ objectchooser.py \ radiotoolbutton.py \ roundbox.py \ diff --git a/sugar/graphics/menuitem.py b/sugar/graphics/menuitem.py new file mode 100644 index 0000000..492f5f1 --- /dev/null +++ b/sugar/graphics/menuitem.py @@ -0,0 +1,28 @@ +# Copyright (C) 2007, Eduardo Silva +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# 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 gtk +from sugar.graphics.icon import Icon + +class MenuItem(gtk.ImageMenuItem): + def __init__(self, text_label, icon_name=None): + gtk.ImageMenuItem.__init__(self, text_label) + if icon_name: + icon = Icon(icon_name, gtk.ICON_SIZE_MENU) + self.set_image(icon) + icon.show() + diff --git a/sugar/graphics/palette.py b/sugar/graphics/palette.py index ef1a61c..3a816d5 100644 --- a/sugar/graphics/palette.py +++ b/sugar/graphics/palette.py @@ -55,6 +55,7 @@ class Palette(gobject.GObject): gobject.GObject.__init__(self) self._position = self.AUTOMATIC + self._palette_popup_sid = None self._popup_anim = animator.Animator(0.3, 10) self._popup_anim.add(_PopupAnimation(self)) @@ -202,9 +203,15 @@ class Palette(gobject.GObject): if not self._in_screen(x, y): x, y = self._get_position(_TOP_RIGHT) + self._palette_popup_sid = _palette_observer.connect('popup', + self._palette_observer_popup_cb) self._menu.popup(x, y) + _palette_observer.emit('popup', self) def _hide(self): + if not self._palette_popup_sid is None: + _palette_observer.disconnect(self._palette_popup_sid) + self._palette_popup_sid = None self._menu.popdown() def popup(self): @@ -234,6 +241,10 @@ class Palette(gobject.GObject): def _button_press_event_cb(self, widget, event): pass + def _palette_observer_popup_cb(self, observer, palette): + if self != palette: + self._hide() + class _PrimaryMenuItem(gtk.MenuItem): def __init__(self, label, accel_path): gtk.MenuItem.__init__(self) @@ -390,3 +401,15 @@ class CanvasInvoker(Invoker): self.notify_mouse_leave() return False + +class _PaletteObserver(gobject.GObject): + __gtype_name__ = 'SugarPaletteObserver' + + __gsignals__ = { + 'popup': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([object])) + } + + def __init__(self): + gobject.GObject.__init__(self) + +_palette_observer = _PaletteObserver() -- cgit v0.9.1