diff options
Diffstat (limited to 'grc/gui/Notebook.py')
-rw-r--r-- | grc/gui/Notebook.py | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/grc/gui/Notebook.py b/grc/gui/Notebook.py index e78b748326..ef08961036 100644 --- a/grc/gui/Notebook.py +++ b/grc/gui/Notebook.py @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA from __future__ import absolute_import import os +import logging from gi.repository import Gtk, Gdk, GObject @@ -28,15 +29,24 @@ from .Constants import MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT from .DrawingArea import DrawingArea +log = logging.getLogger(__name__) + + class Notebook(Gtk.Notebook): def __init__(self): Gtk.Notebook.__init__(self) - + log.debug("notebook()") + self.app = Gtk.Application.get_default() self.current_page = None + self.set_show_border(False) self.set_scrollable(True) self.connect('switch-page', self._handle_page_change) + self.add_events(Gdk.EventMask.SCROLL_MASK) + self.connect('scroll-event', self._handle_scroll) + self._ignore_consecutive_scrolls = 0 + def _handle_page_change(self, notebook, page, page_num): """ Handle a page change. When the user clicks on a new tab, @@ -51,6 +61,26 @@ class Notebook(Gtk.Notebook): self.current_page = self.get_nth_page(page_num) Actions.PAGE_CHANGE() + def _handle_scroll(self, widget, event): + # Not sure how to handle this at the moment. + natural = True + # Slow it down + if self._ignore_consecutive_scrolls == 0: + if event.direction in (Gdk.ScrollDirection.UP, Gdk.ScrollDirection.LEFT): + if natural: + self.prev_page() + else: + self.next_page() + elif event.direction in (Gdk.ScrollDirection.DOWN, Gdk.ScrollDirection.RIGHT): + if natural: + self.next_page() + else: + self.prev_page() + self._ignore_consecutive_scrolls = 3 + else: + self._ignore_consecutive_scrolls -= 1 + return False + class Page(Gtk.HBox): """A page in the notebook.""" @@ -99,20 +129,12 @@ class Page(Gtk.HBox): self.scrolled_window = Gtk.ScrolledWindow() self.scrolled_window.set_size_request(MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT) self.scrolled_window.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS) - self.scrolled_window.connect('key-press-event', self._handle_scroll_window_key_press) + self.scrolled_window.add(self.drawing_area) self.pack_start(self.scrolled_window, True, True, 0) - self.show_all() - def _handle_scroll_window_key_press(self, widget, event): - """forward Ctrl-PgUp/Down to NotebookPage (switch fg instead of horiz. scroll""" - is_ctrl_pg = ( - event.state & Gdk.ModifierType.CONTROL_MASK and - event.keyval in (Gdk.KEY_Page_Up, Gdk.KEY_Page_Down) - ) - if is_ctrl_pg: - return self.get_parent().event(event) + def get_generator(self): """ |