return ret;
}
-static tdm_error
-_tdm_display_update_output(tdm_private_display *private_display,
+INTERN tdm_error
+tdm_display_update_output(tdm_private_display *private_display,
tdm_output *output_backend, int pipe)
{
tdm_func_output *func_output = &private_display->func_output;
LIST_INITHEAD(&private_output->change_handler_list_main);
LIST_INITHEAD(&private_output->change_handler_list_sub);
- if (func_output->output_set_status_handler)
+ if (func_output->output_set_status_handler) {
func_output->output_set_status_handler(private_output->output_backend,
tdm_output_cb_status,
private_output);
+ private_output->regist_change_cb = 1;
+ }
} else
_tdm_display_destroy_caps_output(&private_output->caps);
goto failed_update;
for (i = 0; i < output_count; i++) {
- ret = _tdm_display_update_output(private_display, outputs[i], i);
+ ret = tdm_display_update_output(private_display, outputs[i], i);
if (ret != TDM_ERROR_NONE)
goto failed_update;
}
return ret;
}
+static void
+_tdm_output_update(tdm_output *output_backend, void *user_data)
+{
+ tdm_private_display *private_display;
+ tdm_private_output *private_output = user_data;
+ tdm_error ret;
+
+ TDM_RETURN_IF_FAIL(private_output);
+
+ private_display = private_output->private_display;
+
+ ret = tdm_display_update_output(private_display, output_backend, private_output->pipe);
+ TDM_RETURN_IF_FAIL(ret == TDM_ERROR_NONE);
+}
+
INTERN void
tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status,
void *user_data)
tdm_thread_cb_output_status output_status;
tdm_error ret;
+ _tdm_output_update(output_backend, user_data);
+
output_status.base.type = TDM_THREAD_CB_OUTPUT_STATUS;
output_status.base.length = sizeof output_status;
output_status.output_stamp = private_output->stamp;
return;
}
+ if (!tdm_thread_is_running())
+ _tdm_output_update(output_backend, user_data);
+
value.u32 = status;
tdm_output_call_change_handler_internal(private_output,
&private_output->change_handler_list_main,
#define tdm_display_lock(dpy) _tdm_display_lock(dpy, __FUNCTION__)
#define tdm_display_unlock(dpy) _tdm_display_unlock(dpy, __FUNCTION__)
+tdm_error
+tdm_display_update_output(tdm_private_display *private_display,
+ tdm_output *output_backend, int pipe);
+
#ifdef __cplusplus
}
#endif