1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

dtwm: Improve response for decoration hint from client.

Add a function: InitClientData.
This commit is contained in:
Liang Chang 2021-08-07 14:17:54 +08:00
parent e648aab6b1
commit 1c310b8635
2 changed files with 84 additions and 14 deletions

View file

@ -89,7 +89,7 @@ WmWorkspaceData *pIconBoxInitialWS;
/*************************************<->************************************* /*************************************<->*************************************
* *
* GetClientInfo (pSD, clientWindow, manageFlags) * InitClientData (clientWindow)
* *
* *
* Description: * Description:
@ -100,12 +100,8 @@ WmWorkspaceData *pIconBoxInitialWS;
* *
* Inputs: * Inputs:
* ------ * ------
* pSD = pointer to screen data for screen that client lives in
*
* clientWindow = window id for the client window that is to be managed * clientWindow = window id for the client window that is to be managed
* *
* manageFlags = flags that indicate wm state info
*
* *
* Outputs: * Outputs:
* ------- * -------
@ -115,12 +111,22 @@ WmWorkspaceData *pIconBoxInitialWS;
*************************************<->***********************************/ *************************************<->***********************************/
ClientData * ClientData *
GetClientInfo (WmScreenData *pSD, Window clientWindow, long manageFlags) InitClientData (Window clientWindow)
{ {
ClientData *pCD; ClientData *pCD;
XSetWindowAttributes sAttributes;
if (!XFindContext (DISPLAY, clientWindow, wmGD.windowContextType,
(caddr_t *)&pCD))
{
XDeleteContext(DISPLAY, clientWindow, wmGD.tmpWindowContextType);
return (pCD);
}
if (!XFindContext (DISPLAY, clientWindow, wmGD.tmpWindowContextType,
(caddr_t *)&pCD))
{
return (pCD);
}
/* /*
* Allocate and initialize a client data structure: * Allocate and initialize a client data structure:
@ -133,13 +139,15 @@ GetClientInfo (WmScreenData *pSD, Window clientWindow, long manageFlags)
return (NULL); return (NULL);
} }
XSaveContext (DISPLAY, clientWindow, wmGD.tmpWindowContextType,
(caddr_t)pCD);
/* /*
* Initialize the data structure: * Initialize the data structure:
*/ */
pCD->client = clientWindow; pCD->client = clientWindow;
pCD->clientID = ++(pSD->clientCounter);
pCD->clientFlags = WM_INITIALIZATION; pCD->clientFlags = WM_INITIALIZATION;
pCD->iconFlags = 0; pCD->iconFlags = 0;
pCD->thisIconBox = NULL; pCD->thisIconBox = NULL;
@ -200,7 +208,6 @@ GetClientInfo (WmScreenData *pSD, Window clientWindow, long manageFlags)
pCD->maxWidth = pCD->maxWidthLimit = BIGSIZE; pCD->maxWidth = pCD->maxWidthLimit = BIGSIZE;
pCD->maxHeight = pCD->maxHeightLimit = BIGSIZE; pCD->maxHeight = pCD->maxHeightLimit = BIGSIZE;
pCD->maxConfig = FALSE; pCD->maxConfig = FALSE;
pCD->pSD = pSD;
pCD->dataType = CLIENT_DATA_TYPE; pCD->dataType = CLIENT_DATA_TYPE;
pCD->window_status = 0L; pCD->window_status = 0L;
@ -210,6 +217,59 @@ GetClientInfo (WmScreenData *pSD, Window clientWindow, long manageFlags)
pCD->smClientID = (String)NULL; pCD->smClientID = (String)NULL;
pCD->decorUpdated = False;
pCD->isFullscreen = False;
pCD->monitorSizeIsSet = False;
return (pCD);
} /* END OF FUNCTION InitClientData */
/*************************************<->*************************************
*
* GetClientInfo (pSD, clientWindow, manageFlags)
*
*
* Description:
* -----------
* This function is used to get client window data.
*
*
* Inputs:
* ------
* pSD = pointer to screen data for screen that client lives in
*
* clientWindow = window id for the client window that is to be managed
*
* manageFlags = flags that indicate wm state info
*
*
* Outputs:
* -------
* Return = pointer to an initialized client data structure for the
* specified client window
*
*************************************<->***********************************/
ClientData *
GetClientInfo (WmScreenData *pSD, Window clientWindow, long manageFlags)
{
ClientData *pCD;
XSetWindowAttributes sAttributes;
if (!(pCD = InitClientData (clientWindow)))
{
return (NULL);
}
XDeleteContext(DISPLAY, clientWindow, wmGD.tmpWindowContextType);
pCD->clientID = ++(pSD->clientCounter);
pCD->pSD = pSD;
/* /*
* Do special processing for client windows that are controlled by * Do special processing for client windows that are controlled by
* the window manager. * the window manager.
@ -3793,7 +3853,11 @@ ProcessMwmHints (ClientData *pCD)
{ {
if (pHints->flags & MWM_HINTS_FUNCTIONS) if (pHints->flags & MWM_HINTS_FUNCTIONS)
{ {
if (pHints->functions & MWM_FUNC_ALL) if (pHints->functions == WM_FUNC_DEFAULT)
{
pCD->clientFunctions = WM_FUNC_ALL;
}
else if (pHints->functions & WM_FUNC_DEFAULT)
{ {
/* client indicating inapplicable functions */ /* client indicating inapplicable functions */
pCD->clientFunctions &= ~(pHints->functions); pCD->clientFunctions &= ~(pHints->functions);
@ -3822,7 +3886,11 @@ ProcessMwmHints (ClientData *pCD)
if (pHints->flags & MWM_HINTS_DECORATIONS) if (pHints->flags & MWM_HINTS_DECORATIONS)
{ {
if (pHints->decorations & MWM_DECOR_ALL) if (pHints->decorations == WM_DECOR_DEFAULT)
{
pCD->clientDecoration = WM_DECOR_ALL;
}
else if (pHints->decorations & WM_DECOR_DEFAULT)
{ {
/* client indicating decorations to be removed */ /* client indicating decorations to be removed */
pCD->clientDecoration &= ~(pHints->decorations); pCD->clientDecoration &= ~(pHints->decorations);
@ -3931,5 +3999,6 @@ ProcessMwmHints (ClientData *pCD)
pCD->decor = pCD->clientDecoration; /* !!! combine decor ... !!! */ pCD->decor = pCD->clientDecoration; /* !!! combine decor ... !!! */
pCD->decorUpdated = True;
} /* END OF ProcessMwmHints */ } /* END OF ProcessMwmHints */

View file

@ -39,6 +39,7 @@ extern void FixWindowConfiguration (ClientData *pCD, unsigned int *pWidth,
extern void FixWindowSize (ClientData *pCD, unsigned int *pWidth, extern void FixWindowSize (ClientData *pCD, unsigned int *pWidth,
unsigned int *pHeight, unsigned int widthInc, unsigned int *pHeight, unsigned int widthInc,
unsigned int heightInc); unsigned int heightInc);
extern ClientData *InitClientData (Window clientWindow);
extern ClientData *GetClientInfo (WmScreenData *pSD, Window clientWindow, extern ClientData *GetClientInfo (WmScreenData *pSD, Window clientWindow,
long manageFlags); long manageFlags);
extern ClientData *GetWmClientInfo (WmWorkspaceData *pWS, ClientData *pCD, extern ClientData *GetWmClientInfo (WmWorkspaceData *pWS, ClientData *pCD,