summaryrefslogtreecommitdiffstats
path: root/libvo/x11_common.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2008-11-22 19:16:43 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2008-11-22 19:16:43 +0200
commit6cbca28085f1698bc7c6537631d5efbadf64abf1 (patch)
tree13a3ad21a732b168399ce9b34bbb0a57784dd54e /libvo/x11_common.c
parent1715c2a33632b333f8e8e581ef23ea5fe0234edd (diff)
parenta83e00009000c4907254daa141d491d0479e961d (diff)
downloadmpv-6cbca28085f1698bc7c6537631d5efbadf64abf1.tar.bz2
mpv-6cbca28085f1698bc7c6537631d5efbadf64abf1.tar.xz
Merge svn changes up to r27979
Diffstat (limited to 'libvo/x11_common.c')
-rw-r--r--libvo/x11_common.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index 5557704c6c..25bed4389a 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -1246,6 +1246,23 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
struct MPOpts *opts = vo->opts;
struct vo_x11_state *x11 = vo->x11;
Display *mDisplay = vo->x11->display;
+ XGCValues xgcv;
+ if (WinID >= 0) {
+ x11->window = WinID ? (Window)WinID : x11->rootwin;
+ if (col_map != CopyFromParent) {
+ unsigned long xswamask = CWColormap;
+ XSetWindowAttributes xswa;
+ xswa.colormap = col_map;
+ XUnmapWindow(mDisplay, x11->window);
+ XChangeWindowAttributes(mDisplay, x11->window, xswamask, &xswa);
+ XMapWindow(mDisplay, x11->window);
+ }
+ if (WinID) vo_x11_update_geometry(vo);
+ vo_x11_selectinput_witherr(mDisplay, x11->window,
+ StructureNotifyMask | KeyPressMask | PointerMotionMask |
+ ButtonPressMask | ButtonReleaseMask | ExposureMask);
+ goto final;
+ }
if (x11->window == None) {
XSizeHints hint;
XEvent xev;
@@ -1281,6 +1298,12 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
vo_x11_nofs_sizepos(vo, vo->dx, vo->dy, width, height);
if (!!vo_fs != !!(flags & VOFLAG_FULLSCREEN))
vo_x11_fullscreen(vo);
+final:
+ if (x11->vo_gc != None)
+ XFreeGC(mDisplay, x11->vo_gc);
+ x11->vo_gc = XCreateGC(mDisplay, x11->window, GCForeground, &xgcv);
+ XSync(mDisplay, False);
+ x11->vo_mouse_autohide = 1;
}
void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,