forked from enlightenment/enlightenment
giant comp rejiggering commit #LAST:
* merge init splash to comp canvas * remove enlightenment_init exe
This commit is contained in:
parent
3740656a66
commit
d10c5b0cf7
|
@ -32,7 +32,6 @@ enlightenment_open
|
|||
internal_bindir = $(libdir)/enlightenment/utils
|
||||
internal_bin_PROGRAMS = \
|
||||
enlightenment_fm_op \
|
||||
enlightenment_init \
|
||||
enlightenment_sys \
|
||||
enlightenment_thumb \
|
||||
enlightenment_alert \
|
||||
|
@ -425,12 +424,6 @@ enlightenment_backlight_CFLAGS = @SUID_CFLAGS@ @EEZE_CFLAGS@
|
|||
enlightenment_backlight_LDADD = @SUID_LDFLAGS@ @EEZE_LIBS@
|
||||
endif
|
||||
|
||||
enlightenment_init_SOURCES = \
|
||||
e_init_main.c \
|
||||
e_xinerama.c
|
||||
|
||||
enlightenment_init_LDADD = @E_INIT_LIBS@
|
||||
|
||||
enlightenment_alert_SOURCES = \
|
||||
e_alert_main.c
|
||||
|
||||
|
|
224
src/bin/e_init.c
224
src/bin/e_init.c
|
@ -2,28 +2,33 @@
|
|||
|
||||
EAPI int E_EVENT_INIT_DONE = 0;
|
||||
|
||||
/* local function prototypes */
|
||||
static Eina_Bool _e_init_cb_exe_event_del(void *data __UNUSED__, int type __UNUSED__, void *event);
|
||||
|
||||
/* local variables */
|
||||
static const char *title = NULL;
|
||||
static const char *version = NULL;
|
||||
static Ecore_Exe *init_exe = NULL;
|
||||
static Ecore_Event_Handler *exe_del_handler = NULL;
|
||||
static Ecore_Ipc_Client *client = NULL;
|
||||
static int done = 0;
|
||||
static int undone = 0;
|
||||
static Eina_List *stats = NULL;
|
||||
static Evas_Object *_e_init_object = NULL;
|
||||
static Eina_List *splash_objs = NULL;
|
||||
static Ecore_Timer *_e_init_timeout_timer = NULL;
|
||||
|
||||
static Eina_Bool
|
||||
_e_init_cb_timeout(void *data __UNUSED__)
|
||||
{
|
||||
_e_init_timeout_timer = NULL;
|
||||
e_init_hide();
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_init_cb_signal_done_ok(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||
{
|
||||
e_init_hide();
|
||||
}
|
||||
|
||||
/* public functions */
|
||||
EINTERN int
|
||||
e_init_init(void)
|
||||
{
|
||||
E_EVENT_INIT_DONE = ecore_event_type_new();
|
||||
exe_del_handler =
|
||||
ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
|
||||
_e_init_cb_exe_event_del, NULL);
|
||||
client = NULL;
|
||||
|
||||
done = 0;
|
||||
return 1;
|
||||
}
|
||||
|
@ -33,86 +38,99 @@ e_init_shutdown(void)
|
|||
{
|
||||
/* if not killed, kill init */
|
||||
e_init_hide();
|
||||
if (title) eina_stringshare_del(title);
|
||||
if (version) eina_stringshare_del(version);
|
||||
title = NULL;
|
||||
version = NULL;
|
||||
if (exe_del_handler) ecore_event_handler_del(exe_del_handler);
|
||||
exe_del_handler = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_show(void)
|
||||
{
|
||||
char buf[8192], *theme, *tit, *ver;
|
||||
const char *s = NULL;
|
||||
|
||||
Eina_Stringshare *theme;
|
||||
Evas_Object *o;
|
||||
E_Manager *man;
|
||||
E_Container *con;
|
||||
E_Zone *zone;
|
||||
Eina_List *l;
|
||||
/* exec init */
|
||||
|
||||
if (!e_config->init_default_theme)
|
||||
s = e_path_find(path_themes, "default.edj");
|
||||
theme = e_path_find(path_themes, "default.edj");
|
||||
else if (e_config->init_default_theme[0] == '/')
|
||||
s = eina_stringshare_add(e_config->init_default_theme);
|
||||
theme = eina_stringshare_add(e_config->init_default_theme);
|
||||
else
|
||||
s = e_path_find(path_themes, e_config->init_default_theme);
|
||||
theme = e_path_find(path_themes, e_config->init_default_theme);
|
||||
|
||||
if (s) theme = strdup(e_util_filename_escape(s));
|
||||
else theme = strdup("XdX");
|
||||
if (s) eina_stringshare_del(s);
|
||||
/* extra screens */
|
||||
EINA_LIST_FOREACH(e_manager_list()->next, l, man)
|
||||
{
|
||||
o = edje_object_add(e_comp_get(man)->evas);
|
||||
edje_object_file_set(o, theme, "e/init/extra_screen");
|
||||
evas_object_name_set(o, "_e_init_extra_screen");
|
||||
evas_object_move(o, 0, 0);
|
||||
evas_object_resize(o, man->w, man->h);
|
||||
evas_object_layer_set(o, E_COMP_CANVAS_LAYER_MAX);
|
||||
evas_object_show(o);
|
||||
splash_objs = eina_list_append(splash_objs, o);
|
||||
}
|
||||
|
||||
if (title) tit = strdup(e_util_filename_escape(title));
|
||||
else tit = strdup("XtX");
|
||||
|
||||
if (version) ver = strdup(e_util_filename_escape(version));
|
||||
else ver = strdup("XvX");
|
||||
|
||||
snprintf(buf, sizeof(buf),
|
||||
"exec %s/enlightenment/utils/enlightenment_init \'%s\' \'%i\' \'%s\' \'%s\'",
|
||||
e_prefix_lib_get(), theme,
|
||||
e_config->font_hinting, tit, ver);
|
||||
printf("RUN INIT: %s\n", buf);
|
||||
free(theme);
|
||||
free(tit);
|
||||
free(ver);
|
||||
/* FIXME: add font path to cmd-line */
|
||||
init_exe = ecore_exe_run(buf, NULL);
|
||||
man = eina_list_data_get(e_manager_list());
|
||||
con = eina_list_data_get(man->containers);
|
||||
EINA_LIST_FOREACH(con->zones, l, zone)
|
||||
{
|
||||
o = edje_object_add(e_comp_get(man)->evas);
|
||||
if (!zone->num)
|
||||
{
|
||||
edje_object_file_set(o, theme, "e/init/splash");
|
||||
evas_object_name_set(o, "_e_init_object");
|
||||
_e_init_object = o;
|
||||
}
|
||||
else
|
||||
{
|
||||
edje_object_file_set(o, theme, "e/init/extra_screen");
|
||||
evas_object_name_set(o, "_e_init_extra_screen");
|
||||
}
|
||||
evas_object_clip_set(o, zone->bg_clip_object);
|
||||
fprintf(stderr, "zone %p: %i %i %ix%i\n", zone, zone->x, zone->y, zone->w, zone->h);
|
||||
evas_object_move(o, zone->x, zone->y);
|
||||
evas_object_resize(o, zone->w, zone->h);
|
||||
evas_object_layer_set(o, E_COMP_CANVAS_LAYER_MAX);
|
||||
evas_object_show(o);
|
||||
splash_objs = eina_list_append(splash_objs, o);
|
||||
}
|
||||
edje_object_part_text_set(_e_init_object, "e.text.disable_text",
|
||||
"Disable splash screen");
|
||||
edje_object_signal_callback_add(_e_init_object, "e,state,done_ok", "e",
|
||||
_e_init_cb_signal_done_ok, NULL);
|
||||
eina_stringshare_del(theme);
|
||||
_e_init_timeout_timer = ecore_timer_add(240.0, _e_init_cb_timeout, NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_hide(void)
|
||||
{
|
||||
if (init_exe) ecore_exe_terminate(init_exe);
|
||||
E_FREE_LIST(splash_objs, evas_object_del);
|
||||
_e_init_object = NULL;
|
||||
E_FREE_FUNC(_e_init_timeout_timer, ecore_timer_del);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_title_set(const char *str)
|
||||
{
|
||||
if (title) eina_stringshare_del(title);
|
||||
title = eina_stringshare_add(str);
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.title", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_version_set(const char *str)
|
||||
{
|
||||
if (version) eina_stringshare_del(version);
|
||||
version = eina_stringshare_add(str);
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.version", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_status_set(const char *str)
|
||||
{
|
||||
if (!init_exe) return;
|
||||
// printf("---STAT %p %s\n", client, str);
|
||||
if (!client)
|
||||
{
|
||||
stats = eina_list_append(stats, eina_stringshare_add(str));
|
||||
return;
|
||||
}
|
||||
// printf("---SEND\n");
|
||||
ecore_ipc_client_send(client, E_IPC_DOMAIN_INIT, 1, 0, 0, 0, (void *)str,
|
||||
strlen(str) + 1);
|
||||
ecore_ipc_client_flush(client);
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.status", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -123,9 +141,7 @@ e_init_done(void)
|
|||
done = 1;
|
||||
ecore_event_add(E_EVENT_INIT_DONE, NULL, NULL, NULL);
|
||||
// printf("---DONE %p\n", client);
|
||||
if (!client) return;
|
||||
ecore_ipc_client_send(client, E_IPC_DOMAIN_INIT, 2, 0, 0, 0, NULL, 0);
|
||||
ecore_ipc_client_flush(client);
|
||||
edje_object_signal_emit(_e_init_object, "e,state,done", "e");
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -134,90 +150,8 @@ e_init_undone(void)
|
|||
undone++;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_client_data(Ecore_Ipc_Event_Client_Data *e)
|
||||
{
|
||||
// printf("---new init client\n");
|
||||
if (!client) client = e->client;
|
||||
if (e->minor == 1)
|
||||
{
|
||||
if (e->data)
|
||||
{
|
||||
int i, num;
|
||||
Ecore_X_Window *initwins;
|
||||
|
||||
num = e->size / sizeof(Ecore_X_Window);
|
||||
initwins = e->data;
|
||||
for (i = 0; i < num; i += 2)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Manager *man;
|
||||
|
||||
EINA_LIST_FOREACH(e_manager_list(), l, man)
|
||||
{
|
||||
if (man->root == initwins[i + 0])
|
||||
{
|
||||
man->initwin = initwins[i + 1];
|
||||
ecore_x_window_raise(man->initwin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while (stats)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
s = stats->data;
|
||||
stats = eina_list_remove_list(stats, stats);
|
||||
// printf("---SPOOL %s\n", s);
|
||||
e_init_status_set(s);
|
||||
eina_stringshare_del(s);
|
||||
}
|
||||
}
|
||||
else if (e->minor == 2)
|
||||
{
|
||||
e_config->show_splash = e->ref;
|
||||
e_config_save_queue();
|
||||
}
|
||||
if (done) e_init_done();
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_client_del(Ecore_Ipc_Event_Client_Del *e)
|
||||
{
|
||||
// printf("---del init client\n");
|
||||
if (e->client == client)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Manager *man;
|
||||
|
||||
client = NULL;
|
||||
EINA_LIST_FOREACH(e_manager_list(), l, man)
|
||||
{
|
||||
man->initwin = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_init_count_get(void)
|
||||
{
|
||||
return undone;
|
||||
}
|
||||
|
||||
/* local functions */
|
||||
static Eina_Bool
|
||||
_e_init_cb_exe_event_del(void *data __UNUSED__, int type __UNUSED__, void *event)
|
||||
{
|
||||
Ecore_Exe_Event_Del *ev;
|
||||
|
||||
ev = event;
|
||||
if (ev->exe == init_exe)
|
||||
{
|
||||
/* init exited */
|
||||
// ecore_exe_free(init_exe);
|
||||
init_exe = NULL;
|
||||
}
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,519 +0,0 @@
|
|||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_X.h>
|
||||
#include <Ecore_Evas.h>
|
||||
#include <Ecore_Ipc.h>
|
||||
#include <Evas.h>
|
||||
#include <Edje.h>
|
||||
|
||||
#ifdef EAPI
|
||||
#undef EAPI
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
# ifdef BUILDING_DLL
|
||||
# define EAPI __declspec(dllexport)
|
||||
# else
|
||||
# define EAPI __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# if __GNUC__ >= 4
|
||||
/* BROKEN in gcc 4 on amd64 */
|
||||
#if 0
|
||||
# pragma GCC visibility push(hidden)
|
||||
#endif
|
||||
# define EAPI __attribute__ ((visibility("default")))
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef EINTERN
|
||||
#undef EINTERN
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
# if __GNUC__ >= 4
|
||||
# define EINTERN __attribute__ ((visibility("hidden")))
|
||||
# else
|
||||
# define EINTERN
|
||||
# endif
|
||||
#else
|
||||
# define EINTERN
|
||||
#endif
|
||||
|
||||
#define E_TYPEDEFS 1
|
||||
#include "e_xinerama.h"
|
||||
#undef E_TYPEDEFS
|
||||
#include "e_xinerama.h"
|
||||
|
||||
EINTERN int e_init_init(void);
|
||||
EINTERN int e_init_shutdown(void);
|
||||
EAPI void e_init_show(void);
|
||||
EAPI void e_init_hide(void);
|
||||
EAPI void e_init_title_set(const char *str);
|
||||
EAPI void e_init_version_set(const char *str);
|
||||
EAPI void e_init_status_set(const char *str);
|
||||
EAPI void e_init_done(void);
|
||||
|
||||
/* local subsystem functions */
|
||||
static int _e_ipc_init(void);
|
||||
static Eina_Bool _e_ipc_cb_server_add(void *data, int type, void *event);
|
||||
static Eina_Bool _e_ipc_cb_server_del(void *data, int type, void *event);
|
||||
static Eina_Bool _e_ipc_cb_server_data(void *data, int type, void *event);
|
||||
|
||||
/* local subsystem globals */
|
||||
static Ecore_Ipc_Server *_e_ipc_server = NULL;
|
||||
static const char *theme = NULL;
|
||||
static int font_hinting = -1;
|
||||
static const char *title = NULL;
|
||||
static const char *verstr = NULL;
|
||||
static Eina_List *fpath = NULL;
|
||||
static Ecore_X_Window *initwins = NULL;
|
||||
static int initwins_num = 0;
|
||||
static Ecore_Ipc_Server *server = NULL;
|
||||
|
||||
static Eina_Bool
|
||||
delayed_ok(void *data __UNUSED__)
|
||||
{
|
||||
kill(getppid(), SIGUSR1);
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
char *s;
|
||||
double scale;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if ((i == 1) &&
|
||||
((!strcmp(argv[i], "-h")) ||
|
||||
(!strcmp(argv[i], "-help")) ||
|
||||
(!strcmp(argv[i], "--help"))))
|
||||
{
|
||||
printf(
|
||||
"This is an internal tool for Enlightenment.\n"
|
||||
"do not use it.\n"
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
else if (!theme)
|
||||
theme = argv[i];
|
||||
else if (font_hinting < 0)
|
||||
font_hinting = atoi(argv[i]);
|
||||
else if (!title)
|
||||
title = argv[i];
|
||||
else if (!verstr)
|
||||
verstr = argv[i];
|
||||
else fpath = eina_list_append(fpath, argv[i]);
|
||||
}
|
||||
|
||||
ecore_init();
|
||||
ecore_x_init(NULL);
|
||||
ecore_app_args_set(argc, (const char **)argv);
|
||||
evas_init();
|
||||
ecore_evas_init();
|
||||
edje_init();
|
||||
edje_frametime_set(1.0 / 30.0);
|
||||
s = getenv("E_SCALE");
|
||||
scale = 1.0;
|
||||
if (s) scale = atof(s);
|
||||
edje_scale_set(scale);
|
||||
ecore_ipc_init();
|
||||
|
||||
if (_e_ipc_init())
|
||||
{
|
||||
e_init_init();
|
||||
e_init_show();
|
||||
e_init_title_set(title);
|
||||
e_init_version_set(verstr);
|
||||
e_init_status_set("");
|
||||
ecore_timer_add(0.2, delayed_ok, NULL);
|
||||
ecore_main_loop_begin();
|
||||
}
|
||||
|
||||
if (_e_ipc_server)
|
||||
{
|
||||
ecore_ipc_server_del(_e_ipc_server);
|
||||
_e_ipc_server = NULL;
|
||||
}
|
||||
|
||||
ecore_ipc_shutdown();
|
||||
ecore_evas_shutdown();
|
||||
edje_shutdown();
|
||||
evas_shutdown();
|
||||
ecore_x_shutdown();
|
||||
ecore_shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* local subsystem functions */
|
||||
static int
|
||||
_e_ipc_init(void)
|
||||
{
|
||||
char *sdir;
|
||||
|
||||
sdir = getenv("E_IPC_SOCKET");
|
||||
if (!sdir)
|
||||
{
|
||||
printf("The E_IPC_SOCKET environment variable is not set. This is\n"
|
||||
"exported by Enlightenment to all processes it launches.\n"
|
||||
"This environment variable must be set and must point to\n"
|
||||
"Enlightenment's IPC socket file (minus port number).\n");
|
||||
return 0;
|
||||
}
|
||||
_e_ipc_server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_SYSTEM, sdir, 0, NULL);
|
||||
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 Eina_Bool
|
||||
_e_ipc_cb_server_add(void *data __UNUSED__, int type __UNUSED__, void *event)
|
||||
{
|
||||
Ecore_Ipc_Event_Server_Add *e;
|
||||
|
||||
e = event;
|
||||
server = e->server;
|
||||
ecore_ipc_server_send(server,
|
||||
7 /*E_IPC_DOMAIN_INIT*/,
|
||||
1 /*hello*/,
|
||||
0, 0, 0,
|
||||
initwins, initwins_num * sizeof(Ecore_X_Window));
|
||||
ecore_ipc_server_flush(server);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_ipc_cb_server_del(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
|
||||
{
|
||||
/* quit now */
|
||||
ecore_main_loop_quit();
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
||||
{
|
||||
Ecore_Ipc_Event_Server_Data *e;
|
||||
|
||||
e = event;
|
||||
if (e->major != 7 /*E_IPC_DOMAIN_INIT*/) return ECORE_CALLBACK_PASS_ON;
|
||||
switch (e->minor)
|
||||
{
|
||||
case 1:
|
||||
if (e->data) e_init_status_set(e->data);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* quit now */
|
||||
e_init_done();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static void _e_init_cb_signal_disable(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
static void _e_init_cb_signal_enable(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
static void _e_init_cb_signal_done_ok(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
static Eina_Bool _e_init_cb_window_configure(void *data, int ev_type, void *ev);
|
||||
static Eina_Bool _e_init_cb_timeout(void *data);
|
||||
static Ecore_Evas *_e_init_evas_new(Ecore_X_Window root, int w, int h, Ecore_X_Window *winret);
|
||||
|
||||
/* local subsystem globals */
|
||||
static Ecore_X_Window _e_init_root_win = 0;
|
||||
static Ecore_X_Window _e_init_win = 0;
|
||||
static Ecore_Evas *_e_init_ecore_evas = NULL;
|
||||
static Evas *_e_init_evas = NULL;
|
||||
static Evas_Object *_e_init_object = NULL;
|
||||
static Ecore_Event_Handler *_e_init_configure_handler = NULL;
|
||||
static Ecore_Timer *_e_init_timeout_timer = NULL;
|
||||
|
||||
/* externally accessible functions */
|
||||
EINTERN int
|
||||
e_init_init(void)
|
||||
{
|
||||
Ecore_X_Window root, *roots;
|
||||
Evas_Object *o;
|
||||
Eina_List *l, *screens;
|
||||
int i, num, w, h;
|
||||
const char *s;
|
||||
|
||||
e_xinerama_init();
|
||||
|
||||
_e_init_configure_handler =
|
||||
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE,
|
||||
_e_init_cb_window_configure, NULL);
|
||||
|
||||
num = 0;
|
||||
roots = ecore_x_window_root_list(&num);
|
||||
if ((!roots) || (num <= 0))
|
||||
{
|
||||
free(roots);
|
||||
return 0;
|
||||
}
|
||||
root = roots[0];
|
||||
_e_init_root_win = root;
|
||||
|
||||
s = theme;
|
||||
initwins = malloc(num * 2 * sizeof(Ecore_X_Window));
|
||||
initwins_num = num * 2;
|
||||
|
||||
/* extra root windows/screens */
|
||||
for (i = 1; i < num; i++)
|
||||
{
|
||||
ecore_x_window_size_get(roots[i], &w, &h);
|
||||
_e_init_ecore_evas = _e_init_evas_new(roots[i], w, h, &_e_init_win);
|
||||
fprintf(stderr, "init win: %ix%i for %x\n", w, h, roots[i]);
|
||||
_e_init_evas = ecore_evas_get(_e_init_ecore_evas);
|
||||
initwins[(i * 2) + 0] = roots[i];
|
||||
initwins[(i * 2) + 1] = _e_init_win;
|
||||
|
||||
o = edje_object_add(_e_init_evas);
|
||||
edje_object_file_set(o, s, "e/init/extra_screen");
|
||||
evas_object_move(o, 0, 0);
|
||||
evas_object_resize(o, w, h);
|
||||
evas_object_show(o);
|
||||
}
|
||||
|
||||
/* primary screen/root */
|
||||
ecore_x_window_size_get(root, &w, &h);
|
||||
_e_init_ecore_evas = _e_init_evas_new(root, w, h, &_e_init_win);
|
||||
fprintf(stderr, "main init win: %ix%i for %x\n", w, h, root);
|
||||
_e_init_evas = ecore_evas_get(_e_init_ecore_evas);
|
||||
initwins[0] = root;
|
||||
initwins[1] = _e_init_win;
|
||||
|
||||
/* look at xinerama asto how to slice this up */
|
||||
screens = (Eina_List *)e_xinerama_screens_get();
|
||||
if (screens)
|
||||
{
|
||||
E_Screen *scr;
|
||||
|
||||
EINA_LIST_FOREACH(screens, l, scr)
|
||||
{
|
||||
o = edje_object_add(_e_init_evas);
|
||||
if (l == screens)
|
||||
{
|
||||
edje_object_file_set(o, s, "e/init/splash");
|
||||
_e_init_object = o;
|
||||
}
|
||||
else
|
||||
edje_object_file_set(o, s, "e/init/extra_screen");
|
||||
fprintf(stderr, "screen region screen %p: %i %i %ix%i\n", scr, scr->x, scr->y, scr->w, scr->h);
|
||||
evas_object_move(o, scr->x, scr->y);
|
||||
evas_object_resize(o, scr->w, scr->h);
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
o = edje_object_add(_e_init_evas);
|
||||
edje_object_file_set(o, s, "e/init/splash");
|
||||
_e_init_object = o;
|
||||
fprintf(stderr, "screen region fill %ix%i\n", w, h);
|
||||
evas_object_move(o, 0, 0);
|
||||
evas_object_resize(o, w, h);
|
||||
evas_object_show(o);
|
||||
}
|
||||
|
||||
edje_object_part_text_set(_e_init_object, "e.text.disable_text",
|
||||
"Disable splash screen");
|
||||
edje_object_signal_callback_add(_e_init_object, "e,action,init,disable", "e",
|
||||
_e_init_cb_signal_disable, NULL);
|
||||
edje_object_signal_callback_add(_e_init_object, "e,action,init,enable", "e",
|
||||
_e_init_cb_signal_enable, NULL);
|
||||
edje_object_signal_callback_add(_e_init_object, "e,state,done_ok", "e",
|
||||
_e_init_cb_signal_done_ok, NULL);
|
||||
free(roots);
|
||||
|
||||
_e_init_timeout_timer = ecore_timer_add(240.0, _e_init_cb_timeout, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
EINTERN int
|
||||
e_init_shutdown(void)
|
||||
{
|
||||
if (_e_init_configure_handler)
|
||||
ecore_event_handler_del(_e_init_configure_handler);
|
||||
_e_init_configure_handler = NULL;
|
||||
e_init_hide();
|
||||
return 1;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_show(void)
|
||||
{
|
||||
if (!_e_init_ecore_evas) return;
|
||||
ecore_evas_raise(_e_init_ecore_evas);
|
||||
ecore_evas_show(_e_init_ecore_evas);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_hide(void)
|
||||
{
|
||||
if (!_e_init_ecore_evas) return;
|
||||
ecore_evas_hide(_e_init_ecore_evas);
|
||||
evas_object_del(_e_init_object);
|
||||
ecore_evas_free(_e_init_ecore_evas);
|
||||
_e_init_ecore_evas = NULL;
|
||||
_e_init_evas = NULL;
|
||||
_e_init_win = 0;
|
||||
_e_init_object = NULL;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_title_set(const char *str)
|
||||
{
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.title", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_version_set(const char *str)
|
||||
{
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.version", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_status_set(const char *str)
|
||||
{
|
||||
if (!_e_init_object) return;
|
||||
edje_object_part_text_set(_e_init_object, "e.text.status", str);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_init_done(void)
|
||||
{
|
||||
if (!_e_init_object) return;
|
||||
edje_object_signal_emit(_e_init_object, "e,state,done", "e");
|
||||
if (_e_init_timeout_timer) ecore_timer_del(_e_init_timeout_timer);
|
||||
_e_init_timeout_timer = ecore_timer_add(60.0, _e_init_cb_timeout, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_init_cb_signal_disable(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||
{
|
||||
if (!server) return;
|
||||
ecore_ipc_server_send(server,
|
||||
7 /*E_IPC_DOMAIN_INIT*/,
|
||||
2 /*set splash*/,
|
||||
0, 0, 0,
|
||||
NULL, 0);
|
||||
ecore_ipc_server_flush(server);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_init_cb_signal_enable(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||
{
|
||||
if (!server) return;
|
||||
ecore_ipc_server_send(server,
|
||||
7 /*E_IPC_DOMAIN_INIT*/,
|
||||
2 /*set splash*/,
|
||||
1, 0, 0,
|
||||
NULL, 0);
|
||||
ecore_ipc_server_flush(server);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_init_cb_signal_done_ok(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||
{
|
||||
e_init_hide();
|
||||
if (_e_init_timeout_timer)
|
||||
{
|
||||
ecore_timer_del(_e_init_timeout_timer);
|
||||
_e_init_timeout_timer = NULL;
|
||||
}
|
||||
ecore_main_loop_quit();
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_init_cb_window_configure(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
|
||||
{
|
||||
Ecore_X_Event_Window_Configure *e;
|
||||
|
||||
e = ev;
|
||||
/* really simple - don't handle xinerama - because this event will only
|
||||
* happen in single head */
|
||||
if (e->win != _e_init_root_win) return ECORE_CALLBACK_PASS_ON;
|
||||
ecore_evas_resize(_e_init_ecore_evas, e->w, e->h);
|
||||
evas_object_resize(_e_init_object, e->w, e->h);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_init_cb_timeout(void *data __UNUSED__)
|
||||
{
|
||||
e_init_hide();
|
||||
_e_init_timeout_timer = NULL;
|
||||
ecore_main_loop_quit();
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static Ecore_Evas *
|
||||
_e_init_evas_new(Ecore_X_Window root, int w, int h, Ecore_X_Window *winret)
|
||||
{
|
||||
Ecore_Evas *ee = NULL;
|
||||
Evas *e;
|
||||
Eina_List *l;
|
||||
const char *path;
|
||||
|
||||
ee = ecore_evas_software_x11_new(NULL, root, 0, 0, w, h);
|
||||
ecore_evas_override_set(ee, 1);
|
||||
ecore_evas_software_x11_direct_resize_set(ee, 1);
|
||||
*winret = ecore_evas_software_x11_window_get(ee);
|
||||
|
||||
e = ecore_evas_get(ee);
|
||||
|
||||
evas_image_cache_set(e, 4096 * 1024);
|
||||
evas_font_cache_set(e, 512 * 1024);
|
||||
|
||||
EINA_LIST_FOREACH(fpath, l, path)
|
||||
evas_font_path_append(e, path);
|
||||
|
||||
if (font_hinting == 0)
|
||||
{
|
||||
if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_BYTECODE))
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_BYTECODE);
|
||||
else if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_AUTO))
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_AUTO);
|
||||
else
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
|
||||
}
|
||||
else if (font_hinting == 1)
|
||||
{
|
||||
if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_AUTO))
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_AUTO);
|
||||
else
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
|
||||
}
|
||||
else if (font_hinting == 2)
|
||||
evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
|
||||
|
||||
ecore_evas_name_class_set(ee, "E", "Init_Window");
|
||||
ecore_evas_title_set(ee, "Enlightenment Init");
|
||||
|
||||
ecore_evas_raise(ee);
|
||||
ecore_evas_show(ee);
|
||||
|
||||
return ee;
|
||||
}
|
||||
|
|
@ -124,7 +124,6 @@ _e_ipc_cb_client_del(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
/* delete client sruct */
|
||||
e_thumb_client_del(e);
|
||||
e_fm2_client_del(e);
|
||||
e_init_client_del(e);
|
||||
ecore_ipc_client_del(e->client);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
@ -204,10 +203,6 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
e_fm2_client_data(e);
|
||||
break;
|
||||
|
||||
case E_IPC_DOMAIN_INIT:
|
||||
e_init_client_data(e);
|
||||
break;
|
||||
|
||||
case E_IPC_DOMAIN_ALERT:
|
||||
{
|
||||
switch (e->minor)
|
||||
|
|
|
@ -14,7 +14,6 @@ typedef enum _E_Ipc_Domain
|
|||
E_IPC_DOMAIN_EVENT,
|
||||
E_IPC_DOMAIN_THUMB,
|
||||
E_IPC_DOMAIN_FM,
|
||||
E_IPC_DOMAIN_INIT,
|
||||
E_IPC_DOMAIN_ALERT,
|
||||
E_IPC_DOMAIN_LAST
|
||||
} E_Ipc_Domain;
|
||||
|
|
105
src/bin/e_main.c
105
src/bin/e_main.c
|
@ -619,36 +619,6 @@ main(int argc, char **argv)
|
|||
TS("E_Moveresize Init Done");
|
||||
_e_main_shutdown_push(e_moveresize_shutdown);
|
||||
|
||||
if (e_config->show_splash)
|
||||
{
|
||||
TS("E_Splash Init");
|
||||
if (!e_init_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Splash Init Done");
|
||||
_e_main_shutdown_push(e_init_shutdown);
|
||||
}
|
||||
if (!((!e_config->show_splash) || (after_restart)))
|
||||
{
|
||||
e_init_title_set(_("Enlightenment"));
|
||||
e_init_version_set(VERSION);
|
||||
e_init_show();
|
||||
pause();
|
||||
}
|
||||
|
||||
if (e_config->show_splash)
|
||||
e_init_status_set(_("Starting International Support"));
|
||||
TS("E_Intl Post Init");
|
||||
if (!e_intl_post_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Intl Post Init Done");
|
||||
_e_main_shutdown_push(e_intl_post_shutdown);
|
||||
|
||||
TS("Efreet Init");
|
||||
if (!efreet_init())
|
||||
{
|
||||
|
@ -660,20 +630,6 @@ main(int argc, char **argv)
|
|||
TS("Efreet Init Done");
|
||||
_e_main_shutdown_push(efreet_shutdown);
|
||||
|
||||
if (!really_know)
|
||||
{
|
||||
TS("Test File Format Support");
|
||||
_e_main_test_formats();
|
||||
TS("Test File Format Support Done");
|
||||
}
|
||||
else
|
||||
{
|
||||
efreet_icon_extension_add(".svg");
|
||||
efreet_icon_extension_add(".jpg");
|
||||
efreet_icon_extension_add(".png");
|
||||
efreet_icon_extension_add(".edj");
|
||||
}
|
||||
|
||||
e_screensaver_preinit();
|
||||
|
||||
if (e_config->show_splash)
|
||||
|
@ -699,6 +655,49 @@ main(int argc, char **argv)
|
|||
TS("Screens Init Done");
|
||||
_e_main_shutdown_push(_e_main_screens_shutdown);
|
||||
|
||||
if (e_config->show_splash)
|
||||
{
|
||||
TS("E_Splash Init");
|
||||
if (!e_init_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Splash Init Done");
|
||||
_e_main_shutdown_push(e_init_shutdown);
|
||||
}
|
||||
if (!((!e_config->show_splash) || (after_restart)))
|
||||
{
|
||||
e_init_title_set(_("Enlightenment"));
|
||||
e_init_version_set(VERSION);
|
||||
e_init_show();
|
||||
}
|
||||
|
||||
if (e_config->show_splash)
|
||||
e_init_status_set(_("Starting International Support"));
|
||||
TS("E_Intl Post Init");
|
||||
if (!e_intl_post_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Intl Post Init Done");
|
||||
_e_main_shutdown_push(e_intl_post_shutdown);
|
||||
|
||||
if (!really_know)
|
||||
{
|
||||
TS("Test File Format Support");
|
||||
_e_main_test_formats();
|
||||
TS("Test File Format Support Done");
|
||||
}
|
||||
else
|
||||
{
|
||||
efreet_icon_extension_add(".svg");
|
||||
efreet_icon_extension_add(".jpg");
|
||||
efreet_icon_extension_add(".png");
|
||||
efreet_icon_extension_add(".edj");
|
||||
}
|
||||
|
||||
if (e_config->show_splash)
|
||||
e_init_status_set(_("Setup ACPI"));
|
||||
TS("E_Acpi Init");
|
||||
|
@ -1675,6 +1674,15 @@ _e_main_screens_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
TS("E_Comp Init");
|
||||
if (!e_comp_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot setup compositing.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Comp Init Done");
|
||||
_e_main_shutdown_push(e_comp_shutdown);
|
||||
|
||||
TS("\tscreens: win");
|
||||
if (!e_win_init())
|
||||
{
|
||||
|
@ -1689,15 +1697,6 @@ _e_main_screens_init(void)
|
|||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Xkb Init Done");
|
||||
|
||||
TS("E_Comp Init");
|
||||
if (!e_comp_init())
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot setup compositing.\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
TS("E_Comp Init Done");
|
||||
_e_main_shutdown_push(e_comp_shutdown);
|
||||
|
||||
TS("\tscreens: manage roots");
|
||||
for (i = 0; i < num; i++)
|
||||
|
|
Loading…
Reference in New Issue