bool ch_display_size;
int display_width;
int display_height;
- bool display_is_forced;
int fit_window;
osys->ch_display_size = true;
osys->display_width = width;
osys->display_height = height;
- osys->display_is_forced = false;
vlc_mutex_unlock(&osys->lock);
break;
vout_display_GetDefaultDisplaySize(&display_width, &display_height,
&vd->source, &cfg);
- vlc_mutex_lock(&osys->lock);
-
- osys->ch_display_size = true;
- osys->display_width = display_width;
- osys->display_height = display_height;
- osys->display_is_forced = true;
-
- vlc_mutex_unlock(&osys->lock);
+#ifdef ALLOW_DUMMY_VOUT
+ if (!osys->vout->p)
+ vout_display_SendEventDisplaySize(vd, display_width, display_height);
+ else
+#endif
+ vout_SetDisplayWindowSize(osys->vout, display_width, display_height);
}
static void VoutDisplayCropRatio(int *left, int *top, int *right, int *bottom,
bool ch_display_size = osys->ch_display_size;
int display_width = osys->display_width;
int display_height = osys->display_height;
- bool display_is_forced = osys->display_is_forced;
osys->ch_display_size = false;
bool reset_pictures;
cfg.display.width = cfg.is_fullscreen ? 0 : osys->width_saved;
cfg.display.height = cfg.is_fullscreen ? 0 : osys->height_saved;
- if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_FULLSCREEN, &cfg)) {
- msg_Err(vd, "Failed to set fullscreen");
+ if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_FULLSCREEN, &cfg) == VLC_SUCCESS) {
+ osys->cfg.is_fullscreen = is_fullscreen;
+
+ if (!is_fullscreen)
+ vout_SetDisplayWindowSize(osys->vout, osys->width_saved,
+ osys->height_saved);
+ } else {
is_fullscreen = osys->cfg.is_fullscreen;
- } else if (!is_fullscreen) {
- vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &cfg, true);
+
+ msg_Err(vd, "Failed to set fullscreen");
}
- osys->cfg.is_fullscreen = is_fullscreen;
- /* */
vout_SendEventFullscreen(osys->vout, osys->cfg.is_fullscreen);
}
osys->height_saved = osys->cfg.display.height;
if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE,
- &cfg, display_is_forced)) {
- if (!display_is_forced)
- msg_Err(vd, "Failed to resize display");
+ &cfg, false)) {
+ msg_Err(vd, "Failed to resize display");
/* We ignore the resized */
display_width = osys->cfg.display.width;
/* FIXME should not be there */
void vout_SendDisplayEventMouse(vout_thread_t *, const vlc_mouse_t *);
+
vout_window_t *vout_NewDisplayWindow(vout_thread_t *, const vout_window_cfg_t *);
void vout_DeleteDisplayWindow(vout_thread_t *, vout_window_t *);
-void vout_UpdateDisplaySourceProperties(vout_display_t *vd, const video_format_t *);
+void vout_SetDisplayWindowSize(vout_thread_t *, unsigned, unsigned);
+void vout_UpdateDisplaySourceProperties(vout_display_t *vd, const video_format_t *);
assert(vout->p->window == window);
}
+void vout_SetDisplayWindowSize(vout_thread_t *vout,
+ unsigned width, unsigned height)
+{
+ vout_window_t *window = vout->p->window;
+
+ if (window != NULL)
+ /* Request a resize of the window. If it fails, there is nothing to do.
+ * If it succeeds, the window will emit a resize event later. */
+ vout_window_SetSize(window, width, height);
+ else
+ if (vout->p->display.vd != NULL)
+ /* Force a resize of window-less display. This is not allowed to fail,
+ * although the display is allowed to ignore the size anyway. */
+ /* FIXME: remove this, fix MSW and OS/2 window providers */
+ vout_display_SendEventDisplaySize(vout->p->display.vd, width, height);
+}
+
/* */
static picture_t *VoutVideoFilterInteractiveNewPicture(filter_t *filter)
{