# HG changeset patch # User Christian Hammond # Date 1054509271 0 # Node ID 213e999fa5cc418fc56d6c1e89645a23e43d7bcf # Parent eb685809108bac47d8024d7172dfb019e7f3463e [gaim-migrate @ 6058] Added a generic function for creating and automatically filling a drop-down with a list of loaded protocols plugins, and used it in the new account editor. committer: Tailor Script diff -r eb685809108b -r 213e999fa5cc src/gtkaccount.c --- a/src/gtkaccount.c Sun Jun 01 21:36:40 2003 +0000 +++ b/src/gtkaccount.c Sun Jun 01 23:14:31 2003 +0000 @@ -97,10 +97,12 @@ /************************************************************************** * Add/Modify Account dialog **************************************************************************/ -static GtkWidget * -__make_protocol_menu(AccountPrefsDialog *dialog) +static void +__set_account_protocol(GtkWidget *item, GaimProtocol protocol) { - return gtk_button_new(); + AccountPrefsDialog *dialog; + + dialog = g_object_get_data(G_OBJECT(item), "user_data"); } static GtkWidget * @@ -148,7 +150,9 @@ gtk_widget_show(vbox); /* Protocol */ - dialog->protocol_menu = __make_protocol_menu(dialog); + dialog->protocol_menu = gaim_gtk_protocol_option_menu_new(-1, + G_CALLBACK(__set_account_protocol), dialog); + __add_pref_box(dialog, vbox, _("Protocol:"), dialog->protocol_menu); /* Screen Name */ diff -r eb685809108b -r 213e999fa5cc src/gtkutils.c --- a/src/gtkutils.c Sun Jun 01 21:36:40 2003 +0000 +++ b/src/gtkutils.c Sun Jun 01 23:14:31 2003 +0000 @@ -523,3 +523,50 @@ return vbox; } +GtkWidget * +gaim_gtk_protocol_option_menu_new(GaimProtocol protocol, GCallback cb, + gpointer user_data) +{ + GaimPluginProtocolInfo *prpl_info; + GaimPlugin *plugin; + GtkWidget *optmenu; + GtkWidget *menu; + GtkWidget *item; + GList *p; + int i; + int selected_index = -1; + + optmenu = gtk_option_menu_new(); + gtk_widget_show(optmenu); + + menu = gtk_menu_new(); + gtk_widget_show(menu); + + for (p = gaim_plugins_get_protocols(), i = 0; + p != NULL; + p = p->next, i++) { + + plugin = (GaimPlugin *)p->data; + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin); + + item = gtk_menu_item_new_with_label(plugin->info->name); + + g_object_set_data(G_OBJECT(item), "user_data", user_data); + + g_signal_connect(G_OBJECT(item), "activate", + cb, GINT_TO_POINTER(prpl_info->protocol)); + + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + gtk_widget_show(item); + + if (prpl_info->protocol == protocol) + selected_index = i; + } + + gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); + + if (selected_index != -1) + gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), selected_index); + + return optmenu; +} diff -r eb685809108b -r 213e999fa5cc src/gtkutils.h --- a/src/gtkutils.h Sun Jun 01 21:36:40 2003 +0000 +++ b/src/gtkutils.h Sun Jun 01 23:14:31 2003 +0000 @@ -26,6 +26,7 @@ #include "gaim.h" #include "conversation.h" +#include "prpl.h" /** * Sets up a gtkimhtml widget, loads it with smileys, and sets the @@ -163,4 +164,17 @@ */ GtkWidget *gaim_gtk_make_frame(GtkWidget *parent, const char *title); +/** + * Creates a drop-down option menu filled with protocols. + * + * @param protocol The protocol to select by default. + * @param cb The callback to call when a protocol is selected. + * @param user_data Data to pass to the callback function. + * + * @return The drop-down option menu. + */ +GtkWidget *gaim_gtk_protocol_option_menu_new(GaimProtocol protocol, + GCallback cb, + gpointer user_data); + #endif /* _GAIM_GTK_UTILS_H_ */