X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fvideo_output%2Fwindow.c;h=2b661815905998c2f11950e4bb61e6f320e12e3f;hb=94558b79a949d86ade0184b3262adfedfc91252d;hp=3076401bc4015e22d0587fa0accbfdb13b73a5e6;hpb=dc873d6a222af0e809e529ec04b2159481d89461;p=vlc diff --git a/src/video_output/window.c b/src/video_output/window.c index 3076401bc4..2b66181590 100644 --- a/src/video_output/window.c +++ b/src/video_output/window.c @@ -31,17 +31,25 @@ #include #include +#include "inhibit.h" #include +typedef struct +{ + vout_window_t wnd; + module_t *module; + vlc_inhibit_t *inhibit; +} window_t; + vout_window_t *vout_window_New(vlc_object_t *obj, const char *module, const vout_window_cfg_t *cfg) { static char const name[] = "window"; - vout_window_t *window = vlc_custom_create(obj, sizeof(*window), - VLC_OBJECT_GENERIC, name); + window_t *w = vlc_custom_create(obj, sizeof(*w), VLC_OBJECT_GENERIC, name); + vout_window_t *window = &w->wnd; + window->cfg = cfg; - memset(&window->handle, 0, sizeof(window->handle)); window->control = NULL; window->sys = NULL; @@ -49,23 +57,38 @@ vout_window_t *vout_window_New(vlc_object_t *obj, const char *type; switch (cfg->type) { +#ifdef WIN32 case VOUT_WINDOW_TYPE_HWND: type = "vout window hwnd"; + window->hwnd = NULL; break; +#endif case VOUT_WINDOW_TYPE_XID: type = "vout window xid"; + window->xid = 0; + window->x11_display = NULL; break; default: assert(0); } - window->module = module_need(window, type, - module, module && *module != '\0'); - if (!window->module) { + w->module = module_need(window, type, module, module && *module != '\0'); + if (!w->module) { vlc_object_detach(window); vlc_object_release(window); return NULL; } + + /* Hook for screensaver inhibition */ + if (cfg->type == VOUT_WINDOW_TYPE_XID) { + w->inhibit = vlc_inhibit_Create (VLC_OBJECT (window), + window->xid); + if (w->inhibit != NULL) + vlc_inhibit_Set (w->inhibit, true); + /* FIXME: ^ wait for vout activation, pause */ + } + else + w->inhibit = NULL; return window; } @@ -74,9 +97,12 @@ void vout_window_Delete(vout_window_t *window) if (!window) return; + window_t *w = (window_t *)window; + if (w->inhibit) + vlc_inhibit_Destroy (w->inhibit); vlc_object_detach(window); - module_unneed(window, window->module); + module_unneed(window, w->module); vlc_object_release(window); }