# HG changeset patch # User Mark Doliner # Date 1085267307 0 # Node ID db1dc2d02020f7d76ee8ac4b83f09b26cac30710 # Parent bb168141eb5f0405d7a68a04f256b3f8fedd4479 [gaim-migrate @ 9795] Fiddled with a few small things 1) Added a GAIM_CONNECTION_IS_CONNECTED(gc) #define to connection.h 2) In the functions that build the Account Actions and Plugin Actions menus, I didn't think the comment "plugin and gc will be set from the counting loop already" was accurate (but it might be, becase it seemed like the account actions menu worked with one account online). So I made sure plugin and gc are set to what they should be. 3) Changed gaim_account_is_connected() to use GAIM_CONNECTION_IS_CONNECTED Previously gaim_account_is_connected() would return true for gc's that were "GAIM_CONNECTING." Now it only returns true for gc's that are "GAIM_CONNECTED." committer: Tailor Script diff -r bb168141eb5f -r db1dc2d02020 src/account.c --- a/src/account.c Sat May 22 22:37:33 2004 +0000 +++ b/src/account.c Sat May 22 23:08:27 2004 +0000 @@ -677,10 +677,13 @@ gboolean gaim_account_is_connected(const GaimAccount *account) { + GaimConnection *gc; + g_return_val_if_fail(account != NULL, FALSE); - return (account->gc != NULL && - gaim_connection_get_state(account->gc) != GAIM_DISCONNECTED); + gc = gaim_account_get_connection(account); + + return ((gc != NULL) && GAIM_CONNECTION_IS_CONNECTED(gc)); } const char * diff -r bb168141eb5f -r db1dc2d02020 src/connection.c --- a/src/connection.c Sat May 22 22:37:33 2004 +0000 +++ b/src/connection.c Sat May 22 23:08:27 2004 +0000 @@ -32,7 +32,6 @@ #include "request.h" #include "server.h" #include "signals.h" -#include "sound.h" #include "util.h" static GList *connections = NULL; diff -r bb168141eb5f -r db1dc2d02020 src/connection.h --- a/src/connection.h Sat May 22 22:37:33 2004 +0000 +++ b/src/connection.h Sat May 22 23:08:27 2004 +0000 @@ -190,6 +190,14 @@ GaimConnectionState gaim_connection_get_state(const GaimConnection *gc); /** + * Returns TRUE if the account is connected, otherwise returns FALSE. + * + * @return TRUE if the account is connected, otherwise returns FALSE. + */ +#define GAIM_CONNECTION_IS_CONNECTED(gc) \ + (gc->state == GAIM_CONNECTED) + +/** * Returns the connection's account. * * @param gc The connection. diff -r bb168141eb5f -r db1dc2d02020 src/gtkblist.c --- a/src/gtkblist.c Sat May 22 22:37:33 2004 +0000 +++ b/src/gtkblist.c Sat May 22 23:08:27 2004 +0000 @@ -4977,9 +4977,10 @@ GaimPlugin *plugin = NULL; int count = 0; - if (! protomenu) + if (protomenu == NULL) return; + /* Clear the old Account Actions menu */ for (l = gtk_container_get_children(GTK_CONTAINER(protomenu)); l; l = l->next) { GaimPluginAction *action; @@ -4991,28 +4992,39 @@ gtk_container_remove(GTK_CONTAINER(protomenu), GTK_WIDGET(menuitem)); } + /* Count the number of accounts with actions */ for (l = gaim_connections_get_all(); l; l = l->next) { gc = l->data; plugin = gc->prpl; + if (GAIM_CONNECTION_IS_CONNECTED(gc) && GAIM_PLUGIN_HAS_ACTIONS(plugin)) + count++; + /* no need to count past 2, so don't */ - if (gc->login_time && GAIM_PLUGIN_HAS_ACTIONS(plugin) && count++) + if (count > 1) break; } - if (count == 0) { menuitem = gtk_menu_item_new_with_label(_("No actions available")); gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); gtk_widget_set_sensitive(menuitem, FALSE); gtk_widget_show(menuitem); - } - else - if (count == 1) { - /* plugin and gc will be set from the counting loop already */ + + else if (count == 1) { + /* Find the one account that has actions */ + for (l = gaim_connections_get_all(); l; l = l->next) { + gc = l->data; + plugin = gc->prpl; + + if (GAIM_CONNECTION_IS_CONNECTED(gc) && GAIM_PLUGIN_HAS_ACTIONS(plugin)) + break; + } + build_plugin_actions(protomenu, plugin, gc); } + else { for (l = gaim_connections_get_all(); l; l = l->next) { GaimAccount *account; @@ -5023,7 +5035,7 @@ gc = l->data; plugin = gc->prpl; - if (gc->login_time == 0 || !GAIM_PLUGIN_HAS_ACTIONS(plugin)) + if (!GAIM_CONNECTION_IS_CONNECTED(gc) || !GAIM_PLUGIN_HAS_ACTIONS(plugin)) continue; account = gaim_connection_get_account(gc); @@ -5033,7 +5045,7 @@ g_free(buf); pixbuf = create_prpl_icon(account); - if(pixbuf) { + if (pixbuf) { scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR); image = gtk_image_new_from_pixbuf(scale); @@ -5064,9 +5076,10 @@ GList *l; int count = 0; - if (! pluginmenu) + if (pluginmenu == NULL) return; + /* Clear the old Account Actions menu */ for (l = gtk_container_get_children(GTK_CONTAINER(pluginmenu)); l; l = l->next) { GaimPluginAction *action; @@ -5077,11 +5090,15 @@ gtk_container_remove(GTK_CONTAINER(pluginmenu), GTK_WIDGET(menuitem)); } + /* Count the number of plugins with actions */ for (l = gaim_plugins_get_loaded(); l; l = l->next) { plugin = (GaimPlugin *) l->data; - if( !GAIM_IS_PROTOCOL_PLUGIN(plugin) && - GAIM_PLUGIN_HAS_ACTIONS(plugin) && count++) + if (!GAIM_IS_PROTOCOL_PLUGIN(plugin) && GAIM_PLUGIN_HAS_ACTIONS(plugin)) + count++; + + /* no need to count past 2, so don't */ + if (count > 1) break; } @@ -5090,13 +5107,20 @@ gtk_menu_shell_append(GTK_MENU_SHELL(pluginmenu), menuitem); gtk_widget_set_sensitive(menuitem, FALSE); gtk_widget_show(menuitem); - } - else - if (count == 1) { - /* plugin is already set */ + + else if (count == 1) { + /* Find the one plugin that has actions */ + for (l = gaim_plugins_get_loaded(); l; l = l->next) { + plugin = (GaimPlugin *) l->data; + + if (!GAIM_IS_PROTOCOL_PLUGIN(plugin) && GAIM_PLUGIN_HAS_ACTIONS(plugin)) + break; + } + build_plugin_actions(pluginmenu, plugin, NULL); } + else { for (l = gaim_plugins_get_loaded(); l; l = l->next) { plugin = (GaimPlugin *) l->data; @@ -5104,7 +5128,7 @@ if (GAIM_IS_PROTOCOL_PLUGIN(plugin)) continue; - if (! GAIM_PLUGIN_HAS_ACTIONS(plugin)) + if (!GAIM_PLUGIN_HAS_ACTIONS(plugin)) continue; menuitem = gtk_image_menu_item_new_with_label(plugin->info->name); @@ -5119,4 +5143,3 @@ } } } -