Fix screen_connector_watcher_evas_add_by_rid bug 20/114120/6
authorHyunho Kang <hhstark.kang@samsung.com>
Fri, 10 Feb 2017 05:18:28 +0000 (14:18 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Mon, 13 Feb 2017 01:00:01 +0000 (10:00 +0900)
This API was designed for other viewer but implementation
was for main viewer

Change-Id: I1292fb070d5a1c298e0bc8750ae864ee9407cda5
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
screen_connector_watcher/include/screen_connector_watcher.h
screen_connector_watcher/src/screen_connector_watcher.c
screen_connector_watcher_evas/include/screen_connector_watcher_evas.h
screen_connector_watcher_evas/src/screen_connector_watcher_evas.c

index b1cfed7..223b850 100644 (file)
@@ -44,6 +44,7 @@ int screen_connector_watcher_update(const char *appid);
 char *screen_connector_watcher_get_appid(screen_connector_watcher_h h);
 int screen_connector_watcher_get_pid(screen_connector_watcher_h h);
 int screen_connector_watcher_get_resource_id(screen_connector_watcher_h h);
+int screen_connector_watcher_set_resource_id(screen_connector_watcher_h h, int rid);
 struct tizen_remote_surface *screen_connector_watcher_get_trs(screen_connector_watcher_h h);
 screen_connector_watcher_h screen_connector_watcher_create_handle(char *id, int pid, screen_connector_watcher_ops *ops, void *data);
 void screen_connector_watcher_redirect_surface(screen_connector_watcher_h watcher_h);
index fb76e57..dfec938 100644 (file)
@@ -330,6 +330,15 @@ EXPORT_API int screen_connector_watcher_get_resource_id(screen_connector_watcher
        return h->resource_id;
 }
 
+EXPORT_API int screen_connector_watcher_set_resource_id(screen_connector_watcher_h h, int rid)
+{
+       if (h == NULL)
+               return -1;
+
+       h->resource_id = rid;
+       return 0;
+}
+
 EXPORT_API struct tizen_remote_surface *screen_connector_watcher_get_trs(screen_connector_watcher_h h)
 {
        if (h == NULL)
index 117fea5..3e429cb 100644 (file)
@@ -65,8 +65,36 @@ int screen_connector_watcher_evas_freeze_visibility(Evas_Object *obj, visibility
 int screen_connector_watcher_evas_thaw_visibility(Evas_Object *obj);
 int screen_connector_watcher_evas_send_mouse_up(Evas_Object *obj);
 int screen_connector_watcher_evas_send_touch_cancel(Evas_Object *obj);
+
+/**
+ * @brief Add screen connector watcher by rid.
+ * @details Using this API, viewer can watch screen which already watched by other viewer.\n
+ * @since_tizen 3.0
+ * @param[in]  obj             screen image object
+ * @param[out] pid             screen provider pid
+ * @return     0 if success, negative value(<0) if fail
+ *
+ * @remark
+ *     This API is only for main viewer. \n
+ *     Sub viewer can not get provider's information like provider's pid by screen image object.
+ * @see screen_connector_watcher_evas_add_by_rid()
+*/
 int screen_connector_watcher_evas_get_pid(Evas_Object *obj, int *pid);
-int screen_connector_watcher_evas_add_by_rid(screen_connector_watcher_evas_ops *ops, int res_id, void *data);
+
+/**
+ * @brief Add screen connector watcher by rid.
+ * @details Using this API, viewer can watch screen which already watched by other viewer.\n
+ * @since_tizen 3.0
+ * @param[in]  ops             screen watcher evas callback handler function
+ * @param[in]  res_id          screen provider rid
+ * @param[in]  data            user-supplied data for watcher handler
+ * @return @c Not null on success
+ *
+ * @remark
+ *     This API is only for sub viewer. \n
+ *     Sub viewer can not get provider's information like provider's pid by screen image object.
+*/
+screen_connector_watcher_evas_h screen_connector_watcher_evas_add_by_rid(screen_connector_watcher_evas_ops *ops, int res_id, void *data);
 int screen_connector_watcher_evas_get_rid(Evas_Object *obj, int *resource_id);
 
 /**
index 00657af..3d0a25c 100644 (file)
@@ -693,14 +693,12 @@ EXPORT_API int screen_connector_watcher_evas_send_touch_cancel(Evas_Object *obj)
        return 0;
 }
 
-EXPORT_API int screen_connector_watcher_evas_add_by_rid(screen_connector_watcher_evas_ops *ops, int res_id, void *data)
+EXPORT_API screen_connector_watcher_evas_h screen_connector_watcher_evas_add_by_rid(screen_connector_watcher_evas_ops *ops,
+       int res_id, void *data)
 {
-       GHashTableIter iter;
-       gpointer key, value;
        screen_connector_watcher_evas_h watcher_evas_h;
-       screen_connector_watcher_evas_h cur_h = NULL;
        screen_connector_watcher_evas_ops *evas_ops;
-       char *appid = NULL;
+       char rid_str[32];
        int pid = 0;
        screen_connector_watcher_ops watcher_ops;
 
@@ -708,35 +706,28 @@ EXPORT_API int screen_connector_watcher_evas_add_by_rid(screen_connector_watcher
        watcher_ops.missing_cb = __watcher_missing_cb;
        watcher_ops.update_cb = __watcher_update_cb;
 
-       g_hash_table_iter_init(&iter, __watcher_tbl);
-       while (g_hash_table_iter_next(&iter, &key, &value)) {
-               cur_h = (screen_connector_watcher_evas_h)value;
-               if (screen_connector_watcher_get_resource_id(cur_h->watcher_h) == res_id) {
-                       appid = screen_connector_watcher_get_appid(cur_h->watcher_h);
-                       pid = screen_connector_watcher_get_pid(cur_h->watcher_h);
-                       break;
-               }
-       }
-
        evas_ops = (screen_connector_watcher_evas_ops *)calloc(1, sizeof(screen_connector_watcher_evas_ops));
        if (evas_ops == NULL) {
                LOGE("evas_ops calloc fail");
-               return -1;
+               return NULL;
        }
 
+       snprintf(rid_str, sizeof(rid_str), "%d", res_id);
        memcpy(evas_ops, ops, sizeof(screen_connector_watcher_evas_ops));
        watcher_evas_h = (screen_connector_watcher_evas_h)calloc(1, sizeof(struct _screen_connector_watcher_evas_h));
        if (watcher_evas_h == NULL) {
                LOGE("handle calloc fail");
                free(evas_ops);
-               return -1;
+               return NULL;
        }
+       watcher_evas_h->img_type = -1;
        watcher_evas_h->ops = evas_ops;
        watcher_evas_h->data = data;
-       watcher_evas_h->watcher_h = screen_connector_watcher_create_handle(appid, pid, &watcher_ops, watcher_evas_h);
+       watcher_evas_h->watcher_h = screen_connector_watcher_create_handle(rid_str, pid, &watcher_ops, watcher_evas_h);
+       screen_connector_watcher_set_resource_id(watcher_evas_h->watcher_h, res_id);
        screen_connector_watcher_redirect_surface(watcher_evas_h->watcher_h);
 
-       return 0;
+       return watcher_evas_h;
 }
 
 EXPORT_API int screen_connector_watcher_evas_get_rid(Evas_Object *obj, int *resource_id)
@@ -745,7 +736,7 @@ EXPORT_API int screen_connector_watcher_evas_get_rid(Evas_Object *obj, int *reso
 
        watcher_evas_h = (screen_connector_watcher_evas_h)g_hash_table_lookup(__watcher_tbl, obj);
        if (!watcher_evas_h) {
-               LOGE("unknown object. not widget object");
+               LOGE("unknown object.");
                return -1;
        }
        *resource_id = screen_connector_watcher_get_resource_id(watcher_evas_h->watcher_h);
@@ -759,7 +750,7 @@ EXPORT_API int screen_connector_watcher_evas_get_pid(Evas_Object *obj, int *pid)
 
        watcher_evas_h = (screen_connector_watcher_evas_h)g_hash_table_lookup(__watcher_tbl, obj);
        if (!watcher_evas_h) {
-               LOGE("unknown object. not widget object");
+               LOGE("unknown object.");
                return -1;
        }
        *pid = screen_connector_watcher_get_pid(watcher_evas_h->watcher_h);