ecrire: one instance, one win...

one arm, one leg, one nod of the head...keep borking.
This commit is contained in:
Alastair Poole 2021-04-07 11:15:58 +01:00
parent 74ef59427e
commit 642847fa74
2 changed files with 86 additions and 97 deletions

View File

@ -43,6 +43,7 @@ struct _Ecrire_Entry {
typedef struct _Ecrire_Entry Ecrire_Entry;
void ecrire_open(const char *filename, const char *font_name, int font_size);
void ecrire_font_set_save(Ecrire_Entry *inst, const char *font, int size);
void ecrire_entry_font_set(Ecrire_Entry *inst, const char *font, int font_size);
void ecrire_save(Ecrire_Entry *inst, void *callback_func);

View File

@ -19,6 +19,8 @@ _win_del_do(void *data)
{
Ecrire_Entry *inst = data;
evas_object_del(inst->win);
eina_stringshare_del(inst->filename);
free(inst);
}
static void
@ -382,19 +384,14 @@ _load_to_entry(Ecrire_Entry *inst, const char *file)
}
static void
_cb_fs_open_done(void *data, Evas_Object *obj EINA_UNUSED,
_cb_fs_open_done(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info)
{
Ecrire_Entry *inst;
const char *selected = event_info;
if (!selected) return;
inst = data;
if (ecore_file_app_installed("ecrire"))
ecore_exe_run(eina_slstr_printf("ecrire %s", selected), NULL);
else
_load_to_entry(inst, selected);
ecrire_open(selected, _ent_cfg->font.name, _ent_cfg->font.size);
}
void
@ -432,6 +429,7 @@ static void
_open_do(void *data)
{
Ecrire_Entry *inst = data;
ui_file_open_save_dialog_open(inst->win, EINA_FALSE, _cb_fs_open_done, inst);
}
@ -443,10 +441,11 @@ _cb_goto_line(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UN
}
static void
_cb_open(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
_cb_open(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ecrire_Entry *inst = data;
_alert_if_need_saving(_open_do, inst);
_open_do(inst);
}
void
@ -473,31 +472,13 @@ _cb_save_as(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUS
}
static void
_new_do(void *data)
_cb_new(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ecrire_Entry *inst = data;
if (ecore_file_app_installed("ecrire"))
ecore_exe_run("ecrire", NULL);
else
{
elm_object_text_set(inst->entry, "");
_init_entry(inst);
elm_object_item_disabled_set(inst->menu.save, EINA_TRUE);
elm_object_item_disabled_set(inst->toolbar.save, EINA_TRUE);
_update_cur_file(NULL, inst);
}
ecrire_open(NULL, _ent_cfg->font.name, _ent_cfg->font.size);
}
static void
_cb_new(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ecrire_Entry *inst = data;
_alert_if_need_saving(_new_do, inst);
}
static void
_cb_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
_cb_close(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ecrire_Entry *inst = data;
_alert_if_need_saving(_win_del_do, inst);
@ -670,7 +651,7 @@ _ecrire_menu_add(Ecrire_Entry *inst)
elm_menu_item_add(menu, it, "document-save", _("Save"), _cb_save, inst);
elm_menu_item_add(menu, it, "document-save-as", _("Save As"), _cb_save_as, inst);
elm_menu_item_separator_add(menu, it);
elm_menu_item_add(menu, it, "application-exit", _("Exit"), _cb_exit, inst);
elm_menu_item_add(menu, it, "application-exit", _("Close"), _cb_close, inst);
it = elm_menu_item_add(menu, NULL, NULL, _("Edit"), NULL, NULL);
inst->menu.cut =
@ -697,59 +678,12 @@ _ecrire_menu_add(Ecrire_Entry *inst)
}
EAPI_MAIN int
elm_main(int argc, char **argv)
void
ecrire_open(const char *filename, const char *font_name, int font_size)
{
Evas_Object *win, *pad, *fr, *bx, *entry, *cur_info;
Evas_Object *toolbar;
Evas_Coord w = 600, h = 600;
int c;
opterr = 0;
_ecrire_log_dom = eina_log_domain_register("ecrire", ECRIRE_DEFAULT_LOG_COLOR);
if (_ecrire_log_dom < 0)
{
EINA_LOG_ERR("Unable to create a log domain.");
exit(-1);
}
while ((c = getopt (argc, argv, "")) != -1)
{
switch (c)
{
case '?':
print_usage(argv[0]);
if (isprint (optopt))
{
ERR("Unknown option or requires an argument `-%c'.",
optopt);
}
else
{
ERR("Unknown option character `\\x%x'.", optopt);
}
return 1;
break;
default:
abort();
}
}
elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR);
elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR);
elm_app_compile_data_dir_set(PACKAGE_DATA_DIR);
#ifdef ENABLE_NLS
elm_app_compile_locale_set(LOCALEDIR);
#endif
elm_app_info_set(elm_main, "ecrire", "COPYING");
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALE_DIR);
textdomain(PACKAGE);
ecrire_cfg_init(PACKAGE_NAME);
ecrire_cfg_load();
Ecrire_Entry *inst = calloc(1, sizeof(Ecrire_Entry));
inst->unsaved = 1;
@ -758,24 +692,11 @@ elm_main(int argc, char **argv)
inst->undo_stack_can_merge = EINA_FALSE;
inst->font.name = _ent_cfg->font.name;
inst->font.size = _ent_cfg->font.size;
if (optind < argc)
{
if (!ecore_file_exists(argv[optind]))
return 1;
char *path = ecore_file_realpath(argv[optind]);
if (path)
{
if (ecore_file_is_dir(argv[optind])) return 1;
inst->filename = eina_stringshare_add(path);
}
}
inst->filename = filename;
DBG("Opening filename: '%s'", inst->filename);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
inst->win = win = elm_win_util_standard_add("erire", "Ecrire");
inst->win = win = elm_win_util_standard_add("ecrire", "Ecrire");
elm_win_autodel_set(inst->win, EINA_FALSE);
bx = elm_box_add(win);
@ -841,11 +762,78 @@ elm_main(int argc, char **argv)
evas_object_show(win);
_load_to_entry(inst, inst->filename);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
const char *filename = NULL;
int c;
opterr = 0;
_ecrire_log_dom = eina_log_domain_register("ecrire", ECRIRE_DEFAULT_LOG_COLOR);
if (_ecrire_log_dom < 0)
{
EINA_LOG_ERR("Unable to create a log domain.");
exit(-1);
}
while ((c = getopt (argc, argv, "")) != -1)
{
switch (c)
{
case '?':
print_usage(argv[0]);
if (isprint (optopt))
{
ERR("Unknown option or requires an argument `-%c'.",
optopt);
}
else
{
ERR("Unknown option character `\\x%x'.", optopt);
}
return 1;
break;
default:
abort();
}
}
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR);
elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR);
elm_app_compile_data_dir_set(PACKAGE_DATA_DIR);
#ifdef ENABLE_NLS
elm_app_compile_locale_set(LOCALEDIR);
#endif
elm_app_info_set(elm_main, "ecrire", "COPYING");
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALE_DIR);
textdomain(PACKAGE);
ecrire_cfg_init(PACKAGE_NAME);
ecrire_cfg_load();
if (optind < argc)
{
if (!ecore_file_exists(argv[optind]))
return 1;
char *path = ecore_file_realpath(argv[optind]);
if (path)
{
if (ecore_file_is_dir(argv[optind])) return 1;
filename = eina_stringshare_add(path);
}
}
ecrire_open(filename, _ent_cfg->font.name, _ent_cfg->font.size);
elm_run();
eina_stringshare_del(inst->filename);
free(inst);
ecrire_cfg_shutdown();
eina_log_domain_unregister(_ecrire_log_dom);