tigervnc/tigervnc-clean-pressed-key-on-exit.patch
Michal Srb 35fddca831 - Update to tigervnc 1.7.0.
* Multi-threaded decoder in the FLTK viewer
  * Improved SSH integration in the Java viewer
  * Fine grained lock down of Xvnc parameters
  * Compatibility with Xorg 1.18
  * Lots of packaging fixes
  * Better compatibility with Vino, both in the FLTK and Java viewer
- Removed patches:
  * U_add_allowoverride_parameter.patch
  * U_include-vencrypt-only-if-any-subtype-present.patch
  * U_tigervnc_clear_up_zlibinstream_reset_behaviour.patch
  * u_xserver118.patch

OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/tigervnc?expand=0&rev=96
2016-09-13 14:12:30 +00:00

89 lines
2.7 KiB
Diff

Index: tigervnc-1.7.0/vncviewer/DesktopWindow.cxx
===================================================================
--- tigervnc-1.7.0.orig/vncviewer/DesktopWindow.cxx
+++ tigervnc-1.7.0/vncviewer/DesktopWindow.cxx
@@ -177,6 +177,8 @@ DesktopWindow::~DesktopWindow()
OptionsDialog::removeCallback(handleOptions);
+ delete viewport;
+
// FLTK automatically deletes all child widgets, so we shouldn't touch
// them ourselves here
}
Index: tigervnc-1.7.0/vncviewer/Viewport.cxx
===================================================================
--- tigervnc-1.7.0.orig/vncviewer/Viewport.cxx
+++ tigervnc-1.7.0/vncviewer/Viewport.cxx
@@ -140,6 +140,11 @@ Viewport::Viewport(int w, int h, const r
Viewport::~Viewport()
{
+ // Send release for every pressed key
+ for(DownMap::iterator iter = downKeySym.begin(); iter != downKeySym.end(); ++iter) {
+ cc->writer()->keyEvent(iter->second, false);
+ }
+
// Unregister all timeouts in case they get a change tro trigger
// again later when this object is already gone.
Fl::remove_timeout(handlePointerTimeout, this);
Index: tigervnc-1.7.0/vncviewer/vncviewer.cxx
===================================================================
--- tigervnc-1.7.0.orig/vncviewer/vncviewer.cxx
+++ tigervnc-1.7.0/vncviewer/vncviewer.cxx
@@ -107,6 +107,8 @@ static const char *about_text()
return buffer;
}
+static CConn *cc;
+
void exit_vncviewer(const char *error)
{
// Prioritise the first error we get as that is probably the most
@@ -177,6 +179,16 @@ static void CleanupSignalHandler(int sig
// CleanupSignalHandler allows C++ object cleanup to happen because it calls
// exit() rather than the default which is to abort.
vlog.info(_("Termination signal %d has been received. TigerVNC Viewer will now exit."), sig);
+ delete cc;
+ exit(1);
+}
+
+static int CleanupXIOErrorHandler(Display *dpy)
+{
+ // CleanupSignalHandler allows C++ object cleanup to happen because it calls
+ // exit() rather than the default which is to abort.
+ vlog.info("XErrorHandler called");
+ delete cc;
exit(1);
}
@@ -481,11 +493,19 @@ int main(int argc, char** argv)
init_fltk();
+ fl_open_display();
+
+ XSetIOErrorHandler(CleanupXIOErrorHandler);
+
#if !defined(WIN32) && !defined(__APPLE__)
fl_open_display();
XkbSetDetectableAutoRepeat(fl_display, True, NULL);
#endif
+ fl_open_display();
+
+ XSetIOErrorHandler(CleanupXIOErrorHandler);
+
Configuration::enableViewerParams();
/* Load the default parameter settings */
@@ -602,7 +622,7 @@ int main(int argc, char** argv)
#endif
}
- CConn *cc = new CConn(vncServerName, sock);
+ cc = new CConn(vncServerName, sock);
while (!exitMainloop)
run_mainloop();