parent
71c60e2e11
commit
0d754cef10
|
@ -57,6 +57,8 @@ struct _E_Config_Dialog_Data
|
|||
int set_focus_on_start;
|
||||
int keep_settings;
|
||||
} remember;
|
||||
|
||||
int applied;
|
||||
};
|
||||
|
||||
/* a nice easy setup function that does the dirty work */
|
||||
|
@ -97,55 +99,47 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
bd = cfdata->border;
|
||||
rem = bd->remember;
|
||||
|
||||
if (!bd->remember) cfdata->mode = MODE_NOTHING;
|
||||
else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size) &&
|
||||
(cfdata->remember.apply_locks) && (cfdata->remember.apply_layer) &&
|
||||
(cfdata->remember.apply_border) && (cfdata->remember.apply_sticky) &&
|
||||
(cfdata->remember.apply_desktop) && (cfdata->remember.apply_shade) &&
|
||||
(cfdata->remember.apply_zone) && (cfdata->remember.apply_skip_winlist) &&
|
||||
(cfdata->remember.apply_skip_pager) && (cfdata->remember.apply_fullscreen) &&
|
||||
(cfdata->remember.apply_skip_taskbar))
|
||||
cfdata->mode = MODE_ALL;
|
||||
else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size) &&
|
||||
(cfdata->remember.apply_locks))
|
||||
cfdata->mode = MODE_GEOMETRY_LOCKS;
|
||||
else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size))
|
||||
cfdata->mode = MODE_GEOMETRY;
|
||||
else if ((cfdata->remember.apply_locks))
|
||||
cfdata->mode = MODE_LOCKS;
|
||||
else cfdata->mode = MODE_NOTHING;
|
||||
|
||||
if (bd->remember)
|
||||
if (rem)
|
||||
{
|
||||
if (bd->remember->name)
|
||||
cfdata->name = strdup(bd->remember->name);
|
||||
if (bd->remember->class)
|
||||
cfdata->class = strdup(bd->remember->class);
|
||||
if (bd->remember->title)
|
||||
cfdata->title = strdup(bd->remember->title);
|
||||
if (bd->remember->prop.desktop_file)
|
||||
cfdata->desktop = strdup(bd->remember->prop.desktop_file);
|
||||
if (rem->name && rem->name[0])
|
||||
cfdata->name = strdup(rem->name);
|
||||
if (rem->class && rem->class[0])
|
||||
cfdata->class = strdup(rem->class);
|
||||
if (rem->title && rem->title[0])
|
||||
cfdata->title = strdup(rem->title);
|
||||
if (rem->role && rem->role[0])
|
||||
cfdata->role = strdup(rem->role);
|
||||
if (rem->prop.command && rem->prop.command[0])
|
||||
cfdata->command = strdup(rem->prop.command);
|
||||
if (rem->prop.desktop_file && rem->prop.desktop_file[0])
|
||||
cfdata->desktop = strdup(rem->prop.desktop_file);
|
||||
if (cfdata->desktop)
|
||||
cfdata->remember.apply_desktop_file = 1;
|
||||
}
|
||||
|
||||
if (!cfdata->name && bd->client.icccm.name && bd->client.icccm.name[0])
|
||||
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])
|
||||
if (!cfdata->class &&
|
||||
bd->client.icccm.class &&
|
||||
bd->client.icccm.class[0])
|
||||
cfdata->class = strdup(bd->client.icccm.class);
|
||||
if (bd->client.icccm.window_role && bd->client.icccm.window_role[0])
|
||||
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->client.netwm.name && bd->client.netwm.name[0])
|
||||
cfdata->title = strdup(bd->client.netwm.name);
|
||||
else if (bd->client.icccm.title && bd->client.icccm.title[0])
|
||||
cfdata->title = strdup(bd->client.icccm.title);
|
||||
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 ((bd->client.icccm.command.argc > 0) &&
|
||||
if (!cfdata->command &&
|
||||
(bd->client.icccm.command.argc > 0) &&
|
||||
(bd->client.icccm.command.argv))
|
||||
{
|
||||
char buf[4096];
|
||||
|
@ -190,30 +184,79 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
if (rem)
|
||||
{
|
||||
if (rem->apply_first_only) cfdata->remember.apply_first_only = 1;
|
||||
if (rem->keep_settings) cfdata->remember.keep_settings = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_NAME) cfdata->remember.match_name = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_CLASS) cfdata->remember.match_class = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TITLE) cfdata->remember.match_title = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_ROLE) cfdata->remember.match_role = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TYPE) cfdata->remember.match_type = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TRANSIENT) cfdata->remember.match_transient = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_POS) cfdata->remember.apply_pos = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SIZE) cfdata->remember.apply_size = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_LAYER) cfdata->remember.apply_layer = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_LOCKS) cfdata->remember.apply_locks = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_BORDER) cfdata->remember.apply_border = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_STICKY) cfdata->remember.apply_sticky = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_DESKTOP) cfdata->remember.apply_desktop = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SHADE) cfdata->remember.apply_shade = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_FULLSCREEN) cfdata->remember.apply_fullscreen = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_ZONE) cfdata->remember.apply_zone = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST) cfdata->remember.apply_skip_winlist = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_PAGER) cfdata->remember.apply_skip_pager = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_TASKBAR) cfdata->remember.apply_skip_taskbar = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_RUN) cfdata->remember.apply_run = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_ICON_PREF) cfdata->remember.apply_icon_pref = 1;
|
||||
if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START) cfdata->remember.set_focus_on_start = 1;
|
||||
if (rem->keep_settings) cfdata->remember.keep_settings = 1;
|
||||
|
||||
if (rem->match & E_REMEMBER_MATCH_NAME)
|
||||
cfdata->remember.match_name = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_CLASS)
|
||||
cfdata->remember.match_class = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TITLE)
|
||||
cfdata->remember.match_title = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_ROLE)
|
||||
cfdata->remember.match_role = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TYPE)
|
||||
cfdata->remember.match_type = 1;
|
||||
if (rem->match & E_REMEMBER_MATCH_TRANSIENT)
|
||||
cfdata->remember.match_transient = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_POS)
|
||||
cfdata->remember.apply_pos = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SIZE)
|
||||
cfdata->remember.apply_size = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_LAYER)
|
||||
cfdata->remember.apply_layer = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_LOCKS)
|
||||
cfdata->remember.apply_locks = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_BORDER)
|
||||
cfdata->remember.apply_border = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_STICKY)
|
||||
cfdata->remember.apply_sticky = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_DESKTOP)
|
||||
cfdata->remember.apply_desktop = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SHADE)
|
||||
cfdata->remember.apply_shade = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_FULLSCREEN)
|
||||
cfdata->remember.apply_fullscreen = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_ZONE)
|
||||
cfdata->remember.apply_zone = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST)
|
||||
cfdata->remember.apply_skip_winlist = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_PAGER)
|
||||
cfdata->remember.apply_skip_pager = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_TASKBAR)
|
||||
cfdata->remember.apply_skip_taskbar = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_RUN)
|
||||
cfdata->remember.apply_run = 1;
|
||||
if (rem->apply & E_REMEMBER_APPLY_ICON_PREF)
|
||||
cfdata->remember.apply_icon_pref = 1;
|
||||
if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START)
|
||||
cfdata->remember.set_focus_on_start = 1;
|
||||
}
|
||||
|
||||
if (!rem) cfdata->mode = MODE_NOTHING;
|
||||
else if ((cfdata->remember.apply_pos) &&
|
||||
(cfdata->remember.apply_size) &&
|
||||
(cfdata->remember.apply_locks) &&
|
||||
(cfdata->remember.apply_layer) &&
|
||||
(cfdata->remember.apply_border) &&
|
||||
(cfdata->remember.apply_sticky) &&
|
||||
(cfdata->remember.apply_desktop) &&
|
||||
(cfdata->remember.apply_shade) &&
|
||||
(cfdata->remember.apply_zone) &&
|
||||
(cfdata->remember.apply_skip_winlist) &&
|
||||
(cfdata->remember.apply_skip_pager) &&
|
||||
(cfdata->remember.apply_fullscreen) &&
|
||||
(cfdata->remember.apply_skip_taskbar))
|
||||
cfdata->mode = MODE_ALL;
|
||||
else if ((cfdata->remember.apply_pos) &&
|
||||
(cfdata->remember.apply_size) &&
|
||||
(cfdata->remember.apply_locks))
|
||||
cfdata->mode = MODE_GEOMETRY_LOCKS;
|
||||
else if ((cfdata->remember.apply_pos) &&
|
||||
(cfdata->remember.apply_size))
|
||||
cfdata->mode = MODE_GEOMETRY;
|
||||
else if ((cfdata->remember.apply_locks))
|
||||
cfdata->mode = MODE_LOCKS;
|
||||
else cfdata->mode = MODE_NOTHING;
|
||||
}
|
||||
|
||||
|
||||
|
@ -228,6 +271,7 @@ _create_data(E_Config_Dialog *cfd)
|
|||
|
||||
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
||||
cfdata->border = cfd->data;
|
||||
cfdata->applied = 1;
|
||||
_fill_data(cfdata);
|
||||
return cfdata;
|
||||
}
|
||||
|
@ -236,87 +280,92 @@ static void
|
|||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
/* Free the cfdata */
|
||||
if (cfdata->name) free(cfdata->name);
|
||||
if (cfdata->class) free(cfdata->class);
|
||||
if (cfdata->title) free(cfdata->title);
|
||||
if (cfdata->role) free(cfdata->role);
|
||||
if (cfdata->name) free(cfdata->name);
|
||||
if (cfdata->class) free(cfdata->class);
|
||||
if (cfdata->title) free(cfdata->title);
|
||||
if (cfdata->role) free(cfdata->role);
|
||||
if (cfdata->command) free(cfdata->command);
|
||||
if (cfdata->desktop) free(cfdata->desktop);
|
||||
|
||||
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;
|
||||
free(cfdata);
|
||||
}
|
||||
|
||||
/**--APPLY--**/
|
||||
static void
|
||||
_warning_dialog_show(E_Container *con)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
|
||||
dia = e_dialog_new(con, "E", "_border_remember_error_multi_dialog");
|
||||
e_dialog_title_set(dia, _("Window properties are not a unique match"));
|
||||
e_dialog_text_set
|
||||
(dia,
|
||||
_("You are trying to ask Enlightenment to remember to apply<br>"
|
||||
"properties (such as size, location, border style etc.) to<br>"
|
||||
"a window that <hilight>does not have unique properties</hilight>.<br>"
|
||||
"<br>"
|
||||
"This means it shares Name/Class, Transience, Role etc. properties<br>"
|
||||
"with more than 1 other window on the screen and remembering<br>"
|
||||
"properties for this window will apply to all other windows<br>"
|
||||
"that match these properties.<br>"
|
||||
"<br>"
|
||||
"This is just a warning in case you did not intend this to happen.<br>"
|
||||
"If you did, simply press <hilight>Apply</hilight> or <hilight>OK</hilight> buttons<br>"
|
||||
"and your settings will be accepted. Press <hilight>Cancel</hilight> if you<br>"
|
||||
"are not sure and nothing will be affected.")
|
||||
);
|
||||
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_dialog_show(dia);
|
||||
}
|
||||
|
||||
static int
|
||||
_check_matches(E_Config_Dialog_Data *cfdata, int update)
|
||||
_check_matches(E_Remember *rem, int update)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Border *bd;
|
||||
const char *title;
|
||||
int matchflags = 0;
|
||||
int required_matches = 0;
|
||||
int n = 0;
|
||||
|
||||
if (cfdata->remember.match_name)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_NAME;
|
||||
required_matches++;
|
||||
}
|
||||
if (cfdata->remember.match_class)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_CLASS;
|
||||
required_matches++;
|
||||
}
|
||||
if (cfdata->remember.match_title)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_TITLE;
|
||||
required_matches++;
|
||||
}
|
||||
if (cfdata->remember.match_role)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_ROLE;
|
||||
required_matches++;
|
||||
}
|
||||
if (cfdata->remember.match_type)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_TYPE;
|
||||
required_matches++;
|
||||
}
|
||||
|
||||
if (cfdata->remember.match_transient)
|
||||
{
|
||||
matchflags |= E_REMEMBER_MATCH_TRANSIENT;
|
||||
required_matches++;
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(e_border_client_list(), l, bd)
|
||||
{
|
||||
int matches = 0;
|
||||
|
||||
int match = rem->match;
|
||||
title = e_border_name_get(bd);
|
||||
if ((matchflags & E_REMEMBER_MATCH_NAME) &&
|
||||
(e_util_glob_match(bd->client.icccm.name, cfdata->name)))
|
||||
matches++;
|
||||
if ((matchflags & E_REMEMBER_MATCH_CLASS) &&
|
||||
(e_util_glob_match(bd->client.icccm.class, cfdata->class)))
|
||||
matches++;
|
||||
if ((matchflags & E_REMEMBER_MATCH_TITLE) &&
|
||||
(e_util_glob_match(title, cfdata->title)))
|
||||
matches++;
|
||||
if ((matchflags & E_REMEMBER_MATCH_ROLE) &&
|
||||
((!e_util_strcmp(cfdata->role, bd->client.icccm.window_role)) ||
|
||||
(e_util_both_str_empty(cfdata->role, bd->client.icccm.window_role))))
|
||||
matches++;
|
||||
if ((matchflags & E_REMEMBER_MATCH_TYPE) &&
|
||||
(cfdata->border->client.netwm.type == bd->client.netwm.type))
|
||||
matches++;
|
||||
if ((matchflags & E_REMEMBER_MATCH_TRANSIENT) &&
|
||||
((cfdata->remember.match_transient && bd->client.icccm.transient_for != 0) ||
|
||||
(!cfdata->remember.match_transient && (bd->client.icccm.transient_for == 0))))
|
||||
matches++;
|
||||
|
||||
if (matches >= required_matches) n++;
|
||||
if ((match & E_REMEMBER_MATCH_NAME) &&
|
||||
(e_util_glob_match(bd->client.icccm.name, rem->name)))
|
||||
match &= ~E_REMEMBER_MATCH_NAME;
|
||||
|
||||
if ((match & E_REMEMBER_MATCH_CLASS) &&
|
||||
(e_util_glob_match(bd->client.icccm.class, rem->class)))
|
||||
match &= ~E_REMEMBER_MATCH_CLASS;
|
||||
|
||||
if ((match & E_REMEMBER_MATCH_TITLE) &&
|
||||
(e_util_glob_match(title, rem->title)))
|
||||
match &= ~E_REMEMBER_MATCH_TITLE;
|
||||
|
||||
if ((match & E_REMEMBER_MATCH_ROLE) &&
|
||||
((!e_util_strcmp(rem->role, bd->client.icccm.window_role)) ||
|
||||
(e_util_both_str_empty(rem->role, bd->client.icccm.window_role))))
|
||||
match &= ~E_REMEMBER_MATCH_ROLE;
|
||||
|
||||
if ((match & E_REMEMBER_MATCH_TYPE) &&
|
||||
(rem->type == bd->client.netwm.type))
|
||||
match &= ~E_REMEMBER_MATCH_TYPE;
|
||||
|
||||
if ((match & E_REMEMBER_MATCH_TRANSIENT) &&
|
||||
((rem->transient && bd->client.icccm.transient_for != 0) ||
|
||||
(!rem->transient && (bd->client.icccm.transient_for == 0))))
|
||||
match &= ~E_REMEMBER_MATCH_TRANSIENT;
|
||||
|
||||
if (match == 0) n++;
|
||||
|
||||
if (update)
|
||||
{
|
||||
|
@ -328,138 +377,63 @@ _check_matches(E_Config_Dialog_Data *cfdata, int update)
|
|||
return n;
|
||||
}
|
||||
|
||||
static void
|
||||
_remember_update(E_Remember *rem, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
if (rem->name) eina_stringshare_del(rem->name);
|
||||
if (rem->class) eina_stringshare_del(rem->class);
|
||||
if (rem->title) eina_stringshare_del(rem->title);
|
||||
if (rem->role) eina_stringshare_del(rem->role);
|
||||
if (rem->prop.command) eina_stringshare_del(rem->prop.command);
|
||||
if (rem->prop.desktop_file) eina_stringshare_del(rem->prop.desktop_file);
|
||||
rem->name = NULL;
|
||||
rem->class = NULL;
|
||||
rem->title = NULL;
|
||||
rem->role = NULL;
|
||||
rem->prop.command = NULL;
|
||||
rem->prop.desktop_file = NULL;
|
||||
if (cfdata->name && cfdata->name[0])
|
||||
rem->name = eina_stringshare_add(cfdata->name);
|
||||
if (cfdata->class && cfdata->class[0])
|
||||
rem->class = eina_stringshare_add(cfdata->class);
|
||||
if (cfdata->title && cfdata->title[0])
|
||||
rem->title = eina_stringshare_add(cfdata->title);
|
||||
if (cfdata->role && cfdata->role[0])
|
||||
rem->role = eina_stringshare_add(cfdata->role);
|
||||
if (cfdata->command && cfdata->command[0])
|
||||
rem->prop.command = eina_stringshare_add(cfdata->command);
|
||||
|
||||
if (cfdata->remember.apply_desktop_file && cfdata->desktop)
|
||||
rem->prop.desktop_file = eina_stringshare_add(cfdata->desktop);
|
||||
|
||||
}
|
||||
|
||||
static int
|
||||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
/* Actually take our cfdata settings and apply them in real life */
|
||||
E_Remember *rem;
|
||||
|
||||
E_Border *bd = cfdata->border;
|
||||
E_Remember *rem = bd->remember;;
|
||||
|
||||
if (cfdata->mode == MODE_NOTHING)
|
||||
{
|
||||
if (cfdata->border->remember)
|
||||
if (rem)
|
||||
{
|
||||
rem = cfdata->border->remember;
|
||||
cfdata->border->remember = NULL;
|
||||
e_remember_unuse(rem);
|
||||
e_remember_del(rem);
|
||||
}
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
}
|
||||
if (!cfdata->warned)
|
||||
{
|
||||
int matches = 0;
|
||||
cfdata->remember.match_role = 1;
|
||||
cfdata->remember.match_type = 1;
|
||||
cfdata->remember.match_transient = 1;
|
||||
|
||||
if ((cfdata->name) && (cfdata->class))
|
||||
{
|
||||
cfdata->remember.match_name = 1;
|
||||
cfdata->remember.match_class = 1;
|
||||
}
|
||||
else
|
||||
cfdata->remember.match_title = 1;
|
||||
|
||||
matches = _check_matches(cfdata, 0);
|
||||
|
||||
if (matches > 1)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
|
||||
dia = e_dialog_new(cfd->con, "E", "_border_remember_error_multi_dialog");
|
||||
e_dialog_title_set(dia, _("Window properties are not a unique match"));
|
||||
e_dialog_text_set
|
||||
(dia,
|
||||
_("You are trying to ask Enlightenment to remember to apply<br>"
|
||||
"properties (such as size, location, border style etc.) to<br>"
|
||||
"a window that <hilight>does not have unique properties</hilight>.<br>"
|
||||
"<br>"
|
||||
"This means it shares Name/Class, Transience, Role etc. properties<br>"
|
||||
"with more than 1 other window on the screen and remembering<br>"
|
||||
"properties for this window will apply to all other windows<br>"
|
||||
"that match these properties.<br>"
|
||||
"<br>"
|
||||
"This is just a warning in case you did not intend this to happen.<br>"
|
||||
"If you did, simply press <hilight>Apply</hilight> or <hilight>OK</hilight> buttons<br>"
|
||||
"and your settings will be accepted. Press <hilight>Cancel</hilight> if you<br>"
|
||||
"are not sure and nothing will be affected.")
|
||||
);
|
||||
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_dialog_show(dia);
|
||||
cfdata->warned = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
rem = cfdata->border->remember;
|
||||
|
||||
if (!rem)
|
||||
{
|
||||
rem = e_remember_new();
|
||||
if (rem)
|
||||
e_remember_use(rem);
|
||||
{
|
||||
bd->remember = rem;
|
||||
cfdata->applied = 0;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
e_remember_default_match_set(rem, cfdata->border);
|
||||
|
||||
if (rem)
|
||||
if ((!cfdata->warned) && (_check_matches(rem, 0) > 1))
|
||||
{
|
||||
e_remember_default_match_set(rem, cfdata->border);
|
||||
|
||||
if (cfdata->mode == MODE_GEOMETRY)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE;
|
||||
else if (cfdata->mode == MODE_LOCKS)
|
||||
rem->apply = E_REMEMBER_APPLY_LOCKS;
|
||||
else if (cfdata->mode == MODE_GEOMETRY_LOCKS)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS;
|
||||
else if (cfdata->mode == MODE_ALL)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER |
|
||||
E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY |
|
||||
E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE |
|
||||
E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | E_REMEMBER_APPLY_SKIP_TASKBAR |
|
||||
E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF;
|
||||
rem->apply_first_only = 0;
|
||||
cfdata->remember.apply_desktop_file = 0;
|
||||
_remember_update(rem, cfdata);
|
||||
_check_matches(cfdata, 1);
|
||||
|
||||
cfdata->border->remember = rem;
|
||||
e_remember_update(cfdata->border);
|
||||
_warning_dialog_show(cfd->con);
|
||||
cfdata->warned = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (cfdata->mode == MODE_GEOMETRY)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE;
|
||||
else if (cfdata->mode == MODE_LOCKS)
|
||||
rem->apply = E_REMEMBER_APPLY_LOCKS;
|
||||
else if (cfdata->mode == MODE_GEOMETRY_LOCKS)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS;
|
||||
else if (cfdata->mode == MODE_ALL)
|
||||
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER |
|
||||
E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY |
|
||||
E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE |
|
||||
E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER |
|
||||
E_REMEMBER_APPLY_SKIP_TASKBAR | E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF;
|
||||
|
||||
rem->apply_first_only = 0;
|
||||
|
||||
|
||||
e_remember_use(rem);
|
||||
e_remember_update(bd);
|
||||
cfdata->applied = 1;
|
||||
e_config_save_queue();
|
||||
return 1; /* Apply was OK */
|
||||
}
|
||||
|
@ -467,33 +441,73 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
static int
|
||||
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
/* Actually take our cfdata settings and apply them in real life */
|
||||
E_Border *bd = cfdata->border;
|
||||
E_Remember *rem = bd->remember;
|
||||
|
||||
if (!((cfdata->remember.apply_pos) || (cfdata->remember.apply_size) ||
|
||||
(cfdata->remember.apply_locks) || (cfdata->remember.apply_layer) ||
|
||||
(cfdata->remember.apply_border) || (cfdata->remember.apply_sticky) ||
|
||||
(cfdata->remember.apply_desktop) || (cfdata->remember.apply_shade) ||
|
||||
(cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist) ||
|
||||
(cfdata->remember.apply_skip_pager) || (cfdata->remember.apply_skip_taskbar) ||
|
||||
(cfdata->remember.apply_run) || (cfdata->remember.apply_icon_pref) ||
|
||||
(cfdata->remember.set_focus_on_start) || (cfdata->remember.apply_fullscreen) ||
|
||||
(cfdata->remember.apply_desktop_file)))
|
||||
if (!rem)
|
||||
{
|
||||
cfdata->applied = 0;
|
||||
rem = e_remember_new();
|
||||
if (rem)
|
||||
{
|
||||
e_remember_unuse(rem);
|
||||
e_remember_del(rem);
|
||||
cfdata->border->remember = NULL;
|
||||
}
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
e_remember_use(rem);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rem->name) eina_stringshare_del(rem->name);
|
||||
if (rem->class) eina_stringshare_del(rem->class);
|
||||
if (rem->title) eina_stringshare_del(rem->title);
|
||||
if (rem->role) eina_stringshare_del(rem->role);
|
||||
if (rem->prop.command) eina_stringshare_del(rem->prop.command);
|
||||
if (rem->prop.desktop_file) eina_stringshare_del(rem->prop.desktop_file);
|
||||
rem->name = NULL;
|
||||
rem->class = NULL;
|
||||
rem->title = NULL;
|
||||
rem->role = NULL;
|
||||
rem->prop.command = NULL;
|
||||
rem->prop.desktop_file = NULL;
|
||||
}
|
||||
|
||||
rem->match = 0;
|
||||
rem->apply_first_only = cfdata->remember.apply_first_only;
|
||||
|
||||
if (cfdata->remember.match_name && cfdata->name && cfdata->name[0])
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_NAME;
|
||||
rem->name = eina_stringshare_add(cfdata->name);
|
||||
}
|
||||
if (cfdata->remember.match_class && cfdata->class && cfdata->class[0])
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_CLASS;
|
||||
rem->class = eina_stringshare_add(cfdata->class);
|
||||
}
|
||||
if (cfdata->remember.match_title && cfdata->title && cfdata->title[0])
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_TITLE;
|
||||
rem->title = eina_stringshare_add(cfdata->title);
|
||||
}
|
||||
if (cfdata->remember.match_role && cfdata->role && cfdata->role[0])
|
||||
{
|
||||
rem->match |= E_REMEMBER_MATCH_ROLE;
|
||||
rem->role = eina_stringshare_add(cfdata->role);
|
||||
}
|
||||
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_name) || (cfdata->remember.match_class) ||
|
||||
(cfdata->remember.match_title) || (cfdata->remember.match_role) ||
|
||||
(cfdata->remember.match_type) || (cfdata->remember.match_transient)))
|
||||
if (!rem->match)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
|
||||
|
@ -510,93 +524,79 @@ _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;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* TODO warn when match doesnt match the current window
|
||||
* (when using globs) */
|
||||
|
||||
if (!cfdata->warned)
|
||||
{
|
||||
if ((!cfdata->remember.apply_first_only) &&
|
||||
(_check_matches(cfdata, 0) > 1))
|
||||
(_check_matches(rem, 0) > 1))
|
||||
{
|
||||
E_Dialog *dia;
|
||||
|
||||
dia = e_dialog_new(cfd->con, "E", "_border_remember_error_no_remember_dialog");
|
||||
e_dialog_title_set(dia, _("No match properties set"));
|
||||
e_dialog_text_set
|
||||
(dia,
|
||||
_("You are trying to ask Enlightenment to remember to apply<br>"
|
||||
"properties (such as size, location, border style etc.) to<br>"
|
||||
"a window that <hilight>does not have unique properties</hilight>.<br>"
|
||||
"<br>"
|
||||
"This means it shares Name/Class, Transience, Role etc. properties<br>"
|
||||
"with more than 1 other window on the screen and remembering<br>"
|
||||
"properties for this window will apply to all other windows<br>"
|
||||
"that match these properties.<br>"
|
||||
"<br>"
|
||||
"You may wish to enable the <hilight>Match only one window</hilight> option if<br>"
|
||||
"you only intend one instance of this window to be modified, with<br>"
|
||||
"additional instances not being modified.<br>"
|
||||
"<br>"
|
||||
"This is just a warning in case you did not intend this to happen.<br>"
|
||||
"If you did, simply press <hilight>Apply</hilight> or <hilight>OK</hilight> buttons<br>"
|
||||
"and your settings will be accepted. Press <hilight>Cancel</hilight> if you<br>"
|
||||
"are not sure and nothing will be affected.")
|
||||
);
|
||||
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_dialog_show(dia);
|
||||
_warning_dialog_show(cfd->con);
|
||||
cfdata->warned = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (cfdata->command && cfdata->command[0])
|
||||
rem->prop.command = eina_stringshare_add(cfdata->command);
|
||||
if (cfdata->remember.apply_desktop_file && cfdata->desktop)
|
||||
rem->prop.desktop_file = eina_stringshare_add(cfdata->desktop);
|
||||
|
||||
if (!rem)
|
||||
rem->apply = 0;
|
||||
if (cfdata->remember.apply_pos)
|
||||
rem->apply |= E_REMEMBER_APPLY_POS;
|
||||
if (cfdata->remember.apply_size)
|
||||
rem->apply |= E_REMEMBER_APPLY_SIZE;
|
||||
if (cfdata->remember.apply_layer)
|
||||
rem->apply |= E_REMEMBER_APPLY_LAYER;
|
||||
if (cfdata->remember.apply_locks)
|
||||
rem->apply |= E_REMEMBER_APPLY_LOCKS;
|
||||
if (cfdata->remember.apply_border)
|
||||
rem->apply |= E_REMEMBER_APPLY_BORDER;
|
||||
if (cfdata->remember.apply_sticky)
|
||||
rem->apply |= E_REMEMBER_APPLY_STICKY;
|
||||
if (cfdata->remember.apply_desktop)
|
||||
rem->apply |= E_REMEMBER_APPLY_DESKTOP;
|
||||
if (cfdata->remember.apply_shade)
|
||||
rem->apply |= E_REMEMBER_APPLY_SHADE;
|
||||
if (cfdata->remember.apply_fullscreen)
|
||||
rem->apply |= E_REMEMBER_APPLY_FULLSCREEN;
|
||||
if (cfdata->remember.apply_zone)
|
||||
rem->apply |= E_REMEMBER_APPLY_ZONE;
|
||||
if (cfdata->remember.apply_skip_winlist)
|
||||
rem->apply |= E_REMEMBER_APPLY_SKIP_WINLIST;
|
||||
if (cfdata->remember.apply_skip_pager)
|
||||
rem->apply |= E_REMEMBER_APPLY_SKIP_PAGER;
|
||||
if (cfdata->remember.apply_skip_taskbar)
|
||||
rem->apply |= E_REMEMBER_APPLY_SKIP_TASKBAR;
|
||||
if (cfdata->remember.apply_run)
|
||||
rem->apply |= E_REMEMBER_APPLY_RUN;
|
||||
if (cfdata->remember.apply_icon_pref)
|
||||
rem->apply |= E_REMEMBER_APPLY_ICON_PREF;
|
||||
if (cfdata->remember.set_focus_on_start)
|
||||
rem->apply |= E_REMEMBER_SET_FOCUS_ON_START;
|
||||
|
||||
if (!rem->apply && !rem->prop.desktop_file)
|
||||
{
|
||||
rem = e_remember_new();
|
||||
if (rem)
|
||||
e_remember_use(rem);
|
||||
e_remember_unuse(rem);
|
||||
e_remember_del(rem);
|
||||
if (cfdata->border->remember)
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (rem)
|
||||
{
|
||||
rem->apply = 0;
|
||||
rem->match = 0;
|
||||
rem->apply_first_only = cfdata->remember.apply_first_only;
|
||||
if (cfdata->remember.match_name) rem->match |= E_REMEMBER_MATCH_NAME;
|
||||
if (cfdata->remember.match_class) rem->match |= E_REMEMBER_MATCH_CLASS;
|
||||
if (cfdata->remember.match_title) rem->match |= E_REMEMBER_MATCH_TITLE;
|
||||
if (cfdata->remember.match_role) rem->match |= E_REMEMBER_MATCH_ROLE;
|
||||
if (cfdata->remember.match_type) rem->match |= E_REMEMBER_MATCH_TYPE;
|
||||
if (cfdata->remember.match_transient) rem->match |= E_REMEMBER_MATCH_TRANSIENT;
|
||||
if (cfdata->remember.apply_pos) rem->apply |= E_REMEMBER_APPLY_POS;
|
||||
if (cfdata->remember.apply_size) rem->apply |= E_REMEMBER_APPLY_SIZE;
|
||||
if (cfdata->remember.apply_layer) rem->apply |= E_REMEMBER_APPLY_LAYER;
|
||||
if (cfdata->remember.apply_locks) rem->apply |= E_REMEMBER_APPLY_LOCKS;
|
||||
if (cfdata->remember.apply_border) rem->apply |= E_REMEMBER_APPLY_BORDER;
|
||||
if (cfdata->remember.apply_sticky) rem->apply |= E_REMEMBER_APPLY_STICKY;
|
||||
if (cfdata->remember.apply_desktop) rem->apply |= E_REMEMBER_APPLY_DESKTOP;
|
||||
if (cfdata->remember.apply_shade) rem->apply |= E_REMEMBER_APPLY_SHADE;
|
||||
if (cfdata->remember.apply_fullscreen) rem->apply |= E_REMEMBER_APPLY_FULLSCREEN;
|
||||
if (cfdata->remember.apply_zone) rem->apply |= E_REMEMBER_APPLY_ZONE;
|
||||
if (cfdata->remember.apply_skip_winlist) rem->apply |= E_REMEMBER_APPLY_SKIP_WINLIST;
|
||||
if (cfdata->remember.apply_skip_pager) rem->apply |= E_REMEMBER_APPLY_SKIP_PAGER;
|
||||
if (cfdata->remember.apply_skip_taskbar) rem->apply |= E_REMEMBER_APPLY_SKIP_TASKBAR;
|
||||
if (cfdata->remember.apply_run) rem->apply |= E_REMEMBER_APPLY_RUN;
|
||||
if (cfdata->remember.apply_icon_pref) rem->apply |= E_REMEMBER_APPLY_ICON_PREF;
|
||||
if (cfdata->remember.set_focus_on_start) rem->apply |= E_REMEMBER_SET_FOCUS_ON_START;
|
||||
|
||||
if (bd->client.icccm.transient_for != 0)
|
||||
rem->transient = 1;
|
||||
else
|
||||
rem->transient = 0;
|
||||
|
||||
_remember_update(rem, cfdata);
|
||||
_check_matches(cfdata, 1);
|
||||
rem->keep_settings = 0;
|
||||
cfdata->border->remember = rem;
|
||||
e_remember_update(cfdata->border);
|
||||
rem->keep_settings = cfdata->remember.keep_settings;
|
||||
}
|
||||
_check_matches(rem, 1);
|
||||
rem->keep_settings = 0;
|
||||
cfdata->border->remember = rem;
|
||||
e_remember_update(cfdata->border);
|
||||
rem->keep_settings = cfdata->remember.keep_settings;
|
||||
|
||||
cfdata->applied = 1;
|
||||
e_config_save_queue();
|
||||
return 1; /* Apply was OK */
|
||||
}
|
||||
|
@ -635,7 +635,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
of = e_widget_framelist_add(evas, _("Remember using"), 0);
|
||||
if (cfdata->name)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window name"), &(cfdata->remember.match_name));
|
||||
ob = e_widget_check_add(evas, _("Window name"),
|
||||
&(cfdata->remember.match_name));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_entry_add(evas, &cfdata->name, NULL, NULL, NULL);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
@ -646,7 +647,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
}
|
||||
if (cfdata->class)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window class"), &(cfdata->remember.match_class));
|
||||
ob = e_widget_check_add(evas, _("Window class"),
|
||||
&(cfdata->remember.match_class));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_entry_add(evas, &cfdata->class, NULL, NULL, NULL);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
@ -657,7 +659,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
}
|
||||
if (cfdata->title)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Title"), &(cfdata->remember.match_title));
|
||||
ob = e_widget_check_add(evas, _("Title"),
|
||||
&(cfdata->remember.match_title));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_entry_add(evas, &cfdata->title, NULL, NULL, NULL);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
@ -668,7 +671,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
}
|
||||
if (cfdata->role)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window Role"), &(cfdata->remember.match_role));
|
||||
ob = e_widget_check_add(evas, _("Window Role"),
|
||||
&(cfdata->remember.match_role));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_entry_add(evas, &cfdata->role, NULL, NULL, NULL);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
@ -679,7 +683,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
}
|
||||
if (cfdata->border->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Window type"), &(cfdata->remember.match_type));
|
||||
ob = e_widget_check_add(evas, _("Window type"),
|
||||
&(cfdata->remember.match_type));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
}
|
||||
else
|
||||
|
@ -688,58 +693,78 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
}
|
||||
ob = e_widget_label_add(evas, _("wildcard matches are allowed"));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_check_add(evas, _("Transience"), &(cfdata->remember.match_transient));
|
||||
ob = e_widget_check_add(evas, _("Transience"),
|
||||
&(cfdata->remember.match_transient));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_table_object_append(o, of, 0, 0, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_frametable_add(evas, _("Properties to remember"), 0);
|
||||
ob = e_widget_check_add(evas, _("Position"), &(cfdata->remember.apply_pos));
|
||||
ob = e_widget_check_add(evas, _("Position"),
|
||||
&(cfdata->remember.apply_pos));
|
||||
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Size"), &(cfdata->remember.apply_size));
|
||||
ob = e_widget_check_add(evas, _("Size"),
|
||||
&(cfdata->remember.apply_size));
|
||||
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Stacking"), &(cfdata->remember.apply_layer));
|
||||
ob = e_widget_check_add(evas, _("Stacking"),
|
||||
&(cfdata->remember.apply_layer));
|
||||
e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Locks"), &(cfdata->remember.apply_locks));
|
||||
ob = e_widget_check_add(evas, _("Locks"),
|
||||
&(cfdata->remember.apply_locks));
|
||||
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Border style"), &(cfdata->remember.apply_border));
|
||||
ob = e_widget_check_add(evas, _("Border style"),
|
||||
&(cfdata->remember.apply_border));
|
||||
e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Icon Preference"), &(cfdata->remember.apply_icon_pref));
|
||||
ob = e_widget_check_add(evas, _("Icon Preference"),
|
||||
&(cfdata->remember.apply_icon_pref));
|
||||
e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Stickiness"), &(cfdata->remember.apply_sticky));
|
||||
ob = e_widget_check_add(evas, _("Stickiness"),
|
||||
&(cfdata->remember.apply_sticky));
|
||||
e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Virtual Desktop"), &(cfdata->remember.apply_desktop));
|
||||
ob = e_widget_check_add(evas, _("Virtual Desktop"),
|
||||
&(cfdata->remember.apply_desktop));
|
||||
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Shaded state"), &(cfdata->remember.apply_shade));
|
||||
ob = e_widget_check_add(evas, _("Shaded state"),
|
||||
&(cfdata->remember.apply_shade));
|
||||
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Fullscreen state"), &(cfdata->remember.apply_fullscreen));
|
||||
ob = e_widget_check_add(evas, _("Fullscreen state"),
|
||||
&(cfdata->remember.apply_fullscreen));
|
||||
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Current Screen"), &(cfdata->remember.apply_zone));
|
||||
ob = e_widget_check_add(evas, _("Current Screen"),
|
||||
&(cfdata->remember.apply_zone));
|
||||
e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Skip Window List"), &(cfdata->remember.apply_skip_winlist));
|
||||
ob = e_widget_check_add(evas, _("Skip Window List"),
|
||||
&(cfdata->remember.apply_skip_winlist));
|
||||
e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Skip Pager"), &(cfdata->remember.apply_skip_pager));
|
||||
ob = e_widget_check_add(evas, _("Skip Pager"),
|
||||
&(cfdata->remember.apply_skip_pager));
|
||||
e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Skip Taskbar"), &(cfdata->remember.apply_skip_taskbar));
|
||||
ob = e_widget_check_add(evas, _("Skip Taskbar"),
|
||||
&(cfdata->remember.apply_skip_taskbar));
|
||||
e_widget_frametable_object_append(of, ob, 1, 6, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_check_add(evas, _("Application file or name (.desktop)"), &(cfdata->remember.apply_desktop_file));
|
||||
ob = e_widget_check_add(evas, _("Application file or name (.desktop)"),
|
||||
&(cfdata->remember.apply_desktop_file));
|
||||
e_widget_frametable_object_append(of, ob, 0, 7, 2, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_entry_add(evas, &cfdata->desktop, NULL, NULL, NULL);
|
||||
e_widget_frametable_object_append(of, ob, 0, 8, 2, 1, 1, 1, 1, 1);
|
||||
e_widget_table_object_append(o, of, 1, 0, 1, 2, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_frametable_add(evas, _("Options"), 0);
|
||||
ob = e_widget_check_add(evas, _("Match only one window"), &(cfdata->remember.apply_first_only));
|
||||
ob = e_widget_check_add(evas, _("Match only one window"),
|
||||
&(cfdata->remember.apply_first_only));
|
||||
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Always focus on start"), &(cfdata->remember.set_focus_on_start));
|
||||
ob = e_widget_check_add(evas, _("Always focus on start"),
|
||||
&(cfdata->remember.set_focus_on_start));
|
||||
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Keep current properties"), &(cfdata->remember.keep_settings));
|
||||
ob = e_widget_check_add(evas, _("Keep current properties"),
|
||||
&(cfdata->remember.keep_settings));
|
||||
e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
if (cfdata->command)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Start this program on login"), &(cfdata->remember.apply_run));
|
||||
ob = e_widget_check_add(evas, _("Start this program on login"),
|
||||
&(cfdata->remember.apply_run));
|
||||
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
|
||||
}
|
||||
e_widget_table_object_append(o, of, 0, 1, 1, 1, 1, 1, 1, 1);
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
/* local subsystem functions */
|
||||
static void _e_remember_free(E_Remember *rem);
|
||||
static int _e_remember_sort_list(const void * d1, const void * d2);
|
||||
static E_Remember *_e_remember_find(E_Border *bd, int check_usable);
|
||||
static void _e_remember_cb_hook_pre_post_fetch(void *data, void *bd);
|
||||
static void _e_remember_cb_hook_eval_post_new_border(void *data, void *bd);
|
||||
|
@ -24,7 +23,6 @@ e_remember_init(E_Startup_Mode mode)
|
|||
{
|
||||
Eina_List *l = NULL;
|
||||
E_Remember *rem;
|
||||
int not_updated = 0;
|
||||
E_Border_Hook *h;
|
||||
|
||||
if (mode == E_STARTUP_START)
|
||||
|
@ -43,31 +41,6 @@ e_remember_init(E_Startup_Mode mode)
|
|||
_e_remember_cb_hook_eval_post_new_border, NULL);
|
||||
if (h) hooks = eina_list_append(hooks, h);
|
||||
|
||||
#if 1
|
||||
EINA_LIST_FOREACH(e_config->remembers, l, rem)
|
||||
{
|
||||
/* Code to bring up old configs to scratch. Can be removed
|
||||
* after X amount of time, where X is a figure that will be
|
||||
* decided by whoever remembers to take this out. */
|
||||
if (!rem->max_score)
|
||||
{
|
||||
int max_count = 0;
|
||||
if (rem->match & E_REMEMBER_MATCH_NAME) max_count += 2;
|
||||
if (rem->match & E_REMEMBER_MATCH_CLASS) max_count += 2;
|
||||
if (rem->match & E_REMEMBER_MATCH_TITLE) max_count += 2;
|
||||
if (rem->match & E_REMEMBER_MATCH_ROLE) max_count += 2;
|
||||
if (rem->match & E_REMEMBER_MATCH_TYPE) max_count += 2;
|
||||
if (rem->match & E_REMEMBER_MATCH_TRANSIENT) max_count +=2;
|
||||
if (rem->apply_first_only) max_count++;
|
||||
rem->max_score = max_count;
|
||||
not_updated = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (not_updated)
|
||||
e_config->remembers = eina_list_sort(e_config->remembers, -1,
|
||||
_e_remember_sort_list);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -115,20 +88,17 @@ e_remember_unuse(E_Remember *rem)
|
|||
EAPI void
|
||||
e_remember_del(E_Remember *rem)
|
||||
{
|
||||
if (rem->used_count != 0)
|
||||
{
|
||||
Eina_List *l = NULL;
|
||||
E_Border *bd;
|
||||
Eina_List *l = NULL;
|
||||
E_Border *bd;
|
||||
|
||||
EINA_LIST_FOREACH(e_border_client_list(), l, bd)
|
||||
{
|
||||
if (bd->remember == rem)
|
||||
{
|
||||
bd->remember = NULL;
|
||||
e_remember_unuse(rem);
|
||||
}
|
||||
}
|
||||
EINA_LIST_FOREACH(e_border_client_list(), l, bd)
|
||||
{
|
||||
if (bd->remember != rem) continue;
|
||||
|
||||
bd->remember = NULL;
|
||||
e_remember_unuse(rem);
|
||||
}
|
||||
|
||||
_e_remember_free(rem);
|
||||
}
|
||||
|
||||
|
@ -208,6 +178,11 @@ e_remember_default_match_set(E_Remember *rem, E_Border *bd)
|
|||
if (!role || role[0] == 0) role = NULL;
|
||||
|
||||
int match = E_REMEMBER_MATCH_TRANSIENT;
|
||||
if (bd->client.icccm.transient_for != 0)
|
||||
rem->transient = 1;
|
||||
else
|
||||
rem->transient = 0;
|
||||
|
||||
if (name && clasz)
|
||||
{
|
||||
match |= E_REMEMBER_MATCH_NAME | E_REMEMBER_MATCH_CLASS;
|
||||
|
@ -224,11 +199,11 @@ e_remember_default_match_set(E_Remember *rem, E_Border *bd)
|
|||
match |= E_REMEMBER_MATCH_ROLE;
|
||||
rem->role = eina_stringshare_add(role);
|
||||
}
|
||||
|
||||
if (bd->client.icccm.transient_for != 0)
|
||||
rem->transient = 1;
|
||||
else
|
||||
rem->transient = 0;
|
||||
if (bd->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
|
||||
{
|
||||
match |= E_REMEMBER_MATCH_TYPE;
|
||||
rem->type = bd->client.netwm.type;
|
||||
}
|
||||
|
||||
rem->match = match;
|
||||
|
||||
|
@ -245,81 +220,90 @@ e_remember_update(E_Border *bd)
|
|||
if (bd->remember->keep_settings) return;
|
||||
|
||||
rem = bd->remember;
|
||||
|
||||
if (!(rem->name || rem->class ||
|
||||
rem->title || rem->role))
|
||||
{
|
||||
e_remember_del(rem);
|
||||
return;
|
||||
}
|
||||
|
||||
e_remember_match_update(rem);
|
||||
/* e_remember_match_update(rem); */
|
||||
|
||||
rem->type = bd->client.netwm.type;
|
||||
|
||||
if (bd->fullscreen)
|
||||
if (rem->apply & E_REMEMBER_APPLY_POS ||
|
||||
rem->apply & E_REMEMBER_APPLY_SIZE)
|
||||
{
|
||||
rem->prop.fullscreen = bd->fullscreen;
|
||||
rem->prop.pos_x = bd->saved.x;
|
||||
rem->prop.pos_y = bd->saved.y;
|
||||
rem->prop.pos_w = bd->saved.w;
|
||||
rem->prop.pos_h = bd->saved.h;
|
||||
rem->prop.layer = bd->saved.layer;
|
||||
if (bd->fullscreen)
|
||||
{
|
||||
rem->prop.pos_x = bd->saved.x;
|
||||
rem->prop.pos_y = bd->saved.y;
|
||||
rem->prop.pos_w = bd->saved.w;
|
||||
rem->prop.pos_h = bd->saved.h;
|
||||
}
|
||||
else
|
||||
{
|
||||
rem->prop.pos_x = bd->x - bd->zone->x;
|
||||
rem->prop.pos_y = bd->y - bd->zone->y;
|
||||
rem->prop.res_x = bd->zone->w;
|
||||
rem->prop.res_y = bd->zone->h;
|
||||
rem->prop.pos_w = bd->client.w;
|
||||
rem->prop.pos_h = bd->client.h;
|
||||
rem->prop.w = bd->client.w;
|
||||
rem->prop.h = bd->client.h;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (rem->apply & E_REMEMBER_APPLY_LAYER)
|
||||
{
|
||||
rem->prop.pos_x = bd->x - bd->zone->x;
|
||||
rem->prop.pos_y = bd->y - bd->zone->y;
|
||||
rem->prop.res_x = bd->zone->w;
|
||||
rem->prop.res_y = bd->zone->h;
|
||||
rem->prop.pos_w = bd->client.w;
|
||||
rem->prop.pos_h = bd->client.h;
|
||||
rem->prop.w = bd->client.w;
|
||||
rem->prop.h = bd->client.h;
|
||||
rem->prop.layer = bd->layer;
|
||||
rem->prop.fullscreen = bd->fullscreen;
|
||||
if (bd->fullscreen)
|
||||
rem->prop.layer = bd->saved.layer;
|
||||
else
|
||||
rem->prop.layer = bd->layer;
|
||||
}
|
||||
if (rem->apply & E_REMEMBER_APPLY_LOCKS)
|
||||
{
|
||||
rem->prop.lock_user_location = bd->lock_user_location;
|
||||
rem->prop.lock_client_location = bd->lock_client_location;
|
||||
rem->prop.lock_user_size = bd->lock_user_size;
|
||||
rem->prop.lock_client_size = bd->lock_client_size;
|
||||
rem->prop.lock_user_stacking = bd->lock_user_stacking;
|
||||
rem->prop.lock_client_stacking = bd->lock_client_stacking;
|
||||
rem->prop.lock_user_iconify = bd->lock_user_iconify;
|
||||
rem->prop.lock_client_iconify = bd->lock_client_iconify;
|
||||
rem->prop.lock_user_desk = bd->lock_user_desk;
|
||||
rem->prop.lock_client_desk = bd->lock_client_desk;
|
||||
rem->prop.lock_user_sticky = bd->lock_user_sticky;
|
||||
rem->prop.lock_client_sticky = bd->lock_client_sticky;
|
||||
rem->prop.lock_user_shade = bd->lock_user_shade;
|
||||
rem->prop.lock_client_shade = bd->lock_client_shade;
|
||||
rem->prop.lock_user_maximize = bd->lock_user_maximize;
|
||||
rem->prop.lock_client_maximize = bd->lock_client_maximize;
|
||||
rem->prop.lock_user_fullscreen = bd->lock_user_fullscreen;
|
||||
rem->prop.lock_client_fullscreen = bd->lock_client_fullscreen;
|
||||
rem->prop.lock_border = bd->lock_border;
|
||||
rem->prop.lock_close = bd->lock_close;
|
||||
rem->prop.lock_focus_in = bd->lock_focus_in;
|
||||
rem->prop.lock_focus_out = bd->lock_focus_out;
|
||||
rem->prop.lock_life = bd->lock_life;
|
||||
}
|
||||
|
||||
rem->prop.lock_user_location = bd->lock_user_location;
|
||||
rem->prop.lock_client_location = bd->lock_client_location;
|
||||
rem->prop.lock_user_size = bd->lock_user_size;
|
||||
rem->prop.lock_client_size = bd->lock_client_size;
|
||||
rem->prop.lock_user_stacking = bd->lock_user_stacking;
|
||||
rem->prop.lock_client_stacking = bd->lock_client_stacking;
|
||||
rem->prop.lock_user_iconify = bd->lock_user_iconify;
|
||||
rem->prop.lock_client_iconify = bd->lock_client_iconify;
|
||||
rem->prop.lock_user_desk = bd->lock_user_desk;
|
||||
rem->prop.lock_client_desk = bd->lock_client_desk;
|
||||
rem->prop.lock_user_sticky = bd->lock_user_sticky;
|
||||
rem->prop.lock_client_sticky = bd->lock_client_sticky;
|
||||
rem->prop.lock_user_shade = bd->lock_user_shade;
|
||||
rem->prop.lock_client_shade = bd->lock_client_shade;
|
||||
rem->prop.lock_user_maximize = bd->lock_user_maximize;
|
||||
rem->prop.lock_client_maximize = bd->lock_client_maximize;
|
||||
rem->prop.lock_user_fullscreen = bd->lock_user_fullscreen;
|
||||
rem->prop.lock_client_fullscreen = bd->lock_client_fullscreen;
|
||||
rem->prop.lock_border = bd->lock_border;
|
||||
rem->prop.lock_close = bd->lock_close;
|
||||
rem->prop.lock_focus_in = bd->lock_focus_in;
|
||||
rem->prop.lock_focus_out = bd->lock_focus_out;
|
||||
rem->prop.lock_life = bd->lock_life;
|
||||
|
||||
rem->prop.sticky = bd->sticky;
|
||||
|
||||
if (bd->shaded)
|
||||
rem->prop.shaded = (100 + bd->shade.dir);
|
||||
else
|
||||
rem->prop.shaded = (50 + bd->shade.dir);
|
||||
|
||||
rem->prop.skip_winlist = bd->user_skip_winlist;
|
||||
rem->prop.skip_pager = bd->client.netwm.state.skip_pager;
|
||||
rem->prop.skip_taskbar = bd->client.netwm.state.skip_taskbar;
|
||||
rem->prop.icon_preference = bd->icon_preference;
|
||||
|
||||
e_desk_xy_get(bd->desk, &rem->prop.desk_x, &rem->prop.desk_y);
|
||||
|
||||
rem->prop.zone = bd->zone->num;
|
||||
rem->prop.head = bd->zone->container->manager->num;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SHADE)
|
||||
{
|
||||
if (bd->shaded)
|
||||
rem->prop.shaded = (100 + bd->shade.dir);
|
||||
else
|
||||
rem->prop.shaded = (50 + bd->shade.dir);
|
||||
}
|
||||
if (rem->apply & E_REMEMBER_APPLY_ZONE)
|
||||
{
|
||||
rem->prop.zone = bd->zone->num;
|
||||
rem->prop.head = bd->zone->container->manager->num;
|
||||
}
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST)
|
||||
rem->prop.skip_winlist = bd->user_skip_winlist;
|
||||
if (rem->apply & E_REMEMBER_APPLY_STICKY)
|
||||
rem->prop.sticky = bd->sticky;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_PAGER)
|
||||
rem->prop.skip_pager = bd->client.netwm.state.skip_pager;
|
||||
if (rem->apply & E_REMEMBER_APPLY_SKIP_TASKBAR)
|
||||
rem->prop.skip_taskbar = bd->client.netwm.state.skip_taskbar;
|
||||
if (rem->apply & E_REMEMBER_APPLY_ICON_PREF)
|
||||
rem->prop.icon_preference = bd->icon_preference;
|
||||
if (rem->apply & E_REMEMBER_APPLY_DESKTOP)
|
||||
e_desk_xy_get(bd->desk, &rem->prop.desk_x, &rem->prop.desk_y);
|
||||
if (rem->apply & E_REMEMBER_APPLY_FULLSCREEN)
|
||||
rem->prop.fullscreen = bd->fullscreen;
|
||||
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
@ -435,22 +419,10 @@ _e_remember_free(E_Remember *rem)
|
|||
if (rem->role) eina_stringshare_del(rem->role);
|
||||
if (rem->prop.border) eina_stringshare_del(rem->prop.border);
|
||||
if (rem->prop.command) eina_stringshare_del(rem->prop.command);
|
||||
if (rem->prop.desktop_file) eina_stringshare_del(rem->prop.desktop_file);
|
||||
free(rem);
|
||||
}
|
||||
|
||||
static int
|
||||
_e_remember_sort_list(const void * d1, const void * d2)
|
||||
{
|
||||
const E_Remember *r1, *r2;
|
||||
|
||||
r1 = d1;
|
||||
r2 = d2;
|
||||
if (r1->max_score >= r2->max_score)
|
||||
return -1;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_remember_cb_hook_pre_post_fetch(void *data, void *border)
|
||||
{
|
||||
|
|
|
@ -166,7 +166,7 @@ _fill_remembers(E_Config_Dialog_Data *cfdata)
|
|||
if ((rem->name) && (!strcmp(rem->name, "E"))) continue;
|
||||
/* Filter out the module config remembers */
|
||||
if ((rem->class) && (rem->class[0] == '_')) continue;
|
||||
|
||||
|
||||
if (rem->name)
|
||||
e_widget_ilist_append(cfdata->list, NULL, rem->name, NULL, rem, NULL);
|
||||
else if (rem->class)
|
||||
|
@ -187,8 +187,8 @@ _fill_remembers(E_Config_Dialog_Data *cfdata)
|
|||
if (!(rem = l->data)) continue;
|
||||
|
||||
/* Garuntee we add only E's internal remembers */
|
||||
if ((rem->name) && (strcmp(rem->name, "E"))) continue;
|
||||
|
||||
if ((!rem->name) || (strcmp(rem->name, "E"))) continue;
|
||||
|
||||
e_widget_ilist_append(cfdata->list, NULL, rem->class, NULL, rem, NULL);
|
||||
}
|
||||
|
||||
|
@ -202,9 +202,9 @@ _fill_remembers(E_Config_Dialog_Data *cfdata)
|
|||
if (!(rem = l->data)) continue;
|
||||
|
||||
/* Filter out E's own remember */
|
||||
if ((rem->name) && (!strcmp(rem->name, "E"))) continue;
|
||||
if ((!rem->name) || (!strcmp(rem->name, "E"))) continue;
|
||||
/* Filter out everything except the module config remembers */
|
||||
if ((rem->class) && (rem->class[0] != '_')) continue;
|
||||
if ((!rem->class) || (rem->class[0] != '_')) continue;
|
||||
|
||||
e_widget_ilist_append(cfdata->list, NULL, rem->name, NULL, rem, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue