From eb7b25bb660dd74e8c6360d2e2f2df3d1c3bf7c5 Mon Sep 17 00:00:00 2001
From: Simon Schampijer <simon@laptop.org>
Date: Mon, 22 Oct 2012 18:42:30 +0200
Subject: [PATCH toolkit-gtk3] Add toggle_palette property for Palette
invoker, SL #4065
The property does specify whether the invoker will popup/popdown
the Palette on button left click/touch tap. It defaults to False.
In the toolbutton we remove the popdown on do_clicked to not
interact badly with that new property. That should be handled
in the invoker now.
Signed-off-by: Simon Schampijer <simon@laptop.org>
---
src/sugar3/graphics/palette.py | 3 ---
src/sugar3/graphics/palettewindow.py | 36 ++++++++++++++++++++++++++++++++++--
src/sugar3/graphics/toolbutton.py | 4 ----
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/src/sugar3/graphics/palette.py b/src/sugar3/graphics/palette.py
index 284c84b..fe4440b 100644
a
|
b
|
class Palette(PaletteWindow): |
179 | 179 | PaletteWindow._setup_widget(self) |
180 | 180 | self._widget.connect('destroy', self.__destroy_cb) |
181 | 181 | |
182 | | def _invoker_right_click_cb(self, invoker): |
183 | | self.popup(immediate=True, state=self.SECONDARY) |
184 | | |
185 | 182 | def __destroy_cb(self, palette): |
186 | 183 | self._secondary_anim.stop() |
187 | 184 | self.popdown(immediate=True) |
diff --git a/src/sugar3/graphics/palettewindow.py b/src/sugar3/graphics/palettewindow.py
index 4d45dbf..3be7fab 100644
a
|
b
|
class PaletteWindow(GObject.GObject): |
510 | 510 | 'mouse-leave', self._invoker_mouse_leave_cb)) |
511 | 511 | self._invoker_hids.append(self._invoker.connect( |
512 | 512 | 'right-click', self._invoker_right_click_cb)) |
| 513 | self._invoker_hids.append(self._invoker.connect( |
| 514 | 'toggle-state', self._invoker_toggle_state_cb)) |
513 | 515 | |
514 | 516 | def get_invoker(self): |
515 | 517 | return self._invoker |
… |
… |
class PaletteWindow(GObject.GObject): |
626 | 628 | self.on_invoker_leave() |
627 | 629 | |
628 | 630 | def _invoker_right_click_cb(self, invoker): |
629 | | self.popup(immediate=True) |
| 631 | self.popup(immediate=True, state=1) |
| 632 | |
| 633 | def _invoker_toggle_state_cb(self, invoker): |
| 634 | if self.is_up(): |
| 635 | self.popdown(immediate=True) |
| 636 | else: |
| 637 | self.popup(immediate=True, state=1) |
630 | 638 | |
631 | 639 | def __enter_notify_cb(self, widget): |
632 | 640 | self.on_enter() |
… |
… |
class Invoker(GObject.GObject): |
706 | 714 | 'mouse-enter': (GObject.SignalFlags.RUN_FIRST, None, ([])), |
707 | 715 | 'mouse-leave': (GObject.SignalFlags.RUN_FIRST, None, ([])), |
708 | 716 | 'right-click': (GObject.SignalFlags.RUN_FIRST, None, ([])), |
| 717 | 'toggle-state': (GObject.SignalFlags.RUN_FIRST, None, ([])), |
709 | 718 | 'focus-out': (GObject.SignalFlags.RUN_FIRST, None, ([])), |
710 | 719 | } |
711 | 720 | |
… |
… |
class Invoker(GObject.GObject): |
731 | 740 | self._cursor_y = -1 |
732 | 741 | self._palette = None |
733 | 742 | self._cache_palette = True |
| 743 | self._toggle_palette = False |
734 | 744 | |
735 | 745 | def attach(self, parent): |
736 | 746 | self.parent = parent |
… |
… |
class Invoker(GObject.GObject): |
917 | 927 | self._ensure_palette_exists() |
918 | 928 | self.emit('right-click') |
919 | 929 | |
| 930 | def notify_toggle_state(self): |
| 931 | self._ensure_palette_exists() |
| 932 | self.emit('toggle-state') |
| 933 | |
920 | 934 | def get_palette(self): |
921 | 935 | return self._palette |
922 | 936 | |
… |
… |
class Invoker(GObject.GObject): |
953 | 967 | to True. |
954 | 968 | """ |
955 | 969 | |
| 970 | def get_toggle_palette(self): |
| 971 | return self._toggle_palette |
| 972 | |
| 973 | def set_toggle_palette(self, toggle_palette): |
| 974 | self._toggle_palette = toggle_palette |
| 975 | |
| 976 | toggle_palette = GObject.property(type=object, setter=set_toggle_palette, |
| 977 | getter=get_toggle_palette) |
| 978 | """Whether the invoker will popup/popdown the Palette on |
| 979 | button left click/touch tap. Defaults to False. |
| 980 | """ |
| 981 | |
956 | 982 | def __palette_popdown_cb(self, palette): |
957 | 983 | if not self.props.cache_palette: |
958 | 984 | self.set_palette(None) |
… |
… |
class WidgetInvoker(Invoker): |
1040 | 1066 | self.notify_mouse_leave() |
1041 | 1067 | |
1042 | 1068 | def __button_release_event_cb(self, widget, event): |
1043 | | if event.button == 3: |
| 1069 | if event.button == 1: |
| 1070 | if self.props.toggle_palette: |
| 1071 | self.notify_toggle_state() |
| 1072 | elif event.button == 3: |
1044 | 1073 | self.notify_right_click() |
1045 | 1074 | return True |
1046 | 1075 | else: |
… |
… |
class CursorInvoker(Invoker): |
1115 | 1144 | return False |
1116 | 1145 | |
1117 | 1146 | def __button_release_event_cb(self, button, event): |
| 1147 | if event.button == 1: |
| 1148 | if self.props.toggle_palette: |
| 1149 | self.notify_toggle_state() |
1118 | 1150 | if event.button == 3: |
1119 | 1151 | self.notify_right_click() |
1120 | 1152 | return True |
diff --git a/src/sugar3/graphics/toolbutton.py b/src/sugar3/graphics/toolbutton.py
index 265153d..4540ba1 100644
a
|
b
|
class ToolButton(Gtk.ToolButton): |
166 | 166 | invoker.draw_rectangle(cr, self.palette) |
167 | 167 | |
168 | 168 | return False |
169 | | |
170 | | def do_clicked(self): |
171 | | if self.palette: |
172 | | self.palette.popdown(True) |