Implement palette groups. Use them to not popdown frame when hover a palette.

master
Marco Pesenti Gritti 17 years ago
parent 9ec946d2d0
commit 7468faa840

@ -44,6 +44,8 @@ class ClipboardMenu(Palette):
self._percent = percent
self._activity = activity
self.set_group_id('frame')
if percent < 100:
self._progress_bar = gtk.ProgressBar()
self._update_progress_bar()

@ -18,6 +18,7 @@ import hippo
import logging
from sugar.graphics import units
from sugar.graphics.palette import Palette
from sugar.graphics.xocolor import XoColor
from sugar.graphics.iconbutton import IconButton
from sugar import profile
@ -27,7 +28,11 @@ from model import bundleregistry
class ActivityButton(IconButton):
def __init__(self, activity):
IconButton.__init__(self, icon_name=activity.get_icon())
self.set_tooltip(activity.get_name())
palette = Palette(activity.get_name())
palette.set_group_id('frame')
self.set_palette(palette)
self._activity = activity
def get_bundle_id(self):

@ -25,6 +25,7 @@ from model.BuddyModel import BuddyModel
class FriendIcon(BuddyIcon):
def __init__(self, shell, buddy):
BuddyIcon.__init__(self, shell, buddy)
self.get_palette().set_group_id('frame')
def prelight(self, enter):
if enter:

@ -20,6 +20,11 @@ import gtk
import gobject
import hippo
from sugar.graphics import animator
from sugar.graphics import units
from sugar.graphics import palettegroup
from sugar.clipboard import clipboardservice
from view.frame.eventarea import EventArea
from view.frame.ActivitiesBox import ActivitiesBox
from view.frame.ZoomBox import ZoomBox
@ -28,9 +33,6 @@ from view.frame.FriendsBox import FriendsBox
from view.frame.framewindow import FrameWindow
from view.frame.clipboardpanelwindow import ClipboardPanelWindow
from model.shellmodel import ShellModel
from sugar.graphics import animator
from sugar.graphics import units
from sugar.clipboard import clipboardservice
MODE_NONE = 0
MODE_MOUSE = 1
@ -126,6 +128,9 @@ class Frame(object):
self.mode = MODE_NONE
self.visible = False
self._palette_group = palettegroup.get_group('frame')
self._palette_group.connect('popdown', self._palette_group_popdown_cb)
self._left_panel = None
self._right_panel = None
self._top_panel = None
@ -309,10 +314,14 @@ class Frame(object):
if not self._hover:
return
if not self._is_hover():
if not self._is_hover() and not self._palette_group.is_up():
self._hover = False
self._mouse_listener.mouse_leave()
def _palette_group_popdown_cb(self, group):
if not self._is_hover():
self._mouse_listener.mouse_leave()
def _drag_motion_cb(self, window, context, x, y, time):
self._mouse_listener.mouse_enter()

@ -16,6 +16,7 @@ sugar_PYTHON = \
radiotoolbutton.py \
roundbox.py \
palette.py \
palettegroup.py \
panel.py \
spreadlayout.py \
toggletoolbutton.py \

@ -1,4 +1,4 @@
# Copyright (C) 2007, Eduardo Silva (edsiper@gmail.com)
# Copyright (C) 2007, Eduardo Silva <edsiper@gmail.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@ -22,6 +22,7 @@ import gobject
import time
import hippo
from sugar.graphics import palettegroup
from sugar.graphics import animator
from sugar.graphics import units
from sugar import _sugarext
@ -51,9 +52,18 @@ class Palette(gobject.GObject):
0, gobject.PARAM_READWRITE)
}
__gsignals__ = {
'popup' : (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([])),
'popdown' : (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([]))
}
def __init__(self, label, accel_path=None):
gobject.GObject.__init__(self)
self._group_id = None
self._up = False
self._position = self.AUTOMATIC
self._palette_popup_sid = None
@ -88,6 +98,9 @@ class Palette(gobject.GObject):
self._menu.connect('button-press-event',
self._button_press_event_cb)
def is_up(self):
return self._up
def set_primary_text(self, label, accel_path=None):
self._primary.set_label(label, accel_path)
@ -119,7 +132,15 @@ class Palette(gobject.GObject):
def append_button(self, button):
self._button_bar.append_button(button)
self._button_bar.show()
def set_group_id(self, group_id):
if self._group_id:
group = palettegroup.get_group(self._group_id)
group.remove(self)
if group_id:
group = palettegroup.get_group(group_id)
group.add(self)
def do_set_property(self, pspec, value):
if pspec.name == 'invoker':
self._invoker = value
@ -206,7 +227,10 @@ class Palette(gobject.GObject):
self._palette_popup_sid = _palette_observer.connect('popup',
self._palette_observer_popup_cb)
self._menu.popup(x, y)
self._up = True
_palette_observer.emit('popup', self)
self.emit('popup')
def _hide(self):
if not self._palette_popup_sid is None:
@ -214,6 +238,9 @@ class Palette(gobject.GObject):
self._palette_popup_sid = None
self._menu.popdown()
self._up = False
self.emit('popdown')
def popup(self):
self._popdown_anim.stop()
self._popup_anim.start()

Loading…
Cancel
Save