static void save_config( Plugin* p, FILE* fp ) { image *img = (image *)p->priv; if( img->config_data ) { char** lines = g_strsplit( img->config_data, "\n", 0 ); char** line; for( line = lines; *line; ++line ) { g_strstrip( *line ); if( **line ) lxpanel_put_line( fp, *line ); } g_strfreev( lines ); } }
static void _config_write_setting(const config_setting_t *setting, GString *buf, GString *out, FILE *f) { gint indent = buf->len; config_setting_t *s; switch (setting->type) { case PANEL_CONF_TYPE_INT: g_string_append_printf(buf, "%s=%d\n", setting->name, setting->num); break; case PANEL_CONF_TYPE_STRING: if (!setting->str) /* don't save NULL strings */ return; g_string_append_printf(buf, "%s=%s\n", setting->name, setting->str); break; case PANEL_CONF_TYPE_GROUP: if (!out && setting->hook) /* plugin does not support settings */ { lxpanel_put_line(f, "%s%s {", buf->str, setting->name); setting->hook(setting, f, setting->hook_data); lxpanel_put_line(f, "%s}", buf->str); /* old settings ways are kinda weird... */ } else { if (out) { g_string_append(out, buf->str); g_string_append(out, setting->name); g_string_append(out, " {\n"); } else fprintf(f, "%s%s {\n", buf->str, setting->name); g_string_append(buf, SETTING_INDENT); for (s = setting->first; s; s = s->next) _config_write_setting(s, buf, out, f); g_string_truncate(buf, indent); if (out) { g_string_append(out, buf->str); g_string_append(out, "}\n"); } else fprintf(f, "%s}\n", buf->str); } return; case PANEL_CONF_TYPE_LIST: if (setting->name[0] != '\0') { g_warning("only anonymous lists are supported in panel config, got \"%s\"", setting->name); return; } for (s = setting->first; s; s = s->next) _config_write_setting(s, buf, out, f); return; } if (out) g_string_append(out, buf->str); else fputs(buf->str, f); g_string_truncate(buf, indent); }