Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
0f03f264
Commit
0f03f264
authored
Oct 14, 2013
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Add a helper function to return the primary monitor rectangle.
parent
9f1f29cc
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
49 additions
and
27 deletions
+49
-27
desktop.c
dlls/winex11.drv/desktop.c
+19
-7
init.c
dlls/winex11.drv/init.c
+16
-8
mouse.c
dlls/winex11.drv/mouse.c
+1
-1
settings.c
dlls/winex11.drv/settings.c
+2
-1
x11drv.h
dlls/winex11.drv/x11drv.h
+4
-4
x11drv_main.c
dlls/winex11.drv/x11drv_main.c
+0
-2
xinerama.c
dlls/winex11.drv/xinerama.c
+7
-4
No files found.
dlls/winex11.drv/desktop.c
View file @
0f03f264
...
...
@@ -47,7 +47,11 @@ static const unsigned int heights[] = {200, 300, 384, 480, 600, 768, 864, 1024
/* create the mode structures */
static
void
make_modes
(
void
)
{
RECT
primary_rect
=
get_primary_monitor_rect
();
unsigned
int
i
;
unsigned
int
screen_width
=
primary_rect
.
right
-
primary_rect
.
left
;
unsigned
int
screen_height
=
primary_rect
.
bottom
-
primary_rect
.
top
;
/* original specified desktop size */
X11DRV_Settings_AddOneMode
(
screen_width
,
screen_height
,
0
,
60
);
for
(
i
=
0
;
i
<
NUM_DESKTOP_MODES
;
i
++
)
...
...
@@ -73,10 +77,12 @@ static int X11DRV_desktop_GetCurrentMode(void)
{
unsigned
int
i
;
DWORD
dwBpp
=
screen_bpp
;
RECT
primary_rect
=
get_primary_monitor_rect
();
for
(
i
=
0
;
i
<
dd_mode_count
;
i
++
)
{
if
(
(
screen_width
==
dd_modes
[
i
].
width
)
&&
(
screen_height
==
dd_modes
[
i
].
height
)
&&
if
(
(
primary_rect
.
right
-
primary_rect
.
left
==
dd_modes
[
i
].
width
)
&&
(
primary_rect
.
bottom
-
primary_rect
.
top
==
dd_modes
[
i
].
height
)
&&
(
dwBpp
==
dd_modes
[
i
].
bpp
))
return
i
;
}
...
...
@@ -108,10 +114,12 @@ static LONG X11DRV_desktop_SetCurrentMode(int mode)
*/
void
X11DRV_init_desktop
(
Window
win
,
unsigned
int
width
,
unsigned
int
height
)
{
RECT
primary_rect
=
get_primary_monitor_rect
();
root_window
=
win
;
managed_mode
=
0
;
/* no managed windows in desktop mode */
max_width
=
screen_width
;
max_height
=
screen_height
;
max_width
=
primary_rect
.
right
-
primary_rect
.
left
;
max_height
=
primary_rect
.
bottom
-
primary_rect
.
top
;
xinerama_init
(
width
,
height
);
/* initialize the available resolutions */
...
...
@@ -135,6 +143,7 @@ BOOL CDECL X11DRV_create_desktop( UINT width, UINT height )
XSetWindowAttributes
win_attr
;
Window
win
;
Display
*
display
=
thread_init_display
();
RECT
rect
;
TRACE
(
"%u x %u
\n
"
,
width
,
height
);
...
...
@@ -154,7 +163,8 @@ BOOL CDECL X11DRV_create_desktop( UINT width, UINT height )
CWEventMask
|
CWCursor
|
CWColormap
,
&
win_attr
);
if
(
!
win
)
return
FALSE
;
if
(
width
==
screen_width
&&
height
==
screen_height
)
SetRect
(
&
rect
,
0
,
0
,
width
,
height
);
if
(
is_window_rect_fullscreen
(
&
rect
))
{
TRACE
(
"setting desktop to fullscreen
\n
"
);
XChangeProperty
(
display
,
win
,
x11drv_atom
(
_NET_WM_STATE
),
XA_ATOM
,
32
,
...
...
@@ -202,7 +212,9 @@ static BOOL CALLBACK update_windows_on_desktop_resize( HWND hwnd, LPARAM lparam
BOOL
is_desktop_fullscreen
(
void
)
{
return
screen_width
==
max_width
&&
screen_height
==
max_height
;
RECT
primary_rect
=
get_primary_monitor_rect
();
return
(
primary_rect
.
right
-
primary_rect
.
left
==
max_width
&&
primary_rect
.
bottom
-
primary_rect
.
top
==
max_height
);
}
static
void
update_desktop_fullscreen
(
unsigned
int
width
,
unsigned
int
height
)
...
...
@@ -246,7 +258,7 @@ void X11DRV_resize_desktop( unsigned int width, unsigned int height )
HWND
hwnd
=
GetDesktopWindow
();
struct
desktop_resize_data
resize_data
;
SetRect
(
&
resize_data
.
old_screen_rect
,
0
,
0
,
screen_width
,
screen_height
);
resize_data
.
old_screen_rect
=
get_primary_monitor_rect
(
);
resize_data
.
old_virtual_rect
=
get_virtual_screen_rect
();
xinerama_init
(
width
,
height
);
...
...
dlls/winex11.drv/init.c
View file @
0f03f264
...
...
@@ -36,8 +36,6 @@ Display *gdi_display; /* display to use for all GDI functions */
/* a few dynamic device caps */
static
int
log_pixels_x
;
/* pixels per logical inch in x direction */
static
int
log_pixels_y
;
/* pixels per logical inch in y direction */
static
int
horz_size
;
/* horz. size of screen in millimeters */
static
int
vert_size
;
/* vert. size of screen in millimeters */
static
int
palette_size
;
static
Pixmap
stock_bitmap_pixmap
;
/* phys bitmap for the default stock bitmap */
...
...
@@ -94,8 +92,6 @@ static BOOL WINAPI device_init( INIT_ONCE *once, void *param, void **context )
/* Initialize device caps */
log_pixels_x
=
log_pixels_y
=
get_dpi
();
horz_size
=
MulDiv
(
screen_width
,
254
,
log_pixels_x
*
10
);
vert_size
=
MulDiv
(
screen_height
,
254
,
log_pixels_y
*
10
);
return
TRUE
;
}
...
...
@@ -204,13 +200,25 @@ static INT X11DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
case
TECHNOLOGY
:
return
DT_RASDISPLAY
;
case
HORZSIZE
:
return
horz_size
;
{
RECT
primary_rect
=
get_primary_monitor_rect
();
return
MulDiv
(
primary_rect
.
right
-
primary_rect
.
left
,
254
,
log_pixels_x
*
10
);
}
case
VERTSIZE
:
return
vert_size
;
{
RECT
primary_rect
=
get_primary_monitor_rect
();
return
MulDiv
(
primary_rect
.
bottom
-
primary_rect
.
top
,
254
,
log_pixels_y
*
10
);
}
case
HORZRES
:
return
screen_width
;
{
RECT
primary_rect
=
get_primary_monitor_rect
();
return
primary_rect
.
right
-
primary_rect
.
left
;
}
case
VERTRES
:
return
screen_height
;
{
RECT
primary_rect
=
get_primary_monitor_rect
();
return
primary_rect
.
bottom
-
primary_rect
.
top
;
}
case
DESKTOPHORZRES
:
{
RECT
virtual_rect
=
get_virtual_screen_rect
();
...
...
dlls/winex11.drv/mouse.c
View file @
0f03f264
...
...
@@ -509,7 +509,7 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset )
if
(
!
(
thread_data
=
x11drv_thread_data
()))
return
FALSE
;
if
(
GetTickCount
()
-
thread_data
->
clip_reset
<
1000
)
return
FALSE
;
if
(
!
reset
&&
clipping_cursor
&&
thread_data
->
clip_hwnd
)
return
FALSE
;
/* already clipping */
SetRect
(
&
rect
,
0
,
0
,
screen_width
,
screen_height
);
rect
=
get_primary_monitor_rect
(
);
if
(
!
grab_fullscreen
)
{
RECT
virtual_rect
=
get_virtual_screen_rect
();
...
...
dlls/winex11.drv/settings.c
View file @
0f03f264
...
...
@@ -146,11 +146,12 @@ static LONG X11DRV_nores_SetCurrentMode(int mode)
/* default handler only gets the current X desktop resolution */
void
X11DRV_Settings_Init
(
void
)
{
RECT
primary
=
get_primary_monitor_rect
();
X11DRV_Settings_SetHandlers
(
"NoRes"
,
X11DRV_nores_GetCurrentMode
,
X11DRV_nores_SetCurrentMode
,
1
,
0
);
X11DRV_Settings_AddOneMode
(
screen_width
,
screen_height
,
0
,
60
);
X11DRV_Settings_AddOneMode
(
primary
.
right
-
primary
.
left
,
primary
.
bottom
-
primary
.
top
,
0
,
60
);
}
static
BOOL
get_display_device_reg_key
(
char
*
key
,
unsigned
len
)
...
...
dlls/winex11.drv/x11drv.h
View file @
0f03f264
...
...
@@ -364,8 +364,6 @@ extern Colormap default_colormap DECLSPEC_HIDDEN;
extern
XPixmapFormatValues
**
pixmap_formats
DECLSPEC_HIDDEN
;
extern
Window
root_window
DECLSPEC_HIDDEN
;
extern
int
clipping_cursor
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_width
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_height
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_bpp
DECLSPEC_HIDDEN
;
extern
int
use_xkb
DECLSPEC_HIDDEN
;
extern
int
usexrandr
DECLSPEC_HIDDEN
;
...
...
@@ -628,6 +626,7 @@ extern void X11DRV_X_to_window_rect( struct x11drv_win_data *data, RECT *rect )
extern
POINT
virtual_screen_to_root
(
INT
x
,
INT
y
)
DECLSPEC_HIDDEN
;
extern
POINT
root_to_virtual_screen
(
INT
x
,
INT
y
)
DECLSPEC_HIDDEN
;
extern
RECT
get_virtual_screen_rect
(
void
)
DECLSPEC_HIDDEN
;
extern
RECT
get_primary_monitor_rect
(
void
)
DECLSPEC_HIDDEN
;
extern
void
xinerama_init
(
unsigned
int
width
,
unsigned
int
height
)
DECLSPEC_HIDDEN
;
struct
x11drv_mode_info
...
...
@@ -675,8 +674,9 @@ static inline BOOL is_window_rect_mapped( const RECT *rect )
static
inline
BOOL
is_window_rect_fullscreen
(
const
RECT
*
rect
)
{
return
(
rect
->
left
<=
0
&&
rect
->
right
>=
screen_width
&&
rect
->
top
<=
0
&&
rect
->
bottom
>=
screen_height
);
RECT
primary_rect
=
get_primary_monitor_rect
();
return
(
rect
->
left
<=
primary_rect
.
left
&&
rect
->
right
>=
primary_rect
.
right
&&
rect
->
top
<=
primary_rect
.
top
&&
rect
->
bottom
>=
primary_rect
.
bottom
);
}
#endif
/* __WINE_X11DRV_H */
dlls/winex11.drv/x11drv_main.c
View file @
0f03f264
...
...
@@ -60,8 +60,6 @@ XVisualInfo default_visual = { 0 };
XVisualInfo
argb_visual
=
{
0
};
Colormap
default_colormap
=
None
;
XPixmapFormatValues
**
pixmap_formats
;
unsigned
int
screen_width
;
unsigned
int
screen_height
;
unsigned
int
screen_bpp
;
Window
root_window
;
int
usexvidmode
=
1
;
...
...
dlls/winex11.drv/xinerama.c
View file @
0f03f264
...
...
@@ -180,6 +180,11 @@ RECT get_virtual_screen_rect(void)
return
virtual_screen_rect
;
}
RECT
get_primary_monitor_rect
(
void
)
{
return
get_primary
()
->
rcMonitor
;
}
void
xinerama_init
(
unsigned
int
width
,
unsigned
int
height
)
{
MONITORINFOEXW
*
primary
;
...
...
@@ -213,10 +218,8 @@ void xinerama_init( unsigned int width, unsigned int height )
(
monitors
[
i
].
dwFlags
&
MONITORINFOF_PRIMARY
)
?
" (primary)"
:
""
);
}
screen_width
=
primary
->
rcMonitor
.
right
-
primary
->
rcMonitor
.
left
;
screen_height
=
primary
->
rcMonitor
.
bottom
-
primary
->
rcMonitor
.
top
;
TRACE
(
"virtual size: %s primary size: %dx%d
\n
"
,
wine_dbgstr_rect
(
&
virtual_screen_rect
),
screen_width
,
screen_height
);
TRACE
(
"virtual size: %s primary: %s
\n
"
,
wine_dbgstr_rect
(
&
virtual_screen_rect
),
wine_dbgstr_rect
(
&
primary
->
rcMonitor
)
);
}
...
...
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