From: Christian H. <ch...@us...> - 2003-06-21 08:38:38
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1:/tmp/cvs-serv9383 Modified Files: gtkconn.c gtkblist.c gtkblist.h prpl.c prpl.h Log Message: Moved do_proto_menu() from prpl.[ch] to gaim_gtk_blist_update_protocol_actions() in gtkblist.[ch]. Index: gtkconn.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkconn.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gtkconn.c 15 Jun 2003 07:31:20 -0000 1.5 +++ gtkconn.c 21 Jun 2003 08:38:33 -0000 1.6 @@ -216,7 +216,7 @@ gaim_setup(gc); do_away_menu(); - do_proto_menu(); + gaim_gtk_blist_update_protocol_actions(); if(meter) kill_meter(meter, _("Done.")); @@ -233,7 +233,7 @@ update_privacy_connections(); do_away_menu(); - do_proto_menu(); + gaim_gtk_blist_update_protocol_actions(); if(meter) kill_meter(meter, _("Done.")); Index: gtkblist.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkblist.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -d -r1.58 -r1.59 --- gtkblist.c 20 Jun 2003 03:41:15 -0000 1.58 +++ gtkblist.c 21 Jun 2003 08:38:33 -0000 1.59 @@ -1332,7 +1332,7 @@ static void signed_on_off_cb(GaimConnection *gc, struct gaim_buddy_list *blist) { - do_proto_menu(); + gaim_gtk_blist_update_protocol_actions(); } @@ -1451,7 +1451,7 @@ gaim_gtkpounce_menu_build(gtkblist->bpmenu); protomenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Protocol Actions")); - do_proto_menu(); + gaim_gtk_blist_update_protocol_actions(); /****************************** GtkTreeView **********************************/ sw = gtk_scrolled_window_new(NULL,NULL); @@ -2525,3 +2525,140 @@ return iter; } +static void +proto_act(GtkObject *obj, struct proto_actions_menu *pam) +{ + if (pam->callback && pam->gc) + pam->callback(pam->gc); +} + +void +gaim_gtk_blist_update_protocol_actions(void) +{ + GtkWidget *menuitem; + GtkWidget *submenu; + GaimPluginProtocolInfo *prpl_info = NULL; + GList *l; + GList *c; + struct proto_actions_menu *pam; + GaimConnection *gc = NULL; + int count = 0; + char buf[256]; + + if (!protomenu) + return; + + for (l = gtk_container_get_children(GTK_CONTAINER(protomenu)); + l != NULL; + l = l->next) { + + menuitem = l->data; + pam = g_object_get_data(G_OBJECT(menuitem), "proto_actions_menu"); + + if (pam) + g_free(pam); + + gtk_container_remove(GTK_CONTAINER(protomenu), GTK_WIDGET(menuitem)); + } + + for (c = gaim_connections_get_all(); c != NULL; c = c->next) { + gc = c->data; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (prpl_info->actions && gc->login_time) + count++; + } + + if (!count) { + g_snprintf(buf, sizeof(buf), _("No actions available")); + menuitem = gtk_menu_item_new_with_label(buf); + gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); + gtk_widget_show(menuitem); + return; + } + + if (count == 1) { + GList *act; + + for (c = gaim_connections_get_all(); c != NULL; c = c->next) { + gc = c->data; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (prpl_info->actions && gc->login_time) + break; + } + + for (act = prpl_info->actions(gc); act != NULL; act = act->next) { + if (act->data) { + struct proto_actions_menu *pam = act->data; + menuitem = gtk_menu_item_new_with_label(pam->label); + gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(proto_act), pam); + g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", pam); + gtk_widget_show(menuitem); + } + else + gaim_separator(protomenu); + } + } + else { + for (c = gaim_connections_get_all(); c != NULL; c = c->next) { + GaimAccount *account; + GList *act; + GdkPixbuf *pixbuf, *scale; + GtkWidget *image; + + gc = c->data; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (!prpl_info->actions || !gc->login_time) + continue; + + account = gaim_connection_get_account(gc); + + g_snprintf(buf, sizeof(buf), "%s (%s)", + gaim_account_get_username(account), + gc->prpl->info->name); + + menuitem = gtk_image_menu_item_new_with_label(buf); + + pixbuf = create_prpl_icon(gc->account); + if(pixbuf) { + scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, + GDK_INTERP_BILINEAR); + image = gtk_image_new_from_pixbuf(scale); + g_object_unref(G_OBJECT(pixbuf)); + g_object_unref(G_OBJECT(scale)); + gtk_widget_show(image); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), + image); + } + + gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); + gtk_widget_show(menuitem); + + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); + gtk_widget_show(submenu); + + for (act = prpl_info->actions(gc); act != NULL; act = act->next) { + if (act->data) { + struct proto_actions_menu *pam = act->data; + menuitem = gtk_menu_item_new_with_label(pam->label); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(proto_act), pam); + g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", + pam); + gtk_widget_show(menuitem); + } + else + gaim_separator(submenu); + } + } + } +} Index: gtkblist.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkblist.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gtkblist.h 16 Jun 2003 05:14:05 -0000 1.10 +++ gtkblist.h 21 Jun 2003 08:38:33 -0000 1.11 @@ -178,6 +178,10 @@ */ void gaim_gtk_blist_setup_sort_methods(); +/** + * Updates the protocol actions menu on the GTK+ buddy list window. + */ +void gaim_gtk_blist_update_protocol_actions(); #endif /* _GAIM_GTK_LIST_H_ */ Index: prpl.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/prpl.c,v retrieving revision 1.118 retrieving revision 1.119 diff -u -d -r1.118 -r1.119 --- prpl.c 21 Jun 2003 07:59:53 -0000 1.118 +++ prpl.c 21 Jun 2003 08:38:33 -0000 1.119 @@ -59,143 +59,6 @@ return NULL; } -static void proto_act(GtkObject *obj, struct proto_actions_menu *pam) -{ - if (pam->callback && pam->gc) - pam->callback(pam->gc); -} - -void do_proto_menu() -{ - GtkWidget *menuitem; - GtkWidget *submenu; - GaimPluginProtocolInfo *prpl_info = NULL; - GList *l; - GList *c; - struct proto_actions_menu *pam; - GaimConnection *gc = NULL; - int count = 0; - char buf[256]; - - if (!protomenu) - return; - - l = gtk_container_get_children(GTK_CONTAINER(protomenu)); - while (l) { - menuitem = l->data; - pam = g_object_get_data(G_OBJECT(menuitem), "proto_actions_menu"); - if (pam) - g_free(pam); - gtk_container_remove(GTK_CONTAINER(protomenu), GTK_WIDGET(menuitem)); - l = l->next; - } - - for (c = gaim_connections_get_all(); c != NULL; c = c->next) { - gc = c->data; - - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (prpl_info->actions && gc->login_time) - count++; - } - - if (!count) { - g_snprintf(buf, sizeof(buf), _("No actions available")); - menuitem = gtk_menu_item_new_with_label(buf); - gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); - gtk_widget_show(menuitem); - return; - } - - if (count == 1) { - GList *act; - - for (c = gaim_connections_get_all(); c != NULL; c = c->next) { - gc = c->data; - - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (prpl_info->actions && gc->login_time) - break; - } - - act = prpl_info->actions(gc); - - while (act) { - if (act->data) { - struct proto_actions_menu *pam = act->data; - menuitem = gtk_menu_item_new_with_label(pam->label); - gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); - g_signal_connect(G_OBJECT(menuitem), "activate", - G_CALLBACK(proto_act), pam); - g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", pam); - gtk_widget_show(menuitem); - } else { - gaim_separator(protomenu); - } - act = g_list_next(act); - } - } else { - for (c = gaim_connections_get_all(); c != NULL; c = c->next) { - GaimAccount *account; - GList *act; - GdkPixbuf *pixbuf, *scale; - GtkWidget *image; - - gc = c->data; - - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (!prpl_info->actions || !gc->login_time) - continue; - - account = gaim_connection_get_account(gc); - - g_snprintf(buf, sizeof(buf), "%s (%s)", - gaim_account_get_username(account), - gc->prpl->info->name); - - menuitem = gtk_image_menu_item_new_with_label(buf); - - pixbuf = create_prpl_icon(gc->account); - if(pixbuf) { - scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, - GDK_INTERP_BILINEAR); - image = gtk_image_new_from_pixbuf(scale); - g_object_unref(G_OBJECT(pixbuf)); - g_object_unref(G_OBJECT(scale)); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); - } - - gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); - gtk_widget_show(menuitem); - - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); - gtk_widget_show(submenu); - - act = prpl_info->actions(gc); - - while (act) { - if (act->data) { - struct proto_actions_menu *pam = act->data; - menuitem = gtk_menu_item_new_with_label(pam->label); - gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); - g_signal_connect(G_OBJECT(menuitem), "activate", - G_CALLBACK(proto_act), pam); - g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", - pam); - gtk_widget_show(menuitem); - } else { - gaim_separator(submenu); - } - act = g_list_next(act); - } - } - } -} - struct icon_data { GaimConnection *gc; char *who; Index: prpl.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/prpl.h,v retrieving revision 1.115 retrieving revision 1.116 diff -u -d -r1.115 -r1.116 --- prpl.h 14 Jun 2003 23:21:01 -0000 1.115 +++ prpl.h 21 Jun 2003 08:38:33 -0000 1.116 @@ -324,15 +324,6 @@ GaimPlugin *gaim_find_prpl(GaimProtocol type); /** - * Creates a menu of all protocol plugins and their protocol-specific - * actions. - * - * @note This should be UI-specific code, or rewritten in such a way as to - * not use any any GTK code. - */ -void do_proto_menu(void); - -/** * Shows a message saying that somebody added you as a buddy, and asks * if you would like to do the same. * |