# HG changeset patch # User Mark Doliner # Date 1084662248 0 # Node ID 19885cb8a24c662fd6dc4f4879db8c071299935a # Parent 88ec59dec95aedba188ace86ab143053c34af0cc [gaim-migrate @ 9709] Handle graying out the roomlist menu item in a more sane way. committer: Tailor Script diff -r 88ec59dec95a -r 19885cb8a24c src/gtkblist.c --- a/src/gtkblist.c Sat May 15 22:39:09 2004 +0000 +++ b/src/gtkblist.c Sat May 15 23:04:08 2004 +0000 @@ -2891,7 +2891,7 @@ gaim_gtkpounce_menu_build(gtkblist->bpmenu); widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List")); - gtk_widget_set_sensitive(widget, gaim_roomlist_is_showable()); + gtk_widget_set_sensitive(widget, gaim_gtk_roomlist_is_showable()); widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy")); gtk_widget_set_sensitive(widget, gaim_gtk_privacy_is_showable()); diff -r 88ec59dec95a -r 19885cb8a24c src/gtkroomlist.c --- a/src/gtkroomlist.c Sat May 15 22:39:09 2004 +0000 +++ b/src/gtkroomlist.c Sat May 15 23:04:08 2004 +0000 @@ -1,5 +1,5 @@ /** - * @file gtkroomlist.c Gtk Room List UI + * @file gtkroomlist.c GTK+ Room List UI * @ingroup gtkui * * gaim @@ -283,14 +283,33 @@ } } -static gboolean accounts_filter_func(GaimAccount *account) +static gboolean account_filter_func(GaimAccount *account) { + GaimConnection *gc = gaim_account_get_connection(account); + GaimPluginProtocolInfo *prpl_info = NULL; + +// if (!gc) +// return FALSE; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + return (prpl_info->roomlist_get_list != NULL); +} + +gboolean +gaim_gtk_roomlist_is_showable() +{ + GList *c; GaimConnection *gc; - gc = gaim_account_get_connection(account); - if (!gc) - return FALSE; - return gaim_roomlist_is_possible(gc); + for (c = gaim_connections_get_all(); c != NULL; c = c->next) { + gc = c->data; + + if (account_filter_func(gaim_connection_get_account(gc))) + return TRUE; + } + + return FALSE; } GaimGtkRoomlistDialog *gaim_gtk_roomlist_dialog_new_with_account(GaimAccount *account) @@ -303,19 +322,6 @@ GtkWidget *bbox; GtkWidget *label; - if (account == NULL) { - account = gaim_roomlist_get_first_valid_account(); - - if (account == NULL) { - gaim_notify_error(NULL, NULL, - _("You are not currently signed on with any " - "protocols that have the ability to list rooms."), - NULL); - - return NULL; - } - } - dialog = g_new0(GaimGtkRoomlistDialog, 1); dialog->account = account; @@ -351,7 +357,7 @@ gtk_widget_show(label); dialog->account_widget = gaim_gtk_account_option_menu_new(dialog->account, FALSE, - G_CALLBACK(dialog_select_account_cb), accounts_filter_func, dialog); + G_CALLBACK(dialog_select_account_cb), account_filter_func, dialog); gtk_box_pack_start(GTK_BOX(account_hbox), dialog->account_widget, TRUE, TRUE, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(dialog->account_widget)); diff -r 88ec59dec95a -r 19885cb8a24c src/gtkroomlist.h --- a/src/gtkroomlist.h Sat May 15 22:39:09 2004 +0000 +++ b/src/gtkroomlist.h Sat May 15 23:04:08 2004 +0000 @@ -1,5 +1,5 @@ /** - * @file gtkroomlist.h Gtk Room List UI + * @file gtkroomlist.h GTK+ Room List UI * @ingroup gtkui * * gaim @@ -36,16 +36,28 @@ */ void gaim_gtk_roomlist_init(void); -void gaim_gtk_roomlist_dialog_show(void); /** - * Create a new room list dialog. + * Determines if showing the room list dialog is a valid action. + * + * @return TRUE if there are accounts online that support listing + * chat rooms. Otherwise return FALSE. + */ +gboolean gaim_gtk_roomlist_is_showable(void); + +/** + * Shows the roomlist dialog. + */ +void gaim_gtk_roomlist_dialog_show(void); + +/** + * Creates a new room list dialog. * * @return The new dialog. */ GaimGtkRoomlistDialog *gaim_gtk_roomlist_dialog_new(void); /** - * Create a new room list dialog and fetch the list on + * Creates a new room list dialog and fetch the list on * the specified account. * * @param account The account to force. diff -r 88ec59dec95a -r 19885cb8a24c src/roomlist.c --- a/src/roomlist.c Sat May 15 22:39:09 2004 +0000 +++ b/src/roomlist.c Sat May 15 23:04:08 2004 +0000 @@ -39,31 +39,6 @@ /**************************************************************************/ /*@{*/ -gboolean gaim_roomlist_is_showable() -{ - if (gaim_roomlist_get_first_valid_account() != NULL) - return TRUE; - return FALSE; -} - -GaimAccount *gaim_roomlist_get_first_valid_account() -{ - GList *c; - GaimConnection *gc; - GaimAccount *first_account = NULL; - - for (c = gaim_connections_get_all(); c != NULL; c = c->next) { - gc = c->data; - - if (gaim_roomlist_is_possible(gc)) { - first_account = gaim_connection_get_account(gc); - break; - } - } - - return first_account; -} - void gaim_roomlist_show_with_account(GaimAccount *account) { if (ops && ops->show_with_account) @@ -195,20 +170,6 @@ ops->add_room(list, room); } -gboolean gaim_roomlist_is_possible(GaimConnection *gc) -{ - GaimPluginProtocolInfo *prpl_info = NULL; - - g_return_val_if_fail(gc != NULL, FALSE); - - if (gc->prpl != NULL) - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (prpl_info && prpl_info->roomlist_get_list) - return TRUE; - return FALSE; -} - GaimRoomlist *gaim_roomlist_get_list(GaimConnection *gc) { GaimPluginProtocolInfo *prpl_info = NULL; diff -r 88ec59dec95a -r 19885cb8a24c src/roomlist.h --- a/src/roomlist.h Sat May 15 22:39:09 2004 +0000 +++ b/src/roomlist.h Sat May 15 23:04:08 2004 +0000 @@ -113,22 +113,6 @@ /*@{*/ /** - * Return true if there are accounts signed on that support showing - * a roomlist. - * - * @return True if showing the roomlist is a valid action. - */ -gboolean gaim_roomlist_is_showable(); - -/** - * Get the first online acocunt that supports showing a roomlist. - * - * @return The first selected account of all the accounts that - * support showing a roomlist. - */ -GaimAccount *gaim_roomlist_get_first_valid_account(); - -/** * This is used to get the room list on an account, asking the UI * to pop up a dialog with the specified account already selected, * and pretend the user clicked the get list button. @@ -209,14 +193,6 @@ void gaim_roomlist_room_add(GaimRoomlist *list, GaimRoomlistRoom *room); /** - * Do we support room listing? - * - * @param gc The GaimConnection we're asking. - * @return @c TRUE if it's possible to get a room list. - */ -gboolean gaim_roomlist_is_possible(GaimConnection *gc); - -/** * Returns a GaimRoomlist structure from the prpl, and * instructs the prpl to start fetching the list. *