set border remember match entrys only on creation

added text entries for advanced border remember dialog(not editable for now)


SVN revision: 42428
This commit is contained in:
Hannes Janetzek 2009-09-12 02:44:41 +00:00
parent 056218932e
commit 97a3564c2d
2 changed files with 253 additions and 184 deletions

View File

@ -24,6 +24,11 @@ struct _E_Config_Dialog_Data
int mode;
int warned;
/*- ADVANCED -*/
char *name;
char *class;
char *title;
char *role;
char *command;
struct {
int match_name;
int match_class;
@ -83,34 +88,12 @@ e_int_border_remember(E_Border *bd)
static void
_fill_data(E_Config_Dialog_Data *cfdata)
{
if (cfdata->border->remember)
{
if (cfdata->border->remember->apply_first_only) cfdata->remember.apply_first_only = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_NAME) cfdata->remember.match_name = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_CLASS) cfdata->remember.match_class = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_TITLE) cfdata->remember.match_title = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_ROLE) cfdata->remember.match_role = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_TYPE) cfdata->remember.match_type = 1;
if (cfdata->border->remember->match & E_REMEMBER_MATCH_TRANSIENT) cfdata->remember.match_transient = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_POS) cfdata->remember.apply_pos = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SIZE) cfdata->remember.apply_size = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_LAYER) cfdata->remember.apply_layer = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_LOCKS) cfdata->remember.apply_locks = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_BORDER) cfdata->remember.apply_border = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_STICKY) cfdata->remember.apply_sticky = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_DESKTOP) cfdata->remember.apply_desktop = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SHADE) cfdata->remember.apply_shade = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_FULLSCREEN) cfdata->remember.apply_fullscreen = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ZONE) cfdata->remember.apply_zone = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_WINLIST) cfdata->remember.apply_skip_winlist = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_PAGER) cfdata->remember.apply_skip_pager = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_TASKBAR) cfdata->remember.apply_skip_taskbar = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_RUN) cfdata->remember.apply_run = 1;
if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ICON_PREF) cfdata->remember.apply_icon_pref = 1;
if (cfdata->border->remember->apply & E_REMEMBER_SET_FOCUS_ON_START) cfdata->remember.set_focus_on_start = 1;
E_Border *bd;
E_Remember *rem;
}
if (!cfdata->border->remember) cfdata->mode = MODE_NOTHING;
bd = cfdata->border;
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) &&
@ -127,8 +110,91 @@ _fill_data(E_Config_Dialog_Data *cfdata)
else if ((cfdata->remember.apply_locks))
cfdata->mode = MODE_LOCKS;
else cfdata->mode = MODE_NOTHING;
if (bd->client.icccm.name && bd->client.icccm.name[0])
cfdata->name = strdup(bd->client.icccm.name);
if (bd->client.icccm.class && bd->client.icccm.class[0])
cfdata->class = strdup(bd->client.icccm.class);
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);
if (bd->client.icccm.window_role && bd->client.icccm.window_role[0])
cfdata->role = strdup(bd->client.icccm.window_role);
if ((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 (i > 0)
{
buf[k] = ' ';
k++;
}
for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
{
if (k >= (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] = 0;
done:
cfdata->command = strdup(buf);
}
rem = bd->remember;
if (rem)
{
if (rem->apply_first_only) cfdata->remember.apply_first_only = 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;
}
}
static void *
_create_data(E_Config_Dialog *cfd)
{
@ -148,7 +214,13 @@ static void
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
/* Free the cfdata */
cfdata->border->border_remember_dialog = NULL;
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->border)
cfdata->border->border_remember_dialog = NULL;
free(cfdata);
}
@ -205,17 +277,41 @@ _check_matches(E_Border *bd, int matchflags)
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);
rem->name = NULL;
rem->class = NULL;
rem->title = NULL;
rem->role = NULL;
rem->prop.command = 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);
}
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;
if (cfdata->mode == MODE_NOTHING)
{
if (cfdata->border->remember)
{
E_Remember *rem;
rem = cfdata->border->remember;
cfdata->border->remember = NULL;
e_remember_unuse(rem);
@ -264,33 +360,41 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
return 0;
}
}
if (!cfdata->border->remember)
rem = cfdata->border->remember;
if (!rem)
{
cfdata->border->remember = e_remember_new();
if (cfdata->border->remember)
e_remember_use(cfdata->border->remember);
rem = e_remember_new();
if (rem)
e_remember_use(rem);
}
if (cfdata->border->remember)
if (rem)
{
cfdata->border->remember->match = e_remember_default_match(cfdata->border);
rem->match = e_remember_default_match(cfdata->border);
if (cfdata->mode == MODE_GEOMETRY)
cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE;
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE;
else if (cfdata->mode == MODE_LOCKS)
cfdata->border->remember->apply = E_REMEMBER_APPLY_LOCKS;
rem->apply = E_REMEMBER_APPLY_LOCKS;
else if (cfdata->mode == MODE_GEOMETRY_LOCKS)
cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS;
rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS;
else if (cfdata->mode == MODE_ALL)
cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER |
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;
cfdata->border->remember->apply_first_only = 0;
e_remember_update(cfdata->border->remember, cfdata->border);
rem->apply_first_only = 0;
_remember_update(rem, cfdata);
e_remember_update(rem, cfdata->border);
}
cfdata->border->remember = rem;
e_config_save_queue();
return 1; /* Apply was OK */
}
@ -299,6 +403,7 @@ 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_Remember *rem;
if (!((cfdata->remember.apply_pos) || (cfdata->remember.apply_size) ||
(cfdata->remember.apply_locks) || (cfdata->remember.apply_layer) ||
@ -387,44 +492,54 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
return 0;
}
}
rem = cfdata->border->remember;
if (!cfdata->border->remember)
if (!rem)
{
cfdata->border->remember = e_remember_new();
if (cfdata->border->remember)
e_remember_use(cfdata->border->remember);
rem = e_remember_new();
if (rem)
e_remember_use(rem);
}
if (cfdata->border->remember)
if (rem)
{
cfdata->border->remember->apply = 0;
cfdata->border->remember->match = 0;
if (cfdata->remember.match_name) cfdata->border->remember->match |= E_REMEMBER_MATCH_NAME;
if (cfdata->remember.match_class) cfdata->border->remember->match |= E_REMEMBER_MATCH_CLASS;
if (cfdata->remember.match_title) cfdata->border->remember->match |= E_REMEMBER_MATCH_TITLE;
if (cfdata->remember.match_role) cfdata->border->remember->match |= E_REMEMBER_MATCH_ROLE;
if (cfdata->remember.match_type) cfdata->border->remember->match |= E_REMEMBER_MATCH_TYPE;
if (cfdata->remember.match_transient) cfdata->border->remember->match |= E_REMEMBER_MATCH_TRANSIENT;
if (cfdata->remember.apply_pos) cfdata->border->remember->apply |= E_REMEMBER_APPLY_POS;
if (cfdata->remember.apply_size) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SIZE;
if (cfdata->remember.apply_layer) cfdata->border->remember->apply |= E_REMEMBER_APPLY_LAYER;
if (cfdata->remember.apply_locks) cfdata->border->remember->apply |= E_REMEMBER_APPLY_LOCKS;
if (cfdata->remember.apply_border) cfdata->border->remember->apply |= E_REMEMBER_APPLY_BORDER;
if (cfdata->remember.apply_sticky) cfdata->border->remember->apply |= E_REMEMBER_APPLY_STICKY;
if (cfdata->remember.apply_desktop) cfdata->border->remember->apply |= E_REMEMBER_APPLY_DESKTOP;
if (cfdata->remember.apply_shade) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SHADE;
if (cfdata->remember.apply_fullscreen) cfdata->border->remember->apply |= E_REMEMBER_APPLY_FULLSCREEN;
if (cfdata->remember.apply_zone) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ZONE;
if (cfdata->remember.apply_skip_winlist) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_WINLIST;
if (cfdata->remember.apply_skip_pager) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_PAGER;
if (cfdata->remember.apply_skip_taskbar) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_TASKBAR;
if (cfdata->remember.apply_run) cfdata->border->remember->apply |= E_REMEMBER_APPLY_RUN;
if (cfdata->remember.apply_icon_pref) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ICON_PREF;
if (cfdata->remember.set_focus_on_start) cfdata->border->remember->apply |= E_REMEMBER_SET_FOCUS_ON_START;
rem->apply = 0;
rem->match = 0;
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;
cfdata->border->remember->apply_first_only = cfdata->remember.apply_first_only;
e_remember_update(cfdata->border->remember, cfdata->border);
rem->apply_first_only = cfdata->remember.apply_first_only;
_remember_update(rem, cfdata);
}
if (rem && cfdata->border)
{
e_remember_update(rem, cfdata->border);
cfdata->border->remember = rem;
}
else if (rem)
e_remember_match_update(rem);
e_config_save_queue();
return 1; /* Apply was OK */
}
@ -458,36 +573,52 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
/* generate the core widget layout for an advanced dialog */
Evas_Object *o, *ob, *of;
o = e_widget_list_add(evas, 0, 0);
o = e_widget_table_add(evas, 0);
of = e_widget_framelist_add(evas, _("Remember using"), 0);
if ((cfdata->border->client.icccm.name) &&
(cfdata->border->client.icccm.class) &&
(cfdata->border->client.icccm.name[0] != 0) &&
(cfdata->border->client.icccm.class[0] != 0))
if (cfdata->name)
{
ob = e_widget_check_add(evas, _("Window name and class"), &(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_entry_readonly_set(ob, 1);
e_widget_framelist_object_append(of, ob);
}
else
{
cfdata->remember.match_name = 0;
}
if (cfdata->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_entry_readonly_set(ob, 1);
e_widget_framelist_object_append(of, ob);
}
else
{
cfdata->remember.match_class = 0;
}
if ((e_border_name_get(cfdata->border))[0] != 0)
if (cfdata->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_entry_readonly_set(ob, 1);
e_widget_framelist_object_append(of, ob);
}
else
{
cfdata->remember.match_title = 0;
}
if ((cfdata->border->client.icccm.window_role) &&
(cfdata->border->client.icccm.window_role[0] != 0))
if (cfdata->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_entry_readonly_set(ob, 1);
e_widget_framelist_object_append(of, ob);
}
else
{
@ -504,7 +635,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
}
ob = e_widget_check_add(evas, _("Transience"), &(cfdata->remember.match_transient));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
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));
@ -535,19 +666,19 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
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));
e_widget_frametable_object_append(of, ob, 1, 6, 1, 1, 1, 1, 1, 1);
e_widget_list_object_append(o, of, 1, 1, 0.5);
e_widget_table_object_append(o, of, 1, 0, 1, 1, 1, 1, 1, 1);
ob = e_widget_check_add(evas, _("Match only one window"), &(cfdata->remember.apply_first_only));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
e_widget_table_object_append(o, ob, 0, 1, 1, 1, 1, 1, 1, 1);
if (cfdata->border->client.icccm.command.argv)
if (cfdata->command)
{
ob = e_widget_check_add(evas, _("Start this program on login"), &(cfdata->remember.apply_run));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
e_widget_table_object_append(o, ob, 1, 2, 1, 1, 1, 1, 1, 1);
}
ob = e_widget_check_add(evas, _("Always focus on start"), &(cfdata->remember.set_focus_on_start));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
e_widget_table_object_append(o, ob, 1, 1, 1, 1, 1, 1, 1, 1);
return o;
}

