Do not trigger events on EventIcons when button release is outside - #4863

The industry convention for mouse driven menu options is for them
to be activated when two conditions are met:
* a button down event occurs with the pointer inside the option, and;
* a button up event occurs with the pointer inside the option.

This issue was already solved on the PaletteMenuItem,
but the EventIcon have the same problem. This change add a 'activate' event,
that control that the two conditions are meet.
The code in Sugar need use this event instead of button-release-event.
This commit is contained in:
Gonzalo Odiard 2015-07-24 11:19:57 -03:00
parent 9fc5b49329
commit a19cf9ed27

View File

@ -557,6 +557,10 @@ class EventIcon(Gtk.EventBox):
cursor-positioned palette invoker. cursor-positioned palette invoker.
""" """
__gsignals__ = {
'activate': (GObject.SignalFlags.RUN_FIRST, None, []),
}
__gtype_name__ = 'SugarEventIcon' __gtype_name__ = 'SugarEventIcon'
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -569,6 +573,7 @@ class EventIcon(Gtk.EventBox):
self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK |
Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.TOUCH_MASK |
Gdk.EventMask.BUTTON_RELEASE_MASK) Gdk.EventMask.BUTTON_RELEASE_MASK)
self.connect('button-release-event', self.__button_release_event_cb)
for key, value in kwargs.iteritems(): for key, value in kwargs.iteritems():
self.set_property(key, value) self.set_property(key, value)
@ -756,6 +761,11 @@ class EventIcon(Gtk.EventBox):
self.set_palette(Palette(text)) self.set_palette(Palette(text))
def __button_release_event_cb(self, icon, event):
alloc = self.get_allocation()
if 0 < event.x < alloc.width and 0 < event.y < alloc.height:
self.emit('activate')
class CanvasIcon(EventIcon): class CanvasIcon(EventIcon):
""" """