Make Palette handle changes of the invoker widget. Fix #7881
This commit is contained in:
parent
5cf5e91d69
commit
bd264577e7
@ -244,9 +244,7 @@ class Palette(gtk.Window):
|
||||
self._menu_box = None
|
||||
self._content = None
|
||||
self._palette_popup_sid = None
|
||||
self._enter_invoker_hid = None
|
||||
self._leave_invoker_hid = None
|
||||
self._right_click_invoker_hid = None
|
||||
self._invoker_hids = []
|
||||
|
||||
self.set_group_id("default")
|
||||
|
||||
@ -312,21 +310,27 @@ class Palette(gtk.Window):
|
||||
return gtk.gdk.Rectangle(x, y, width, height)
|
||||
|
||||
def _set_invoker(self, invoker):
|
||||
if self._invoker is not None:
|
||||
self._invoker.disconnect(self._enter_invoker_hid)
|
||||
self._invoker.disconnect(self._leave_invoker_hid)
|
||||
self._invoker.disconnect(self._right_click_invoker_hid)
|
||||
for hid in self._invoker_hids[:]:
|
||||
self._invoker.disconnect(hid)
|
||||
self._invoker_hids.remove(hid)
|
||||
|
||||
self._invoker = invoker
|
||||
if invoker is not None:
|
||||
self._enter_invoker_hid = self._invoker.connect(
|
||||
'mouse-enter', self._invoker_mouse_enter_cb)
|
||||
self._leave_invoker_hid = self._invoker.connect(
|
||||
'mouse-leave', self._invoker_mouse_leave_cb)
|
||||
self._right_click_invoker_hid = self._invoker.connect(
|
||||
'right-click', self._invoker_right_click_cb)
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'mouse-enter', self._invoker_mouse_enter_cb))
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'mouse-leave', self._invoker_mouse_leave_cb))
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'right-click', self._invoker_right_click_cb))
|
||||
if hasattr(invoker.props, 'widget'):
|
||||
self._label.props.accel_widget = invoker.props.widget
|
||||
self._update_accel_widget()
|
||||
logging.debug(('Setup widget', invoker.props.widget))
|
||||
self._invoker_hids.append(self._invoker.connect(
|
||||
'notify::widget', self._invoker_widget_changed_cb))
|
||||
|
||||
def _update_accel_widget(self):
|
||||
assert self.props.invoker is not None
|
||||
self._label.props.accel_widget = self.props.invoker.props.widget
|
||||
|
||||
def set_primary_text(self, label, accel_path=None):
|
||||
self._primary_text = label
|
||||
@ -611,6 +615,9 @@ class Palette(gtk.Window):
|
||||
|
||||
self.popup(immediate=immediate)
|
||||
|
||||
def _invoker_widget_changed_cb(self, invoker, spec):
|
||||
self._update_accel_widget()
|
||||
|
||||
def _invoker_mouse_enter_cb(self, invoker):
|
||||
self._mouse_detector.start()
|
||||
|
||||
@ -939,6 +946,8 @@ class WidgetInvoker(Invoker):
|
||||
else:
|
||||
self._widget = parent
|
||||
|
||||
self.notify('widget')
|
||||
|
||||
self._enter_hid = self._widget.connect('enter-notify-event',
|
||||
self.__enter_notify_event_cb)
|
||||
self._leave_hid = self._widget.connect('leave-notify-event',
|
||||
|
Loading…
Reference in New Issue
Block a user