forked from enlightenment/enlightenment
add edit button to window remembers config dialog
ticket #789 SVN revision: 83724
This commit is contained in:
parent
3b94f5f39e
commit
2a0ef6c396
|
@ -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
2
NEWS
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
rem = bd->remember;
|
||||
if (bd)
|
||||
rem = bd->remember;
|
||||
else
|
||||
rem = cfdata->rem;
|
||||
|
||||
if (rem)
|
||||
{
|
||||
|
@ -134,68 +157,71 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
cfdata->remember.apply_desktop_file = 1;
|
||||
}
|
||||
|
||||
if (!cfdata->name &&
|
||||
bd->client.icccm.name &&
|
||||
bd->client.icccm.name[0])
|
||||
cfdata->name = strdup(bd->client.icccm.name);
|
||||
if (!cfdata->class &&
|
||||
bd->client.icccm.class &&
|
||||
bd->client.icccm.class[0])
|
||||
cfdata->class = strdup(bd->client.icccm.class);
|
||||
if (!cfdata->role &&
|
||||
bd->client.icccm.window_role &&
|
||||
bd->client.icccm.window_role[0])
|
||||
cfdata->role = strdup(bd->client.icccm.window_role);
|
||||
if (!cfdata->title)
|
||||
if (bd)
|
||||
{
|
||||
const char *title = e_border_name_get(bd);
|
||||
if (title && title[0])
|
||||
cfdata->title = strdup(title);
|
||||
}
|
||||
if (!cfdata->desktop && bd->desktop)
|
||||
cfdata->desktop = strdup(bd->desktop->name);
|
||||
|
||||
if (!cfdata->command &&
|
||||
(bd->client.icccm.command.argc > 0) &&
|
||||
(bd->client.icccm.command.argv))
|
||||
{
|
||||
char buf[4096];
|
||||
int i, j, k;
|
||||
|
||||
buf[0] = 0;
|
||||
k = 0;
|
||||
for (i = 0; i < bd->client.icccm.command.argc; i++)
|
||||
if (!cfdata->name &&
|
||||
bd->client.icccm.name &&
|
||||
bd->client.icccm.name[0])
|
||||
cfdata->name = strdup(bd->client.icccm.name);
|
||||
if (!cfdata->class &&
|
||||
bd->client.icccm.class &&
|
||||
bd->client.icccm.class[0])
|
||||
cfdata->class = strdup(bd->client.icccm.class);
|
||||
if (!cfdata->role &&
|
||||
bd->client.icccm.window_role &&
|
||||
bd->client.icccm.window_role[0])
|
||||
cfdata->role = strdup(bd->client.icccm.window_role);
|
||||
if (!cfdata->title)
|
||||
{
|
||||
if (i > 0)
|
||||
const char *title = e_border_name_get(bd);
|
||||
if (title && title[0])
|
||||
cfdata->title = strdup(title);
|
||||
}
|
||||
if (!cfdata->desktop && bd->desktop)
|
||||
cfdata->desktop = strdup(bd->desktop->name);
|
||||
|
||||
if (!cfdata->command &&
|
||||
(bd->client.icccm.command.argc > 0) &&
|
||||
(bd->client.icccm.command.argv))
|
||||
{
|
||||
char buf[4096];
|
||||
int i, j, k;
|
||||
|
||||
buf[0] = 0;
|
||||
k = 0;
|
||||
for (i = 0; i < bd->client.icccm.command.argc; i++)
|
||||
{
|
||||
buf[k] = ' ';
|
||||
k++;
|
||||
}
|
||||
for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
|
||||
{
|
||||
if (k >= (int)(sizeof(buf) - 10))
|
||||
if (i > 0)
|
||||
{
|
||||
buf[k] = 0;
|
||||
goto done;
|
||||
}
|
||||
if ((bd->client.icccm.command.argv[i][j] == ' ') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\t') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\\') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\"') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\'') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '$') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '%'))
|
||||
{
|
||||
buf[k] = '\\';
|
||||
buf[k] = ' ';
|
||||
k++;
|
||||
}
|
||||
for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
|
||||
{
|
||||
if (k >= (int)(sizeof(buf) - 10))
|
||||
{
|
||||
buf[k] = 0;
|
||||
goto done;
|
||||
}
|
||||
if ((bd->client.icccm.command.argv[i][j] == ' ') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\t') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\\') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\"') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '\'') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '$') ||
|
||||
(bd->client.icccm.command.argv[i][j] == '%'))
|
||||
{
|
||||
buf[k] = '\\';
|
||||
k++;
|
||||
}
|
||||
buf[k] = bd->client.icccm.command.argv[i][j];
|
||||
k++;
|
||||
}
|
||||
buf[k] = bd->client.icccm.command.argv[i][j];
|
||||
k++;
|
||||
}
|
||||
buf[k] = 0;
|
||||
done:
|
||||
cfdata->command = strdup(buf);
|
||||
}
|
||||
buf[k] = 0;
|
||||
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);
|
||||
cfdata->border = cfd->data;
|
||||
if (!strcmp(cfd->class, "_border_remember_dialog"))
|
||||
cfdata->border = cfd->data;
|
||||
else
|
||||
cfdata->rem = cfd->data;
|
||||
cfdata->applied = 1;
|
||||
return cfdata;
|
||||
}
|
||||
|
@ -281,14 +310,17 @@ _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
|
|||
free(cfdata->command);
|
||||
free(cfdata->desktop);
|
||||
|
||||
if (!cfdata->applied && cfdata->border->remember)
|
||||
if (cfdata->border)
|
||||
{
|
||||
e_remember_unuse(cfdata->border->remember);
|
||||
e_remember_del(cfdata->border->remember);
|
||||
e_config_save_queue();
|
||||
}
|
||||
if (!cfdata->applied && cfdata->border->remember)
|
||||
{
|
||||
e_remember_unuse(cfdata->border->remember);
|
||||
e_remember_del(cfdata->border->remember);
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
||||
cfdata->border->border_remember_dialog = NULL;
|
||||
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,19 +510,22 @@ _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 (cfdata->remember.match_type)
|
||||
if (bd)
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_TYPE;
|
||||
rem->type = bd->client.netwm.type;
|
||||
}
|
||||
if (cfdata->remember.match_type)
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_TYPE;
|
||||
rem->type = bd->client.netwm.type;
|
||||
}
|
||||
|
||||
if (cfdata->remember.match_transient)
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_TRANSIENT;
|
||||
if (bd->client.icccm.transient_for != 0)
|
||||
rem->transient = 1;
|
||||
else
|
||||
rem->transient = 0;
|
||||
if (cfdata->remember.match_transient)
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_TRANSIENT;
|
||||
if (bd->client.icccm.transient_for != 0)
|
||||
rem->transient = 1;
|
||||
else
|
||||
rem->transient = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!rem->match)
|
||||
|
@ -507,7 +545,8 @@ _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);
|
||||
cfdata->border->remember = rem;
|
||||
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;
|
||||
}
|
||||
|
||||
_check_matches(rem, 1);
|
||||
rem->keep_settings = 0;
|
||||
cfdata->border->remember = rem;
|
||||
e_remember_update(cfdata->border);
|
||||
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,21 +712,24 @@ _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_D
|
|||
{
|
||||
cfdata->remember.match_role = 0;
|
||||
}
|
||||
if (cfdata->border->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
|
||||
if (cfdata->border)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window type"),
|
||||
&(cfdata->remember.match_type));
|
||||
if (cfdata->border->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window type"),
|
||||
&(cfdata->remember.match_type));
|
||||
e_widget_list_object_append(of, ob, 1, 0, 0.5);
|
||||
}
|
||||
else
|
||||
{
|
||||
cfdata->remember.match_type = 0;
|
||||
}
|
||||
ob = e_widget_label_add(evas, _("wildcard matches are allowed"));
|
||||
e_widget_list_object_append(of, ob, 1, 0, 0.5);
|
||||
ob = e_widget_check_add(evas, _("Transience"),
|
||||
&(cfdata->remember.match_transient));
|
||||
e_widget_list_object_append(of, ob, 1, 0, 0.5);
|
||||
}
|
||||
else
|
||||
{
|
||||
cfdata->remember.match_type = 0;
|
||||
}
|
||||
ob = e_widget_label_add(evas, _("wildcard matches are allowed"));
|
||||
e_widget_list_object_append(of, ob, 1, 0, 0.5);
|
||||
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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue