enum instance_state state; /*!< Represents current state */
enum instance_state requested_state; /*!< Only ACTIVATED | DESTROYED is acceptable */
+ enum instance_destroy_type destroy_type;
int changing_state;
char *id;
inst->client_list = eina_list_remove(inst->client_list, client);
if (!inst->client_list && !inst->client) {
DbgPrint("Has no clients\n");
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
}
instance_unref(inst);
static int client_deactivated_cb(struct client_node *client, void *data)
{
struct inst_info *inst = data;
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
return LB_STATUS_SUCCESS;
}
if (package_add_instance(inst->info, inst) < 0) {
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_FAULT);
return NULL;
}
if (instance_activate(inst) < 0) {
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_FAULT);
inst = NULL;
}
info = inst->info;
instance_broadcast_deleted_event(inst);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
default:
/*!< Unable to reach here */
break;
info = inst->info;
instance_broadcast_deleted_event(inst);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
}
inst->state = INST_ACTIVATED;
switch (inst->requested_state) {
case INST_DESTROYED:
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
case INST_ACTIVATED:
inst->is_pinned_up = is_pinned_up;
info = inst->info;
instance_broadcast_deleted_event(inst);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
}
case INST_DESTROYED:
instance_unicast_deleted_event(inst, NULL);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
case INST_ACTIVATED:
default:
default:
instance_unicast_deleted_event(inst, NULL);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
}
return !!inst->lb.canvas.buffer;
}
-HAPI int instance_destroy(struct inst_info *inst)
+HAPI int instance_destroy(struct inst_info *inst, enum instance_destroy_type type)
{
struct packet *packet;
break;
}
- packet = packet_create("delete", "ss", package_name(inst->info), inst->id);
+ packet = packet_create("delete", "ssi", package_name(inst->info), inst->id, type);
if (!packet) {
ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
return LB_STATUS_ERROR_FAULT;
}
+ inst->destroy_type = type;
inst->requested_state = INST_DESTROYED;
inst->state = INST_REQUEST_TO_DESTROY;
inst->changing_state = 1;
DbgPrint("Send deleted event - unicast - %p\n", inst->client);
instance_unicast_deleted_event(inst, NULL);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
case INST_REQUEST_TO_REACTIVATE:
case INST_REQUEST_TO_DESTROY:
DbgPrint("Send deleted event - multicast\n");
instance_broadcast_deleted_event(inst);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
case INST_DESTROYED:
break;
default:
case INST_DESTROYED:
DbgPrint("Req. to DESTROYED (%s)\n", package_name(inst->info));
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
default:
break;
DbgPrint("Failed to reactivate the instance\n");
instance_broadcast_deleted_event(inst);
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
} else {
ret = 1;
}
case INST_DESTROYED:
DbgPrint("Req. to DESTROYED (%s)\n", package_name(inst->info));
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
ret = 1;
break;
default:
case INST_REQUEST_TO_DESTROY:
case INST_REQUEST_TO_ACTIVATE:
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
case INST_DESTROYED:
break;
case INST_DESTROYED:
DbgPrint("Req. to DESTROYED (%s)\n", package_name(inst->info));
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
default:
break;
case INST_DESTROYED:
DbgPrint("Req. to DESTROYED (%s)\n", package_name(inst->info));
instance_state_reset(inst);
- instance_destroy(inst);
+ instance_destroy(inst, INSTANCE_DESTROY_DEFAULT);
break;
default:
break;