vcl/unx/gtk3/gtk3gtkinst.cxx | 50 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-)
New commits: commit f6e0212285f48beab3c47a00e5b2f9549654a066 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Nov 28 11:50:19 2018 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Wed Nov 28 14:35:37 2018 +0100 Resolves: tdf#121752 let scroll wheel change active notebook tab Change-Id: If8437346a58ea14266f11293b94082740303e5a9 Reviewed-on: https://gerrit.libreoffice.org/64158 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 6eb623efe088..286206f7c4a5 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3012,6 +3012,7 @@ private: GtkNotebook* m_pNotebook; gulong m_nSwitchPageSignalId; gulong m_nSizeAllocateSignalId; + gulong m_nScrollSignalId; mutable std::vector<std::unique_ptr<GtkInstanceContainer>> m_aPages; static void signalSwitchPage(GtkNotebook*, GtkWidget*, guint nNewPage, gpointer widget) @@ -3033,6 +3034,50 @@ private: m_aEnterPageHdl.Call(sNewIdent); } + static gboolean signalScroll(GtkWidget*, GdkEventScroll* event, gpointer widget) + { + GtkInstanceNotebook* pThis = static_cast<GtkInstanceNotebook*>(widget); + return pThis->signal_scroll(event); + } + + bool signal_scroll(GdkEventScroll* event) + { + bool bNext(false), bPrev(false); + switch (event->direction) + { + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_DOWN: + bNext = true; + break; + case GDK_SCROLL_LEFT: + case GDK_SCROLL_UP: + bPrev = true; + break; + case GDK_SCROLL_SMOOTH: + { + switch (gtk_notebook_get_tab_pos(m_pNotebook)) + { + case GTK_POS_LEFT: + case GTK_POS_RIGHT: + bNext = event->delta_y > 0; + bPrev = event->delta_y < 0; + break; + case GTK_POS_TOP: + case GTK_POS_BOTTOM: + bNext = event->delta_x > 0; + bPrev = event->delta_x < 0; + break; + } + break; + } + } + if (bNext) + gtk_notebook_next_page(m_pNotebook); + else if (bPrev) + gtk_notebook_prev_page(m_pNotebook); + return true; + } + OString get_page_ident(guint nPage) const { const GtkWidget* pTabWidget = gtk_notebook_get_tab_label(m_pNotebook, gtk_notebook_get_nth_page(m_pNotebook, nPage)); @@ -3097,6 +3142,8 @@ public: , m_pNotebook(pNotebook) , m_nSwitchPageSignalId(g_signal_connect(pNotebook, "switch-page", G_CALLBACK(signalSwitchPage), this)) { + gtk_widget_add_events(GTK_WIDGET(pNotebook), GDK_SCROLL_MASK); + m_nScrollSignalId = g_signal_connect(pNotebook, "scroll-event", G_CALLBACK(signalScroll), this); if (get_n_pages() > 6) m_nSizeAllocateSignalId = g_signal_connect(pNotebook, "size-allocate", G_CALLBACK(signalSizeAllocate), this); else @@ -3188,9 +3235,10 @@ public: virtual ~GtkInstanceNotebook() override { - g_signal_handler_disconnect(m_pNotebook, m_nSwitchPageSignalId); if (m_nSizeAllocateSignalId) g_signal_handler_disconnect(m_pNotebook, m_nSizeAllocateSignalId); + g_signal_handler_disconnect(m_pNotebook, m_nScrollSignalId); + g_signal_handler_disconnect(m_pNotebook, m_nSwitchPageSignalId); } }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits