and actually complain when mv's fail too - and abort writes.
authorCarsten Haitzler <raster@rasterman.com>
Mon, 3 Jan 2011 04:52:48 +0000 (04:52 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 3 Jan 2011 04:52:48 +0000 (04:52 +0000)
SVN revision: 55812

src/bin/e_config.c

index 3e4a858..34ef4c5 100644 (file)
@@ -78,6 +78,15 @@ static E_Config_DD *_e_config_screen_crtc_restore_info_edd = NULL;
 EAPI int E_EVENT_CONFIG_ICON_THEME = 0;
 EAPI int E_EVENT_CONFIG_MODE_CHANGED = 0;
 
+static E_Dialog *_e_config_error_dialog = NULL;
+
+static void
+_e_config_error_dialog_cb_delete(void *dia)
+{
+   if (dia == _e_config_error_dialog)
+     _e_config_error_dialog = NULL;
+}
+
 static char *
 _e_config_profile_name_get(Eet_File *ef)
 {
@@ -1539,6 +1548,43 @@ e_config_domain_system_load(const char *domain, E_Config_DD *edd)
    return data;
 }
 
+static void
+_e_config_mv_error(const char *from, const char *to)
+{
+   if (!_e_config_error_dialog)
+     {
+        E_Dialog *dia;
+        
+        dia = e_dialog_new(e_container_current_get(e_manager_current_get()), 
+                           "E", "_sys_error_logout_slow");
+        if (dia)
+          {
+             char buf[8192];
+             
+             e_dialog_title_set(dia, _("Enlightenment Settings Write Problems"));
+             e_dialog_icon_set(dia, "dialog-error", 64);
+             snprintf(buf, sizeof(buf), 
+                      _("Enlightenment has an error while moving config files<br>"
+                        "from:<br>"
+                        "%s<br>"
+                        "<br>"
+                        "to:<br>"
+                        "%s<br>"
+                        "<br>"
+                        "The rest of the write has been aborted for safety.<br>"),
+                      from, to);
+             e_dialog_text_set(dia, buf);
+             e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
+             e_dialog_button_focus_num(dia, 0);
+             e_win_centered_set(dia->win, 1);
+             e_object_del_attach_func_set(E_OBJECT(dia),
+                                          _e_config_error_dialog_cb_delete);
+             e_dialog_show(dia);
+             _e_config_error_dialog = dia;
+          }
+     }
+}
+
 EAPI int
 e_config_profile_save(void)
 {
@@ -1557,7 +1603,7 @@ e_config_profile_save(void)
                       strlen(_e_config_profile), 0);
        if (_e_config_eet_close_handle(ef, buf2))
          {
-            Eina_Bool ret;
+            Eina_Bool ret = EINA_TRUE;
 
              if (_e_config_revisions > 0)
                {
@@ -1568,11 +1614,14 @@ e_config_profile_save(void)
                     {
                        e_user_dir_snprintf(bsrc, sizeof(bsrc), "config/profile.%i.cfg", i - 1);
                        e_user_dir_snprintf(bdst, sizeof(bdst), "config/profile.%i.cfg", i);
-                       ret = ecore_file_mv(bsrc, bdst);
-                       if (!ret)
+                       if (ecore_file_exists(bsrc))
                          {
-                            printf("*** Error saving profile. ***");
-                            break;
+                            ret = ecore_file_mv(bsrc, bdst);
+                            if (!ret)
+                              {
+                                 _e_config_mv_error(bsrc, bdst);
+                                 break;
+                              }
                          }
                     }
                   if (ret)
@@ -1581,16 +1630,11 @@ e_config_profile_save(void)
                        e_user_dir_snprintf(bdst, sizeof(bdst), "config/profile.1.cfg");
                        ret = ecore_file_mv(bsrc, bdst);
                        if (!ret)
-                         {
-                            printf("*** Error saving profile. ***");
-                         }
+                          _e_config_mv_error(bsrc, bdst);
                     }
                }
              ret = ecore_file_mv(buf2, buf);
-            if (!ret)
-              {
-                 printf("*** Error saving profile. ***");
-              }
+            if (!ret) _e_config_mv_error(buf2, buf);
          }
        ecore_file_unlink(buf2);
      }
@@ -2019,15 +2063,6 @@ _e_config_cb_timer(void *data)
    return 0;
 }
 
-static E_Dialog *_e_config_error_dialog = NULL;
-
-static void
-_e_config_error_dialog_cb_delete(void *dia)
-{
-   if (dia == _e_config_error_dialog)
-     _e_config_error_dialog = NULL;
-}
-
 static int
 _e_config_eet_close_handle(Eet_File *ef, char *file)
 {