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._menu_box = None
|
||||||
self._content = None
|
self._content = None
|
||||||
self._palette_popup_sid = None
|
self._palette_popup_sid = None
|
||||||
self._enter_invoker_hid = None
|
self._invoker_hids = []
|
||||||
self._leave_invoker_hid = None
|
|
||||||
self._right_click_invoker_hid = None
|
|
||||||
|
|
||||||
self.set_group_id("default")
|
self.set_group_id("default")
|
||||||
|
|
||||||
@ -312,21 +310,27 @@ class Palette(gtk.Window):
|
|||||||
return gtk.gdk.Rectangle(x, y, width, height)
|
return gtk.gdk.Rectangle(x, y, width, height)
|
||||||
|
|
||||||
def _set_invoker(self, invoker):
|
def _set_invoker(self, invoker):
|
||||||
if self._invoker is not None:
|
for hid in self._invoker_hids[:]:
|
||||||
self._invoker.disconnect(self._enter_invoker_hid)
|
self._invoker.disconnect(hid)
|
||||||
self._invoker.disconnect(self._leave_invoker_hid)
|
self._invoker_hids.remove(hid)
|
||||||
self._invoker.disconnect(self._right_click_invoker_hid)
|
|
||||||
|
|
||||||
self._invoker = invoker
|
self._invoker = invoker
|
||||||
if invoker is not None:
|
if invoker is not None:
|
||||||
self._enter_invoker_hid = self._invoker.connect(
|
self._invoker_hids.append(self._invoker.connect(
|
||||||
'mouse-enter', self._invoker_mouse_enter_cb)
|
'mouse-enter', self._invoker_mouse_enter_cb))
|
||||||
self._leave_invoker_hid = self._invoker.connect(
|
self._invoker_hids.append(self._invoker.connect(
|
||||||
'mouse-leave', self._invoker_mouse_leave_cb)
|
'mouse-leave', self._invoker_mouse_leave_cb))
|
||||||
self._right_click_invoker_hid = self._invoker.connect(
|
self._invoker_hids.append(self._invoker.connect(
|
||||||
'right-click', self._invoker_right_click_cb)
|
'right-click', self._invoker_right_click_cb))
|
||||||
if hasattr(invoker.props, 'widget'):
|
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):
|
def set_primary_text(self, label, accel_path=None):
|
||||||
self._primary_text = label
|
self._primary_text = label
|
||||||
@ -611,6 +615,9 @@ class Palette(gtk.Window):
|
|||||||
|
|
||||||
self.popup(immediate=immediate)
|
self.popup(immediate=immediate)
|
||||||
|
|
||||||
|
def _invoker_widget_changed_cb(self, invoker, spec):
|
||||||
|
self._update_accel_widget()
|
||||||
|
|
||||||
def _invoker_mouse_enter_cb(self, invoker):
|
def _invoker_mouse_enter_cb(self, invoker):
|
||||||
self._mouse_detector.start()
|
self._mouse_detector.start()
|
||||||
|
|
||||||
@ -939,6 +946,8 @@ class WidgetInvoker(Invoker):
|
|||||||
else:
|
else:
|
||||||
self._widget = parent
|
self._widget = parent
|
||||||
|
|
||||||
|
self.notify('widget')
|
||||||
|
|
||||||
self._enter_hid = self._widget.connect('enter-notify-event',
|
self._enter_hid = self._widget.connect('enter-notify-event',
|
||||||
self.__enter_notify_event_cb)
|
self.__enter_notify_event_cb)
|
||||||
self._leave_hid = self._widget.connect('leave-notify-event',
|
self._leave_hid = self._widget.connect('leave-notify-event',
|
||||||
|
Loading…
Reference in New Issue
Block a user