breaking out some ipc action!

SVN revision: 14755
This commit is contained in:
Carsten Haitzler 2005-05-13 15:15:52 +00:00
parent 9036a4c57a
commit 3f92e26079
6 changed files with 237 additions and 18 deletions

View File

@ -111,8 +111,8 @@ e_config_init(void)
E_CONFIG_VAL(D, T, framerate, DOUBLE);
E_CONFIG_VAL(D, T, image_cache, INT);
E_CONFIG_VAL(D, T, font_cache, INT);
E_CONFIG_VAL(D, T, zone_desks_x_count, INT); /**/
E_CONFIG_VAL(D, T, zone_desks_y_count, INT); /**/
E_CONFIG_VAL(D, T, zone_desks_x_count, INT);
E_CONFIG_VAL(D, T, zone_desks_y_count, INT);
E_CONFIG_VAL(D, T, use_virtual_roots, INT); /* should not make this a config option (for now) */
E_CONFIG_VAL(D, T, use_edge_flip, INT);
E_CONFIG_VAL(D, T, edge_flip_timeout, DOUBLE);
@ -650,6 +650,9 @@ e_config_init(void)
E_CONFIG_LIMIT(e_config->framerate, 1.0, 200.0);
E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64);
E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64);
E_CONFIG_LIMIT(e_config->use_edge_flip, 0, 1);
E_CONFIG_LIMIT(e_config->edge_flip_timeout, 0.0, 2.0);
/* apply lang config - exception because config is loaded after intl setup */

View File

