ayttm-commits
[Top][All Lists]
Advanced

[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,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]