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
3e7c6697
Commit
3e7c6697
authored
Oct 10, 2011
by
Reinhard Tartler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Imported nxagent-3.1.0-6.tar.gz
Summary: Imported nxagent-3.1.0-6.tar.gz Keywords: Imported nxagent-3.1.0-6.tar.gz into Git repository
parent
9e337102
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
379 additions
and
23 deletions
+379
-23
Args.c
nx-X11/programs/Xserver/hw/nxagent/Args.c
+6
-0
CHANGELOG
nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+31
-0
Clipboard.c
nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+1
-1
Drawable.c
nx-X11/programs/Xserver/hw/nxagent/Drawable.c
+16
-0
Events.c
nx-X11/programs/Xserver/hw/nxagent/Events.c
+7
-2
Options.c
nx-X11/programs/Xserver/hw/nxagent/Options.c
+2
-0
Options.h
nx-X11/programs/Xserver/hw/nxagent/Options.h
+8
-0
Screen.c
nx-X11/programs/Xserver/hw/nxagent/Screen.c
+140
-20
NXproperty.c
nx-X11/programs/Xserver/hw/nxagent/X/NXproperty.c
+84
-0
NXproperty.c.NX.original
...11/programs/Xserver/hw/nxagent/X/NXproperty.c.NX.original
+84
-0
No files found.
nx-X11/programs/Xserver/hw/nxagent/Args.c
View file @
3e7c6697
...
...
@@ -1215,6 +1215,12 @@ static void nxagentParseOptions(char *name, char *value)
return
;
}
else
if
(
strcmp
(
name
,
"copysize"
)
==
0
)
{
nxagentChangeOption
(
CopyBufferSize
,
atoi
(
value
));
return
;
}
else
{
#ifdef DEBUG
...
...
nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
View file @
3e7c6697
ChangeLog:
nxagent-3.1.0-6
- Fixed a compile warning in Args.c.
- The synchronization loop breaks if the drawable is clean when it's
not supposed to be.
- Fixed TR12E01966. Emacs tooltips were not displayed properly. Added
a check on the event mask before calling miWindowExposures().
- Fixed TR01F01982. ConfigureNotify warning is printed in verbose mode
only.
nxagent-3.1.0-5
- Moved some variable definitions placed in ProcGetProperty().
nxagent-3.1.0-4
- Fixed TR06D01397. The problem was: drag & drop operations between
windows of Java applications didn't work in NX Client for Windows.
- Implemented FR12E01957. Added a limit to the amount of data that can
be pasted from an NX session into an external application. The new
option - named 'copysize' - can be read from the 'options' file.
nxagent-3.1.0-3
- Fixed TR12E01963. The window tree is revalidated explicitly after
recomputing the root window clip regions.
nxagent-3.1.0-2
- Fixed TR11E01946. Forcing exposures on regions saved in the backing
...
...
nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
View file @
3e7c6697
...
...
@@ -59,7 +59,7 @@ static int agentClipboardStatus;
static
int
clientAccum
;
Atom
serverCutProperty
;
static
Atom
clientCutProperty
;
Atom
clientCutProperty
;
static
Window
serverWindow
;
static
const
int
nxagentPrimarySelection
=
0
;
...
...
nx-X11/programs/Xserver/hw/nxagent/Drawable.c
View file @
3e7c6697
...
...
@@ -650,6 +650,22 @@ int nxagentSynchronizeRegion(DrawablePtr pDrawable, RegionPtr pRegion, unsigned
{
w
=
MIN
(
box
.
x2
-
x
,
tileWidth
);
/*
* FIXME: This should not occur.
*/
if
(
nxagentDrawableStatus
(
pDrawable
)
==
Synchronized
)
{
#ifdef WARNING
if
(
pDrawable
->
type
==
DRAWABLE_WINDOW
&&
pSrcDrawable
!=
pDrawable
)
fprintf
(
stderr
,
"nxagentSynchronizeRegion: WARNING! Trying to synchronize "
"the clean drawable type [%d] at [%p] with source at [%p].
\n
"
,
pDrawable
->
type
,
(
void
*
)
pDrawable
,
(
void
*
)
pSrcDrawable
);
#endif
goto
nxagentSynchronizeRegionStop
;
}
if
(
canBreakOnTimeout
(
breakMask
))
{
/*
...
...
nx-X11/programs/Xserver/hw/nxagent/Events.c
View file @
3e7c6697
...
...
@@ -55,6 +55,7 @@
#include "Drawable.h"
#include "Handlers.h"
#include "Utils.h"
#include "Error.h"
#include "NX.h"
#include "NXvars.h"
...
...
@@ -1478,7 +1479,10 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
if
(
nxagentExposeQueue
.
exposures
[
nxagentExposeQueue
.
start
].
serial
!=
X
.
xconfigure
.
x
)
{
#ifdef WARNING
fprintf
(
stderr
,
"nxagentDispatchEvents: Requested ConfigureNotify changes didn't take place.
\n
"
);
if
(
nxagentVerbose
==
1
)
{
fprintf
(
stderr
,
"nxagentDispatchEvents: Requested ConfigureNotify changes didn't take place.
\n
"
);
}
#endif
}
...
...
@@ -3358,7 +3362,8 @@ void nxagentSynchronizeExpose(void)
(
nxagentExposeQueueHead
.
remoteRegion
),
(
nxagentExposeQueueHead
.
localRegion
));
if
(
REGION_NIL
(
nxagentExposeQueueHead
.
remoteRegion
)
==
0
)
if
(
REGION_NIL
(
nxagentExposeQueueHead
.
remoteRegion
)
==
0
&&
((
pWin
->
eventMask
|
wOtherEventMasks
(
pWin
))
&
ExposureMask
))
{
#ifdef TEST
fprintf
(
stderr
,
"nxagentSynchronizeExpose: Going to call miWindowExposures"
...
...
nx-X11/programs/Xserver/hw/nxagent/Options.c
View file @
3e7c6697
...
...
@@ -139,6 +139,8 @@ void nxagentInitOptions()
nxagentOptions
.
ClientOs
=
UNDEFINED
;
nxagentOptions
.
InhibitXkb
=
1
;
nxagentOptions
.
CopyBufferSize
=
COPY_UNLIMITED
;
}
/*
...
...
nx-X11/programs/Xserver/hw/nxagent/Options.h
View file @
3e7c6697
...
...
@@ -27,6 +27,7 @@
#endif
#define UNDEFINED -1
#define COPY_UNLIMITED -1
typedef
enum
_BackingStoreMode
{
...
...
@@ -349,6 +350,13 @@ typedef struct _AgentOptions
int
InhibitXkb
;
/*
* Maximum number of bytes that can be pasted from
* an NX session into an external application.
*/
int
CopyBufferSize
;
}
AgentOptionsRec
;
typedef
AgentOptionsRec
*
AgentOptionsPtr
;
...
...
nx-X11/programs/Xserver/hw/nxagent/Screen.c
View file @
3e7c6697
...
...
@@ -46,6 +46,7 @@ is" without express or implied warranty.
#include "../../fb/fb.h"
#include "../../randr/randrstr.h"
#include "inputstr.h"
#include "mivalidate.h"
#include "Agent.h"
#include "Display.h"
...
...
@@ -1989,6 +1990,144 @@ Bool nxagentCloseScreen(int index, ScreenPtr pScreen)
return
True
;
}
/*
* This function comes from the xfree86 Xserver.
*/
static
void
nxagentSetRootClip
(
ScreenPtr
pScreen
,
Bool
enable
)
{
WindowPtr
pWin
=
WindowTable
[
pScreen
->
myNum
];
WindowPtr
pChild
;
Bool
WasViewable
=
(
Bool
)(
pWin
->
viewable
);
Bool
anyMarked
=
FALSE
;
RegionPtr
pOldClip
=
NULL
,
bsExposed
;
#ifdef DO_SAVE_UNDERS
Bool
dosave
=
FALSE
;
#endif
WindowPtr
pLayerWin
;
BoxRec
box
;
if
(
WasViewable
)
{
for
(
pChild
=
pWin
->
firstChild
;
pChild
;
pChild
=
pChild
->
nextSib
)
{
(
void
)
(
*
pScreen
->
MarkOverlappedWindows
)(
pChild
,
pChild
,
&
pLayerWin
);
}
(
*
pScreen
->
MarkWindow
)
(
pWin
);
anyMarked
=
TRUE
;
if
(
pWin
->
valdata
)
{
if
(
HasBorder
(
pWin
))
{
RegionPtr
borderVisible
;
borderVisible
=
REGION_CREATE
(
pScreen
,
NullBox
,
1
);
REGION_SUBTRACT
(
pScreen
,
borderVisible
,
&
pWin
->
borderClip
,
&
pWin
->
winSize
);
pWin
->
valdata
->
before
.
borderVisible
=
borderVisible
;
}
pWin
->
valdata
->
before
.
resized
=
TRUE
;
}
}
/*
* Use REGION_BREAK to avoid optimizations in ValidateTree
* that assume the root borderClip can't change well, normally
* it doesn't...)
*/
if
(
enable
)
{
box
.
x1
=
0
;
box
.
y1
=
0
;
box
.
x2
=
pScreen
->
width
;
box
.
y2
=
pScreen
->
height
;
REGION_INIT
(
pScreen
,
&
pWin
->
winSize
,
&
box
,
1
);
REGION_INIT
(
pScreen
,
&
pWin
->
borderSize
,
&
box
,
1
);
if
(
WasViewable
)
REGION_RESET
(
pScreen
,
&
pWin
->
borderClip
,
&
box
);
pWin
->
drawable
.
width
=
pScreen
->
width
;
pWin
->
drawable
.
height
=
pScreen
->
height
;
REGION_BREAK
(
pWin
->
drawable
.
pScreen
,
&
pWin
->
clipList
);
}
else
{
REGION_EMPTY
(
pScreen
,
&
pWin
->
borderClip
);
REGION_BREAK
(
pWin
->
drawable
.
pScreen
,
&
pWin
->
clipList
);
}
ResizeChildrenWinSize
(
pWin
,
0
,
0
,
0
,
0
);
if
(
WasViewable
)
{
if
(
pWin
->
backStorage
)
{
pOldClip
=
REGION_CREATE
(
pScreen
,
NullBox
,
1
);
REGION_COPY
(
pScreen
,
pOldClip
,
&
pWin
->
clipList
);
}
if
(
pWin
->
firstChild
)
{
anyMarked
|=
(
*
pScreen
->
MarkOverlappedWindows
)(
pWin
->
firstChild
,
pWin
->
firstChild
,
(
WindowPtr
*
)
NULL
);
}
else
{
(
*
pScreen
->
MarkWindow
)
(
pWin
);
anyMarked
=
TRUE
;
}
#ifdef DO_SAVE_UNDERS
if
(
DO_SAVE_UNDERS
(
pWin
))
{
dosave
=
(
*
pScreen
->
ChangeSaveUnder
)(
pLayerWin
,
pLayerWin
);
}
#endif
/* DO_SAVE_UNDERS */
if
(
anyMarked
)
(
*
pScreen
->
ValidateTree
)(
pWin
,
NullWindow
,
VTOther
);
}
if
(
pWin
->
backStorage
&&
((
pWin
->
backingStore
==
Always
)
||
WasViewable
))
{
if
(
!
WasViewable
)
pOldClip
=
&
pWin
->
clipList
;
/* a convenient empty region */
bsExposed
=
(
*
pScreen
->
TranslateBackingStore
)
(
pWin
,
0
,
0
,
pOldClip
,
pWin
->
drawable
.
x
,
pWin
->
drawable
.
y
);
if
(
WasViewable
)
REGION_DESTROY
(
pScreen
,
pOldClip
);
if
(
bsExposed
)
{
RegionPtr
valExposed
=
NullRegion
;
if
(
pWin
->
valdata
)
valExposed
=
&
pWin
->
valdata
->
after
.
exposed
;
(
*
pScreen
->
WindowExposures
)
(
pWin
,
valExposed
,
bsExposed
);
if
(
valExposed
)
REGION_EMPTY
(
pScreen
,
valExposed
);
REGION_DESTROY
(
pScreen
,
bsExposed
);
}
}
if
(
WasViewable
)
{
if
(
anyMarked
)
(
*
pScreen
->
HandleExposures
)(
pWin
);
#ifdef DO_SAVE_UNDERS
if
(
dosave
)
(
*
pScreen
->
PostChangeSaveUnder
)(
pLayerWin
,
pLayerWin
);
#endif
/* DO_SAVE_UNDERS */
if
(
anyMarked
&&
pScreen
->
PostValidateTree
)
(
*
pScreen
->
PostValidateTree
)(
pWin
,
NullWindow
,
VTOther
);
}
if
(
pWin
->
realized
)
WindowsRestructured
();
FlushAllOutput
();
}
Bool
nxagentResizeScreen
(
ScreenPtr
pScreen
,
int
width
,
int
height
,
int
mmWidth
,
int
mmHeight
)
{
...
...
@@ -2002,7 +2141,6 @@ Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height,
int
oldMmWidth
;
int
oldMmHeight
;
WindowPtr
pWin
;
RegionPtr
pRootWinSize
;
#ifdef TEST
...
...
@@ -2180,25 +2318,7 @@ FIXME: We should try to restore the previously
pRootWinSize
=
&
WindowTable
[
pScreen
->
myNum
]
->
winSize
;
/*
* Force a fictitious resize of all the top
* level windows, in order to trigger the
* window tree validation.
*/
if
(
nxagentOption
(
Rootless
)
==
0
)
{
for
(
pWin
=
WindowTable
[
pScreen
->
myNum
]
->
firstChild
;
pWin
!=
NULL
;
pWin
=
pWin
->
nextSib
)
{
(
*
pWin
->
drawable
.
pScreen
->
ResizeWindow
)(
pWin
,
pWin
->
drawable
.
x
,
pWin
->
drawable
.
y
,
pWin
->
drawable
.
width
,
pWin
->
drawable
.
height
,
pWin
->
nextSib
);
}
}
nxagentSetRootClip
(
pScreen
,
1
);
XMoveWindow
(
nxagentDisplay
,
nxagentWindow
(
WindowTable
[
0
]),
nxagentOption
(
RootX
),
nxagentOption
(
RootY
));
...
...
nx-X11/programs/Xserver/hw/nxagent/X/NXproperty.c
View file @
3e7c6697
...
...
@@ -89,6 +89,7 @@ SOFTWARE.
#include "Options.h"
#include "Rootless.h"
#include "Client.h"
#include "Windows.h"
#if defined(LBX) || defined(LBX_COMPAT)
#if 0 /* no header in X11 environment, not used in X11 environment */
...
...
@@ -99,6 +100,17 @@ int fWriteToClient(ClientPtr client, int len, char *buf)
#endif
#endif
extern
Atom
clientCutProperty
;
#ifdef NXAGENT_SERVER
typedef
struct
{
CARD32
state
;
Window
icon
;
}
nxagentWMStateRec
;
#endif
/*****************************************************************
* Property Stuff
*
...
...
@@ -343,10 +355,23 @@ ChangeWindowProperty(WindowPtr pWin, Atom property, Atom type, int format,
int
sizeInBytes
;
int
totalSize
;
pointer
data
;
int
copySize
;
sizeInBytes
=
format
>>
3
;
totalSize
=
len
*
sizeInBytes
;
copySize
=
nxagentOption
(
CopyBufferSize
);
if
(
copySize
!=
COPY_UNLIMITED
&&
property
==
clientCutProperty
)
{
if
(
totalSize
>
copySize
)
{
totalSize
=
copySize
;
totalSize
=
totalSize
-
(
totalSize
%
sizeInBytes
);
len
=
totalSize
/
sizeInBytes
;
}
}
/* first see if property already exists */
pProp
=
wUserProps
(
pWin
);
...
...
@@ -545,6 +570,11 @@ NullPropertyReply(
int
ProcGetProperty
(
ClientPtr
client
)
{
#ifdef NXAGENT_SERVER
nxagentWMStateRec
wmState
;
nxagentWMStateRec
*
wmsP
=
&
wmState
;
#endif
PropertyPtr
pProp
,
prevProp
;
unsigned
long
n
,
len
,
ind
;
WindowPtr
pWin
;
...
...
@@ -552,6 +582,7 @@ ProcGetProperty(ClientPtr client)
REQUEST
(
xGetPropertyReq
);
REQUEST_SIZE_MATCH
(
xGetPropertyReq
);
if
(
stuff
->
delete
)
UpdateCurrentTime
();
pWin
=
(
WindowPtr
)
SecurityLookupWindow
(
stuff
->
window
,
client
,
...
...
@@ -587,6 +618,59 @@ ProcGetProperty(ClientPtr client)
reply
.
type
=
X_Reply
;
reply
.
sequenceNumber
=
client
->
sequence
;
#ifdef NXAGENT_SERVER
/*
* Creating a reply for WM_STATE property if it doesn't exist.
* This is intended to allow drag & drop work in JAva 1.6 when
* the agent is connected to NXWin in multiwindow mode.
*/
if
(
nxagentOption
(
Rootless
)
&&
nxagentWindowTopLevel
(
pWin
)
&&
(
!
pProp
)
&&
strcmp
(
NameForAtom
(
stuff
->
property
),
"WM_STATE"
)
==
0
)
{
wmState
.
state
=
1
;
wmState
.
icon
=
None
;
if
(
ChangeWindowProperty
(
pWin
,
stuff
->
property
,
stuff
->
property
,
32
,
0
,
2
,
&
wmState
,
1
)
==
Success
)
{
nxagentExportProperty
(
pWin
,
stuff
->
property
,
stuff
->
property
,
32
,
0
,
2
,
&
wmState
);
}
n
=
8
;
ind
=
stuff
->
longOffset
<<
2
;
if
(
n
<
ind
)
{
client
->
errorValue
=
stuff
->
longOffset
;
return
BadValue
;
}
len
=
min
(
n
-
ind
,
4
*
stuff
->
longLength
);
reply
.
bytesAfter
=
n
-
(
ind
+
len
);
reply
.
length
=
(
len
+
3
)
>>
2
;
reply
.
format
=
32
;
reply
.
nItems
=
len
/
4
;
reply
.
propertyType
=
stuff
->
property
;
WriteReplyToClient
(
client
,
sizeof
(
xGenericReply
),
&
reply
);
if
(
len
)
{
client
->
pSwapReplyFunc
=
(
ReplySwapPtr
)
CopySwap32Write
;
WriteSwappedDataToClient
(
client
,
len
,
(
char
*
)
wmsP
+
ind
);
}
return
(
client
->
noClientException
);
}
#endif
if
(
!
pProp
)
return
NullPropertyReply
(
client
,
None
,
0
,
&
reply
);
...
...
nx-X11/programs/Xserver/hw/nxagent/X/NXproperty.c.NX.original
View file @
3e7c6697
...
...
@@ -89,6 +89,7 @@ SOFTWARE.
#include "Options.h"
#include "Rootless.h"
#include "Client.h"
#include "Windows.h"
#if defined(LBX) || defined(LBX_COMPAT)
#if 0 /* no header in X11 environment, not used in X11 environment */
...
...
@@ -99,6 +100,17 @@ int fWriteToClient(ClientPtr client, int len, char *buf)
#endif
#endif
extern Atom clientCutProperty;
#ifdef NXAGENT_SERVER
typedef struct
{
CARD32 state;
Window icon;
}
nxagentWMStateRec;
#endif
/*****************************************************************
* Property Stuff
*
...
...
@@ -343,10 +355,23 @@ ChangeWindowProperty(WindowPtr pWin, Atom property, Atom type, int format,
int sizeInBytes;
int totalSize;
pointer data;
int copySize;
sizeInBytes = format>>3;
totalSize = len * sizeInBytes;
copySize = nxagentOption(CopyBufferSize);
if (copySize != COPY_UNLIMITED && property == clientCutProperty)
{
if (totalSize > copySize)
{
totalSize = copySize;
totalSize = totalSize - (totalSize % sizeInBytes);
len = totalSize / sizeInBytes;
}
}
/* first see if property already exists */
pProp = wUserProps (pWin);
...
...
@@ -545,6 +570,11 @@ NullPropertyReply(
int
ProcGetProperty(ClientPtr client)
{
#ifdef NXAGENT_SERVER
nxagentWMStateRec wmState;
nxagentWMStateRec *wmsP = &wmState;
#endif
PropertyPtr pProp, prevProp;
unsigned long n, len, ind;
WindowPtr pWin;
...
...
@@ -552,6 +582,7 @@ ProcGetProperty(ClientPtr client)
REQUEST(xGetPropertyReq);
REQUEST_SIZE_MATCH(xGetPropertyReq);
if (stuff->delete)
UpdateCurrentTime();
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
...
...
@@ -587,6 +618,59 @@ ProcGetProperty(ClientPtr client)
reply.type = X_Reply;
reply.sequenceNumber = client->sequence;
#ifdef NXAGENT_SERVER
/*
* Creating a reply for WM_STATE property if it doesn't exist.
* This is intended to allow drag & drop work in JAva 1.6 when
* the agent is connected to NXWin in multiwindow mode.
*/
if (nxagentOption(Rootless) &&
nxagentWindowTopLevel(pWin) &&
(!pProp) &&
strcmp(NameForAtom(stuff->property), "WM_STATE") == 0)
{
wmState.state = 1;
wmState.icon = None;
if (ChangeWindowProperty(pWin, stuff->property, stuff->property, 32, 0, 2, &wmState, 1) == Success)
{
nxagentExportProperty(pWin, stuff->property, stuff->property, 32, 0, 2, &wmState);
}
n = 8;
ind = stuff->longOffset << 2;
if (n < ind)
{
client->errorValue = stuff->longOffset;
return BadValue;
}
len = min(n - ind, 4 * stuff->longLength);
reply.bytesAfter = n - (ind + len);
reply.length = (len + 3) >> 2;
reply.format = 32;
reply.nItems = len / 4;
reply.propertyType = stuff->property;
WriteReplyToClient(client, sizeof(xGenericReply), &reply);
if (len)
{
client->pSwapReplyFunc = (ReplySwapPtr)CopySwap32Write;
WriteSwappedDataToClient(client, len, (char *)wmsP + ind);
}
return(client->noClientException);
}
#endif
if (!pProp)
return NullPropertyReply(client, None, 0, &reply);
...
...
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