@ -4,6 +4,9 @@
static int _e_ipc_cb_client_add(void *data, int type, void *event);
static int _e_ipc_cb_client_del(void *data, int type, void *event);
static int _e_ipc_cb_client_data(void *data, int type, void *event);
static void _e_ipc_reply_double_send(Ecore_Ipc_Client *client, double val, int opcode);
static void _e_ipc_reply_int_send(Ecore_Ipc_Client *client, int val, int opcode);
static void _e_ipc_reply_2int_send(Ecore_Ipc_Client *client, int val1, int val2, int opcode);
static char *_e_ipc_path_str_get(char **paths, int *bytes);
static char *_e_ipc_str_list_get(Evas_List *strs, int *bytes);
static char *_e_ipc_simple_str_dec(char *data, int bytes);
@ -597,61 +600,180 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
}
break;
case E_IPC_OP_MENUS_SCROLL_SPEED_GET:
{
void *data;
int bytes;
if ((data = e_ipc_codec_double_enc(e_config->menus_scroll_speed,
&bytes)))
{
ecore_ipc_client_send(e->client,
E_IPC_DOMAIN_REPLY,
E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY,
0/*ref*/, 0/*ref_to*/, 0/*response*/,
data, bytes);
free(data);
}
}
_e_ipc_reply_double_send(e->client,
e_config->menus_scroll_speed,
E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY);
break;
case E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_SET:
if (e_ipc_codec_double_dec(e->data, e->size,
&(e_config->menus_fast_mouse_move_threshhold)))
{
E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_threshhold, 1.0, 2000.0);
e_config_save_queue();
}
break;
case E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET:
_e_ipc_reply_double_send(e->client,
e_config->menus_fast_mouse_move_threshhold,
E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET_REPLY);
break;
case E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_SET:
if (e_ipc_codec_double_dec(e->data, e->size,
&(e_config->menus_click_drag_timeout)))
{
E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
e_config_save_queue();
}
break;
case E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET:
_e_ipc_reply_double_send(e->client,
e_config->menus_click_drag_timeout,
E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY);
break;
case E_IPC_OP_BORDER_SHADE_ANIMATE_SET:
if (e_ipc_codec_int_dec(e->data, e->size,
&(e_config->border_shade_animate)))
{
E_CONFIG_LIMIT(e_config->border_shade_animate, 0, 1);
e_config_save_queue();
}
break;
case E_IPC_OP_BORDER_SHADE_ANIMATE_GET:
_e_ipc_reply_int_send(e->client,
e_config->border_shade_animate,
E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY);
break;
case E_IPC_OP_BORDER_SHADE_TRANSITION_SET:
if (e_ipc_codec_int_dec(e->data, e->size,
&(e_config->border_shade_transition)))
{
E_CONFIG_LIMIT(e_config->border_shade_speed, 0, 3);
e_config_save_queue();
}
break;
case E_IPC_OP_BORDER_SHADE_TRANSITION_GET:
_e_ipc_reply_int_send(e->client,
e_config->border_shade_transition,
E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY);
break;
case E_IPC_OP_BORDER_SHADE_SPEED_SET:
if (e_ipc_codec_double_dec(e->data, e->size,
&(e_config->framerate)))
{
E_CONFIG_LIMIT(e_config->framerate, 1.0, 20000.0);
e_config_save_queue();
}
break;
case E_IPC_OP_BORDER_SHADE_SPEED_GET:
_e_ipc_reply_double_send(e->client,
e_config->border_shade_speed,
E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY);
break;
case E_IPC_OP_FRAMERATE_SET:
if (e_ipc_codec_double_dec(e->data, e->size,
&(e_config->framerate)))
{
E_CONFIG_LIMIT(e_config->image_cache, 1.0, 200.0);
e_config_save_queue();
}
break;
case E_IPC_OP_FRAMERATE_GET:
_e_ipc_reply_double_send(e->client,
e_config->framerate,
E_IPC_OP_FRAMERATE_GET_REPLY);
break;
case E_IPC_OP_IMAGE_CACHE_SET:
if (e_ipc_codec_int_dec(e->data, e->size,
&(e_config->image_cache)))
{
E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
e_config_save_queue();
}
break;
case E_IPC_OP_IMAGE_CACHE_GET:
_e_ipc_reply_int_send(e->client,
e_config->image_cache,
E_IPC_OP_IMAGE_CACHE_GET_REPLY);
break;
case E_IPC_OP_FONT_CAHCE_SET:
if (e_ipc_codec_int_dec(e->data, e->size,
&(e_config->font_cache)))
{
E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
e_config_save_queue();
}
break;
case E_IPC_OP_FONT_CACHE_GET:
_e_ipc_reply_int_send(e->client,
e_config->font_cache,
E_IPC_OP_FONT_CACHE_GET_REPLY);
break;
case E_IPC_OP_USE_EDGE_FLIP_SET:
if (e_ipc_codec_int_dec(e->data, e->size,
&(e_config->use_edge_flip)))
{
E_CONFIG_LIMIT(e_config->use_edge_flip, 0, 1);
e_config_save_queue();
}
break;
case E_IPC_OP_USE_EDGE_FLIP_GET:
_e_ipc_reply_int_send(e->client,
e_config->use_edge_flip,
E_IPC_OP_USE_EDGE_FLIP_GET_REPLY);
break;
case E_IPC_OP_EDGE_FLIP_TIMEOUT_SET:
if (e_ipc_codec_double_dec(e->data, e->size,
&(e_config->edge_flip_timeout)))
{
E_CONFIG_LIMIT(e_config->edge_flip_timeout, 0.0, 2.0);
e_config_save_queue();
}
break;
case E_IPC_OP_EDGE_FLIP_TIMEOUT_GET:
_e_ipc_reply_double_send(e->client,
e_config->edge_flip_timeout,
E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY);
break;
case E_IPC_OP_DESKS_SET:
if (e_ipc_codec_2int_dec(e->data, e->size,
&(e_config->zone_desks_x_count),
&(e_config->zone_desks_y_count)))
{
Evas_List *l;
E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64);
E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64);
for (l = e_manager_list(); l; l = l->next)
{
E_Manager *man;
Evas_List *l2;
man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con;
Evas_List *l3;
con = l2->data;
for (l3 = con->zones; l3; l3 = l3->next)
{
E_Zone *zone;
zone = l3->data;
e_zone_desk_count_set(zone,
e_config->zone_desks_x_count,
e_config->zone_desks_y_count);
}
}
}
e_config_save_queue();
}
break;
case E_IPC_OP_DESKS_GET:
_e_ipc_reply_2int_send(e->client,
e_config->zone_desks_x_count,
e_config->zone_desks_y_count,
E_IPC_OP_DESKS_GET_REPLY);
break;
default:
break;
@ -665,6 +787,57 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
return 1;
}
static void
_e_ipc_reply_double_send(Ecore_Ipc_Client *client, double val, int opcode)
{
void *data;
int bytes;
if ((data = e_ipc_codec_double_enc(val, &bytes)))
{
ecore_ipc_client_send(client,
E_IPC_DOMAIN_REPLY,
opcode,
0/*ref*/, 0/*ref_to*/, 0/*response*/,
data, bytes);
free(data);
}
}
static void
_e_ipc_reply_int_send(Ecore_Ipc_Client *client, int val, int opcode)
{
void *data;
int bytes;
if ((data = e_ipc_codec_int_enc(val, &bytes)))
{
ecore_ipc_client_send(client,
E_IPC_DOMAIN_REPLY,
opcode,
0/*ref*/, 0/*ref_to*/, 0/*response*/,
data, bytes);
free(data);
}
}
static void
_e_ipc_reply_2int_send(Ecore_Ipc_Client *client, int val1, int val2, int opcode)
{
void *data;
int bytes;
if ((data = e_ipc_codec_2int_enc(val1, val2, &bytes)))
{
ecore_ipc_client_send(client,
E_IPC_DOMAIN_REPLY,
opcode,
0/*ref*/, 0/*ref_to*/, 0/*response*/,
data, bytes);
free(data);
}
}
/*
* FIXME: This dosen't handle the case where one of the paths is of the
* form: ~moo/bar/baz need to figure out the correct path to the

View File

@ -93,6 +93,9 @@ typedef enum _E_Ipc_Op
E_IPC_OP_EDGE_FLIP_TIMEOUT_SET,
E_IPC_OP_EDGE_FLIP_TIMEOUT_GET,
E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY,
E_IPC_OP_DESKS_SET,
E_IPC_OP_DESKS_GET,
E_IPC_OP_DESKS_GET_REPLY,
E_IPC_OP_LAST
} E_Ipc_Op;

View File

@ -7,6 +7,7 @@
/* local subsystem globals */
static Eet_Data_Descriptor *_e_ipc_int_edd = NULL;
static Eet_Data_Descriptor *_e_ipc_double_edd = NULL;
static Eet_Data_Descriptor *_e_ipc_2int_edd = NULL;
/* externally accessible functions */
int
@ -18,6 +19,9 @@ e_ipc_codec_init(void)
_e_ipc_double_edd = E_CONFIG_DD_NEW("double", E_Ipc_Double);
E_CONFIG_VAL(_e_ipc_double_edd, E_Ipc_Double, val, DOUBLE);
_e_ipc_2int_edd = E_CONFIG_DD_NEW("2int", E_Ipc_2Int);
E_CONFIG_VAL(_e_ipc_2int_edd, E_Ipc_2Int, val1, INT);
E_CONFIG_VAL(_e_ipc_2int_edd, E_Ipc_2Int, val2, INT);
return 1;
}
@ -26,6 +30,7 @@ e_ipc_codec_shutdown(void)
{
E_CONFIG_DD_FREE(_e_ipc_int_edd);
E_CONFIG_DD_FREE(_e_ipc_double_edd);
E_CONFIG_DD_FREE(_e_ipc_2int_edd);
}
int
@ -72,5 +77,29 @@ e_ipc_codec_double_enc(double val, int *size_ret)
return eet_data_descriptor_encode(_e_ipc_double_edd, &dat, size_ret);
}
int
e_ipc_codec_2int_dec(char *data, int bytes, int *dest, int *dest2)
{
E_Ipc_2Int *dat;
if (!data) return 0;
dat = eet_data_descriptor_decode(_e_ipc_2int_edd, data, bytes);
if (!dat) return 0;
if (dest) *dest = dat->val1;
if (dest2) *dest2 = dat->val2;
free(dat);
return 1;
}
void *
e_ipc_codec_2int_enc(int val1, int val2, int *size_ret)
{
E_Ipc_2Int dat;
dat.val1 = val1;
dat.val2 = val2;
return eet_data_descriptor_encode(_e_ipc_2int_edd, &dat, size_ret);
}
/* local subsystem globals */

