Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
70b49467
Unverified
Commit
70b49467
authored
Oct 27, 2018
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/small_improvements' into 3.6.x
Attributes GH PR #732:
https://github.com/ArcticaProject/nx-libs/pull/732
parents
28043201
e2421bbd
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
270 additions
and
391 deletions
+270
-391
Window.c
nx-X11/programs/Xserver/hw/nxagent/Window.c
+270
-391
No files found.
nx-X11/programs/Xserver/hw/nxagent/Window.c
View file @
70b49467
...
...
@@ -142,13 +142,10 @@ typedef struct _WindowMatch
{
WindowPtr
pWin
;
Window
id
;
}
WindowMatchRec
;
Bool
nxagentReconnectAllWindows
(
void
*
);
Bool
nxagentDisconnectAllWindows
(
void
);
Bool
nxagentIsIconic
(
WindowPtr
);
/*
...
...
@@ -169,21 +166,13 @@ void nxagentClearSplash(WindowPtr pWin);
*/
static
Bool
nxagentSomeWindowsAreMapped
(
void
);
static
void
nxagentFrameBufferPaintWindow
(
WindowPtr
pWin
,
RegionPtr
pRegion
,
int
what
);
static
void
nxagentTraverseWindow
(
WindowPtr
,
void
(
*
)(
void
*
,
XID
,
void
*
),
void
*
);
static
void
nxagentDisconnectWindow
(
void
*
,
XID
,
void
*
);
static
Bool
nxagentLoopOverWindows
(
void
(
*
)(
void
*
,
XID
,
void
*
));
static
void
nxagentReconfigureWindowCursor
(
void
*
,
XID
,
void
*
);
static
void
nxagentReconnectWindow
(
void
*
,
XID
,
void
*
);
static
void
nxagentReconfigureWindow
(
void
*
,
XID
,
void
*
);
static
int
nxagentForceExposure
(
WindowPtr
pWin
,
void
*
ptr
);
/* by dimbor */
...
...
@@ -199,9 +188,7 @@ nxagentWMStateRec;
*/
#ifdef TEST
static
Bool
nxagentCheckWindowIntegrity
(
WindowPtr
pWin
);
#endif
WindowPtr
nxagentGetWindowFromID
(
Window
id
)
...
...
@@ -235,7 +222,6 @@ static int nxagentFindWindowMatch(WindowPtr pWin, void * ptr)
if
(
match
->
id
==
nxagentWindow
(
pWin
))
{
match
->
pWin
=
pWin
;
return
WT_STOPWALKING
;
}
else
...
...
@@ -246,25 +232,22 @@ static int nxagentFindWindowMatch(WindowPtr pWin, void * ptr)
WindowPtr
nxagentWindowPtr
(
Window
window
)
{
int
i
;
WindowMatchRec
match
=
{.
pWin
=
NullWindow
,
.
id
=
window
}
;
WindowMatchRec
match
;
match
.
pWin
=
NullWindow
;
match
.
id
=
window
;
for
(
i
=
0
;
i
<
nxagentNumScreens
;
i
++
)
for
(
int
i
=
0
;
i
<
nxagentNumScreens
;
i
++
)
{
WalkTree
(
screenInfo
.
screens
[
i
],
nxagentFindWindowMatch
,
(
void
*
)
&
match
);
if
(
match
.
pWin
)
break
;
if
(
match
.
pWin
)
{
break
;
}
}
return
match
.
pWin
;
}
Bool
nxagentCreateWindow
(
pWin
)
WindowPtr
pWin
;
Bool
nxagentCreateWindow
(
WindowPtr
pWin
)
{
unsigned
long
mask
;
XSetWindowAttributes
attributes
;
...
...
@@ -282,15 +265,17 @@ Bool nxagentCreateWindow(pWin)
{
nxagentClearSplash
(
nxagentRootTileWindow
);
}
#ifdef NXAGENT_LOGO_DEBUG
#ifdef NXAGENT_LOGO_DEBUG
fprintf
(
stderr
,
"nxagentCreateWindow: nxagentSplashCount [%d]
\n
"
,
nxagentSplashCount
);
#endif
#endif
if
(
pWin
->
drawable
.
class
==
InputOnly
)
{
if
(
pWin
->
drawable
.
class
==
InputOnly
)
{
mask
=
CWEventMask
;
visual
=
CopyFromParent
;
}
else
{
else
{
mask
=
CWEventMask
|
CWBackingStore
;
if
(
pWin
->
optional
)
...
...
@@ -307,35 +292,45 @@ Bool nxagentCreateWindow(pWin)
(
void
*
)
pWin
,
attributes
.
backing_store
);
#endif
/*
FIXME: We need to set save under on the real display?
*/
/*
FIXME: We need to set save under on the real display?
*/
if
(
nxagentSaveUnder
)
{
mask
|=
CWSaveUnder
;
attributes
.
save_under
=
False
;
}
if
(
pWin
->
parent
)
{
if
(
pWin
->
optional
&&
pWin
->
optional
->
visual
!=
wVisual
(
pWin
->
parent
))
{
if
(
pWin
->
parent
)
{
if
(
pWin
->
optional
&&
pWin
->
optional
->
visual
!=
wVisual
(
pWin
->
parent
))
{
visual
=
nxagentVisualFromID
(
pWin
->
drawable
.
pScreen
,
wVisual
(
pWin
));
mask
|=
CWColormap
;
if
(
pWin
->
optional
->
colormap
)
{
if
(
pWin
->
optional
->
colormap
)
{
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
attributes
.
colormap
=
nxagentColormap
(
pCmap
);
}
else
{
attributes
.
colormap
=
nxagentDefaultVisualColormap
(
visual
);
}
}
else
if
(
pWin
->
optional
)
{
visual
=
CopyFromParent
;
else
{
}
else
{
visual
=
nxagentVisualFromID
(
pWin
->
drawable
.
pScreen
,
wVisual
(
pWin
));
mask
|=
CWColormap
;
attributes
.
colormap
=
nxagentDefaultVisualColormap
(
visual
);
}
}
else
{
/* root windows have their own colormaps at creation time */
else
{
/* root windows have their own colormaps at creation time */
visual
=
nxagentVisualFromID
(
pWin
->
drawable
.
pScreen
,
wVisual
(
pWin
));
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
mask
|=
CWColormap
;
...
...
@@ -392,23 +387,14 @@ FIXME: We need to set save under on the real display?
nxagentWindowPriv
(
pWin
)
->
isMapped
=
0
;
nxagentWindowPriv
(
pWin
)
->
isRedirected
=
0
;
nxagentWindowPriv
(
pWin
)
->
visibilityState
=
VisibilityUnobscured
;
nxagentWindowPriv
(
pWin
)
->
corruptedRegion
=
RegionCreate
(
NULL
,
1
);
nxagentWindowPriv
(
pWin
)
->
hasTransparentChildren
=
0
;
nxagentWindowPriv
(
pWin
)
->
containGlyphs
=
0
;
nxagentWindowPriv
(
pWin
)
->
corruptedId
=
0
;
nxagentWindowPriv
(
pWin
)
->
deferredBackgroundExpose
=
0
;
nxagentWindowPriv
(
pWin
)
->
synchronizationBitmap
=
NullPixmap
;
nxagentWindowPriv
(
pWin
)
->
corruptedTimestamp
=
0
;
nxagentWindowPriv
(
pWin
)
->
splitResource
=
NULL
;
if
(
nxagentOption
(
Rootless
)
==
1
)
...
...
@@ -450,7 +436,6 @@ FIXME: We need to set save under on the real display?
if
(
nxagentOption
(
Rootless
)
&&
nxagentWindowTopLevel
(
pWin
))
{
Atom
prop
=
nxagentMakeAtom
(
"WM_PROTOCOLS"
,
strlen
(
"WM_PROTOCOLS"
),
True
);
XlibAtom
atom
=
nxagentMakeAtom
(
"WM_DELETE_WINDOW"
,
strlen
(
"WM_DELETE_WINDOW"
),
True
);
XSetWMProtocols
(
nxagentDisplay
,
nxagentWindowPriv
(
pWin
)
->
window
,
&
atom
,
1
);
...
...
@@ -462,10 +447,10 @@ FIXME: We need to set save under on the real display?
* memory, if the composite extension is
* supported on the display.
*/
/*
FIXME: Do all the windows for which nxagentWindowTopLevel(pWin)
/*
FIXME: Do all the windows for which nxagentWindowTopLevel(pWin)
returns true need to be redirected?
*/
*/
nxagentRedirectWindow
(
pWin
);
}
...
...
@@ -474,11 +459,15 @@ FIXME: Do all the windows for which nxagentWindowTopLevel(pWin)
Atom
prop
=
MakeAtom
(
"NX_REAL_WINDOW"
,
strlen
(
"NX_REAL_WINDOW"
),
True
);
if
(
ChangeWindowProperty
(
pWin
,
prop
,
XA_WINDOW
,
32
,
PropModeReplace
,
1
,
nxagentWindowPriv
(
pWin
),
1
)
!=
Success
)
{
fprintf
(
stderr
,
"nxagentCreateWindow: Adding NX_REAL_WINDOW failed.
\n
"
);
#ifdef DEBUG
}
#ifdef DEBUG
else
{
fprintf
(
stderr
,
"nxagentCreateWindow: Added NX_REAL_WINDOW for Window ID [%x].
\n
"
,
nxagentWindowPriv
(
pWin
)
->
window
);
#endif
}
#endif
}
nxagentWindowPriv
(
pWin
)
->
x
=
pWin
->
origin
.
x
-
wBorderWidth
(
pWin
);
...
...
@@ -502,17 +491,15 @@ FIXME: Do all the windows for which nxagentWindowTopLevel(pWin)
nxagentWindowPriv
(
pWin
->
nextSib
)
->
siblingAbove
=
nxagentWindow
(
pWin
);
}
#ifdef NXAGENT_SHAPE2
#ifdef SHAPE
#ifdef SHAPE
#ifdef NXAGENT_SHAPE2
nxagentWindowPriv
(
pWin
)
->
boundingShape
=
NULL
;
nxagentWindowPriv
(
pWin
)
->
clipShape
=
NULL
;
#endif
/* SHAPE */
#else
#ifdef SHAPE
#else
nxagentWindowPriv
(
pWin
)
->
boundingShape
=
RegionCreate
(
NULL
,
1
);
nxagentWindowPriv
(
pWin
)
->
clipShape
=
RegionCreate
(
NULL
,
1
);
#endif
/* SHAPE */
#endif
#endif
#endif
/* SHAPE */
fbCreateWindow
(
pWin
);
...
...
@@ -534,15 +521,18 @@ FIXME: Do all the windows for which nxagentWindowTopLevel(pWin)
void
nxagentSetVersionProperty
(
WindowPtr
pWin
)
{
char
*
name
=
"NX_AGENT_VERSION"
;
Atom
prop
=
MakeAtom
(
name
,
strlen
(
name
),
True
);
if
(
ChangeWindowProperty
(
pWin
,
prop
,
XA_STRING
,
8
,
PropModeReplace
,
strlen
(
NX_VERSION_CURRENT_STRING
),
NX_VERSION_CURRENT_STRING
,
True
)
!=
Success
)
{
fprintf
(
stderr
,
"%s: Adding property [%s], value [%s] failed.
\n
"
,
__func__
,
name
,
NX_VERSION_CURRENT_STRING
);
#ifdef DEBUG
}
#ifdef DEBUG
else
{
fprintf
(
stderr
,
"%s: Added property [%s], value [%s] for root window [%x].
\n
"
,
__func__
,
name
,
NX_VERSION_CURRENT_STRING
,
pWin
);
#endif
}
#endif
}
Bool
nxagentSomeWindowsAreMapped
(
void
)
...
...
@@ -565,9 +555,6 @@ Bool nxagentSomeWindowsAreMapped(void)
Bool
nxagentDestroyWindow
(
WindowPtr
pWin
)
{
int
i
;
int
j
;
nxagentPrivWindowPtr
pWindowPriv
;
if
(
nxagentScreenTrap
==
1
)
...
...
@@ -577,9 +564,9 @@ Bool nxagentDestroyWindow(WindowPtr pWin)
nxagentClearClipboard
(
NULL
,
pWin
);
for
(
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
for
(
int
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
{
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
i
nt
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
if
(
nxagentExposeQueue
.
exposures
[
i
].
pWindow
==
pWin
)
{
...
...
@@ -610,38 +597,25 @@ Bool nxagentDestroyWindow(WindowPtr pWin)
}
#ifdef NXAGENT_SHAPE2
#ifdef SHAPE
if
(
pWindowPriv
->
boundingShape
)
{
RegionDestroy
(
pWindowPriv
->
boundingShape
);
RegionDestroy
(
pWindowPriv
->
boundingShape
);
}
if
(
pWindowPriv
->
clipShape
)
{
RegionDestroy
(
pWindowPriv
->
clipShape
);
RegionDestroy
(
pWindowPriv
->
clipShape
);
}
#endif
#else
RegionDestroy
(
pWindowPriv
->
boundingShape
);
RegionDestroy
(
pWindowPriv
->
clipShape
);
RegionDestroy
(
pWindowPriv
->
boundingShape
);
RegionDestroy
(
pWindowPriv
->
clipShape
);
#endif
if
(
pWindowPriv
->
corruptedRegion
)
{
RegionDestroy
(
pWindowPriv
->
corruptedRegion
);
RegionDestroy
(
pWindowPriv
->
corruptedRegion
);
pWindowPriv
->
corruptedRegion
=
NULL
;
}
...
...
@@ -656,7 +630,6 @@ Bool nxagentDestroyWindow(WindowPtr pWin)
}
nxagentDestroyCorruptedResource
((
DrawablePtr
)
pWin
,
RT_NX_CORR_WINDOW
);
nxagentDestroyDrawableBitmap
((
DrawablePtr
)
pWin
);
if
(
pWindowPriv
->
splitResource
!=
NULL
)
...
...
@@ -686,7 +659,6 @@ Bool nxagentDestroyWindow(WindowPtr pWin)
if
(
pWin
==
nxagentRootTileWindow
)
{
nxagentWindowPriv
(
nxagentRootTileWindow
)
->
window
=
None
;
nxagentRootTileWindow
=
None
;
}
...
...
@@ -737,13 +709,10 @@ void nxagentRestackWindow(WindowPtr pWin, WindowPtr pOldNextSib)
}
nxagentAddConfiguredWindow
(
pWin
,
CW_RootlessRestack
);
}
void
nxagentSwitchFullscreen
(
ScreenPtr
pScreen
,
Bool
switchOn
)
{
XEvent
e
;
if
(
nxagentOption
(
Rootless
)
==
1
)
{
return
;
...
...
@@ -780,29 +749,26 @@ void nxagentSwitchFullscreen(ScreenPtr pScreen, Bool switchOn)
nxagentChangeOption
(
Fullscreen
,
switchOn
);
memset
(
&
e
,
0
,
sizeof
(
e
));
e
.
xclient
.
type
=
ClientMessage
;
e
.
xclient
.
message_type
=
nxagentAtoms
[
13
];
/* _NET_WM_STATE */
e
.
xclient
.
display
=
nxagentDisplay
;
e
.
xclient
.
window
=
nxagentDefaultWindows
[
pScreen
->
myNum
];
e
.
xclient
.
format
=
32
;
e
.
xclient
.
data
.
l
[
0
]
=
nxagentOption
(
Fullscreen
)
?
1
:
0
;
e
.
xclient
.
data
.
l
[
1
]
=
nxagentAtoms
[
14
];
/* _NET_WM_STATE_FULLSCREEN */
XEvent
e
=
{
.
xclient
.
type
=
ClientMessage
,
.
xclient
.
message_type
=
nxagentAtoms
[
13
],
/* _NET_WM_STATE */
.
xclient
.
display
=
nxagentDisplay
,
.
xclient
.
window
=
nxagentDefaultWindows
[
pScreen
->
myNum
],
.
xclient
.
format
=
32
,
.
xclient
.
data
.
l
[
0
]
=
nxagentOption
(
Fullscreen
)
?
1
:
0
,
.
xclient
.
data
.
l
[
1
]
=
nxagentAtoms
[
14
]
/* _NET_WM_STATE_FULLSCREEN */
};
XSendEvent
(
nxagentDisplay
,
DefaultRootWindow
(
nxagentDisplay
),
False
,
SubstructureRedirectMask
,
&
e
);
if
(
switchOn
)
{
nxagentFullscreenWindow
=
nxagentDefaultWindows
[
pScreen
->
myNum
];
nxagentGrabPointerAndKeyboard
(
NULL
);
}
else
{
nxagentFullscreenWindow
=
None
;
nxagentUngrabPointerAndKeyboard
(
NULL
);
}
}
...
...
@@ -887,7 +853,6 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
nxagentChangeOption
(
Fullscreen
,
True
);
nxagentChangeOption
(
AllScreens
,
True
);
/*
* Save the window-mode configuration.
*/
...
...
@@ -935,7 +900,6 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if
(
nxagentIconWindow
==
None
)
{
nxagentIconWindow
=
nxagentCreateIconWindow
();
XMapWindow
(
nxagentDisplay
,
nxagentIconWindow
);
}
...
...
@@ -1009,10 +973,8 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if
(
nxagentOption
(
WMBorderWidth
)
>
0
&&
nxagentOption
(
WMTitleHeight
)
>
0
)
{
nxagentChangeOption
(
X
,
nxagentOption
(
SavedX
)
-
nxagentOption
(
WMBorderWidth
));
nxagentChangeOption
(
Y
,
nxagentOption
(
SavedY
)
-
nxagentOption
(
WMTitleHeight
));
nxagentChangeOption
(
X
,
nxagentOption
(
SavedX
)
-
nxagentOption
(
WMBorderWidth
));
nxagentChangeOption
(
Y
,
nxagentOption
(
SavedY
)
-
nxagentOption
(
WMTitleHeight
));
}
else
{
...
...
@@ -1093,14 +1055,8 @@ void nxagentUpdateViewportFrame(int x, int y, int w, int h)
void
nxagentMoveViewport
(
ScreenPtr
pScreen
,
int
hShift
,
int
vShift
)
{
int
newX
;
int
newY
;
int
oldX
;
int
oldY
;
int
newX
,
newY
,
oldX
=
0
,
oldY
=
0
;
Bool
doMove
=
False
;
oldX
=
0
;
oldY
=
0
;
if
(
nxagentOption
(
Rootless
))
{
...
...
@@ -1120,7 +1076,6 @@ void nxagentMoveViewport(ScreenPtr pScreen, int hShift, int vShift)
#endif
nxagentChangeOption
(
ViewportXSpan
,
nxagentOption
(
Width
)
-
nxagentOption
(
RootWidth
));
nxagentChangeOption
(
ViewportYSpan
,
nxagentOption
(
Height
)
-
nxagentOption
(
RootHeight
));
if
(
nxagentOption
(
ViewportXSpan
)
<
0
)
...
...
@@ -1211,11 +1166,7 @@ void nxagentMoveViewport(ScreenPtr pScreen, int hShift, int vShift)
* pan and one for vertical pan.
*/
BoxRec
hRect
;
BoxRec
vRect
;
hRect
.
x1
=
-
newX
;
hRect
.
y1
=
-
newY
;
BoxRec
hRect
=
{.
x1
=
-
newX
,
.
y1
=
-
newY
};
if
(
hShift
<
0
)
{
...
...
@@ -1233,8 +1184,7 @@ void nxagentMoveViewport(ScreenPtr pScreen, int hShift, int vShift)
fprintf
(
stderr
,
"nxagentMoveViewport: hRect p1[%i, %i] - p2[%i, %i].
\n
"
,
hRect
.
x1
,
hRect
.
y1
,
hRect
.
x2
,
hRect
.
y2
);
#endif
vRect
.
x1
=
-
newX
;
vRect
.
y1
=
-
newY
;
BoxRec
vRect
=
{.
x1
=
-
newX
,
.
y1
=
-
newY
};
if
(
vShift
<
0
)
{
...
...
@@ -1272,11 +1222,8 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
{
unsigned
int
valuemask
;
XWindowChanges
values
;
int
offX
,
offY
;
int
i
,
j
;
offX
=
nxagentWindowPriv
(
pWin
)
->
x
-
pWin
->
origin
.
x
;
offY
=
nxagentWindowPriv
(
pWin
)
->
y
-
pWin
->
origin
.
y
;
int
offX
=
nxagentWindowPriv
(
pWin
)
->
x
-
pWin
->
origin
.
x
;
int
offY
=
nxagentWindowPriv
(
pWin
)
->
y
-
pWin
->
origin
.
y
;
if
(
nxagentScreenTrap
==
1
)
{
...
...
@@ -1373,9 +1320,9 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
nxagentAddStaticResizedWindow
(
pWin
,
XNextRequest
(
nxagentDisplay
),
offX
,
offY
);
for
(
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
for
(
int
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
{
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
i
nt
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
if
(
nxagentExposeQueue
.
exposures
[
i
].
pWindow
==
pWin
&&
nxagentExposeQueue
.
exposures
[
i
].
remoteRegion
!=
NullRegion
)
...
...
@@ -1484,7 +1431,6 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
}
#ifdef NXAGENT_SPLASH
/*
* This should bring again the splash window
* on top, so why the else clause? Is this
...
...
@@ -1510,8 +1456,7 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
* }
* }
*/
#endif
#endif
/* NXAGENT_SPLASH */
if
(
mask
&
CW_RootlessRestack
)
{
...
...
@@ -1550,12 +1495,10 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
}
#ifdef SHAPE
if
(
mask
&
CW_Shape
)
{
nxagentShapeWindow
(
pWin
);
}
#endif
if
(
mask
&
CW_Map
&&
...
...
@@ -1563,14 +1506,11 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask)
nxagentRootlessWindow
!=
pWin
))
{
XMapWindow
(
nxagentDisplay
,
nxagentWindow
(
pWin
));
return
;
}
}
void
nxagentReparentWindow
(
pWin
,
pOldParent
)
WindowPtr
pWin
;
WindowPtr
pOldParent
;
void
nxagentReparentWindow
(
WindowPtr
pWin
,
WindowPtr
pOldParent
)
{
if
(
nxagentScreenTrap
)
{
...
...
@@ -1589,9 +1529,7 @@ void nxagentReparentWindow(pWin, pOldParent)
pWin
->
origin
.
y
-
wBorderWidth
(
pWin
));
}
Bool
nxagentChangeWindowAttributes
(
pWin
,
mask
)
WindowPtr
pWin
;
unsigned
long
mask
;
Bool
nxagentChangeWindowAttributes
(
WindowPtr
pWin
,
unsigned
long
mask
)
{
XSetWindowAttributes
attributes
;
...
...
@@ -1758,10 +1696,10 @@ Bool nxagentChangeWindowAttributes(pWin, mask)
attributes
.
win_gravity
=
pWin
->
winGravity
;
}
/*
FIXME: Do we need to set the attribute on the
/*
FIXME: Do we need to set the attribute on the
remote display?
*/
*/
if
(
mask
&
CWBackingStore
)
{
attributes
.
backing_store
=
pWin
->
backingStore
;
...
...
@@ -1801,10 +1739,10 @@ FIXME: Do we need to set the attribute on the
attributes
.
override_redirect
=
pWin
->
overrideRedirect
;
}
/*
FIXME: Do we need to set the attribute on the
/*
FIXME: Do we need to set the attribute on the
remote display?
*/
*/
if
(
mask
&
CWSaveUnder
)
{
attributes
.
save_under
=
pWin
->
saveUnder
;
...
...
@@ -1826,15 +1764,13 @@ FIXME: Do we need to set the attribute on the
if
(
mask
&
CWColormap
)
{
ColormapPtr
pCmap
;
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
ColormapPtr
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
/*
FIXME: When the caller is nxagentReconfigureWindow
/*
FIXME: When the caller is nxagentReconfigureWindow
sometimes wColormap(pWin) is 0. Could a window
have no colormap?
*/
*/
if
(
pCmap
!=
NULL
)
{
attributes
.
colormap
=
nxagentColormap
(
pCmap
);
...
...
@@ -1912,19 +1848,19 @@ Bool nxagentRealizeWindow(WindowPtr pWin)
wmState
.
state
=
1
;
/* NormalState */
wmState
.
icon
=
None
;
if
(
ChangeWindowProperty
(
pWin
,
prop
,
prop
,
32
,
0
,
2
,
&
wmState
,
1
)
!=
Success
)
{
fprintf
(
stderr
,
"nxagentRealizeWindow: Adding WM_STATE fail.
\n
"
);
}
#ifdef SHAPE
}
/*
* Not needed.
*
* nxagentShapeWindow(pWin);
#ifdef SHAPE
nxagentShapeWindow(pWin);
#endif
*/
#endif
/* SHAPE */
/*
* Mapping of the root window is called by
* InitRootWindow in DIX. Skip the operation
...
...
@@ -1953,8 +1889,7 @@ Bool nxagentRealizeWindow(WindowPtr pWin)
return
True
;
}
Bool
nxagentUnrealizeWindow
(
pWin
)
WindowPtr
pWin
;
Bool
nxagentUnrealizeWindow
(
WindowPtr
pWin
)
{
if
(
nxagentScreenTrap
)
{
...
...
@@ -1969,8 +1904,10 @@ Bool nxagentUnrealizeWindow(pWin)
wmState
.
state
=
3
;
/* WithdrawnState */
wmState
.
icon
=
None
;
if
(
ChangeWindowProperty
(
pWin
,
prop
,
prop
,
32
,
0
,
2
,
&
wmState
,
1
)
!=
Success
)
{
fprintf
(
stderr
,
"nxagentUnRealizeWindow: Changing WM_STATE failed.
\n
"
);
}
}
XUnmapWindow
(
nxagentDisplay
,
nxagentWindow
(
pWin
));
...
...
@@ -1979,7 +1916,6 @@ Bool nxagentUnrealizeWindow(pWin)
void
nxagentFrameBufferPaintWindow
(
WindowPtr
pWin
,
RegionPtr
pRegion
,
int
what
)
{
void
(
*
PaintWindowBackgroundBackup
)(
WindowPtr
,
RegionPtr
,
int
);
if
(
pWin
->
backgroundState
==
BackgroundPixmap
)
...
...
@@ -2011,22 +1947,15 @@ void nxagentFrameBufferPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
}
}
void
nxagentPaintWindowBackground
(
pWin
,
pRegion
,
what
)
WindowPtr
pWin
;
RegionPtr
pRegion
;
int
what
;
void
nxagentPaintWindowBackground
(
WindowPtr
pWin
,
RegionPtr
pRegion
,
int
what
)
{
int
i
;
RegionRec
temp
;
if
(
pWin
->
realized
)
{
BoxPtr
pBox
;
pBox
=
RegionRects
(
pRegion
);
BoxPtr
pBox
=
RegionRects
(
pRegion
);
for
(
i
=
0
;
i
<
RegionNumRects
(
pRegion
);
i
++
)
for
(
i
nt
i
=
0
;
i
<
RegionNumRects
(
pRegion
);
i
++
)
{
XClearArea
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
pBox
[
i
].
x1
-
pWin
->
drawable
.
x
,
...
...
@@ -2051,11 +1980,8 @@ void nxagentPaintWindowBackground(pWin, pRegion, what)
*/
RegionInit
(
&
temp
,
NullBox
,
1
);
RegionIntersect
(
&
temp
,
pRegion
,
&
pWin
->
clipList
);
nxagentFrameBufferPaintWindow
(
pWin
,
&
temp
,
what
);
RegionUninit
(
&
temp
);
}
...
...
@@ -2070,11 +1996,8 @@ void nxagentPaintWindowBorder(WindowPtr pWin, RegionPtr pRegion, int what)
*/
RegionInit
(
&
temp
,
NullBox
,
1
);
RegionIntersect
(
&
temp
,
pRegion
,
&
pWin
->
borderClip
);
nxagentFrameBufferPaintWindow
(
pWin
,
&
temp
,
what
);
RegionUninit
(
&
temp
);
}
...
...
@@ -2092,19 +2015,13 @@ void nxagentClipNotify(WindowPtr pWin, int dx, int dy)
nxagentAddConfiguredWindow
(
pWin
,
CWStackingOrder
);
nxagentAddConfiguredWindow
(
pWin
,
CW_Shape
);
#ifdef NXAGENT_SHAPE
return
;
#else
#ifdef SHAPE
/*
#ifndef NXAGENT_SHAPE
#ifdef SHAPE
/*
* nxagentShapeWindow(pWin);
*/
#endif
/* SHAPE */
#endif
/* NXAGENT_SHAPE */
#endif
/* SHAPE */
#endif
/* NXAGENT_SHAPE */
}
void
nxagentWindowExposures
(
WindowPtr
pWin
,
RegionPtr
pRgn
,
RegionPtr
other_exposed
)
...
...
@@ -2151,17 +2068,11 @@ void nxagentWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_expo
{
if
(
nxagentExposeArrayIsInitialized
==
0
)
{
int
i
;
XSetWindowAttributes
attributes
;
#ifdef TEST
fprintf
(
stderr
,
"nxagentWindowExposures: Initializing expose queue.
\n
"
);
#endif
attributes
.
event_mask
=
StructureNotifyMask
;
for
(
i
=
0
;
i
<
EXPOSED_SIZE
;
i
++
)
for
(
int
i
=
0
;
i
<
EXPOSED_SIZE
;
i
++
)
{
nxagentExposeQueue
.
exposures
[
i
].
pWindow
=
NULL
;
nxagentExposeQueue
.
exposures
[
i
].
localRegion
=
NullRegion
;
...
...
@@ -2170,12 +2081,11 @@ void nxagentWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_expo
nxagentExposeQueue
.
exposures
[
i
].
serial
=
0
;
}
nxagentExposeQueue
.
start
=
0
;
nxagentExposeQueue
.
length
=
0
;
nxagentExposeSerial
=
0
;
nxagentExposeQueue
.
start
=
0
;
XSetWindowAttributes
attributes
=
{.
event_mask
=
StructureNotifyMask
};
nxagentConfiguredSynchroWindow
=
XCreateWindow
(
nxagentDisplay
,
DefaultRootWindow
(
nxagentDisplay
),
0
,
0
,
1
,
1
,
0
,
0
,
InputOutput
,
0
,
CWEventMask
,
&
attributes
);
...
...
@@ -2211,12 +2121,9 @@ void nxagentWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_expo
if
(
nxagentExposeQueue
.
length
<
EXPOSED_SIZE
)
{
int
index
;
index
=
(
nxagentExposeQueue
.
start
+
nxagentExposeQueue
.
length
)
%
EXPOSED_SIZE
;
int
index
=
(
nxagentExposeQueue
.
start
+
nxagentExposeQueue
.
length
)
%
EXPOSED_SIZE
;
nxagentExposeQueue
.
exposures
[
index
].
pWindow
=
pWin
;
nxagentExposeQueue
.
exposures
[
index
].
localRegion
=
RegionCreate
(
NULL
,
1
);
if
(
nxagentOption
(
Rootless
)
&&
nxagentWindowPriv
(
pWin
)
&&
...
...
@@ -2258,7 +2165,6 @@ void nxagentWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_expo
*/
nxagentExposeQueue
.
exposures
[
index
].
synchronize
=
1
;
nxagentExposeQueue
.
length
++
;
if
(
nxagentOption
(
Rootless
)
&&
nxagentWindowPriv
(
pWin
)
&&
...
...
@@ -2310,9 +2216,15 @@ static Bool nxagentRegionEqual(RegionPtr pReg1, RegionPtr pReg2)
BoxPtr
pBox1
,
pBox2
;
unsigned
int
n1
,
n2
;
if
(
pReg1
==
pReg2
)
return
True
;
if
(
pReg1
==
pReg2
)
{
return
True
;
}
if
(
pReg1
==
NullRegion
||
pReg2
==
NullRegion
)
return
False
;
if
(
pReg1
==
NullRegion
||
pReg2
==
NullRegion
)
{
return
False
;
}
pBox1
=
RegionRects
(
pReg1
);
n1
=
RegionNumRects
(
pReg1
);
...
...
@@ -2320,11 +2232,20 @@ static Bool nxagentRegionEqual(RegionPtr pReg1, RegionPtr pReg2)
pBox2
=
RegionRects
(
pReg2
);
n2
=
RegionNumRects
(
pReg2
);
if
(
n1
!=
n2
)
return
False
;
if
(
n1
!=
n2
)
{
return
False
;
}
if
(
pBox1
==
pBox2
)
return
True
;
if
(
pBox1
==
pBox2
)
{
return
True
;
}
if
(
memcmp
(
pBox1
,
pBox2
,
n1
*
sizeof
(
BoxRec
)))
return
False
;
if
(
memcmp
(
pBox1
,
pBox2
,
n1
*
sizeof
(
BoxRec
)))
{
return
False
;
}
return
True
;
}
...
...
@@ -2333,8 +2254,6 @@ void nxagentShapeWindow(WindowPtr pWin)
{
Region
reg
;
BoxPtr
pBox
;
XRectangle
rect
;
int
i
;
if
(
NXDisplayError
(
nxagentDisplay
)
==
1
)
{
...
...
@@ -2346,6 +2265,10 @@ void nxagentShapeWindow(WindowPtr pWin)
(
void
*
)
pWin
,
nxagentWindow
(
pWin
));
#endif
/*
FIXME: this is the same code as below, just with another shape. Maybe move
this code to a helper function?
*/
if
(
!
nxagentRegionEqual
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
,
wBoundingShape
(
pWin
)))
{
...
...
@@ -2360,33 +2283,34 @@ void nxagentShapeWindow(WindowPtr pWin)
RegionNumRects
(
wBoundingShape
(
pWin
)));
#endif
#ifdef NXAGENT_SHAPE2
#ifdef NXAGENT_SHAPE2
if
(
!
nxagentWindowPriv
(
pWin
)
->
boundingShape
)
{
nxagentWindowPriv
(
pWin
)
->
boundingShape
=
RegionCreate
(
NULL
,
1
);
}
#endif
#endif
RegionCopy
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
,
wBoundingShape
(
pWin
));
RegionCopy
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
,
wBoundingShape
(
pWin
));
reg
=
XCreateRegion
();
pBox
=
RegionRects
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
for
(
i
=
0
;
for
(
i
nt
i
=
0
;
i
<
RegionNumRects
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
i
++
)
{
rect
.
x
=
pBox
[
i
].
x1
;
rect
.
y
=
pBox
[
i
].
y1
;
rect
.
width
=
pBox
[
i
].
x2
-
pBox
[
i
].
x1
;
rect
.
height
=
pBox
[
i
].
y2
-
pBox
[
i
].
y1
;
XRectangle
rect
=
{
.
x
=
pBox
[
i
].
x1
,
.
y
=
pBox
[
i
].
y1
,
.
width
=
pBox
[
i
].
x2
-
pBox
[
i
].
x1
,
.
height
=
pBox
[
i
].
y2
-
pBox
[
i
].
y1
};
XUnionRectWithRegion
(
&
rect
,
reg
,
reg
);
}
#ifndef NXAGENT_SHAPE
#ifndef NXAGENT_SHAPE
XShapeCombineRegion
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
ShapeBounding
,
0
,
0
,
reg
,
ShapeSet
);
#endif
#endif
XDestroyRegion
(
reg
);
}
...
...
@@ -2396,14 +2320,12 @@ void nxagentShapeWindow(WindowPtr pWin)
fprintf
(
stderr
,
"nxagentShapeWindow: wBounding shape does not exist. Removing the shape.
\n
"
);
#endif
RegionEmpty
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
RegionEmpty
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
#ifndef NXAGENT_SHAPE
#ifndef NXAGENT_SHAPE
XShapeCombineMask
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
ShapeBounding
,
0
,
0
,
None
,
ShapeSet
);
#endif
#endif
}
}
...
...
@@ -2420,33 +2342,34 @@ void nxagentShapeWindow(WindowPtr pWin)
RegionNumRects
(
wClipShape
(
pWin
)));
#endif
#ifdef NXAGENT_SHAPE2
#ifdef NXAGENT_SHAPE2
if
(
!
nxagentWindowPriv
(
pWin
)
->
clipShape
)
{
nxagentWindowPriv
(
pWin
)
->
clipShape
=
RegionCreate
(
NULL
,
1
);
}
#endif
#endif
RegionCopy
(
nxagentWindowPriv
(
pWin
)
->
clipShape
,
wClipShape
(
pWin
));
RegionCopy
(
nxagentWindowPriv
(
pWin
)
->
clipShape
,
wClipShape
(
pWin
));
reg
=
XCreateRegion
();
pBox
=
RegionRects
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
for
(
i
=
0
;
for
(
i
nt
i
=
0
;
i
<
RegionNumRects
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
i
++
)
{
rect
.
x
=
pBox
[
i
].
x1
;
rect
.
y
=
pBox
[
i
].
y1
;
rect
.
width
=
pBox
[
i
].
x2
-
pBox
[
i
].
x1
;
rect
.
height
=
pBox
[
i
].
y2
-
pBox
[
i
].
y1
;
XRectangle
rect
=
{
.
x
=
pBox
[
i
].
x1
,
.
y
=
pBox
[
i
].
y1
,
.
width
=
pBox
[
i
].
x2
-
pBox
[
i
].
x1
,
.
height
=
pBox
[
i
].
y2
-
pBox
[
i
].
y1
};
XUnionRectWithRegion
(
&
rect
,
reg
,
reg
);
}
#ifndef NXAGENT_SHAPE
#ifndef NXAGENT_SHAPE
XShapeCombineRegion
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
ShapeClip
,
0
,
0
,
reg
,
ShapeSet
);
#endif
#endif
XDestroyRegion
(
reg
);
}
...
...
@@ -2456,13 +2379,12 @@ void nxagentShapeWindow(WindowPtr pWin)
fprintf
(
stderr
,
"nxagentShapeWindow: wClip shape does not exist. Removing the shape.
\n
"
);
#endif
RegionEmpty
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
RegionEmpty
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
#ifndef NXAGENT_SHAPE
#ifndef NXAGENT_SHAPE
XShapeCombineMask
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
ShapeClip
,
0
,
0
,
None
,
ShapeSet
);
#endif
#endif
}
}
}
...
...
@@ -2470,18 +2392,17 @@ void nxagentShapeWindow(WindowPtr pWin)
static
int
nxagentForceExposure
(
WindowPtr
pWin
,
void
*
ptr
)
{
RegionPtr
exposedRgn
;
BoxRec
Box
;
WindowPtr
pRoot
=
pWin
->
drawable
.
pScreen
->
root
;
if
(
pWin
->
drawable
.
class
!=
InputOnly
)
{
Box
.
x1
=
pWin
->
drawable
.
x
;
Box
.
y1
=
pWin
->
drawable
.
y
;
Box
.
x2
=
Box
.
x1
+
pWin
->
drawable
.
width
;
Box
.
y2
=
Box
.
y1
+
pWin
->
drawable
.
height
;
WindowPtr
pRoot
=
pWin
->
drawable
.
pScreen
->
root
;
BoxRec
Box
=
{
.
x1
=
pWin
->
drawable
.
x
,
.
y1
=
pWin
->
drawable
.
y
,
.
x2
=
Box
.
x1
+
pWin
->
drawable
.
width
,
.
y2
=
Box
.
y1
+
pWin
->
drawable
.
height
,
};
RegionPtr
exposedRgn
=
RegionCreate
(
&
Box
,
1
);
exposedRgn
=
RegionCreate
(
&
Box
,
1
);
RegionIntersect
(
exposedRgn
,
exposedRgn
,
&
pRoot
->
winSize
);
if
(
exposedRgn
!=
NULL
&&
RegionNotEmpty
(
exposedRgn
)
!=
0
)
...
...
@@ -2504,11 +2425,9 @@ void nxagentRefreshWindows(WindowPtr pWin)
void
nxagentUnmapWindows
(
void
)
{
int
i
;
if
(
nxagentOption
(
Fullscreen
)
==
1
)
{
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
if
(
nxagentDefaultWindows
[
i
])
{
...
...
@@ -2522,12 +2441,9 @@ void nxagentUnmapWindows(void)
void
nxagentMapDefaultWindows
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
for
(
int
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
WindowPtr
pWin
=
screenInfo
.
screens
[
i
]
->
root
;
ScreenPtr
pScreen
=
pWin
->
drawable
.
pScreen
;
MapWindow
(
pWin
,
serverClient
);
...
...
@@ -2632,16 +2548,14 @@ void nxagentMapDefaultWindows(void)
Bool
nxagentDisconnectAllWindows
(
void
)
{
Bool
succeeded
=
True
;
int
i
;
WindowPtr
pWin
;
#if defined(NXAGENT_RECONNECT_DEBUG) || defined(NXAGENT_RECONNECT_WINDOW_DEBUG)
fprintf
(
stderr
,
"nxagentDisconnectAllWindows
\n
"
);
#endif
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
pWin
=
screenInfo
.
screens
[
i
]
->
root
;
WindowPtr
pWin
=
screenInfo
.
screens
[
i
]
->
root
;
nxagentTraverseWindow
(
pWin
,
nxagentDisconnectWindow
,
&
succeeded
);
nxagentDefaultWindows
[
i
]
=
None
;
}
...
...
@@ -2656,7 +2570,7 @@ Bool nxagentDisconnectAllWindows(void)
/*
* FIXME: We are giving up reconnecting those void *
* that are not resource, and we are just disconnecting them.
*
p
erhaps we could do better and reconnect them.
*
P
erhaps we could do better and reconnect them.
*/
void
nxagentDisconnectWindow
(
void
*
p0
,
XID
x1
,
void
*
p2
)
...
...
@@ -2706,11 +2620,15 @@ void nxagentDisconnectWindow(void * p0, XID x1, void * p2)
Atom
prop
=
MakeAtom
(
"NX_REAL_WINDOW"
,
strlen
(
"NX_REAL_WINDOW"
),
True
);
if
(
DeleteProperty
(
pWin
,
prop
)
!=
Success
)
{
fprintf
(
stderr
,
"nxagentDisconnectWindow: Deleting NX_REAL_WINDOW failed.
\n
"
);
#ifdef DEBUG
}
#ifdef DEBUG
else
{
fprintf
(
stderr
,
"nxagentDisconnectWindow: Deleting NX_REAL_WINDOW from Window ID [%x].
\n
"
,
nxagentWindowPriv
(
pWin
)
->
window
);
#endif
}
#endif
}
nxagentWindow
(
pWin
)
=
None
;
...
...
@@ -2723,7 +2641,10 @@ void nxagentDisconnectWindow(void * p0, XID x1, void * p2)
Bool
nxagentReconnectAllWindows
(
void
*
p0
)
{
/*
access the parameter like this if this function needs it in future:
int flexibility = *(int *) p0;
*/
#if defined(NXAGENT_RECONNECT_DEBUG) || defined(NXAGENT_RECONNECT_WINDOW_DEBUG)
fprintf
(
stderr
,
"nxagentReconnectAllWindows
\n
"
);
...
...
@@ -2772,9 +2693,7 @@ Bool nxagentReconnectAllWindows(void *p0)
if
(
nxagentOption
(
Rootless
)
==
0
)
{
int
i
;
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
for
(
int
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
XRaiseWindow
(
nxagentDisplay
,
nxagentInputWindows
[
i
]);
}
...
...
@@ -2789,11 +2708,8 @@ Bool nxagentReconnectAllWindows(void *p0)
}
#ifdef NXAGENT_RECONNECT_WINDOW_DEBUG
XSync
(
nxagentDisplay
,
0
);
fprintf
(
stderr
,
"nxagentReconnectAllWindows: All windows reconfigured.
\n
"
);
#endif
if
(
nxagentInitClipboard
(
screenInfo
.
screens
[
0
]
->
root
)
==
-
1
)
...
...
@@ -2806,15 +2722,11 @@ Bool nxagentReconnectAllWindows(void *p0)
}
#ifdef NXAGENT_RECONNECT_WINDOW_DEBUG
XSync
(
nxagentDisplay
,
0
);
fprintf
(
stderr
,
"nxagentReconnectAllWindows: Clipboard initialized.
\n
"
);
#endif
#ifdef VIEWPORT_FRAME
/*
* We move the viewport frames out of the way on the X server side.
*/
...
...
@@ -2833,7 +2745,6 @@ Bool nxagentReconnectAllWindows(void *p0)
XMoveWindow
(
nxagentDisplay
,
nxagentWindow
(
nxagentViewportFrameBelow
),
0
,
nxagentOption
(
RootHeight
));
}
#endif
/* #ifdef VIEWPORT_FRAME */
return
True
;
...
...
@@ -2841,7 +2752,10 @@ Bool nxagentReconnectAllWindows(void *p0)
Bool
nxagentSetWindowCursors
(
void
*
p0
)
{
/*
access the parameter like this if this function needs it in future:
int flexibility = *(int *) p0;
*/
#if defined(NXAGENT_RECONNECT_DEBUG) || defined(NXAGENT_RECONNECT_WINDOW_DEBUG)
fprintf
(
stderr
,
"nxagentSetWindowCursors: Going to loop over the windows.
\n
"
);
...
...
@@ -2885,14 +2799,11 @@ static void nxagentTraverseWindow(
static
Bool
nxagentLoopOverWindows
(
void
(
*
pF
)(
void
*
,
XID
,
void
*
))
{
int
i
;
Bool
windowSuccess
=
True
;
WindowPtr
pWin
;
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
pWin
=
screenInfo
.
screens
[
i
]
->
root
;
nxagentTraverseWindow
(
pWin
,
pF
,
&
windowSuccess
);
nxagentTraverseWindow
(
screenInfo
.
screens
[
i
]
->
root
,
pF
,
&
windowSuccess
);
}
return
windowSuccess
;
...
...
@@ -2908,17 +2819,21 @@ static void nxagentReconnectWindow(void * param0, XID param1, void * data_buffer
ColormapPtr
pCmap
;
if
(
!
pWin
||
!*
pBool
)
{
return
;
}
#ifdef NXAGENT_RECONNECT_WINDOW_DEBUG
fprintf
(
stderr
,
"nxagentReconnectWindow: %p - ID %lx
\n
"
,
pWin
,
nxagentWindow
(
pWin
));
#endif
if
(
pWin
->
drawable
.
class
==
InputOnly
)
{
if
(
pWin
->
drawable
.
class
==
InputOnly
)
{
mask
=
CWEventMask
;
visual
=
CopyFromParent
;
}
else
{
else
{
mask
=
CWEventMask
|
CWBackingStore
;
attributes
.
backing_store
=
NotUseful
;
...
...
@@ -2930,30 +2845,39 @@ static void nxagentReconnectWindow(void * param0, XID param1, void * data_buffer
attributes
.
backing_pixel
=
pWin
->
optional
->
backingPixel
;
}
/*
FIXME: Do we need to set save unders attribute here?
*/
/*
FIXME: Do we need to set save unders attribute here?
*/
if
(
nxagentSaveUnder
)
{
mask
|=
CWSaveUnder
;
attributes
.
save_under
=
pWin
->
saveUnder
;
}
if
(
pWin
->
parent
)
{
if
(
pWin
->
optional
&&
pWin
->
optional
->
visual
!=
wVisual
(
pWin
->
parent
))
{
if
(
pWin
->
parent
)
{
if
(
pWin
->
optional
&&
pWin
->
optional
->
visual
!=
wVisual
(
pWin
->
parent
))
{
visual
=
nxagentVisualFromID
(
pWin
->
drawable
.
pScreen
,
wVisual
(
pWin
));
mask
|=
CWColormap
;
if
(
pWin
->
optional
->
colormap
)
{
if
(
pWin
->
optional
->
colormap
)
{
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
attributes
.
colormap
=
nxagentColormap
(
pCmap
);
}
else
{
attributes
.
colormap
=
nxagentDefaultVisualColormap
(
visual
);
}
}
else
{
visual
=
CopyFromParent
;
}
else
{
/* root windows have their own colormaps at creation time */
}
else
{
/* root windows have their own colormaps at creation time */
visual
=
nxagentVisualFromID
(
pWin
->
drawable
.
pScreen
,
wVisual
(
pWin
));
pCmap
=
(
ColormapPtr
)
LookupIDByType
(
wColormap
(
pWin
),
RT_COLORMAP
);
mask
|=
CWColormap
;
...
...
@@ -2974,9 +2898,6 @@ FIXME: Do we need to set save unders attribute here?
#ifdef TEST
fprintf
(
stderr
,
"nxagentReconnectWindow: Going to create new window.
\n
"
);
#endif
#ifdef TEST
fprintf
(
stderr
,
"nxagentReconnectWindow: Recreating %swindow at %p current event mask = %lX mask & CWEventMask = %ld "
"event_mask = %lX
\n
"
,
nxagentWindowTopLevel
(
pWin
)
?
"toplevel "
:
""
,
(
void
*
)
pWin
,
pWin
->
eventMask
,
...
...
@@ -3060,18 +2981,12 @@ FIXME: Do we need to set save unders attribute here?
Atom
type
;
int
format
;
unsigned
long
nItems
,
bytesLeft
;
XSizeHints
*
props
,
hints
;
XSizeHints
hints
=
{
0
}
;
unsigned
char
*
data
=
NULL
;
#ifdef _XSERVER64
unsigned
char
*
data64
=
NULL
;
unsigned
int
i
;
#endif
hints
.
flags
=
0
;
ret
=
GetWindowProperty
(
pWin
,
XA_WM_NORMAL_HINTS
,
0
,
sizeof
(
XSizeHints
),
...
...
@@ -3088,33 +3003,30 @@ FIXME: Do we need to set save unders attribute here?
bytesLeft
==
0
&&
type
==
XA_WM_SIZE_HINTS
)
{
XSizeHints
*
props
;
#ifdef TEST
fprintf
(
stderr
,
"nxagentReconnectWindow: setting WMSizeHints on window %p [%lx - %lx].
\n
"
,
(
void
*
)
pWin
,
pWin
->
drawable
.
id
,
nxagentWindow
(
pWin
));
#endif
#ifdef _XSERVER64
data64
=
(
unsigned
char
*
)
malloc
(
sizeof
(
XSizeHints
)
+
4
);
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
4
;
i
++
)
{
*
(
data64
+
i
)
=
*
(
data
+
i
);
}
*
(((
int
*
)
data64
)
+
1
)
=
0
;
for
(
i
=
8
;
i
<
sizeof
(
XSizeHints
)
+
4
;
i
++
)
for
(
i
nt
i
=
8
;
i
<
sizeof
(
XSizeHints
)
+
4
;
i
++
)
{
*
(
data64
+
i
)
=
*
(
data
+
i
-
4
);
}
props
=
(
XSizeHints
*
)
data64
;
#else
props
=
(
XSizeHints
*
)
data
;
#endif
/* _XSERVER64 */
hints
=
*
props
;
...
...
@@ -3147,11 +3059,15 @@ FIXME: Do we need to set save unders attribute here?
Atom
prop
=
MakeAtom
(
"NX_REAL_WINDOW"
,
strlen
(
"NX_REAL_WINDOW"
),
True
);
if
(
ChangeWindowProperty
(
pWin
,
prop
,
XA_WINDOW
,
32
,
PropModeReplace
,
1
,
nxagentWindowPriv
(
pWin
),
1
)
!=
Success
)
{
fprintf
(
stderr
,
"nxagentReconnectWindow: Updating NX_REAL_WINDOW failed.
\n
"
);
#ifdef DEBUG
}
#ifdef DEBUG
else
{
fprintf
(
stderr
,
"nxagentReconnectWindow: Updated NX_REAL_WINDOW for Window ID [%x].
\n
"
,
nxagentWindowPriv
(
pWin
)
->
window
);
#endif
}
#endif
}
if
(
nxagentDrawableStatus
((
DrawablePtr
)
pWin
)
==
NotSynchronized
)
...
...
@@ -3168,7 +3084,9 @@ static void nxagentReconfigureWindowCursor(void * param0, XID param1, void * dat
ScreenPtr
pScreen
;
if
(
!
pWin
||
!*
pBool
||
!
(
pCursor
=
wCursor
(
pWin
)))
{
return
;
}
pScreen
=
pWin
->
drawable
.
pScreen
;
...
...
@@ -3225,31 +3143,32 @@ static void nxagentReconfigureWindow(void * param0, XID param1, void * data_buff
#endif
if
(
pWin
->
drawable
.
class
==
InputOnly
)
{
mask
=
CWWinGravity
|
CWEventMask
|
CWDontPropagate
|
CWOverrideRedirect
|
CWCursor
;
}
else
{
mask
=
CWBackPixmap
|
CWBackPixel
|
CWBorderPixmap
|
CWBorderPixel
|
CWBitGravity
|
CWWinGravity
|
CWBackingStore
|
CWBackingPlanes
|
CWBackingPixel
|
CWOverrideRedirect
|
CWSaveUnder
|
CWEventMask
|
CWDontPropagate
|
CWColormap
|
CWCursor
;
}
nxagentChangeWindowAttributes
(
pWin
,
mask
);
#ifdef SHAPE
#ifdef SHAPE
if
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
)
{
RegionDestroy
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
RegionDestroy
(
nxagentWindowPriv
(
pWin
)
->
boundingShape
);
nxagentWindowPriv
(
pWin
)
->
boundingShape
=
NULL
;
}
if
(
nxagentWindowPriv
(
pWin
)
->
clipShape
)
{
RegionDestroy
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
RegionDestroy
(
nxagentWindowPriv
(
pWin
)
->
clipShape
);
nxagentWindowPriv
(
pWin
)
->
clipShape
=
NULL
;
}
nxagentShapeWindow
(
pWin
);
#endif
#endif
if
(
pWin
!=
screenInfo
.
screens
[
0
]
->
root
)
{
...
...
@@ -3283,7 +3202,6 @@ XXX: This would break Motif menus.
XMoveWindow
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
nxagentOption
(
RootX
),
nxagentOption
(
RootY
));
XMapWindow
(
nxagentDisplay
,
nxagentWindow
(
pWin
));
}
}
...
...
@@ -3303,7 +3221,6 @@ Bool nxagentCheckIllegalRootMonitoring(WindowPtr pWin, Mask mask)
}
#ifdef TEST
Bool
nxagentCheckWindowIntegrity
(
WindowPtr
pWin
)
{
Bool
integrity
=
True
;
...
...
@@ -3321,15 +3238,12 @@ Bool nxagentCheckWindowIntegrity(WindowPtr pWin)
if
(
width
&&
height
)
{
length
=
nxagentImageLength
(
width
,
height
,
format
,
0
,
depth
);
data
=
malloc
(
length
);
data
=
calloc
(
1
,
length
);
if
(
data
==
NULL
)
{
FatalError
(
"nxagentCheckWindowIntegrity: Failed to allocate a buffer of size %d.
\n
"
,
length
);
}
memset
(
data
,
0
,
length
);
image
=
XGetImage
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
0
,
0
,
width
,
height
,
plane_mask
,
format
);
if
(
image
==
NULL
)
...
...
@@ -3342,15 +3256,12 @@ Bool nxagentCheckWindowIntegrity(WindowPtr pWin)
if
(
image
&&
memcmp
(
image
->
data
,
data
,
length
)
!=
0
)
{
#ifdef TEST
int
i
;
char
*
p
,
*
q
;
#endif
integrity
=
False
;
#ifdef TEST
for
(
i
=
0
,
p
=
image
->
data
,
q
=
data
;
i
<
length
;
i
++
)
char
*
p
=
image
->
data
,
*
q
=
data
;
for
(
int
i
=
0
;
i
<
length
;
i
++
)
{
if
(
p
[
i
]
!=
q
[
i
])
{
...
...
@@ -3397,8 +3308,7 @@ Bool nxagentCheckWindowIntegrity(WindowPtr pWin)
return
integrity
;
}
#endif
#endif
/* TEST */
Bool
nxagentIsIconic
(
WindowPtr
pWin
)
{
...
...
@@ -3428,17 +3338,12 @@ Bool nxagentIsIconic(WindowPtr pWin)
}
}
void
nxagentSetTopLevelEventMask
(
pWin
)
WindowPtr
pWin
;
void
nxagentSetTopLevelEventMask
(
WindowPtr
pWin
)
{
unsigned
long
mask
=
CWEventMask
;
XSetWindowAttributes
attributes
;
if
(
nxagentOption
(
Rootless
)
&&
nxagentWindowTopLevel
(
pWin
))
{
attributes
.
event_mask
=
nxagentGetEventMask
(
pWin
);
XChangeWindowAttributes
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
mask
,
&
attributes
);
XSetWindowAttributes
attributes
=
{.
event_mask
=
nxagentGetEventMask
(
pWin
)};
XChangeWindowAttributes
(
nxagentDisplay
,
nxagentWindow
(
pWin
),
CWEventMask
,
&
attributes
);
}
}
...
...
@@ -3453,13 +3358,11 @@ void nxagentSetTopLevelEventMask(pWin)
int
nxagentExtentsPredicate
(
int
total
)
{
#ifdef TEST
if
(
total
==
6
||
total
==
11
||
total
==
10
)
{
fprintf
(
stderr
,
"nxagentExtentsPredicate: WARNING! Returning [%d] with [%d] rectangles.
\n
"
,
(
total
==
6
||
total
==
11
||
total
==
10
),
total
);
}
#endif
return
(
total
==
6
||
total
==
11
||
total
==
10
);
...
...
@@ -3469,8 +3372,6 @@ void nxagentFlushConfigureWindow(void)
{
ConfiguredWindowStruct
*
index
;
XWindowChanges
changes
;
int
i
;
int
j
;
index
=
nxagentConfiguredWindowList
;
...
...
@@ -3486,8 +3387,6 @@ void nxagentFlushConfigureWindow(void)
while
(
index
)
{
ConfiguredWindowStruct
*
tmp
;
WindowPtr
pWin
=
index
->
pWin
;
unsigned
int
valuemask
=
index
->
valuemask
;
...
...
@@ -3496,23 +3395,24 @@ void nxagentFlushConfigureWindow(void)
nxagentConfigureWindow
(
pWin
,
valuemask
);
}
tmp
=
index
;
if
(
index
==
nxagentConfiguredWindowList
)
{
free
(
tmp
);
free
(
index
);
break
;
}
else
{
ConfiguredWindowStruct
*
tmp
=
index
;
index
=
index
->
prev
;
free
(
tmp
);
}
}
nxagentConfiguredWindowList
=
NULL
;
for
(
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
for
(
int
j
=
0
;
j
<
nxagentExposeQueue
.
length
;
j
++
)
{
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
i
nt
i
=
(
nxagentExposeQueue
.
start
+
j
)
%
EXPOSED_SIZE
;
if
(
nxagentExposeQueue
.
exposures
[
i
].
synchronize
==
1
)
{
...
...
@@ -3538,11 +3438,11 @@ void nxagentFlushConfigureWindow(void)
void
nxagentPostValidateTree
(
WindowPtr
pParent
,
WindowPtr
pChild
,
VTKind
kind
)
{
/*
FIXME: Do we need this here?
/*
FIXME: Do we need this here?
nxagentFlushConfigureWindow();
*/
*/
return
;
}
...
...
@@ -3598,28 +3498,20 @@ void nxagentAddConfiguredWindow(WindowPtr pWin, unsigned int valuemask)
valuemask
|=
CWStackingOrder
;
}
if
(
nxagentConfiguredWindowList
==
NULL
)
{
ConfiguredWindowStruct
*
tmp
=
nxagentConfiguredWindowList
;
nxagentConfiguredWindowList
=
malloc
(
sizeof
(
ConfiguredWindowStruct
));
nxagentConfiguredWindowList
->
next
=
NULL
;
nxagentConfiguredWindowList
->
next
=
tmp
;
/* can be NULL */
nxagentConfiguredWindowList
->
prev
=
NULL
;
nxagentConfiguredWindowList
->
pWin
=
pWin
;
}
else
{
ConfiguredWindowStruct
*
tmp
;
tmp
=
malloc
(
sizeof
(
ConfiguredWindowStruct
));
nxagentConfiguredWindowList
->
valuemask
=
valuemask
;
tmp
->
next
=
nxagentConfiguredWindowList
;
nxagentConfiguredWindowList
->
prev
=
tmp
;
tmp
->
prev
=
NULL
;
nxagentConfiguredWindowList
=
tmp
;
nxagentConfiguredWindowList
->
pWin
=
pWin
;
if
(
tmp
)
{
tmp
->
prev
=
nxagentConfiguredWindowList
;
}
}
nxagentConfiguredWindowList
->
valuemask
=
valuemask
;
return
;
}
...
...
@@ -3680,22 +3572,15 @@ void nxagentDeleteConfiguredWindow(WindowPtr pWin)
void
nxagentAddStaticResizedWindow
(
WindowPtr
pWin
,
unsigned
long
sequence
,
int
offX
,
int
offY
)
{
if
(
nxagentStaticResizedWindowList
==
NULL
)
{
StaticResizedWindowStruct
*
tmp
=
nxagentStaticResizedWindowList
;
nxagentStaticResizedWindowList
=
malloc
(
sizeof
(
StaticResizedWindowStruct
));
nxagentStaticResizedWindowList
->
next
=
NULL
;
nxagentStaticResizedWindowList
->
next
=
tmp
;
nxagentStaticResizedWindowList
->
prev
=
NULL
;
}
else
{
StaticResizedWindowStruct
*
tmp
;
tmp
=
malloc
(
sizeof
(
StaticResizedWindowStruct
));
tmp
->
next
=
nxagentStaticResizedWindowList
;
nxagentStaticResizedWindowList
->
prev
=
tmp
;
tmp
->
prev
=
NULL
;
nxagentStaticResizedWindowList
=
tmp
;
if
(
tmp
)
{
tmp
->
prev
=
nxagentStaticResizedWindowList
;
}
nxagentStaticResizedWindowList
->
pWin
=
pWin
;
...
...
@@ -3820,9 +3705,7 @@ void nxagentInitBSPixmapList(void)
int
nxagentAddItemBSPixmapList
(
unsigned
long
id
,
PixmapPtr
pPixmap
,
WindowPtr
pWin
,
int
bsx
,
int
bsy
)
{
int
i
;
for
(
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
for
(
int
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
{
if
(
nxagentBSPixmapList
[
i
]
==
NULL
)
{
...
...
@@ -3870,15 +3753,12 @@ int nxagentAddItemBSPixmapList(unsigned long id, PixmapPtr pPixmap, WindowPtr pW
int
nxagentRemoveItemBSPixmapList
(
unsigned
long
pixmapId
)
{
int
i
;
int
j
;
if
(
pixmapId
==
0
||
nxagentBSPixmapList
[
0
]
==
NULL
)
{
return
0
;
}
for
(
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
{
if
((
nxagentBSPixmapList
[
i
]
!=
NULL
)
&&
(
nxagentBSPixmapList
[
i
]
->
storingPixmapId
==
pixmapId
))
...
...
@@ -3888,6 +3768,8 @@ int nxagentRemoveItemBSPixmapList(unsigned long pixmapId)
if
(
i
<
BSPIXMAPLIMIT
-
1
)
{
int
j
;
for
(
j
=
i
;
j
<
BSPIXMAPLIMIT
-
1
;
j
++
)
{
nxagentBSPixmapList
[
j
]
=
nxagentBSPixmapList
[
j
+
1
];
...
...
@@ -3918,9 +3800,7 @@ int nxagentRemoveItemBSPixmapList(unsigned long pixmapId)
int
nxagentEmptyBSPixmapList
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
for
(
int
i
=
0
;
i
<
BSPIXMAPLIMIT
;
i
++
)
{
free
(
nxagentBSPixmapList
[
i
]);
nxagentBSPixmapList
[
i
]
=
NULL
;
...
...
@@ -3961,4 +3841,3 @@ StoringPixmapPtr nxagentFindItemBSPixmapList(unsigned long pixmapId)
return
NULL
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment