[X2Go-Commits] [x2goclient] 01/01: for x2gokdrive sessions, when auto kbd layout is chosen, x2goclient will try to set the same kbd layout on server as on the client.

git-admin at x2go.org git-admin at x2go.org
Mon Aug 8 18:00:48 CEST 2022


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goclient.

commit 34c121f25a9ee333918417bf1cbe3c6cef89d112
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Mon Aug 8 11:00:37 2022 -0500

    for x2gokdrive sessions, when auto kbd layout is chosen, x2goclient will try to set the same kbd layout on server as on the client.
---
 debian/changelog       |  3 +++
 src/help.cpp           |  2 ++
 src/onmainwindow.cpp   | 71 +++++++++++++++++++++++++++++++++++++++++++++++++-
 src/onmainwindow.h     |  2 +-
 src/wapi.cpp           | 16 ++++++++----
 src/wapi.h             |  1 +
 src/x2goclientconfig.h |  3 +++
 7 files changed, 91 insertions(+), 7 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index b00a51d..1d9ba63 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -48,6 +48,9 @@ x2goclient (4.1.2.3-0x2go1) UNRELEASED; urgency=medium
     - support for recent cygwin binaries and nxproxy 3.5.99.x
       all cygwin binaries and DLLs should be moved into the
       INSTDIR/bin directory by Windows installer.
+    - for x2gokdrive sessions, when auto kbd layout is chosen,
+      x2goclient will try to set the same kbd layout on server as on the
+      client.
 
   [ Ryan Schmidt ]
   * New upstream version (4.1.2.3):
diff --git a/src/help.cpp b/src/help.cpp
index 3dc3b8d..ea9fcfc 100644
--- a/src/help.cpp
+++ b/src/help.cpp
@@ -17,6 +17,8 @@
  *  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                   *
  ********************************************************************************/
 
+#include "x2goclientconfig.h"
+
 #include <QCoreApplication>
 #include <QtDebug>
 #include <QTextStream>
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index 666b042..9552df7 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -18,7 +18,6 @@
 #include "onmainwindow_privat.h"
 #include "help.h"
 
-
 #include <QStyleFactory>
 
 #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
@@ -4700,6 +4699,16 @@ void ONMainWindow::startNewSession()
       xinerama_env += "no";
     }
 
+    if(usekbd && kdrive && type=="auto")
+    {
+        QString kbdl, kbdm, kbdv;
+        getClientKeyboardConfig(kbdl,kbdm,kbdv);
+        type=kbdm+"/"+kbdl;
+        if(kbdv.length()>0)
+        {
+            type+="\\("+kbdv+"\\)";
+        }
+    }
     QString cmd=dpiEnv+xdmcpEnv+ xinerama_env + " x2gostartagent "+
                 geometry+" "+link+" "+pack+
                 " unix-kde-depth_"+depth+" "+layout+" "+type+" ";
@@ -4985,6 +4994,16 @@ void ONMainWindow::resumeSession ( const x2goSession& s )
         else
             selectSessionDlg->hide();
     }
+    if(usekbd && (s.sessionType == x2goSession::KDRIVE || s.sessionType == x2goSession::ROOTLESSKDRIVE) && type=="auto")
+    {
+        QString kbdl, kbdm, kbdv;
+        getClientKeyboardConfig(kbdl,kbdm,kbdv);
+        type=kbdm+"/"+kbdl;
+        if(kbdv.length()>0)
+        {
+            type+="\\("+kbdv+"\\)";
+        }
+    }
     QString cmd="x2goresume-session "+s.sessionId+" "+geometry+
                 " "+link+" "+pack+" "+layout+
                 " "+type+" ";
@@ -13736,3 +13755,53 @@ bool ONMainWindow::parseResourceUrl(const QString& url)
     }
     return true;
 }
