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
c0f67abb
Unverified
Commit
c0f67abb
authored
May 24, 2018
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/cleanup_window_hints' into 3.6.x
Attributes GH PR #689:
https://github.com/ArcticaProject/nx-libs/pull/689
parents
985bed95
9138a9e3
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
177 additions
and
149 deletions
+177
-149
Events.c
nx-X11/programs/Xserver/hw/nxagent/Events.c
+52
-36
Events.h
nx-X11/programs/Xserver/hw/nxagent/Events.h
+0
-0
Extensions.c
nx-X11/programs/Xserver/hw/nxagent/Extensions.c
+1
-1
Reconnect.c
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+1
-1
Screen.c
nx-X11/programs/Xserver/hw/nxagent/Screen.c
+116
-105
Screen.h
nx-X11/programs/Xserver/hw/nxagent/Screen.h
+4
-2
Window.c
nx-X11/programs/Xserver/hw/nxagent/Window.c
+3
-4
No files found.
nx-X11/programs/Xserver/hw/nxagent/Events.c
View file @
c0f67abb
...
...
@@ -575,8 +575,6 @@ void nxagentInternalWindowsTree(WindowPtr pWin, int indent)
void
nxagentSwitchResizeMode
(
ScreenPtr
pScreen
)
{
XSizeHints
sizeHints
;
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentSwitchResizeMode called.
\n
"
);
#endif
...
...
@@ -585,8 +583,6 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentChangeOption
(
DesktopResize
,
!
desktopResize
);
sizeHints
.
flags
=
PMaxSize
;
if
(
nxagentOption
(
DesktopResize
)
==
0
)
{
fprintf
(
stderr
,
"Info: Disabled desktop resize mode in agent.
\n
"
);
...
...
@@ -595,11 +591,9 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
if
(
nxagentOption
(
Fullscreen
)
==
0
)
{
sizeHints
.
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
.
max_height
=
nxagentOption
(
RootHeight
);
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
sizeHints
);
nxagentSetWMNormalHintsMaxsize
(
pScreen
,
nxagentOption
(
RootWidth
),
nxagentOption
(
RootHeight
));
}
}
else
...
...
@@ -608,32 +602,25 @@ void nxagentSwitchResizeMode(ScreenPtr pScreen)
nxagentLaunchDialog
(
DIALOG_ENABLE_DESKTOP_RESIZE_MODE
);
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
Width
),
nxagentOption
(
Height
),
0
,
0
);
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
Width
),
nxagentOption
(
Height
));
if
(
nxagentOption
(
ClientOs
)
==
ClientOsWinnt
)
{
NXSetExposeParameters
(
nxagentDisplay
,
0
,
0
,
0
);
}
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
sizeHints
);
nxagentSetWMNormalHintsMaxsize
(
pScreen
,
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)),
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)));
}
}
void
nxagentShadowSwitchResizeMode
(
ScreenPtr
pScreen
)
{
XSizeHints
sizeHints
;
int
desktopResize
=
nxagentOption
(
DesktopResize
);
nxagentChangeOption
(
DesktopResize
,
!
desktopResize
);
sizeHints
.
flags
=
PMaxSize
;
if
(
nxagentOption
(
DesktopResize
)
==
0
)
{
nxagentShadowSetRatio
(
1
.
0
,
1
.
0
);
...
...
@@ -641,8 +628,9 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
nxagentShadowCreateMainWindow
(
screenInfo
.
screens
[
DefaultScreen
(
nxagentDisplay
)],
screenInfo
.
screens
[
0
]
->
root
,
screenInfo
.
screens
[
0
]
->
root
->
drawable
.
width
,
screenInfo
.
screens
[
0
]
->
root
->
drawable
.
height
);
sizeHints
.
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
.
max_height
=
nxagentOption
(
RootHeight
);
nxagentSetWMNormalHintsMaxsize
(
pScreen
,
nxagentOption
(
RootWidth
),
nxagentOption
(
RootHeight
));
fprintf
(
stderr
,
"Info: Disabled resize mode in shadow agent.
\n
"
);
}
...
...
@@ -657,14 +645,12 @@ void nxagentShadowSwitchResizeMode(ScreenPtr pScreen)
screenInfo
.
screens
[
0
]
->
root
,
screenInfo
.
screens
[
0
]
->
root
->
drawable
.
width
,
screenInfo
.
screens
[
0
]
->
root
->
drawable
.
height
);
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
nxagentSetWMNormalHintsMaxsize
(
pScreen
,
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)),
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)));
fprintf
(
stderr
,
"Info: Enabled resize mode in shadow agent.
\n
"
);
}
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
sizeHints
);
}
static
void
nxagentSwitchDeferMode
(
void
)
...
...
@@ -3248,6 +3234,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
pClient
=
wClient
(
pWinWindow
);
/* FIXME: override_redirect is always FALSE here */
if
(
X
->
xconfigure
.
send_event
||
!
nxagentWMIsRunning
||
X
->
xconfigure
.
override_redirect
)
{
...
...
@@ -3354,13 +3341,26 @@ int nxagentHandleConfigureNotify(XEvent* X)
{
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
(
Width
)
!=
X
->
xconfigure
.
width
||
nxagentOption
(
Height
)
!=
X
->
xconfigure
.
height
||
nxagentOption
(
X
)
!=
X
->
xconfigure
.
x
||
nxagentOption
(
Y
)
!=
X
->
xconfigure
.
y
)
(
updatePos
&&
(
nxagentOption
(
X
)
!=
newX
||
nxagentOption
(
Y
)
!=
newY
))
)
{
#ifdef DEBUG
int
count
=
0
;
#endif
Bool
newEvents
=
False
;
doRandR
=
True
;
...
...
@@ -3377,8 +3377,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
nxagentWaitEvents
(
nxagentDisplay
,
&
timeout
);
/*
* This should also flush
* the NX link for us.
* This should also flush the NX link for us.
*/
XSync
(
nxagentDisplay
,
0
);
...
...
@@ -3386,17 +3385,34 @@ int nxagentHandleConfigureNotify(XEvent* X)
while
(
XCheckTypedWindowEvent
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
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
;
}
}
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
);
nxagentChangeOption
(
Y
,
X
->
xconfigure
.
y
);
#ifdef DEBUG
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
&&
...
...
@@ -3464,7 +3480,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
#endif
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
Width
),
nxagentOption
(
Height
)
,
0
,
0
);
nxagentOption
(
Height
));
}
}
...
...
@@ -3484,7 +3500,7 @@ int nxagentHandleConfigureNotify(XEvent* X)
nxagentChangeOption
(
RootHeight
,
X
->
xconfigure
.
height
);
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
Width
),
nxagentOption
(
Height
)
,
0
,
0
);
nxagentOption
(
Height
));
return
1
;
}
...
...
nx-X11/programs/Xserver/hw/nxagent/Events.h
View file @
c0f67abb
nx-X11/programs/Xserver/hw/nxagent/Extensions.c
View file @
c0f67abb
...
...
@@ -470,7 +470,7 @@ int nxagentRandRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
nxagentOption
(
Fullscreen
)
==
0
&&
nxagentOption
(
AllScreens
)
==
0
)
{
nxagentRandRSetWindowsSize
(
width
,
height
);
nxagentSetWMNormalHints
(
pScreen
->
myNum
);
nxagentSetWMNormalHints
(
pScreen
->
myNum
,
nxagentOption
(
Width
),
nxagentOption
(
Height
)
);
}
nxagentMoveViewport
(
pScreen
,
0
,
0
);
...
...
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
View file @
c0f67abb
...
...
@@ -626,7 +626,7 @@ Bool nxagentReconnectSession(void)
if
(
nxagentResizeDesktopAtStartup
||
nxagentOption
(
Rootless
)
==
True
||
nxagentOption
(
Xinerama
)
==
True
)
{
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
RootWidth
),
nxagentOption
(
RootHeight
)
,
0
,
0
);
nxagentOption
(
RootHeight
));
nxagentResizeDesktopAtStartup
=
False
;
}
...
...
nx-X11/programs/Xserver/hw/nxagent/Screen.c
View file @
c0f67abb
...
...
@@ -376,8 +376,8 @@ Window nxagentCreateIconWindow(void)
unsigned
long
valuemask
;
char
*
window_name
;
XTextProperty
windowName
;
XSizeHints
sizeHints
;
XWMHints
wmHints
;
XSizeHints
*
sizeHints
;
XWMHints
*
wmHints
;
Window
w
;
Mask
mask
;
...
...
@@ -416,26 +416,40 @@ Window nxagentCreateIconWindow(void)
window_name
=
nxagentWindowName
;
XStringListToTextProperty
(
&
window_name
,
1
,
&
windowName
);
sizeHints
.
flags
=
PMinSize
|
PMaxSize
;
sizeHints
.
min_width
=
sizeHints
.
max_width
=
1
;
sizeHints
.
min_height
=
sizeHints
.
max_height
=
1
;
wmHints
.
flags
=
IconPixmapHint
|
IconMaskHint
;
wmHints
.
initial_state
=
IconicState
;
wmHints
.
icon_pixmap
=
nxagentIconPixmap
;
if
((
sizeHints
=
XAllocSizeHints
()))
{
sizeHints
->
flags
=
PMinSize
|
PMaxSize
;
sizeHints
->
min_width
=
sizeHints
->
max_width
=
1
;
sizeHints
->
min_height
=
sizeHints
->
max_height
=
1
;
}
if
((
wmHints
=
XAllocWMHints
()))
{
wmHints
->
flags
=
IconPixmapHint
|
IconMaskHint
;
wmHints
->
initial_state
=
IconicState
;
wmHints
->
icon_pixmap
=
nxagentIconPixmap
;
if
(
useXpmIcon
)
{
wmHints
.
icon_mask
=
nxagentIconShape
;
wmHints
.
flags
=
IconPixmapHint
|
IconMaskHint
;
wmHints
->
icon_mask
=
nxagentIconShape
;
wmHints
->
flags
=
IconPixmapHint
|
IconMaskHint
;
}
else
{
wmHints
.
flags
=
StateHint
|
IconPixmapHint
;
wmHints
->
flags
=
StateHint
|
IconPixmapHint
;
}
}
XSetWMProperties
(
nxagentDisplay
,
w
,
&
windowName
,
&
windowName
,
NULL
,
0
,
&
sizeHints
,
&
wmHints
,
NULL
);
NULL
,
0
,
sizeHints
,
wmHints
,
NULL
);
if
(
sizeHints
)
XFree
(
sizeHints
);
if
(
wmHints
)
XFree
(
wmHints
);
/*
* Enable events from the icon window.
...
...
@@ -839,8 +853,8 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
unsigned
long
valuemask
;
XSetWindowAttributes
attributes
;
XWindowAttributes
gattributes
;
XSizeHints
sizeHints
;
XWMHints
wmHints
;
XSizeHints
*
sizeHints
;
XWMHints
*
wmHints
;
Mask
mask
;
Bool
resetAgentPosition
=
False
;
...
...
@@ -1798,29 +1812,24 @@ N/A
* we need it to properly display all window parameters by some WMs
* (for example on Maemo)
*/
if
(
nxagentX2go
)
{
#ifdef TEST
fprintf
(
stderr
,
"nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window with id [%ld].
\n
"
,
(
long
int
)
nxagentDefaultWindows
[
pScreen
->
myNum
]);
#endif
XClassHint
hint
;
if
(
nxagentX2go
)
{
hint
.
res_name
=
strdup
(
"X2GoAgent"
);
hint
.
res_class
=
strdup
(
"X2GoAgent"
);
XSetClassHint
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
hint
);
free
(
hint
.
res_name
);
free
(
hint
.
res_class
);
}
else
{
#ifdef TEST
fprintf
(
stderr
,
"nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window with id [%ld].
\n
"
,
(
long
int
)
nxagentDefaultWindows
[
pScreen
->
myNum
]);
#endif
XClassHint
hint
;
hint
.
res_name
=
strdup
(
"NXAgent"
);
hint
.
res_class
=
strdup
(
"NXAgent"
);
}
XSetClassHint
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
hint
);
free
(
hint
.
res_name
);
free
(
hint
.
res_class
);
...
...
@@ -1866,51 +1875,61 @@ N/A
XSelectInput
(
nxagentDisplay
,
nxagentFullscreenWindow
,
mask
);
}
sizeHints
.
flags
=
PPosition
|
PMinSize
|
PMaxSize
;
sizeHints
.
x
=
nxagentOption
(
X
)
+
POSITION_OFFSET
;
sizeHints
.
y
=
nxagentOption
(
Y
)
+
POSITION_OFFSET
;
sizeHints
.
min_width
=
MIN_NXAGENT_WIDTH
;
sizeHints
.
min_height
=
MIN_NXAGENT_HEIGHT
;
if
((
sizeHints
=
XAllocSizeHints
()))
{
sizeHints
->
flags
=
PPosition
|
PMinSize
|
PMaxSize
;
sizeHints
->
x
=
nxagentOption
(
X
)
+
POSITION_OFFSET
;
sizeHints
->
y
=
nxagentOption
(
Y
)
+
POSITION_OFFSET
;
sizeHints
->
min_width
=
MIN_NXAGENT_WIDTH
;
sizeHints
->
min_height
=
MIN_NXAGENT_HEIGHT
;
sizeHints
.
width
=
nxagentOption
(
RootWidth
);
sizeHints
.
height
=
nxagentOption
(
RootHeight
);
sizeHints
->
width
=
nxagentOption
(
RootWidth
);
sizeHints
->
height
=
nxagentOption
(
RootHeight
);
if
(
nxagentOption
(
DesktopResize
)
==
1
||
nxagentOption
(
Fullscreen
)
==
1
)
{
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
->
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
->
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
}
else
{
sizeHints
.
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
.
max_height
=
nxagentOption
(
RootHeight
);
sizeHints
->
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
->
max_height
=
nxagentOption
(
RootHeight
);
}
if
(
nxagentUserGeometry
.
flag
&
XValue
||
nxagentUserGeometry
.
flag
&
YValue
)
sizeHints
.
flags
|=
USPosition
;
sizeHints
->
flags
|=
USPosition
;
if
(
nxagentUserGeometry
.
flag
&
WidthValue
||
nxagentUserGeometry
.
flag
&
HeightValue
)
sizeHints
.
flags
|=
USSize
;
sizeHints
->
flags
|=
USSize
;
}
/* FIXME: deprecated, replaced by XSetWmProperties() */
XSetStandardProperties
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
nxagentWindowName
,
nxagentWindowName
,
nxagentIconPixmap
,
argv
,
argc
,
&
sizeHints
);
argv
,
argc
,
sizeHints
);
wmHints
.
icon_pixmap
=
nxagentIconPixmap
;
if
(
sizeHints
)
XFree
(
sizeHints
);
if
((
wmHints
=
XAllocWMHints
()))
{
wmHints
->
icon_pixmap
=
nxagentIconPixmap
;
if
(
useXpmIcon
)
{
wmHints
.
icon_mask
=
nxagentIconShape
;
wmHints
.
flags
=
IconPixmapHint
|
IconMaskHint
;
wmHints
->
icon_mask
=
nxagentIconShape
;
wmHints
->
flags
=
IconPixmapHint
|
IconMaskHint
;
}
else
{
wmHints
.
flags
=
IconPixmapHint
;
wmHints
->
flags
=
IconPixmapHint
;
}
XSetWMHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
wmHints
);
XSetWMHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
wmHints
);
XFree
(
wmHints
);
}
/*
* Clear the window but let it unmapped. We'll map it
...
...
@@ -1976,6 +1995,8 @@ N/A
deleteWMatom
);
#endif
/* FIXME: This doing the same thing in both cases. The
comments do not seem accurate (anymore?) */
if
(
nxagentOption
(
Rootless
)
==
False
)
{
/*
...
...
@@ -2281,7 +2302,6 @@ Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height,
int
mmWidth
,
int
mmHeight
)
{
BoxRec
box
;
XSizeHints
sizeHints
;
PixmapPtr
pPixmap
;
char
*
fbBits
;
...
...
@@ -2407,37 +2427,7 @@ FIXME: We should try to restore the previously
if
((
nxagentOption
(
Fullscreen
)
==
0
&&
nxagentOption
(
AllScreens
)
==
0
))
{
sizeHints
.
flags
=
PPosition
|
PMinSize
|
PMaxSize
;
sizeHints
.
x
=
nxagentOption
(
X
);
sizeHints
.
y
=
nxagentOption
(
Y
);
sizeHints
.
min_width
=
MIN_NXAGENT_WIDTH
;
sizeHints
.
min_height
=
MIN_NXAGENT_HEIGHT
;
sizeHints
.
width
=
width
;
sizeHints
.
height
=
height
;
if
(
nxagentOption
(
DesktopResize
)
==
1
)
{
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
}
else
{
sizeHints
.
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
.
max_height
=
nxagentOption
(
RootHeight
);
}
if
(
nxagentUserGeometry
.
flag
&
XValue
||
nxagentUserGeometry
.
flag
&
YValue
)
{
sizeHints
.
flags
|=
USPosition
;
}
if
(
nxagentUserGeometry
.
flag
&
WidthValue
||
nxagentUserGeometry
.
flag
&
HeightValue
)
{
sizeHints
.
flags
|=
USSize
;
}
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
sizeHints
);
nxagentSetWMNormalHints
(
pScreen
->
myNum
,
width
,
height
);
XResizeWindow
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
width
,
height
);
...
...
@@ -2476,7 +2466,7 @@ FIXME: We should try to restore the previously
nxagentMoveViewport
(
pScreen
,
0
,
0
);
/*
* Update
void *
bounds.
* Update
pointer
bounds.
*/
ScreenRestructured
(
pScreen
);
...
...
@@ -2838,7 +2828,7 @@ int nxagentShadowInit(ScreenPtr pScreen, WindowPtr pWin)
{
nxagentShadowSetWindowsSize
();
nxagentSetWMNormalHints
(
0
);
nxagentSetWMNormalHints
(
0
,
nxagentOption
(
Width
),
nxagentOption
(
Height
)
);
}
XMapWindow
(
nxagentDisplay
,
nxagentDefaultWindows
[
0
]);
...
...
@@ -3839,13 +3829,13 @@ void nxagentAdjustCustomMode(ScreenPtr pScreen)
RRScreenSizeNotify
(
pScreen
);
}
int
nxagentChangeScreenConfig
(
int
screen
,
int
width
,
int
height
,
int
mmWidth
,
int
mmHeight
)
int
nxagentChangeScreenConfig
(
int
screen
,
int
width
,
int
height
)
{
ScreenPtr
pScreen
;
int
r
;
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentChangeScreenConfig: called for screen [%d], width [%d] height [%d]
mmWidth [%d] mmHeight [%d]
\n
"
,
screen
,
width
,
height
,
mmWidth
,
mmH
eight
);
fprintf
(
stderr
,
"nxagentChangeScreenConfig: called for screen [%d], width [%d] height [%d]
\n
"
,
screen
,
width
,
h
eight
);
#endif
#ifdef TEST
...
...
@@ -3890,10 +3880,10 @@ int nxagentChangeScreenConfig(int screen, int width, int height, int mmWidth, in
pScreen
=
screenInfo
.
screens
[
screen
]
->
root
->
drawable
.
pScreen
;
#ifdef TEST
fprintf
(
stderr
,
"nxagentChangeScreenConfig: Changing config to %d x %d
(%dmm x %dmm).
\n
"
,
width
,
height
,
mmWidth
,
mmH
eight
);
fprintf
(
stderr
,
"nxagentChangeScreenConfig: Changing config to %d x %d
\n
"
,
width
,
h
eight
);
#endif
r
=
nxagentResizeScreen
(
pScreen
,
width
,
height
,
mmWidth
,
mmHeight
);
r
=
nxagentResizeScreen
(
pScreen
,
width
,
height
,
0
,
0
);
if
(
r
!=
0
)
{
...
...
@@ -4557,51 +4547,75 @@ void nxagentRestoreAreas(PixmapPtr pPixmap, RegionPtr prgnRestore, int xorg,
return
;
}
void
nxagentSetWMNormalHints
(
int
screen
)
void
nxagentSetWMNormalHints
(
int
screen
,
int
width
,
int
height
)
{
XSizeHints
sizeHints
;
XSizeHints
*
sizeHints
=
XAllocSizeHints
();
if
(
!
sizeHints
)
return
;
/*
* Change agent window size and size hints.
*/
sizeHints
.
flags
=
PPosition
|
PMinSize
|
PMaxSize
;
sizeHints
.
x
=
nxagentOption
(
X
);
sizeHints
.
y
=
nxagentOption
(
Y
);
sizeHints
->
flags
=
PPosition
|
PMinSize
|
PMaxSize
;
sizeHints
->
x
=
nxagentOption
(
X
);
sizeHints
->
y
=
nxagentOption
(
Y
);
sizeHints
.
min_width
=
MIN_NXAGENT_WIDTH
;
sizeHints
.
min_height
=
MIN_NXAGENT_HEIGHT
;
sizeHints
->
min_width
=
MIN_NXAGENT_WIDTH
;
sizeHints
->
min_height
=
MIN_NXAGENT_HEIGHT
;
sizeHints
.
width
=
nxagentOption
(
Width
)
;
sizeHints
.
height
=
nxagentOption
(
Height
)
;
sizeHints
->
width
=
width
;
sizeHints
->
height
=
height
;
if
(
nxagentOption
(
DesktopResize
)
==
1
)
{
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
->
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
->
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
}
else
{
sizeHints
.
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
.
max_height
=
nxagentOption
(
RootHeight
);
sizeHints
->
max_width
=
nxagentOption
(
RootWidth
);
sizeHints
->
max_height
=
nxagentOption
(
RootHeight
);
}
if
(
nxagentUserGeometry
.
flag
&
XValue
||
nxagentUserGeometry
.
flag
&
YValue
)
{
sizeHints
.
flags
|=
USPosition
;
sizeHints
->
flags
|=
USPosition
;
}
if
(
nxagentUserGeometry
.
flag
&
WidthValue
||
nxagentUserGeometry
.
flag
&
HeightValue
)
{
sizeHints
.
flags
|=
USSize
;
sizeHints
->
flags
|=
USSize
;
}
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
screen
],
&
sizeHints
);
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
screen
],
sizeHints
);
XFree
(
sizeHints
);
}
/*
set maxsize in WMNormalSizeHints
Note: this will _drop_ all existing hints since XSetWMNormalHints()
replaces any existing property
*/
void
nxagentSetWMNormalHintsMaxsize
(
ScreenPtr
pScreen
,
int
maxwidth
,
int
maxheight
)
{
XSizeHints
*
sizeHints
;
if
((
sizeHints
=
XAllocSizeHints
()))
{
sizeHints
->
flags
=
PMaxSize
;
sizeHints
->
max_width
=
maxwidth
;
sizeHints
->
max_height
=
maxheight
;
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
sizeHints
);
XFree
(
sizeHints
);
}
}
void
nxagentShadowAdaptToRatio
(
void
)
{
XSizeHints
sizeHints
;
ScreenPtr
pScreen
;
RegionRec
region
;
BoxRec
box
;
...
...
@@ -4613,12 +4627,9 @@ void nxagentShadowAdaptToRatio(void)
nxagentShadowCreateMainWindow
(
pScreen
,
screenInfo
.
screens
[
0
]
->
root
,
nxagentShadowWidth
,
nxagentShadowHeight
);
sizeHints
.
max_width
=
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
max_height
=
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
));
sizeHints
.
flags
=
PMaxSize
;
XSetWMNormalHints
(
nxagentDisplay
,
nxagentDefaultWindows
[
pScreen
->
myNum
],
&
sizeHints
);
nxagentSetWMNormalHintsMaxsize
(
pScreen
,
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)),
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)));
box
.
x1
=
0
;
box
.
y1
=
0
;
...
...
nx-X11/programs/Xserver/hw/nxagent/Screen.h
View file @
c0f67abb
...
...
@@ -110,7 +110,7 @@ Bool nxagentMagicPixelZone(int x, int y);
Bool
nxagentResizeScreen
(
ScreenPtr
pScreen
,
int
width
,
int
height
,
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
);
...
...
@@ -130,7 +130,9 @@ int nxagentShadowPoll(PixmapPtr, GCPtr, unsigned char, int, int, char *, int *,
void
nxagentShadowSetWindowsSize
(
void
);
void
nxagentSetWMNormalHints
(
int
);
void
nxagentSetWMNormalHints
(
int
,
int
,
int
);
void
nxagentSetWMNormalHintsMaxsize
(
ScreenPtr
,
int
,
int
);
void
nxagentShadowSetRatio
(
float
,
float
);
...
...
nx-X11/programs/Xserver/hw/nxagent/Window.c
View file @
c0f67abb
...
...
@@ -869,8 +869,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
}
/*
* This should also flush
* the NX link for us.
* This should also flush the NX link for us.
*/
XSync
(
nxagentDisplay
,
0
);
...
...
@@ -953,7 +952,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if
(
nxagentOption
(
Shadow
)
==
0
)
{
nxagentChangeScreenConfig
(
0
,
WidthOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)),
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
))
,
0
,
0
);
HeightOfScreen
(
DefaultScreenOfDisplay
(
nxagentDisplay
)));
}
else
{
...
...
@@ -1007,7 +1006,7 @@ void nxagentSwitchAllScreens(ScreenPtr pScreen, Bool switchOn)
if
(
nxagentOption
(
Shadow
)
==
0
)
{
nxagentChangeScreenConfig
(
0
,
nxagentOption
(
RootWidth
),
nxagentOption
(
RootHeight
)
,
0
,
0
);
nxagentOption
(
RootHeight
));
}
}
...
...
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