forked from enlightenment/enventor
file_mgr: Support that an edc is opened by different processes.
Summary: file_mgr: Support that an edc is opened by different processes. Open warning window to synchronize or ignore the edc changes. Reviewers: Hermet Reviewed By: Hermet Differential Revision: https://phab.enlightenment.org/D1561
This commit is contained in:
parent
516ae82bab
commit
8c68bc9981
|
@ -613,7 +613,6 @@ group { name: "warning_layout";
|
|||
description {
|
||||
rel1 { to: "elm.text.title"; relative: 0.5 1; offset: 0 10; }
|
||||
rel2 { to: "elm.text.title"; relative: 0.5 1; }
|
||||
text.text: "Without save, you will lose last changes!";
|
||||
text {
|
||||
font: FN;
|
||||
size: 11;
|
||||
|
@ -632,7 +631,6 @@ group { name: "warning_layout";
|
|||
description {
|
||||
rel1 { to: "elm.text.desc"; relative: 0.5 1; }
|
||||
rel2 { to: "elm.text.desc"; relative: 0.5 1; }
|
||||
text.text: "Are you sure you want to do this?";
|
||||
text {
|
||||
font: FN;
|
||||
size: 11;
|
||||
|
@ -644,13 +642,13 @@ group { name: "warning_layout";
|
|||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.save";
|
||||
part { name: "elm.swallow.btn1";
|
||||
type: SWALLOW;
|
||||
clip_to: "clipper";
|
||||
scale: 1;
|
||||
description {
|
||||
rel1.to: "elm.swallow.yes";
|
||||
rel2.to: "elm.swallow.yes";
|
||||
rel1.to: "elm.swallow.btn2";
|
||||
rel2.to: "elm.swallow.btn2";
|
||||
rel1.relative: 0 0;
|
||||
rel2.relative: 0 1;
|
||||
rel2.offset: -10 -1;
|
||||
|
@ -659,7 +657,7 @@ group { name: "warning_layout";
|
|||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.yes";
|
||||
part { name: "elm.swallow.btn2";
|
||||
type: SWALLOW;
|
||||
clip_to: "clipper";
|
||||
scale: 1;
|
||||
|
@ -673,13 +671,13 @@ group { name: "warning_layout";
|
|||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.no";
|
||||
part { name: "elm.swallow.btn3";
|
||||
type: SWALLOW;
|
||||
clip_to: "clipper";
|
||||
scale: 1;
|
||||
description {
|
||||
rel1.to: "elm.swallow.yes";
|
||||
rel2.to: "elm.swallow.yes";
|
||||
rel1.to: "elm.swallow.btn2";
|
||||
rel2.to: "elm.swallow.btn2";
|
||||
rel1.relative: 1 0;
|
||||
rel2.relative: 1 1;
|
||||
rel1.offset: 10 0;
|
||||
|
|
|
@ -23,7 +23,8 @@ enventor_SOURCES = \
|
|||
setting.c \
|
||||
globals.c \
|
||||
live_edit.c \
|
||||
console.c
|
||||
console.c \
|
||||
file_mgr.c
|
||||
|
||||
enventor_LDADD = \
|
||||
$(top_builddir)/src/lib/libenventor.la \
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define ENVENTOR_BETA_API_SUPPORT 1
|
||||
|
||||
#include <Eio.h>
|
||||
#include <Enventor.h>
|
||||
#include "common.h"
|
||||
|
||||
typedef struct file_mgr_s {
|
||||
Evas_Object *enventor;
|
||||
Evas_Object *warning_layout;
|
||||
|
||||
Eina_Bool edc_modified : 1;
|
||||
} file_mgr_data;
|
||||
|
||||
static file_mgr_data *g_fmd = NULL;
|
||||
|
||||
static void
|
||||
warning_dismiss_done(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
file_mgr_data *fmd = data;
|
||||
evas_object_del(fmd->warning_layout);
|
||||
fmd->warning_layout = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
warning_close(file_mgr_data *fmd)
|
||||
{
|
||||
elm_object_signal_emit(fmd->warning_layout, "elm,state,dismiss", "");
|
||||
}
|
||||
|
||||
static void
|
||||
warning_skip_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
file_mgr_data *fmd = data;
|
||||
enventor_object_modified_set(fmd->enventor, EINA_TRUE);
|
||||
warning_close(fmd);
|
||||
}
|
||||
|
||||
static void
|
||||
warning_save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
file_mgr_data *fmd = data;
|
||||
enventor_object_modified_set(fmd->enventor, EINA_TRUE);
|
||||
menu_edc_save();
|
||||
warning_close(fmd);
|
||||
}
|
||||
|
||||
static void
|
||||
warning_load_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
file_mgr_data *fmd = data;
|
||||
enventor_object_file_set(fmd->enventor, config_edc_path_get());
|
||||
enventor_object_modified_set(fmd->enventor, EINA_FALSE);
|
||||
warning_close(fmd);
|
||||
}
|
||||
|
||||
static void
|
||||
warning_open(file_mgr_data *fmd, Evas_Smart_Cb skip_cb,
|
||||
Evas_Smart_Cb save_cb, Evas_Smart_Cb load_cb)
|
||||
{
|
||||
if (fmd->warning_layout) return;
|
||||
|
||||
//Layout
|
||||
Evas_Object *layout = elm_layout_add(base_win_get());
|
||||
elm_layout_file_set(layout, EDJE_PATH, "warning_layout");
|
||||
elm_object_part_text_set(layout, "elm.text.desc",
|
||||
"Another program has changed the same EDC!");
|
||||
elm_object_part_text_set(layout, "elm.text.question",
|
||||
"Are you sure you want to do this?");
|
||||
elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "",
|
||||
warning_dismiss_done, fmd);
|
||||
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_show(layout);
|
||||
base_win_resize_object_add(layout);
|
||||
|
||||
Evas_Object *btn;
|
||||
|
||||
//Skip Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "Skip");
|
||||
evas_object_smart_callback_add(btn, "clicked", skip_cb, fmd);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn1", btn);
|
||||
|
||||
//Save Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "Save");
|
||||
evas_object_smart_callback_add(btn, "clicked", save_cb, fmd);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn2", btn);
|
||||
|
||||
//Load Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "Load");
|
||||
evas_object_smart_callback_add(btn, "clicked", load_cb, fmd);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn3", btn);
|
||||
|
||||
fmd->warning_layout = layout;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
enventor_edc_modified_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
file_mgr_data *fmd = g_fmd;
|
||||
Enventor_EDC_Modified *modified = event;
|
||||
|
||||
if (modified->self_changed)
|
||||
{
|
||||
fmd->edc_modified = EINA_FALSE;
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
if (!fmd->edc_modified)
|
||||
{
|
||||
fmd->edc_modified = EINA_TRUE;
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
warning_open(fmd, warning_skip_btn_cb, warning_save_btn_cb,
|
||||
warning_load_btn_cb);
|
||||
fmd->edc_modified = EINA_FALSE;
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
void
|
||||
file_mgr_init(Evas_Object *enventor)
|
||||
{
|
||||
file_mgr_data *fmd = calloc(1, sizeof(file_mgr_data));
|
||||
if (!fmd)
|
||||
{
|
||||
EINA_LOG_ERR("Failed to allocate Memory!");
|
||||
return;
|
||||
}
|
||||
g_fmd = fmd;
|
||||
|
||||
fmd->enventor = enventor;
|
||||
|
||||
evas_object_smart_callback_add(enventor, "edc,modified",
|
||||
enventor_edc_modified_cb, fmd);
|
||||
}
|
||||
|
||||
void
|
||||
file_mgr_term(void)
|
||||
{
|
||||
file_mgr_data *fmd = g_fmd;
|
||||
free(fmd);
|
||||
}
|
|
@ -776,6 +776,7 @@ init(app_data *ad, int argc, char **argv)
|
|||
base_gui_init();
|
||||
statusbar_set();
|
||||
enventor_setup(ad);
|
||||
file_mgr_init(ad->enventor);
|
||||
tools_set(ad->enventor);
|
||||
|
||||
base_gui_show();
|
||||
|
@ -799,6 +800,7 @@ term(app_data *ad EINA_UNUSED)
|
|||
#endif
|
||||
stats_term();
|
||||
base_gui_term();
|
||||
file_mgr_term();
|
||||
config_term();
|
||||
enventor_shutdown();
|
||||
}
|
||||
|
|
|
@ -177,6 +177,10 @@ warning_open(menu_data *md, Evas_Smart_Cb yes_cb, Evas_Smart_Cb save_cb)
|
|||
//Layout
|
||||
Evas_Object *layout = elm_layout_add(base_win_get());
|
||||
elm_layout_file_set(layout, EDJE_PATH, "warning_layout");
|
||||
elm_object_part_text_set(layout, "elm.text.desc",
|
||||
"Without save, you will lose last changes!");
|
||||
elm_object_part_text_set(layout, "elm.text.question",
|
||||
"Are you sure you want to do this?");
|
||||
elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "",
|
||||
warning_dismiss_done, md);
|
||||
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
|
@ -191,19 +195,19 @@ warning_open(menu_data *md, Evas_Smart_Cb yes_cb, Evas_Smart_Cb save_cb)
|
|||
evas_object_smart_callback_add(btn, "clicked", save_cb, md);
|
||||
evas_object_show(btn);
|
||||
elm_object_focus_set(btn, EINA_TRUE);
|
||||
elm_object_part_content_set(layout, "elm.swallow.save", btn);
|
||||
|
||||
//No Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "No");
|
||||
evas_object_smart_callback_add(btn, "clicked", warning_no_btn_cb, md);
|
||||
elm_object_part_content_set(layout, "elm.swallow.no", btn);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn1", btn);
|
||||
|
||||
//Yes Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "Yes");
|
||||
evas_object_smart_callback_add(btn, "clicked", yes_cb, md);
|
||||
elm_object_part_content_set(layout, "elm.swallow.yes", btn);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn2", btn);
|
||||
|
||||
//No Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_object_text_set(btn, "No");
|
||||
evas_object_smart_callback_add(btn, "clicked", warning_no_btn_cb, md);
|
||||
elm_object_part_content_set(layout, "elm.swallow.btn3", btn);
|
||||
|
||||
md->warning_layout = layout;
|
||||
menu_activate_request();
|
||||
|
|
|
@ -15,4 +15,5 @@ EXTRA_DIST = common.h \
|
|||
setting.h \
|
||||
search.h \
|
||||
live_edit.h \
|
||||
console.h
|
||||
console.h \
|
||||
file_mgr.h
|
||||
|
|
|
@ -22,5 +22,6 @@ typedef struct statusbar_s stats_data;
|
|||
#include "setting.h"
|
||||
#include "live_edit.h"
|
||||
#include "console.h"
|
||||
#include "file_mgr.h"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
void file_mgr_init(Evas_Object *enventor);
|
||||
void file_mgr_term(void);
|
Loading…
Reference in New Issue