#include <assert.h>
#include <vlc_common.h>
-#include <vlc_plugin.h>
#include <vlc_vout_window.h>
+#include "inhibit.h"
+#include <libvlc.h>
+
+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)
{
- vout_window_t *window = vlc_object_create(obj, sizeof(*window));
+ static char const name[] = "window";
+ 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));
const char *type;
switch (cfg->type) {
+#ifdef WIN32
case VOUT_WINDOW_TYPE_HWND:
type = "vout window hwnd";
+ window->handle.hwnd = NULL;
break;
+#endif
case VOUT_WINDOW_TYPE_XID:
type = "vout window xid";
+ window->handle.xid = 0;
+ window->display.x11 = NULL;
break;
default:
assert(0);
}
- window->module = module_need(window, type,
- module, module && *module != '\0');
- if (!window->module) {
- vlc_object_detach(window);
+ w->module = module_need(window, type, module, module && *module != '\0');
+ if (!w->module) {
vlc_object_release(window);
return NULL;
}
+
+ /* Hook for screensaver inhibition */
+ if ( var_InheritBool( obj, "disable-screensaver" ) && cfg->type == VOUT_WINDOW_TYPE_XID) {
+ w->inhibit = vlc_inhibit_Create (VLC_OBJECT (window),
+ window->handle.xid);
+ if (w->inhibit != NULL)
+ vlc_inhibit_Set (w->inhibit, true);
+ /* FIXME: ^ wait for vout activation, pause */
+ }
+ else
+ w->inhibit = NULL;
return window;
}
if (!window)
return;
- vlc_object_detach(window);
+ window_t *w = (window_t *)window;
+ if (w->inhibit)
+ vlc_inhibit_Destroy (w->inhibit);
- module_unneed(window, window->module);
+ module_unneed(window, w->module);
vlc_object_release(window);
}