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;
openSUSE Build Service is sponsored by