933 lines
29 KiB
C
933 lines
29 KiB
C
#include "e_mod_main.h"
|
|
|
|
struct _E_Config_Dialog_Data
|
|
{
|
|
int show_label;
|
|
int show_background;
|
|
int orient;
|
|
int size;
|
|
double zoomfactor;
|
|
int autohide;
|
|
int autohide_show_urgent;
|
|
int lock_deskswitch;
|
|
int ecomorph_features;
|
|
|
|
double hide_timeout;
|
|
double zoom_duration;
|
|
double zoom_range;
|
|
|
|
int hide_below_windows;
|
|
int hide_mode;
|
|
int alpha;
|
|
int stacking;
|
|
int mouse_over_anim;
|
|
|
|
Eina_List *boxes;
|
|
|
|
Evas_Object *ilist;
|
|
|
|
Evas_Object *tlist_box;
|
|
Config_Box *cfg_box;
|
|
Config_Item *cfg;
|
|
E_Config_Dialog *cfd;
|
|
|
|
const char *app_dir;
|
|
};
|
|
|
|
static void * _create_data(E_Config_Dialog *cfd);
|
|
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
|
static Evas_Object * _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
|
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
|
|
|
static void _cb_add(void *data, void *data2);
|
|
static void _cb_del(void *data, void *data2);
|
|
static void _cb_config(void *data, void *data2);
|
|
static void _cb_entry_ok(void *data, char *text);
|
|
static void _cb_confirm_dialog_yes(void *data);
|
|
static void _load_ilist(E_Config_Dialog_Data *cfdata);
|
|
static void _cb_slider_change(void *data, Evas_Object *obj);
|
|
|
|
static void _cb_box_add_launcher(void *data, void *data2);
|
|
static void _cb_box_add_taskbar(void *data, void *data2);
|
|
static void _cb_box_add_gadcon(void *data, void *data2);
|
|
static void _cb_box_del(void *data, void *data2);
|
|
static void _cb_box_config(void *data, void *data2);
|
|
static void _cb_box_up(void *data, void *data2);
|
|
static void _cb_box_down(void *data, void *data2);
|
|
static void _load_box_tlist(E_Config_Dialog_Data *cfdata);
|
|
|
|
void
|
|
ngi_configure_module(Config_Item *ci)
|
|
{
|
|
E_Config_Dialog *cfd;
|
|
E_Config_Dialog_View *v;
|
|
Eina_List *l;
|
|
char buf[4096];
|
|
char path[128];
|
|
Config_Item *ci2;
|
|
int i = 0;
|
|
|
|
if (!ci->ng)
|
|
return;
|
|
|
|
if (ci->config_dialog)
|
|
return;
|
|
|
|
EINA_LIST_FOREACH(ngi_config->items, l, ci2)
|
|
if (ci == ci2)
|
|
break;
|
|
else i++;
|
|
|
|
snprintf(path, sizeof(path), "extensions/engage::%d", i);
|
|
if (e_config_dialog_find("E", path))
|
|
return;
|
|
|
|
v = E_NEW(E_Config_Dialog_View, 1);
|
|
|
|
/* Dialog Methods */
|
|
v->create_cfdata = _create_data;
|
|
v->free_cfdata = _free_data;
|
|
v->basic.apply_cfdata = _basic_apply_data;
|
|
v->basic.create_widgets = _basic_create_widgets;
|
|
v->advanced.apply_cfdata = NULL;
|
|
v->advanced.create_widgets = NULL;
|
|
|
|
/* Create The Dialog */
|
|
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
|
|
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
|
|
D_("Engage Configuration"),
|
|
"E", path, buf, 0, v, ci);
|
|
|
|
ci->config_dialog = cfd;
|
|
ngi_bar_lock(ci->ng, 1);
|
|
}
|
|
|
|
static void
|
|
_fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
#define C(_name) cfdata->_name = ci->_name;
|
|
C(show_background);
|
|
C(show_label);
|
|
C(orient);
|
|
C(size);
|
|
C(zoomfactor);
|
|
C(autohide);
|
|
C(autohide_show_urgent);
|
|
C(hide_below_windows);
|
|
C(hide_timeout);
|
|
C(zoom_duration);
|
|
C(zoom_range);
|
|
C(alpha);
|
|
C(stacking);
|
|
C(mouse_over_anim);
|
|
C(lock_deskswitch);
|
|
C(ecomorph_features);
|
|
#undef C
|
|
|
|
cfdata->cfg = ci;
|
|
cfdata->cfd = ci->config_dialog;
|
|
|
|
cfdata->ilist = NULL;
|
|
cfdata->tlist_box = NULL;
|
|
}
|
|
|
|
static void *
|
|
_create_data(E_Config_Dialog *cfd)
|
|
{
|
|
E_Config_Dialog_Data *cfdata;
|
|
Config_Item *ci;
|
|
|
|
ci = (Config_Item *)cfd->data;
|
|
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
|
_fill_data(ci, cfdata);
|
|
return cfdata;
|
|
}
|
|
|
|
static void
|
|
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
cfdata->cfg->config_dialog = NULL;
|
|
|
|
if (cfdata->cfg->ng)
|
|
ngi_bar_lock(cfdata->cfg->ng, 0);
|
|
|
|
free(cfdata);
|
|
}
|
|
|
|
static Evas_Object *
|
|
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
E_Radio_Group *rg;
|
|
Evas_Object *ol, *of, *ob, *ot, *otb;
|
|
|
|
otb = e_widget_toolbook_add(evas, 0, 0);
|
|
|
|
/* _______ first column __________________________________________________*/
|
|
ol = e_widget_list_add(evas, 0, 0);
|
|
of = e_widget_framelist_add(evas, D_("Appearance"), 0);
|
|
ob = e_widget_label_add (evas, D_("Icon Size:"));
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f px"), 16.0, 128,
|
|
1.0, 0, NULL, &(cfdata->size), 100);
|
|
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
e_widget_framelist_object_append (of, ob);
|
|
|
|
/* ob = e_widget_label_add (evas, D_("Reflection Opacity:"));
|
|
* e_widget_framelist_object_append (of, ob);
|
|
* ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f"), 0, 255,
|
|
* 1.0, 0, NULL, &(cfdata->rflxn_alpha), 100);
|
|
* e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
* e_widget_framelist_object_append (of, ob); */
|
|
|
|
if (ngi_config->use_composite)
|
|
{
|
|
ob = e_widget_label_add (evas, D_("Background Opacity:"));
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f \%"), 0, 255,
|
|
1.0, 0, NULL, &(cfdata->alpha), 100);
|
|
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
e_widget_framelist_object_append (of, ob);
|
|
}
|
|
else
|
|
cfdata->alpha = 255;
|
|
|
|
ob = e_widget_check_add(evas, D_("Show Background Box"), &(cfdata->show_background));
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
ob = e_widget_check_add(evas, D_("Show Mouse-Over Animation"), &(cfdata->mouse_over_anim));
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
e_widget_list_object_append(ol, of, 1, 0, 0.0);
|
|
|
|
of = e_widget_framelist_add(evas, D_("Orientation"), 0);
|
|
rg = e_widget_radio_group_new(&(cfdata->orient));
|
|
ob = e_widget_radio_add(evas, D_("Bottom Edge"), E_GADCON_ORIENT_BOTTOM, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Top Edge"), E_GADCON_ORIENT_TOP, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Left Edge"), E_GADCON_ORIENT_LEFT, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Right Edge"), E_GADCON_ORIENT_RIGHT, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
/* of = e_widget_frametable_add(evas, D_("Orientation"), 1);
|
|
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_left",
|
|
* 24, 24, E_GADCON_ORIENT_LEFT, rg);
|
|
* e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 0);
|
|
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_right",
|
|
* 24, 24, E_GADCON_ORIENT_RIGHT, rg);
|
|
* e_widget_frametable_object_append(of, ob, 2, 1, 1, 1, 1, 1, 1, 0);
|
|
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_top",
|
|
* 24, 24, E_GADCON_ORIENT_TOP, rg);
|
|
* e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 0);
|
|
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_bottom",
|
|
* 24, 24, E_GADCON_ORIENT_BOTTOM, rg);
|
|
* e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 0); */
|
|
|
|
e_widget_list_object_append(ol, of, 1, 0, 0.0);
|
|
e_widget_toolbook_page_append(otb, NULL, D_("Appearance"), ol, 1, 1, 1, 1, 0.5, 0.5);
|
|
|
|
|
|
of = e_widget_framelist_add(evas, D_("Zoom"), 0);
|
|
ob = e_widget_label_add (evas, D_("Factor:"));
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 1.0, 5.0,
|
|
0.01, 0, &(cfdata->zoomfactor), NULL, 100);
|
|
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_label_add (evas, D_("Range:"));
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 1.0, 4.0,
|
|
0.01, 0, &(cfdata->zoom_range), NULL, 100);
|
|
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_label_add (evas, D_("Duration:"));
|
|
e_widget_framelist_object_append (of, ob);
|
|
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 0.1, 0.5,
|
|
0.01, 0, &(cfdata->zoom_duration), NULL, 100);
|
|
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
|
|
e_widget_framelist_object_append (of, ob);
|
|
e_widget_toolbook_page_append(otb, NULL, D_("Zoom"), of, 1, 0, 1, 0, 0.5, 0.0);
|
|
|
|
|
|
of = e_widget_frametable_add(evas, D_("Bar Items"), 0);
|
|
ol = e_widget_ilist_add(evas, 0, 0, NULL);
|
|
cfdata->ilist = ol;
|
|
_load_box_tlist(cfdata);
|
|
e_widget_size_min_set(ol, 300, 80);
|
|
e_widget_frametable_object_append(of, ol, 0, 0, 1, 1, 1, 1, 1, 1);
|
|
|
|
ot = e_widget_table_add(evas, 0);
|
|
ob = e_widget_button_add(evas, D_("Delete"), "widget/del", _cb_box_del, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Configure"), "widget/config", _cb_box_config, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Up"), "widget/up_arrow", _cb_box_up, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 1, 0, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Down"), "widget/down_arrow", _cb_box_down, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 1, 1, 1, 1, 1, 1, 1, 0);
|
|
e_widget_frametable_object_append(of, ot, 0, 1, 1, 1, 1, 1, 1, 0);
|
|
|
|
ot = e_widget_table_add(evas, 0);
|
|
ob = e_widget_label_add(evas, D_("Add"));
|
|
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Taskbar"), "widget/add", _cb_box_add_taskbar, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Launcher"), "widget/add", _cb_box_add_launcher, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 1, 1, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Gadcon"), "widget/add", _cb_box_add_gadcon, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 1, 1, 0);
|
|
e_widget_frametable_object_append(of, ot, 0, 2, 1, 1, 1, 1, 1, 0);
|
|
e_widget_toolbook_page_append(otb, NULL, D_("Bar Items"), of, 1, 1, 1, 1, 0.5, 0.5);
|
|
|
|
|
|
of = e_widget_framelist_add(evas, D_("Auto Hide"), 0);
|
|
cfdata->hide_mode = cfdata->autohide;
|
|
|
|
rg = e_widget_radio_group_new(&cfdata->hide_mode);
|
|
ob = e_widget_radio_add(evas, D_("None"),
|
|
AUTOHIDE_NONE, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Autohide"),
|
|
AUTOHIDE_NORMAL, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Hide when Window overlaps"),
|
|
AUTOHIDE_OVERLAP, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Hide on Fullscreen"),
|
|
AUTOHIDE_FULLSCREEN, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
ob = e_widget_check_add(evas, D_("Show Bar when Urgent"), &(cfdata->autohide_show_urgent));
|
|
e_widget_framelist_object_append(of, ob);
|
|
e_widget_toolbook_page_append(otb, NULL, D_("Auto Hide"), of, 1, 0, 1, 0, 0.5, 0.0);
|
|
|
|
|
|
/* e_widget_toolbook_page_append(otb, NULL, D_("Orientation"), of, 1, 1, 1, 0, 0.5, 0.0); */
|
|
|
|
ol = e_widget_list_add(evas, 0, 0);
|
|
of = e_widget_framelist_add(evas, D_("Stacking"), 0);
|
|
rg = e_widget_radio_group_new(&cfdata->stacking);
|
|
ob = e_widget_radio_add(evas, D_("Above All"), 0, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Below Fullscreen"), 1, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
e_widget_list_object_append(ol, of, 1, 0, 0.0);
|
|
|
|
of = e_widget_framelist_add(evas, D_("Other"), 0);
|
|
ob = e_widget_check_add(evas, D_("Ecomorph Features"), &(cfdata->ecomorph_features));
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_check_add(evas, D_("Show Icon Label"), &(cfdata->show_label));
|
|
e_widget_framelist_object_append(of, ob);
|
|
e_widget_list_object_append(ol, of, 1, 0, 0.0);
|
|
|
|
e_widget_toolbook_page_append(otb, NULL, D_("Other"), ol, 1, 0, 1, 0, 0.5, 0.0);
|
|
|
|
e_widget_toolbook_page_show(otb, 0);
|
|
|
|
|
|
return otb;
|
|
}
|
|
|
|
static int
|
|
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
Config_Item *ci;
|
|
Ng *ng;
|
|
|
|
ci = cfd->data;
|
|
ng = ci->ng;
|
|
|
|
ci->size = cfdata->size;
|
|
ci->zoomfactor = cfdata->zoomfactor;
|
|
ci->hide_timeout = cfdata->hide_timeout;
|
|
ci->zoom_duration = cfdata->zoom_duration;
|
|
ci->zoom_range = cfdata->zoom_range;
|
|
ci->alpha = cfdata->alpha;
|
|
ci->mouse_over_anim = cfdata->mouse_over_anim;
|
|
ci->autohide = cfdata->hide_mode;
|
|
ci->lock_deskswitch = cfdata->lock_deskswitch;
|
|
ci->ecomorph_features = cfdata->ecomorph_features;
|
|
ci->show_background = cfdata->show_background;
|
|
ci->show_label = cfdata->show_label;
|
|
ci->stacking = cfdata->stacking;
|
|
ci->autohide_show_urgent = cfdata->autohide_show_urgent;
|
|
|
|
if (ci->show_label)
|
|
evas_object_show(ng->o_label);
|
|
else
|
|
evas_object_hide(ng->o_label);
|
|
|
|
if (ci->show_background)
|
|
evas_object_show(ng->bg_clip);
|
|
else
|
|
evas_object_hide(ng->bg_clip);
|
|
|
|
if (ci->orient != cfdata->orient)
|
|
{
|
|
ci->orient = cfdata->orient;
|
|
ngi_free(ng);
|
|
ngi_new(ci);
|
|
}
|
|
else
|
|
{
|
|
if (ci->autohide == AUTOHIDE_NORMAL)
|
|
ng->hide = EINA_TRUE;
|
|
if (ng->es)
|
|
{
|
|
ng->es->cfg->autohide = ng->cfg->autohide;
|
|
ng->es->cfg->overlap = (ng->cfg->autohide == AUTOHIDE_OVERLAP);
|
|
}
|
|
ng->hide_step = 0;
|
|
ng->hide_state = show;
|
|
ngi_reposition(ng);
|
|
ngi_input_extents_calc(ng);
|
|
ngi_thaw(ng);
|
|
}
|
|
|
|
e_config_domain_save("module.ng", ngi_conf_edd, ngi_config);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static void
|
|
_update_boxes(Ng *ng)
|
|
{
|
|
Eina_List *l;
|
|
Ngi_Box *box;
|
|
Config_Box *cfg_box;
|
|
|
|
while(ng->boxes)
|
|
{
|
|
box = ng->boxes->data;
|
|
if (box->cfg->type == taskbar)
|
|
ngi_taskbar_remove(box);
|
|
else if (box->cfg->type == launcher)
|
|
ngi_launcher_remove(box);
|
|
else if (box->cfg->type == gadcon)
|
|
ngi_gadcon_remove(box);
|
|
}
|
|
|
|
ngi_freeze(ng);
|
|
|
|
EINA_LIST_FOREACH (ng->cfg->boxes, l, cfg_box)
|
|
{
|
|
switch (cfg_box->type)
|
|
{
|
|
case launcher:
|
|
ngi_launcher_new(ng, cfg_box);
|
|
break;
|
|
|
|
case taskbar:
|
|
ngi_taskbar_new(ng, cfg_box);
|
|
break;
|
|
|
|
case gadcon:
|
|
ngi_gadcon_new(ng, cfg_box);
|
|
break;
|
|
} /* switch */
|
|
}
|
|
|
|
ngi_thaw(ng);
|
|
}
|
|
|
|
/***************************************************************************************/
|
|
|
|
static void
|
|
_cb_box_add_taskbar(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
Config_Box *cfg_box;
|
|
|
|
cfg_box = E_NEW(Config_Box, 1);
|
|
cfg_box->type = taskbar;
|
|
cfg_box->taskbar_adv_bordermenu = 0;
|
|
cfg_box->taskbar_skip_dialogs = 0;
|
|
cfg_box->taskbar_skip_dialogs = 1;
|
|
cfg_box->taskbar_show_iconified = 1;
|
|
cfg_box->taskbar_show_desktop = 0;
|
|
|
|
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
}
|
|
|
|
static void
|
|
_cb_box_add_launcher(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
Config_Box *cfg_box;
|
|
|
|
cfg_box = E_NEW(Config_Box, 1);
|
|
cfg_box->type = launcher;
|
|
cfg_box->launcher_app_dir = eina_stringshare_add("default");
|
|
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
}
|
|
|
|
static void
|
|
_cb_box_add_gadcon(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
Config_Box *cfg_box;
|
|
|
|
cfg_box = E_NEW(Config_Box, 1);
|
|
cfg_box->type = gadcon;
|
|
//cfg_box->gadcon_items = eina_stringshare_add("ng_gadcon-tmp");
|
|
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
}
|
|
|
|
static void
|
|
_cb_box_del(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
int selected = e_widget_ilist_selected_get(cfdata->ilist);
|
|
|
|
if (selected < 0)
|
|
return;
|
|
|
|
Eina_List *boxes = cfdata->cfg->boxes;
|
|
|
|
Config_Box *cfg_box = eina_list_nth(boxes, selected);
|
|
|
|
if (!cfg_box)
|
|
return;
|
|
|
|
cfdata->cfg->boxes = eina_list_remove(boxes, cfg_box);
|
|
|
|
switch(cfg_box->type)
|
|
{
|
|
case launcher:
|
|
ngi_launcher_remove(cfg_box->box);
|
|
break;
|
|
|
|
case taskbar:
|
|
ngi_taskbar_remove(cfg_box->box);
|
|
break;
|
|
|
|
case gadcon:
|
|
ngi_gadcon_remove(cfg_box->box);
|
|
} /* switch */
|
|
|
|
ngi_thaw(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
}
|
|
|
|
static Evas_Object *
|
|
_basic_create_box_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
Evas_Object *o, *ol, *of, *ob, *ot;
|
|
E_Radio_Group *rg;
|
|
|
|
o = e_widget_list_add(evas, 0, 0);
|
|
if (cfdata->cfg_box->type == launcher)
|
|
{
|
|
cfdata->app_dir = eina_stringshare_add(cfdata->cfg_box->launcher_app_dir);
|
|
|
|
of = e_widget_frametable_add(evas, D_("Launcher Settings"), 0);
|
|
ol = e_widget_ilist_add(evas, 0, 0, &cfdata->app_dir);
|
|
cfdata->tlist_box = ol;
|
|
_load_ilist(cfdata);
|
|
e_widget_size_min_set(ol, 140, 140);
|
|
e_widget_frametable_object_append(of, ol, 0, 0, 1, 2, 1, 1, 1, 1);
|
|
|
|
ot = e_widget_table_add(evas, 0);
|
|
ob = e_widget_button_add(evas, D_("Add"), "widget/add", _cb_add, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Delete"), "widget/del", _cb_del, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
|
|
ob = e_widget_button_add(evas, D_("Configure"), "widget/config", _cb_config, cfdata, NULL);
|
|
e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 1, 1, 0);
|
|
|
|
e_widget_frametable_object_append(of, ot, 2, 0, 1, 1, 1, 1, 1, 0);
|
|
e_widget_list_object_append(o, of, 0, 1, 0.5);
|
|
}
|
|
else if (cfdata->cfg_box->type == taskbar)
|
|
{
|
|
of = e_widget_framelist_add(evas, D_("Taskbar Settings"), 0);
|
|
|
|
ob = e_widget_check_add(evas, D_("Don't Show Dialogs"),
|
|
&(cfdata->cfg_box->taskbar_skip_dialogs));
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_check_add(evas, D_("Advanced Window Menu"),
|
|
&(cfdata->cfg_box->taskbar_adv_bordermenu));
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_check_add(evas, D_("Only Show Current Desk"),
|
|
&(cfdata->cfg_box->taskbar_show_desktop));
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_check_add(evas, D_("Group Applications by Window Class"),
|
|
&(cfdata->cfg_box->taskbar_group_apps));
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_check_add(evas, D_("Append new Applications on the right Side"),
|
|
&(cfdata->cfg_box->taskbar_append_right));
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
|
|
|
of = e_widget_framelist_add(evas, D_("Iconified Applications"), 0);
|
|
rg = e_widget_radio_group_new(&cfdata->cfg_box->taskbar_show_iconified);
|
|
ob = e_widget_radio_add(evas, D_("Not Shown"), 0, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Show"), 1, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
ob = e_widget_radio_add(evas, D_("Only Iconified"), 2, rg);
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
|
}
|
|
|
|
return o;
|
|
}
|
|
|
|
static int
|
|
_basic_apply_box_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
eina_stringshare_replace(&cfdata->cfg_box->launcher_app_dir, cfdata->app_dir);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
return 1;
|
|
}
|
|
|
|
/* urgh */
|
|
static void *
|
|
_create_box_data(E_Config_Dialog *cfd)
|
|
{
|
|
return cfd->data;
|
|
}
|
|
|
|
static void
|
|
_free_box_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|
{
|
|
eina_stringshare_del(cfdata->app_dir);
|
|
}
|
|
|
|
static void
|
|
_cb_box_config(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
|
|
E_Config_Dialog *cfd;
|
|
E_Config_Dialog_View *v;
|
|
char buf[4096];
|
|
|
|
int selected = e_widget_ilist_selected_get(cfdata->ilist);
|
|
|
|
if (selected < 0)
|
|
return;
|
|
|
|
Eina_List *boxes = cfdata->cfg->boxes;
|
|
|
|
cfdata->cfg_box = eina_list_nth(boxes, selected);
|
|
|
|
if (!cfdata->cfg_box)
|
|
return;
|
|
|
|
if (cfdata->cfg_box->type == gadcon)
|
|
{
|
|
ngi_gadcon_config(cfdata->cfg_box->box);
|
|
}
|
|
else
|
|
{
|
|
v = E_NEW(E_Config_Dialog_View, 1);
|
|
|
|
v->create_cfdata = _create_box_data;
|
|
v->free_cfdata = _free_box_data;
|
|
v->basic.apply_cfdata = _basic_apply_box_data;
|
|
v->basic.create_widgets = _basic_create_box_widgets;
|
|
v->advanced.apply_cfdata = NULL;
|
|
v->advanced.create_widgets = NULL;
|
|
|
|
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
|
|
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
|
|
D_("Engage Bar Configuration"),
|
|
"e", "_e_mod_ngi_config_dialog_add_box", buf, 0, v, cfdata);
|
|
}
|
|
}
|
|
|
|
static void *
|
|
_create_data2(E_Config_Dialog *cfd)
|
|
{
|
|
E_Config_Dialog_Data *cfdata;
|
|
Config_Item *ci;
|
|
|
|
Ngi_Box *box = cfd->data;
|
|
|
|
ci = (Config_Item *)box->ng->cfg;
|
|
|
|
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
|
_fill_data(ci, cfdata);
|
|
cfdata->cfg_box = box->cfg;
|
|
|
|
return cfdata;
|
|
}
|
|
|
|
void
|
|
ngi_configure_box(Ngi_Box *box)
|
|
{
|
|
E_Config_Dialog *cfd;
|
|
E_Config_Dialog_View *v;
|
|
char buf[4096];
|
|
|
|
v = E_NEW(E_Config_Dialog_View, 1);
|
|
|
|
v->create_cfdata = _create_data2;
|
|
v->free_cfdata = _free_data;
|
|
v->basic.apply_cfdata = _basic_apply_box_data;
|
|
v->basic.create_widgets = _basic_create_box_widgets;
|
|
v->advanced.apply_cfdata = NULL;
|
|
v->advanced.create_widgets = NULL;
|
|
|
|
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
|
|
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
|
|
D_("Engage Bar Configuration"),
|
|
"e", "_e_mod_ngi_config_dialog_add_box", buf, 0, v, box);
|
|
}
|
|
|
|
static void
|
|
_cb_box_up(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
int selected = e_widget_ilist_selected_get(cfdata->ilist);
|
|
|
|
if (selected < 0)
|
|
return;
|
|
|
|
Eina_List *boxes = cfdata->cfg->boxes;
|
|
|
|
Eina_List *l = eina_list_nth_list(boxes, selected);
|
|
|
|
if (!l || !l->prev)
|
|
return;
|
|
|
|
Config_Box *cfg_box = l->data;
|
|
|
|
boxes = eina_list_remove(boxes, cfg_box);
|
|
cfdata->cfg->boxes = eina_list_prepend_relative(boxes, cfg_box, l->prev->data);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
|
|
e_widget_ilist_selected_set(cfdata->ilist, selected - 1);
|
|
}
|
|
|
|
static void
|
|
_cb_box_down(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
int selected = e_widget_ilist_selected_get(cfdata->ilist);
|
|
|
|
if (selected < 0)
|
|
return;
|
|
|
|
Eina_List *boxes = cfdata->cfg->boxes;
|
|
|
|
Eina_List *l = eina_list_nth_list(boxes, selected);
|
|
|
|
if (!l || !l->next)
|
|
return;
|
|
|
|
Config_Box *cfg_box = l->data;
|
|
|
|
boxes = eina_list_remove(boxes, cfg_box);
|
|
cfdata->cfg->boxes = eina_list_append_relative(boxes, cfg_box, l->next->data);
|
|
|
|
_update_boxes(cfdata->cfg->ng);
|
|
|
|
_load_box_tlist(cfdata);
|
|
|
|
e_widget_ilist_selected_set(cfdata->ilist, selected + 1);
|
|
}
|
|
|
|
static void
|
|
_load_box_tlist(E_Config_Dialog_Data *cfdata)
|
|
{
|
|
char buf[4096];
|
|
|
|
e_widget_ilist_clear(cfdata->ilist);
|
|
|
|
int cnt = 1;
|
|
Eina_List *l;
|
|
Config_Box *cfg_box;
|
|
char *blub;
|
|
|
|
for(l = cfdata->cfg->boxes; l; l = l->next)
|
|
{
|
|
cfg_box = l->data;
|
|
switch (cfg_box->type)
|
|
{
|
|
case launcher:
|
|
snprintf(buf, sizeof(buf), "%i Launcher", cnt);
|
|
blub = strdup(buf);
|
|
|
|
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
|
|
break;
|
|
|
|
case taskbar:
|
|
snprintf(buf, sizeof(buf), "%i Taskbar", cnt);
|
|
blub = strdup(buf);
|
|
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
|
|
break;
|
|
|
|
case gadcon:
|
|
snprintf(buf, sizeof(buf), "%i Gadcon", cnt);
|
|
blub = strdup(buf);
|
|
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
|
|
break;
|
|
} /* switch */
|
|
cnt++;
|
|
}
|
|
e_widget_ilist_go(cfdata->ilist);
|
|
}
|
|
|
|
static void
|
|
_cb_add(void *data, void *data2)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
e_entry_dialog_show(D_("Create new source"), "enlightenment/e",
|
|
D_("Enter a name for this new Application Launcher:"), "", NULL, NULL,
|
|
_cb_entry_ok, NULL, cfdata);
|
|
}
|
|
|
|
static void
|
|
_cb_del(void *data, void *data2)
|
|
{
|
|
char buf[4096];
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
snprintf(buf, sizeof(buf), D_("You requested to delete \"%s\".<br><br>"
|
|
"Are you sure you want to delete this source?"),
|
|
cfdata->app_dir);
|
|
|
|
e_confirm_dialog_show(D_("Are you sure you want to delete this source?"),
|
|
"enlightenment/exit", buf, NULL, NULL,
|
|
_cb_confirm_dialog_yes, NULL, cfdata, NULL, NULL, NULL);
|
|
}
|
|
|
|
static void
|
|
_cb_config(void *data, void *data2)
|
|
{
|
|
char path[4096];
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
snprintf(path, sizeof(path), "%s/.e/e/applications/bar/%s/.order",
|
|
e_user_homedir_get(), cfdata->app_dir);
|
|
|
|
e_configure_registry_call("internal/ibar_other",
|
|
e_container_current_get(e_manager_current_get()),
|
|
path);
|
|
}
|
|
|
|
static void
|
|
_cb_entry_ok(void *data, char *text)
|
|
{
|
|
char buf[4096];
|
|
char tmp[4096];
|
|
FILE *f;
|
|
|
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s",
|
|
e_user_homedir_get(), text);
|
|
|
|
if (!ecore_file_exists(buf))
|
|
{
|
|
ecore_file_mkdir(buf);
|
|
|
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order",
|
|
e_user_homedir_get(), text);
|
|
|
|
f = fopen(buf, "w");
|
|
if (f)
|
|
{
|
|
// Populate this .order file with some defaults
|
|
snprintf(tmp, sizeof(tmp), "xterm.desktop\n"
|
|
"firefox.desktop\n"
|
|
"gimp.desktop\n" "xmms.desktop\n");
|
|
fwrite(tmp, sizeof(char), strlen(tmp), f);
|
|
fclose(f);
|
|
}
|
|
}
|
|
|
|
_load_ilist((E_Config_Dialog_Data *)data);
|
|
}
|
|
|
|
static void
|
|
_cb_confirm_dialog_yes(void *data)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
char buf[4096];
|
|
|
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", e_user_homedir_get(), cfdata->app_dir);
|
|
|
|
if (ecore_file_is_dir(buf))
|
|
ecore_file_recursive_rm(buf);
|
|
|
|
_load_ilist(cfdata);
|
|
}
|
|
|
|
static void
|
|
_load_ilist(E_Config_Dialog_Data *cfdata)
|
|
{
|
|
Eina_List *dirs, *l;
|
|
char buf[4096], *file;
|
|
int selnum = -1;
|
|
const char *home;
|
|
int i = 0;
|
|
e_widget_ilist_clear(cfdata->tlist_box);
|
|
|
|
home = e_user_homedir_get();
|
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", home);
|
|
dirs = ecore_file_ls(buf);
|
|
|
|
EINA_LIST_FOREACH(dirs, l, file)
|
|
{
|
|
if (file[0] == '.')
|
|
continue;
|
|
|
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", home, file);
|
|
if (ecore_file_is_dir(buf))
|
|
{
|
|
e_widget_ilist_append(cfdata->tlist_box, NULL, file, NULL, NULL, file);
|
|
if ((cfdata->app_dir) && (!strcmp(cfdata->app_dir, file)))
|
|
selnum = i;
|
|
|
|
i++;
|
|
}
|
|
}
|
|
|
|
e_widget_ilist_go(cfdata->tlist_box);
|
|
if (selnum >= 0)
|
|
e_widget_ilist_selected_set(cfdata->tlist_box, selnum);
|
|
}
|
|
|
|
static void
|
|
_cb_slider_change(void *data, Evas_Object *obj)
|
|
{
|
|
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
|
|
Ng *ng = cfdata->cfg->ng;
|
|
int a;
|
|
|
|
ng->cfg->size = (int)cfdata->size;
|
|
ng->size = ng->cfg->size;
|
|
|
|
ng->cfg->zoomfactor = cfdata->zoomfactor;
|
|
ng->cfg->zoom_duration = cfdata->zoom_duration;
|
|
ng->cfg->zoom_range = cfdata->zoom_range;
|
|
ng->cfg->hide_timeout = cfdata->hide_timeout;
|
|
ng->cfg->alpha = cfdata->alpha;
|
|
|
|
a = ng->cfg->alpha;
|
|
evas_object_color_set(ng->bg_clip, a, a, a, a);
|
|
|
|
ngi_win_position_calc(ng->win);
|
|
ngi_thaw(ng);
|
|
}
|
|
|