From c7a1b507fb88068dd7ea0ac9ad16ef0f108f3923 Mon Sep 17 00:00:00 2001 From: Sung-jae Park Date: Sat, 30 Mar 2013 02:51:21 +0000 Subject: [PATCH] Add new event path for holding scroller of viewer Viewer should holds the scroller when it gets this event. This hold scroll event is used for get request of boxes. Change-Id: I6f224fef0f601fcf2c2605b29ca8815ce915827a --- include/instance.h | 1 + src/instance.c | 20 +++++++++++++ src/server.c | 85 +++++++++++++++++++++++++++++++++++++----------------- 3 files changed, 79 insertions(+), 27 deletions(-) diff --git a/include/instance.h b/include/instance.h index 2da38f5..dc50fc1 100644 --- a/include/instance.h +++ b/include/instance.h @@ -154,6 +154,7 @@ extern int instance_client_pd_created(struct inst_info *inst, int status); extern int instance_set_pinup(struct inst_info *inst, int pinup); extern int instance_resize(struct inst_info *inst, int w, int h); +extern int instance_hold_scroll(struct inst_info *inst, int seize); extern int instance_set_period(struct inst_info *inst, double period); extern int instance_clicked(struct inst_info *inst, const char *event, double timestamp, double x, double y); extern int instance_text_signal_emit(struct inst_info *inst, const char *emission, const char *source, double sx, double sy, double ex, double ey); diff --git a/src/instance.c b/src/instance.c index 32bc3bd..cdc7823 100644 --- a/src/instance.c +++ b/src/instance.c @@ -94,6 +94,7 @@ struct inst_info { char *title; int is_pinned_up; double sleep_at; + int scroll_locked; enum livebox_visible_state visible; @@ -1506,6 +1507,25 @@ HAPI void instance_lb_updated_by_instance(struct inst_info *inst) (void)CLIENT_SEND_EVENT(inst, packet); } +HAPI int instance_hold_scroll(struct inst_info *inst, int hold) +{ + struct packet *packet; + + if (inst->scroll_locked == hold) { + DbgPrint("There is changes for hold state: %d\n", hold); + return LB_STATUS_ERROR_ALREADY; + } + + packet = packet_create_noack("scroll", "ssi", package_name(inst->info), inst->id, hold); + if (!packet) { + ErrPrint("Failed to build a packet\n"); + return LB_STATUS_ERROR_FAULT; + } + + inst->scroll_locked = hold; + return CLIENT_SEND_EVENT(inst, packet); +} + HAPI void instance_pd_updated_by_instance(struct inst_info *inst, const char *descfile) { struct packet *packet; diff --git a/src/server.c b/src/server.c index 10047d7..a0003ef 100644 --- a/src/server.c +++ b/src/server.c @@ -4578,7 +4578,6 @@ static struct packet *slave_faulted(pid_t pid, int handle, const struct packet * { struct slave_node *slave; struct inst_info *inst; - const char *slavename; const char *pkgname; const char *id; const char *func; @@ -4590,14 +4589,14 @@ static struct packet *slave_faulted(pid_t pid, int handle, const struct packet * goto out; } - ret = packet_get(packet, "ssss", &slavename, &pkgname, &id, &func); - if (ret != 4) { + ret = packet_get(packet, "sss", &pkgname, &id, &func); + if (ret != 3) { ErrPrint("Parameter is not matched\n"); goto out; } ret = fault_info_set(slave, pkgname, id, func); - DbgPrint("Slave Faulted: %s (%d)\n", slavename, ret); + DbgPrint("Slave Faulted: %s (%d)\n", slave_name(slave), ret); inst = package_find_instance_by_id(pkgname, id); if (!inst) { @@ -4616,7 +4615,6 @@ out: static struct packet *slave_call(pid_t pid, int handle, const struct packet *packet) /* slave_name, pkgname, filename, function, ret */ { struct slave_node *slave; - const char *slavename; const char *pkgname; const char *id; const char *func; @@ -4628,8 +4626,8 @@ static struct packet *slave_call(pid_t pid, int handle, const struct packet *pac goto out; } - ret = packet_get(packet, "ssss", &slavename, &pkgname, &id, &func); - if (ret != 4) { + ret = packet_get(packet, "sss", &pkgname, &id, &func); + if (ret != 3) { ErrPrint("Parameter is not matched\n"); goto out; } @@ -4644,7 +4642,6 @@ out: static struct packet *slave_ret(pid_t pid, int handle, const struct packet *packet) /* slave_name, pkgname, filename, function, ret */ { struct slave_node *slave; - const char *slavename; const char *pkgname; const char *id; const char *func; @@ -4656,8 +4653,8 @@ static struct packet *slave_ret(pid_t pid, int handle, const struct packet *pack goto out; } - ret = packet_get(packet, "ssss", &slavename, &pkgname, &id, &func); - if (ret != 4) { + ret = packet_get(packet, "sss", &pkgname, &id, &func); + if (ret != 3) { ErrPrint("Parameter is not matched\n"); goto out; } @@ -4672,7 +4669,6 @@ out: static struct packet *slave_updated(pid_t pid, int handle, const struct packet *packet) /* slave_name, pkgname, filename, width, height, priority, ret */ { struct slave_node *slave; - const char *slavename; const char *pkgname; const char *id; const char *content_info; @@ -4689,10 +4685,10 @@ static struct packet *slave_updated(pid_t pid, int handle, const struct packet * goto out; } - ret = packet_get(packet, "sssiidss", &slavename, &pkgname, &id, + ret = packet_get(packet, "ssiidss", &pkgname, &id, &w, &h, &priority, &content_info, &title); - if (ret != 8) { + if (ret != 7) { ErrPrint("Parameter is not matched\n"); goto out; } @@ -4737,10 +4733,45 @@ out: return NULL; } +static struct packet *slave_hold_scroll(pid_t pid, int handle, const struct packet *packet) +{ + struct slave_node *slave; + struct inst_info *inst; + const char *pkgname; + const char *id; + int seize; + int ret; + + slave = slave_find_by_pid(pid); + if (!slave) { + ErrPrint("Slave %d is not exists\n", pid); + goto out; + } + + ret = packet_get(packet, "ssi", &pkgname, &id, &seize); + if (ret != 3) { + ErrPrint("Parameter is not matched\n"); + goto out; + } + + inst = package_find_instance_by_id(pkgname, id); + if (!inst) { + ErrPrint("No such instance(%s)\n", id); + } else if (package_is_fault(instance_package(inst))) { + ErrPrint("Faulted instance cannot seize the screen\n"); + } else if (instance_state(inst) == INST_DESTROYED) { + ErrPrint("Instance(%s) is already destroyed\n", id); + } else { + (void)instance_hold_scroll(inst, seize); + } + +out: + return NULL; +} + static struct packet *slave_desc_updated(pid_t pid, int handle, const struct packet *packet) /* slave_name, pkgname, filename, decsfile, ret */ { struct slave_node *slave; - const char *slavename; const char *pkgname; const char *id; const char *descfile; @@ -4753,8 +4784,8 @@ static struct packet *slave_desc_updated(pid_t pid, int handle, const struct pac goto out; } - ret = packet_get(packet, "ssss", &slavename, &pkgname, &id, &descfile); - if (ret != 4) { + ret = packet_get(packet, "sss", &pkgname, &id, &descfile); + if (ret != 3) { ErrPrint("Parameter is not matched\n"); goto out; } @@ -4793,7 +4824,6 @@ out: static struct packet *slave_deleted(pid_t pid, int handle, const struct packet *packet) /* slave_name, pkgname, id, ret */ { struct slave_node *slave; - const char *slavename; const char *pkgname; const char *id; int ret; @@ -4805,8 +4835,8 @@ static struct packet *slave_deleted(pid_t pid, int handle, const struct packet * goto out; } - ret = packet_get(packet, "sss", &slavename, &pkgname, &id); - if (ret != 3) { + ret = packet_get(packet, "ss", &pkgname, &id); + if (ret != 2) { ErrPrint("Parameter is not matched\n"); goto out; } @@ -4829,7 +4859,6 @@ out: static struct packet *slave_acquire_buffer(pid_t pid, int handle, const struct packet *packet) /* type, id, w, h, size */ { enum target_type target; - const char *slavename; const char *pkgname; const char *id; int w; @@ -4849,8 +4878,8 @@ static struct packet *slave_acquire_buffer(pid_t pid, int handle, const struct p goto out; } - ret = packet_get(packet, "isssiii", &target, &slavename, &pkgname, &id, &w, &h, &pixel_size); - if (ret != 7) { + ret = packet_get(packet, "issiii", &target, &pkgname, &id, &w, &h, &pixel_size); + if (ret != 6) { ErrPrint("Invalid argument\n"); id = ""; ret = LB_STATUS_ERROR_INVALID; @@ -4961,7 +4990,6 @@ static struct packet *slave_resize_buffer(pid_t pid, int handle, const struct pa struct slave_node *slave; struct packet *result; enum target_type type; - const char *slavename; const char *pkgname; const char *id; int w; @@ -4985,8 +5013,8 @@ static struct packet *slave_resize_buffer(pid_t pid, int handle, const struct pa goto out; } - ret = packet_get(packet, "isssii", &type, &slavename, &pkgname, &id, &w, &h); - if (ret != 6) { + ret = packet_get(packet, "issii", &type, &pkgname, &id, &w, &h); + if (ret != 5) { ErrPrint("Invalid argument\n"); ret = LB_STATUS_ERROR_INVALID; id = ""; @@ -5066,7 +5094,6 @@ out: static struct packet *slave_release_buffer(pid_t pid, int handle, const struct packet *packet) { enum target_type type; - const char *slavename; const char *pkgname; const char *id; struct packet *result; @@ -5081,7 +5108,7 @@ static struct packet *slave_release_buffer(pid_t pid, int handle, const struct p goto out; } - if (packet_get(packet, "isss", &type, &slavename, &pkgname, &id) != 4) { + if (packet_get(packet, "iss", &type, &pkgname, &id) != 3) { ErrPrint("Inavlid argument\n"); ret = LB_STATUS_ERROR_INVALID; goto out; @@ -5871,6 +5898,10 @@ static struct method s_slave_table[] = { .handler = slave_faulted, /* slave_name, pkgname, id, funcname */ }, { + .cmd = "scroll", + .handler = slave_hold_scroll, /* slave_name, pkgname, id, seize */ + }, + { .cmd = NULL, .handler = NULL, }, -- 2.7.4