Send orientation changed event to each instances.
authorSung-jae Park <nicesj.park@samsung.com>
Tue, 21 Apr 2015 11:41:28 +0000 (20:41 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Tue, 21 Apr 2015 11:41:28 +0000 (20:41 +0900)
[model] Redwood,Kiran,B3(Wearable)
[binary_type] AP
[customer] Docomo/Orange/ATT/Open
[issue#] N/A
[problem]
[cause]
[solution]
[team] HomeTF
[request]
[horizontal_expansion]

Change-Id: I72f6da216caceda525609e2f63f7dd0b2e3f1b08

include/instance.h
src/instance.c
src/server.c

index bd354c4..f8e7f7b 100644 (file)
@@ -270,4 +270,8 @@ extern void instance_reload_period(struct inst_info *inst, double period);
  */
 extern struct packet *instance_duplicate_packet_create(const struct packet *packet, struct inst_info *inst, struct pkg_info *info, int width, int height);
 extern struct packet *instance_watch_create(const struct packet *packet, const char *pkgname, int width, int height);
+
+extern void instance_set_orientation(struct inst_info *inst, int orientation);
+extern int instance_orientation(struct inst_info *inst);
+
 /* End of a file */
index 6a0de22..bc9d324 100644 (file)
@@ -166,6 +166,7 @@ struct inst_info {
        Eina_List *delete_event_list;
 
        Eina_List *data_list;
+       int orientation;
 };
 
 static Eina_Bool update_timer_cb(void *data);
@@ -1922,7 +1923,7 @@ HAPI int instance_reactivate(struct inst_info *inst)
                break;
        }
 
-       packet = packet_create((const char *)&cmd, "sssiidssiisiis",
+       packet = packet_create((const char *)&cmd, "sssiidssiisiisi",
                        package_name(inst->info),
                        inst->id,
                        inst->content,
@@ -1935,7 +1936,8 @@ HAPI int instance_reactivate(struct inst_info *inst)
                        package_abi(inst->info),
                        inst->scroll_locked,
                        inst->active_update,
-                       client_direct_addr(inst->client));
+                       client_direct_addr(inst->client),
+                       inst->orientation);
        if (!packet) {
                ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
                return WIDGET_ERROR_FAULT;
@@ -1990,7 +1992,7 @@ HAPI int instance_activate(struct inst_info *inst)
                break;
        }
 
-       packet = packet_create((const char *)&cmd, "sssiidssisiis",
+       packet = packet_create((const char *)&cmd, "sssiidssisiisi",
                        package_name(inst->info),
                        inst->id,
                        inst->content,
@@ -2003,7 +2005,8 @@ HAPI int instance_activate(struct inst_info *inst)
                        package_abi(inst->info),
                        inst->widget.width,
                        inst->widget.height,
-                       client_direct_addr(inst->client));
+                       client_direct_addr(inst->client),
+                       inst->orientation);
        if (!packet) {
                ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
                return WIDGET_ERROR_FAULT;
@@ -3875,4 +3878,34 @@ HAPI struct client_node *instance_gbar_owner(struct inst_info *inst)
        return inst->gbar.owner;
 }
 
+HAPI void instance_set_orientation(struct inst_info *inst, int degree)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_ORIENTATION;
+
+       if (inst->orientation == degree) {
+               return;
+       }
+
+       inst->orientation = degree;
+
+       packet = packet_create_noack((const char *)&cmd, "ssi", package_name(inst->info), inst->id, degree);
+       if (!packet) {
+               ErrPrint("Failed to create a new packet\n");
+               return;
+       }
+
+       if (slave_rpc_request_only(package_slave(inst->info), package_name(inst->info), packet, 0) != WIDGET_ERROR_NONE) {
+               /* packet will be destroyed by slave_rpc_request_only if it fails */
+               ErrPrint("Failed to send a request\n");
+       }
+
+       return;
+}
+
+HAPI int instance_orientation(struct inst_info *inst)
+{
+       return inst->orientation;
+}
+
 /* End of a file */
index 63e4d7a..7486366 100644 (file)
@@ -3988,6 +3988,50 @@ out:
        return NULL;
 }
 
+static struct packet *client_orientation(pid_t pid, int handle, const struct packet *packet)
+{
+       struct client_node *client;
+       double timestamp;
+       int degree;
+       int ret;
+       struct pkg_info *pkg;
+       Eina_List *pkg_list;
+       Eina_List *l;
+       Eina_List *inst_list;
+       Eina_List *inst_l;
+       struct inst_info *inst;
+
+       client = client_find_by_rpc_handle(handle);
+       if (!client) {
+               ErrPrint("Client %d is not exist\n", pid);
+               goto out;
+       }
+
+       ret = packet_get(packet, "di", &timestamp, &degree);
+       if (ret != 2) {
+               ErrPrint("Invalid parameter\n");
+               goto out;
+       }
+
+       ret = 0;
+
+       pkg_list = (Eina_List *)package_list();
+
+       EINA_LIST_FOREACH(pkg_list, l, pkg) {
+               inst_list = package_instance_list(pkg);
+               EINA_LIST_FOREACH(inst_list, inst_l, inst) {
+                       if (instance_client(inst) == client || instance_has_client(inst, client)) {
+                               instance_set_orientation(inst, degree);
+                               ret++;
+                       }
+               }
+       }
+       DbgPrint("%d instances are affected (orientation: %d)\n", ret, degree);
+
+out:
+       return NULL;
+}
+
 static struct packet *client_gbar_key_up(pid_t pid, int handle, const struct packet *packet)
 {
        struct client_node *client;
@@ -9193,6 +9237,10 @@ static struct method s_client_table[] = {
                .handler = client_gbar_mouse_unset,
        },
        {
+               .cmd = CMD_STR_ORIENTATION,
+               .handler = client_orientation,
+       },
+       {
                .cmd = CMD_STR_CHANGE_VISIBILITY,
                .handler = client_change_visibility,
        },