# HG changeset patch # User Nathan Walp # Date 1075068942 0 # Node ID 9d1a984681fe26ba5e573b857d5643137f9a029c # Parent a64774143a4239de5781b8376135e338f39cabaa [gaim-migrate @ 8883] Gary Kramlich is probably getting sick of the prefs system, but at least he made a nice interface for protocol prefs. Thanks Gary! committer: Tailor Script diff -r a64774143a42 -r 9d1a984681fe src/gtkconv.c --- a/src/gtkconv.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/gtkconv.c Sun Jan 25 22:15:42 2004 +0000 @@ -1168,7 +1168,7 @@ gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); gtk_widget_show(button); - if (gc && prpl_info->get_info) { + if (gc && (prpl_info->get_info || prpl_info->get_cb_info)) { button = gtk_menu_item_new_with_label(_("Info")); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(menu_chat_info_cb), conv); @@ -1186,6 +1186,7 @@ gtk_widget_show(button); } + /* XXX: jabber can only add buddies from here in certain circumstances */ /* Added by Jonas */ if (gc) { if (gaim_find_buddy(gc->account, who)) diff -r a64774143a42 -r 9d1a984681fe src/gtkprefs.c --- a/src/gtkprefs.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/gtkprefs.c Sun Jan 25 22:15:42 2004 +0000 @@ -32,6 +32,7 @@ #include "prpl.h" #include "sound.h" #include "util.h" +#include "multi.h" #include "gtkblist.h" #include "gtkconv.h" @@ -1545,6 +1546,96 @@ return ret; } +static GtkWidget * +protocol_page() { + GtkWidget *ret; + + ret = gtk_label_new(NULL); + gtk_widget_show(ret); + + return ret; +} + +static gboolean +protocol_pref_entry_cb(GtkWidget *entry, GdkEventFocus *event, gpointer data) { + char *pref = data; + + gaim_prefs_set_string(pref, gtk_entry_get_text(GTK_ENTRY(entry))); + + return FALSE; +} + +static GtkWidget * +protocol_pref_page(GaimPluginProtocolInfo *prpl_info) { + GtkWidget *ret, *parent, *frame, *hbox, *label, *misc; + GtkSizeGroup *sg; + GList *pp = NULL; + + sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + + ret = gtk_vbox_new(FALSE, 18); + gtk_container_set_border_width (GTK_CONTAINER (ret), 12); + gtk_widget_show(ret); + + parent = ret; + + for(pp = prpl_info->protocol_prefs; pp != NULL; pp = pp->next) { + struct proto_pref *pref = pp->data; + + if(pref->key != NULL) { + switch(gaim_prefs_get_type(pref->key)) { + case GAIM_PREF_BOOLEAN: + misc = gaim_gtk_prefs_checkbox(pref->label, + pref->key, + parent); + break; + case GAIM_PREF_INT: + misc = gaim_gtk_prefs_labeled_spin_button(parent, + pref->label, + pref->key, + pref->min, + pref->max, + sg); + break; + case GAIM_PREF_STRING: + hbox = gtk_hbox_new(FALSE, 6); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(parent), hbox, FALSE, FALSE, 0); + + label = gtk_label_new_with_mnemonic(pref->label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_size_group_add_widget(sg, label); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + misc = gtk_entry_new(); + gtk_entry_set_text(GTK_ENTRY(misc), + gaim_prefs_get_string(pref->key)); + g_signal_connect(G_OBJECT(misc), "focus-out-event", + G_CALLBACK(protocol_pref_entry_cb), + (gpointer)pref->key); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), misc); + gtk_widget_show(misc); + gtk_box_pack_start(GTK_BOX(hbox), misc, FALSE, FALSE, 0); + + break; + case GAIM_PREF_NONE: /* XXX No use for this, if you want a + frame, set key to NULL */ + case GAIM_PREF_STRING_LIST: /*XXX No one should need this */ + default: + break; + } + } else { + frame = gaim_gtk_make_frame(ret, pref->label); + gtk_widget_show(frame); + + parent = frame; + } + } + + return ret; +} + static GtkWidget *plugin_description=NULL, *plugin_details=NULL; static void prefs_plugin_sel (GtkTreeSelection *sel, GtkTreeModel *model) @@ -2291,6 +2382,21 @@ prefs_notebook_add_page(_("Away / Idle"), NULL, away_page(), &p, NULL, notebook_page++); prefs_notebook_add_page(_("Away Messages"), NULL, away_message_page(), &c, &p, notebook_page++); + prefs_notebook_add_page(_("Protocols"), NULL, protocol_page(), &p, NULL, notebook_page++); + for (l = gaim_plugins_get_protocols(); l != NULL; l = l->next) { + plug = l->data; + + if (GAIM_IS_PROTOCOL_PLUGIN(plug)) { + GaimPluginProtocolInfo *prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plug); + + if (prpl_info->protocol_prefs != NULL) { + prefs_notebook_add_page(_(plug->info->name), NULL, + protocol_pref_page(prpl_info), &c, + &p, notebook_page++); + } + } + } + if (gaim_plugins_enabled()) { prefs_notebook_add_page(_("Plugins"), NULL, plugin_page(), &plugin_iter, NULL, notebook_page++); diff -r a64774143a42 -r 9d1a984681fe src/multi.h --- a/src/multi.h Sun Jan 25 22:01:34 2004 +0000 +++ b/src/multi.h Sun Jan 25 22:15:42 2004 +0000 @@ -49,8 +49,14 @@ gboolean secret; }; +struct proto_pref { + char *key; + char *label; + int min; + int max; +}; + #endif /* _MULTI_H_ */ /* A big line. */ /* -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ - diff -r a64774143a42 -r 9d1a984681fe src/protocols/gg/gg.c --- a/src/protocols/gg/gg.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/gg/gg.c Sun Jan 25 22:15:42 2004 +0000 @@ -1,6 +1,6 @@ /* * gaim - Gadu-Gadu Protocol Plugin - * $Id: gg.c 8756 2004-01-10 18:13:52Z thekingant $ + * $Id: gg.c 8883 2004-01-25 22:15:42Z faceprint $ * * Copyright (C) 2001 Arkadiusz Mi¶kiewicz * @@ -1305,6 +1305,7 @@ 0, NULL, NULL, + NULL, agg_list_icon, agg_list_emblems, NULL, diff -r a64774143a42 -r 9d1a984681fe src/protocols/irc/irc.c --- a/src/protocols/irc/irc.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/irc/irc.c Sun Jan 25 22:15:42 2004 +0000 @@ -525,6 +525,7 @@ OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL, NULL, NULL, + NULL, irc_blist_icon, irc_blist_emblems, NULL, diff -r a64774143a42 -r 9d1a984681fe src/protocols/jabber/jabber.c --- a/src/protocols/jabber/jabber.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/jabber/jabber.c Sun Jan 25 22:15:42 2004 +0000 @@ -1120,6 +1120,7 @@ OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME, NULL, NULL, + NULL, jabber_list_icon, jabber_list_emblems, jabber_status_text, @@ -1208,6 +1209,7 @@ { GaimAccountUserSplit *split; GaimAccountOption *option; + struct proto_pref *ppref; split = gaim_account_user_split_new(_("Server"), "jabber.org", '@'); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); @@ -1243,6 +1245,16 @@ gaim_prefs_add_none("/plugins/prpl/jabber"); gaim_prefs_add_bool("/plugins/prpl/jabber/hide_os", FALSE); + + ppref = g_new0(struct proto_pref, 1); + ppref->key = NULL; + ppref->label = _("Privacy"); + prpl_info.protocol_prefs = g_list_append(prpl_info.protocol_prefs, ppref); + + ppref = g_new0(struct proto_pref, 1); + ppref->key = "/plugins/prpl/jabber/hide_os"; + ppref->label = _("Hide Operating System"); /* XXX: come up with a better name for this */ + prpl_info.protocol_prefs = g_list_append(prpl_info.protocol_prefs, ppref); } GAIM_INIT_PLUGIN(jabber, init_plugin, info); diff -r a64774143a42 -r 9d1a984681fe src/protocols/msn/msn.c --- a/src/protocols/msn/msn.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/msn/msn.c Sun Jan 25 22:15:42 2004 +0000 @@ -1571,6 +1571,7 @@ OPT_PROTO_MAIL_CHECK /* | OPT_PROTO_BUDDY_ICON */, NULL, NULL, + NULL, msn_list_icon, msn_list_emblems, msn_status_text, diff -r a64774143a42 -r 9d1a984681fe src/protocols/napster/napster.c --- a/src/protocols/napster/napster.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/napster/napster.c Sun Jan 25 22:15:42 2004 +0000 @@ -554,6 +554,7 @@ OPT_PROTO_CHAT_TOPIC, NULL, NULL, + NULL, nap_list_icon, nap_list_emblems, NULL, diff -r a64774143a42 -r 9d1a984681fe src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/oscar/oscar.c Sun Jan 25 22:15:42 2004 +0000 @@ -6624,6 +6624,7 @@ OPT_PROTO_MAIL_CHECK | OPT_PROTO_BUDDY_ICON | OPT_PROTO_IM_IMAGE, NULL, NULL, + NULL, oscar_list_icon, oscar_list_emblems, oscar_status_text, diff -r a64774143a42 -r 9d1a984681fe src/protocols/toc/toc.c --- a/src/protocols/toc/toc.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/toc/toc.c Sun Jan 25 22:15:42 2004 +0000 @@ -2094,6 +2094,7 @@ OPT_PROTO_CORRECT_TIME, NULL, NULL, + NULL, toc_list_icon, toc_list_emblems, NULL, diff -r a64774143a42 -r 9d1a984681fe src/protocols/trepia/trepia.c --- a/src/protocols/trepia/trepia.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/trepia/trepia.c Sun Jan 25 22:15:42 2004 +0000 @@ -1255,6 +1255,7 @@ OPT_PROTO_BUDDY_ICON, NULL, NULL, + NULL, trepia_list_icon, trepia_list_emblems, trepia_status_text, diff -r a64774143a42 -r 9d1a984681fe src/protocols/yahoo/yahoo.c --- a/src/protocols/yahoo/yahoo.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/yahoo/yahoo.c Sun Jan 25 22:15:42 2004 +0000 @@ -3113,6 +3113,7 @@ OPT_PROTO_MAIL_CHECK | OPT_PROTO_CHAT_TOPIC, NULL, /* user_splits */ NULL, /* protocol_options */ + NULL, /* protocol_prefs */ yahoo_list_icon, yahoo_list_emblems, yahoo_status_text, diff -r a64774143a42 -r 9d1a984681fe src/protocols/zephyr/zephyr.c --- a/src/protocols/zephyr/zephyr.c Sun Jan 25 22:01:34 2004 +0000 +++ b/src/protocols/zephyr/zephyr.c Sun Jan 25 22:15:42 2004 +0000 @@ -985,6 +985,7 @@ OPT_PROTO_NO_PASSWORD, NULL, NULL, + NULL, zephyr_list_icon, NULL, NULL, diff -r a64774143a42 -r 9d1a984681fe src/prpl.h --- a/src/prpl.h Sun Jan 25 22:01:34 2004 +0000 +++ b/src/prpl.h Sun Jan 25 22:15:42 2004 +0000 @@ -204,6 +204,7 @@ GList *user_splits; /* A GList of GaimAccountUserSplit */ GList *protocol_options; /* A GList of GaimAccountOption */ + GList *protocol_prefs; /* protocol specific options */ /** * Returns the base icon name for the given buddy and account. @@ -327,6 +328,7 @@ struct _GaimRoomlist *(*roomlist_get_list)(GaimConnection *gc); void (*roomlist_cancel)(struct _GaimRoomlist *list); void (*roomlist_expand_catagory)(struct _GaimRoomlist *list, struct _GaimRoomlistRoom *catagory); + }; #define GAIM_IS_PROTOCOL_PLUGIN(plugin) \