aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog2
-rw-r--r--debian/patches-pending-evaluation/fix-fprintf-usage.patch31
-rw-r--r--debian/patches-pending-evaluation/fix-icon-and-clipboard.patch566
3 files changed, 599 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 984f6ebfd..ebf996c26 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,8 @@ nx-libs (2:3.5.0.8-0) UNRELEASED; urgency=low
* Update patch: 001_add-main-makefile.full+lite.patch, only build, install,
clean etc. NX subprojects if the folder exists.
* Package x2goagent is an ,,all'' package, not ,,any''.
+ * Add folder /debian/patches-pending-evaluation with two newly discovered
+ patches from git.etersoft.ru (AltLinux packaging repository for NX).
-- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Mon, 16 Jan 2012 22:28:13 +0100
diff --git a/debian/patches-pending-evaluation/fix-fprintf-usage.patch b/debian/patches-pending-evaluation/fix-fprintf-usage.patch
new file mode 100644
index 000000000..4abda6064
--- /dev/null
+++ b/debian/patches-pending-evaluation/fix-fprintf-usage.patch
@@ -0,0 +1,31 @@
+From: Vitaly Lipatov <lav@etersoft.ru>
+Date: Wed, 3 Jun 2009 00:49:01 +0000 (+0400)
+Subject: fix fprintf using
+X-Git-Tag: 3.3.0-alt16.1~1^2
+X-Git-Url: http://git.etersoft.ru?p=rx%2Fnx.git;a=commitdiff_plain;h=f68888aab5c92e99f398f5fe7407edf09e2c86ce
+
+ fix fprintf using
+
++--- a/nx-X11/config/imake/imake.c
+++++ b/nx-X11/config/imake/imake.c
++@@ -1015,7 +1015,7 @@ get_libc_version(FILE *inFile)
++ abort ();
++
++ while (fgets (command, len, fp))
++- fprintf (inFile, command);
+++ fwrite (command, strlen(command), 1, inFile);
++
++ len = pclose (fp);
++ remove (aout);
++
++--- a/nx-X11/extras/rman/rman.c.orig 2009-06-03 04:29:39 +0400
+++++ b/nx-X11/extras/rman/rman.c 2009-06-03 05:19:07 +0400
++@@ -1432,7 +1432,7 @@ HTML(enum command cmd)
++ break;
++ case BEGINSECTION: break;
++ case ENDSECTION:
++- if (sectheadid==NAME && message!=NULL) printf(message);
+++ if (sectheadid==NAME && message!=NULL) printf("%s",message);
++ break;
++ case BEGINSUBSECTION: break;
++ case ENDSUBSECTION: break;
diff --git a/debian/patches-pending-evaluation/fix-icon-and-clipboard.patch b/debian/patches-pending-evaluation/fix-icon-and-clipboard.patch
new file mode 100644
index 000000000..e4faef051
--- /dev/null
+++ b/debian/patches-pending-evaluation/fix-icon-and-clipboard.patch
@@ -0,0 +1,566 @@
+From: Boris Savelev <boris@altlinux.org>
+Date: Fri, 11 Jul 2008 13:50:46 +0000 (+0400)
+Subject: fix icons and clipboard (thanks to dimbor)
+X-Git-Tag: 3.3.0-alt2~24
+X-Git-Url: http://git.etersoft.ru?p=rx%2Fnx.git;a=commitdiff_plain;h=c51ec5f4afcbf6199da5343f52241f6ef8edbbfb
+
+fix icons and clipboard (thanks to dimbor)
+---
+
+diff --git a/nxwin/programs/Xserver/hw/nxwin/wincutpaste.c b/nxwin/programs/Xserver/hw/nxwin/wincutpaste.c
+index 862f75a..5405568 100644
+--- a/nxwin/programs/Xserver/hw/nxwin/wincutpaste.c
++++ b/nxwin/programs/Xserver/hw/nxwin/wincutpaste.c
+@@ -78,6 +78,8 @@
+
+ #define MIN(a,b) ((a) < (b) ? (a) : (b))
+
++/*#define NXWIN_CLIPBOARD_DEBUG*/
++
+ extern WindowPtr *WindowTable;
+ extern Selection *CurrentSelections;
+ extern int NumCurrentSelections;
+@@ -96,6 +98,8 @@ Atom clientTARGETS;
+ Atom clientTEXT;
+ Atom clientCutProperty;
+ Atom clientCLIPBOARD;
++Atom UTF8_STRING;
++Atom COMPOUND_TEXT;
+
+ Bool windowsOwner = FALSE;
+ Bool clientOwner = FALSE;
+@@ -119,7 +123,7 @@ void nxwinClearSelection(void)
+ return;
+
+ #ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("ClearSelection\n");
++ ErrorF("%d nxwinClearSelection: ClearSelection\n",GetTickCount());
+ #endif
+
+ for (i = 0; i < MIN(MaxSelections, NumCurrentSelections); i++)
+@@ -155,8 +159,16 @@ void nxwinInitSelection(HWND hwnd)
+ clientTEXT = MakeAtom("TEXT", strlen("TEXT"), TRUE);
+ clientCutProperty = MakeAtom("NX_CUT_BUFFER_CLIENT", strlen("NX_CUT_BUFFER_CLIENT"), TRUE);
+ clientCLIPBOARD = MakeAtom("CLIPBOARD", strlen("CLIPBOARD"), TRUE);
++/* */
++ UTF8_STRING = MakeAtom("UTF8_STRING", strlen("UTF8_STRING"), TRUE);
++ COMPOUND_TEXT = MakeAtom("COMPOUND_TEXT", strlen("COMPOUND_TEXT"), TRUE);
++/* */
+ nxwinClipboardStatus = TRUE;
+ windowsOwner = TRUE;
++#ifdef NXWIN_CLIPBOARD_DEBUG
++/* ErrorF("%d nxwinInitSelection\n",GetTickCount());
++*/
++#endif
+ /* nxwinSetWindowClipboard(" ");*/
+ }
+
+@@ -165,15 +177,17 @@ void nxwinSetSelectionOwner(Selection *pSelection)
+ if (!nxwinClipboardStatus)
+ return;
+
+-#ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("SetSelectionOwner\n");
+-#endif
+
+ lastOwnerWindowPtr = pSelection->pWin;
+ lastOwnerWindow = pSelection->window;
+ lastOwnerClientPtr = pSelection->client;
+
+ nxwinSelection = TRUE;
++
++#ifdef NXWIN_CLIPBOARD_DEBUG
++/* ErrorF("%d nxwinSetSelectionOwner: window [%p], pWin [%p]\n",GetTickCount(),pSelection->window,pSelection->pWin);
++*/
++#endif
+ /*
+ if (pSelection->selection == XA_PRIMARY)
+ {
+@@ -194,21 +208,67 @@ void nxwinSetSelectionOwner(Selection *pSelection)
+ NoEventMask, NoEventMask ,
+ NullGrab);
+ #ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("SetSelectionOwner XA_PRIMARY \n");
++ ErrorF(" nxwinSetSelectionOwner: SetSelectionOwner XA_PRIMARY \n");
+ #endif
+
+ windowsOwner = FALSE;
+ }
+ */
++
++}
++
++/* ------------------ My ------------------------------------------- */
++char * unicode_to_some_cp(wchar_t *unicode_string, int CP)
++{
++ int err;
++ char * res;
++ int res_len = WideCharToMultiByte(
++ CP, // Code page
++ 0, // Default replacement of illegal chars
++ unicode_string, // Multibyte characters string
++ -1, // Number of unicode chars is not known
++ NULL, // No buffer yet, allocate it later
++ 0, // No buffer
++ NULL, // Use system default
++ NULL // We are not interested whether the default char was used
++ );
++ if (res_len == 0)
++ {
++ return NULL;
++ }
++ res = malloc(res_len);
++ if (res == NULL)
++ {
++ return NULL;
++ }
++ err = WideCharToMultiByte(
++ CP, // Code page
++ 0, // Default replacement of illegal chars
++ unicode_string, // Multibyte characters string
++ -1, // Number of unicode chars is not known
++ res, // Output buffer
++ res_len, // buffer size
++ NULL, // Use system default
++ NULL // We are not interested whether the default char was used
++ );
++ if (err == 0)
++ {
++ free(res);
++ return NULL;
++ }
++ return res;
+ }
+
++
++/* ------------------ My ------------------------------------------- */
++
+ Bool nxwinConvertSelection(ClientPtr client ,WindowPtr pWin, Atom selection, Window requestor, Atom property, Atom target, Time time)
+ {
+ if (!nxwinClipboardStatus)
+ return 0;
+
+ #ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("ConvertSelection\n");
++ ErrorF("%d nxwinConvertSelection: pWin [%p], selection [%s], target [%s]\n",GetTickCount(),pWin,NameForAtom(selection),NameForAtom(target));
+ #endif
+
+ if (!windowsOwner) /* there is a X client owner, let normal stuff happens */
+@@ -236,20 +296,25 @@ Bool nxwinConvertSelection(ClientPtr client ,WindowPtr pWin, Atom selection, Win
+ return 1;
+ }
+
+-#ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("ConvertSelection converting...\n");
+-#endif
+
+- if ((target == clientTEXT) || (target == XA_STRING))
++ if ((target == clientTEXT) || (target == XA_STRING) || (target == UTF8_STRING))
+ {
+ HGLOBAL hGlobal;
+ char *pszGlobalData;
+ xEvent x;
+
++ char *pszData=NULL;
++
+ /* Access the clipboard */
+ if (!OpenClipboard (lastHwnd)) return 0;
+-
+- hGlobal = GetClipboardData (CF_TEXT);
++ if (target == UTF8_STRING)
++ {
++ hGlobal = GetClipboardData (CF_UNICODETEXT);
++ }
++ else
++ {
++ hGlobal = GetClipboardData (CF_TEXT);
++ }
+ if (!hGlobal)
+ {
+ CloseClipboard();
+@@ -264,10 +329,29 @@ Bool nxwinConvertSelection(ClientPtr client ,WindowPtr pWin, Atom selection, Win
+ return 1;
+ }
+ pszGlobalData = (char *) GlobalLock (hGlobal);
+-
+- /* Convert DOS string to UNIX string */
+- DOStoUNIX (pszGlobalData, strlen (pszGlobalData));
+-
++
++ if (target == UTF8_STRING)
++ {
++ /* Convert DOS string to UNIX string */
++ DOStoUNIX (pszGlobalData, strlen (pszGlobalData));
++ pszData = unicode_to_some_cp((wchar_t *) pszGlobalData,CP_UTF8);
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF(" Set sel [%s], target [%s], prop [%s] to UTF-8 string [%s]\n",NameForAtom(selection),NameForAtom(target),NameForAtom(property),pszData);
++#endif
++ /* Copy the clipboard text to the requesting window */
++ ChangeWindowProperty(pWin,
++ property,
++ target,
++ 8,
++ PropModeReplace,
++ strlen(pszData),
++ pszData, 1);
++ }
++ else
++ {
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF(" Set sel [%s], target [%s], prop [%s] to CP-1251 string [%s]\n",NameForAtom(selection),NameForAtom(target),NameForAtom(property),pszGlobalData);
++#endif
+ /* Copy the clipboard text to the requesting window */
+ ChangeWindowProperty(pWin,
+ property,
+@@ -276,12 +360,16 @@ Bool nxwinConvertSelection(ClientPtr client ,WindowPtr pWin, Atom selection, Win
+ PropModeReplace,
+ strlen(pszGlobalData),
+ pszGlobalData, 1);
++ }
+
+ /* Release the clipboard data */
+ GlobalUnlock (hGlobal);
+ pszGlobalData = NULL;
+ CloseClipboard ();
+
++ if (pszData != NULL)
++ free (pszData);
++
+ x.u.u.type = SelectionNotify;
+ x.u.selectionNotify.time = time;
+ x.u.selectionNotify.requestor = requestor;
+@@ -370,6 +458,7 @@ UNIXtoDOS (char **ppszData, int iLength)
+ }
+
+
++
+ void
+ DOStoUNIX (char *pszSrc, int iLength)
+ {
+@@ -401,8 +490,11 @@ void nxwinSetWindowClipboard(char *text, int iLength)
+ char *pszGlobalData;
+ char *pszTemp;
+
++
+ if (!nxwinClipboardStatus)
++ {
+ return;
++ }
+
+ if (OpenClipboard(lastHwnd))
+ {
+@@ -440,6 +532,9 @@ void nxwinSetWindowClipboard(char *text, int iLength)
+ /* free the allocated memory */
+ xfree(pszTemp);
+
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF("%d nxwinSetWindowClipboard: [%s].\n",GetTickCount(),pszGlobalData);
++#endif
+ /* Release the pointer to the global memory */
+ GlobalUnlock (hGlobal);
+ pszGlobalData = NULL;
+@@ -466,10 +561,14 @@ Bool nxwinSendNotify(xEvent* x)
+ int iReturn;
+
+ #ifdef NXWIN_CLIPBOARD_DEBUG
+- ErrorF("SendNotify\n");
++ ErrorF("%d nxwinSendNotify: pwin [%p];",GetTickCount(),lastOwnerWindowPtr);
++ ErrorF(" x->u.u.type [%s]; x->u.selectionNotify: property [%s]; target [%s]; selection [%s]",NameForAtom(x->u.u.type),NameForAtom(x->u.selectionNotify.property),NameForAtom(x->u.selectionNotify.target),NameForAtom(x->u.selectionNotify.selection));
+ #endif
+ if (x->u.selectionNotify.property == clientCutProperty)
+ {
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF("\n");
++#endif
+ Atom atomReturnType;
+ int iReturnFormat;
+ unsigned long ulReturnItems;
+@@ -479,13 +578,26 @@ Bool nxwinSendNotify(xEvent* x)
+ AnyPropertyType, &atomReturnType, &iReturnFormat,
+ &ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
+
++/*
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF("nxwinSendNotify: called 1-st GetWindowProperty - status = %d, ulReturnBytesLeft = %d\n",Success,ulReturnBytesLeft);
++#endif
++*/
+ if ((iReturn == Success) && (ulReturnBytesLeft > 0))
+ {
+ iReturn = GetWindowProperty(lastOwnerWindowPtr,clientCutProperty,0,ulReturnBytesLeft, FALSE,
+ AnyPropertyType, &atomReturnType, &iReturnFormat,
+ &ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
++/*
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF("nxwinSendNotify: called 2-nd GetWindowProperty - status=%d, ulReturnItems=%d\n",Success,ulReturnItems);
++#endif
++*/
+ if ((iReturn == Success) && (ulReturnItems > 0))
+ {
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF(" AtomReturnType [%s]\n",NameForAtom(atomReturnType));
++#endif
+ nxwinSetWindowClipboard(pszReturnData, ulReturnItems);
+
+ clientOwner = TRUE;
+@@ -495,6 +607,9 @@ Bool nxwinSendNotify(xEvent* x)
+ }
+ }
+ }
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ else ErrorF(" !! MISSED !!\n");
++#endif
+ return FALSE;
+ }
+
+@@ -512,19 +627,27 @@ void nxwinLostFocus(void)
+ if (lastOwnerWindowPtr)
+ {
+ xEvent x;
++#ifdef NXWIN_CLIPBOARD_DEBUG
++ ErrorF("%d nxwinLostFocus: lastOwnerWindow [%p]; pWin [%p]; target [%s]; prop [%s]\n",GetTickCount(),lastOwnerWindow,lastOwnerWindowPtr,NameForAtom(XA_STRING),NameForAtom(clientCutProperty));
++#endif
+
+ x.u.u.type = SelectionRequest;
+ x.u.selectionRequest.time = GetTimeInMillis();
+ x.u.selectionRequest.owner = lastOwnerWindow;
+ x.u.selectionRequest.requestor = WindowTable[0]->drawable.id;
+- x.u.selectionRequest.selection = XA_PRIMARY;
++/* My changes */
++/*
++ x.u.selectionRequest.selection = XA_PRIMARY;
++*/
++ x.u.selectionRequest.selection = clientCLIPBOARD;
++/* My changes */
+ x.u.selectionRequest.target = XA_STRING;
+ x.u.selectionRequest.property = clientCutProperty;
+-
+ (void) TryClientEvents (lastOwnerClientPtr, &x, 1,
+ NoEventMask, NoEventMask /* CantBeFiltered */,
+ NullGrab);
+ SetCriticalOutputPending();
++
+ }
+ }
+
+diff --git a/nxwin/programs/Xserver/hw/nxwin/winmultiwindowwm.c b/nxwin/programs/Xserver/hw/nxwin/winmultiwindowwm.c
+index e8149c7..a09d227 100644
+--- a/nxwin/programs/Xserver/hw/nxwin/winmultiwindowwm.c
++++ b/nxwin/programs/Xserver/hw/nxwin/winmultiwindowwm.c
+@@ -408,7 +408,9 @@ privateGetWindowName(void *pWin, char **ppName, Atom atom)
+ if( (retValue = GetWindowProperty(pWin, atom, 0L, 0L, False,
+ AnyPropertyType, &retType, &retFormat,
+ &nItems, &bytesLeft, (unsigned char**)NULL)) != Success){
+- ErrorF("GetWindowName: GetWindowProperty failed\n");
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ ErrorF("GetWindowName: GetWindowProperty /length/ failed\n");
++#endif
+ return retValue;
+ }
+ origLen = bytesLeft;
+@@ -417,7 +419,9 @@ privateGetWindowName(void *pWin, char **ppName, Atom atom)
+ if( (retValue = GetWindowProperty(pWin, atom, 0L, bytesLeft, False,
+ AnyPropertyType, &retType, &retFormat,
+ &nItems, &bytesLeft, (unsigned char**)ppName)) != Success){
+- ErrorF("GetWindowName: GetWindowProperty failed\n");
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ ErrorF("GetWindowName: GetWindowProperty /value/ failed\n");
++#endif
+ free(strName);
+ return retValue;
+ }
+@@ -448,8 +452,16 @@ GetWindowName (void *pWin, char **ppName)
+
+ /* TRY with ATOM WM_NAME */
+ reqAtom = XA_WM_NAME;
+- if( privateGetWindowName(pWin, ppName, reqAtom) == Success )
++ if( privateGetWindowName(pWin, ppName, reqAtom) == Success )
++/* ------------------ My crooked additions ------------------------------------------- */
++/* sometimes *ppName is present and zero length - anyway need to try second atom */
++ { if (strlen(*ppName) > 0)
++ {
+ return;
++ }
++ else free(*ppName);
++ }
++/* ------------------ My crooked additions ------------------------------------------- */
+ reqAtom = MakeAtom(atom_NET_WM_NAME, sizeof(atom_NET_WM_NAME) - 1, True);
+ privateGetWindowName(pWin, ppName, reqAtom);
+ }
+@@ -537,6 +549,98 @@ winMultStackWindow(pWin, val)
+ return 1;
+ }
+
++/* ------------------ My crooked additions ------------------------------------------- */
++wchar_t * utf8_to_unicode(char *utf8_string)
++{
++ int err;
++ wchar_t * res;
++ int res_len = 1000;
++ res = malloc(res_len);
++ err = MultiByteToWideChar(
++ CP_UTF8, // Code page
++ 0, // No flags
++ utf8_string, // Multibyte characters string
++ -1, // The string is NULL terminated
++ res, // Output buffer
++ res_len // buffer size
++ );
++ if (err == 0)
++ {
++// printf("Failed to convert to unicode\n");
++ free(res);
++ return NULL;
++ }
++ return res;
++}
++
++void
++winSetWinName (WMMsgNodePtr pNode)
++{
++ {
++ /*XWindowAttributes attr;*/
++ char *pszName;
++ wchar_t *pszWName;
++#if 0
++ XWMHints *pHints;
++#endif
++ /* Get the window attributes */
++ /*
++ XGetWindowAttributes (pWMInfo->pDisplay,
++ pNode->msg.iWindow,
++ &attr);
++ */
++ if (!winGetOverrideRedirectPriv(pNode->msg.pWin))
++ {
++#ifdef NXWIN_MULTIWINDOW
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ if(nxwinMultiwindow)
++ ErrorF("winMultiWindowWMProc: LOCK before GetWindowName\n");
++ else
++ ErrorF("winMultiWindowWMProc: before GetWindowName\n");
++#endif
++ if(nxwinMultiwindow && pthread_mutex_lock(&nxwinMultiwindowMutex))
++ ErrorF("winMultiWindowWMProc: pthread_mutex_lock failed\n");
++#endif
++ /* Set the Windows window name */
++ GetWindowName(pNode->msg.pWin, &pszName);
++#ifdef NXWIN_MULTIWINDOW
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ if(nxwinMultiwindow)
++ ErrorF("winMultiWindowWMProc: UNLOCK after GetWindowName\n");
++ else
++ ErrorF("winMultiWindowWMProc: after GetWindowName\n");
++#endif
++ if(nxwinMultiwindow && pthread_mutex_unlock(&nxwinMultiwindowMutex) != 0)
++ ErrorF("winMultiWindowWMProc: !!! pthread_mutex_unlock failed\n");
++#endif
++ if(!pszName){
++ ErrorF("winMultiWindowWMProc: GetWindowName failed\n");
++ return;
++ }
++
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ ErrorF("winMultiWindowWMProc!!!: Window title before converting - %s\n",pszName);
++#endif
++/* if you know, how to get system charset from server, tell me about them */
++ pszWName = utf8_to_unicode(pszName);
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ ErrorF("winMultiWindowWMProc!!!: Window title after converting - %s\n",pszWName);
++#endif
++ SetWindowTextW (pNode->msg.hwndWindow, pszWName);
++// SetWindowText (pNode->msg.hwndWindow, pszName);
++
++#ifdef NXWIN_MULTIWINDOW_DEBUG
++ ErrorF("winMultiWindowWMProc: Insert here LoadIcon\n");
++#endif
++ free (pszName);
++ if (pszWName != NULL)
++ free (pszWName);
++ }
++ }
++}
++/* -----------End of my crooked additions ------------------------------------------- */
++
++
+ static void *
+ winMultiWindowWMProc (void *pArg)
+ {
+@@ -599,6 +703,10 @@ winMultiWindowWMProc (void *pArg)
+ /*
+ XRaiseWindow (pWMInfo->pDisplay, pNode->msg.iWindow);
+ */
++
++/* ------------------ My crooked additions ------------------------------------------- */
++ winSetWinName (pNode);
++/* -----------End of my crooked additions ------------------------------------------- */
+ break;
+
+ case WM_WM_LOWER:
+@@ -617,54 +725,9 @@ winMultiWindowWMProc (void *pArg)
+ #if CYGMULTIWINDOW_DEBUG
+ ErrorF ("\tWM_WM_MAP\n");
+ #endif
+- {
+- /*XWindowAttributes attr;*/
+- char *pszName;
+-#if 0
+- XWMHints *pHints;
+-#endif
+-
+- /* Get the window attributes */
+- /*
+- XGetWindowAttributes (pWMInfo->pDisplay,
+- pNode->msg.iWindow,
+- &attr);
+- */
+- if (!winGetOverrideRedirectPriv(pNode->msg.pWin))
+- {
+-#ifdef NXWIN_MULTIWINDOW
+-#ifdef NXWIN_MULTIWINDOW_DEBUG
+- if(nxwinMultiwindow)
+- ErrorF("winMultiWindowWMProc: LOCK before GetWindowName\n");
+- else
+- ErrorF("winMultiWindowWMProc: before GetWindowName\n");
+-#endif
+- if(nxwinMultiwindow && pthread_mutex_lock(&nxwinMultiwindowMutex))
+- ErrorF("winMultiWindowWMProc: pthread_mutex_lock failed\n");
+-#endif
+- /* Set the Windows window name */
+- GetWindowName(pNode->msg.pWin, &pszName);
+-#ifdef NXWIN_MULTIWINDOW
+-#ifdef NXWIN_MULTIWINDOW_DEBUG
+- if(nxwinMultiwindow)
+- ErrorF("winMultiWindowWMProc: UNLOCK after GetWindowName\n");
+- else
+- ErrorF("winMultiWindowWMProc: after GetWindowName\n");
+-#endif
+- if(nxwinMultiwindow && pthread_mutex_unlock(&nxwinMultiwindowMutex) != 0)
+- ErrorF("winMultiWindowWMProc: !!! pthread_mutex_unlock failed\n");
+-#endif
+- if(!pszName){
+- ErrorF("winMultiWindowWMProc: GetWindowName failed\n");
+- break;
+- }
+- SetWindowText (pNode->msg.hwndWindow, pszName);
+-#ifdef NXWIN_MULTIWINDOW_DEBUG
+- ErrorF("winMultiWindowWMProc: Insert here LoadIcon\n");
+-#endif
+- free (pszName);
+- }
+- }
++/* ------------------ My crooked additions ------------------------------------------- */
++ winSetWinName (pNode);
++/* -----------End of my crooked additions ------------------------------------------- */
+ break;
+
+ case WM_WM_UNMAP:
+@@ -904,6 +967,9 @@ winMultiWindowWMProc (void *pArg)
+ if(nxwinMultiwindow && pthread_mutex_unlock(&nxwinMultiwindowMutex))
+ ErrorF("!!! pthread_mutex_unlock failed\n");
+ #endif
++/* ------------------ My crooked additions ------------------------------------------- */
++ winSetWinName (pNode);
++/* -----------End of my crooked additions ------------------------------------------- */
+ break;
+ #if 0
+ case WM_WM_X_EVENT: