mirror of https://github.com/mpv-player/mpv
Move static X11 atoms to struct
This commit is contained in:
parent
78172918ff
commit
7159af499c
|
@ -376,7 +376,7 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
||||||
ctx->drwY, vo->dwidth, vo->dheight);
|
ctx->drwY, vo->dwidth, vo->dheight);
|
||||||
|
|
||||||
if (opts->vo_ontop)
|
if (opts->vo_ontop)
|
||||||
vo_x11_setlayer(x11->display, vo_window, opts->vo_ontop);
|
vo_x11_setlayer(vo, vo_window, opts->vo_ontop);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,20 +91,6 @@ char **vo_fstype_list;
|
||||||
/* 1 means that the WM is metacity (broken as hell) */
|
/* 1 means that the WM is metacity (broken as hell) */
|
||||||
int metacity_hack = 0;
|
int metacity_hack = 0;
|
||||||
|
|
||||||
static Atom XA_NET_SUPPORTED;
|
|
||||||
static Atom XA_NET_WM_STATE;
|
|
||||||
static Atom XA_NET_WM_STATE_FULLSCREEN;
|
|
||||||
static Atom XA_NET_WM_STATE_ABOVE;
|
|
||||||
static Atom XA_NET_WM_STATE_STAYS_ON_TOP;
|
|
||||||
static Atom XA_NET_WM_STATE_BELOW;
|
|
||||||
static Atom XA_NET_WM_PID;
|
|
||||||
static Atom XA_WIN_PROTOCOLS;
|
|
||||||
static Atom XA_WIN_LAYER;
|
|
||||||
static Atom XA_WIN_HINTS;
|
|
||||||
static Atom XA_BLACKBOX_PID;
|
|
||||||
static Atom XAWM_PROTOCOLS;
|
|
||||||
static Atom XAWM_DELETE_WINDOW;
|
|
||||||
|
|
||||||
static int vo_old_x = 0;
|
static int vo_old_x = 0;
|
||||||
static int vo_old_y = 0;
|
static int vo_old_y = 0;
|
||||||
static int vo_old_width = 0;
|
static int vo_old_width = 0;
|
||||||
|
@ -267,9 +253,9 @@ static void fstype_dump(int fstype)
|
||||||
"[x11] Current fstype setting doesn't honour any X atoms\n");
|
"[x11] Current fstype setting doesn't honour any X atoms\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int net_wm_support_state_test(Atom atom)
|
static int net_wm_support_state_test(struct vo_x11_state *x11, Atom atom)
|
||||||
{
|
{
|
||||||
#define NET_WM_STATE_TEST(x) { if (atom == XA_NET_WM_STATE_##x) { mp_msg( MSGT_VO,MSGL_V, "[x11] Detected wm supports " #x " state.\n" ); return vo_wm_##x; } }
|
#define NET_WM_STATE_TEST(x) { if (atom == x11->XA_NET_WM_STATE_##x) { mp_msg( MSGT_VO,MSGL_V, "[x11] Detected wm supports " #x " state.\n" ); return vo_wm_##x; } }
|
||||||
|
|
||||||
NET_WM_STATE_TEST(FULLSCREEN);
|
NET_WM_STATE_TEST(FULLSCREEN);
|
||||||
NET_WM_STATE_TEST(ABOVE);
|
NET_WM_STATE_TEST(ABOVE);
|
||||||
|
@ -293,6 +279,7 @@ static int x11_get_property(struct vo_x11_state *x11, Atom type, Atom ** args,
|
||||||
|
|
||||||
static int vo_wm_detect(struct vo *vo)
|
static int vo_wm_detect(struct vo *vo)
|
||||||
{
|
{
|
||||||
|
struct vo_x11_state *x11 = vo->x11;
|
||||||
int i;
|
int i;
|
||||||
int wm = 0;
|
int wm = 0;
|
||||||
unsigned long nitems;
|
unsigned long nitems;
|
||||||
|
@ -302,12 +289,12 @@ static int vo_wm_detect(struct vo *vo)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// -- supports layers
|
// -- supports layers
|
||||||
if (x11_get_property(vo->x11, XA_WIN_PROTOCOLS, &args, &nitems))
|
if (x11_get_property(x11, x11->XA_WIN_PROTOCOLS, &args, &nitems))
|
||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_V, "[x11] Detected wm supports layers.\n");
|
mp_msg(MSGT_VO, MSGL_V, "[x11] Detected wm supports layers.\n");
|
||||||
for (i = 0; i < nitems; i++)
|
for (i = 0; i < nitems; i++)
|
||||||
{
|
{
|
||||||
if (args[i] == XA_WIN_LAYER)
|
if (args[i] == x11->XA_WIN_LAYER)
|
||||||
{
|
{
|
||||||
wm |= vo_wm_LAYER;
|
wm |= vo_wm_LAYER;
|
||||||
metacity_hack |= 1;
|
metacity_hack |= 1;
|
||||||
|
@ -327,18 +314,18 @@ static int vo_wm_detect(struct vo *vo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// --- netwm
|
// --- netwm
|
||||||
if (x11_get_property(vo->x11, XA_NET_SUPPORTED, &args, &nitems))
|
if (x11_get_property(x11, x11->XA_NET_SUPPORTED, &args, &nitems))
|
||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_V, "[x11] Detected wm supports NetWM.\n");
|
mp_msg(MSGT_VO, MSGL_V, "[x11] Detected wm supports NetWM.\n");
|
||||||
for (i = 0; i < nitems; i++)
|
for (i = 0; i < nitems; i++)
|
||||||
wm |= net_wm_support_state_test(args[i]);
|
wm |= net_wm_support_state_test(vo->x11, args[i]);
|
||||||
XFree(args);
|
XFree(args);
|
||||||
#if 0
|
#if 0
|
||||||
// ugly hack for broken OpenBox _NET_WM_STATE_FULLSCREEN support
|
// ugly hack for broken OpenBox _NET_WM_STATE_FULLSCREEN support
|
||||||
// (in their implementation it only changes internal window state, nothing more!!!)
|
// (in their implementation it only changes internal window state, nothing more!!!)
|
||||||
if (wm & vo_wm_FULLSCREEN)
|
if (wm & vo_wm_FULLSCREEN)
|
||||||
{
|
{
|
||||||
if (x11_get_property(vo->x11, XA_BLACKBOX_PID, &args, &nitems))
|
if (x11_get_property(x11, x11->XA_BLACKBOX_PID, &args, &nitems))
|
||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_V,
|
mp_msg(MSGT_VO, MSGL_V,
|
||||||
"[x11] Detected wm is a broken OpenBox.\n");
|
"[x11] Detected wm is a broken OpenBox.\n");
|
||||||
|
@ -354,8 +341,8 @@ static int vo_wm_detect(struct vo *vo)
|
||||||
return wm;
|
return wm;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XA_INIT(x) XA##x = XInternAtom(d, #x, False)
|
#define XA_INIT(x) x11->XA##x = XInternAtom(x11->display, #x, False)
|
||||||
static void init_atoms(Display *d)
|
static void init_atoms(struct vo_x11_state *x11)
|
||||||
{
|
{
|
||||||
XA_INIT(_NET_SUPPORTED);
|
XA_INIT(_NET_SUPPORTED);
|
||||||
XA_INIT(_NET_WM_STATE);
|
XA_INIT(_NET_WM_STATE);
|
||||||
|
@ -457,7 +444,7 @@ int vo_init(struct vo *vo)
|
||||||
mScreen = DefaultScreen(x11->display); // screen ID
|
mScreen = DefaultScreen(x11->display); // screen ID
|
||||||
mRootWin = RootWindow(x11->display, mScreen); // root window ID
|
mRootWin = RootWindow(x11->display, mScreen); // root window ID
|
||||||
|
|
||||||
init_atoms(vo->x11->display);
|
init_atoms(vo->x11);
|
||||||
|
|
||||||
#ifdef HAVE_XF86VM
|
#ifdef HAVE_XF86VM
|
||||||
{
|
{
|
||||||
|
@ -948,16 +935,17 @@ void vo_x11_decoration(Display * vo_Display, Window w, int d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vo_x11_classhint(Display * display, Window window, char *name)
|
void vo_x11_classhint(struct vo *vo, Window window, char *name)
|
||||||
{
|
{
|
||||||
|
struct vo_x11_state *x11 = vo->x11;
|
||||||
XClassHint wmClass;
|
XClassHint wmClass;
|
||||||
pid_t pid = getpid();
|
pid_t pid = getpid();
|
||||||
|
|
||||||
wmClass.res_name = name;
|
wmClass.res_name = name;
|
||||||
wmClass.res_class = "MPlayer";
|
wmClass.res_class = "MPlayer";
|
||||||
XSetClassHint(display, window, &wmClass);
|
XSetClassHint(x11->display, window, &wmClass);
|
||||||
XChangeProperty(display, window, XA_NET_WM_PID, XA_CARDINAL, 32,
|
XChangeProperty(x11->display, window, x11->XA_NET_WM_PID, XA_CARDINAL,
|
||||||
PropModeReplace, (unsigned char *) &pid, 1);
|
32, PropModeReplace, (unsigned char *) &pid, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Window vo_window = None;
|
Window vo_window = None;
|
||||||
|
@ -1023,6 +1011,7 @@ static int mouse_waiting_hide;
|
||||||
|
|
||||||
int vo_x11_check_events(struct vo *vo)
|
int vo_x11_check_events(struct vo *vo)
|
||||||
{
|
{
|
||||||
|
struct vo_x11_state *x11 = vo->x11;
|
||||||
struct MPOpts *opts = vo->opts;
|
struct MPOpts *opts = vo->opts;
|
||||||
Display *display = vo->x11->display;
|
Display *display = vo->x11->display;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -1167,8 +1156,8 @@ int vo_x11_check_events(struct vo *vo)
|
||||||
vo_fs_flip = 0;
|
vo_fs_flip = 0;
|
||||||
break;
|
break;
|
||||||
case ClientMessage:
|
case ClientMessage:
|
||||||
if (Event.xclient.message_type == XAWM_PROTOCOLS &&
|
if (Event.xclient.message_type == x11->XAWM_PROTOCOLS &&
|
||||||
Event.xclient.data.l[0] == XAWM_DELETE_WINDOW)
|
Event.xclient.data.l[0] == x11->XAWM_DELETE_WINDOW)
|
||||||
mplayer_put_key(KEY_CLOSE_WIN);
|
mplayer_put_key(KEY_CLOSE_WIN);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1235,7 +1224,7 @@ void vo_x11_sizehint(struct vo *vo, int x, int y, int width, int height, int max
|
||||||
XSetWMNormalHints(vo->x11->display, vo_window, &vo_hint);
|
XSetWMNormalHints(vo->x11->display, vo_window, &vo_hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vo_x11_get_gnome_layer(Display * mDisplay, Window win)
|
static int vo_x11_get_gnome_layer(struct vo_x11_state *x11, Window win)
|
||||||
{
|
{
|
||||||
Atom type;
|
Atom type;
|
||||||
int format;
|
int format;
|
||||||
|
@ -1243,7 +1232,7 @@ static int vo_x11_get_gnome_layer(Display * mDisplay, Window win)
|
||||||
unsigned long bytesafter;
|
unsigned long bytesafter;
|
||||||
unsigned short *args = NULL;
|
unsigned short *args = NULL;
|
||||||
|
|
||||||
if (XGetWindowProperty(mDisplay, win, XA_WIN_LAYER, 0, 16384,
|
if (XGetWindowProperty(x11->display, win, x11->XA_WIN_LAYER, 0, 16384,
|
||||||
False, AnyPropertyType, &type, &format, &nitems,
|
False, AnyPropertyType, &type, &format, &nitems,
|
||||||
&bytesafter,
|
&bytesafter,
|
||||||
(unsigned char **) &args) == Success
|
(unsigned char **) &args) == Success
|
||||||
|
@ -1257,7 +1246,7 @@ static int vo_x11_get_gnome_layer(Display * mDisplay, Window win)
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
static Window vo_x11_create_smooth_window(Display * mDisplay, Window mRoot,
|
static Window vo_x11_create_smooth_window(struct vo_x11_state *x11, Window mRoot,
|
||||||
Visual * vis, int x, int y,
|
Visual * vis, int x, int y,
|
||||||
unsigned int width, unsigned int height,
|
unsigned int width, unsigned int height,
|
||||||
int depth, Colormap col_map)
|
int depth, Colormap col_map)
|
||||||
|
@ -1277,12 +1266,12 @@ static Window vo_x11_create_smooth_window(Display * mDisplay, Window mRoot,
|
||||||
xswa.bit_gravity = StaticGravity;
|
xswa.bit_gravity = StaticGravity;
|
||||||
|
|
||||||
ret_win =
|
ret_win =
|
||||||
XCreateWindow(mDisplay, mRootWin, x, y, width, height, 0, depth,
|
XCreateWindow(x11->display, mRootWin, x, y, width, height, 0, depth,
|
||||||
CopyFromParent, vis, xswamask, &xswa);
|
CopyFromParent, vis, xswamask, &xswa);
|
||||||
XSetWMProtocols(mDisplay, ret_win, &XAWM_DELETE_WINDOW, 1);
|
XSetWMProtocols(x11->display, ret_win, &x11->XAWM_DELETE_WINDOW, 1);
|
||||||
if (!f_gc)
|
if (!f_gc)
|
||||||
f_gc = XCreateGC(mDisplay, ret_win, 0, 0);
|
f_gc = XCreateGC(x11->display, ret_win, 0, 0);
|
||||||
XSetForeground(mDisplay, f_gc, 0);
|
XSetForeground(x11->display, f_gc, 0);
|
||||||
|
|
||||||
return ret_win;
|
return ret_win;
|
||||||
}
|
}
|
||||||
|
@ -1309,6 +1298,7 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
|
||||||
const char *classname, const char *title)
|
const char *classname, const char *title)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = vo->opts;
|
struct MPOpts *opts = vo->opts;
|
||||||
|
struct vo_x11_state *x11 = vo->x11;
|
||||||
Display *mDisplay = vo->x11->display;
|
Display *mDisplay = vo->x11->display;
|
||||||
if (vo_window == None) {
|
if (vo_window == None) {
|
||||||
XSizeHints hint;
|
XSizeHints hint;
|
||||||
|
@ -1316,9 +1306,9 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
|
||||||
vo_fs = 0;
|
vo_fs = 0;
|
||||||
vo->dwidth = width;
|
vo->dwidth = width;
|
||||||
vo->dheight = height;
|
vo->dheight = height;
|
||||||
vo_window = vo_x11_create_smooth_window(mDisplay, mRootWin, vis->visual,
|
vo_window = vo_x11_create_smooth_window(x11, mRootWin, vis->visual,
|
||||||
x, y, width, height, vis->depth, col_map);
|
x, y, width, height, vis->depth, col_map);
|
||||||
vo_x11_classhint(mDisplay, vo_window, classname);
|
vo_x11_classhint(vo, vo_window, classname);
|
||||||
XStoreName(mDisplay, vo_window, title);
|
XStoreName(mDisplay, vo_window, title);
|
||||||
vo_hidecursor(mDisplay, vo_window);
|
vo_hidecursor(mDisplay, vo_window);
|
||||||
XSelectInput(mDisplay, vo_window, StructureNotifyMask);
|
XSelectInput(mDisplay, vo_window, StructureNotifyMask);
|
||||||
|
@ -1340,7 +1330,7 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
|
||||||
StructureNotifyMask | KeyPressMask | PointerMotionMask |
|
StructureNotifyMask | KeyPressMask | PointerMotionMask |
|
||||||
ButtonPressMask | ButtonReleaseMask | ExposureMask);
|
ButtonPressMask | ButtonReleaseMask | ExposureMask);
|
||||||
}
|
}
|
||||||
if (opts->vo_ontop) vo_x11_setlayer(mDisplay, vo_window, opts->vo_ontop);
|
if (opts->vo_ontop) vo_x11_setlayer(vo, vo_window, opts->vo_ontop);
|
||||||
vo_x11_nofs_sizepos(vo, vo->dx, vo->dy, width, height);
|
vo_x11_nofs_sizepos(vo, vo->dx, vo->dy, width, height);
|
||||||
if (!!vo_fs != !!(flags & VOFLAG_FULLSCREEN))
|
if (!!vo_fs != !!(flags & VOFLAG_FULLSCREEN))
|
||||||
vo_x11_fullscreen(vo);
|
vo_x11_fullscreen(vo);
|
||||||
|
@ -1391,8 +1381,9 @@ void vo_x11_clearwindow(struct vo *vo, Window vo_window)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void vo_x11_setlayer(Display * mDisplay, Window vo_window, int layer)
|
void vo_x11_setlayer(struct vo *vo, Window vo_window, int layer)
|
||||||
{
|
{
|
||||||
|
struct vo_x11_state *x11 = vo->x11;
|
||||||
if (WinID >= 0)
|
if (WinID >= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1401,20 +1392,20 @@ void vo_x11_setlayer(Display * mDisplay, Window vo_window, int layer)
|
||||||
XClientMessageEvent xev;
|
XClientMessageEvent xev;
|
||||||
|
|
||||||
if (!orig_layer)
|
if (!orig_layer)
|
||||||
orig_layer = vo_x11_get_gnome_layer(mDisplay, vo_window);
|
orig_layer = vo_x11_get_gnome_layer(x11, vo_window);
|
||||||
|
|
||||||
memset(&xev, 0, sizeof(xev));
|
memset(&xev, 0, sizeof(xev));
|
||||||
xev.type = ClientMessage;
|
xev.type = ClientMessage;
|
||||||
xev.display = mDisplay;
|
xev.display = x11->display;
|
||||||
xev.window = vo_window;
|
xev.window = vo_window;
|
||||||
xev.message_type = XA_WIN_LAYER;
|
xev.message_type = x11->XA_WIN_LAYER;
|
||||||
xev.format = 32;
|
xev.format = 32;
|
||||||
xev.data.l[0] = layer ? fs_layer : orig_layer; // if not fullscreen, stay on default layer
|
xev.data.l[0] = layer ? fs_layer : orig_layer; // if not fullscreen, stay on default layer
|
||||||
xev.data.l[1] = CurrentTime;
|
xev.data.l[1] = CurrentTime;
|
||||||
mp_msg(MSGT_VO, MSGL_V,
|
mp_msg(MSGT_VO, MSGL_V,
|
||||||
"[x11] Layered style stay on top (layer %ld).\n",
|
"[x11] Layered style stay on top (layer %ld).\n",
|
||||||
xev.data.l[0]);
|
xev.data.l[0]);
|
||||||
XSendEvent(mDisplay, mRootWin, False, SubstructureNotifyMask,
|
XSendEvent(x11->display, mRootWin, False, SubstructureNotifyMask,
|
||||||
(XEvent *) & xev);
|
(XEvent *) & xev);
|
||||||
} else if (vo_fs_type & vo_wm_NETWM)
|
} else if (vo_fs_type & vo_wm_NETWM)
|
||||||
{
|
{
|
||||||
|
@ -1423,26 +1414,26 @@ void vo_x11_setlayer(Display * mDisplay, Window vo_window, int layer)
|
||||||
|
|
||||||
memset(&xev, 0, sizeof(xev));
|
memset(&xev, 0, sizeof(xev));
|
||||||
xev.type = ClientMessage;
|
xev.type = ClientMessage;
|
||||||
xev.message_type = XA_NET_WM_STATE;
|
xev.message_type = x11->XA_NET_WM_STATE;
|
||||||
xev.display = mDisplay;
|
xev.display = x11->display;
|
||||||
xev.window = vo_window;
|
xev.window = vo_window;
|
||||||
xev.format = 32;
|
xev.format = 32;
|
||||||
xev.data.l[0] = layer;
|
xev.data.l[0] = layer;
|
||||||
|
|
||||||
if (vo_fs_type & vo_wm_STAYS_ON_TOP)
|
if (vo_fs_type & vo_wm_STAYS_ON_TOP)
|
||||||
xev.data.l[1] = XA_NET_WM_STATE_STAYS_ON_TOP;
|
xev.data.l[1] = x11->XA_NET_WM_STATE_STAYS_ON_TOP;
|
||||||
else if (vo_fs_type & vo_wm_ABOVE)
|
else if (vo_fs_type & vo_wm_ABOVE)
|
||||||
xev.data.l[1] = XA_NET_WM_STATE_ABOVE;
|
xev.data.l[1] = x11->XA_NET_WM_STATE_ABOVE;
|
||||||
else if (vo_fs_type & vo_wm_FULLSCREEN)
|
else if (vo_fs_type & vo_wm_FULLSCREEN)
|
||||||
xev.data.l[1] = XA_NET_WM_STATE_FULLSCREEN;
|
xev.data.l[1] = x11->XA_NET_WM_STATE_FULLSCREEN;
|
||||||
else if (vo_fs_type & vo_wm_BELOW)
|
else if (vo_fs_type & vo_wm_BELOW)
|
||||||
// This is not fallback. We can safely assume that the situation
|
// This is not fallback. We can safely assume that the situation
|
||||||
// where only NETWM_STATE_BELOW is supported doesn't exist.
|
// where only NETWM_STATE_BELOW is supported doesn't exist.
|
||||||
xev.data.l[1] = XA_NET_WM_STATE_BELOW;
|
xev.data.l[1] = x11->XA_NET_WM_STATE_BELOW;
|
||||||
|
|
||||||
XSendEvent(mDisplay, mRootWin, False, SubstructureRedirectMask,
|
XSendEvent(x11->display, mRootWin, False, SubstructureRedirectMask,
|
||||||
(XEvent *) & xev);
|
(XEvent *) & xev);
|
||||||
state = XGetAtomName(mDisplay, xev.data.l[1]);
|
state = XGetAtomName(x11->display, xev.data.l[1]);
|
||||||
mp_msg(MSGT_VO, MSGL_V,
|
mp_msg(MSGT_VO, MSGL_V,
|
||||||
"[x11] NET style stay on top (layer %d). Using state %s.\n",
|
"[x11] NET style stay on top (layer %d). Using state %s.\n",
|
||||||
layer, state);
|
layer, state);
|
||||||
|
@ -1583,14 +1574,14 @@ void vo_x11_fullscreen(struct vo *vo)
|
||||||
{
|
{
|
||||||
vo_x11_decoration(x11->display, vo_window, (vo_fs) ? 0 : 1);
|
vo_x11_decoration(x11->display, vo_window, (vo_fs) ? 0 : 1);
|
||||||
vo_x11_sizehint(vo, x, y, w, h, 0);
|
vo_x11_sizehint(vo, x, y, w, h, 0);
|
||||||
vo_x11_setlayer(x11->display, vo_window, vo_fs);
|
vo_x11_setlayer(vo, vo_window, vo_fs);
|
||||||
|
|
||||||
|
|
||||||
XMoveResizeWindow(x11->display, vo_window, x, y, w, h);
|
XMoveResizeWindow(x11->display, vo_window, x, y, w, h);
|
||||||
}
|
}
|
||||||
/* some WMs lose ontop after fullscreen */
|
/* some WMs lose ontop after fullscreen */
|
||||||
if ((!(vo_fs)) & opts->vo_ontop)
|
if ((!(vo_fs)) & opts->vo_ontop)
|
||||||
vo_x11_setlayer(x11->display, vo_window, opts->vo_ontop);
|
vo_x11_setlayer(vo, vo_window, opts->vo_ontop);
|
||||||
|
|
||||||
XMapRaised(x11->display, vo_window);
|
XMapRaised(x11->display, vo_window);
|
||||||
if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // some WMs change window pos on map
|
if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // some WMs change window pos on map
|
||||||
|
@ -1604,7 +1595,7 @@ void vo_x11_ontop(struct vo *vo)
|
||||||
struct MPOpts *opts = vo->opts;
|
struct MPOpts *opts = vo->opts;
|
||||||
opts->vo_ontop = !opts->vo_ontop;
|
opts->vo_ontop = !opts->vo_ontop;
|
||||||
|
|
||||||
vo_x11_setlayer(vo->x11->display, vo_window, opts->vo_ontop);
|
vo_x11_setlayer(vo, vo_window, opts->vo_ontop);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -9,6 +9,19 @@ struct vo;
|
||||||
struct vo_x11_state {
|
struct vo_x11_state {
|
||||||
Display *display;
|
Display *display;
|
||||||
int depthonscreen;
|
int depthonscreen;
|
||||||
|
Atom XA_NET_SUPPORTED;
|
||||||
|
Atom XA_NET_WM_STATE;
|
||||||
|
Atom XA_NET_WM_STATE_FULLSCREEN;
|
||||||
|
Atom XA_NET_WM_STATE_ABOVE;
|
||||||
|
Atom XA_NET_WM_STATE_STAYS_ON_TOP;
|
||||||
|
Atom XA_NET_WM_STATE_BELOW;
|
||||||
|
Atom XA_NET_WM_PID;
|
||||||
|
Atom XA_WIN_PROTOCOLS;
|
||||||
|
Atom XA_WIN_LAYER;
|
||||||
|
Atom XA_WIN_HINTS;
|
||||||
|
Atom XA_BLACKBOX_PID;
|
||||||
|
Atom XAWM_PROTOCOLS;
|
||||||
|
Atom XAWM_DELETE_WINDOW;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef X11_FULLSCREEN
|
#ifdef X11_FULLSCREEN
|
||||||
|
@ -44,12 +57,12 @@ void vo_x11_init_state(struct vo_x11_state *s);
|
||||||
int vo_init(struct vo *vo);
|
int vo_init(struct vo *vo);
|
||||||
void vo_uninit(struct vo_x11_state *x11);
|
void vo_uninit(struct vo_x11_state *x11);
|
||||||
extern void vo_x11_decoration( Display * vo_Display,Window w,int d );
|
extern void vo_x11_decoration( Display * vo_Display,Window w,int d );
|
||||||
extern void vo_x11_classhint( Display * display,Window window,char *name );
|
void vo_x11_classhint(struct vo *vo, Window window, char *name);
|
||||||
void vo_x11_sizehint(struct vo *vo, int x, int y, int width, int height, int max);
|
void vo_x11_sizehint(struct vo *vo, int x, int y, int width, int height, int max);
|
||||||
int vo_x11_check_events(struct vo *vo);
|
int vo_x11_check_events(struct vo *vo);
|
||||||
extern void vo_x11_selectinput_witherr(Display *display, Window w, long event_mask);
|
extern void vo_x11_selectinput_witherr(Display *display, Window w, long event_mask);
|
||||||
void vo_x11_fullscreen(struct vo *vo);
|
void vo_x11_fullscreen(struct vo *vo);
|
||||||
extern void vo_x11_setlayer( Display * mDisplay,Window vo_window,int layer );
|
void vo_x11_setlayer(struct vo *vo, Window vo_window, int layer);
|
||||||
void vo_x11_uninit(struct vo *vo);
|
void vo_x11_uninit(struct vo *vo);
|
||||||
Colormap vo_x11_create_colormap(struct vo *vo, XVisualInfo *vinfo);
|
Colormap vo_x11_create_colormap(struct vo *vo, XVisualInfo *vinfo);
|
||||||
uint32_t vo_x11_set_equalizer(struct vo *vo, char *name, int value);
|
uint32_t vo_x11_set_equalizer(struct vo *vo, char *name, int value);
|
||||||
|
@ -144,6 +157,8 @@ int vo_find_depth_from_visuals(Display *dpy, int screen, Visual **visual_return)
|
||||||
#define vo_x11_clearwindow_part(display, ...) vo_x11_clearwindow_part(global_vo, __VA_ARGS__)
|
#define vo_x11_clearwindow_part(display, ...) vo_x11_clearwindow_part(global_vo, __VA_ARGS__)
|
||||||
#define vo_vm_close(display) vo_vm_close(global_vo)
|
#define vo_vm_close(display) vo_vm_close(global_vo)
|
||||||
#define vo_x11_clearwindow(display, window) vo_x11_clearwindow(global_vo, window)
|
#define vo_x11_clearwindow(display, window) vo_x11_clearwindow(global_vo, window)
|
||||||
|
#define vo_x11_classhint(display, window, name) vo_x11_classhint(global_vo, window, name)
|
||||||
|
#define vo_x11_setlayer(display, window, layer) vo_x11_setlayer(global_vo, window, layer)
|
||||||
|
|
||||||
#define mDisplay global_vo->x11->display
|
#define mDisplay global_vo->x11->display
|
||||||
#define vo_depthonscreen global_vo->x11->depthonscreen
|
#define vo_depthonscreen global_vo->x11->depthonscreen
|
||||||
|
|
Loading…
Reference in New Issue