bool XournalView::onKeyPressEvent(GdkEventKey* event) { XOJ_CHECK_TYPE(XournalView); size_t p = getCurrentPage(); if (p != size_t_npos && p < this->viewPagesLen) { PageView* v = this->viewPages[p]; if (v->onKeyPressEvent(event)) { return true; } } // Esc leaves fullscreen mode if (event->keyval == GDK_Escape || event->keyval == GDK_F11) { if (control->isFullscreen()) { control->enableFullscreen(false); return true; } } // F5 starts presentation modus if (event->keyval == GDK_F5) { if (!control->isFullscreen()) { control->enableFullscreen(true, true); return true; } } guint state = event->state & gtk_accelerator_get_default_mod_mask(); Layout* layout = gtk_xournal_get_layout(this->widget); if (state & GDK_SHIFT_MASK) { GtkAllocation alloc = { 0 }; gtk_widget_get_allocation(gtk_widget_get_parent(this->widget), &alloc); int windowHeight = alloc.height - scrollKeySize; if (event->keyval == GDK_Page_Down) { layout->scrollRelativ(0, windowHeight); return true; } if (event->keyval == GDK_Page_Up) { layout->scrollRelativ(0, -windowHeight); return true; } } else { if (event->keyval == GDK_Page_Down) { control->getScrollHandler()->goToNextPage(); return true; } if (event->keyval == GDK_Page_Up) { control->getScrollHandler()->goToPreviousPage(); return true; } } if (event->keyval == GDK_Up) { if (control->getSettings()->isPresentationMode()) { control->getScrollHandler()->goToPreviousPage(); return true; } else { layout->scrollRelativ(0, -scrollKeySize); return true; } } if (event->keyval == GDK_Down) { if (control->getSettings()->isPresentationMode()) { control->getScrollHandler()->goToNextPage(); return true; } else { layout->scrollRelativ(0, scrollKeySize); return true; } } if (event->keyval == GDK_Left) { layout->scrollRelativ(-scrollKeySize, 0); return true; } if (event->keyval == GDK_Right) { layout->scrollRelativ(scrollKeySize, 0); return true; } if (event->keyval == GDK_End) { control->getScrollHandler()->goToLastPage(); return true; } if (event->keyval == GDK_Home) { control->getScrollHandler()->goToFirstPage(); return true; } return false; }