hw/xwin: Add '@<WM_CLIENT_MACHINE>' to window name when it's useful to do so
Enhance GetWindowName() so it appends the result of XGetWMClientMachine() when it is available and useful to do so Add -hostintitle option to control this behaviour. Add documentation for this option to man page and -help text. Also, fix warning in UpdateName() v2: Provide a HOST_NAME_MAX definition for MinGW v3: Use '@host' rather than ' (on host)'. Don't add host if it's already in the title. Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk> Reviewed-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
parent
6804acfe4f
commit
03e1cc6f25
|
@ -786,6 +786,9 @@ winUseMsg(void)
|
||||||
|
|
||||||
ErrorF("-fullscreen\n" "\tRun the server in fullscreen mode.\n");
|
ErrorF("-fullscreen\n" "\tRun the server in fullscreen mode.\n");
|
||||||
|
|
||||||
|
ErrorF("-hostintitle\n"
|
||||||
|
"\tIn multiwindow mode, add remote host names to window titles.\n");
|
||||||
|
|
||||||
ErrorF("-ignoreinput\n" "\tIgnore keyboard and mouse input.\n");
|
ErrorF("-ignoreinput\n" "\tIgnore keyboard and mouse input.\n");
|
||||||
|
|
||||||
#ifdef XWIN_MULTIWINDOWEXTWM
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
||||||
|
|
|
@ -165,6 +165,12 @@ The maximum dimensions of the screen are the dimensions of the \fIWindows\fP vir
|
||||||
on its own is equivalent to \fB\-resize=randr\fP
|
on its own is equivalent to \fB\-resize=randr\fP
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
|
.SH OPTIONS FOR MULTIWINDOW MODE
|
||||||
|
.TP 8
|
||||||
|
.B \-hostintitle
|
||||||
|
Add the host name to the window title for X applications which are running
|
||||||
|
on remote hosts, when that information is available and it's useful to do so.
|
||||||
|
|
||||||
.SH OPTIONS CONTROLLING WINDOWS INTEGRATION
|
.SH OPTIONS CONTROLLING WINDOWS INTEGRATION
|
||||||
.TP 8
|
.TP 8
|
||||||
.B \-[no]clipboard
|
.B \-[no]clipboard
|
||||||
|
|
|
@ -78,6 +78,7 @@ Bool g_fNoHelpMessageBox = FALSE;
|
||||||
Bool g_fSoftwareCursor = FALSE;
|
Bool g_fSoftwareCursor = FALSE;
|
||||||
Bool g_fSilentDupError = FALSE;
|
Bool g_fSilentDupError = FALSE;
|
||||||
Bool g_fNativeGl = TRUE;
|
Bool g_fNativeGl = TRUE;
|
||||||
|
Bool g_fHostInTitle = FALSE;
|
||||||
pthread_mutex_t g_pmTerminating = PTHREAD_MUTEX_INITIALIZER;
|
pthread_mutex_t g_pmTerminating = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
#ifdef XWIN_CLIPBOARD
|
#ifdef XWIN_CLIPBOARD
|
||||||
|
|
|
@ -54,6 +54,7 @@ extern Bool g_fXdmcpEnabled;
|
||||||
extern Bool g_fNoHelpMessageBox;
|
extern Bool g_fNoHelpMessageBox;
|
||||||
extern Bool g_fSilentDupError;
|
extern Bool g_fSilentDupError;
|
||||||
extern Bool g_fNativeGl;
|
extern Bool g_fNativeGl;
|
||||||
|
extern Bool g_fHostInTitle;
|
||||||
|
|
||||||
extern HWND g_hDlgDepthChange;
|
extern HWND g_hDlgDepthChange;
|
||||||
extern HWND g_hDlgExit;
|
extern HWND g_hDlgExit;
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "pixmapstr.h"
|
#include "pixmapstr.h"
|
||||||
#include "windowstr.h"
|
#include "windowstr.h"
|
||||||
|
#include "winglobals.h"
|
||||||
|
|
||||||
#ifdef XWIN_MULTIWINDOWEXTWM
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
||||||
#include <X11/extensions/windowswmstr.h>
|
#include <X11/extensions/windowswmstr.h>
|
||||||
|
@ -69,6 +70,10 @@
|
||||||
#define WINDOWSWM_NATIVE_HWND "_WINDOWSWM_NATIVE_HWND"
|
#define WINDOWSWM_NATIVE_HWND "_WINDOWSWM_NATIVE_HWND"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HOST_NAME_MAX
|
||||||
|
#define HOST_NAME_MAX 255
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void winDebug(const char *format, ...);
|
extern void winDebug(const char *format, ...);
|
||||||
extern void winReshapeMultiWindow(WindowPtr pWin);
|
extern void winReshapeMultiWindow(WindowPtr pWin);
|
||||||
extern void winUpdateRgnMultiWindow(WindowPtr pWin);
|
extern void winUpdateRgnMultiWindow(WindowPtr pWin);
|
||||||
|
@ -430,7 +435,10 @@ GetWindowName(Display * pDisplay, Window iWin, char **ppWindowName)
|
||||||
{
|
{
|
||||||
int nResult;
|
int nResult;
|
||||||
XTextProperty xtpWindowName;
|
XTextProperty xtpWindowName;
|
||||||
|
XTextProperty xtpClientMachine;
|
||||||
char *pszWindowName;
|
char *pszWindowName;
|
||||||
|
char *pszClientMachine;
|
||||||
|
char hostname[HOST_NAME_MAX + 1];
|
||||||
|
|
||||||
#if CYGMULTIWINDOW_DEBUG
|
#if CYGMULTIWINDOW_DEBUG
|
||||||
ErrorF("GetWindowName\n");
|
ErrorF("GetWindowName\n");
|
||||||
|
@ -450,6 +458,41 @@ GetWindowName(Display * pDisplay, Window iWin, char **ppWindowName)
|
||||||
|
|
||||||
pszWindowName = Xutf8TextPropertyToString(pDisplay, &xtpWindowName);
|
pszWindowName = Xutf8TextPropertyToString(pDisplay, &xtpWindowName);
|
||||||
XFree(xtpWindowName.value);
|
XFree(xtpWindowName.value);
|
||||||
|
|
||||||
|
if (g_fHostInTitle) {
|
||||||
|
/* Try to get client machine name */
|
||||||
|
nResult = XGetWMClientMachine(pDisplay, iWin, &xtpClientMachine);
|
||||||
|
if (nResult && xtpClientMachine.value && xtpClientMachine.nitems) {
|
||||||
|
pszClientMachine =
|
||||||
|
Xutf8TextPropertyToString(pDisplay, &xtpClientMachine);
|
||||||
|
XFree(xtpClientMachine.value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we have a client machine name
|
||||||
|
and it's not the local host name
|
||||||
|
and it's not already in the window title...
|
||||||
|
*/
|
||||||
|
if (strlen(pszClientMachine) &&
|
||||||
|
!gethostname(hostname, HOST_NAME_MAX + 1) &&
|
||||||
|
strcmp(hostname, pszClientMachine) &&
|
||||||
|
(strstr(pszWindowName, pszClientMachine) == 0)) {
|
||||||
|
/* ... add '@<clientmachine>' to end of window name */
|
||||||
|
*ppWindowName =
|
||||||
|
malloc(strlen(pszWindowName) +
|
||||||
|
strlen(pszClientMachine) + 2);
|
||||||
|
strcpy(*ppWindowName, pszWindowName);
|
||||||
|
strcat(*ppWindowName, "@");
|
||||||
|
strcat(*ppWindowName, pszClientMachine);
|
||||||
|
|
||||||
|
free(pszWindowName);
|
||||||
|
free(pszClientMachine);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* otherwise just return the window name */
|
||||||
*ppWindowName = pszWindowName;
|
*ppWindowName = pszWindowName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1074,6 +1074,11 @@ ddxProcessArgument(int argc, char *argv[], int i)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IS_OPTION("-hostintitle")) {
|
||||||
|
g_fHostInTitle = TRUE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue