virtual output: free memory for available modes when voutput is destroyed.
[platform/core/uifw/libtdm.git] / src / tdm_output.c
index a7813da..778dc6d 100644 (file)
@@ -1735,7 +1735,8 @@ tdm_output_set_available_mode(tdm_output *output, const tdm_output_mode *modes,
        _pthread_mutex_lock(&private_display->lock);
 
        func_output = &private_module->func_output;
-       ret = func_output->output_set_available_mode(private_output->output_backend, modes, count);
+       if (func_output->output_set_available_mode)
+               ret = func_output->output_set_available_mode(private_output->output_backend, modes, count);
 
        _pthread_mutex_unlock(&private_display->lock);
 
@@ -1759,7 +1760,52 @@ tdm_output_set_physical_size(tdm_output *output,  unsigned int mmwidth, unsigned
        _pthread_mutex_lock(&private_display->lock);
 
        func_output = &private_module->func_output;
-       ret = func_output->output_set_physical_size(private_output->output_backend, mmwidth, mmheight);
+       if (func_output->output_set_physical_size)
+               ret = func_output->output_set_physical_size(private_output->output_backend, mmwidth, mmheight);
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
+INTERN tdm_error
+tdm_output_set_connect(tdm_output *output)
+{
+       tdm_private_module *private_module = NULL;
+       tdm_func_output *func_output = NULL;
+
+       OUTPUT_FUNC_ENTRY();
+
+       private_module = private_output->private_module;
+       TDM_RETURN_VAL_IF_FAIL(private_module == private_display->virtual_module, TDM_ERROR_BAD_MODULE);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       func_output = &private_module->func_output;
+       if (func_output->output_set_connect)
+               ret = func_output->output_set_connect(private_output->output_backend);
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
+INTERN tdm_error
+tdm_output_set_disconnect(tdm_output *output)
+{
+       tdm_private_module *private_module = NULL;
+       tdm_func_output *func_output = NULL;
+
+       OUTPUT_FUNC_ENTRY();
+
+       private_module = private_output->private_module;
+       TDM_RETURN_VAL_IF_FAIL(private_module == private_display->virtual_module, TDM_ERROR_BAD_MODULE);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       func_output = &private_module->func_output;
+       if (func_output->output_set_disconnect)
+               ret = func_output->output_set_disconnect(private_output->output_backend);
 
        _pthread_mutex_unlock(&private_display->lock);