View File

@ -203,29 +203,9 @@ e_remember_update(E_Remember *rem, E_Border *bd)
{
if (!rem) return;
if (bd->new_client) return;
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.border) eina_stringshare_del(rem->prop.border);
if (rem->prop.command) eina_stringshare_del(rem->prop.command);
rem->name = NULL;
rem->class = NULL;
rem->title = NULL;
rem->role = NULL;
rem->prop.border = NULL;
rem->prop.command = NULL;
if (bd->client.icccm.name)
rem->name = eina_stringshare_add(bd->client.icccm.name);
if (bd->client.icccm.class)
rem->class = eina_stringshare_add(bd->client.icccm.class);
if (bd->client.netwm.name)
rem->title = eina_stringshare_add(bd->client.netwm.name);
else if (bd->client.icccm.title)
rem->title = eina_stringshare_add(bd->client.icccm.title);
if (bd->client.icccm.window_role)
rem->role = eina_stringshare_add(bd->client.icccm.window_role);
if (rem->prop.border) eina_stringshare_del(rem->prop.border);
rem->prop.border = NULL;
e_remember_match_update(rem);
@ -306,48 +286,6 @@ e_remember_update(E_Remember *rem, E_Border *bd)
rem->prop.zone = bd->zone->num;
rem->prop.head = bd->zone->container->manager->num;
if ((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 (i > 0)
{
buf[k] = ' ';
k++;
}
for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
{
if (k >= (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] = 0;
done:
rem->prop.command = eina_stringshare_add(buf);
}
e_config_save_queue();
}
@ -425,16 +363,16 @@ _e_remember_find(E_Border *bd, int check_usable)
* required, and if it is, check whether there's a match. If
* it fails, then go to the next remember */
if (rem->match & E_REMEMBER_MATCH_NAME &&
e_util_strcmp(rem->name, bd->client.icccm.name) &&
!e_util_both_str_empty(rem->name, bd->client.icccm.name))
e_util_strcmp(rem->name, bd->client.icccm.name) &&
!e_util_both_str_empty(rem->name, bd->client.icccm.name))
continue;
if (rem->match & E_REMEMBER_MATCH_CLASS &&
e_util_strcmp(rem->class, bd->client.icccm.class) &&
!e_util_both_str_empty(rem->class, bd->client.icccm.class))
e_util_strcmp(rem->class, bd->client.icccm.class) &&
!e_util_both_str_empty(rem->class, bd->client.icccm.class))
continue;
if (rem->match & E_REMEMBER_MATCH_TITLE &&
e_util_strcmp(rem->title, title) &&
!e_util_both_str_empty(rem->title, title))
e_util_strcmp(rem->title, title) &&
!e_util_both_str_empty(rem->title, title))
continue;
if (rem->match & E_REMEMBER_MATCH_ROLE &&
e_util_strcmp(rem->role, bd->client.icccm.window_role) &&