forked from enlightenment/enlightenment
fix focus loss on window unfocus so keybindings still work
some start on language set/get/list ipc SVN revision: 14548
This commit is contained in:
parent
2eaa1ce1c7
commit
b1422de636
|
@ -1327,7 +1327,11 @@ _e_border_free(E_Border *bd)
|
|||
e_object_del(E_OBJECT(bd->border_menu));
|
||||
bd->border_menu = NULL;
|
||||
}
|
||||
if (focused == bd) focused = NULL;
|
||||
if (focused == bd)
|
||||
{
|
||||
ecore_x_window_focus(bd->container->manager->root);
|
||||
focused = NULL;
|
||||
}
|
||||
while (bd->handlers)
|
||||
{
|
||||
Ecore_Event_Handler *h;
|
||||
|
|
|
@ -83,6 +83,7 @@ e_config_init(void)
|
|||
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, language, STR);
|
||||
E_CONFIG_LIST(D, T, modules, _e_config_module_edd);
|
||||
E_CONFIG_LIST(D, T, font_fallbacks, _e_config_font_fallback_edd);
|
||||
E_CONFIG_LIST(D, T, font_defaults, _e_config_font_default_edd);
|
||||
|
@ -106,6 +107,7 @@ e_config_init(void)
|
|||
e_config->zone_desks_x_count = 4;
|
||||
e_config->zone_desks_y_count = 1;
|
||||
e_config->use_virtual_roots = 0;
|
||||
e_config->language = strdup("");
|
||||
{
|
||||
E_Config_Module *em;
|
||||
|
||||
|
@ -194,6 +196,11 @@ e_config_init(void)
|
|||
E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
|
||||
E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
|
||||
|
||||
/* apply config */
|
||||
|
||||
if ((e_config->language) && (strlen(e_config->language) > 0))
|
||||
e_intl_language_set(e_config->language);
|
||||
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
|
@ -258,6 +265,7 @@ e_config_shutdown(void)
|
|||
}
|
||||
|
||||
E_FREE(e_config->desktop_default_background);
|
||||
E_FREE(e_config->language);
|
||||
E_FREE(e_config);
|
||||
}
|
||||
E_CONFIG_DD_FREE(_e_config_edd);
|
||||
|
|
|
@ -55,6 +55,7 @@ struct _E_Config
|
|||
int zone_desks_x_count;
|
||||
int zone_desks_y_count;
|
||||
int use_virtual_roots;
|
||||
char *language;
|
||||
Evas_List *modules;
|
||||
Evas_List *font_fallbacks;
|
||||
Evas_List *font_defaults;
|
||||
|
|
133
src/bin/e_ipc.c
133
src/bin/e_ipc.c
|
@ -5,6 +5,7 @@ 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 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);
|
||||
static char **_e_ipc_multi_str_dec(char *data, int bytes, int str_count);
|
||||
|
||||
|
@ -14,6 +15,7 @@ ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc);
|
|||
ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc);
|
||||
ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc);
|
||||
ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc);
|
||||
//ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_string_list_enc);
|
||||
|
||||
/* local subsystem globals */
|
||||
static Ecore_Ipc_Server *_e_ipc_server = NULL;
|
||||
|
@ -213,9 +215,9 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
case E_IPC_OP_BG_GET:
|
||||
{
|
||||
char *bg;
|
||||
|
||||
bg = e_config->desktop_default_background;
|
||||
if (!bg)
|
||||
bg = "";
|
||||
if (!bg) bg = "";
|
||||
ecore_ipc_client_send(e->client,
|
||||
E_IPC_DOMAIN_REPLY,
|
||||
E_IPC_OP_BG_GET_REPLY,
|
||||
|
@ -328,7 +330,7 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
int bytes;
|
||||
|
||||
text_class = _e_ipc_simple_str_dec(e->data, e->size);
|
||||
efd = e_font_default_get (text_class);
|
||||
efd = e_font_default_get(text_class);
|
||||
free(text_class);
|
||||
data = _e_ipc_font_default_enc(efd, &bytes);
|
||||
ecore_ipc_client_send(e->client,
|
||||
|
@ -399,6 +401,45 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
ecore_main_loop_quit();
|
||||
}
|
||||
break;
|
||||
case E_IPC_OP_LANG_LIST:
|
||||
{
|
||||
Evas_List *langs;
|
||||
int bytes;
|
||||
char *data;
|
||||
|
||||
langs = (Evas_List *)e_intl_language_list();
|
||||
data = _e_ipc_str_list_get(langs, &bytes);
|
||||
ecore_ipc_client_send(e->client,
|
||||
E_IPC_DOMAIN_REPLY,
|
||||
E_IPC_OP_LANG_LIST_REPLY,
|
||||
0/*ref*/, 0/*ref_to*/, 0/*response*/,
|
||||
data, bytes);
|
||||
free(data);
|
||||
}
|
||||
case E_IPC_OP_LANG_SET:
|
||||
{
|
||||
char *lang;
|
||||
|
||||
lang = _e_ipc_simple_str_dec(e->data, e->size);
|
||||
IF_FREE(e_config->language);
|
||||
e_config->language = lang;
|
||||
e_intl_language_set(e_config->language);
|
||||
e_config_save_queue();
|
||||
}
|
||||
case E_IPC_OP_LANG_GET:
|
||||
{
|
||||
char *lang;
|
||||
|
||||
lang = e_config->language;
|
||||
if (!lang) lang = "";
|
||||
ecore_ipc_client_send(e->client,
|
||||
E_IPC_DOMAIN_REPLY,
|
||||
E_IPC_OP_LANG_GET_REPLY,
|
||||
0/*ref*/, 0/*ref_to*/, 0/*response*/,
|
||||
lang, strlen(lang) + 1);
|
||||
free(data);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -422,7 +463,7 @@ _e_ipc_path_str_get(char **paths, int *bytes)
|
|||
char *data = NULL, **cur, *home;
|
||||
int pos = 0;
|
||||
char tmp[PATH_MAX];
|
||||
|
||||
|
||||
*bytes = 0;
|
||||
home = e_user_homedir_get();
|
||||
for (cur = paths; *cur != NULL; cur++)
|
||||
|
@ -444,6 +485,30 @@ _e_ipc_path_str_get(char **paths, int *bytes)
|
|||
return data;
|
||||
}
|
||||
|
||||
static char *
|
||||
_e_ipc_str_list_get(Evas_List *strs, int *bytes)
|
||||
{
|
||||
char *data = NULL, **cur;
|
||||
int pos = 0;
|
||||
Evas_List *l;
|
||||
|
||||
*bytes = 0;
|
||||
for (l = strs; l; l = l->next)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = l->data;
|
||||
|
||||
*bytes += strlen(p) + 1;
|
||||
data = realloc(data, *bytes);
|
||||
|
||||
memcpy(data + pos, p, strlen(p));
|
||||
pos = *bytes;
|
||||
data[pos - 1] = 0;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a simple string that was passed by an IPC client
|
||||
*
|
||||
|
@ -452,13 +517,13 @@ _e_ipc_path_str_get(char **paths, int *bytes)
|
|||
static char *
|
||||
_e_ipc_simple_str_dec(char *data, int bytes)
|
||||
{
|
||||
char *str;
|
||||
|
||||
str = malloc(bytes + 1);
|
||||
str[bytes] = 0;
|
||||
memcpy(str, data, bytes);
|
||||
|
||||
return str;
|
||||
char *str;
|
||||
|
||||
str = malloc(bytes + 1);
|
||||
str[bytes] = 0;
|
||||
memcpy(str, data, bytes);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -472,26 +537,25 @@ _e_ipc_simple_str_dec(char *data, int bytes)
|
|||
static char **
|
||||
_e_ipc_multi_str_dec(char *data, int bytes, int str_count)
|
||||
{
|
||||
char ** str_array;
|
||||
int i;
|
||||
|
||||
/* Make sure our data is packed for us <str>0<str>0 */
|
||||
if( data[bytes - 1] != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
str_array = malloc(sizeof(char *)*str_count);
|
||||
|
||||
for(i = 0; i < str_count; i++)
|
||||
{
|
||||
char **str_array;
|
||||
int i;
|
||||
|
||||
/* Make sure our data is packed for us <str>0<str>0 */
|
||||
if (data[bytes - 1] != 0)
|
||||
return NULL;
|
||||
|
||||
str_array = malloc(sizeof(char *) * str_count);
|
||||
|
||||
for (i = 0; i < str_count; i++)
|
||||
{
|
||||
str_array[i] = data;
|
||||
data += strlen(str_array[i]) + 1;
|
||||
}
|
||||
|
||||
return str_array;
|
||||
}
|
||||
|
||||
return str_array;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* list/struct encoding functions */
|
||||
ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_module_list_enc)
|
||||
{
|
||||
|
@ -556,3 +620,16 @@ ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc)
|
|||
ECORE_IPC_PUT32(size);
|
||||
ECORE_IPC_ENC_STRUCT_FOOT();
|
||||
}
|
||||
|
||||
/*
|
||||
ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_string_list_enc)
|
||||
{
|
||||
ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_String);
|
||||
ECORE_IPC_CNTS(str);
|
||||
ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
|
||||
int l1;
|
||||
ECORE_IPC_SLEN(l1, str);
|
||||
ECORE_IPC_PUTS(str, l1);
|
||||
ECORE_IPC_ENC_EVAS_LIST_FOOT();
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -44,6 +44,11 @@ typedef enum _E_Ipc_Op {
|
|||
E_IPC_OP_FONT_DEFAULT_LIST_REPLY,
|
||||
E_IPC_OP_RESTART,
|
||||
E_IPC_OP_SHUTDOWN,
|
||||
E_IPC_OP_LANG_LIST,
|
||||
E_IPC_OP_LANG_LIST_REPLY,
|
||||
E_IPC_OP_LANG_SET,
|
||||
E_IPC_OP_LANG_GET,
|
||||
E_IPC_OP_LANG_GET_REPLY,
|
||||
E_IPC_OP_LAST
|
||||
} E_Ipc_Op;
|
||||
|
||||
|
|
|
@ -72,7 +72,10 @@ E_IPC_Opt_Handler handlers[] =
|
|||
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),
|
||||
OREQ("-restart", "Restart E17", E_IPC_OP_RESTART, 0),
|
||||
OREQ("-shutdown", "Shutdown E17", E_IPC_OP_SHUTDOWN, 0)
|
||||
OREQ("-shutdown", "Shutdown E17", E_IPC_OP_SHUTDOWN, 0),
|
||||
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),
|
||||
OSTR("-lang-set", "Set the current language", E_IPC_OP_LANG_SET, 0)
|
||||
};
|
||||
|
||||
/* externally accessible functions */
|
||||
|
@ -338,7 +341,7 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
else
|
||||
printf("REPLY: MODULE NONE\n");
|
||||
break;
|
||||
case E_IPC_OP_MODULE_DIRS_LIST_REPLY:
|
||||
case E_IPC_OP_MODULE_DIRS_LIST_REPLY:
|
||||
if (e->data)
|
||||
{
|
||||
char *p;
|
||||
|
@ -347,35 +350,35 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
while (p < (char *)(e->data + e->size))
|
||||
{
|
||||
char *dir;
|
||||
|
||||
|
||||
dir = p;
|
||||
printf("REPLY: MODULE DIR=%s\n", dir);
|
||||
p += strlen(dir) + 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case E_IPC_OP_BG_GET_REPLY:
|
||||
if (e->data)
|
||||
{
|
||||
printf("REPLY: %s\n", e->data);
|
||||
}
|
||||
break;
|
||||
if (e->data)
|
||||
{
|
||||
printf("REPLY: %s\n", e->data);
|
||||
}
|
||||
break;
|
||||
case E_IPC_OP_BG_DIRS_LIST_REPLY:
|
||||
if (e->data)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = e->data;
|
||||
while (p < (char *)(e->data + e->size))
|
||||
{
|
||||
char *dir;
|
||||
|
||||
dir = p;
|
||||
printf("REPLY: BG DIR=%s\n", dir);
|
||||
p += strlen(dir) + 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
if (e->data)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = e->data;
|
||||
while (p < (char *)(e->data + e->size))
|
||||
{
|
||||
char *dir;
|
||||
|
||||
dir = p;
|
||||
printf("REPLY: BG DIR=%s\n", dir);
|
||||
p += strlen(dir) + 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case E_IPC_OP_FONT_FALLBACK_LIST_REPLY:
|
||||
if (e->data)
|
||||
{
|
||||
|
@ -384,12 +387,12 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
|
||||
fallbacks = _e_ipc_font_fallback_list_dec(e->data, e->size);
|
||||
while(fallbacks)
|
||||
{
|
||||
eff = fallbacks->data;
|
||||
printf("REPLY: FALLBACK NAME=\"%s\"\n", eff->name);
|
||||
fallbacks = evas_list_remove_list(fallbacks, fallbacks);
|
||||
E_FREE(eff);
|
||||
}
|
||||
{
|
||||
eff = fallbacks->data;
|
||||
printf("REPLY: FALLBACK NAME=\"%s\"\n", eff->name);
|
||||
fallbacks = evas_list_remove_list(fallbacks, fallbacks);
|
||||
E_FREE(eff);
|
||||
}
|
||||
}
|
||||
else
|
||||
printf("REPLY: FALLBACK NONE\n");
|
||||
|
@ -399,15 +402,15 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
{
|
||||
Evas_List *available;
|
||||
E_Font_Available *fa;
|
||||
|
||||
|
||||
available = _e_ipc_font_available_list_dec(e->data, e->size);
|
||||
while(available)
|
||||
{
|
||||
fa = available->data;
|
||||
printf("REPLY: AVAILABLE NAME=\"%s\"\n", fa->name);
|
||||
available = evas_list_remove_list(available, available);
|
||||
E_FREE(fa);
|
||||
}
|
||||
{
|
||||
fa = available->data;
|
||||
printf("REPLY: AVAILABLE NAME=\"%s\"\n", fa->name);
|
||||
available = evas_list_remove_list(available, available);
|
||||
E_FREE(fa);
|
||||
}
|
||||
}
|
||||
else
|
||||
printf("REPLY: AVAILABLE NONE\n");
|
||||
|
@ -418,7 +421,7 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
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",
|
||||
efd.text_class, efd.font, efd.size);
|
||||
efd.text_class, efd.font, efd.size);
|
||||
}
|
||||
else
|
||||
printf("REPLY: DEFAULT NONE\n");
|
||||
|
@ -428,13 +431,13 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
{
|
||||
Evas_List *defaults;
|
||||
E_Font_Default *efd;
|
||||
|
||||
|
||||
defaults = _e_ipc_font_default_list_dec(e->data, e->size);
|
||||
while(defaults)
|
||||
{
|
||||
efd = defaults->data;
|
||||
printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n",
|
||||
efd->text_class, efd->font, efd->size);
|
||||
efd = defaults->data;
|
||||
printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n",
|
||||
efd->text_class, efd->font, efd->size);
|
||||
defaults = evas_list_remove_list(defaults, defaults);
|
||||
E_FREE(efd);
|
||||
}
|
||||
|
@ -442,6 +445,13 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
|
|||
else
|
||||
printf("REPLY: DEFAULT NONE\n");
|
||||
break;
|
||||
case E_IPC_OP_LANG_LIST_REPLY:
|
||||
if (e->data)
|
||||
{
|
||||
}
|
||||
else
|
||||
printf("REPLY: AVAILABLE NONE\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue