clouseau: Stable version with BMP support Canceled BMP eet encoding Need to remove bmp_req list from daemon, no longer needed
Signed-off-by: Aharon Hillel <a.hillel@samsung.com> SVN revision: 72340
This commit is contained in:
parent
998b191818
commit
5ebf435070
|
@ -106,7 +106,7 @@ _add(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Server_Add *e
|
|||
if (svr)
|
||||
{
|
||||
connect_st t = { getpid(), __FILE__ };
|
||||
p = packet_compose(GUI_CLIENT_CONNECT, &t, sizeof(t), &size);
|
||||
p = packet_compose(GUI_CLIENT_CONNECT, &t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(ev->server, 0,0,0,0,EINA_FALSE, p, size);
|
||||
|
@ -259,7 +259,9 @@ _close_app_views(app_info_st *app, Eina_Bool clr)
|
|||
EINA_LIST_FREE(app->view, view)
|
||||
{ /* Free memory allocated to show any app screens */
|
||||
bmp_info_st *b = view->data;
|
||||
bmp_info_free(b->bmp);
|
||||
if (b->bmp)
|
||||
free(b->bmp);
|
||||
|
||||
variant_free(view);
|
||||
}
|
||||
|
||||
|
@ -367,7 +369,9 @@ _remove_bmp(Eina_List *view, void *ptr)
|
|||
if (st->win)
|
||||
evas_object_del(st->win);
|
||||
|
||||
bmp_info_free(st->bmp);
|
||||
if (st->bmp)
|
||||
free(st->bmp);
|
||||
|
||||
variant_free(v);
|
||||
return eina_list_remove(view, v);
|
||||
}
|
||||
|
@ -410,7 +414,9 @@ _free_app(app_data_st *st)
|
|||
if (b->win)
|
||||
evas_object_del(b->win);
|
||||
|
||||
bmp_info_free(b->bmp);
|
||||
if (b->bmp)
|
||||
free(b->bmp);
|
||||
|
||||
variant_free(view);
|
||||
}
|
||||
|
||||
|
@ -528,6 +534,20 @@ static void
|
|||
_add_bmp(gui_elements *g EINA_UNUSED, Variant_st *v)
|
||||
{ /* Remove bmp if exists (according to obj-ptr), then add the new one */
|
||||
bmp_info_st *st = v->data;
|
||||
|
||||
if (!st->bmp)
|
||||
{ /* We consider a case out request will be answered with empty bmp
|
||||
this may happen if we have a sub-window of app
|
||||
(like checks in elementary test)
|
||||
if the user closed it just as we send our BMP_REQ
|
||||
this Evas is no longer valid and we get NULL ptr for BMP.
|
||||
This code ignores this case. */
|
||||
elm_progressbar_pulse(g->pb, EINA_FALSE);
|
||||
evas_object_hide(g->pb);
|
||||
variant_free(v);
|
||||
return;
|
||||
}
|
||||
|
||||
app_data_st *app = (app_data_st *)
|
||||
eina_list_search_unsorted(apps, _app_ptr_cmp,
|
||||
(void *) (uintptr_t) st->app);
|
||||
|
@ -542,7 +562,7 @@ _add_bmp(gui_elements *g EINA_UNUSED, Variant_st *v)
|
|||
|
||||
app_info_st *info = app->app->data;
|
||||
info->view = _remove_bmp(info->view,
|
||||
(void *) (uintptr_t) (((bmp_info_st *) v->data)->object));
|
||||
(void *) (uintptr_t) (st->object));
|
||||
info->view = eina_list_append(info->view, v);
|
||||
|
||||
/* Now we need to update refresh button, make it open-window */
|
||||
|
@ -562,7 +582,9 @@ _add_bmp(gui_elements *g EINA_UNUSED, Variant_st *v)
|
|||
else
|
||||
{ /* Dispose bmp info if app no longer in the list of apps */
|
||||
/* or the bmp_info is no longer relevant */
|
||||
bmp_info_free(((bmp_info_st *) v->data)->bmp);
|
||||
if (st->bmp)
|
||||
free(st->bmp);
|
||||
|
||||
variant_free(v);
|
||||
}
|
||||
}
|
||||
|
@ -588,15 +610,15 @@ _open_app_window(bmp_info_st *st, Evas_Object *bt, Tree_Item *treeit)
|
|||
elm_object_disabled_set(bt, EINA_TRUE);
|
||||
evas_object_image_colorspace_set(o, EVAS_COLORSPACE_ARGB8888);
|
||||
evas_object_image_alpha_set(o, EINA_FALSE);
|
||||
evas_object_image_size_set(o, st->bmp->w, st->bmp->h);
|
||||
evas_object_image_data_copy_set(o, st->bmp->bmp);
|
||||
evas_object_image_data_update_add(o, 0, 0, st->bmp->w, st->bmp->h);
|
||||
evas_object_image_size_set(o, st->w, st->h);
|
||||
evas_object_image_data_copy_set(o, st->bmp);
|
||||
evas_object_image_data_update_add(o, 0, 0, st->w, st->h);
|
||||
evas_object_show(o);
|
||||
evas_object_smart_callback_add(st->win,
|
||||
"delete,request", _app_win_del, st);
|
||||
|
||||
evas_object_resize(o, st->bmp->w, st->bmp->h);
|
||||
evas_object_resize(st->win, st->bmp->w, st->bmp->h);
|
||||
evas_object_resize(o, st->w, st->h);
|
||||
evas_object_resize(st->win, st->w, st->h);
|
||||
|
||||
elm_win_autodel_set(st->win, EINA_TRUE);
|
||||
evas_object_show(st->win);
|
||||
|
@ -623,7 +645,7 @@ _show_app_window(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|||
(unsigned long long) (uintptr_t) st->ptr,
|
||||
(unsigned long long) (uintptr_t) treeit->ptr, st->refresh_ctr };
|
||||
|
||||
void *p = packet_compose(BMP_REQ, &t, sizeof(t), &size);
|
||||
void *p = packet_compose(BMP_REQ, &t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(svr,
|
||||
|
@ -923,7 +945,7 @@ _gl_selected(void *data EINA_UNUSED, Evas_Object *pobj EINA_UNUSED,
|
|||
|
||||
if (svr)
|
||||
{
|
||||
void *p = packet_compose(HIGHLIGHT, &st, sizeof(st), &size);
|
||||
void *p = packet_compose(HIGHLIGHT, &st, sizeof(st), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(svr,
|
||||
|
@ -969,7 +991,8 @@ _load_list(gui_elements *g)
|
|||
data_req_st t = { (unsigned long long) (uintptr_t) NULL,
|
||||
(unsigned long long) (uintptr_t) st->ptr };
|
||||
|
||||
void *p = packet_compose(DATA_REQ, &t, sizeof(t), &size);
|
||||
void *p = packet_compose(DATA_REQ, &t, sizeof(t), &size,
|
||||
NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
elm_progressbar_pulse(g->pb, EINA_TRUE);
|
||||
|
|
|
@ -172,7 +172,7 @@ _del(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Del *e
|
|||
app_closed_st t = { (unsigned long long) (uintptr_t) ev->client };
|
||||
Eina_List *l;
|
||||
int size;
|
||||
void *p = packet_compose(APP_CLOSED, &t, sizeof(t), &size);
|
||||
void *p = packet_compose(APP_CLOSED, &t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
EINA_LIST_FOREACH(gui, l, i)
|
||||
|
@ -225,7 +225,7 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
(unsigned long long) (uintptr_t) ev->client, NULL, 0 };
|
||||
|
||||
app = _add_client(app, t, ev->client);
|
||||
p = packet_compose(APP_ADD, &m, sizeof(m), &size);
|
||||
p = packet_compose(APP_ADD, &m, sizeof(m), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
EINA_LIST_FOREACH(gui, l, st)
|
||||
|
@ -250,7 +250,8 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
gui = _add_client(gui, t, ev->client);
|
||||
EINA_LIST_FOREACH(app, l, st)
|
||||
{ /* Add all registered apps to newly open GUI */
|
||||
p = packet_compose(APP_ADD, st, sizeof(app_info_st), &size);
|
||||
p = packet_compose(APP_ADD, st, sizeof(*st), &size,
|
||||
NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_client_send(ev->client,
|
||||
|
@ -277,7 +278,7 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
(unsigned long long) (uintptr_t) req->app };
|
||||
|
||||
p = packet_compose(DATA_REQ,
|
||||
&t, sizeof(t), &size);
|
||||
&t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_client_send(
|
||||
|
@ -301,7 +302,7 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
{
|
||||
t.app = (unsigned long long) (uintptr_t) st->ptr;
|
||||
p = packet_compose(DATA_REQ,
|
||||
&t, sizeof(t), &size);
|
||||
&t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_client_send(
|
||||
|
@ -375,7 +376,7 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
req->app, req->object, req->ctr };
|
||||
|
||||
p = packet_compose(BMP_REQ,
|
||||
&t, sizeof(t), &size);
|
||||
&t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{ /* FWD req to app with client data */
|
||||
ecore_ipc_client_send(
|
||||
|
@ -419,7 +420,8 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Client_Data
|
|||
}
|
||||
}
|
||||
|
||||
bmp_info_free(st->bmp);
|
||||
if (st->bmp)
|
||||
free(st->bmp);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -111,13 +111,6 @@ _variant_type_set(const char *type,
|
|||
return EINA_TRUE;
|
||||
} /* _variant_type_set */
|
||||
|
||||
void
|
||||
bmp_info_free(Bmp_Data *bmp)
|
||||
{
|
||||
free(bmp->bmp);
|
||||
free(bmp);
|
||||
}
|
||||
|
||||
void
|
||||
variant_free(Variant_st *v)
|
||||
{
|
||||
|
@ -189,25 +182,6 @@ data_req_desc_make(void)
|
|||
return d;
|
||||
}
|
||||
|
||||
Eet_Data_Descriptor *
|
||||
bmp_data_desc_make(void)
|
||||
{
|
||||
Eet_Data_Descriptor *d;
|
||||
|
||||
Eet_Data_Descriptor_Class eddc;
|
||||
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Bmp_Data);
|
||||
d = eet_data_descriptor_stream_new(&eddc);
|
||||
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC_VAR_ARRAY(d, Bmp_Data,
|
||||
"bmp", bmp, EET_T_UCHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, Bmp_Data,
|
||||
"w", w, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, Bmp_Data,
|
||||
"h", h, EET_T_INT);
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
Eet_Data_Descriptor *
|
||||
bmp_info_desc_make(void)
|
||||
{
|
||||
|
@ -224,10 +198,11 @@ bmp_info_desc_make(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, bmp_info_st,
|
||||
"object", object, EET_T_ULONG_LONG);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, bmp_info_st, "ctr",
|
||||
ctr, EET_T_UINT);
|
||||
|
||||
EET_DATA_DESCRIPTOR_ADD_SUB(d, bmp_info_st, "bmp",
|
||||
bmp, desc->bmp_data); /* Carefull - init this first */
|
||||
ctr, EET_T_ULONG_LONG);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, bmp_info_st, "w",
|
||||
w, EET_T_ULONG_LONG);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC (d, bmp_info_st, "h",
|
||||
h, EET_T_ULONG_LONG);
|
||||
|
||||
return d;
|
||||
}
|
||||
|
@ -341,7 +316,6 @@ data_descriptors_init(void)
|
|||
|
||||
Eet_Data_Descriptor_Class eddc;
|
||||
|
||||
desc->bmp_data = bmp_data_desc_make();
|
||||
desc->bmp_req = bmp_req_desc_make();
|
||||
desc->bmp_info = bmp_info_desc_make();
|
||||
desc->obj_info = Obj_Information_desc_make();
|
||||
|
@ -412,7 +386,6 @@ data_descriptors_shutdown(void)
|
|||
eet_data_descriptor_free(desc->obj_info);
|
||||
eet_data_descriptor_free(desc->_variant_descriptor );
|
||||
eet_data_descriptor_free(desc->_variant_unified_descriptor);
|
||||
eet_data_descriptor_free(desc->bmp_data);
|
||||
eet_data_descriptor_free(desc->bmp_req);
|
||||
eet_data_descriptor_free(desc->bmp_info);
|
||||
|
||||
|
@ -421,34 +394,115 @@ data_descriptors_shutdown(void)
|
|||
}
|
||||
}
|
||||
|
||||
void *
|
||||
packet_compose(message_type t, void *data, int data_size, int *size)
|
||||
{ /* Returns packet BLOB and size in size param, NULL on failure */
|
||||
/* Packet is composed of message type + ptr to data */
|
||||
data_desc *d = data_descriptors_init();
|
||||
Variant_st *v = variant_alloc(t, data_size, data);
|
||||
void *p = eet_data_descriptor_encode(d->_variant_descriptor , v, size);
|
||||
variant_free(v);
|
||||
enum _bmp_field_idx
|
||||
{ /* Index for bmp_info_st fields to be stored in BLOB */
|
||||
gui = 0,
|
||||
app,
|
||||
object,
|
||||
ctr,
|
||||
w,
|
||||
h,
|
||||
top_idx /* Used for allocation */
|
||||
};
|
||||
typedef enum _bmp_field_idx bmp_field_idx;
|
||||
|
||||
/* printf("%s size=<%d>\n", __func__, *size); */
|
||||
return p; /* User has to free(p) */
|
||||
void *
|
||||
packet_compose(message_type t, void *data,
|
||||
int data_size, int *size,
|
||||
void *blob, int blob_size)
|
||||
{ /* Returns packet BLOB and size in size param, NULL on failure */
|
||||
/* Packet is composed of packet type BYTE + packet data. */
|
||||
void *p = NULL;
|
||||
void *pb = NULL;
|
||||
unsigned char p_type = VARIANT_PACKET;
|
||||
|
||||
switch (t)
|
||||
{
|
||||
case BMP_DATA:
|
||||
{ /* Builed raw data without encoding */
|
||||
/* Do NOT forget to update *size, allocate using p */
|
||||
bmp_info_st *b = data;
|
||||
*size = (top_idx * sizeof(unsigned long long)) + blob_size;
|
||||
unsigned long long *longs = malloc(*size);
|
||||
|
||||
longs[gui] = b->gui;
|
||||
longs[app] = b->app;
|
||||
longs[object] = b->object;
|
||||
longs[ctr] = b->ctr;
|
||||
longs[w] = b->w;
|
||||
longs[h] = b->h;
|
||||
|
||||
if (blob)
|
||||
memcpy(&longs[top_idx], blob, blob_size); /* Copy BMP info */
|
||||
|
||||
p_type = BMP_RAW_DATA;
|
||||
p = longs;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{ /* All others are variant packets with EET encoding */
|
||||
/* Variant is composed of message type + ptr to data */
|
||||
data_desc *d = data_descriptors_init();
|
||||
Variant_st *v = variant_alloc(t, data_size, data);
|
||||
p = eet_data_descriptor_encode(
|
||||
d->_variant_descriptor , v, size);
|
||||
variant_free(v);
|
||||
}
|
||||
}
|
||||
|
||||
pb = malloc((*size) + 1);
|
||||
*((unsigned char *) pb) = p_type;
|
||||
memcpy(((char *) pb) + 1, p, *size);
|
||||
*size = (*size) + 1; /* Add space for packet type */
|
||||
free(p);
|
||||
|
||||
return pb; /* User has to free(pb) */
|
||||
}
|
||||
|
||||
Variant_st *
|
||||
packet_info_get(void *data, int size)
|
||||
{ /* user has to use variant_free() to free return struct */
|
||||
data_desc *d = data_descriptors_init();
|
||||
return eet_data_descriptor_decode(d->_variant_descriptor, data, size);
|
||||
char *ch = data;
|
||||
switch (*ch)
|
||||
{
|
||||
case BMP_RAW_DATA:
|
||||
{
|
||||
void *bmp = NULL;
|
||||
unsigned long long *longs = (unsigned long long *) (ch + 1);
|
||||
/* Allocate size minus longs array and ch size for bmp */
|
||||
int blob_size = size - (((char *) (&longs[top_idx])) - ch);
|
||||
|
||||
if (blob_size)
|
||||
{ /* Allocate BMP only if was included in packet */
|
||||
bmp = malloc(blob_size);
|
||||
memcpy(bmp, &longs[top_idx], blob_size);
|
||||
}
|
||||
bmp_info_st t = { longs[gui], longs[app], longs[object],
|
||||
longs[ctr], longs[w], longs[h], NULL, NULL, bmp };
|
||||
|
||||
/* User have to free both: variant_free(rt), free(t->bmp) */
|
||||
return variant_alloc(BMP_DATA, sizeof(t), &t);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
data_desc *d = data_descriptors_init();
|
||||
return eet_data_descriptor_decode(d->_variant_descriptor,
|
||||
ch + 1, size - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Eina_Bool eet_info_save(const char *filename,
|
||||
app_info_st *app, tree_data_st *ftd)
|
||||
app_info_st *a, tree_data_st *ftd)
|
||||
{
|
||||
data_desc *d = data_descriptors_init();
|
||||
Eet_File *fp = eet_open(filename, EET_FILE_MODE_WRITE);
|
||||
if (fp)
|
||||
{
|
||||
eet_data_write(fp, d->app_add, APP_ADD_ENTRY, app, EINA_TRUE);
|
||||
eet_data_write(fp, d->app_add, APP_ADD_ENTRY, a, EINA_TRUE);
|
||||
eet_data_write(fp, d->tree_data, TREE_DATA_ENTRY, ftd, EINA_TRUE);
|
||||
|
||||
eet_close(fp);
|
||||
|
@ -460,13 +514,13 @@ Eina_Bool eet_info_save(const char *filename,
|
|||
}
|
||||
|
||||
Eina_Bool eet_info_read(const char *filename,
|
||||
app_info_st **app, tree_data_st **ftd)
|
||||
app_info_st **a, tree_data_st **ftd)
|
||||
{
|
||||
data_desc *d = data_descriptors_init();
|
||||
Eet_File *fp = eet_open(filename, EET_FILE_MODE_READ);
|
||||
if (fp)
|
||||
{
|
||||
*app = eet_data_read(fp, d->app_add, APP_ADD_ENTRY);
|
||||
*a = eet_data_read(fp, d->app_add, APP_ADD_ENTRY);
|
||||
*ftd = eet_data_read(fp, d->tree_data, TREE_DATA_ENTRY);
|
||||
|
||||
eet_close(fp);
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
#define LOCALHOST "127.0.0.1"
|
||||
#define LISTEN_IP "0.0.0.0" /* Avail all, no mask */
|
||||
|
||||
/* Define packet types, used by packet encode / decode */
|
||||
#define VARIANT_PACKET 0
|
||||
#define BMP_RAW_DATA 1
|
||||
|
||||
|
||||
#define DESC_ADD_BASIC(desc, type, member, eet_type) \
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC \
|
||||
(desc, type, #member, member, eet_type)
|
||||
|
@ -35,7 +40,7 @@ enum _message_type
|
|||
APP_CLOSED, /* APP client PTR from DAEMON to GUI */
|
||||
HIGHLIGHT, /* APP client PTR, object PTR */
|
||||
BMP_REQ, /* APP client PTR, object PTR */
|
||||
BMP_DATA /* APP client PTR, object PTR, Bmp_Data */
|
||||
BMP_DATA /* bmp_info_st header + BMP raw data */
|
||||
};
|
||||
typedef enum _message_type message_type;
|
||||
|
||||
|
@ -109,14 +114,18 @@ struct _bmp_req_st
|
|||
typedef struct _bmp_req_st bmp_req_st;
|
||||
|
||||
struct _bmp_info_st
|
||||
{ /* This will be used to send app window Bitmap */
|
||||
unsigned long long gui; /* (void *) client ptr of GUI */
|
||||
unsigned long long app; /* (void *) client ptr of APP */
|
||||
unsigned long long object; /* (void *) object ptr of evas */
|
||||
unsigned int ctr; /* Reload counter to match */
|
||||
Evas_Object *win; /* Window of view if open */
|
||||
Evas_Object *bt; /* Button opening win */
|
||||
Bmp_Data *bmp;
|
||||
{ /* This will be used to send app window Bitmap */
|
||||
/* We are using ULONGLONG because we send this as RAW data */
|
||||
/* win, bt are NOT transferred. */
|
||||
unsigned long long gui; /* (void *) client ptr of GUI */
|
||||
unsigned long long app; /* (void *) client ptr of APP */
|
||||
unsigned long long object; /* (void *) object ptr of evas */
|
||||
unsigned long long ctr; /* Reload counter to match */
|
||||
unsigned long long w; /* BMP width, make Evas_Coord */
|
||||
unsigned long long h; /* BMP hight, make Evas_Coord */
|
||||
Evas_Object *win; /* Window of view if open */
|
||||
Evas_Object *bt; /* Button opening win */
|
||||
void *bmp; /* Bitmap BLOB, size (w * h * sizeof(int)) */
|
||||
};
|
||||
typedef struct _bmp_info_st bmp_info_st;
|
||||
|
||||
|
@ -165,12 +174,11 @@ void item_tree_free(Eina_List *tree);
|
|||
void _item_tree_item_string(Tree_Item *parent);
|
||||
data_desc *data_descriptors_init(void);
|
||||
void data_descriptors_shutdown(void);
|
||||
void bmp_info_free(Bmp_Data *bmp);
|
||||
void variant_free(Variant_st *v);
|
||||
Variant_st *variant_alloc(message_type t, size_t size, void *info);
|
||||
message_type packet_mapping_type_get(const char *name);
|
||||
const char *packet_mapping_type_str_get(message_type t);
|
||||
void *packet_compose(message_type t, void *data, int data_size, int *size);
|
||||
void *packet_compose(message_type t, void *data, int data_size, int *size, void *blob, int blob_size);
|
||||
Variant_st *packet_info_get(void *data, int size);
|
||||
Eina_Bool eet_info_save(const char *filename, app_info_st *app, tree_data_st *ftd);
|
||||
Eina_Bool eet_info_read(const char *filename, app_info_st **app, tree_data_st **ftd);
|
||||
|
|
|
@ -44,10 +44,9 @@ libclouseau_item_add(Evas_Object *o, Tree_Item *parent)
|
|||
eina_list_free(children);
|
||||
}
|
||||
|
||||
static Bmp_Data *
|
||||
_canvas_bmp_get(Ecore_Evas *ee)
|
||||
static void *
|
||||
_canvas_bmp_get(Ecore_Evas *ee, Evas_Coord *w_out, Evas_Coord *h_out)
|
||||
{
|
||||
Bmp_Data *rt = NULL;
|
||||
Ecore_X_Image *img;
|
||||
Ecore_X_Window_Attributes att;
|
||||
unsigned char *src;
|
||||
|
@ -59,7 +58,8 @@ _canvas_bmp_get(Ecore_Evas *ee)
|
|||
if (!xwin)
|
||||
{
|
||||
printf("Can't grab X window.\n");
|
||||
return rt;
|
||||
*w_out = *h_out = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Evas *e = ecore_evas_get(ee);
|
||||
|
@ -84,14 +84,9 @@ _canvas_bmp_get(Ecore_Evas *ee)
|
|||
|
||||
/* dst now holds window bitmap */
|
||||
ecore_x_image_free(img);
|
||||
|
||||
rt = malloc(sizeof(*rt)); /* Will be freed by the user */
|
||||
rt->bmp = (unsigned char *) dst;
|
||||
rt->bmp_count = (w * h * sizeof(int));
|
||||
rt->w = w;
|
||||
rt->h = h;
|
||||
|
||||
return rt;
|
||||
*w_out = w;
|
||||
*h_out = h;
|
||||
return (void *) dst;
|
||||
}
|
||||
|
||||
static Eina_List *
|
||||
|
@ -145,7 +140,7 @@ _add(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Server_Add *e
|
|||
ecore_ipc_server_data_size_max_set(ev->server, -1);
|
||||
|
||||
connect_st t = { getpid(), _my_app_name };
|
||||
p = packet_compose(APP_CLIENT_CONNECT, &t, sizeof(t), &size);
|
||||
p = packet_compose(APP_CLIENT_CONNECT, &t, sizeof(t), &size, NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(ev->server, 0,0,0,0,EINA_FALSE, p, size);
|
||||
|
@ -191,7 +186,8 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Server_Data
|
|||
t.tree = _load_list();
|
||||
if (t.tree)
|
||||
{ /* Reply with tree data to data request */
|
||||
void *p = packet_compose(TREE_DATA, &t, sizeof(t), &size);
|
||||
void *p = packet_compose(TREE_DATA, &t, sizeof(t), &size,
|
||||
NULL, 0);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(ev->server, 0,0,0,0,
|
||||
|
@ -215,27 +211,28 @@ _data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Ipc_Event_Server_Data
|
|||
case BMP_REQ:
|
||||
{ /* Bitmap req msg contains PTR of Ecore Evas */
|
||||
bmp_req_st *req = v->data;
|
||||
Bmp_Data *bmp = _canvas_bmp_get((Ecore_Evas *) (uintptr_t)
|
||||
req->object);
|
||||
Evas_Coord w, h;
|
||||
int size = 0;
|
||||
void *bmp = _canvas_bmp_get((Ecore_Evas *) (uintptr_t)
|
||||
req->object, &w, &h);
|
||||
|
||||
/* TODO: what if win closed (bmp not found), need to send NULL */
|
||||
/* and handle bmp-NULL value in client */
|
||||
if (bmp)
|
||||
{ /* Send server packet with BMP info */
|
||||
int size = 0;
|
||||
bmp_info_st t = { req->gui,
|
||||
req->app, req->object , req->ctr, NULL, NULL, bmp };
|
||||
void *p = packet_compose(BMP_DATA, &t, sizeof(t), &size);
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(ev->server, 0,0,0,0,
|
||||
EINA_FALSE, p, size);
|
||||
ecore_ipc_server_flush(ev->server);
|
||||
free(p);
|
||||
}
|
||||
bmp_info_st t = { req->gui,
|
||||
req->app, req->object , req->ctr, w, h,
|
||||
NULL, NULL, NULL };
|
||||
|
||||
bmp_info_free(bmp);
|
||||
void *p = packet_compose(BMP_DATA, &t, sizeof(t), &size,
|
||||
bmp, (w * h * sizeof(int)));
|
||||
|
||||
if (p)
|
||||
{
|
||||
ecore_ipc_server_send(ev->server, 0,0,0,0,
|
||||
EINA_FALSE, p, size);
|
||||
ecore_ipc_server_flush(ev->server);
|
||||
free(p);
|
||||
}
|
||||
|
||||
if (bmp)
|
||||
free(bmp);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue