Mercurial > pidgin.yaz
comparison src/prpl.c @ 5936:1b56a833d665
[gaim-migrate @ 6376]
Moved do_proto_menu() from prpl.[ch] to
gaim_gtk_blist_update_protocol_actions() in gtkblist.[ch].
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sat, 21 Jun 2003 08:38:33 +0000 |
parents | e11b904c5bd7 |
children | 023c5f380b5c |
comparison
equal
deleted
inserted
replaced
5935:e11b904c5bd7 | 5936:1b56a833d665 |
---|---|
55 return plugin; | 55 return plugin; |
56 } | 56 } |
57 } | 57 } |
58 | 58 |
59 return NULL; | 59 return NULL; |
60 } | |
61 | |
62 static void proto_act(GtkObject *obj, struct proto_actions_menu *pam) | |
63 { | |
64 if (pam->callback && pam->gc) | |
65 pam->callback(pam->gc); | |
66 } | |
67 | |
68 void do_proto_menu() | |
69 { | |
70 GtkWidget *menuitem; | |
71 GtkWidget *submenu; | |
72 GaimPluginProtocolInfo *prpl_info = NULL; | |
73 GList *l; | |
74 GList *c; | |
75 struct proto_actions_menu *pam; | |
76 GaimConnection *gc = NULL; | |
77 int count = 0; | |
78 char buf[256]; | |
79 | |
80 if (!protomenu) | |
81 return; | |
82 | |
83 l = gtk_container_get_children(GTK_CONTAINER(protomenu)); | |
84 while (l) { | |
85 menuitem = l->data; | |
86 pam = g_object_get_data(G_OBJECT(menuitem), "proto_actions_menu"); | |
87 if (pam) | |
88 g_free(pam); | |
89 gtk_container_remove(GTK_CONTAINER(protomenu), GTK_WIDGET(menuitem)); | |
90 l = l->next; | |
91 } | |
92 | |
93 for (c = gaim_connections_get_all(); c != NULL; c = c->next) { | |
94 gc = c->data; | |
95 | |
96 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
97 | |
98 if (prpl_info->actions && gc->login_time) | |
99 count++; | |
100 } | |
101 | |
102 if (!count) { | |
103 g_snprintf(buf, sizeof(buf), _("No actions available")); | |
104 menuitem = gtk_menu_item_new_with_label(buf); | |
105 gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); | |
106 gtk_widget_show(menuitem); | |
107 return; | |
108 } | |
109 | |
110 if (count == 1) { | |
111 GList *act; | |
112 | |
113 for (c = gaim_connections_get_all(); c != NULL; c = c->next) { | |
114 gc = c->data; | |
115 | |
116 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
117 | |
118 if (prpl_info->actions && gc->login_time) | |
119 break; | |
120 } | |
121 | |
122 act = prpl_info->actions(gc); | |
123 | |
124 while (act) { | |
125 if (act->data) { | |
126 struct proto_actions_menu *pam = act->data; | |
127 menuitem = gtk_menu_item_new_with_label(pam->label); | |
128 gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); | |
129 g_signal_connect(G_OBJECT(menuitem), "activate", | |
130 G_CALLBACK(proto_act), pam); | |
131 g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", pam); | |
132 gtk_widget_show(menuitem); | |
133 } else { | |
134 gaim_separator(protomenu); | |
135 } | |
136 act = g_list_next(act); | |
137 } | |
138 } else { | |
139 for (c = gaim_connections_get_all(); c != NULL; c = c->next) { | |
140 GaimAccount *account; | |
141 GList *act; | |
142 GdkPixbuf *pixbuf, *scale; | |
143 GtkWidget *image; | |
144 | |
145 gc = c->data; | |
146 | |
147 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
148 | |
149 if (!prpl_info->actions || !gc->login_time) | |
150 continue; | |
151 | |
152 account = gaim_connection_get_account(gc); | |
153 | |
154 g_snprintf(buf, sizeof(buf), "%s (%s)", | |
155 gaim_account_get_username(account), | |
156 gc->prpl->info->name); | |
157 | |
158 menuitem = gtk_image_menu_item_new_with_label(buf); | |
159 | |
160 pixbuf = create_prpl_icon(gc->account); | |
161 if(pixbuf) { | |
162 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, | |
163 GDK_INTERP_BILINEAR); | |
164 image = gtk_image_new_from_pixbuf(scale); | |
165 g_object_unref(G_OBJECT(pixbuf)); | |
166 g_object_unref(G_OBJECT(scale)); | |
167 gtk_widget_show(image); | |
168 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
169 } | |
170 | |
171 gtk_menu_shell_append(GTK_MENU_SHELL(protomenu), menuitem); | |
172 gtk_widget_show(menuitem); | |
173 | |
174 submenu = gtk_menu_new(); | |
175 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
176 gtk_widget_show(submenu); | |
177 | |
178 act = prpl_info->actions(gc); | |
179 | |
180 while (act) { | |
181 if (act->data) { | |
182 struct proto_actions_menu *pam = act->data; | |
183 menuitem = gtk_menu_item_new_with_label(pam->label); | |
184 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
185 g_signal_connect(G_OBJECT(menuitem), "activate", | |
186 G_CALLBACK(proto_act), pam); | |
187 g_object_set_data(G_OBJECT(menuitem), "proto_actions_menu", | |
188 pam); | |
189 gtk_widget_show(menuitem); | |
190 } else { | |
191 gaim_separator(submenu); | |
192 } | |
193 act = g_list_next(act); | |
194 } | |
195 } | |
196 } | |
197 } | 60 } |
198 | 61 |
199 struct icon_data { | 62 struct icon_data { |
200 GaimConnection *gc; | 63 GaimConnection *gc; |
201 char *who; | 64 char *who; |