Do not hide sub-widget when sub-palette was opened
This commit is contained in:
parent
44a8ecd836
commit
5d2c5b98ff
@ -1,5 +1,6 @@
|
||||
import gtk
|
||||
|
||||
from sugar.graphics.toolbutton import ToolButton
|
||||
from sugar.graphics.toolbar import Toolbar, ToolbarButton
|
||||
from sugar.graphics import style
|
||||
|
||||
@ -33,5 +34,17 @@ tollbarbutton_3 = ToolbarButton(
|
||||
icon_name='activity-journal')
|
||||
toolbar.top.insert(tollbarbutton_3, -1)
|
||||
|
||||
subbar = gtk.Toolbar()
|
||||
subbutton = ToolButton(
|
||||
icon_name='document-send',
|
||||
tooltip='document-send')
|
||||
subbar.insert(subbutton, -1)
|
||||
subbar.show_all()
|
||||
|
||||
tollbarbutton_4 = ToolbarButton(
|
||||
page=subbar,
|
||||
icon_name='document-save')
|
||||
toolbar.top.insert(tollbarbutton_4, -1)
|
||||
|
||||
window.show_all()
|
||||
gtk.main()
|
||||
|
@ -23,6 +23,7 @@ from sugar.graphics.toolbutton import ToolButton
|
||||
from sugar.graphics.palette import _PopupAnimation, _PopdownAnimation
|
||||
from sugar.graphics.palette import MouseSpeedDetector, Invoker
|
||||
from sugar.graphics import animator
|
||||
from sugar.graphics import palettegroup
|
||||
|
||||
class ToolbarButton(ToolButton):
|
||||
def __init__(self, **kwargs):
|
||||
@ -213,6 +214,7 @@ class _Palette(gtk.Window):
|
||||
self._invoker = None
|
||||
self._up = False
|
||||
self._invoker_hids = []
|
||||
self.__focus = 0
|
||||
|
||||
self._popup_anim = animator.Animator(.5, 10)
|
||||
self._popup_anim.add(_PopupAnimation(self))
|
||||
@ -233,6 +235,9 @@ class _Palette(gtk.Window):
|
||||
self._mouse_detector = MouseSpeedDetector(self, 200, 5)
|
||||
self._mouse_detector.connect('motion-slow', self._mouse_slow_cb)
|
||||
|
||||
group = palettegroup.get_group('default')
|
||||
group.connect('popdown', self.__group_popdown_cb)
|
||||
|
||||
def is_up(self):
|
||||
return self._up
|
||||
|
||||
@ -255,11 +260,11 @@ class _Palette(gtk.Window):
|
||||
self._invoker = invoker
|
||||
if invoker is not None:
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'mouse-enter', self._invoker_mouse_enter_cb))
|
||||
'mouse-enter', self.__invoker_mouse_enter_cb))
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'mouse-leave', self._invoker_mouse_leave_cb))
|
||||
'mouse-leave', self.__invoker_mouse_leave_cb))
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'right-click', self._invoker_right_click_cb))
|
||||
'right-click', self.__invoker_right_click_cb))
|
||||
|
||||
def get_invoker(self):
|
||||
return self._invoker
|
||||
@ -321,25 +326,41 @@ class _Palette(gtk.Window):
|
||||
|
||||
self.popup(immediate=False)
|
||||
|
||||
def _invoker_mouse_enter_cb(self, invoker):
|
||||
def __handle_focus(self, delta):
|
||||
self.__focus += delta
|
||||
if self.__focus not in (0, 1):
|
||||
logging.error('_Palette.__focus=%s not in (0, 1)' % self.__focus)
|
||||
|
||||
if self.__focus == 0:
|
||||
group = palettegroup.get_group('default')
|
||||
if not group.is_up():
|
||||
self.popdown()
|
||||
|
||||
def __group_popdown_cb(self, group):
|
||||
if self.__focus == 0:
|
||||
self.popdown(immediate=True)
|
||||
|
||||
def __invoker_mouse_enter_cb(self, invoker):
|
||||
self._mouse_detector.start()
|
||||
self.__handle_focus(+1)
|
||||
|
||||
def _invoker_mouse_leave_cb(self, invoker):
|
||||
def __invoker_mouse_leave_cb(self, invoker):
|
||||
self._mouse_detector.stop()
|
||||
self.popdown()
|
||||
self.__handle_focus(-1)
|
||||
|
||||
def _invoker_right_click_cb(self, invoker):
|
||||
def __invoker_right_click_cb(self, invoker):
|
||||
self.popup(immediate=True)
|
||||
|
||||
def __enter_notify_event_cb(self, widget, event):
|
||||
if event.detail != gtk.gdk.NOTIFY_INFERIOR and \
|
||||
event.mode == gtk.gdk.CROSSING_NORMAL:
|
||||
self._popdown_anim.stop()
|
||||
self.__handle_focus(+1)
|
||||
|
||||
def __leave_notify_event_cb(self, widget, event):
|
||||
if event.detail != gtk.gdk.NOTIFY_INFERIOR and \
|
||||
event.mode == gtk.gdk.CROSSING_NORMAL:
|
||||
self.popdown()
|
||||
self.__handle_focus(-1)
|
||||
|
||||
def __show_cb(self, widget):
|
||||
self._invoker.notify_popup()
|
||||
|
Loading…
Reference in New Issue
Block a user