diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py
index f9809e0..d1784b0 100644
a
|
b
|
from gi.repository import Gtk |
22 | 22 | from gi.repository import Gdk |
23 | 23 | from gi.repository import GdkX11 |
24 | 24 | |
| 25 | from gi.repository import SugarGestures |
| 26 | |
25 | 27 | from sugar3.graphics import style |
26 | 28 | from sugar3.graphics import palettegroup |
27 | 29 | |
… |
… |
class HomeWindow(Gtk.Window): |
99 | 101 | shell.get_model().zoom_level_changed.connect( |
100 | 102 | self.__zoom_level_changed_cb) |
101 | 103 | |
| 104 | x11_window = self.get_window() |
| 105 | x11_window.set_events(x11_window.get_events() | |
| 106 | Gdk.EventMask.POINTER_MOTION_MASK | |
| 107 | Gdk.EventMask.TOUCH_MASK) |
| 108 | |
| 109 | zoom_controller = SugarGestures.ZoomController() |
| 110 | zoom_controller.connect('scale-changed', self.__scale_changed_cb) |
| 111 | zoom_controller.connect('ended', self.__scale_ended_cb) |
| 112 | zoom_controller.attach(self, SugarGestures.EventControllerFlags.NONE) |
| 113 | |
| 114 | self._zoom_scale = None |
| 115 | |
102 | 116 | def _deactivate_view(self, level): |
103 | 117 | group = palettegroup.get_group('default') |
104 | 118 | group.popdown() |
… |
… |
class HomeWindow(Gtk.Window): |
194 | 208 | else: |
195 | 209 | self._update_view(new_level) |
196 | 210 | |
| 211 | def __scale_changed_cb(self, controller, scale): |
| 212 | self._zoom_scale = scale |
| 213 | |
| 214 | def __scale_ended_cb(self, controller): |
| 215 | if self._zoom_scale > 1.0: |
| 216 | shell.get_model().set_next_zoom_level() |
| 217 | |
| 218 | elif self._zoom_scale < 1.0: |
| 219 | shell.get_model().set_previous_zoom_level() |
| 220 | |
| 221 | self._zoom_scale = None |
| 222 | |
197 | 223 | def _transition_completed_cb(self, transition_box): |
198 | 224 | self._update_view(shell.get_model().zoom_level) |
199 | 225 | |
diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py
index 437ff90..b0ef267 100644
a
|
b
|
class ShellModel(GObject.GObject): |
351 | 351 | ZOOM_HOME = 2 |
352 | 352 | ZOOM_ACTIVITY = 3 |
353 | 353 | |
| 354 | _ZOOM_LEVELS = [ZOOM_MESH, ZOOM_GROUP, ZOOM_HOME, ZOOM_ACTIVITY] |
| 355 | |
354 | 356 | def __init__(self): |
355 | 357 | GObject.GObject.__init__(self) |
356 | 358 | |
… |
… |
class ShellModel(GObject.GObject): |
430 | 432 | |
431 | 433 | zoom_level = property(_get_zoom_level) |
432 | 434 | |
| 435 | def _get_zoom_level_by_index(self, idx): |
| 436 | # Use the modulo operator to iterate the list as a circular |
| 437 | # list. |
| 438 | return self._ZOOM_LEVELS[(idx) % len(self._ZOOM_LEVELS)] |
| 439 | |
| 440 | def set_previous_zoom_level(self): |
| 441 | new_level = self._get_zoom_level_by_index(self.zoom_level - 1) |
| 442 | self.set_zoom_level(new_level) |
| 443 | |
| 444 | def set_next_zoom_level(self): |
| 445 | new_level = self._get_zoom_level_by_index(self.zoom_level + 1) |
| 446 | self.set_zoom_level(new_level) |
| 447 | |
433 | 448 | def _get_activities_with_window(self): |
434 | 449 | ret = [] |
435 | 450 | for i in self._activities: |