+ } else {
+ if (WIDGET_CONF_PREMULTIPLIED_COLOR) {
+ void *canvas;
+ int w, h;
+
+ // Get a pointer of a buffer of the virtual canvas
+ canvas = (void *)ecore_evas_buffer_pixels_get(info->ee);
+ if (!canvas) {
+ ErrPrint("Failed to get pixel canvas\n");
+ return;
+ }
+
+ ecore_evas_geometry_get(info->ee, NULL, NULL, &w, &h);
+ evas_data_argb_unpremul(canvas, w * h);
+ }
+
+ if (info->ctrl_mode.dump_to_file) {
+ void *canvas;
+ char fname[512];
+ int size;
+ int w, h;
+
+ canvas = (void *)ecore_evas_buffer_pixels_get(info->ee);
+ if (!canvas) {
+ ErrPrint("Failed to get pixel canvas\n");
+ return;
+ }
+
+ /**
+ * TODO
+ * Save to a file
+ */
+ ecore_evas_geometry_get(info->ee, NULL, NULL, &w, &h);
+ size = w * h * sizeof(int);
+
+ snprintf(fname, sizeof(fname) - 1, "/tmp/%s.%lf.raw", widget_util_basename(info->id), ecore_time_get());
+ dump_to_file(canvas, size, fname);
+ }
+
+ if (info->type == VWIN_GEM) {
+ widget_buffer_post_render(info->handle);
+ } else if (info->type == VWIN_SW_BUF) {
+ widget_viewer_sync_buffer(info->handle);
+ }
+ }
+}
+
+static int pre_ctrl_mode_cb(const char *id, void *data)
+{
+ vwin_info_t info = data;
+ const char *path;
+ int cmd;
+ int value;
+
+ /* Try provider_app first */
+ if (!info || info->state != VWIN_INFO_CREATED || !id || !info->id) {
+ return WIDGET_ERROR_INVALID_PARAMETER;