View File

@ -5,6 +5,7 @@
typedef struct _E_Ipc_Int E_Ipc_Int;
typedef struct _E_Ipc_Double E_Ipc_Double;
typedef struct _E_Ipc_2Int E_Ipc_2Int;
#else
#ifndef E_IPC_CODEC_H
@ -20,6 +21,12 @@ struct _E_Ipc_Double
double val;
};
struct _E_Ipc_2Int
{
int val1, val2;
};
EAPI int e_ipc_codec_init(void);
EAPI void e_ipc_codec_shutdown(void);
@ -27,6 +34,8 @@ EAPI int e_ipc_codec_int_dec(char *data, int bytes, int *dest);
EAPI void *e_ipc_codec_int_enc(int val, int *size_ret);
EAPI int e_ipc_codec_double_dec(char *data, int bytes, double *dest);
EAPI void *e_ipc_codec_double_enc(double val, int *size_ret);
EAPI int e_ipc_codec_2int_dec(char *data, int bytes, int *dest, int *dest2x);
EAPI void *e_ipc_codec_2int_enc(int val1, int val2, int *size_ret);
#endif
#endif

View File

@ -361,10 +361,12 @@ main(int argc, char **argv)
"Maybe try the '-display :0.0' option?\n");
exit(-1);
}
e_ipc_codec_init();
/* start our main loop */
ecore_main_loop_begin();
e_ipc_codec_shutdown();
_e_ipc_shutdown();
ecore_ipc_shutdown();
ecore_shutdown();