aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent/Events.c
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:58 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:58 +0200
commitd30ef0340e759378964b75e8143625ecaea245b0 (patch)
tree04a7997a7454be7cfce962e259c29fdbbf16f379 /nx-X11/programs/Xserver/hw/nxagent/Events.c
parent25af86cd3aaa61dc4a3d69825aa523177c2229e1 (diff)
downloadnx-libs-d30ef0340e759378964b75e8143625ecaea245b0.tar.gz
nx-libs-d30ef0340e759378964b75e8143625ecaea245b0.tar.bz2
nx-libs-d30ef0340e759378964b75e8143625ecaea245b0.zip
Imported nxagent-3.4.0-3.tar.gznxagent/3.4.0-3
Summary: Imported nxagent-3.4.0-3.tar.gz Keywords: Imported nxagent-3.4.0-3.tar.gz into Git repository
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent/Events.c')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Events.c603
1 files changed, 35 insertions, 568 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c
index b9da934d6..83665ff90 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -1,6 +1,6 @@
/**************************************************************************/
/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
+/* Copyright (c) 2001, 2009 NoMachine, http://www.nomachine.com/. */
/* */
/* NXAGENT, NX protocol compression and NX extensions to this software */
/* are copyright of NoMachine. Redistribution and use of the present */
@@ -76,9 +76,7 @@
#include "input.h"
#endif
-#define Time XlibXID
#include "XKBlib.h"
-#undef Time
#define GC XlibGC
#define Font XlibFont
@@ -221,16 +219,6 @@ static void nxagentForwardRemoteExpose(void);
static int nxagentClipAndSendExpose(WindowPtr pWin, pointer ptr);
/*
- * This is from NXproperty.c.
- */
-
-int GetWindowProperty(WindowPtr pWin, Atom property, long longOffset,
- long longLength, Bool delete, Atom type,
- Atom *actualType, int *format, unsigned
- long *nItems, unsigned long *bytesAfter,
- unsigned char **propData);
-
-/*
* Associate a resource to a drawable and
* store the region affected by the split
* operation.
@@ -286,280 +274,6 @@ void ProcessInputEvents()
mieqProcessInputEvents();
}
-#ifdef DEBUG_TREE
-
-/*
- * Print ID and name of window.
- */
-
-void nxagentRemoteWindowID(Window window, Bool newline)
-{
-#ifdef NO_I18N
- char *winName;
-#else
- XTextProperty tp;
-#endif
-
- fprintf(stderr, "0x%lx", window);
-
- if (!window)
- {
- fprintf(stderr, " (none) ");
- }
- else
- {
- if (window == DefaultRootWindow(nxagentDisplay))
- {
- fprintf(stderr, " (the root window) ");
- }
-
-#ifdef NO_I18N
-
- if (!XFetchName(nxagentDisplay, window, &winName))
- {
- fprintf(stderr, " (has no name) ");
- }
- else if (winName)
- {
- fprintf(stderr, " \"%s\" ", winName);
- XFree(winName);
- }
-
-#else
-
- if (XGetWMName(nxagentDisplay, window, &tp) != 0)
- {
- fprintf(stderr, " (has no name) ");
- }
- else if (tp.nitems > 0)
- {
- int count = 0;
- int i, ret;
- char **list = NULL;
-
- fprintf(stderr, " \"");
-
- ret = XmbTextPropertyToTextList(nxagentDisplay, &tp, &list, &count);
-
- if ((ret == Success || ret > 0) && list != NULL)
- {
- for (i = 0; i < count; i++)
- {
- fprintf(stderr, "%s", list[i]);
- }
-
- XFreeStringList(list);
- }
- else
- {
- fprintf(stderr, "%s", tp.value);
- }
-
- fprintf(stderr, "\" ");
- }
-
-#endif
-
- else
- {
- fprintf(stderr, " (has no name) ");
- }
- }
-
- if (newline == TRUE)
- {
- fprintf(stderr, "\n");
- }
-
- return;
-}
-
-/*
- * Print info about remote window.
- */
-
-void nxagentRemoteWindowInfo(Window win, int indent, Bool newLine)
-{
- XWindowAttributes attributes;
- int i;
-
- if (XGetWindowAttributes(nxagentDisplay, win, &attributes) == 0)
- {
- return;
- }
-
- for (i = 0; i < indent; i++)
- {
- fprintf(stderr, " ");
- }
-
- fprintf(stderr, "x=%d y=%d width=%d height=%d class=%s map_state=%s "
- "override_redirect=%s\n", attributes.x, attributes.y,
- attributes.width, attributes.height, (attributes.class == 0) ?
- "InputOutput" : "InputOnly", (attributes.map_state == 0) ?
- "IsUnmapped" : (attributes.map_state == 1 ?
- "IsUnviewable" : "IsViewable"),
- (attributes.override_redirect == 0) ?
- "No" : "Yes" );
-
- if (newLine == TRUE)
- {
- fprintf(stderr, "\n");
- }
-}
-
-/*
- * Walk remote windows tree.
- */
-
-void nxagentRemoteWindowsTree(Window window, int level)
-{
- int i, j;
- Window rootWin, parentWin;
- unsigned int numChildren;
- Window *childList;
-
- if (!XQueryTree(nxagentDisplay, window, &rootWin, &parentWin, &childList,
- &numChildren))
- {
- fprintf(stderr, "nxagentRemoteWindowsTree - XQueryTree failed.\n");
-
- return;
- }
-
- if (level == 0)
- {
- fprintf(stderr, "\n");
-
- fprintf(stderr, " Root Window ID: ");
- nxagentRemoteWindowID(rootWin, TRUE);
-
- fprintf(stderr, " Parent window ID: ");
- nxagentRemoteWindowID(parentWin, TRUE);
- }
-
- if (level == 0 || numChildren > 0)
- {
- fprintf(stderr, " ");
-
- for (j = 0; j < level; j++)
- {
- fprintf(stderr, " ");
- }
-
- fprintf(stderr, "%d child%s%s\n", numChildren, (numChildren == 1) ? "" :
- "ren", (numChildren == 1) ? ":" : ".");
- }
-
- for (i = (int) numChildren - 1; i >= 0; i--)
- {
- fprintf(stderr, " ");
-
- for (j = 0; j < level; j++)
- {
- fprintf(stderr, " ");
- }
-
- nxagentRemoteWindowID(childList[i], TRUE);
-
- nxagentRemoteWindowInfo(childList[i], (level * 5) + 6, TRUE);
-
- nxagentRemoteWindowsTree(childList[i], level + 1);
- }
-
- if (childList)
- {
- XFree((char *) childList);
- }
-}
-
-/*
- * Print info about internal window.
- */
-
-void nxagentInternalWindowInfo(WindowPtr pWin, int indent, Bool newLine)
-{
- int i;
- int result;
- unsigned long ulReturnItems;
- unsigned long ulReturnBytesLeft;
- Atom atomReturnType;
- int iReturnFormat;
- unsigned char *pszReturnData = NULL;
-
- fprintf(stderr, "Window ID=[0x%lx] Remote ID=[0x%lx] ", pWin -> drawable.id,
- nxagentWindow(pWin));
-
- result = GetWindowProperty(pWin, MakeAtom("WM_NAME", 7, False) , 0,
- sizeof(CARD32), False, AnyPropertyType,
- &atomReturnType, &iReturnFormat,
- &ulReturnItems, &ulReturnBytesLeft,
- &pszReturnData);
-
- fprintf(stderr, "Name: ");
-
- if (result == Success && pszReturnData != NULL)
- {
- pszReturnData[ulReturnItems] = '\0';
-
- fprintf(stderr, "\"%s\"\n", (char *) pszReturnData);
- }
- else
- {
- fprintf(stderr, "%s\n", "( has no name )");
- }
-
- for (i = 0; i < indent; i++)
- {
- fprintf(stderr, " ");
- }
-
- fprintf(stderr, "x=%d y=%d width=%d height=%d class=%s map_state=%s "
- "override_redirect=%s", pWin -> drawable.x, pWin -> drawable.y,
- pWin -> drawable.width, pWin -> drawable.height,
- (pWin -> drawable.class == 0) ? "InputOutput" :
- "InputOnly", (pWin -> mapped == 0) ?
- "IsUnmapped" : (pWin -> mapped == 1 ?
- "IsUnviewable" : "IsViewable"),
- (pWin -> overrideRedirect == 0) ?
- "No" : "Yes");
-
- if (newLine == TRUE)
- {
- fprintf(stderr, "\n");
- }
-}
-
-/*
- * Walk internal windows tree.
- */
-
-void nxagentInternalWindowsTree(WindowPtr pWin, int indent)
-{
- WindowPtr pChild;
- int i;
-
- while (pWin)
- {
- pChild = pWin -> firstChild;
-
- for (i = 0; i < indent; i++)
- {
- fprintf(stderr, " ");
- }
-
- nxagentInternalWindowInfo(pWin, indent, TRUE);
-
- fprintf(stderr, "\n");
-
- nxagentInternalWindowsTree(pChild, indent + 4);
-
- pWin = pWin -> nextSib;
- }
-}
-
-#endif /* DEBUG_TREE */
-
void nxagentSwitchResizeMode(ScreenPtr pScreen)
{
XSizeHints sizeHints;
@@ -576,14 +290,8 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentLaunchDialog(DIALOG_DISABLE_DESKTOP_RESIZE_MODE);
- if (nxagentOption(Fullscreen) == 0)
- {
- sizeHints.max_width = nxagentOption(RootWidth);
- sizeHints.max_height = nxagentOption(RootHeight);
-
- XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
- &sizeHints);
- }
+ sizeHints.max_width = nxagentOption(RootWidth);
+ sizeHints.max_height = nxagentOption(RootHeight);
}
else
{
@@ -591,8 +299,7 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentLaunchDialog(DIALOG_ENABLE_DESKTOP_RESIZE_MODE);
- nxagentRRSetScreenConfig(pScreen, nxagentOption(Width),
- nxagentOption(Height));
+ nxagentRRSetScreenConfig(pScreen, nxagentOption(Width), nxagentOption(Height));
if (nxagentOption(ClientOs) == ClientOsWinnt)
{
@@ -601,10 +308,10 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
sizeHints.max_width = WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay));
sizeHints.max_height = HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay));
-
- XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
- &sizeHints);
}
+
+ XSetWMNormalHints(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum],
+ &sizeHints);
}
void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
@@ -804,7 +511,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
Bool startKbd = False;
Bool closeSession = False;
Bool switchFullscreen = False;
- Bool switchAllScreens = False;
/*
* Last entered top level window.
@@ -949,22 +655,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
{
break;
}
-
- #ifdef DEBUG_TREE
-
- case doDebugTree:
- {
- fprintf(stderr, "\n ========== nxagentRemoteWindowsTree ==========\n");
- nxagentRemoteWindowsTree(nxagentWindow(WindowTable[0]), 0);
-
- fprintf(stderr, "\n========== nxagentInternalWindowsTree ==========\n");
- nxagentInternalWindowsTree(WindowTable[0], 0);
-
- break;
- }
-
- #endif /* DEBUG_TREE */
-
case doCloseSession:
{
closeSession = TRUE;
@@ -989,36 +679,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
break;
}
- case doSwitchAllScreens:
- {
- switchAllScreens = TRUE;
-
- break;
- }
- case doViewportMoveUp:
- {
- nxagentMoveViewport(pScreen, 0, -nxagentOption(Height));
-
- break;
- }
- case doViewportMoveDown:
- {
- nxagentMoveViewport(pScreen, 0, nxagentOption(Height));
-
- break;
- }
- case doViewportMoveLeft:
- {
- nxagentMoveViewport(pScreen, -nxagentOption(Width), 0);
-
- break;
- }
- case doViewportMoveRight:
- {
- nxagentMoveViewport(pScreen, nxagentOption(Width), 0);
-
- break;
- }
case doViewportUp:
{
nxagentMoveViewport(pScreen, 0, -nextinc(viewportInc));
@@ -1095,8 +755,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
if (nxagentOption(ViewOnly) == 0 && nxagentOption(Shadow) == 1 && result == doNothing)
{
- X.xkey.keycode = nxagentConvertKeycode(X.xkey.keycode);
-
NXShadowEvent(nxagentDisplay, X);
}
@@ -1105,27 +763,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
case KeyRelease:
{
enum HandleEventResult result;
- int sendKey = 0;
-
-/*
-FIXME: If we don't flush the queue here, it could happen
- that the inputInfo structure will not be up to date
- when we perform the following check on down keys.
-*/
- ProcessInputEvents();
-
-/*
-FIXME: Don't enqueue the KeyRelease event if the key was
- not already pressed. This workaround avoids a fake
- KeyPress is enqueued by the XKEYBOARD extension.
- Another solution would be to let the events are
- enqueued and to remove the KeyPress afterwards.
-*/
- if (BitIsOn(inputInfo.keyboard -> key -> down,
- nxagentConvertKeycode(X.xkey.keycode)))
- {
- sendKey = 1;
- }
#ifdef TEST
fprintf(stderr, "nxagentDispatchEvents: Going to handle new KeyRelease event.\n");
@@ -1171,7 +808,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was
x.u.keyButtonPointer.time = nxagentLastEventTime;
}
- if (!(nxagentCheckSpecialKeystroke(&X.xkey, &result)) && sendKey == 1)
+ if (!(nxagentCheckSpecialKeystroke(&X.xkey, &result)))
{
mieqEnqueue(&x);
@@ -1179,8 +816,6 @@ FIXME: Don't enqueue the KeyRelease event if the key was
if (nxagentOption(ViewOnly) == 0 && nxagentOption(Shadow))
{
- X.xkey.keycode = nxagentConvertKeycode(X.xkey.keycode);
-
NXShadowEvent(nxagentDisplay, X);
}
}
@@ -1244,7 +879,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was
X.xbutton.subwindow == None))
{
x.u.u.type = ButtonPress;
- x.u.u.detail = inputInfo.pointer -> button -> map[nxagentReversePointerMap[X.xbutton.button - 1]];
+ x.u.u.detail = X.xbutton.button;
x.u.keyButtonPointer.time = nxagentLastEventTime = GetTimeInMillis();
if (nxagentOption(Rootless))
@@ -1317,7 +952,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was
if (minimize != True)
{
x.u.u.type = ButtonRelease;
- x.u.u.detail = inputInfo.pointer -> button -> map[nxagentReversePointerMap[X.xbutton.button - 1]];
+ x.u.u.detail = X.xbutton.button;
x.u.keyButtonPointer.time = nxagentLastEventTime = GetTimeInMillis();
if (nxagentOption(Rootless))
@@ -1671,11 +1306,13 @@ FIXME: Don't enqueue the KeyRelease event if the key was
nxagentScreenTrap = 0;
}
- if (nxagentOption(Fullscreen) == 1 &&
- X.xcrossing.window == nxagentFullscreenWindow &&
- X.xcrossing.detail != NotifyInferior)
+ if (nxagentOption(Fullscreen))
{
- nxagentGrabPointerAndKeyboard(&X);
+ if (X.xcrossing.window == nxagentFullscreenWindow &&
+ X.xcrossing.detail != NotifyInferior)
+ {
+ nxagentGrabPointerAndKeyboard(&X);
+ }
}
if (X.xcrossing.detail != NotifyInferior)
@@ -1724,11 +1361,14 @@ FIXME: Don't enqueue the KeyRelease event if the key was
nxagentLastEnteredWindow = NULL;
}
- if (X.xcrossing.window == nxagentDefaultWindows[0] &&
- X.xcrossing.detail != NotifyInferior &&
- X.xcrossing.mode == NotifyNormal)
+ if (nxagentOption(Fullscreen))
{
- nxagentUngrabPointerAndKeyboard(&X);
+ if (X.xcrossing.window == nxagentFullscreenWindow &&
+ X.xcrossing.detail != NotifyInferior &&
+ X.xcrossing.mode == NotifyNormal)
+ {
+ nxagentUngrabPointerAndKeyboard(&X);
+ }
}
if (X.xcrossing.detail != NotifyInferior)
@@ -1982,8 +1622,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was
}
if (nxagentUseNXTrans == 1 && nxagentOption(Rootless) == 0 &&
- nxagentOption(Nested) == 0 &&
- X.xmap.window != nxagentIconWindow)
+ nxagentOption(Nested) == 0 && X.xmap.window != nxagentIconWindow)
{
nxagentVisibility = VisibilityFullyObscured;
}
@@ -2022,17 +1661,14 @@ FIXME: Don't enqueue the KeyRelease event if the key was
}
}
- if (nxagentOption(AllScreens) == 1)
+ if (nxagentOption(Fullscreen) == 1)
{
if (X.xmap.window == nxagentIconWindow)
{
pScreen = nxagentScreen(X.xmap.window);
nxagentMaximizeToFullScreen(pScreen);
}
- }
- if (nxagentOption(Fullscreen) == 1)
- {
nxagentVisibility = VisibilityUnobscured;
nxagentVisibilityStop = False;
nxagentVisibilityTimeout = GetTimeInMillis() + 2000;
@@ -2042,17 +1678,10 @@ FIXME: Don't enqueue the KeyRelease event if the key was
}
case MappingNotify:
{
- XMappingEvent *mappingEvent = (XMappingEvent *) &X;
-
#ifdef DEBUG
fprintf(stderr, "nxagentDispatchEvents: WARNING! Going to handle new MappingNotify event.\n");
#endif
- if (mappingEvent -> request == MappingPointer)
- {
- nxagentInitPointerMap();
- }
-
break;
}
default:
@@ -2126,40 +1755,20 @@ FIXME: Don't enqueue the KeyRelease event if the key was
if (nxagentWMIsRunning)
{
- if (nxagentOption(AllScreens))
+ if (nxagentOption(Fullscreen))
{
nxagentMinimizeFromFullScreen(pScreen);
}
else
{
- XIconifyWindow(nxagentDisplay, nxagentDefaultWindows[0],
- DefaultScreen(nxagentDisplay));
+ XIconifyWindow(nxagentDisplay, nxagentDefaultWindows[0], DefaultScreen(nxagentDisplay));
}
}
}
if (switchFullscreen)
{
- if (nxagentOption(AllScreens) == 1 && nxagentOption(Fullscreen) == 1)
- {
- nxagentSwitchAllScreens(pScreen, 0);
- }
- else
- {
- nxagentSwitchFullscreen(pScreen, !nxagentOption(Fullscreen));
- }
- }
-
- if (switchAllScreens)
- {
- if (nxagentOption(AllScreens) == 0 && nxagentOption(Fullscreen) == 1)
- {
- nxagentSwitchFullscreen(pScreen, 0);
- }
- else
- {
- nxagentSwitchAllScreens(pScreen, !nxagentOption(AllScreens));
- }
+ nxagentSwitchFullscreen(pScreen, !nxagentOption(Fullscreen));
}
if (startKbd)
@@ -2312,16 +1921,8 @@ int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult *result)
return 1;
}
- if (X -> xkey.keycode == 66)
- {
- nxagentXkbState.Caps = (~nxagentXkbState.Caps & 1);
- }
- else if (X -> xkey.keycode == 77)
- {
- nxagentXkbState.Num = (~nxagentXkbState.Num & 1);
- }
-
nxagentLastEventTime = nxagentLastKeyPressTime = GetTimeInMillis();
+
x.u.u.type = KeyPress;
x.u.u.detail = nxagentConvertKeycode(X -> xkey.keycode);
@@ -2759,8 +2360,7 @@ int nxagentHandleClientMessageEvent(XEvent *X, enum HandleEventResult *result)
}
if (X -> xclient.window == (nxagentOption(Fullscreen) ?
- nxagentIconWindow : nxagentDefaultWindows[0]) ||
- nxagentWMIsRunning == 0)
+ nxagentIconWindow : nxagentDefaultWindows[0]))
{
*result = doCloseSession;
}
@@ -3357,7 +2957,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
if (X -> xconfigure.window == nxagentDefaultWindows[pScreen -> myNum])
{
- if (nxagentOption(AllScreens) == 0)
+ if (nxagentOption(Fullscreen) == 0)
{
if (nxagentOption(DesktopResize) == 1)
{
@@ -3426,34 +3026,6 @@ int nxagentHandleConfigureNotify(XEvent* X)
doRandR = 0;
}
- nxagentChangeOption(Width, X -> xconfigure.width);
- nxagentChangeOption(Height, X -> xconfigure.height);
-
- XMoveResizeWindow(nxagentDisplay, nxagentInputWindows[0], 0, 0,
- X -> xconfigure.width, X -> xconfigure.height);
-
- if (nxagentOption(Fullscreen) == 0)
- {
- nxagentMoveViewport(pScreen, 0, 0);
- }
- else
- {
- nxagentChangeOption(RootX, (nxagentOption(Width) -
- nxagentOption(RootWidth)) / 2);
- nxagentChangeOption(RootY, (nxagentOption(Height) -
- nxagentOption(RootHeight)) / 2);
- nxagentChangeOption(ViewportXSpan, nxagentOption(Width) -
- nxagentOption(RootWidth));
- nxagentChangeOption(ViewportYSpan, nxagentOption(Height) -
- nxagentOption(RootHeight));
-
- nxagentUpdateViewportFrame(0, 0, nxagentOption(RootWidth),
- nxagentOption(RootHeight));
-
- XMoveWindow(nxagentDisplay, nxagentWindow(WindowTable[pScreen -> myNum]),
- nxagentOption(RootX), nxagentOption(RootY));
- }
-
if (doRandR)
{
#ifdef TEST
@@ -3475,6 +3047,8 @@ int nxagentHandleConfigureNotify(XEvent* X)
int nxagentHandleReparentNotify(XEvent* X)
{
+ ScreenPtr pScreen = nxagentScreen(X -> xreparent.window);
+
#ifdef TEST
fprintf(stderr, "nxagentHandleReparentNotify: Going to handle a new reparent event.\n");
#endif
@@ -3527,8 +3101,6 @@ int nxagentHandleReparentNotify(XEvent* X)
#ifdef WARNING
fprintf(stderr, "nxagentHandleReparentNotify: WARNING! Failed QueryTree request.\n");
#endif
-
- break;
}
if (result && children_return)
@@ -3581,95 +3153,6 @@ int nxagentHandleReparentNotify(XEvent* X)
return 1;
}
- else if (nxagentWMIsRunning == 1 && nxagentOption(Fullscreen) == 0 &&
- nxagentOption(WMBorderWidth) == -1)
- {
- XlibWindow w;
- XlibWindow rootReturn = 0;
- XlibWindow parentReturn = 0;
- XlibWindow junk;
- XlibWindow *childrenReturn = NULL;
- unsigned int nchildrenReturn = 0;
- Status result;
- XWindowAttributes attributes;
- int x, y;
- int xParent, yParent;
-
- /*
- * Calculate the absolute upper-left X e Y
- */
-
- if ((XGetWindowAttributes(nxagentDisplay, X -> xreparent.window,
- &attributes) == 0))
- {
- #ifdef WARNING
- fprintf(stderr, "nxagentHandleReparentNotify: WARNING! "
- "XGetWindowAttributes failed.\n");
- #endif
-
- return 1;
- }
-
- x = attributes.x;
- y = attributes.y;
-
- XTranslateCoordinates(nxagentDisplay, X -> xreparent.window,
- attributes.root, -attributes.border_width,
- -attributes.border_width, &x, &y, &junk);
-
- /*
- * Calculate the parent X and parent Y.
- */
-
- w = X -> xreparent.parent;
-
- if (w != DefaultRootWindow(nxagentDisplay))
- {
- do
- {
- result = XQueryTree(nxagentDisplay, w, &rootReturn, &parentReturn,
- &childrenReturn, &nchildrenReturn);
-
- if (parentReturn == rootReturn || parentReturn == 0 || result == 0)
- {
- break;
- }
-
- if (result == 1 && childrenReturn != NULL)
- {
- XFree(childrenReturn);
- }
-
- w = parentReturn;
- }
- while (True);
-
- /*
- * WM reparented. Find edge of the frame.
- */
-
- if (XGetWindowAttributes(nxagentDisplay, w, &attributes) == 0)
- {
- #ifdef WARNING
- fprintf(stderr, "nxagentHandleReparentNotify: WARNING! "
- "XGetWindowAttributes failed for parent window.\n");
- #endif
-
- return 1;
- }
-
- xParent = attributes.x;
- yParent = attributes.y;
-
- /*
- * Difference between Absolute X and Parent X gives thickness of side frame.
- * Difference between Absolute Y and Parent Y gives thickness of title bar.
- */
-
- nxagentChangeOption(WMBorderWidth, (x - xParent));
- nxagentChangeOption(WMTitleHeight, (y - yParent));
- }
- }
return 1;
}
@@ -3830,8 +3313,6 @@ void nxagentGrabPointerAndKeyboard(XEvent *X)
int resource;
- int result;
-
#ifdef TEST
fprintf(stderr, "nxagentGrabPointerAndKeyboard: Grabbing pointer and keyboard with event at [%p].\n",
(void *) X);
@@ -3850,22 +3331,8 @@ void nxagentGrabPointerAndKeyboard(XEvent *X)
fprintf(stderr, "nxagentGrabPointerAndKeyboard: Going to grab the keyboard in context [B1].\n");
#endif
- result = XGrabKeyboard(nxagentDisplay, nxagentFullscreenWindow,
- True, GrabModeAsync, GrabModeAsync, now);
-
- if (result != GrabSuccess)
- {
- return;
- }
-
- /*
- * The smart scheduler could be stopped while
- * waiting for the reply. In this case we need
- * to yield explicitly to avoid to be stuck in
- * the dispatch loop forever.
- */
-
- isItTimeToYield = 1;
+ XGrabKeyboard(nxagentDisplay, nxagentFullscreenWindow,
+ True, GrabModeAsync, GrabModeAsync, now);
#ifdef TEST
fprintf(stderr, "nxagentGrabPointerAndKeyboard: Going to grab the pointer in context [B2].\n");