im.pidgin.pidgin: 2cbfe519145eef590082df40a311948ad4884ef2
sadrul at pidgin.im
sadrul at pidgin.im
Sun Dec 9 23:35:50 EST 2007
-----------------------------------------------------------------
Revision: 2cbfe519145eef590082df40a311948ad4884ef2
Ancestor: 4c527b505ec56d3687d0bd24be1d28eb849a0394
Author: sadrul at pidgin.im
Date: 2007-12-10T04:34:51
Branch: im.pidgin.pidgin
Modified files:
finch/gntplugin.c
ChangeLog:
Create a 'list' request-field for a 'choice' plugin pref.
-------------- next part --------------
============================================================
--- finch/gntplugin.c c467a3b83db488862887d404791c50133d6ed5f3
+++ finch/gntplugin.c 1e89be06cc1140a22c24a5ab8ae3e3ce27769cde
@@ -53,6 +53,13 @@ static void
static GntWidget *process_pref_frame(PurplePluginPrefFrame *frame);
static void
+free_stringlist(GList *list)
+{
+ g_list_foreach(list, (GFunc)g_free, NULL);
+ g_list_free(list);
+}
+
+static void
decide_conf_button(PurplePlugin *plugin)
{
if (purple_plugin_is_loaded(plugin) &&
@@ -426,11 +433,14 @@ process_pref_frame(PurplePluginPrefFrame
PurpleRequestFields *fields;
PurpleRequestFieldGroup *group = NULL;
GList *prefs;
-
+ GList *stringlist = NULL;
+ GntWidget *ret = NULL;
+
fields = purple_request_fields_new();
for (prefs = purple_plugin_pref_frame_get_prefs(frame); prefs; prefs = prefs->next) {
PurplePluginPref *pref = prefs->data;
+ PurplePrefType type;
const char *name = purple_plugin_pref_get_name(pref);
const char *label = purple_plugin_pref_get_label(pref);
if(name == NULL) {
@@ -448,20 +458,67 @@ process_pref_frame(PurplePluginPrefFrame
}
field = NULL;
- switch(purple_prefs_get_type(name)) {
- case PURPLE_PREF_BOOLEAN:
- field = purple_request_field_bool_new(name, label, purple_prefs_get_bool(name));
- break;
- case PURPLE_PREF_INT:
- field = purple_request_field_int_new(name, label, purple_prefs_get_int(name));
- break;
- case PURPLE_PREF_STRING:
- field = purple_request_field_string_new(name, label, purple_prefs_get_string(name),
- purple_plugin_pref_get_format_type(pref) & PURPLE_STRING_FORMAT_TYPE_MULTILINE);
- break;
- default:
- break;
+ type = purple_prefs_get_type(name);
+ if(purple_plugin_pref_get_type(pref) == PURPLE_PLUGIN_PREF_CHOICE) {
+ GList *list = purple_plugin_pref_get_choices(pref);
+ gpointer current_value = NULL;
+
+ switch(type) {
+ case PURPLE_PREF_BOOLEAN:
+ current_value = g_strdup_printf("%d", (int)purple_prefs_get_bool(name));
+ break;
+ case PURPLE_PREF_INT:
+ current_value = g_strdup_printf("%d", (int)purple_prefs_get_int(name));
+ break;
+ case PURPLE_PREF_STRING:
+ current_value = g_strdup(purple_prefs_get_string(name));
+ break;
+ default:
+ continue;
+ }
+
+ field = purple_request_field_list_new(name, label);
+ purple_request_field_list_set_multi_select(field, FALSE);
+ while (list && list->next) {
+ const char *label = list->data;
+ char *value = NULL;
+ switch(type) {
+ case PURPLE_PREF_BOOLEAN:
+ value = g_strdup_printf("%d", (int)list->next->data);
+ break;
+ case PURPLE_PREF_INT:
+ value = g_strdup_printf("%d", (int)list->next->data);
+ break;
+ case PURPLE_PREF_STRING:
+ value = g_strdup(list->next->data);
+ break;
+ default:
+ break;
+ }
+ stringlist = g_list_prepend(stringlist, value);
+ purple_request_field_list_add(field, label, value);
+ if (strcmp(value, current_value) == 0)
+ purple_request_field_list_add_selected(field, label);
+ list = list->next->next;
+ }
+ g_free(current_value);
+ } else {
+ switch(type) {
+ case PURPLE_PREF_BOOLEAN:
+ field = purple_request_field_bool_new(name, label, purple_prefs_get_bool(name));
+ break;
+ case PURPLE_PREF_INT:
+ field = purple_request_field_int_new(name, label, purple_prefs_get_int(name));
+ break;
+ case PURPLE_PREF_STRING:
+ field = purple_request_field_string_new(name, label, purple_prefs_get_string(name),
+ purple_plugin_pref_get_format_type(pref) & PURPLE_STRING_FORMAT_TYPE_MULTILINE);
+ break;
+ default:
+ break;
+ }
}
+
if (field) {
if (group == NULL) {
group = purple_request_field_group_new(_("Preferences"));
@@ -471,9 +528,11 @@ process_pref_frame(PurplePluginPrefFrame
}
}
- return purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+ ret = purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
_("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL,
NULL, NULL, NULL,
NULL);
+ g_signal_connect_swapped(G_OBJECT(ret), "destroy", G_CALLBACK(free_stringlist), stringlist);
+ return ret;
}
More information about the Commits
mailing list