[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Ayttm-commits] CVS: ayttm/src status.c,1.63,1.64
From: |
Colin Leroy <address@hidden> |
Subject: |
[Ayttm-commits] CVS: ayttm/src status.c,1.63,1.64 |
Date: |
Fri, 21 Mar 2003 14:46:39 -0500 |
Update of /cvsroot/ayttm/ayttm/src
In directory subversions:/tmp/cvs-serv19591/src
Modified Files:
status.c
Log Message:
nicer submenus in contact|account menus
Index: status.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/status.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -r1.63 -r1.64
--- status.c 21 Mar 2003 18:29:52 -0000 1.63
+++ status.c 21 Mar 2003 19:46:36 -0000 1.64
@@ -355,15 +355,78 @@
event->button, event->time );
}
-static void contact_menu(GdkEventButton * event, gpointer d )
+static int add_menu_items(GtkWidget *menu, int cur_service, int should_sep,
+ struct contact *conn, eb_account *acc)
{
- struct contact *conn=d;
- GtkWidget *menu, *submenu, *button;
+ GtkWidget *submenu, *button;
menu_data *md=NULL;
menu_item_data *mid=NULL;
ebmContactData *ecd=NULL;
LList *list=NULL;
+ int next_sep=0;
+ int last=-2;
+
+ md = GetPref(EB_CONTACT_MENU);
+ for(list = md->menu_items; list; list = list->next ) {
+ ecd=ebmContactData_new();
+ if (conn)
+ ecd->contact=conn->nick;
+ else if (acc) {
+ ecd->contact=acc->account_contact->nick;
+ ecd->remote_account=acc->handle;
+ }
+ mid=(menu_item_data *)list->data;
+ mid->data=(ebmCallbackData *)ecd;
+ if (mid->protocol != NULL) {
+ eb_local_account *a = find_suitable_local_account(NULL,
+ get_service_id(mid->protocol));
+ ecd->local_account = a ? a->handle:NULL;
+ }
+
+ if ( (mid->protocol == NULL
+ && cur_service==-1)
+ || (mid->protocol != NULL
+ && cur_service == get_service_id(mid->protocol)
+ &&
find_account_for_protocol(conn?conn:acc->account_contact,
+
get_service_id(mid->protocol)))
+ ) {
+ if(last != cur_service) {
+ if(should_sep)
+ eb_menu_button (GTK_MENU(menu), NULL,
NULL, NULL);
+ if (!acc && mid->protocol) {
+ char *title=g_strdup_printf(_("%s
options"),mid->protocol);
+ submenu = gtk_menu_new();
+ eb_menu_submenu (GTK_MENU(menu), title,
submenu,
+
ecd->local_account!=NULL);
+ gtk_widget_show(submenu);
+ } else {
+ submenu = menu;
+ }
+ }
+ eb_debug(DBG_CORE, "adding contact menu item: %s
(%s)\n", mid->label, mid->protocol);
+ eb_debug(DBG_CORE, "ecd->contact:%s, ecd->ra=%s,
ecd->la=%s\n",ecd->contact,ecd->remote_account,ecd->local_account);
+ button = gtk_menu_item_new_with_label(mid->label);
+ gtk_widget_set_sensitive(button, (mid->protocol==NULL
|| ecd->local_account!=NULL));
+ gtk_menu_append(GTK_MENU(submenu), button);
+ gtk_signal_connect(GTK_OBJECT(button), "activate",
+ eb_generic_menu_function, mid);
+ gtk_widget_show(button);
+ last=cur_service;
+ next_sep=(mid->protocol==NULL);
+ }
+ }
+ return next_sep;
+}
+
+static void contact_menu(GdkEventButton * event, gpointer d )
+{
+ struct contact *conn=d;
+ GtkWidget *menu, *submenu, *button;
+ menu_data *md=NULL;
+
int nbitems = 0;
+ int cur_service = -1;
+
menu = gtk_menu_new();
if (contact_list && conn->list_item)
@@ -397,29 +460,14 @@
/*** MIZHI
* code for viewing the logs
*/
+
+ eb_menu_button (GTK_MENU(menu), NULL, NULL, NULL); /* sep */
md = GetPref(EB_CONTACT_MENU);
if(md) {
- for(list = md->menu_items; list; list = list->next ) {
- ecd=ebmContactData_new();
- ecd->contact=conn->nick;
- mid=(menu_item_data *)list->data;
- mid->data=(ebmCallbackData *)ecd;
- if (mid->protocol != NULL) {
- eb_local_account *a =
find_suitable_local_account(NULL,
- get_service_id(mid->protocol));
- ecd->local_account = a ? a->handle:NULL;
- }
-
- if (mid->protocol == NULL
- || find_account_for_protocol(conn,
get_service_id(mid->protocol))) {
- eb_debug(DBG_CORE, "adding contact menu item:
%s (%d)\n", mid->label, mid->protocol);
- button =
gtk_menu_item_new_with_label(mid->label);
- gtk_menu_append(GTK_MENU(menu), button);
- gtk_signal_connect(GTK_OBJECT(button),
"activate",
- eb_generic_menu_function, mid);
- gtk_widget_show(button);
- }
+ int should_sep=0;
+ for (cur_service=-1; cur_service<0 ||
strcmp(get_service_name(cur_service),"unknown"); cur_service++) {
+ should_sep=(add_menu_items(menu,cur_service,
should_sep, conn, NULL)>0);
}
}
@@ -456,25 +504,14 @@
eb_menu_button (GTK_MENU(menu), _("Info..."),
GTK_SIGNAL_FUNC(get_info),d);
+ eb_menu_button (GTK_MENU(menu), NULL, NULL, NULL); /* sep */
+
md = GetPref(EB_CONTACT_MENU);
if(md) {
- for(list = md->menu_items; list; list = list->next ) {
- ecd=ebmContactData_new();
- ecd->contact=acc->account_contact->nick;
- mid=(menu_item_data *)list->data;
- mid->data=(ebmCallbackData *)ecd;
-
- ecd->local_account = acc->handle;
-
- if (mid->protocol == NULL || !strcmp(mid->protocol,
get_service_name(acc->service_id))) {
- eb_debug(DBG_CORE, "adding account menu item:
%s (%d)\n", mid->label, mid->protocol);
- button =
gtk_menu_item_new_with_label(mid->label);
- gtk_menu_append(GTK_MENU(menu), button);
- gtk_signal_connect(GTK_OBJECT(button),
"activate",
- eb_generic_menu_function, mid);
- gtk_widget_show(button);
- }
- }
+ int should_sep=0;
+
+ should_sep=(add_menu_items(menu,-1, should_sep, NULL, acc)>0);
+ add_menu_items(menu,acc->service_id, should_sep, NULL, acc);
}
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Ayttm-commits] CVS: ayttm/src status.c,1.63,1.64,
Colin Leroy <address@hidden> <=
- Prev by Date:
[Ayttm-commits] CVS: ayttm ChangeLog,1.366,1.367 configure.in,1.361,1.362
- Next by Date:
[Ayttm-commits] CVS: ayttm/modules/msn2 msn.C,1.81,1.82
- Previous by thread:
[Ayttm-commits] CVS: ayttm ChangeLog,1.366,1.367 configure.in,1.361,1.362
- Next by thread:
[Ayttm-commits] CVS: ayttm/modules/msn2 msn.C,1.81,1.82
- Index(es):