Unverified Commit c0f67abb authored by Mike Gabriel's avatar Mike Gabriel

Merge branch 'uli42-pr/cleanup_window_hints' into 3.6.x

parents 985bed95 9138a9e3
...@@ -575,8 +575,6 @@ void nxagentInternalWindowsTree(WindowPtr pWin, int indent) ...@@ -575,8 +575,6 @@ void nxagentInternalWindowsTree(WindowPtr pWin, int indent)
void nxagentSwitchResizeMode(ScreenPtr pScreen) void nxagentSwitchResizeMode(ScreenPtr pScreen)
{ {
XSizeHints sizeHints;
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "nxagentSwitchResizeMode called.\n"); fprintf(stderr, "nxagentSwitchResizeMode called.\n");
#endif #endif
...@@ -585,8 +583,6 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen) ...@@ -585,8 +583,6 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentChangeOption(DesktopResize, !desktopResize); nxagentChangeOption(DesktopResize, !desktopResize);
sizeHints.flags = PMaxSize;
if (nxagentOption(DesktopResize) == 0) if (nxagentOption(DesktopResize) == 0)
{ {
fprintf(stderr,"Info: Disabled desktop resize mode in agent.\n"); fprintf(stderr,"Info: Disabled desktop resize mode in agent.\n");
...@@ -595,11 +591,9 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen) ...@@ -595,11 +591,9 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
if (nxagentOption(Fullscreen) == 0) if (nxagentOption(Fullscreen) == 0)
{ {
sizeHints.max_width = nxagentOption(RootWidth); nxagentSetWMNormalHintsMaxsize(pScreen,
sizeHints.max_height = nxagentOption(RootHeight); nxagentOption(RootWidth),
nxagentOption(RootHeight));
XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
&sizeHints);
} }
} }
else else
...@@ -608,32 +602,25 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen) ...@@ -608,32 +602,25 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentLaunchDialog(DIALOG_ENABLE_DESKTOP_RESIZE_MODE); nxagentLaunchDialog(DIALOG_ENABLE_DESKTOP_RESIZE_MODE);
nxagentChangeScreenConfig(0, nxagentOption(Width), nxagentOption(Height), nxagentChangeScreenConfig(0, nxagentOption(Width), nxagentOption(Height));
0, 0);
if (nxagentOption(ClientOs) == ClientOsWinnt) if (nxagentOption(ClientOs) == ClientOsWinnt)
{ {
NXSetExposeParameters(nxagentDisplay, 0, 0, 0); NXSetExposeParameters(nxagentDisplay, 0, 0, 0);
} }
sizeHints.max_width = WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); nxagentSetWMNormalHintsMaxsize(pScreen,
sizeHints.max_height = HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)),
HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)));
XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
&sizeHints);
} }
} }
void nxagentShadowSwitchResizeMode(ScreenPtr pScreen) void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
{ {
XSizeHints sizeHints;
int desktopResize = nxagentOption(DesktopResize); int desktopResize = nxagentOption(DesktopResize);
nxagentChangeOption(DesktopResize, !desktopResize); nxagentChangeOption(DesktopResize, !desktopResize);
sizeHints.flags = PMaxSize;
if (nxagentOption(DesktopResize) == 0) if (nxagentOption(DesktopResize) == 0)
{ {
nxagentShadowSetRatio(1.0, 1.0); nxagentShadowSetRatio(1.0, 1.0);
...@@ -641,8 +628,9 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen) ...@@ -641,8 +628,9 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
nxagentShadowCreateMainWindow(screenInfo.screens[DefaultScreen(nxagentDisplay)], screenInfo.screens[0]->root, nxagentShadowCreateMainWindow(screenInfo.screens[DefaultScreen(nxagentDisplay)], screenInfo.screens[0]->root,
screenInfo.screens[0]->root -> drawable.width, screenInfo.screens[0]->root -> drawable.height); screenInfo.screens[0]->root -> drawable.width, screenInfo.screens[0]->root -> drawable.height);
sizeHints.max_width = nxagentOption(RootWidth); nxagentSetWMNormalHintsMaxsize(pScreen,
sizeHints.max_height = nxagentOption(RootHeight); nxagentOption(RootWidth),
nxagentOption(RootHeight));
fprintf(stderr,"Info: Disabled resize mode in shadow agent.\n"); fprintf(stderr,"Info: Disabled resize mode in shadow agent.\n");
} }
...@@ -657,14 +645,12 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen) ...@@ -657,14 +645,12 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
screenInfo.screens[0]->root, screenInfo.screens[0]->root -> drawable.width, screenInfo.screens[0]->root, screenInfo.screens[0]->root -> drawable.width,
screenInfo.screens[0]->root -> drawable.height); screenInfo.screens[0]->root -> drawable.height);
sizeHints.max_width = WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); nxagentSetWMNormalHintsMaxsize(pScreen,
sizeHints.max_height = HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)),
HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)));
fprintf(stderr,"Info: Enabled resize mode in shadow agent.\n"); fprintf(stderr,"Info: Enabled resize mode in shadow agent.\n");
} }
XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
&sizeHints);
} }
static void nxagentSwitchDeferMode(void) static void nxagentSwitchDeferMode(void)
...@@ -3248,6 +3234,7 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3248,6 +3234,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
pClient = wClient(pWinWindow); pClient = wClient(pWinWindow);
/* FIXME: override_redirect is always FALSE here */
if (X -> xconfigure.send_event || !nxagentWMIsRunning || if (X -> xconfigure.send_event || !nxagentWMIsRunning ||
X -> xconfigure.override_redirect) X -> xconfigure.override_redirect)
{ {
...@@ -3354,13 +3341,26 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3354,13 +3341,26 @@ int nxagentHandleConfigureNotify(XEvent* X)
{ {
if (nxagentOption(AllScreens) == 0) if (nxagentOption(AllScreens) == 0)
{ {
/*
* - WITHOUT window manager any position change is relevant
* - WITH window manager only synthetic position changes send
* by the window manager are relevant, see ICCCM Chapter 4,
* "Configuring the Window"
*/
Bool updatePos = (nxagentWMIsRunning == 0 || X -> xconfigure.send_event != 0);
int newX = X -> xconfigure.x;
int newY = X -> xconfigure.y;
if (nxagentOption(DesktopResize) == 1) if (nxagentOption(DesktopResize) == 1)
{ {
if (nxagentOption(Width) != X -> xconfigure.width || if (nxagentOption(Width) != X -> xconfigure.width ||
nxagentOption(Height) != X -> xconfigure.height || nxagentOption(Height) != X -> xconfigure.height ||
nxagentOption(X) != X -> xconfigure.x || (updatePos && (nxagentOption(X) != newX ||
nxagentOption(Y) != X -> xconfigure.y) nxagentOption(Y) != newY)))
{ {
#ifdef DEBUG
int count = 0;
#endif
Bool newEvents = False; Bool newEvents = False;
doRandR = True; doRandR = True;
...@@ -3377,8 +3377,7 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3377,8 +3377,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
nxagentWaitEvents(nxagentDisplay, &timeout); nxagentWaitEvents(nxagentDisplay, &timeout);
/* /*
* This should also flush * This should also flush the NX link for us.
* the NX link for us.
*/ */
XSync(nxagentDisplay, 0); XSync(nxagentDisplay, 0);
...@@ -3386,17 +3385,34 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3386,17 +3385,34 @@ int nxagentHandleConfigureNotify(XEvent* X)
while (XCheckTypedWindowEvent(nxagentDisplay, nxagentDefaultWindows[pScreen -> myNum], while (XCheckTypedWindowEvent(nxagentDisplay, nxagentDefaultWindows[pScreen -> myNum],
ConfigureNotify, X)) ConfigureNotify, X))
{ {
#ifdef DEBUG
count++;
#endif
if (nxagentWMIsRunning == 0 || X -> xconfigure.send_event)
{
updatePos = True;
newX = X -> xconfigure.x;
newY = X -> xconfigure.y;
}
newEvents = True; newEvents = True;
} }
} while (newEvents); } while (newEvents);
#ifdef DEBUG
fprintf(stderr, "%s: accumulated %d events\n", __func__, count);
#endif
} }
} }
if (nxagentWMIsRunning == 0 || X -> xconfigure.send_event) if (updatePos)
{ {
nxagentChangeOption(X, X -> xconfigure.x); #ifdef DEBUG
nxagentChangeOption(Y, X -> xconfigure.y); fprintf(stderr, "%s: Updating nxagent window position [%d,%d]\n", __func__, newX, newY);
#endif
nxagentChangeOption(X, newX);
nxagentChangeOption(Y, newY);
} }
if (nxagentOption(Shadow) == 1 && nxagentOption(DesktopResize) == 1 && if (nxagentOption(Shadow) == 1 && nxagentOption(DesktopResize) == 1 &&
...@@ -3464,7 +3480,7 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3464,7 +3480,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
#endif #endif
nxagentChangeScreenConfig(0, nxagentOption(Width), nxagentChangeScreenConfig(0, nxagentOption(Width),
nxagentOption(Height), 0, 0); nxagentOption(Height));
} }
} }
...@@ -3484,7 +3500,7 @@ int nxagentHandleConfigureNotify(XEvent* X) ...@@ -3484,7 +3500,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
nxagentChangeOption(RootHeight, X -> xconfigure.height); nxagentChangeOption(RootHeight, X -> xconfigure.height);
nxagentChangeScreenConfig(0, nxagentOption(Width), nxagentChangeScreenConfig(0, nxagentOption(Width),
nxagentOption(Height), 0, 0); nxagentOption(Height));
return 1; return 1;
} }
......
...@@ -231,7 +231,7 @@ Bool nxagentPendingEvents(Display *dpy); ...@@ -231,7 +231,7 @@ Bool nxagentPendingEvents(Display *dpy);
XEventsQueued((display), QueuedAfterReading) XEventsQueued((display), QueuedAfterReading)
#define nxagentCheckEvents(display, event, predicate, argument) \ #define nxagentCheckEvents(display, event, predicate, argument) \
XCheckIfEventNoFlush((display), (event), (predicate), (argument)) XCheckIfEventNoFlush((display), (event), (predicate), (argument))
int nxagentWaitEvents(Display *, struct timeval *); int nxagentWaitEvents(Display *, struct timeval *);
......
...@@ -470,7 +470,7 @@ int nxagentRandRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height, ...@@ -470,7 +470,7 @@ int nxagentRandRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
nxagentOption(Fullscreen) == 0 && nxagentOption(AllScreens) == 0) nxagentOption(Fullscreen) == 0 && nxagentOption(AllScreens) == 0)
{ {
nxagentRandRSetWindowsSize(width, height); nxagentRandRSetWindowsSize(width, height);
nxagentSetWMNormalHints(pScreen -> myNum); nxagentSetWMNormalHints(pScreen -> myNum, nxagentOption(Width), nxagentOption(Height));
} }
nxagentMoveViewport(pScreen, 0, 0); nxagentMoveViewport(pScreen, 0, 0);
......
...@@ -626,7 +626,7 @@ Bool nxagentReconnectSession(void) ...@@ -626,7 +626,7 @@ Bool nxagentReconnectSession(void)
if (nxagentResizeDesktopAtStartup || nxagentOption(Rootless) == True || nxagentOption(Xinerama) == True) if (nxagentResizeDesktopAtStartup || nxagentOption(Rootless) == True || nxagentOption(Xinerama) == True)
{ {
nxagentChangeScreenConfig(0, nxagentOption(RootWidth), nxagentChangeScreenConfig(0, nxagentOption(RootWidth),
nxagentOption(RootHeight), 0, 0); nxagentOption(RootHeight));
nxagentResizeDesktopAtStartup = False; nxagentResizeDesktopAtStartup = False;
} }
......
...@@ -48,7 +48,7 @@ is" without express or implied warranty. ...@@ -48,7 +48,7 @@ is" without express or implied warranty.
#define nxagentSetPrintGeometry(screen) \ #define nxagentSetPrintGeometry(screen) \
nxagentPrintGeometryFlags = (1 << (screen)); nxagentPrintGeometryFlags = (1 << (screen));
extern int nxagentClients; extern int nxagentClients;
extern int nxagentAutoDisconnectTimeout; extern int nxagentAutoDisconnectTimeout;
...@@ -110,7 +110,7 @@ Bool nxagentMagicPixelZone(int x, int y); ...@@ -110,7 +110,7 @@ Bool nxagentMagicPixelZone(int x, int y);
Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height, Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height,
int mmWidth, int mmHeight); int mmWidth, int mmHeight);
int nxagentChangeScreenConfig(int screen, int width, int height, int mmWidth, int mmHeight); int nxagentChangeScreenConfig(int screen, int width, int height);
int nxagentAdjustRandRXinerama(ScreenPtr pScreen); int nxagentAdjustRandRXinerama(ScreenPtr pScreen);
...@@ -130,7 +130,9 @@ int nxagentShadowPoll(PixmapPtr, GCPtr, unsigned char, int, int, char *, int *, ...@@ -130,7 +130,9 @@ int nxagentShadowPoll(PixmapPtr, GCPtr, unsigned char, int, int, char *, int *,
void nxagentShadowSetWindowsSize(void); void nxagentShadowSetWindowsSize(void);
void nxagentSetWMNormalHints(int); void nxagentSetWMNormalHints(int, int, int);
void nxagentSetWMNormalHintsMaxsize(ScreenPtr, int, int);
void nxagentShadowSetRatio(float, float); void nxagentShadowSetRatio(float, float);
......
...@@ -869,8 +869,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn) ...@@ -869,8 +869,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
} }
/* /*
* This should also flush * This should also flush the NX link for us.
* the NX link for us.
*/ */
XSync(nxagentDisplay, 0); XSync(nxagentDisplay, 0);
...@@ -953,7 +952,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn) ...@@ -953,7 +952,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if (nxagentOption(Shadow) == 0) if (nxagentOption(Shadow) == 0)
{ {
nxagentChangeScreenConfig(0, WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)), nxagentChangeScreenConfig(0, WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)),
HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)), 0, 0); HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)));
} }
else else
{ {
...@@ -1007,7 +1006,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn) ...@@ -1007,7 +1006,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if (nxagentOption(Shadow) == 0) if (nxagentOption(Shadow) == 0)
{ {
nxagentChangeScreenConfig(0, nxagentOption(RootWidth), nxagentChangeScreenConfig(0, nxagentOption(RootWidth),
nxagentOption(RootHeight), 0, 0); nxagentOption(RootHeight));
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment