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
	 Aleksey Lim
						Aleksey Lim