2005-02-07 05:51:09 -08:00
/*
* vim : ts = 8 : sw = 3 : sts = 8 : noexpandtab : cino = > 5 n - 3f 0 ^ - 2 { 2
*/
2004-11-26 03:11:05 -08:00
# include "e.h"
2005-05-30 20:01:53 -07:00
typedef struct _Opt Opt ;
struct _Opt
{
char * opt ;
int num_param ;
char * desc ;
int num_reply ;
E_Ipc_Op opcode ;
} ;
Opt opts [ ] = {
# define TYPE E_REMOTE_OPTIONS
# include "e_ipc_handlers.h"
# undef TYPE
} ;
static int _e_cb_signal_exit ( void * data , int ev_type , void * ev ) ;
static int _e_ipc_init ( void ) ;
static void _e_ipc_shutdown ( void ) ;
static int _e_ipc_cb_server_add ( void * data , int type , void * event ) ;
static int _e_ipc_cb_server_del ( void * data , int type , void * event ) ;
static int _e_ipc_cb_server_data ( void * data , int type , void * event ) ;
static void _e_help ( void ) ;
/* local subsystem globals */
static Ecore_Ipc_Server * _e_ipc_server = NULL ;
static const char * display_name = NULL ;
static int reply_count = 0 ;
static int reply_expect = 0 ;
int
main ( int argc , char * * argv )
{
int i ;
char * s , buf [ 1024 ] ;
/* fix up DISPLAY to be :N.0 if no .screen is in it */
s = getenv ( " DISPLAY " ) ;
if ( s )
{
char * p ;
p = strrchr ( s , ' : ' ) ;
if ( ! p )
{
snprintf ( buf , sizeof ( buf ) , " DISPLAY=%s:0.0 " , s ) ;
putenv ( strdup ( buf ) ) ;
}
else
{
p = strrchr ( p , ' . ' ) ;
if ( ! p )
{
snprintf ( buf , sizeof ( buf ) , " DISPLAY=%s.0 " , s ) ;
putenv ( strdup ( buf ) ) ;
}
}
}
/* handle some command-line parameters */
display_name = ( const char * ) getenv ( " DISPLAY " ) ;
for ( i = 1 ; i < argc ; i + + )
{
if ( ( ! strcmp ( argv [ i ] , " -display " ) ) & & ( i < ( argc - 1 ) ) )
{
i + + ;
display_name = argv [ i ] ;
}
else if ( ( ! strcmp ( argv [ i ] , " -h " ) ) | |
( ! strcmp ( argv [ i ] , " -help " ) ) | |
( ! strcmp ( argv [ i ] , " --h " ) ) | |
( ! strcmp ( argv [ i ] , " --help " ) ) )
{
_e_help ( ) ;
exit ( 0 ) ;
}
}
/* basic ecore init */
if ( ! ecore_init ( ) )
{
printf ( " ERROR: Enlightenment_remote cannot Initialize Ecore! \n "
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
ecore_app_args_set ( ( int ) argc , ( const char * * ) argv ) ;
/* setup a handler for when e is asked to exit via a system signal */
if ( ! ecore_event_handler_add ( ECORE_EVENT_SIGNAL_EXIT , _e_cb_signal_exit , NULL ) )
{
printf ( " ERROR: Enlightenment_remote cannot set up an exit signal handler. \n "
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
/* init ipc */
if ( ! ecore_ipc_init ( ) )
{
printf ( " ERROR: Enlightenment_remote cannot initialize the ipc system. \n "
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
/* setup e ipc service */
if ( ! _e_ipc_init ( ) )
{
printf ( " ERROR: Enlightenment_remote cannot set up the IPC socket. \n "
" 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 ( ) ;
/* just return 0 to keep the compiler quiet */
return 0 ;
}
/* local subsystem functions */
static int
_e_cb_signal_exit ( void * data , int ev_type , void * ev )
{
/* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
ecore_main_loop_quit ( ) ;
return 1 ;
}
static int
_e_ipc_init ( void )
{
char buf [ 1024 ] ;
char * disp ;
disp = ( char * ) display_name ;
if ( ! disp ) disp = " :0 " ;
snprintf ( buf , sizeof ( buf ) , " enlightenment-(%s) " , disp ) ;
_e_ipc_server = ecore_ipc_server_connect ( ECORE_IPC_LOCAL_USER , buf , 0 , NULL ) ;
/* FIXME: we shoudl also try the generic ":0" if the display is ":0.0" */
/* similar... */
if ( ! _e_ipc_server ) return 0 ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_ADD , _e_ipc_cb_server_add , NULL ) ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_DEL , _e_ipc_cb_server_del , NULL ) ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_DATA , _e_ipc_cb_server_data , NULL ) ;
return 1 ;
}
static void
_e_ipc_shutdown ( void )
{
if ( _e_ipc_server )
{
ecore_ipc_server_del ( _e_ipc_server ) ;
_e_ipc_server = NULL ;
}
}
static int
_e_ipc_cb_server_add ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Add * e ;
char * * argv , * * params ;
int i , j , argc , process_count = 0 ;
e = event ;
ecore_app_args_get ( & argc , & argv ) ;
for ( i = 1 ; i < argc ; i + + )
{
for ( j = 0 ; j < ( int ) ( sizeof ( opts ) / sizeof ( Opt ) ) ; j + + )
{
Opt * opt ;
opt = & ( opts [ j ] ) ;
if ( ! strcmp ( opt - > opt , argv [ i ] ) )
{
if ( i > = ( argc - opt - > num_param ) )
{
printf ( " ERROR: option %s expects %i parameters \n " ,
opt - > opt , opt - > num_param ) ;
exit ( - 1 ) ;
}
else
{
params = & ( argv [ i + 1 ] ) ;
switch ( opt - > opcode )
{
# define TYPE E_REMOTE_OUT
# include "e_ipc_handlers.h"
# undef TYPE
default :
break ;
}
process_count + + ;
reply_expect + = opt - > num_reply ;
i + = opt - > num_param ;
}
}
}
}
if ( process_count < = 0 ) _e_help ( ) ;
if ( reply_count > = reply_expect ) ecore_main_loop_quit ( ) ;
return 1 ;
}
static int
_e_ipc_cb_server_del ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Del * e ;
e = event ;
return 1 ;
}
static int
_e_ipc_cb_server_data ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Data * e ;
e = event ;
printf ( " REPLY <- BEGIN \n " ) ;
switch ( e - > minor )
{
# define TYPE E_REMOTE_IN
# include "e_ipc_handlers.h"
# undef TYPE
default :
break ;
}
printf ( " REPLY <- END \n " ) ;
if ( reply_count > = reply_expect ) ecore_main_loop_quit ( ) ;
2005-06-02 22:42:41 -07:00
return 1 ;
2005-05-30 20:01:53 -07:00
}
static void
_e_help ( void )
{
int i , j ;
printf ( " OPTIONS: \n " ) ;
printf ( " -h This help \n " ) ;
printf ( " -help This help \n " ) ;
printf ( " --help This help \n " ) ;
printf ( " --h This help \n " ) ;
printf ( " -display OPT1 Connect to E running on display 'OPT1' \n " ) ;
for ( j = 0 ; j < ( int ) ( sizeof ( opts ) / sizeof ( Opt ) ) ; j + + )
{
Opt * opt ;
opt = & ( opts [ j ] ) ;
printf ( " %s " , opt - > opt ) ;
for ( i = 0 ; i < opt - > num_param ; i + + )
printf ( " OPT%i " , i + 1 ) ;
printf ( " %s \n " , opt - > desc ) ;
}
}
#if 0
2004-12-01 20:24:54 -08:00
typedef struct _E_IPC_Opt_Handler E_IPC_Opt_Handler ;
struct _E_IPC_Opt_Handler
{
char * option ;
char * desc ;
int num_params ;
int replies ;
int type ;
int simple_request_id ;
void ( * func ) ( char * * params ) ;
} ;
2004-11-26 03:11:05 -08:00
/* local subsystem functions */
2004-11-26 04:20:38 -08:00
static int _e_cb_signal_exit ( void * data , int ev_type , void * ev ) ;
static int _e_ipc_init ( void ) ;
static void _e_ipc_shutdown ( void ) ;
static int _e_ipc_cb_server_add ( void * data , int type , void * event ) ;
static int _e_ipc_cb_server_del ( void * data , int type , void * event ) ;
static int _e_ipc_cb_server_data ( void * data , int type , void * event ) ;
2004-11-26 03:11:05 -08:00
2004-12-01 20:24:54 -08:00
static void _e_help ( void ) ;
2005-05-03 09:27:46 -07:00
static const char * _e_ipc_context_str ( int context ) ;
static const char * _e_ipc_modifier_str ( int mod ) ;
2005-04-21 21:25:51 -07:00
2004-11-26 03:11:05 -08:00
/* local subsystem globals */
2004-11-26 04:20:38 -08:00
static Ecore_Ipc_Server * _e_ipc_server = NULL ;
static const char * display_name = NULL ;
static int reply_count = 0 ;
static int reply_expect = 0 ;
2004-11-26 03:11:05 -08:00
2005-05-04 23:45:47 -07:00
static void
_e_opt_binding_mouse_parse ( E_Config_Binding_Mouse * eb , char * * params )
{
if ( ! strcmp ( params [ 0 ] , " NONE " ) ) eb - > context = E_BINDING_CONTEXT_NONE ;
else if ( ! strcmp ( params [ 0 ] , " UNKNOWN " ) ) eb - > context = E_BINDING_CONTEXT_UNKNOWN ;
else if ( ! strcmp ( params [ 0 ] , " BORDER " ) ) eb - > context = E_BINDING_CONTEXT_BORDER ;
else if ( ! strcmp ( params [ 0 ] , " ZONE " ) ) eb - > context = E_BINDING_CONTEXT_ZONE ;
else if ( ! strcmp ( params [ 0 ] , " MANAGER " ) ) eb - > context = E_BINDING_CONTEXT_MANAGER ;
else if ( ! strcmp ( params [ 0 ] , " ANY " ) ) eb - > context = E_BINDING_CONTEXT_ANY ;
else
{
printf ( " OPT1 (CONTEXT) is not a valid context. Must be: \n "
" NONE UNKNOWN BORDER ZONE MANAGER ANY \n " ) ;
exit ( - 1 ) ;
}
eb - > button = atoi ( params [ 1 ] ) ;
/* M1[|M2...] */
{
char * p , * pp ;
eb - > modifiers = 0 ;
pp = params [ 2 ] ;
for ( ; ; )
{
p = strchr ( pp , ' | ' ) ;
if ( p )
{
if ( ! strncmp ( pp , " SHIFT| " , 6 ) ) eb - > modifiers | = E_BINDING_MODIFIER_SHIFT ;
else if ( ! strncmp ( pp , " CTRL| " , 5 ) ) eb - > modifiers | = E_BINDING_MODIFIER_CTRL ;
else if ( ! strncmp ( pp , " ALT| " , 4 ) ) eb - > modifiers | = E_BINDING_MODIFIER_ALT ;
else if ( ! strncmp ( pp , " WIN| " , 4 ) ) eb - > modifiers | = E_BINDING_MODIFIER_WIN ;
2005-05-07 10:29:25 -07:00
else if ( strlen ( pp ) > 0 )
2005-05-04 23:45:47 -07:00
{
2005-05-17 22:06:05 -07:00
printf ( " OPT3 moidifier unknown. Must be or mask of: \n "
" SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE) \n " ) ;
2005-05-04 23:45:47 -07:00
exit ( - 1 ) ;
}
pp = p + 1 ;
}
else
{
if ( ! strcmp ( pp , " SHIFT " ) ) eb - > modifiers | = E_BINDING_MODIFIER_SHIFT ;
else if ( ! strcmp ( pp , " CTRL " ) ) eb - > modifiers | = E_BINDING_MODIFIER_CTRL ;
else if ( ! strcmp ( pp , " ALT " ) ) eb - > modifiers | = E_BINDING_MODIFIER_ALT ;
else if ( ! strcmp ( pp , " WIN " ) ) eb - > modifiers | = E_BINDING_MODIFIER_WIN ;
2005-05-17 22:06:05 -07:00
else if ( ! strcmp ( pp , " NONE " ) ) eb - > modifiers = E_BINDING_MODIFIER_NONE ;
2005-05-07 10:29:25 -07:00
else if ( strlen ( pp ) > 0 )
2005-05-04 23:45:47 -07:00
{
2005-05-17 22:06:05 -07:00
printf ( " OPT3 moidifier unknown. Must be or mask of: \n "
" SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE) \n " ) ;
2005-05-04 23:45:47 -07:00
exit ( - 1 ) ;
}
break ;
}
}
}
eb - > any_mod = atoi ( params [ 3 ] ) ;
eb - > action = params [ 4 ] ;
eb - > params = params [ 5 ] ;
}
static void
_e_opt_binding_mouse_add ( char * * params )
{
E_Config_Binding_Mouse bind ;
int bytes ;
char * data ;
_e_opt_binding_mouse_parse ( & bind , params ) ;
data = _e_ipc_mouse_binding_enc ( & bind , & bytes ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
E_IPC_OP_BINDING_MOUSE_ADD ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
data , bytes ) ;
free ( data ) ;
}
static void
_e_opt_binding_mouse_del ( char * * params )
{
E_Config_Binding_Mouse bind ;
int bytes ;
char * data ;
_e_opt_binding_mouse_parse ( & bind , params ) ;
data = _e_ipc_mouse_binding_enc ( & bind , & bytes ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
E_IPC_OP_BINDING_MOUSE_DEL ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
data , bytes ) ;
free ( data ) ;
}
static void
_e_opt_binding_key_parse ( E_Config_Binding_Key * eb , char * * params )
{
if ( ! strcmp ( params [ 0 ] , " NONE " ) ) eb - > context = E_BINDING_CONTEXT_NONE ;
else if ( ! strcmp ( params [ 0 ] , " UNKNOWN " ) ) eb - > context = E_BINDING_CONTEXT_UNKNOWN ;
else if ( ! strcmp ( params [ 0 ] , " BORDER " ) ) eb - > context = E_BINDING_CONTEXT_BORDER ;
else if ( ! strcmp ( params [ 0 ] , " ZONE " ) ) eb - > context = E_BINDING_CONTEXT_ZONE ;
else if ( ! strcmp ( params [ 0 ] , " MANAGER " ) ) eb - > context = E_BINDING_CONTEXT_MANAGER ;
else if ( ! strcmp ( params [ 0 ] , " ANY " ) ) eb - > context = E_BINDING_CONTEXT_ANY ;
else
{
printf ( " OPT1 (CONTEXT) is not a valid context. Must be: \n "
" NONE UNKNOWN BORDER ZONE MANAGER ANY \n " ) ;
exit ( - 1 ) ;
}
eb - > key = params [ 1 ] ;
/* M1[|M2...] */
{
char * p , * pp ;
eb - > modifiers = 0 ;
pp = params [ 2 ] ;
for ( ; ; )
{
p = strchr ( pp , ' | ' ) ;
if ( p )
{
if ( ! strncmp ( pp , " SHIFT| " , 6 ) ) eb - > modifiers | = E_BINDING_MODIFIER_SHIFT ;
else if ( ! strncmp ( pp , " CTRL| " , 5 ) ) eb - > modifiers | = E_BINDING_MODIFIER_CTRL ;
else if ( ! strncmp ( pp , " ALT| " , 4 ) ) eb - > modifiers | = E_BINDING_MODIFIER_ALT ;
else if ( ! strncmp ( pp , " WIN| " , 4 ) ) eb - > modifiers | = E_BINDING_MODIFIER_WIN ;
2005-05-07 10:29:25 -07:00
else if ( strlen ( pp ) > 0 )
2005-05-04 23:45:47 -07:00
{
2005-05-17 22:06:05 -07:00
printf ( " OPT3 moidifier unknown. Must be or mask of: \n "
" SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE) \n " ) ;
2005-05-04 23:45:47 -07:00
exit ( - 1 ) ;
}
pp = p + 1 ;
}
else
{
if ( ! strcmp ( pp , " SHIFT " ) ) eb - > modifiers | = E_BINDING_MODIFIER_SHIFT ;
else if ( ! strcmp ( pp , " CTRL " ) ) eb - > modifiers | = E_BINDING_MODIFIER_CTRL ;
else if ( ! strcmp ( pp , " ALT " ) ) eb - > modifiers | = E_BINDING_MODIFIER_ALT ;
else if ( ! strcmp ( pp , " WIN " ) ) eb - > modifiers | = E_BINDING_MODIFIER_WIN ;
2005-05-17 22:06:05 -07:00
else if ( ! strcmp ( pp , " NONE " ) ) eb - > modifiers = E_BINDING_MODIFIER_NONE ;
2005-05-07 10:29:25 -07:00
else if ( strlen ( pp ) > 0 )
2005-05-04 23:45:47 -07:00
{
2005-05-17 22:06:05 -07:00
printf ( " OPT3 moidifier unknown. Must be or mask of: \n "
" SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE) \n " ) ;
2005-05-04 23:45:47 -07:00
exit ( - 1 ) ;
}
break ;
}
}
}
eb - > any_mod = atoi ( params [ 3 ] ) ;
eb - > action = params [ 4 ] ;
eb - > params = params [ 5 ] ;
}
static void
_e_opt_binding_key_add ( char * * params )
{
E_Config_Binding_Key bind ;
int bytes ;
char * data ;
_e_opt_binding_key_parse ( & bind , params ) ;
data = _e_ipc_key_binding_enc ( & bind , & bytes ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
E_IPC_OP_BINDING_KEY_ADD ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
data , bytes ) ;
free ( data ) ;
}
static void
_e_opt_binding_key_del ( char * * params )
{
E_Config_Binding_Key bind ;
int bytes ;
char * data ;
_e_opt_binding_key_parse ( & bind , params ) ;
data = _e_ipc_key_binding_enc ( & bind , & bytes ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
E_IPC_OP_BINDING_KEY_DEL ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
data , bytes ) ;
free ( data ) ;
}
2005-05-20 00:32:42 -07:00
static void
2005-05-20 02:27:06 -07:00
_e_opt_focus_policy_set ( char * * params )
2005-05-20 00:32:42 -07:00
{
int bytes ;
char * data ;
2005-05-20 02:27:06 -07:00
int value ;
value = 0 ;
if ( ! strcmp ( params [ 0 ] , " MOUSE " ) ) value = E_FOCUS_MOUSE ;
else if ( ! strcmp ( params [ 0 ] , " CLICK " ) ) value = E_FOCUS_CLICK ;
2005-05-20 11:46:32 -07:00
else if ( ! strcmp ( params [ 0 ] , " SLOPPY " ) ) value = E_FOCUS_SLOPPY ;
2005-05-20 02:27:06 -07:00
else
{
2005-05-20 11:46:32 -07:00
printf ( " focus must be MOUSE, CLICK or SLOPPY \n " ) ;
2005-05-20 02:27:06 -07:00
exit ( - 1 ) ;
}
data = e_ipc_codec_int_enc ( value , & bytes ) ;
2005-05-20 00:32:42 -07:00
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
E_IPC_OP_FOCUS_POLICY_SET ,
0 , 0 , 0 ,
data , bytes ) ;
free ( data ) ;
}
2005-05-13 10:21:04 -07:00
# define SIMPLE_REQ 0
# define SIMPLE_STR_REQ 1
# define FULL_FUNC 2
# define MULTI_STR_REQ 3
# define SIMPLE_INT_REQ 4
# define SIMPLE_DBL_REQ 5
# define SIMPLE_2INT_REQ 6
2004-12-01 20:24:54 -08:00
2005-05-13 10:21:04 -07:00
# define OREQ(opt, desc, ipc, rep) {opt, desc, 0, rep, SIMPLE_REQ, ipc, NULL}
# define OSTR(opt, desc, ipc, rep) {opt, desc, 1, rep, SIMPLE_STR_REQ, ipc, NULL}
2005-05-03 20:59:35 -07:00
# define OFNC(opt, desc, param, fn, rep) {opt, desc, param, rep, FULL_FUNC, 0, fn}
2005-04-02 08:40:37 -08:00
# define OMUL(opt, desc, ipc, rep, argc) {opt, desc, argc, rep, MULTI_STR_REQ, ipc, NULL}
2005-05-13 10:21:04 -07:00
# define OINT(opt, desc, ipc, rep) {opt, desc, 1, rep, SIMPLE_INT_REQ, ipc, NULL}
# define ODBL(opt, desc, ipc, rep) {opt, desc, 1, rep, SIMPLE_DBL_REQ, ipc, NULL}
# define O2INT(opt, desc, ipc, rep) {opt, desc, 2, rep, SIMPLE_2INT_REQ, ipc, NULL}
2004-12-01 20:24:54 -08:00
E_IPC_Opt_Handler handlers [ ] =
{
2005-04-02 08:40:37 -08:00
OSTR ( " -font-fallback-remove " , " Remove OPT1 from the fontset " , E_IPC_OP_FONT_FALLBACK_REMOVE , 0 ) ,
OSTR ( " -font-fallback-prepend " , " Prepend OPT1 to the fontset " , E_IPC_OP_FONT_FALLBACK_PREPEND , 0 ) ,
OSTR ( " -font-fallback-append " , " Append OPT1 to the fontset " , E_IPC_OP_FONT_FALLBACK_APPEND , 0 ) ,
OREQ ( " -font-fallback-list " , " List the fallback fonts in order " , E_IPC_OP_FONT_FALLBACK_LIST , 1 ) ,
OSTR ( " -font-default-get " , " List the default font associated with OPT1 " , E_IPC_OP_FONT_DEFAULT_GET , 1 ) ,
OSTR ( " -font-default-remove " , " Remove the default text class OPT1 " , E_IPC_OP_FONT_DEFAULT_REMOVE , 0 ) ,
OREQ ( " -font-default-list " , " List all configured text classes " , E_IPC_OP_FONT_DEFAULT_LIST , 1 ) ,
OMUL ( " -font-default-set " , " Set textclass (OPT1) font (OPT2) and size (OPT3) " , E_IPC_OP_FONT_DEFAULT_SET , 0 , 3 ) ,
2005-05-02 03:16:31 -07:00
OREQ ( " -lang-get " , " Get the current language " , E_IPC_OP_LANG_GET , 1 ) ,
OREQ ( " -lang-list " , " List all available languages " , E_IPC_OP_LANG_LIST , 1 ) ,
2005-05-03 09:27:46 -07:00
OSTR ( " -lang-set " , " Set the current language " , E_IPC_OP_LANG_SET , 0 ) ,
OREQ ( " -binding-mouse-list " , " List all mouse bindings " , E_IPC_OP_BINDING_MOUSE_LIST , 1 ) ,
2005-05-18 17:12:30 -07:00
OFNC ( " -binding-mouse-add " , " Add an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters " , 6 , _e_opt_binding_mouse_add , 0 ) ,
2005-05-04 23:45:47 -07:00
OFNC ( " -binding-mouse-del " , " Delete an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters " , 6 , _e_opt_binding_mouse_del , 0 ) ,
OREQ ( " -binding-key-list " , " List all key bindings " , E_IPC_OP_BINDING_KEY_LIST , 1 ) ,
2005-05-18 17:12:30 -07:00
OFNC ( " -binding-key-add " , " Add an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters " , 6 , _e_opt_binding_key_add , 0 ) ,
2005-05-13 10:21:04 -07:00
OFNC ( " -binding-key-del " , " Delete an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters " , 6 , _e_opt_binding_key_del , 0 ) ,
ODBL ( " -menus-fast-move-threshhold-set " , " Set the mouse speed in pixels per second that is considered a 'fast move' " , E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_SET , 0 ) ,
OREQ ( " -menus-fast-move-threshhold-get " , " Get the mouse speed (pixels/sec) that is considered a fast move " , E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET , 1 ) ,
ODBL ( " -menus-click-drag-timeout-set " , " Set the time (in seconds) between a mouse press and release that will keep the menu up anyway " , E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_SET , 0 ) ,
OREQ ( " -menus-click-drag-timeout-get " , " Get the above value " , E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET , 1 ) ,
OINT ( " -border-shade-animate-set " , " Set the shading animation flag (0/1) " , E_IPC_OP_BORDER_SHADE_ANIMATE_SET , 0 ) ,
OREQ ( " -border-shade-animate-get " , " Get the shading animation flag " , E_IPC_OP_BORDER_SHADE_ANIMATE_GET , 1 ) ,
OINT ( " -border-shade-transition-set " , " Set the shading animation algorithm (0, 1, 2 or 3) " , E_IPC_OP_BORDER_SHADE_TRANSITION_SET , 0 ) ,
OREQ ( " -border-shade-transition-get " , " Get the above value " , E_IPC_OP_BORDER_SHADE_TRANSITION_GET , 1 ) ,
ODBL ( " -border-shade-speed-set " , " Set the shading speed (pixels/sec) " , E_IPC_OP_BORDER_SHADE_SPEED_SET , 0 ) ,
OREQ ( " -border-shade-speed-get " , " Get the shading speed " , E_IPC_OP_BORDER_SHADE_SPEED_GET , 1 ) ,
2005-05-18 03:18:02 -07:00
O2INT ( " -desks-set " , " Set the number of virtual desktops (X x Y. OPT1 = X, OPT2 = Y) " , E_IPC_OP_DESKS_SET , 0 ) ,
2005-05-20 00:32:42 -07:00
OREQ ( " -desks-get " , " Get the number of virtual desktops " , E_IPC_OP_DESKS_GET , 1 ) ,
2004-12-01 20:24:54 -08:00
} ;
2004-11-26 03:11:05 -08:00
/* externally accessible functions */
int
main ( int argc , char * * argv )
{
int i ;
2005-01-05 01:09:03 -08:00
char * s , buf [ 1024 ] ;
/* fix up DISPLAY to be :N.0 if no .screen is in it */
s = getenv ( " DISPLAY " ) ;
if ( s )
{
char * p ;
p = strrchr ( s , ' : ' ) ;
if ( ! p )
{
snprintf ( buf , sizeof ( buf ) , " DISPLAY=%s:0.0 " , s ) ;
2005-04-14 02:09:22 -07:00
putenv ( strdup ( buf ) ) ;
2005-01-05 01:09:03 -08:00
}
else
{
p = strrchr ( p , ' . ' ) ;
if ( ! p )
{
snprintf ( buf , sizeof ( buf ) , " DISPLAY=%s.0 " , s ) ;
2005-04-14 02:09:22 -07:00
putenv ( strdup ( buf ) ) ;
2005-01-05 01:09:03 -08:00
}
}
}
2004-11-26 03:11:05 -08:00
/* handle some command-line parameters */
2004-11-26 04:20:38 -08:00
display_name = ( const char * ) getenv ( " DISPLAY " ) ;
2004-11-26 03:11:05 -08:00
for ( i = 1 ; i < argc ; i + + )
{
2004-11-26 04:20:38 -08:00
if ( ( ! strcmp ( argv [ i ] , " -display " ) ) & & ( i < ( argc - 1 ) ) )
2004-11-26 03:11:05 -08:00
{
i + + ;
2004-11-26 04:20:38 -08:00
display_name = argv [ i ] ;
2004-11-26 03:11:05 -08:00
}
2004-12-01 20:24:54 -08:00
else if ( ( ! strcmp ( argv [ i ] , " -h " ) ) | |
( ! strcmp ( argv [ i ] , " -help " ) ) | |
( ! strcmp ( argv [ i ] , " --h " ) ) | |
( ! strcmp ( argv [ i ] , " --help " ) ) )
{
_e_help ( ) ;
exit ( 0 ) ;
}
2004-11-26 03:11:05 -08:00
}
/* basic ecore init */
if ( ! ecore_init ( ) )
{
2004-11-26 04:20:38 -08:00
printf ( " ERROR: Enlightenment_remote cannot Initialize Ecore! \n "
2004-11-26 03:11:05 -08:00
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
ecore_app_args_set ( ( int ) argc , ( const char * * ) argv ) ;
/* setup a handler for when e is asked to exit via a system signal */
if ( ! ecore_event_handler_add ( ECORE_EVENT_SIGNAL_EXIT , _e_cb_signal_exit , NULL ) )
{
2004-11-26 04:20:38 -08:00
printf ( " ERROR: Enlightenment_remote cannot set up an exit signal handler. \n "
2004-11-26 03:11:05 -08:00
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
/* init ipc */
if ( ! ecore_ipc_init ( ) )
{
2004-11-26 04:20:38 -08:00
printf ( " ERROR: Enlightenment_remote cannot initialize the ipc system. \n "
2004-11-26 03:11:05 -08:00
" Perhaps you are out of memory? \n " ) ;
exit ( - 1 ) ;
}
/* setup e ipc service */
if ( ! _e_ipc_init ( ) )
{
2004-11-26 04:20:38 -08:00
printf ( " ERROR: Enlightenment_remote cannot set up the IPC socket. \n "
2005-01-05 01:09:03 -08:00
" Maybe try the '-display :0.0' option? \n " ) ;
2004-11-26 03:11:05 -08:00
exit ( - 1 ) ;
}
2005-05-13 08:15:52 -07:00
e_ipc_codec_init ( ) ;
2004-11-26 03:11:05 -08:00
/* start our main loop */
ecore_main_loop_begin ( ) ;
2005-05-13 08:15:52 -07:00
e_ipc_codec_shutdown ( ) ;
2004-11-26 04:20:38 -08:00
_e_ipc_shutdown ( ) ;
ecore_ipc_shutdown ( ) ;
ecore_shutdown ( ) ;
2004-11-26 03:11:05 -08:00
/* just return 0 to keep the compiler quiet */
return 0 ;
}
/* local subsystem functions */
static int
_e_cb_signal_exit ( void * data , int ev_type , void * ev )
{
/* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
ecore_main_loop_quit ( ) ;
return 1 ;
}
static int
_e_ipc_init ( void )
{
2004-11-26 04:20:38 -08:00
char buf [ 1024 ] ;
char * disp ;
disp = ( char * ) display_name ;
if ( ! disp ) disp = " :0 " ;
snprintf ( buf , sizeof ( buf ) , " enlightenment-(%s) " , disp ) ;
_e_ipc_server = ecore_ipc_server_connect ( ECORE_IPC_LOCAL_USER , buf , 0 , NULL ) ;
/* FIXME: we shoudl also try the generic ":0" if the display is ":0.0" */
/* similar... */
if ( ! _e_ipc_server ) return 0 ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_ADD , _e_ipc_cb_server_add , NULL ) ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_DEL , _e_ipc_cb_server_del , NULL ) ;
ecore_event_handler_add ( ECORE_IPC_EVENT_SERVER_DATA , _e_ipc_cb_server_data , NULL ) ;
return 1 ;
}
static void
_e_ipc_shutdown ( void )
{
if ( _e_ipc_server )
{
ecore_ipc_server_del ( _e_ipc_server ) ;
_e_ipc_server = NULL ;
}
}
static int
_e_ipc_cb_server_add ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Add * e ;
int argc ;
char * * argv ;
int i ;
2004-12-01 20:24:54 -08:00
int process_count = 0 ;
2004-11-26 04:20:38 -08:00
e = event ;
ecore_app_args_get ( & argc , & argv ) ;
for ( i = 1 ; i < argc ; i + + )
{
2005-04-02 08:40:37 -08:00
char * v , * p ;
2004-12-01 20:24:54 -08:00
int j ;
2005-04-02 08:40:37 -08:00
int k ;
int data_size ;
2004-12-01 20:24:54 -08:00
2004-12-22 22:38:27 -08:00
for ( j = 0 ; j < ( int ) ( sizeof ( handlers ) / sizeof ( E_IPC_Opt_Handler ) ) ; j + + )
2004-11-26 04:20:38 -08:00
{
2004-12-01 20:24:54 -08:00
E_IPC_Opt_Handler * handler ;
handler = & handlers [ j ] ;
if ( ! strcmp ( handler - > option , argv [ i ] ) )
{
if ( i > = ( argc - handler - > num_params ) )
{
printf ( " ERROR: option %s expects %i parameters \n " ,
handler - > option , handler - > num_params ) ;
exit ( - 1 ) ;
}
else
{
switch ( handler - > type )
{
case SIMPLE_REQ :
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
NULL , 0 ) ;
break ;
case SIMPLE_STR_REQ :
2005-05-30 20:01:53 -07:00
v = e_ipc_codec_str_enc ( argv [ i + 1 ] , & data_size ) ;
2004-12-01 20:24:54 -08:00
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
2005-05-30 20:01:53 -07:00
v , data_size ) ;
free ( v ) ;
2004-12-01 20:24:54 -08:00
break ;
2005-04-02 08:40:37 -08:00
case MULTI_STR_REQ :
/* pack up the data "<str>0<str>0" */
data_size = 0 ;
2005-05-13 10:21:04 -07:00
for ( k = 0 ; k < handler - > num_params ; k + + )
{
data_size + = strlen ( argv [ i + 1 + k ] ) ;
data_size + + ; /* NULL Pad */
}
2005-04-02 08:40:37 -08:00
v = malloc ( data_size ) ;
p = v ;
2005-05-13 10:21:04 -07:00
for ( k = 0 ; k < handler - > num_params ; k + + )
{
2005-04-02 08:40:37 -08:00
strcpy ( p , argv [ i + 1 + k ] ) ;
p + = strlen ( argv [ i + 1 + k ] ) ;
* p = 0 ;
p + + ;
2005-05-13 10:21:04 -07:00
}
2005-04-02 08:40:37 -08:00
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
v , data_size ) ;
free ( v ) ;
break ;
2004-12-01 20:24:54 -08:00
case FULL_FUNC :
handler - > func ( argv + i + 1 ) ;
break ;
2005-05-13 10:21:04 -07:00
case SIMPLE_INT_REQ :
v = e_ipc_codec_int_enc ( atoi ( argv [ i + 1 ] ) ,
& data_size ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
v , data_size ) ;
free ( v ) ;
break ;
case SIMPLE_DBL_REQ :
v = e_ipc_codec_double_enc ( atof ( argv [ i + 1 ] ) ,
& data_size ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
v , data_size ) ;
free ( v ) ;
break ;
case SIMPLE_2INT_REQ :
v = e_ipc_codec_2int_enc ( atoi ( argv [ i + 1 ] ) ,
atoi ( argv [ i + 2 ] ) ,
& data_size ) ;
ecore_ipc_server_send ( _e_ipc_server ,
E_IPC_DOMAIN_REQUEST ,
handler - > simple_request_id ,
0 /*ref*/ , 0 /*ref_to*/ , 0 /*response*/ ,
v , data_size ) ;
free ( v ) ;
break ;
2004-12-01 20:24:54 -08:00
default :
break ;
}
process_count + + ;
reply_expect + = handler - > replies ;
i + = handler - > num_params ;
break ;
}
}
2004-11-26 04:20:38 -08:00
}
}
2004-12-01 20:24:54 -08:00
if ( process_count < = 0 )
_e_help ( ) ;
2004-11-26 04:20:38 -08:00
if ( reply_count > = reply_expect ) ecore_main_loop_quit ( ) ;
return 1 ;
}
static int
_e_ipc_cb_server_del ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Del * e ;
e = event ;
2005-04-02 08:40:37 -08:00
return 1 ;
2004-11-26 04:20:38 -08:00
}
static int
_e_ipc_cb_server_data ( void * data , int type , void * event )
{
Ecore_Ipc_Event_Server_Data * e ;
e = event ;
2004-12-01 20:24:54 -08:00
/* FIXME: should make this function/callback based in a table like the */
/* option handlers... */
2004-11-26 04:20:38 -08:00
printf ( " REPLY: BEGIN \n " ) ;
switch ( e - > minor )
{
2005-04-02 08:40:37 -08:00
case E_IPC_OP_FONT_FALLBACK_LIST_REPLY :
if ( e - > data )
{
2005-04-21 21:25:51 -07:00
Evas_List * fallbacks ;
E_Font_Fallback * eff ;
2005-04-02 08:40:37 -08:00
2005-04-21 21:25:51 -07:00
fallbacks = _e_ipc_font_fallback_list_dec ( e - > data , e - > size ) ;
2005-05-30 20:01:53 -07:00
while ( fallbacks )
2005-05-02 03:16:31 -07:00
{
eff = fallbacks - > data ;
printf ( " REPLY: FALLBACK NAME= \" %s \" \n " , eff - > name ) ;
fallbacks = evas_list_remove_list ( fallbacks , fallbacks ) ;
E_FREE ( eff ) ;
}
2005-04-02 08:40:37 -08:00
}
else
printf ( " REPLY: FALLBACK NONE \n " ) ;
break ;
case E_IPC_OP_FONT_DEFAULT_GET_REPLY :
if ( e - > data )
{
2005-04-21 21:25:51 -07:00
E_Font_Default efd ;
_e_ipc_font_default_dec ( e - > data , e - > size , & efd ) ;
printf ( " REPLY: DEFAULT TEXT_CLASS= \" %s \" NAME= \" %s \" SIZE=%d \n " ,
2005-05-02 03:16:31 -07:00
efd . text_class , efd . font , efd . size ) ;
2005-04-02 08:40:37 -08:00
}
else
printf ( " REPLY: DEFAULT NONE \n " ) ;
break ;
case E_IPC_OP_FONT_DEFAULT_LIST_REPLY :
if ( e - > data )
{
2005-04-21 21:25:51 -07:00
Evas_List * defaults ;
E_Font_Default * efd ;
2005-05-02 03:16:31 -07:00
2005-04-21 21:25:51 -07:00
defaults = _e_ipc_font_default_list_dec ( e - > data , e - > size ) ;
2005-05-03 01:06:50 -07:00
while ( defaults )
2005-04-21 21:25:51 -07:00
{
2005-05-02 03:16:31 -07:00
efd = defaults - > data ;
printf ( " REPLY: DEFAULT TEXT_CLASS= \" %s \" NAME= \" %s \" SIZE=%d \n " ,
efd - > text_class , efd - > font , efd - > size ) ;
2005-04-21 21:25:51 -07:00
defaults = evas_list_remove_list ( defaults , defaults ) ;
E_FREE ( efd ) ;
2005-04-02 08:40:37 -08:00
}
}
else
printf ( " REPLY: DEFAULT NONE \n " ) ;
break ;
2005-05-02 03:16:31 -07:00
case E_IPC_OP_LANG_LIST_REPLY :
if ( e - > data )
{
2005-05-03 01:06:50 -07:00
Evas_List * langs ;
langs = _e_ipc_str_list_dec ( e - > data , e - > size ) ;
if ( langs )
{
Evas_List * l ;
for ( l = langs ; l ; l = l - > next )
2005-05-12 06:56:30 -07:00
printf ( " REPLY: LANG= \" %s \" \n " , ( char * ) l - > data ) ;
2005-05-03 01:06:50 -07:00
evas_list_free ( langs ) ;
}
2005-05-02 03:16:31 -07:00
}
else
printf ( " REPLY: AVAILABLE NONE \n " ) ;
break ;
2005-05-03 01:06:50 -07:00
case E_IPC_OP_LANG_GET_REPLY :
if ( e - > data )
{
2005-05-12 06:56:30 -07:00
printf ( " REPLY: %s \n " , ( char * ) e - > data ) ;
2005-05-03 01:06:50 -07:00
}
break ;
2005-05-03 09:27:46 -07:00
case E_IPC_OP_BINDING_MOUSE_LIST_REPLY :
if ( e - > data )
{
Evas_List * bindings ;
E_Config_Binding_Mouse * eb ;
2005-05-03 21:50:33 -07:00
bindings = _e_ipc_mouse_binding_list_dec ( e - > data , e - > size ) ;
2005-05-03 09:27:46 -07:00
while ( bindings )
{
eb = bindings - > data ;
printf ( " REPLY: BINDING CONTEXT=%s MODIFIERS=%s BUTTON=%i ANY_MOD=%i ACTION= \" %s \" PARAMS= \" %s \" \n " ,
_e_ipc_context_str ( eb - > context ) ,
_e_ipc_modifier_str ( eb - > modifiers ) ,
eb - > button ,
eb - > any_mod ,
eb - > action ,
eb - > params
) ;
bindings = evas_list_remove_list ( bindings , bindings ) ;
E_FREE ( eb ) ;
}
}
else
printf ( " REPLY: AVAILABLE NONE \n " ) ;
break ;
case E_IPC_OP_BINDING_KEY_LIST_REPLY :
if ( e - > data )
{
Evas_List * bindings ;
E_Config_Binding_Key * eb ;
2005-05-03 21:50:33 -07:00
bindings = _e_ipc_key_binding_list_dec ( e - > data , e - > size ) ;
2005-05-03 09:27:46 -07:00
while ( bindings )
{
eb = bindings - > data ;
printf ( " REPLY: BINDING CONTEXT=%s MODIFIERS=%s KEY= \" %s \" ANY_MOD=%i ACTION= \" %s \" PARAMS= \" %s \" \n " ,
_e_ipc_context_str ( eb - > context ) ,
_e_ipc_modifier_str ( eb - > modifiers ) ,
eb - > key ,
eb - > any_mod ,
eb - > action ,
eb - > params
) ;
bindings = evas_list_remove_list ( bindings , bindings ) ;
E_FREE ( eb ) ;
}
}
else
printf ( " REPLY: AVAILABLE NONE \n " ) ;
break ;
2005-05-19 20:09:44 -07:00
case E_IPC_OP_DATA_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: DATA DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_IMAGE_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: IMAGE DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_FONT_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: FONT DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_THEME_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: THEME DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_INIT_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: INIT DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_ICON_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: ICON DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_MODULE_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: MODULE DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
case E_IPC_OP_BG_DIRS_LIST_REPLY :
if ( e - > data )
{
Evas_List * dirs ;
E_Path_Dir * dir ;
dirs = _e_ipc_path_list_dec ( e - > data , e - > size ) ;
while ( dirs )
{
dir = dirs - > data ;
printf ( " REPLY: BACKGROUND DIR= \" %s \" \n " , dir - > dir ) ;
dirs = evas_list_remove_list ( dirs , dirs ) ;
E_FREE ( dir ) ;
}
}
break ;
2005-05-13 10:21:04 -07:00
case E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY :
if ( e - > data )
{
double val ;
if ( e_ipc_codec_double_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %3.3f \n " , val ) ;
}
break ;
case E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET_REPLY :
if ( e - > data )
{
double val ;
if ( e_ipc_codec_double_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %3.3f \n " , val ) ;
}
break ;
case E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY :
if ( e - > data )
{
double val ;
if ( e_ipc_codec_double_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %3.3f \n " , val ) ;
}
break ;
case E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY :
if ( e - > data )
{
int val ;
if ( e_ipc_codec_int_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %i \n " , val ) ;
}
break ;
case E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY :
if ( e - > data )
{
int val ;
if ( e_ipc_codec_int_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %i \n " , val ) ;
}
break ;
case E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY :
if ( e - > data )
{
double val ;
if ( e_ipc_codec_double_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %3.3f \n " , val ) ;
}
break ;
case E_IPC_OP_FRAMERATE_GET_REPLY :
if ( e - > data )
{
double val ;
if ( e_ipc_codec_double_dec ( e - > data , e - > size , & val ) )
printf ( " REPLY: %3.3f \n " , val ) ;
}
break ;
case E_IPC_OP_DESKS_GET_REPLY :
if ( e - > data )
{
int val1 ;
int val2 ;
if ( e_ipc_codec_2int_dec ( e - > data , e - > size , & val1 , & val2 ) )
printf ( " REPLY: %i %i \n " , val1 , val2 ) ;
}
break ;
2004-11-26 04:20:38 -08:00
default :
break ;
}
printf ( " REPLY: END \n " ) ;
reply_count + + ;
if ( reply_count > = reply_expect ) ecore_main_loop_quit ( ) ;
return 1 ;
2004-11-26 03:11:05 -08:00
}
2004-12-01 20:24:54 -08:00
static void
_e_help ( void )
{
int j , k , l ;
E_IPC_Opt_Handler * handler ;
char buf [ 128 ] ;
int parsize = 0 , opsize = 0 ;
printf ( " OPTIONS: \n " ) ;
2004-12-22 22:38:27 -08:00
for ( j = 0 ; j < ( int ) ( sizeof ( handlers ) / sizeof ( E_IPC_Opt_Handler ) ) ; j + + )
2004-12-01 20:24:54 -08:00
{
handler = & handlers [ j ] ;
2004-12-22 22:38:27 -08:00
if ( ( int ) strlen ( handler - > option ) > parsize ) parsize = strlen ( handler - > option ) ;
2004-12-01 20:24:54 -08:00
l = 0 ;
for ( k = 0 ; k < handler - > num_params ; k + + )
{
snprintf ( buf , sizeof ( buf ) , " OPT%i " , k + 1 ) ;
l + = strlen ( buf ) ;
}
if ( l > opsize ) opsize = l ;
}
2004-12-22 22:38:27 -08:00
for ( j = 0 ; j < ( int ) ( sizeof ( handlers ) / sizeof ( E_IPC_Opt_Handler ) ) ; j + + )
2004-12-01 20:24:54 -08:00
{
handler = & handlers [ j ] ;
printf ( " %s " , handler - > option ) ;
l = parsize - strlen ( handler - > option ) ;
for ( k = 0 ; k < l ; k + + ) printf ( " " ) ;
l = 0 ;
for ( k = 0 ; k < handler - > num_params ; k + + )
{
snprintf ( buf , sizeof ( buf ) , " OPT%i " , k + 1 ) ;
printf ( " %s " , buf ) ;
l + = strlen ( buf ) ;
}
while ( l < opsize )
{
printf ( " " ) ;
l + + ;
}
printf ( " - %s \n " , handler - > desc ) ;
}
}
2005-04-21 21:25:51 -07:00
2005-05-03 01:06:50 -07:00
/* generic encoding functions */
2005-05-03 09:27:46 -07:00
static const char *
_e_ipc_context_str ( int context )
{
if ( context = = E_BINDING_CONTEXT_NONE ) return " NONE " ;
if ( context = = E_BINDING_CONTEXT_UNKNOWN ) return " UNKNOWN " ;
if ( context = = E_BINDING_CONTEXT_BORDER ) return " BORDER " ;
if ( context = = E_BINDING_CONTEXT_ZONE ) return " ZONE " ;
if ( context = = E_BINDING_CONTEXT_MANAGER ) return " MANAGER " ;
if ( context = = E_BINDING_CONTEXT_ANY ) return " ANY " ;
return " " ;
}
static char _mod_buf [ 256 ] ;
static const char *
_e_ipc_modifier_str ( int mod )
{
_mod_buf [ 0 ] = 0 ;
if ( mod & E_BINDING_MODIFIER_SHIFT )
{
if ( _mod_buf [ 0 ] ! = 0 ) strcat ( _mod_buf , " | " ) ;
strcat ( _mod_buf , " SHIFT " ) ;
}
if ( mod & E_BINDING_MODIFIER_CTRL )
{
if ( _mod_buf [ 0 ] ! = 0 ) strcat ( _mod_buf , " | " ) ;
strcat ( _mod_buf , " CTRL " ) ;
}
if ( mod & E_BINDING_MODIFIER_ALT )
{
if ( _mod_buf [ 0 ] ! = 0 ) strcat ( _mod_buf , " | " ) ;
strcat ( _mod_buf , " ALT " ) ;
}
if ( mod & E_BINDING_MODIFIER_WIN )
{
if ( _mod_buf [ 0 ] ! = 0 ) strcat ( _mod_buf , " | " ) ;
strcat ( _mod_buf , " WIN " ) ;
}
2005-05-17 22:06:05 -07:00
if ( mod = = E_BINDING_MODIFIER_NONE )
strcpy ( _mod_buf , " NONE " ) ;
2005-05-03 09:27:46 -07:00
return _mod_buf ;
}
2005-05-30 20:01:53 -07:00
# endif