unsigned int enable_fake;
unsigned int started;
+ unsigned int stamp;
double last_time;
} tdm_client_wait_info;
static void
+_tdm_client_vblank_cb_stamp(void *data, struct wl_tdm_vblank *wl_tdm_vblank, uint32_t stamp)
+{
+ tdm_private_client_vblank *private_vblank = data;
+
+ TDM_RETURN_IF_FAIL(private_vblank != NULL);
+
+ private_vblank->stamp = stamp;
+}
+
+static void
_tdm_client_vblank_cb_done(void *data, struct wl_tdm_vblank *wl_tdm_vblank,
uint32_t req_id, uint32_t sequence, uint32_t tv_sec,
uint32_t tv_usec, uint32_t error)
}
static const struct wl_tdm_vblank_listener tdm_client_vblank_listener = {
+ _tdm_client_vblank_cb_stamp,
_tdm_client_vblank_cb_done,
};
tdm_client_vblank*
tdm_client_output_create_vblank(tdm_client_output *output, tdm_error *error)
{
+ tdm_private_client *private_client;
tdm_private_client_output *private_output;
tdm_private_client_vblank *private_vblank;
}
private_output = (tdm_private_client_output*)output;
+ private_client = private_output->private_client;
+
+ if (!private_client) {
+ TDM_ERR("'!private_client' failed");
+ if (error)
+ *error = TDM_ERROR_INVALID_PARAMETER;
+ return NULL;
+ }
private_vblank = calloc(1, sizeof *private_vblank);
if (!private_vblank) {
wl_tdm_vblank_add_listener(private_vblank->vblank,
&tdm_client_vblank_listener, private_vblank);
+ wl_display_roundtrip(private_client->display);
return (tdm_client_vblank*)private_vblank;
}
if (!private_vblank->started)
private_vblank->started = 1;
- if (private_output->watch_output_changes)
- if (private_output->dpms != TDM_OUTPUT_DPMS_ON && !private_vblank->enable_fake) {
- TDM_INFO("dpms off");
+ if (private_output->watch_output_changes && !private_vblank->enable_fake) {
+ if (private_output->connection == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) {
+ TDM_ERR("output disconnected");
+ return TDM_ERROR_OUTPUT_DISCONNECTED;
+ }
+ if (private_output->dpms != TDM_OUTPUT_DPMS_ON) {
+ TDM_ERR("dpms off");
return TDM_ERROR_DPMS_OFF;
}
+ }
w = calloc(1, sizeof *w);
if (!w) {
if (!private_vblank->started)
private_vblank->started = 1;
- if (private_output->watch_output_changes)
- if (private_output->dpms != TDM_OUTPUT_DPMS_ON && !private_vblank->enable_fake) {
- TDM_INFO("dpms off");
+ if (private_output->watch_output_changes && !private_vblank->enable_fake) {
+ if (private_output->connection == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) {
+ TDM_ERR("output disconnected");
+ return TDM_ERROR_OUTPUT_DISCONNECTED;
+ }
+ if (private_output->dpms != TDM_OUTPUT_DPMS_ON) {
+ TDM_ERR("dpms off");
return TDM_ERROR_DPMS_OFF;
}
+ }
w = calloc(1, sizeof *w);
if (!w) {