+
+void ONMainWindow::getClientKeyboardConfig(QString& layout, QString& model, QString& variant)
+{
+    layout = "us";
+    model = "pc105";
+    variant = "";
+#ifdef Q_OS_DARWIN
+    //TODO:implement this for Mac
+    return;
+#endif
+#ifdef Q_OS_WIN
+    layout = wapiGetKeyboardLayout();
+#else
+    QProcess proc;
+    proc.start("setxkbmap",QStringList() << "-query");
+    if (!proc.waitForStarted())
+    {
+        x2goDebug<<"Failed to start xkbcomp"<<proc.error();
+        return;
+    }
+    if (!proc.waitForFinished())
+    {
+        x2goDebug<<"Failed to execute xkbcomp"<<proc.error();
+        return;
+    }
+    QStringList lines=QString(proc.readAllStandardOutput()).split("\n");
+    QString line;
+    foreach (line, lines)
+    {
+        line.replace(" ","");
+        line.replace("\t","");
+        if(line.indexOf("model:")!=-1)
+        {
+            model=line;
+            model.replace("model:","");
+        }
+        if(line.indexOf("layout:")!=-1)
+        {
+            layout=line;
+            layout.replace("layout:","");
+        }
+        if(line.indexOf("variant:")!=-1)
+        {
+            variant=line;
+            variant.replace("variant:","");
+        }
+    }
+    x2goDebug<<"xkbcomp keyboard config - model:"<<model<<" layout: "<<layout<<" variant: "<<variant;
+#endif
+}
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index f84ff26..e88b689 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -1004,7 +1004,6 @@ private:
     void plugAppsInTray();
     QMenu* initTrayAppMenu(QString text, QPixmap icon);
     void setTrayIconToSessionIcon(QString info);
-
     /*
      * Tries to get the most suitable translator for the running system.
      *
@@ -1023,6 +1022,7 @@ private:
      * translation.
      */
     static bool get_translator (const QString file_name_start, QTranslator **translator);
+    void getClientKeyboardConfig(QString& layout, QString& model, QString& variant);
 
 
 protected:
diff --git a/src/wapi.cpp b/src/wapi.cpp
index e7ded94..15bf2e5 100644
--- a/src/wapi.cpp
+++ b/src/wapi.cpp
@@ -15,17 +15,13 @@
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>. *
 ***************************************************************************/
 
-#ifndef _WIN32_WINDOWS
-#define _WIN32_WINDOWS 0x0500
-#define _WIN32_WINNT 0x0500
-#define WINVER 0x0500
-#endif
 #include "x2goclientconfig.h"
 #ifdef Q_OS_WIN
 #include <winsock2.h>
 #include <windows.h>
 #include <winerror.h>
 #include <sddl.h>
+#include <winnls.h>
 #include <AccCtrl.h>
 #include <aclapi.h>
 #include "wapi.h"
@@ -609,4 +605,14 @@ void wapiSetFilePermissions(const QString& path)
         CONTAINER_INHERIT_ACE);
 }
 
+QString wapiGetKeyboardLayout()
+{
+    wchar_t nm[LOCALE_NAME_MAX_LENGTH];
+    LCIDToLocaleName(HIWORD(GetKeyboardLayout(0)),nm,LOCALE_NAME_MAX_LENGTH,0);
+    QStringList l=QString::fromUtf16((char16_t*)nm).split("-");
+    if(l.count()==2)
+        return l[1].toLower();
+    return QString::null;
+}
+
 #endif
diff --git a/src/wapi.h b/src/wapi.h
index 588b58d..72cd993 100644
--- a/src/wapi.h
+++ b/src/wapi.h
@@ -76,6 +76,7 @@ void wapiRestoreWindow ( HWND hWnd, long style, const QRect& desktopGeometry );
 QString wapiGetDriveByLabel(const QString& label);
 QString wapiGetUserName();
 void wapiSetFilePermissions(const QString& path);
+QString wapiGetKeyboardLayout();
 
 #endif
 #endif
diff --git a/src/x2goclientconfig.h b/src/x2goclientconfig.h
index bdf35c8..3bb9aeb 100644
--- a/src/x2goclientconfig.h
+++ b/src/x2goclientconfig.h
@@ -18,6 +18,9 @@
 #if !defined(_X2GOCLIENT_CONFIG_H_)
 #define _X2GOCLIENT_CONFIG_H_
 
+//min supported windows version is windows vista
+#define WINVER 0x0601
+
 #include <stdio.h>
 #include <qconfig.h>
 #include <qglobal.h>

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list