Merged Irssi SVN (upcoming irssi 0.8.11).
[silc.git] / apps / irssi / src / fe-common / core / fe-settings.c
index 7fb512e8446172150bad00929e60478e0b626497..dccfcba9105d4f95a6dbb1e002271ace75bf0155 100644 (file)
@@ -45,6 +45,9 @@ static void set_print(SETTINGS_REC *rec)
                value = value_int;
                break;
        case SETTING_TYPE_STRING:
+       case SETTING_TYPE_TIME:
+       case SETTING_TYPE_LEVEL:
+       case SETTING_TYPE_SIZE:
                value = settings_get_str(rec->key);
                break;
        default:
@@ -83,12 +86,15 @@ static void cmd_set(char *data)
        clear = g_hash_table_lookup(optlist, "clear") != NULL;
        set_default = g_hash_table_lookup(optlist, "default") != NULL;
 
+       if (*key == '\0')
+               clear = set_default = FALSE;
+
        last_section = ""; found = 0;
        sets = settings_get_sorted();
        for (tmp = sets; tmp != NULL; tmp = tmp->next) {
                SETTINGS_REC *rec = tmp->data;
 
-               if (((clear || *value != '\0') && g_strcasecmp(rec->key, key) != 0) ||
+               if (((clear || set_default || *value != '\0') && g_strcasecmp(rec->key, key) != 0) ||
                    (*value == '\0' && *key != '\0' && stristr(rec->key, key) == NULL))
                        continue;
 
@@ -106,20 +112,38 @@ static void cmd_set(char *data)
                                 if (clear)
                                        settings_set_bool(key, FALSE);
                                else if (set_default)
-                                       settings_set_bool(key, GPOINTER_TO_INT(rec->def));
+                                       settings_set_bool(key, rec->default_value.v_bool);
                                else
                                        set_boolean(key, value);
                                break;
                        case SETTING_TYPE_INT:
                                settings_set_int(key, clear ? 0 :
-                                                set_default ? GPOINTER_TO_INT(rec->def) :
+                                                set_default ? rec->default_value.v_int :
                                                 atoi(value));
                                break;
                        case SETTING_TYPE_STRING:
                                settings_set_str(key, clear ? "" :
-                                                set_default ? rec->def :
+                                                set_default ? rec->default_value.v_string :
                                                 value);
                                break;
+                       case SETTING_TYPE_TIME:
+                               if (!settings_set_time(key, clear ? "0" :
+                                                      set_default ? rec->default_value.v_string : value))
+                                       printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+                                                   TXT_INVALID_TIME);
+                               break;
+                       case SETTING_TYPE_LEVEL:
+                               if (!settings_set_level(key, clear ? "" :
+                                                       set_default ? rec->default_value.v_string : value))
+                                       printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+                                                   TXT_INVALID_LEVEL);
+                               break;
+                       case SETTING_TYPE_SIZE:
+                               if (!settings_set_size(key, clear ? "0" :
+                                                      set_default ? rec->default_value.v_string : value))
+                                       printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+                                                   TXT_INVALID_SIZE);
+                               break;
                        }
                        signal_emit("setup changed", 0);
                }