Subject: X2Go issue (in src:x2goclient) has been marked as closed
From: X2Go Release Manager <[email-masked]>
To: [email-masked]
Cc: [email-masked], [email-masked]
Date: Wed, 22 Feb 2017 05:10:08 +0100 (CET)

close #1124
thanks

Hello,

we are very hopeful that X2Go issue #1124 reported by you
has been resolved in the new release (4.1.0.0) of the
X2Go source project »src:x2goclient«.

You can view the complete changelog entry of src:x2goclient (4.1.0.0)
below, and you can use the following link to view all the code changes
between this and the last release of src:x2goclient.

    http://code.x2go.org/gitweb?p=x2goclient.git;a=commitdiff;h=a972b0cd4622a101b1ddb3d4d3b0cf1f71dbfd6d;hp=550ae93c0ea493e0c740d6c1c1e83b014d8265dd

If you feel that the issue has not been resolved satisfyingly, feel
free to reopen this bug report or submit a follow-up report with
further observations described based on the new released version
of src:x2goclient.

Thanks a lot for contributing to X2Go!!!

light+love
X2Go Git Admin (on behalf of the sender of this mail)

---
X2Go Component: src:x2goclient
Version: 4.1.0.0-0x2go1
Status: RELEASE
Date: Wed, 22 Feb 2017 05:02:35 +0100
Fixes: 910 1024 1096 1105 1124 1139
Changes: 
 x2goclient (4.1.0.0-0x2go1) RELEASED; urgency=medium
 .
   [ Mihai Moldovan ]
   * New upstream version (4.1.0.0):
     - src/sessionbutton.cpp: replace drop down menu button on session buttons
       with a more prominent, bigger settings gear icon. Requested for
       visibility.
     - src/onmainwindow.cpp: add debug statements to createRSAKey () regarding
       the host pub key locations on OS X.
     - src/onmainwindow.cpp: fix error message string in
       printSshDError_noHostPubKey ().
     - src/sshmasterconnection.cpp: add SecurID prompt to challenge auth code
       prompts.
     - src/sharewidget.cpp: fix compile on UNIX-like platforms by defaulting to
       ISO-8859-1 not just on Linux but also other platforms. Fixes: #1124.
     - src/x2goutils.cpp: don't try to wrap absolute paths as legacy resource
       URIs in wrap_legacy_resource_URIs (). Fixes: #910.
     - {res/img/svg/,res/resources.qrc}: add new file hamburger.svg, a
       custom-created hamburger icon.
     - src/sessionbutton.cpp: replace drop down menu button on session buttons
       again with the custom-created hamburger icon. Also fix positioning
       issues in mini mode.
     - src/onmainwindow.{cpp,h}: add new function images_resource_path (),
       similar to iconsPath () but without explicitly referring to icons.
     - src/sessionbutton.cpp: we cannot use ".." in resource paths to move up
       one level, so use images_resource_path () instead and hope that we
       finally get a yummy hamburger.
     - src/onmainwindow.{cpp,h}: let iconsPath () take a const-reference
       instead of an object and make it a const member function.
     - src/onmainwindow.{cpp,h}: let images_resource_path () take a new,
       optional "base" parameter, that might be empty and is put in-between the
       fixed resource path string and the filename parameter.
     - src/onmainwindow.cpp: use images_resource_path () in iconsPath ().
     - src/sessionbutton.cpp: instead of using the hamburger.svg file directly,
       render it to a raster image and use this Pixmap as the icon file -
       otherwise the icon will not show up. Also change the icon size back to
       16x16 px, that's big enough.
     - src/onmainwindow.cpp: remove left-over debug test message.
     - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub.
     - unixhelper.{cpp,h}: implement cleanup program for process group.
     - x2goclient.cpp: wrap X2Go Client main function and use that.
     - x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup
       helper.
     - x2goclient.cpp: use setsid() on UNIX to become session and process group
       leader. If that fails, fork, terminate the parent and execute setsid()
       in the child process. Use fork_helper() to start the UNIX cleanup helper
       in a child process and continue with the main application in the parent.
     - x2goclient.cpp: add myself to copyright header.
     - x2goclient.cpp: add legacy <sys/types.h> header needed for old operating
       systems.
     - x2goclient.cpp: fix std::edit -> std::exit typo.
     - unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX
       defined on UNIX-based platforms. Move guards around.
     - unixhelper.h: forgot to declare type of unix_cleanup() function.
     - {unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a
       (module) namespace, not a class.
     - unixhelper.{cpp,h}: add documentation/comments.
     - x2goclient.cpp: return return value of unixhelper::unix_cleanup().
     - unixhelper.cpp: kill process group on error.
     - unixhelper.{cpp,h}: implement signal unblocking in
       unixhelper::unix_cleanup(). Update documentation.
     - unixhelper.cpp: port from std::signal() to sigaction(). Handle errors.
     - x2goclient.cpp: clean up. We don't care if setsid() fails or succeeds
       and we certainly do not need to fork to force it to succeed. Whether we
       are a process group leader already or become one doesn't matter, if the
       end result is that we are process group leader.
     - x2goclient.cpp: don't start the UNIX cleanup helper process right after
       forking, but introduce a new command line option --unixhelper and
       re-execute the main binary with this new option to indicate that the
       UNIX cleanup helper tool is requested. It is necessary to call exec()
       after fork on virtually all operating system, especially on OS X.
     - x2goclient.cpp: fix compile problems introduced with the last commit.
     - x2goclient.cpp: fix string comparison.
     - x2goclient.cpp: create new argv array on the heap instead of on the
       stack. Stack data will be invalid once the function goes out of scope
       (which is what execv is doing.)
     - unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period
       to 10 seconds.
     - {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to
       parent PID polling.
     - unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1
       and SIGUSR2.
     - x2goclient.cpp: fix failing exec() call for the UNIX helper utility:
       correctly terminate arguments vector.
     - {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile
       warnings with GCC. Fix a few whitespace issues.
     - appdialog.cpp: initialize parent in default case. Another GCC compile
       warning fix.
     - onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when
       starting sshd in user mode. Put the authorized_keys file in there. Check
       and set correct permissions for both the directory and authorized_keys
       file. Generalize some Windows-specific sections by using QDir and QFile.
     - compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below.
       Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo.
     - compat.{cpp,h}: remove inline keyword, because function is not defined
       in header file.
     - compat.h: include QtCore/qglobal.h for Q_OS_... macros.
     - pulsemanager.{cpp,h}: new class for PulseAudio management.
     - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files.
     - macbuild.sh: add new MACPORTS_PREFIX detection/variable.
     - macbuild.sh: add new dependency_error() helper function.
     - macbuild.sh: add new lazy_canonical_path() helper function.
     - macbuild.sh: add new get_nesting_level() helper function.
     - macbuild.sh: add new repeat_str() helper function.
     - macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX.
     - macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. Create
       directories based on that. Use them when bundling.
     - macbuild.sh: define PulseAudio libraries and binaries to be later
       copied. Discover them using MACPORTS_PREFIX. Error out if any component
       was not found.
     - macbuild.sh: copy PulseAudio libraries and binaries.
     - macbuild.sh: add phase output for bundling nxproxy.
     - macbuild.sh: add work-in-progress PulseAudio bundling. Needs to be ripped
       apart and be redone, because dylibbundler is not smart enough to handle
       our case.
     - macbuild.sh: add Linux library file name scheme regex as a precaution.
     - macbuild.sh: directories are "executable", so the first check must
       explicitly include a check for the argument being not a directory.
     - macbuild.sh: add some more debugging output.
     - macbuild.sh: remove libpulse and libpulsecore from libraries to be
       bundled, as something else will bundle them anyway.
     - macbuild.sh: use while-read-loop and find to actually recurse through
       directories.
     - macbuild.sh: check current file name against regex, not a (now) full
       path.
     - macbuild.sh: add the correct file path to the library bundling array.
     - macbuild.sh: when actually bundling libraries, use @executable_path
       instead of @loader_path. Will need testing.
     - macbuild.sh: fix echo call to also show the intermediate lib dir, not
       just the library file name. Helps debugging.
     - macbuild.sh: also install libraries into staging area with intermediate
       library path. Putting everything into a single place is a stupid idea.
     - deduplicate.sh: add new, more or less Proof of Concept, and Work in
       Progress file deduplication script.
     - deduplicate.sh: add duplicates-to-real mapping.
     - deduplicate.sh: add missed local variable declaration.
     - deduplicate.sh: new function for parsing otool's output and printing
       library dependencies if no error occurred.
     - deduplicate.sh: non-functional: change WARNING to ERROR in error
       messages.
     - deduplicate.sh: add first skeleton for library dependency rewriting of
       deleted duplicates.
     - deduplicate.sh: correctly unset an array element.
     - deduplicate.sh: change range-based for loops to "${!arr[@]}" to handle
       "sparse" arrays correctly.
     - deduplicate.sh: quote "${arr[@]}" correctly to not suddenly force word
       splitting.
     - deduplicate.sh: fix parse_otool_output: we want to return failure only
       iff any of the strings are present in otool's output and actually handle
       the failure string *ARRAY* correctly as that.
     - deduplicate.sh: change exit to return in parse_otool_output.
     - deduplicate.sh: record crafted "library path" values in duplicates
       replacement to_files array.
     - deduplicate.sh: debug parse_otool_output fiercely for the time being.
     - deduplicate.sh: prevent word splitting when parsing otool's output. We
       want the raw bits.
     - deduplicate.sh: switch to range-based for loop in fixup section for
       duplicate array walking as we need to access the same element index in
       the replacement array.
     - deduplicate.sh: add more useful information in fixup section's error
       message.
     - deduplicate.sh: unstub fixup section.
     - deduplicate.sh: parse_otool_output: jump over first matching entry,
       which is - hopefully - the id line.
     - deduplicate.sh: actually include file name in install_name_tool pseudo
       output.
     - deduplicate.sh: save dependency format base string as a readonly
       variable and use that instead of repeating a fixed string.
     - deduplicate.sh: copy lazy_canonical_path from macbuild.sh for now.
       deduplicate.sh will eventually be merged into macbuild.sh anyway.
     - deduplicate.sh: more temporary debugging output in fixup section.
     - deduplicate.sh: surprisingly, it turned out that only checking the
       duplicate's basename against the current dependency's basename is not
       good enough. Actually construct "the real dependency-format duplicate
       string" and check it against "the real dependency". Even this is still
       not good enough as it needs a bit cleanup - coming up next.
     - deduplicate.sh: cleanup as announced in the last commit - using
       lazy_canonical_path.
     - deduplicate.sh: remove a bit of noisy debug output, but turn on
       parse_otool_output debugging.
     - deduplicate.sh: fix wrong return value capture. We want to check the
       return value of the executed function/command, not that of "typeset".
     - deduplicate.sh: add WARNING to status message.
     - deduplicate.sh: remove some noisy debug output.
     - macbuild.sh: replace tabs with two spaces. No functional changes.
     - deduplicate.sh: replace tabs with two spaces. No functional changes.
     - macbuild.sh: merge deduplicate.sh content in. Also enable the
       functionality "for real", not just as a dry-run.
     - macbuild.sh: spelling fix.
     - macbuild.sh: more more debug messages and a whitespace change.
     - macbuild.sh: fix removal of base prefix in deduplication if base prefix
       ends in a slash.
     - macbuild.sh: copy "special" files, so that they can be removed later on.
     - macbuild.sh: rewrite ID line detection algorithm. Modules don't seem to
       be needing one, so skipping the first dependency line incidentally skips
       a "real" dependency for modules.
     - pulsemanager.{cpp,h}: use name and underscore for member variables, not
       underscore and name.
     - pulsemanager.cpp: minor non-behavior changing fixes.
     - pulsemanager.{cpp,h}: reformat only.
     - pulsemanager.cpp: use initializer list for constructor.
     - pulsemanager.{cpp,h}: add pulse_version_{major,minor}_ member variables.
     - pulsemanager.cpp: reformat only.
     - pulsemanager.{cpp,h}: switch port definitions to std::uint16_t.
     - pulsemanager.h: add std:: namespace selector for uint32_t version
       variables.
     - pulsemanager.{cpp,h}: add ESD support.
     - pulsemanager.{cpp,h}: rename relaunch () to restart ().
     - pulsemanager.cpp: reformat only.
     - pulsemanager.{cpp,h}: fixup preprocessor usage.
     - pulsemanager.{cpp,h}: add server_args_, server_binary_ and
       server_working_dir_ class variables.
     - pulsemanager.cpp: make start () wrap the "real" OS-specific start
       functions.
     - pulsemanager.{cpp,h}: new function create_client_dir ().
     - pulsemanager.cpp: add Windows support to shutdown ().
     - pulsemanager.cpp: add cleanup support to on_pulse_finished ().
     - pulsemanager.cpp: add Windows stuff to initial env in constructor.
     - pulsemanager.{cpp,h}: add new function start_generic () to split off
       common functionality.
     - pulsemanager.cpp: let start_osx () use start_generic ().
     - pulsemanager.{cpp,h}: implement start_win () as part of Windows
       functionality.
     - pulsemanager.cpp: also load module-esound-protocol-tcp module.
     - pulsemanager.cpp: make generate_server_config () Windows-compatible.
     - pulsemanager.cpp: make generate_client_config () Windows-compatible.
     - pulsemanager.cpp: only play startup sound if DEBUG macro is defined.
     - pulsemanager.cpp: make startup sound playing via
       slot_play_startup_sound () Windows-compatible.
     - pulsemanager.cpp: typo fix in variable name server_working_dir_.
     - pulsemanager.{cpp,h}: find_port () actually returns a value, fix
       declaration accordingly.
     - pulsemanager.cpp: fix compile errors in find_port () by renaming the ret
       or port variable to search_port.
     - pulsemanager.cpp: fix another compile error due to typo'd versions of
       generate_server_config () and generate_client_config ().
     - pulsemanager.cpp: another typo fix: findPort -> find_port.
     - pulsemanager.cpp: reorder member variables in initialization list.
       Compile warning fix.
     - pulsemanager.cpp: add "dummy" start_linux () function.
     - pulsemanager.cpp: generate platform-dependent values for member
       variables server_working_dir_ and server_binary_ in constructor. We need
       them right away.
     - pulsemanager.{cpp,h}: new member function fetch_pulseaudio_version ()
       with first skeleton. Call it in the constructor.
     - pulsemanager.cpp: re-initialize buffer string on each run while getting
       CWD on Linux.
     - pulsemanager.cpp: fix some error messages by removing redundant
       newlines.
     - pulsemanager.{cpp,h}: some older PA versions used the major, minor and
       micro numbering scheme together with a descriptive string. Add new
       member variables for this and initialize them correctly.
     - pulsemanager.h: reformat a bit by adding newlines and moving lines in a
       (hopefully) logical fashion.
     - pulsemanager.cpp: add algorithm for actually extracting PA version
       number.
     - pulsemanager.{cpp,h}: only allow changing PA or ESD ports when server is
       not currently running.
     - pulsemanager.{cpp,h}: add record and playback private members, as well
       as getters and setters.
     - pulsemanager.cpp: reorder member variables in initializer list.
     - pulsemanager.cpp: fix compile error in startup sound function.
     - pulsemanager.h: more moving around.
     - pulsemanager.cpp: use record and playback member variables.
     - pulsemanager.cpp: cleanup, don't use copy assignment operator when we
       just need to construct a new object.
     - macbuild.sh: PulseAudio has been updated to version 8.0. Reflect this.
     - macbuild.sh: libpulsecore.dylib also resides in the "private" pulseaudio
       subdirectory now, adding it to "special files workaround".
     - pulsemanager.cpp: remove config.pa while doing post-exit cleanups.
     - src/pulsemanager.{cpp,h}: add get_pulse_dir () for fetching the
       (OS-dependent) PulseAudio config and cookie directory.
     - src/pulsemanager.cpp: replace hardcoded modules paths with dynamic ones
       depending on the detected PA version.
     - src/pulsemanager.cpp: add "FIXME" debug logging (and cleanup.)
     - src/pulsemanager.cpp: backport fix for 526.
     - src/pulsemanager.cpp: backport fix for 422.
     - src/configdialog.{cpp,h}: add "no record" support for OS X (through
       PulseManager.)
     - src/configdialog.cpp: whitespace only.
     - src/onmainwindow.{cpp,h}: hook PulseManager in - for both OS X and
       Windows.
     - src/mediawidget.cpp: reflect new capabilities through PulseManager.
     - src/pulsemanager.h: move x2gologdebug.h inclusion into implementation
       file.
     - src/pulsemanager.cpp: output PA stdout/stderr via x2goDebug, not plainly
       to stdout.
     - src/configdialog.cpp: fix compile error by removing obsolete (and now
       faulty) line for removed restart message.
     - src/onmainwindow.cpp: fix compile errors due to misspelled function
       names.
     - src/pulsemanager.cpp: let start () act as a wrapper and do nothing if
       the PA server is already running.
     - src/onmainwindow.cpp: fix compile error due to misuse of #ifdef.
     - src/onmainwindow.cpp: convert QDir object to QString for further
       processing.
     - src/onmainwindow.cpp: make use of new PulseManager::start () behavior
       and always use it, no matter whether server is up already or not.
     - src/pulsemanager.cpp: fix compile error due to typo.
     - src/pulsemanager.cpp: hide Windows-only code behind #ifdefs. Otherwise
       we'll get compile failures on non-Windows platforms.
     - src/pulsemanager.{cpp,h}: add debugging setter and private variable.
     - src/pulsemanager.{cpp,h}: port to new debugging feature.
     - src/onmainwindow.cpp: port to new debugging feature of PulseManager.
     - src/pulsemanager.h: fix compile error due to mismatching function
       declaration for set_debug ().
     - res/sound: add startup.wav sound to be played back when starting the PA
       daemon in debug mode.
     - src/pulsemanager.cpp: don't time out while trying to start PA or paplay.
       "Handle" errors by printing out debug messages.
     - macbuild.sh: add support for copying resource files. Currently only used
       for startup.wav.
     - res: rename "sound" to "audio".
     - macbuild.sh: fix copying of resource files.
     - macbuild.sh: also add PA binaries to deduplication fixup list.
     - macbuild.sh: don't error out while executing parse_otool_output ().
     - macbuild.sh: save return value of parse_otool_output (). Otherwise we'll
       fetch the return value of "set", which is not really what we need.
     - src/pulsemanager.cpp: fix typo in fetch_pulseaudio_version (). Read
       standard output from temporary process, not our "main" server process
       (which at this point is not even started yet.)
     - src/pulsemanager.cpp: don't overwrite the temporary string variable for
       the current line with what was supposed to hold new data in
       fetch_pulseaudio_version ().
     - src/pulsemanager.{cpp,h}: rename on_pulse_finished () to
       slot_on_pulse_finished (). Oops...
     - src/pulsemanager.cpp: actually only play startup sound if debugging is
       enabled.
     - src/pulsemanager.cpp: don't insert stray newline into config.pa.
     - src/pulsemanager.cpp: insert PULSE_SERVER and PULSE_COOKIE variables
       into environment as used by PulseManager. Otherwise we won't be able to
       start binaries like paplay.
     - src/pulsemanager.cpp: don't remove PA config and log file in
       ~/.x2go/pulse on PA shutdown if debugging has been requested.
     - src/x2goutils.{cpp,h}: add new function find_binary (). Searches for a
       specific binary in a colon-separated list of paths. Really just a compat
       function, as Qt 5 includes QStandardPaths::findExecutable ().
     - src/pulsemanager.cpp: auto-detect PA binary in $PATH and MacPorts
       default prefix as well on OS X.
     - src/pulsemanager.cpp: add comments to Qt 4 code part.
     - src/pulsemanager.cpp: add reminder for Linux-implementation in
       slot_play_startup_sound ().
     - src/x2goutils.cpp: fix compile error.
     - src/pulsemanager.h: add new system_pulse_ variable to indicate that
       a system PA binary shall be used.
     - src/pulsemanager.cpp: correctly initialize and set system_pulse_ when
       required.
     - src/x2goutils.{cpp,h}: add application modality parameter to
       show_RichText_Generic_MsgBox () and its wrappers.
     - src/pulsemanager.cpp: add error message boxes throughout PulseManager.
       Don't just abort () the program.
     - src/x2goutils.h: fix compile error due to typo.
     - src/pulsemanager.cpp: fix compile error on Windows.
     - src/pulsemanager.cpp: fix startup when using the system-PA version.
     - src/pulsemanager.cpp: fix startup sound playback when using the
       system-PA version.
     - src/pulsemanager.cpp: add warning message boxes where appropriate.
     - src/pulsemanager.cpp: remove extraneous newlines from debug output.
     - src/x2goutils.cpp: fix faulty logic in find_binary (): only reset the
       given path to CWD iff it's actually empty. Not the other way around.
     - src/x2goutils.cpp: add some debug logging to find_binary ().
     - nsis/x2goclient.nsi: add startup.wav to installer package.
     - src/: new file windows_stdint.h for Windows-compatibility when using
       std::(u)int*_t types. These are only available with GCC in C++11 mode on
       Windows for some reason.
     - src/pulsemanager.h: use windows_stdint.h header on Windows, cstdint
       otherwise.
     - src/onmainwindow.cpp: short out code parts unconditionally checking for
       the userSshd variable. We don't need it on Windows (and don't define it
       on purpose) because using an user-mode SSH daemon is implied there (for
       now.)
     - src/onmainwindow.cpp: drop obsolete pulseVersionTest variable
       initialization in Windows-only code.
     - src/onmainwindow.cpp: drop obsolete pulseVersionIsLegacy variable
       initialization in Windows-only code.
     - src/onmainwindow.cpp: add another pair of braces to in_addr-type
       variable initialization on Windows to silence compiler warning.
     - src/onmainwindow.cpp: fix compile error on Windows after moving some
       code around.
     - src/onmainwindow.cpp: use correct C++ universal initializer for
       initializing in_addr-type variable, the C-style universal zero
       initializer won't cut it here.
     - src/pulsemanager.h: include accidentally omitted wapi.h header file.
     - src/pulsemanager.cpp: make PA version parsing function more generic and
       don't expect that a number is always terminated with a period or dash.
       Especially on Windows, with a PA version number of "6.0", this lead to
       errors. OS X was fine with its "8.0.0-something" version number, but the
       optional part at the end or even the micro version number could be
       missing any time.
     - src/pulsemanager.cpp: make sure that wherever we interface with non-Qt
       functions, paths are in native form (i.e., containing empty separators,
       instead of the "generic" slash UNIX-style separator.) Should fix a PA
       startup issue on Windows.
     - src/pulsemanager.cpp: fix PA version fetching on OS X again.
     - src/unixhelper.{cpp,h}: make argument of kill_pgroup () const.
     - src/unixhelper.h: style and general fixes within comments.
     - src/unixhelper.{cpp,h}: split off core functionality of kill_pgroup ()
       into a new function called real_kill_pgroup ().
     - src/unixhelper.{cpp,h}: rewrite kill_pgroup () to act as a wrapper
       around real_kill_pgroup (). Adjust comment. We need to do this so the
       cleanup process doesn't kill itself before all other processes in the
       process group are killed.
     - src/pulsemanager.cpp: remove unused variables.
     - src/unixhelper.cpp: code cleanup.
     - src/{unixhelper.cpp,x2goclient.cpp}: fix errno usage - save before use.
     - src/onmainwindow.cpp: document createRSAKey () because what it does is
       completely non-obvious.
     - src/onmainwindow.cpp: add support for explicitly setting the private key
       bit size based on type and use values (currently) regarded as secure to
       generateHostKey ().
     - src/onmainwindow.{cpp,h}: rename generateHostKey () to generateKey ()
       and add a boolean parameter with a default of false to request a public
       key. Change old invocations of generateHostKey () accordingly.
     - src/onmainwindow.cpp: refactor generateKey () a little bit to compact
       it.
     - src/onmainwindow.{cpp,h}: rewrite generateKey () function to actually
       also generate user keys. Now returns the private key file path (public
       key file path is trivially determined by appending ".pub" to that return
       value.) Change all locations referencing generateKey () to use the
       return value (if necessary) and remove dead code that was used to
       generate a user key manually previously.
     - src/onmainwindow.cpp: add more error handling to generateKey () and fix
       up a broken error-handling section.
     - src/onmainwindow.cpp: fix up a few debug strings.
     - src/{onmainwindow.{cpp,h},configdialog.cpp}: remove userSshd variable
       and code related to non-user-mode-sshd setups. Simplifies code a bit and
       we want to always start a user-mode OpenSSH server anyway. Also get rid
       of the clientport variable that is now unnecessary.
     - src/onmainwindow.cpp: when starting sshd on Unix-based plattforms, raise
       maximum startup time to 5 seconds and break out early, if the process
       went into running state earlier.
     - src/onmainwindow.cpp: uppercase key type in debug output and comment
       string in generateKey ().
     - src/onmainwindow.cpp: terminate sshd more correctly. First via terminate
       (), then wait up to 5 seconds, then via kill ().
     - src/onmainwindow.{cpp,h}: add new function check_key_type (). Takes a
       key type and checks for validity/if it's known.
     - src/onmainwindow.{cpp,h}: add new function key_type_to_string ().
       Returns a stringified version of the selected key type, after checking
       for validity.
     - src/onmainwindow.{cpp,h}: add new function default_size_for_key_type ().
       Returns the default key size in bits for the selected key type, after
       checking for validity.
     - src/onmainwindow.cpp: use the new functions in generateKey ().
     - src/onmainwindow.h: move generateKey () declaration around.
     - src/onmainwindow.{cpp,h}: reformat generateKey () only.
     - src/onmainwindow.{cpp,h}: move createRSAKey () around.
     - src/onmainwindow.{cpp,h}: reformat createRSAKey () only.
     - src/onmainwindow.cpp: let startSshd () act as a wrapper and be called
       multiple times. Check if the OpenSSH Server is already running and
       return true, otherwise try to start it.
     - src/onmainwindow.cpp: add some comments only to createRSAKey ().
     - src/onmainwindow.{cpp,h}: rename createRSAKey () to the more-appropriate
       name createKeyBundle (). Also add a key-type parameter and use it to
       select the required key type (and maybe generate it if necessary.) Also
       use the new functions to get a stringified version of the key type etc.
     - macbuild.sh: switch to bundling PA 9.0.
     - src/onmainwindow.cpp: move QProcess startup check in startSshd () to
       non-Windows code section and add a listening socket check loop. Windows
       uses other means of starting the daemon.
     - src/onmainwindow.cpp: add comment to last all-in listening check in
       startSshd ().
     - src/onmainwindow.cpp: add listening-check loop to the Windows-specific
       code of startSshd ().
     - src/onmainwindow.{cpp,h}: make startSshd () private. There's no need to
       keep it public, as only class-internal functions are using it.
     - src/onmainwindow.{cpp,h}: add ssh_key_type_ member variable and getter
       and setter to WinServerStarter class.
     - src/onmainwindow.{cpp,h}: add SSH key type parameter to startSshd ().
     - src/onmainwindow.cpp: pass new ssh_key_type_ member to startSshd () call
       in WinServerStarter::run ().
     - src/onmainwindow.cpp: pass key_type parameter to startSshd () in
       createKeyBundle ().
     - src/onmainwindow.cpp: add and use key_types parameter to
       startWinServers ().
     - src/onmainwindow.cpp: actually use key_type parameter in startSshd ()
       and make selection more generic.
     - src/onmainwindow.h: move WinServerStarter class definition around to
       hopefully get the definition of ONMainWindow::key_types.
     - src/onmainwindow.h: remove WWrapper definition, seems to be unused.
     - src/onmainwindow.{cpp,h}: don't try to initialize non-static
       ssh_key_type_ member variable directly, but in the constructor. Also,
       use the initializer list to initialize the other member variables
       directly.
     - src/onmainwindow.cpp: re-order initializer list of WinServerStarter
       constructor.
     - src/onmainwindow.h: actually, we do need startSshd () to be public. Move
       it back.
     - src/onmainwindow.cpp: only pass non-Cygwin paths to QFile::exists () in
       generateKey (). Refactor a bit to drop the now-unnecessary ret variable.
     - src/onmainwindow.cpp: use QFileInfo to get the key file's basename in
       exportDirs () instead of the old, potentially faulty string replace
       dance.
     - src/x2goutils.{cpp,h}: make find_binary () and add_to_path () available
       on all UNIX-based operating systems. We will need it for sftp-server
       discovery.
     - src/pulsemanager.cpp: refactor PA binary searching code. Less
       duplication now.
     - src/onmainwindow.cpp: fix sshd_config generation on UNIX by searching
       for the real sftp-server binary path.
     - src/pulsemanager.cpp: fix PA binary searching logic. We don't want to
       unconditionally set system_pulse_ to true if we found a binary... it
       might as well be the bundled one...
     - src/onmainwindow.cpp: move generateEtcFiles () call to startSshd (). We
       must make sure that the sshd_config file exists and is up-to-date, so
       let's always do it right before starting the sshd binary.
     - src/onmainwindow.cpp: stop duplicating the list of known sftp-server
       binary locations.
     - src/{onmainwindow,pulsemanager}.cpp: actually *use* what we got back
       from add_to_path ()... Fixes a few bugs here and there.
     - src/onmainwindow.cpp: remove trailing slash from Mageia/SUSE/Arch
       sftp-server binary search path.
     - src/x2goutils.cpp: add debugging output to add_to_path ().
     - src/x2goutils.cpp: fix add_to_path (). We want to remove trailing
       slashes from elements-to-add, not just fetch a trailing slash if
       encountered. Also, better don't compare a value from the original path
       value to itself, but rather to the things we want to add in order to
       remove duplicates, not remove most of the list of elements to add...
     - src/unixhelper.cpp: use cstdio instead of stdio.h. It's the C++ header
       and imports functions into the std namespace.
     - src/: create new file unix_stdint.h which imports the (u)int*_t types
       into the std namespace.
     - src/pulsemanager.h: use unix_stdint.h on non-Windows-platforms to get
       std::(u)int*_t types without having to use C++11.
     - src/pulsemanager.cpp: fix Linux-based code by fixing a really stupid
       typo ("erange" instead of "errno") and including the cerrno header.
     - src/pulsemanager.cpp: use std::ssize_t for the path length, because it
       could be -1 and std::size_t is not applicable.
     - src/pulsemanager.cpp: cast the return value of realloc () to char*, as
       GCC doesn't seem to like reassigning the pointer otherwise.
     - src/unix_stdint.h: use same hack to import ssize_t into std namespace.
     - src/onmainwindow.{cpp,h}: remove left-over parec references and code.
     - src/onmainwindow.cpp: convert piece of code to non-Windows and
       non-Darwin, so that not only Linux but other operating systems are
       covered as well.
     - src/mediawidget.cpp: unify some redundant code.
     - src/mediawidget.cpp: simplify expression.
     - src/mediawidget.cpp: add deprecation warning for ARTS.
     - src/mediawidget.cpp: add deprecation warning for ESounD.
     - macbuild.sh: make compatible with new llvm-based otool binary, which now
       uses proper return values. Be backwards-compatible with otool-classic.
     - res/i18n/: refresh translation files.
     - deduplicate.sh: remove file, now obsolete and merged into macbuild.sh.
     - res/i18n/: refresh translation files again after copyright date changes.
     - res/i18n/x2goclient_fr.ts: fixup French translation file.
     - res/i18n/x2goclient_sv.ts: fixup Swedish translation file a little bit
       and add comments/requests for re-translations for the next time.
     - macbuild.sh: switch to bundling PulseAudio 10.0 since it's now available
       in MacPorts.
     - src/x2goclient.cpp: no need to put new_argv_c_str std::vector onto the
       heap. Keep it on the stack.
     - src/x2goclient.cpp: use $PATH-exploration when re-executing x2goclient
       in UNIX cleanup helper mode. Fixes: #1139.
     - src/onmainwindow.cpp: correctly initialize pulseManager and
       pulseManagerThread member variables. Fixes crashes on OS X and Windows
       if X2Go Client terminates before these objects have been created at run
       time (for instance when running x2goclient --help.)
     - src/onmainwindow.cpp: correctly guard the new lines from the previous
       commit. Fixes compile issues on Linux and other systems.
     - res/i18n/x2goclient_es.ts: fixup Spanish translation file where
       necessary and add comments/requests for re-translations for the next
       time.
     - res/i18n/x2goclient_es.ts: remove obsolete comments and very minor
       whitespace fixup.
     - res/i18n/x2goclient_de.ts: fixup German translation file, including
       typo, whitespace, grammar fixes and other stuff.
     - res/i18n/x2goclient_sv.ts: remove obsolete comments and very minor
       whitespace fix.
     - macbuild.sh: sanitize find input, as BSD find and GNU find behave
       differently.
     - macbuild.sh: get rid of problems and use gfind directly. We need special
       GNU features.
     - src/appdialog.cpp: logic so that X2Go-Top applications are shown again.
       Used faulty logic when silencing compiler warnings.
     - res/i18n/x2goclient_fi.ts: fix up Finnish translation file, including
       typo, whitespace fixes and marking untranslated entries as such again,
       after removing the English "translation" text.
 .
   [ Bernard Cafarelli ]
   * New upstream version (4.1.0.0):
     - {res/,x2goclient.pro}: rename .rcc files to .qrc. Fixes: #1096. "rcc" is
       the extension for compiled resource files, whereas "qrc" is the mapping
       file. Qt5 stumbles upon that - i.e., it doesn't try to compile files
       with the "rcc" extension, while Qt4 did.
     - res/: fix up previous change, the renaming of changelog.qrc was not
       correctly committed.
 .
   [ Jason Alavaliant ]
   * New upstream version (4.1.0.0):
     - src/{onmainwindow.{cpp,h},help.cpp}: modify autostart option to support
       multiple autostart apps at the same time. Fixes: #1024.
 .
   [ Oleksandr Shneyder ]
   * New upstream version (4.1.0.0):
     - src/onmainwindow.cpp: fix SSHFS on Windows client. Fixes: #1105.
 .
   [ Sébastien Ducoulombier ]
   * New upstream version (4.1.0.0):
     - res/i18n/x2goclient_fr.ts: update French translation file.
 .
   [ Daniel Lindgren ]
   * New upstream version (4.1.0.0):
     - res/i18n/x2goclient_sv.ts: update Swedish translation file.
     - res/i18n/x2goclient_sv.ts: fixup Swedish translation file.
 .
   [ Ricardo Díaz Martín ]
   * New upstream release (4.1.0.0):
     - res/i18n/x2goclient_es.ts: update Spanish translation file.
     - res/i18n/x2goclient_es.ts: update Spanish translation file.
 .
   [ Stefan Baur ]
   * New upstream release (4.1.0.0):
     - res/i18n/x2goclient_de.ts: update German translation file.
 .
   [ Martti Pitkänen ]
   * New upstream version (4.1.0.0):
     - res/i18n/x2goclient_fi.ts: update Finnish translation file.