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:
Carsten Haitzler 2005-05-02 10:16:31 +00:00
parent 2eaa1ce1c7
commit b1422de636
6 changed files with 176 additions and 71 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;
}
@ -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
*
@ -472,17 +537,16 @@ _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;
char **str_array;
int i;
/* Make sure our data is packed for us <str>0<str>0 */
if( data[bytes - 1] != 0) {
if (data[bytes - 1] != 0)
return NULL;
}
str_array = malloc(sizeof(char *)*str_count);
str_array = malloc(sizeof(char *) * str_count);
for(i = 0; i < str_count; i++)
for (i = 0; i < str_count; i++)
{
str_array[i] = data;
data += strlen(str_array[i]) + 1;
@ -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();
}
*/

View File

@ -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;

View File

@ -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 */
@ -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;
}