Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
99260d91
Commit
99260d91
authored
Feb 16, 2011
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented X11 fullscreen toggling with modern window managers
parent
8abd1a05
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
3 deletions
+63
-3
SDL_x11video.c
src/video/x11/SDL_x11video.c
+1
-0
SDL_x11window.c
src/video/x11/SDL_x11window.c
+61
-3
SDL_x11window.h
src/video/x11/SDL_x11window.h
+1
-0
No files found.
src/video/x11/SDL_x11video.c
View file @
99260d91
...
...
@@ -201,6 +201,7 @@ X11_CreateDevice(int devindex)
device
->
MaximizeWindow
=
X11_MaximizeWindow
;
device
->
MinimizeWindow
=
X11_MinimizeWindow
;
device
->
RestoreWindow
=
X11_RestoreWindow
;
device
->
SetWindowFullscreen
=
X11_SetWindowFullscreen
;
device
->
SetWindowGrab
=
X11_SetWindowGrab
;
device
->
DestroyWindow
=
X11_DestroyWindow
;
device
->
CreateWindowFramebuffer
=
X11_CreateWindowFramebuffer
;
...
...
src/video/x11/SDL_x11window.c
View file @
99260d91
...
...
@@ -772,7 +772,7 @@ X11_RaiseWindow(_THIS, SDL_Window * window)
}
static
void
X11_
SetWindowMaximized
(
_THIS
,
SDL_Window
*
window
,
SDL_bool
maximized
)
SetWindowMaximized
(
_THIS
,
SDL_Window
*
window
,
SDL_bool
maximized
)
{
SDL_WindowData
*
data
=
(
SDL_WindowData
*
)
window
->
driverdata
;
SDL_DisplayData
*
displaydata
=
...
...
@@ -823,7 +823,7 @@ X11_SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized)
void
X11_MaximizeWindow
(
_THIS
,
SDL_Window
*
window
)
{
X11_
SetWindowMaximized
(
_this
,
window
,
SDL_TRUE
);
SetWindowMaximized
(
_this
,
window
,
SDL_TRUE
);
}
void
...
...
@@ -841,10 +841,68 @@ X11_MinimizeWindow(_THIS, SDL_Window * window)
void
X11_RestoreWindow
(
_THIS
,
SDL_Window
*
window
)
{
X11_
SetWindowMaximized
(
_this
,
window
,
SDL_FALSE
);
SetWindowMaximized
(
_this
,
window
,
SDL_FALSE
);
X11_ShowWindow
(
_this
,
window
);
}
static
void
SetWindowFullscreen
(
_THIS
,
SDL_Window
*
window
,
SDL_bool
fullscreen
)
{
SDL_WindowData
*
data
=
(
SDL_WindowData
*
)
window
->
driverdata
;
SDL_DisplayData
*
displaydata
=
(
SDL_DisplayData
*
)
SDL_GetDisplayForWindow
(
window
)
->
driverdata
;
Display
*
display
=
data
->
videodata
->
display
;
Atom
_NET_WM_STATE
=
data
->
videodata
->
_NET_WM_STATE
;
Atom
_NET_WM_STATE_MAXIMIZED_VERT
=
data
->
videodata
->
_NET_WM_STATE_MAXIMIZED_VERT
;
Atom
_NET_WM_STATE_MAXIMIZED_HORZ
=
data
->
videodata
->
_NET_WM_STATE_MAXIMIZED_HORZ
;
Atom
_NET_WM_STATE_FULLSCREEN
=
data
->
videodata
->
_NET_WM_STATE_FULLSCREEN
;
if
(
X11_IsWindowMapped
(
_this
,
window
))
{
XEvent
e
;
SDL_zero
(
e
);
e
.
xany
.
type
=
ClientMessage
;
e
.
xclient
.
message_type
=
_NET_WM_STATE
;
e
.
xclient
.
format
=
32
;
e
.
xclient
.
window
=
data
->
xwindow
;
e
.
xclient
.
data
.
l
[
0
]
=
fullscreen
?
_NET_WM_STATE_ADD
:
_NET_WM_STATE_REMOVE
;
e
.
xclient
.
data
.
l
[
1
]
=
_NET_WM_STATE_FULLSCREEN
;
e
.
xclient
.
data
.
l
[
3
]
=
0l
;
XSendEvent
(
display
,
RootWindow
(
display
,
displaydata
->
screen
),
0
,
SubstructureNotifyMask
|
SubstructureRedirectMask
,
&
e
);
}
else
{
int
count
=
0
;
Atom
atoms
[
3
];
if
(
fullscreen
)
{
atoms
[
count
++
]
=
_NET_WM_STATE_FULLSCREEN
;
}
if
(
window
->
flags
&
SDL_WINDOW_MAXIMIZED
)
{
atoms
[
count
++
]
=
_NET_WM_STATE_MAXIMIZED_VERT
;
atoms
[
count
++
]
=
_NET_WM_STATE_MAXIMIZED_HORZ
;
}
if
(
count
>
0
)
{
XChangeProperty
(
display
,
data
->
xwindow
,
_NET_WM_STATE
,
XA_ATOM
,
32
,
PropModeReplace
,
(
unsigned
char
*
)
atoms
,
count
);
}
else
{
XDeleteProperty
(
display
,
data
->
xwindow
,
_NET_WM_STATE
);
}
}
XFlush
(
display
);
}
void
X11_SetWindowFullscreen
(
_THIS
,
SDL_Window
*
window
)
{
if
(
FULLSCREEN_VISIBLE
(
window
))
{
SetWindowFullscreen
(
_this
,
window
,
SDL_TRUE
);
}
else
{
SetWindowFullscreen
(
_this
,
window
,
SDL_FALSE
);
}
}
void
X11_SetWindowGrab
(
_THIS
,
SDL_Window
*
window
)
{
...
...
src/video/x11/SDL_x11window.h
View file @
99260d91
...
...
@@ -54,6 +54,7 @@ extern void X11_RaiseWindow(_THIS, SDL_Window * window);
extern
void
X11_MaximizeWindow
(
_THIS
,
SDL_Window
*
window
);
extern
void
X11_MinimizeWindow
(
_THIS
,
SDL_Window
*
window
);
extern
void
X11_RestoreWindow
(
_THIS
,
SDL_Window
*
window
);
extern
void
X11_SetWindowFullscreen
(
_THIS
,
SDL_Window
*
window
);
extern
void
X11_SetWindowGrab
(
_THIS
,
SDL_Window
*
window
);
extern
void
X11_DestroyWindow
(
_THIS
,
SDL_Window
*
window
);
extern
SDL_bool
X11_GetWindowWMInfo
(
_THIS
,
SDL_Window
*
window
,
...
...
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