tdm_display_get_output(tdm_display *dpy, int index, tdm_error *error);
/**
+ * @brief Add a output create handler
+ * @param[in] output A output object
+ * @param[in] func A output create handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_display_add_output_create_handler(tdm_display *dpy,
+ tdm_output_create_handler func,
+ void *user_data);
+
+/**
+ * @brief Remove a output create handler
+ * @param[in] output A output object
+ * @param[in] func A output create handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+void
+tdm_display_remove_output_create_handler(tdm_display *dpy,
+ tdm_output_create_handler func,
+ void *user_data);
+
+/**
* @brief Find a output object which has the given name.
* @param[in] dpy A display object
* @param[in] name The name of a output object
const char **vendor, int *major, int *minor);
/**
+ * @brief Add a output destroy handler
+ * @param[in] output A output object
+ * @param[in] func A output destroy handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_output_add_destroy_handler(tdm_output *output,
+ tdm_output_destroy_handler func,
+ void *user_data);
+
+/**
+ * @brief Remove a output destroy handler
+ * @param[in] output A output object
+ * @param[in] func A output destroy handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+void
+tdm_output_remove_destroy_handler(tdm_output *output,
+ tdm_output_destroy_handler func,
+ void *user_data);
+
+/**
* @brief Get a backend module object of the given output.
* @param[in] output A output object
* @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
void *user_data);
/**
+ * @brief Add a output mode change handler
+ * @param[in] output A output object
+ * @param[in] func A output mode change handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_output_add_mode_change_request_handler(tdm_output *output,
+ tdm_output_mode_change_request_handler func,
+ void *user_data);
+
+/**
+ * @brief Remove a output mode change handler
+ * @param[in] output A output object
+ * @param[in] func A output mode change handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_output_remove_mode_change_request_handler(tdm_output *output,
+ tdm_output_mode_change_request_handler func,
+ void *user_data);
+
+/**
* @brief Get the connection type of a output object.
* @param[in] output A output object
* @param[out] type The connection type.
tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer);
/**
- * @brief Get the property which has a given id.
- * @param[in] hwc_window A hwc window object
+ * @brief Set the property which has a given id.
+ * @param[in] hwc_window A hwc window object
* @param[in] id The property id
- * @param[out] value The value of the propery id
+ * @param[in] value The value of the propery id
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
*/
tdm_error
-tdm_hwc_window_get_property(tdm_hwc_window *hwc_window, uint32_t id, tdm_value *value);
+tdm_hwc_window_set_property(tdm_hwc_window *hwc_window, uint32_t id, tdm_value value);
/**
- * @brief Set the property which has a given id.
- * @param[in] hwc_window A hwc window object
+ * @brief Get the property which has a given id.
+ * @param[in] hwc_window A hwc window object
* @param[in] id The property id
- * @param[in] value The value of the propery id
+ * @param[out] value The value of the propery id
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
*/
tdm_error
-tdm_hwc_window_set_property(tdm_hwc_window *hwc_window, uint32_t id, tdm_value value);
+tdm_hwc_window_get_property(tdm_hwc_window *hwc_window, uint32_t id, tdm_value *value);
/**
* @brief Get the constraints of hwc_window