File openMotif-2.3.3-mwm-screenresize.patch of Package motif.27027
---
clients/mwm/WmEvent.c | 30 ++++++++++++++++++++++++++++++
clients/mwm/WmWinState.c | 5 +++++
2 files changed, 35 insertions(+)
--- a/clients/mwm/WmEvent.c
+++ b/clients/mwm/WmEvent.c
@@ -143,7 +143,7 @@ void InitEventHandling (void)
* manage client windows. Setup accelerator event processing.
*/
- base_mask = SubstructureRedirectMask | FocusChangeMask;
+ base_mask = SubstructureRedirectMask | StructureNotifyMask | FocusChangeMask;
/* handle entry of root window */
base_mask |= EnterWindowMask | LeaveWindowMask;
@@ -859,6 +859,29 @@ Boolean WmDispatchMenuEvent (XButtonEven
} /* END OF FUNCTION WmDispatchMenuEvent */
+/*************************************<->*************************************
+ *
+ * HandleRootConfigureNotify (configureNotify, pCD)
+ *
+ *
+ * Description:
+ * -----------
+ * This functions handles ConfigureNotify events that are for root windows.
+ *
+ *
+ * Inputs:
+ * ------
+ * configureNotify = a pointer to a Configure event
+ * pCD = client data
+ *
+ *************************************<->***********************************/
+
+void HandleRootConfigureNotify (XConfigureEvent *configureNotify)
+{
+ fprintf(stderr, "mwm: detected screen resize on %d to %dx%d\n", ACTIVE_SCREEN, configureNotify->width, configureNotify->height);
+ DisplayWidth(DISPLAY, ACTIVE_SCREEN) = configureNotify->width;
+ DisplayHeight(DISPLAY, ACTIVE_SCREEN) = configureNotify->height;
+}
/*************************************<->*************************************
@@ -1027,6 +1050,13 @@ Boolean WmDispatchWsEvent (XEvent *event
break;
}
+ case ConfigureNotify:
+ {
+ /* Fix for root window resize event handling */
+ HandleRootConfigureNotify((XConfigureEvent *)event);
+ break;
+ }
+
} /* end of event.type switch */
--- a/clients/mwm/WmWinState.c
+++ b/clients/mwm/WmWinState.c
@@ -655,6 +655,11 @@ static void SetupWindowStateWithEventMas
void ConfigureNewState (ClientData *pcd)
{
+ pcd->maxWidth = DisplayWidth (DISPLAY, SCREEN_FOR_CLIENT(pcd)) -
+ (2 * pcd->clientOffset.x);
+ pcd->maxHeight = DisplayHeight (DISPLAY, SCREEN_FOR_CLIENT(pcd)) -
+ (pcd->clientOffset.x + pcd->clientOffset.y);
+
if (pcd->maxConfig)
{
pcd->maxConfig = FALSE;