Subject: Bug#1601: Patch for x2goclient Qt5 build on Windows

From: Orion Poplawski <[email-masked]>
Date: Tue, 9 May 2023 10:56:08 -0600

Package: x2goclient
Version: 4.1.2.2
Tag: patch

When compiling against Qt5 5.15.9 I get:

../src/wapi.cpp: In function 'void wapiSetWindowIcon(HWND, const QPixmap&)':
../src/wapi.cpp:224:88: error: 'class QPixmap' has no member named 
'toWinHICON'
   224 |     largeIcon=icon.scaled(iconx,icony, 
Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON ();
       |                        ^~~~~~~~~~
../src/wapi.cpp:225:90: error: 'class QPixmap' has no member named 
'toWinHICON'
   225 |     smallIcon=icon.scaled(smallx,smally, 
Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON ();
       |                          ^~~~~~~~~~

Now, the only call to wapiSetWindowIcon() is commented out, so I just 
commented out the wapiSetWindowIcon() code as we...  Looks like the 
current function to use is QImage::toHICON().

I'm also curious that you need to shift to a Windows API call - 
shouldn't we be able to do everything in Qt?

-- 
Orion Poplawski
he/him/his  - surely the least important thing about me
IT Systems Manager                         720-772-5637
NWRA, Boulder/CoRA Office             FAX: 303-415-9702
3380 Mitchell Lane                       [email-masked]
Boulder, CO 80301                 https://www.nwra.com/

diff -up x2goclient-4.1.2.2/src/wapi.cpp.qt5 x2goclient-4.1.2.2/src/wapi.cpp
--- x2goclient-4.1.2.2/src/wapi.cpp.qt5	2023-05-05 15:01:45.035453899 -0600
+++ x2goclient-4.1.2.2/src/wapi.cpp	2023-05-05 15:02:24.001831740 -0600
@@ -211,6 +211,7 @@ bool wapiSetWindowText( HWND wnd, const
     return SetWindowText(wnd, (LPCTSTR)text.utf16() );
 }
 
+#if 0
 void wapiSetWindowIcon ( HWND wnd, const QPixmap& icon)
 {
     int iconx=GetSystemMetrics(SM_CXICON);
@@ -235,6 +236,7 @@ void wapiSetWindowIcon ( HWND wnd, const
     /*    ShowWindow(wnd, SW_HIDE);
         ShowWindow(wnd, SW_SHOW);*/
 }
+#endif
 
 QString wapiShortFileName ( const QString& longName )
 {
diff -up x2goclient-4.1.2.2/src/wapi.h.qt5 x2goclient-4.1.2.2/src/wapi.h
--- x2goclient-4.1.2.2/src/wapi.h.qt5	2020-02-13 03:36:07.000000000 -0700
+++ x2goclient-4.1.2.2/src/wapi.h	2023-05-05 15:02:47.697061506 -0600
@@ -55,7 +55,7 @@ bool wapiWindowRectWithoutDecoration(HWN
 bool wapiShowWindow ( HWND wnd, wapiCmdShow nCmdShow );
 bool wapiUpdateWindow ( HWND wnd );
 bool wapiSetWindowText ( HWND wnd, const QString& text);
-void wapiSetWindowIcon ( HWND wnd, const QPixmap& icon);
+//void wapiSetWindowIcon ( HWND wnd, const QPixmap& icon);
 bool wapiMoveWindow ( HWND wnd, int x, int y, int width, int height,
                       bool repaint );
 bool wapiGetBorders ( HWND wnd, int& vBorder, int& hBorder, int& barHeight );

---

From: Ulrich Sibiller <[email-masked]>
Date: Tue, 9 May 2023 19:25:39 +0200

Iirc I have made some patches for the windows version. I thought they had
been merged but I must check that. For now try this:

#if QT_VERSION >= 0x050200
   largeIcon=QtWin::toHICON(icon.scaled(iconx,icony,
Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
   smallIcon=QtWin::toHICON(icon.scaled(smallx,smally,
Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
#else
   largeIcon=icon.scaled(iconx,icony,
Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON();
   smallIcon=icon.scaled(smallx,smally,
Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON();
#endif

Uli

Orion Poplawski <[email-masked]> schrieb am Di., 9. Mai 2023, 19:00:

> _______________________________________________
> x2go-dev mailing list
> [email-masked]
> https://lists.x2go.org/listinfo/x2go-dev
>

---

From: Ulrich Sibiller <[email-masked]>
Date: Tue, 9 May 2023 19:27:38 +0200

Hi again,

the current upstream of x2goclient contains these lines. So it looks
like your QT_VERSION is not set correctly. (see
https://code.x2go.org/gitweb?p=x2goclient.git;a=blob;f=src/wapi.cpp;h=12732c24b7b7cbf2da4cc8b0d0d9f782646960d3;hb=HEAD)

Uli

On Tue, May 9, 2023 at 7:25 PM Ulrich Sibiller
<[email-masked]> wrote:
>
> Iirc I have made some patches for the windows version. I thought they had been merged but I must check that. For now try this:
>
>
>    largeIcon=QtWin::toHICON(icon.scaled(iconx,icony, Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
>    smallIcon=QtWin::toHICON(icon.scaled(smallx,smally, Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
> #else
>    largeIcon=icon.scaled(iconx,icony, Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON();
>    smallIcon=icon.scaled(smallx,smally, Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON();
> #endif
>
>
> Uli
>
>> Boulder, CO 80301                 https://www.nwra.com/_______________________________________________
>> x2go-dev mailing list
>> [email-masked]

---

From: Orion Poplawski <[email-masked]>
Date: Tue, 9 May 2023 12:16:18 -0600

Gah, once again I make the mistake of not trying to build with the 
latest git
code.

So now I'm trying with that and getting:

i686-w64-mingw32-g++ -c -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 
-fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport -O2 
-Wall -Wextra -mthreads -DUNICODE -DCFGCLIENT -DQT_STATIC 
-DQT_DESIGNER_STATIC -DDBUS_STATIC_BUILD -DPCRE_STATIC -DPCRE2_STATIC 
-DQT_NO_DEBUG -DQT_SVG_LIB -DQT_WIDGETS_LIB -DQT_WINEXTRAS_LIB 
-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN 
-I../../x2goclient-1ca43813937df9cd136ae6d282204604ab659fab -I. -I../src 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtSvg 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtWidgets 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtWinExtras 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtGui 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtNetwork 
-I/usr/i686-w64-mingw32/sys-root/mingw/include/qt5/QtCore -Irelease -I. 
-I/usr/i686-w64-mingw32/sys-root/mingw/share/qt5/mkspecs/mingw-w64-g++ 
-o release/wapi.o ../src/wapi.cpp
../src/wapi.cpp:25:10: fatal error: AccCtrl.h: No such file or directory
    25 | #include <AccCtrl.h>
       |          ^~~~~~~~~~~

I couldn't find anything that provided that on my system so I simply 
removed it.  And that seems to compile okay.

Ah, just realized I'm on a case sensitive system, so changing that to 
<accctrl.h> works too.  But perhaps it isn't really needed?

---

From: Orion Poplawski <[email-masked]>
Date: Tue, 9 May 2023 12:19:48 -0600

And I think at the moment I still prefer simply removing the 
wapiSetWindowIcon() code since it isn't used and allows the removal of 
the QT winextras dependency.

On 5/9/23 12:16, Orion Poplawski wrote:
>>> Iirc I have made some patches for the windows version. I thought they 
>>> had been merged but I must check that. For now try this:
>>>
>>>
>>>> Boulder, CO 80301                 
>>>> https://www.nwra.com/_______________________________________________
>>>> x2go-dev mailing list
>>>> [email-masked]

---

From: Ulrich Sibiller <[email-masked]>
Date: Tue, 9 May 2023 21:24:42 +0200

Ok, that makes sense.

Checkout README .mxe for instructions how to compile for windows using mxe
on Linux

Uli