diff --git a/src/bin/e_int_client_remember.c b/src/bin/e_int_client_remember.c index 3de60006b..5a63a30e1 100644 --- a/src/bin/e_int_client_remember.c +++ b/src/bin/e_int_client_remember.c @@ -23,6 +23,7 @@ struct _E_Config_Dialog_Data { E_Client *client; E_Remember *rem; + E_Remember *backup_rem; /*- BASIC -*/ int mode; int warned; @@ -141,6 +142,9 @@ _fill_data(E_Config_Dialog_Data *cfdata) else rem = cfdata->rem; + if (ec && rem && (rem->apply & E_REMEMBER_APPLY_UUID)) + cfdata->backup_rem = rem = e_remember_find_usable(ec); + if (rem) { if (rem->name && rem->name[0]) @@ -316,10 +320,11 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) if (cfdata->client) { - if (!cfdata->applied && cfdata->client->remember) + E_Remember *rem = cfdata->backup_rem ?: cfdata->client->remember; + if (!cfdata->applied && rem) { - e_remember_unuse(cfdata->client->remember); - e_remember_del(cfdata->client->remember); + e_remember_unuse(rem); + e_remember_del(rem); e_config_save_queue(); } @@ -413,7 +418,7 @@ _basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata { /* Actually take our cfdata settings and apply them in real life */ E_Client *ec = cfdata->client; - E_Remember *rem = ec->remember; + E_Remember *rem = cfdata->backup_rem ?: ec->remember; if (cfdata->mode == MODE_NOTHING) { @@ -421,8 +426,8 @@ _basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata { e_remember_unuse(rem); e_remember_del(rem); + e_config_save_queue(); } - e_config_save_queue(); return 1; } @@ -431,7 +436,8 @@ _basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata rem = e_remember_new(); if (rem) { - ec->remember = rem; + if ((!ec->remember) || (!(ec->remember->apply & E_REMEMBER_APPLY_UUID))) + ec->remember = rem; cfdata->applied = 0; } else @@ -450,7 +456,8 @@ _basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata rem->apply = cfdata->mode; rem->apply_first_only = 0; - e_remember_use(rem); + if (ec->remember == rem) + e_remember_use(rem); e_remember_update(ec); cfdata->applied = 1; e_config_save_queue(); @@ -463,7 +470,7 @@ _advanced_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfd E_Client *ec = cfdata->client; E_Remember *rem; - if (ec) rem = ec->remember; + if (ec) rem = cfdata->backup_rem ?: ec->remember; else rem = cfdata->rem; if (!rem) @@ -624,8 +631,9 @@ _advanced_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfd { _check_matches(rem, 1); rem->keep_settings = 0; - cfdata->client->remember = rem; - e_remember_update(cfdata->client); + if ((!ec->remember) || (!(ec->remember->apply & E_REMEMBER_APPLY_UUID))) + ec->remember = rem; + e_remember_update(ec); cfdata->applied = 1; } rem->keep_settings = cfdata->remember.keep_settings;