add edit button to window remembers config dialog

ticket #789


SVN revision: 83724
This commit is contained in:
Mike Blumenkrantz 2013-02-07 09:23:29 +00:00
parent 3b94f5f39e
commit 2a0ef6c396
5 changed files with 186 additions and 100 deletions

View File

@ -5,6 +5,7 @@
2013-02-07 Mike Blumenkrantz
* added option for remembering filemanager windows globally
* added edit functionality to window remembers dialog
2013-02-07 Carsten Haitzler

2
NEWS
View File

@ -25,6 +25,7 @@ Additions:
* add e_border_pointer_warp_to_center_now()
* e_widget_check_widget_disable_on_*
* e_widget_on_disable_hook_set
* e_int_border_remember_edit
Config:
* Added option for disabling icons in menus
* Added option for disabling pointer warping when performing directional focus changes using winlist
@ -97,6 +98,7 @@ Improvements:
* unify all pointer warp animators
* clock listens to /etc/timezone changes now too
* enable image preloading for all e_widget_preview using edje
* window remember dialog now allows editing of remembers
Fixes:
* IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar.

View File

@ -22,6 +22,7 @@ static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E
struct _E_Config_Dialog_Data
{
E_Border *border;
E_Remember *rem;
/*- BASIC -*/
int mode;
int warned;
@ -66,6 +67,25 @@ struct _E_Config_Dialog_Data
};
/* a nice easy setup function that does the dirty work */
EAPI E_Config_Dialog *
e_int_border_remember_edit(E_Remember *rem)
{
E_Config_Dialog_View *v;
v = E_NEW(E_Config_Dialog_View, 1);
/* methods */
v->create_cfdata = _create_data;
v->free_cfdata = _free_data;
v->basic.apply_cfdata = _advanced_apply_data;
v->basic.create_widgets = _advanced_create_widgets;
v->override_auto_apply = 1;
/* create config dialog for bd object/data */
return e_config_dialog_new(NULL, _("Window Remember"),
"E", "_border_remember_edit_dialog",
NULL, 0, v, rem);
}
EAPI void
e_int_border_remember(E_Border *bd)
{
@ -114,7 +134,10 @@ _fill_data(E_Config_Dialog_Data *cfdata)
E_Remember *rem;
bd = cfdata->border;
if (bd)
rem = bd->remember;
else
rem = cfdata->rem;
if (rem)
{
@ -134,6 +157,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->remember.apply_desktop_file = 1;
}
if (bd)
{
if (!cfdata->name &&
bd->client.icccm.name &&
bd->client.icccm.name[0])
@ -197,6 +222,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
done:
cfdata->command = strdup(buf);
}
}
if (rem)
{
@ -265,7 +291,10 @@ _create_data(E_Config_Dialog *cfd)
E_Config_Dialog_Data *cfdata;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
if (!strcmp(cfd->class, "_border_remember_dialog"))
cfdata->border = cfd->data;
else
cfdata->rem = cfd->data;
cfdata->applied = 1;
return cfdata;
}
@ -281,6 +310,8 @@ _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
free(cfdata->command);
free(cfdata->desktop);
if (cfdata->border)
{
if (!cfdata->applied && cfdata->border->remember)
{
e_remember_unuse(cfdata->border->remember);
@ -289,6 +320,7 @@ _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
}
cfdata->border->border_remember_dialog = NULL;
}
free(cfdata);
}
@ -425,7 +457,10 @@ static int
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
E_Border *bd = cfdata->border;
E_Remember *rem = bd->remember;
E_Remember *rem;
if (bd) rem = bd->remember;
else rem = cfdata->rem;
if (!rem)
{
@ -475,6 +510,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
rem->match |= E_REMEMBER_MATCH_ROLE;
rem->role = eina_stringshare_add(cfdata->role);
}
if (bd)
{
if (cfdata->remember.match_type)
{
rem->match |= E_REMEMBER_MATCH_TYPE;
@ -489,6 +526,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
else
rem->transient = 0;
}
}
if (!rem->match)
{
@ -507,6 +545,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
e_win_centered_set(dia->win, 1);
e_dialog_show(dia);
if (bd)
cfdata->border->remember = rem;
return 0;
}
@ -566,7 +605,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
if (cfdata->remember.offer_resistance)
rem->apply |= E_REMEMBER_APPLY_OFFER_RESISTANCE;
if (!rem->apply && !rem->prop.desktop_file)
if (bd && (!rem->apply && !rem->prop.desktop_file))
{
e_remember_unuse(rem);
e_remember_del(rem);
@ -575,13 +614,16 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
return 1;
}
if (bd)
{
_check_matches(rem, 1);
rem->keep_settings = 0;
cfdata->border->remember = rem;
e_remember_update(cfdata->border);
cfdata->applied = 1;
}
rem->keep_settings = cfdata->remember.keep_settings;
cfdata->applied = 1;
e_config_save_queue();
return 1; /* Apply was OK */
}
@ -670,6 +712,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_D
{
cfdata->remember.match_role = 0;
}
if (cfdata->border)
{
if (cfdata->border->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
{
ob = e_widget_check_add(evas, _("Window type"),
@ -685,6 +729,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_D
ob = e_widget_check_add(evas, _("Transience"),
&(cfdata->remember.match_transient));
e_widget_list_object_append(of, ob, 1, 0, 0.5);
}
e_widget_toolbook_page_append(o, NULL, _("Identifiers"), of, 1, 1, 1, 1, 0.5, 0.0);
of = e_widget_table_add(evas, 0);

View File

@ -4,6 +4,7 @@
#define E_INT_BORDER_REMEMBER_H
EAPI void e_int_border_remember(E_Border *bd);
EAPI E_Config_Dialog *e_int_border_remember_edit(E_Remember *rem);
#endif
#endif

View File

@ -7,15 +7,17 @@ static int _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Conf
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static void _fill_remembers(E_Config_Dialog_Data *cfdata);
static void _cb_edit(void *data, void *data2 __UNUSED__);
static void _cb_delete(void *data, void *data2);
static void _cb_list_change(void *data, Evas_Object *obj);
struct _E_Config_Dialog_Data
{
Evas_Object *list, *btn, *name, *class, *title, *role;
Evas_Object *list, *btn, *btn2, *name, *class, *title, *role;
int remember_dialogs;
int remember_fm_wins;
int remember_internal_fm_windows_globally;
Eina_List *cfds;
};
E_Config_Dialog *
@ -89,8 +91,10 @@ _create_data(E_Config_Dialog *cfd __UNUSED__)
}
static void
_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
EINA_LIST_FREE(cfdata->cfds, cfd)
E_OBJECT_DEL_SET(cfd, NULL);
free(cfdata);
}
@ -133,10 +137,6 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
e_widget_check_widget_disable_on_unchecked_add(oc, ow);
e_widget_list_object_append(ol, ow, 1, 0, 0.0);
ow = e_widget_button_add(evas, _("Delete"), "list-remove",
_cb_delete, cfdata, NULL);
cfdata->btn = ow;
ow = e_widget_ilist_add(evas, 1, 1, NULL);
cfdata->list = ow;
e_widget_ilist_multi_select_set(ow, 1);
@ -179,7 +179,14 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
e_widget_list_object_append(ol, cfdata->list, 1, 1, 0.0);
e_widget_list_object_append(ol, of2, 1, 0, 0.0);
e_widget_list_object_append(ol, cfdata->btn, 1, 0, 0.0);
of2 = e_widget_list_add(evas, 1, 1);
cfdata->btn = ow = e_widget_button_add(evas, _("Edit"), "edit-rename", _cb_edit, cfdata, NULL);
e_widget_list_object_append(of2, ow, 1, 1, 0.5);
cfdata->btn2 = ow = e_widget_button_add(evas, _("Delete"), "list-remove", _cb_delete, cfdata, NULL);
e_widget_list_object_append(of2, ow, 1, 1, 0.5);
e_widget_list_object_append(ol, of2, 1, 1, 0.5);
_cb_list_change(cfdata, NULL);
return ol;
@ -276,6 +283,36 @@ _fill_remembers(E_Config_Dialog_Data *cfdata)
e_widget_disabled_set(cfdata->btn, 1);
}
static void
_cb_edit_del(void *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = e_object_data_get(obj);
cfdata->cfds = eina_list_remove(cfdata->cfds, obj);
_fill_remembers(cfdata);
}
static void
_cb_edit(void *data, void *data2 __UNUSED__)
{
E_Config_Dialog_Data *cfdata = data;
const Eina_List *l;
E_Ilist_Item *ili;
EINA_LIST_FOREACH(e_widget_ilist_selected_items_get(cfdata->list), l, ili)
{
E_Remember *rem;
E_Config_Dialog *cfd;
rem = e_widget_ilist_item_data_get(ili);
cfd = e_int_border_remember_edit(rem);
e_object_data_set(E_OBJECT(cfd), cfdata);
E_OBJECT_DEL_SET(cfd, _cb_edit_del);
cfdata->cfds = eina_list_append(cfdata->cfds, cfd);
}
}
static void
_cb_delete(void *data, void *data2 __UNUSED__)
{