hw/xwin: Check for just the hostname in window title
When -hostintitle is enabled, only use the hostname, not a FQDN from WM_CLIENT_MACHINE, when checking if the window title already contains it Also restructure GetWindowName() to fix a potential memory leak. Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk> Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
parent
c05c4360ee
commit
17c8bf348e
|
@ -416,27 +416,39 @@ GetWindowName(WMInfoPtr pWMInfo, xcb_window_t iWin, char **ppWindowName)
|
|||
xcb_icccm_get_text_property_reply_wipe(&reply);
|
||||
}
|
||||
|
||||
/* return the window name, unless... */
|
||||
*ppWindowName = pszWindowName;
|
||||
|
||||
if (g_fHostInTitle) {
|
||||
char *pszClientMachine;
|
||||
char hostname[HOST_NAME_MAX + 1];
|
||||
xcb_get_property_cookie_t cookie;
|
||||
xcb_icccm_get_text_property_reply_t reply;
|
||||
|
||||
/* Try to get client machine name */
|
||||
cookie = xcb_icccm_get_wm_client_machine(conn, iWin);
|
||||
if (xcb_icccm_get_wm_client_machine_reply(conn, cookie, &reply, NULL)) {
|
||||
char *pszClientMachine;
|
||||
char *pszClientHostname;
|
||||
char *dot;
|
||||
char hostname[HOST_NAME_MAX + 1];
|
||||
|
||||
pszClientMachine = Xutf8TextPropertyToString(pWMInfo, &reply);
|
||||
xcb_icccm_get_text_property_reply_wipe(&reply);
|
||||
|
||||
/* If client machine name looks like a FQDN, find the hostname */
|
||||
pszClientHostname = strdup(pszClientMachine);
|
||||
dot = strchr(pszClientHostname, '.');
|
||||
if (dot)
|
||||
*dot = '\0';
|
||||
|
||||
/*
|
||||
If we have a client machine name
|
||||
and it's not the local host name
|
||||
If we have a client machine hostname
|
||||
and it's not the local hostname
|
||||
and it's not already in the window title...
|
||||
*/
|
||||
if (strlen(pszClientMachine) &&
|
||||
if (strlen(pszClientHostname) &&
|
||||
!gethostname(hostname, HOST_NAME_MAX + 1) &&
|
||||
strcmp(hostname, pszClientMachine) &&
|
||||
(strstr(pszWindowName, pszClientMachine) == 0)) {
|
||||
strcmp(hostname, pszClientHostname) &&
|
||||
(strstr(pszWindowName, pszClientHostname) == 0)) {
|
||||
/* ... add '@<clientmachine>' to end of window name */
|
||||
*ppWindowName =
|
||||
malloc(strlen(pszWindowName) +
|
||||
|
@ -446,15 +458,12 @@ GetWindowName(WMInfoPtr pWMInfo, xcb_window_t iWin, char **ppWindowName)
|
|||
strcat(*ppWindowName, pszClientMachine);
|
||||
|
||||
free(pszWindowName);
|
||||
free(pszClientMachine);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
free(pszClientMachine);
|
||||
free(pszClientHostname);
|
||||
}
|
||||
}
|
||||
|
||||
/* otherwise just return the window name */
|
||||
*ppWindowName = pszWindowName;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue
Block a user