vcl/unx/gtk3/gtkinst.cxx | 52 +++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 17 deletions(-)
New commits: commit 7ffa58e3ab68c34d18f62ff29419a160f4e4c397 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Jun 29 17:39:53 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Tue Jun 29 20:20:09 2021 +0200 gtk[3|4] add a catch-all AnyInput for under X too which is needed for gtk4, enable it for gtk3 as well, if that turns out to be a problem for some reason then that's easily fixed Change-Id: Ie3a1875d7930f4db4ff03d085bae07f1646f6e36 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118127 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 3b4f9afbf1b9..e8a1c3862626 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -428,27 +428,15 @@ bool GtkInstance::IsTimerExpired() return (m_pTimer && m_pTimer->Expired()); } -bool GtkInstance::AnyInput( VclInputFlags nType ) +namespace { - EnsureInit(); - if( (nType & VclInputFlags::TIMER) && IsTimerExpired() ) - return true; - - // strip timer bits now - nType = nType & ~VclInputFlags::TIMER; - - static constexpr VclInputFlags ANY_INPUT_EXCLUDING_TIMER = VCL_INPUT_ANY & ~VclInputFlags::TIMER; - - const bool bCheckForAnyInput = nType == ANY_INPUT_EXCLUDING_TIMER; - - bool bRet = false; - -#if defined(GDK_WINDOWING_WAYLAND) - if (bCheckForAnyInput) + bool DisplayHasAnyInput() { GdkDisplay* pDisplay = gdk_display_get_default(); +#if defined(GDK_WINDOWING_WAYLAND) if (DLSYM_GDK_IS_WAYLAND_DISPLAY(pDisplay)) { + bool bRet = false; wl_display* pWLDisplay = gdk_wayland_display_get_wl_display(pDisplay); static auto wayland_display_get_fd = reinterpret_cast<int (*) (wl_display*)>(dlsym(nullptr, "wl_display_get_fd")); if (wayland_display_get_fd) @@ -458,9 +446,39 @@ bool GtkInstance::AnyInput( VclInputFlags nType ) aPollFD.events = G_IO_IN | G_IO_ERR | G_IO_HUP; bRet = g_poll(&aPollFD, 1, 0) > 0; } + return bRet; } - } #endif +#if defined(GDK_WINDOWING_X11) + if (DLSYM_GDK_IS_X11_DISPLAY(pDisplay)) + { + GPollFD aPollFD; + aPollFD.fd = ConnectionNumber(gdk_x11_display_get_xdisplay(pDisplay)); + aPollFD.events = G_IO_IN; + return g_poll(&aPollFD, 1, 0) > 0; + } +#endif + return false; + } +} + +bool GtkInstance::AnyInput( VclInputFlags nType ) +{ + EnsureInit(); + if( (nType & VclInputFlags::TIMER) && IsTimerExpired() ) + return true; + + // strip timer bits now + nType = nType & ~VclInputFlags::TIMER; + + static constexpr VclInputFlags ANY_INPUT_EXCLUDING_TIMER = VCL_INPUT_ANY & ~VclInputFlags::TIMER; + + const bool bCheckForAnyInput = nType == ANY_INPUT_EXCLUDING_TIMER; + + bool bRet = false; + + if (bCheckForAnyInput) + bRet = DisplayHasAnyInput(); #if !GTK_CHECK_VERSION(4, 0, 0) GdkDisplay* pDisplay = gdk_display_get_default(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits