From ac2a93c3c8c346a8d879d66d4d6f7872c552bc8f636c67ed81019eb1cbebf75b Mon Sep 17 00:00:00 2001 From: Michal Srb Date: Wed, 6 Jun 2018 13:41:26 +0000 Subject: [PATCH] Accepting request 614564 from home:michalsrb:branches:bnc1095664:X11:XOrg - U_vncviewer-Fix-fullscreen-scrolling.patch, U_vncviewer-Fix-scrollbar-visibility.patch * Fix scrolling in vncviewer. (boo#1095664) - Fix build against X server 1.20.0. OBS-URL: https://build.opensuse.org/request/show/614564 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/tigervnc?expand=0&rev=141 --- U_vncviewer-Fix-fullscreen-scrolling.patch | 37 ++++++ U_vncviewer-Fix-scrollbar-visibility.patch | 92 ++++++++++++++ tigervnc.changes | 9 ++ tigervnc.spec | 8 +- u_add-support-for-X-server-1.20.0.patch | 139 +++++++++++++++++++++ 5 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 U_vncviewer-Fix-fullscreen-scrolling.patch create mode 100644 U_vncviewer-Fix-scrollbar-visibility.patch create mode 100644 u_add-support-for-X-server-1.20.0.patch diff --git a/U_vncviewer-Fix-fullscreen-scrolling.patch b/U_vncviewer-Fix-fullscreen-scrolling.patch new file mode 100644 index 0000000..af4adb6 --- /dev/null +++ b/U_vncviewer-Fix-fullscreen-scrolling.patch @@ -0,0 +1,37 @@ +From e8d25d83463805c0f6ef623dba2ac9a276df3587 Mon Sep 17 00:00:00 2001 +From: Luke Shumaker +Date: Tue, 23 May 2017 02:16:27 -0400 +Subject: [PATCH] vncviewer: Fix fullscreen scrolling + +--- + vncviewer/DesktopWindow.cxx | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx +index 47fe8f89..946b162c 100644 +--- a/vncviewer/DesktopWindow.cxx ++++ b/vncviewer/DesktopWindow.cxx +@@ -1120,11 +1120,6 @@ void DesktopWindow::scrollTo(int x, int y) + hscroll->value(x); + vscroll->value(y); + +- if (!hscroll->visible()) +- x = -viewport->x(); +- if (!vscroll->visible()) +- y = -viewport->y(); +- + // Scrollbar position results in inverse movement of + // the viewport widget + x = -x; +@@ -1189,7 +1184,7 @@ void DesktopWindow::handleEdgeScroll(void *data) + if ((dx == 0) && (dy == 0)) + return; + +- self->scrollTo(self->hscroll->value() + dx, self->vscroll->value() + dy); ++ self->scrollTo(self->hscroll->value() - dx, self->vscroll->value() - dy); + + Fl::repeat_timeout(0.1, handleEdgeScroll, data); + } +-- +2.13.6 + diff --git a/U_vncviewer-Fix-scrollbar-visibility.patch b/U_vncviewer-Fix-scrollbar-visibility.patch new file mode 100644 index 0000000..fbdf987 --- /dev/null +++ b/U_vncviewer-Fix-scrollbar-visibility.patch @@ -0,0 +1,92 @@ +From 0a8c4d48bbf71b83a575ec89b41aebc4439242ae Mon Sep 17 00:00:00 2001 +From: Luke Shumaker +Date: Tue, 23 May 2017 14:03:15 -0400 +Subject: [PATCH] vncviewer: Fix scrollbar visibility + +Have a window that is sized to the remote screen. Now shrink the window +vertically, making it shorter than the remote screen in one axis. The +vertical scrollbar appears. However, the horizontal scrollbar does not +appear, despite the rightmost ~24 pixels (Fl::scrollbar_size()) being +hidden by the vertical scroll bar. + +Fix that. + +For clarity, move the fullscreen checks into a separate `if` statement, +rather than keeping the size and fullscreen checks together. + +I think the comment does a decent job of explaining and justifying the +check's logic, but if you require further convincing, perhaps this +alternate explanation will help: + + The check for the X-axis is + + if ((w() - (h() < viewport->h() ? Fl::scrollbar_size() : 0) < viewport->w()) + + To be a bit more verbose and repetitive, we can split that ternary in to + two separate checks, and add some comments: + + if ( + (w() - < viewport->w()) // X needs a scrollbar + || + ( (w() - Fl::scrollbar_size() < viewport->w()) && (h() < viewport->h()) ) + //( X doesn't need a scrollbar unless Y does ) && ( Y does need one ) ) + ) + + Within the "Y does need one" check, we don't need to worry about the + case where `h() - Fl::scrollbar_size() < viewport-h()` is true, + because if both axes are saying "I don't need a scrollbar unless + you do", then neither needs one. +--- + vncviewer/DesktopWindow.cxx | 34 +++++++++++++++++++++++++++------- + 1 file changed, 27 insertions(+), 7 deletions(-) + +diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx +index 47fe8f89..e2ed0887 100644 +--- a/vncviewer/DesktopWindow.cxx ++++ b/vncviewer/DesktopWindow.cxx +@@ -1046,15 +1046,35 @@ void DesktopWindow::repositionWidgets() + + // Scrollbars visbility + +- if (!fullscreen_active() && (w() < viewport->w())) +- hscroll->show(); +- else ++ if (fullscreen_active()) { + hscroll->hide(); +- +- if (!fullscreen_active() && (h() < viewport->h())) +- vscroll->show(); +- else + vscroll->hide(); ++ } else { ++ // Decide whether to show a scrollbar by checking if the window ++ // size (possibly minus scrollbar_size) is less than the viewport ++ // (remote framebuffer) size. ++ // ++ // We decide whether to subtract scrollbar_size on an axis by ++ // checking if the other axis *definitely* needs a scrollbar. You ++ // might be tempted to think that this becomes a weird recursive ++ // problem, but it isn't: If the window size is less than the ++ // viewport size (without subtracting the scrollbar_size), then ++ // that axis *definitely* needs a scrollbar; if the check changes ++ // when we subtract scrollbar_size, then that axis only *maybe* ++ // needs a scrollbar. If both axes only "maybe" need a scrollbar, ++ // then neither does; so we don't need to recurse on the "maybe" ++ // cases. ++ ++ if (w() - (h() < viewport->h() ? Fl::scrollbar_size() : 0) < viewport->w()) ++ hscroll->show(); ++ else ++ hscroll->hide(); ++ ++ if (h() - (w() < viewport->w() ? Fl::scrollbar_size() : 0) < viewport->h()) ++ vscroll->show(); ++ else ++ vscroll->hide(); ++ } + + // Scrollbars positions + +-- +2.13.6 + diff --git a/tigervnc.changes b/tigervnc.changes index e376553..a32d6fe 100644 --- a/tigervnc.changes +++ b/tigervnc.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Wed Jun 6 09:07:23 UTC 2018 - msrb@suse.com + +- U_vncviewer-Fix-fullscreen-scrolling.patch, + U_vncviewer-Fix-scrollbar-visibility.patch + * Fix scrolling in vncviewer. (boo#1095664) + +- Fix build against X server 1.20.0. + ------------------------------------------------------------------- Tue Apr 24 09:16:59 UTC 2018 - msrb@suse.com diff --git a/tigervnc.spec b/tigervnc.spec index 021087e..7c64066 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -141,6 +141,9 @@ Patch11: u_tigervnc-add-autoaccept-parameter.patch Patch12: u_Unset-pixel-buffer-when-x0vncserver-client-disconnect.patch Patch13: tigervnc-1.8.0-nowindows.patch Patch14: u_change-button-layout-in-ServerDialog.patch +Patch15: u_add-support-for-X-server-1.20.0.patch +Patch16: U_vncviewer-Fix-fullscreen-scrolling.patch +Patch17: U_vncviewer-Fix-scrollbar-visibility.patch %description TigerVNC is an implementation of VNC (Virtual Network Computing), a @@ -246,9 +249,12 @@ cp -r /usr/src/xserver/* unix/xserver/ %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 pushd unix/xserver -patch -p1 < ../xserver119.patch +patch -p1 < ../xserver120.patch popd %build diff --git a/u_add-support-for-X-server-1.20.0.patch b/u_add-support-for-X-server-1.20.0.patch new file mode 100644 index 0000000..27f3a79 --- /dev/null +++ b/u_add-support-for-X-server-1.20.0.patch @@ -0,0 +1,139 @@ +From 9529b2fbc248165da493422376d591f5ec736ca5 Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 6 Jun 2018 13:33:37 +0200 +Subject: [PATCH] Add support for X server 1.20.0. + +--- + unix/xserver/hw/vnc/xorg-version.h | 4 +- + unix/xserver/hw/vnc/xvnc.c | 2 + + unix/xserver120.patch | 82 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 87 insertions(+), 1 deletion(-) + create mode 100644 unix/xserver120.patch + +diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h +index 9d1c0eb8..16145711 100644 +--- a/unix/xserver/hw/vnc/xorg-version.h ++++ b/unix/xserver/hw/vnc/xorg-version.h +@@ -52,8 +52,10 @@ + #define XORG 118 + #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (19 * 100000) + (99 * 1000)) + #define XORG 119 ++#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (20 * 100000) + (99 * 1000)) ++#define XORG 120 + #else +-#error "X.Org newer than 1.19 is not supported" ++#error "X.Org newer than 1.20 is not supported" + #endif + + #endif +diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c +index 57152cd5..06b6da5d 100644 +--- a/unix/xserver/hw/vnc/xvnc.c ++++ b/unix/xserver/hw/vnc/xvnc.c +@@ -202,6 +202,7 @@ vfbBitsPerPixel(int depth) + static void vfbFreeFramebufferMemory(vfbFramebufferInfoPtr pfb); + + #ifdef DPMSExtension ++#if XORG < 120 + /* Why support DPMS? Because stupid modern desktop environments + such as Unity 2D on Ubuntu 11.10 crashes if DPMS is not + available. (DPMSSet is called by dpms.c, but the return value +@@ -218,6 +219,7 @@ Bool DPMSSupported(void) + return FALSE; + } + #endif ++#endif + + #if XORG < 111 + void ddxGiveUp() +diff --git a/unix/xserver120.patch b/unix/xserver120.patch +new file mode 100644 +index 00000000..d8598494 +--- /dev/null ++++ b/unix/xserver120.patch +@@ -0,0 +1,82 @@ ++Index: xserver/configure.ac ++=================================================================== ++--- xserver.orig/configure.ac +++++ xserver/configure.ac ++@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x ++ AC_CONFIG_HEADERS(include/version-config.h) ++ ++ AM_PROG_AS +++AC_PROG_CXX ++ AC_PROG_LN_S ++ LT_PREREQ([2.2]) ++ LT_INIT([disable-static win32-dll]) ++@@ -1777,6 +1778,10 @@ if test "x$XVFB" = xyes; then ++ AC_SUBST([XVFB_SYS_LIBS]) ++ fi ++ +++dnl Xvnc DDX +++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) +++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) +++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) ++ ++ dnl Xnest DDX ++ ++@@ -1812,6 +1817,8 @@ if test "x$XORG" = xauto; then ++ fi ++ AC_MSG_RESULT([$XORG]) ++ +++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) +++ ++ if test "x$XORG" = xyes; then ++ XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' ++ XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' ++@@ -2029,7 +2036,6 @@ if test "x$XORG" = xyes; then ++ AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) ++ AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) ++ AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) ++- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) ++ AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) ++ AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) ++ AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) ++@@ -2565,6 +2571,7 @@ hw/dmx/Makefile ++ hw/dmx/man/Makefile ++ hw/vfb/Makefile ++ hw/vfb/man/Makefile +++hw/vnc/Makefile ++ hw/xnest/Makefile ++ hw/xnest/man/Makefile ++ hw/xwin/Makefile ++Index: xserver/hw/Makefile.am ++=================================================================== ++--- xserver.orig/hw/Makefile.am +++++ xserver/hw/Makefile.am ++@@ -38,7 +38,8 @@ SUBDIRS = \ ++ $(DMX_SUBDIRS) \ ++ $(KDRIVE_SUBDIRS) \ ++ $(XQUARTZ_SUBDIRS) \ ++- $(XWAYLAND_SUBDIRS) +++ $(XWAYLAND_SUBDIRS) \ +++ vnc ++ ++ DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland ++ ++Index: xserver/mi/miinitext.c ++=================================================================== ++--- xserver.orig/mi/miinitext.c +++++ xserver/mi/miinitext.c ++@@ -107,8 +107,15 @@ SOFTWARE. ++ #include "os.h" ++ #include "globals.h" ++ +++#ifdef TIGERVNC +++extern void vncExtensionInit(void); +++#endif +++ ++ /* List of built-in (statically linked) extensions */ ++ static const ExtensionModule staticExtensions[] = { +++#ifdef TIGERVNC +++ {vncExtensionInit, "VNC-EXTENSION", NULL}, +++#endif ++ {GEExtensionInit, "Generic Event Extension", &noGEExtension}, ++ {ShapeExtensionInit, "SHAPE", NULL}, ++ #ifdef MITSHM +-- +2.13.6 +