Xming: Always update the Windows title Unicode (wide-character) in -multiwindow mode.
Apply the Windows title wide-character in -multiwindow mode. Windows should now display correct client X Window titles for locales with wide characters. Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
This commit is contained in:
		
							parent
							
								
									db687f718f
								
							
						
					
					
						commit
						bad41bdfd4
					
				| 
						 | 
				
			
			@ -153,7 +153,7 @@ static Bool
 | 
			
		|||
InitQueue (WMMsgQueuePtr pQueue);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
GetWindowName (Display * pDpy, Window iWin, char **ppName);
 | 
			
		||||
GetWindowName (Display * pDpy, Window iWin, wchar_t **ppName);
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
SendXMessage (Display *pDisplay, Window iWin, Atom atmType, long nData);
 | 
			
		||||
| 
						 | 
				
			
			@ -416,10 +416,12 @@ InitQueue (WMMsgQueuePtr pQueue)
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
GetWindowName (Display *pDisplay, Window iWin, char **ppName)
 | 
			
		||||
GetWindowName (Display *pDisplay, Window iWin, wchar_t **ppName)
 | 
			
		||||
{
 | 
			
		||||
  int			nResult, nNum;
 | 
			
		||||
  char			**ppList;
 | 
			
		||||
  char			*pszReturnData;
 | 
			
		||||
  int			iLen, i;
 | 
			
		||||
  XTextProperty		xtpName;
 | 
			
		||||
  
 | 
			
		||||
#if CYGMULTIWINDOW_DEBUG
 | 
			
		||||
| 
						 | 
				
			
			@ -438,38 +440,26 @@ GetWindowName (Display *pDisplay, Window iWin, char **ppName)
 | 
			
		|||
#endif
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
  /* */
 | 
			
		||||
  if (xtpName.encoding == XA_STRING)
 | 
			
		||||
    {
 | 
			
		||||
      /* */
 | 
			
		||||
      if (xtpName.value)
 | 
			
		||||
	{
 | 
			
		||||
	  int size = xtpName.nitems * (xtpName.format >> 3);
 | 
			
		||||
	  *ppName = malloc(size + 1);
 | 
			
		||||
	  strncpy(*ppName, xtpName.value, size);
 | 
			
		||||
	  (*ppName)[size] = 0;
 | 
			
		||||
	  XFree (xtpName.value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if CYGMULTIWINDOW_DEBUG
 | 
			
		||||
      ErrorF ("GetWindowName - XA_STRING %s\n", *ppName);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (XmbTextPropertyToTextList (pDisplay, &xtpName, &ppList, &nNum) >= Success && nNum > 0 && *ppList)
 | 
			
		||||
	{
 | 
			
		||||
	  *ppName = strdup (*ppList);
 | 
			
		||||
	  XFreeStringList (ppList);
 | 
			
		||||
	}
 | 
			
		||||
      XFree (xtpName.value);
 | 
			
		||||
 | 
			
		||||
#if CYGMULTIWINDOW_DEBUG
 | 
			
		||||
      ErrorF ("GetWindowName - %s %s\n",
 | 
			
		||||
	      XGetAtomName (pDisplay, xtpName.encoding), *ppName);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
   if (Xutf8TextPropertyToTextList (pDisplay, &xtpName, &ppList, &nNum) >= Success && nNum > 0 && *ppList)
 | 
			
		||||
   {
 | 
			
		||||
 	iLen = 0;
 | 
			
		||||
 	for (i = 0; i < nNum; i++) iLen += strlen(ppList[i]);
 | 
			
		||||
 	pszReturnData = (char *) malloc (iLen + 1);
 | 
			
		||||
 	pszReturnData[0] = '\0';
 | 
			
		||||
 	for (i = 0; i < nNum; i++) strcat (pszReturnData, ppList[i]);
 | 
			
		||||
 	if (ppList) XFreeStringList (ppList);
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
 	pszReturnData = (char *) malloc (1);
 | 
			
		||||
 	pszReturnData[0] = '\0';
 | 
			
		||||
   }
 | 
			
		||||
   iLen = MultiByteToWideChar (CP_UTF8, 0, pszReturnData, -1, NULL, 0);
 | 
			
		||||
   *ppName = (wchar_t*)malloc(sizeof(wchar_t)*(iLen + 1));
 | 
			
		||||
   MultiByteToWideChar (CP_UTF8, 0, pszReturnData, -1, *ppName, iLen);
 | 
			
		||||
   XFree (xtpName.value);
 | 
			
		||||
   free (pszReturnData);
 | 
			
		||||
 | 
			
		||||
#if CYGMULTIWINDOW_DEBUG
 | 
			
		||||
  ErrorF ("GetWindowName - Returning\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -506,7 +496,7 @@ SendXMessage (Display *pDisplay, Window iWin, Atom atmType, long nData)
 | 
			
		|||
static void
 | 
			
		||||
UpdateName (WMInfoPtr pWMInfo, Window iWindow)
 | 
			
		||||
{
 | 
			
		||||
  char			*pszName;
 | 
			
		||||
  wchar_t		*pszName;
 | 
			
		||||
  Atom			atmType;
 | 
			
		||||
  int			fmtRet;
 | 
			
		||||
  unsigned long		items, remain;
 | 
			
		||||
| 
						 | 
				
			
			@ -550,7 +540,7 @@ UpdateName (WMInfoPtr pWMInfo, Window iWindow)
 | 
			
		|||
			    &attr);
 | 
			
		||||
      if (!attr.override_redirect)
 | 
			
		||||
	{
 | 
			
		||||
	  SetWindowText (hWnd, pszName);
 | 
			
		||||
	  SetWindowTextW (hWnd, pszName);
 | 
			
		||||
	  winUpdateIcon (iWindow);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue