⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abook-callbacks.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 3 页
字号:
		g_list_free (list);	list=l;}void abook_widget_selector_lsel (GtkCTree *ctree, GtkCTreeNode *node, gint column) {	lsel=node;}void abook_widget_selector_lunsel (GtkCTree *ctree, GtkCTreeNode *node, gint column) {	lsel=NULL;}void abook_widget_selector_rsel (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {	rsel=row;}void abook_widget_selector_runsel (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {	rsel=-1;}void abook_widget_selector_add (GtkWidget *widget, gint type) {  int row ;  char *cl_data[2] ;  GList *tmp ;  Abook_rd *rd ;  GtkCTree *ctree ;  GtkCList *clist ;  clist=GTK_CLIST (lw (widget, "select_clist"));  ctree=GTK_CTREE (lw (widget, "entry_ctree"));  rd = gtk_ctree_node_get_row_data (ctree, lsel) ;  if (rd) {    tmp=g_list_find_custom (list, rd, (GCompareFunc)my_compare_func);    if (tmp) {      row=gtk_clist_find_by_row_data_custom (clist, rd, (GCompareFunc)my_compare_func);      gtk_clist_set_text (clist, row, 1, g_list_nth_data (types, type));      if (rd->entry) {	rd->entry->type=type;      } else {	rd->group->type=type;      }    } else {      cl_data[0]=(char *)calloc( 4096, sizeof (char) );      cl_data[1]=g_list_nth_data (types, type);      if (rd->entry) {	rd->entry->type=type;#if 0	format_name (cl_data[0], rd->entry->first, rd->entry->last);#else	format_name (4096, cl_data[0], rd->entry->first, rd->entry->last, rd->entry->def_email );#endif      } else {	rd->group->type=type;	cl_data[0]=strdup (rd->group->name);      }      row=gtk_clist_append (clist, cl_data);      free (cl_data[0]);      gtk_clist_set_row_data (clist, row, rd);      list=g_list_append (list, rd);    }  }  return ;}void abook_widget_selector_del (GtkWidget *widget) {	GtkCList *clist=GTK_CLIST (lw (widget, "select_clist"));	if (rsel == -1)		return;	{//	for (seek=rsel;seek;seek=seek->next) {		Abook_rd *rd=gtk_clist_get_row_data (clist, rsel);		if (!rd) return;#if DEBUG > 4		if (rd->entry)			printf ("Deleting entry: %s %s\n", rd->entry->first, rd->entry->last);		else 			printf ("Deleting group: %s\n", rd->group->name);#endif		gtk_clist_remove (clist, rsel);		list=g_list_remove (list, rd);		rsel=-1;	}}void entry_ctree_clicked_column (GtkWidget *clist, gint column, gpointer data) {	if (GTK_CLIST (clist)->sort_type==GTK_SORT_ASCENDING) {	    GTK_CLIST (clist)->sort_type=GTK_SORT_DESCENDING;	} else {	    GTK_CLIST (clist)->sort_type=GTK_SORT_ASCENDING;	}	gtk_clist_freeze (GTK_CLIST(clist));	gtk_clist_set_sort_column (GTK_CLIST(clist), column);	gtk_clist_sort (GTK_CLIST (clist));	gtk_clist_thaw (GTK_CLIST (clist));}void abook_widget_selector_changebook (GtkWidget *widget, Abook *abook) {	abook_widget_rehash_abook_clist (abook, GTK_CTREE (lw (widget, "entry_ctree")));}void abook_widget_selector_accept (GtkWidget *widget, UserData *data) {  int row ;  int type ;  char *addr ;  char *send ;  int retValue ;  Recipient *recp;  GList *ret=NULL;  GtkCList *clist ;  /* Fetch the list of email addresses that have been added */#if 1  clist=GTK_CLIST (lw (widget, "select_clist"));  /* Okay, walk through the list of nodes in our list */  row = 0 ;  addr = send = NULL ;  while( (retValue = gtk_clist_get_text( clist, row, 0, &addr )) )    {      /* Now that we have the text, get the send type */      retValue = gtk_clist_get_text( clist, row, 1, &send ) ;#if DEBUG > 3      printf( "addr = '%s %s'\n", send, addr ) ;#endif      /*       * Data switch breaks out as:       * C = CC(1), B= BCC(2) , R = Required(0), Resource(2), O = Optional(2)       * where 0 = To, 1 = CC, 2 = BCC       */      switch( send[0] )	{	case 'C':	  type = 1 ;	  break ;	case 'B':	  type = 2 ;	  break ;	case 'R':	  if( strcasecmp( send, "Required" ) == 0 ) type = 0 ;	  else type = 2 ;	  break ;	case 'O':	  type = 1 ;	  break ;	default:  	  /* This addresses TO and any screw ups */	  type = 0 ;	  break ;	}      /* Now that we have our data items, let's add them to the real recip list */      recp = (Recipient *)malloc( sizeof(Recipient) ) ;      recp->email=strdup( addr ) ;      recp->type=type ;      ret = g_list_append( ret, recp ) ;      /* Gotta advance the row index else we loop infintium */      row++ ;    }#else  for (seek=list;seek;seek=seek->next) {    rd=seek->data;    if (rd->entry) {      recp=(Recipient *)calloc(1, sizeof (Recipient));      recp->email=strdup(rd->entry->def_email);      recp->type=rd->entry->type;      ret=g_list_append (ret, recp);    } else {      if (rd->group->email) {	recp=(Recipient *)calloc(1, sizeof (Recipient));	recp->email=strdup(rd->group->email);	recp->type=rd->group->type;	ret=g_list_append (ret, recp);      } else {	GList *members=abook_group_get_members (rd->group);	GList *tmp;	for (tmp=members;tmp;tmp=tmp->next) {	  Abook_entry *entry=tmp->data;	  recp=(Recipient *)calloc(1, sizeof (Recipient));	  recp->email=strdup(entry->def_email);	  recp->type=rd->group->type;	  ret=g_list_append (ret, recp);	}      }    }  }#endif	  if (data->func)     data->func (ret, data->data); // uhhmm. Ok ;)		  abook_widget_selector_destroy (widget, NULL, data);  return ;}void abook_widget_selector_cancel (GtkWidget *widget, gpointer data) {	abook_widget_selector_destroy (widget, NULL, data);}void abook_widget_selector_destroy (GtkWidget *widget, GdkEvent *event, gpointer data) {  rsel=-1;  lsel=NULL;#ifdef DMALLOC  dmalloc_verify( 0 ) ;#endif  g_list_free (list);list=NULL;#if 0  if( data ) free( data ) ;#endif  abook_destroy_dummys ();  gtk_widget_destroy (lw (widget, "selector"));#if 0  if (abook_widget)     abook_widget_rehash_abook_clist (current_abook, GTK_CTREE (lw (abook_widget, "entry_ctree")));#endif#ifdef DMALLOC  dmalloc_verify( 0 ) ;#endif  return ;}void abook_widget_selector_search_changed (GtkEditable *editable) {	char *tmp=gtk_entry_get_text (GTK_ENTRY (editable));	GtkCTree *ctree=GTK_CTREE (lw (GTK_WIDGET (editable), "entry_ctree"));	GtkCTreeNode *node=NULL;	Abook_entry *entry;	if (current_abook==NULL)		return;	entry=abook_entry_seek_name_in_part (current_abook, tmp);	if (entry) {		GList *seek;		for (seek=entry->nodes;seek;seek=seek->next)			node=seek->data;		gtk_ctree_select (ctree, node);		gtk_ctree_node_moveto (ctree, node, 0, 0, 0);	} else {		gtk_clist_unselect_all (GTK_CLIST (ctree));			}}GtkSignalFunc updator_func=NULL;gpointer updator_func_data=NULL;void abook_widget_selector_set_updator (GtkSignalFunc func, gpointer data) {	updator_func=func;	updator_func_data=data;}void abook_widget_selector_search_custom (GtkWidget *widget, gpointer data) {	char *text=gtk_entry_get_text (GTK_ENTRY (lw (widget, "find_entry")));	if (!current_abook)		return;	if (strcmp (current_abook->name, gabName )==0) {		Abook_entry *entry=abook_entry_seek_name_in_part (current_abook, text);		GtkCTree *ctree=GTK_CTREE (lw (widget, "entry_ctree"));		GtkCTreeNode *node=NULL;		GList *seek;#ifdef WANTLDAP		gab_update_search (NULL, text);#endif		entry=abook_entry_seek_name_in_part (current_abook, text);		abook_widget_rehash_abook_clist (current_abook, ctree);   		if (!entry) {			if (strlen(text))				insert_message (_("'%s' Not found\n"), text);			return;		}		for (seek=entry->nodes;seek;seek=seek->next)			node=seek->data;		gtk_ctree_select (ctree, node);		gtk_ctree_node_moveto (ctree, node, 0, 0, 0);			}	}void goto_webpage_callback (GtkWidget *widget, GtkWidget *webpage) {  char *url = gtk_entry_get_text (GTK_ENTRY (webpage));  char *browser = getenv ("BROWSER");  char *command;  char *handler = NULL;  char *orph ;  MimeType *tmpmtype = mime_type_search_ext ("html");   if (!strlen(url)) return;  if (tmpmtype) {    handler = (char *)calloc (strlen (orph=cut_string(tmpmtype->handle, ' ', 1, 1)),		    sizeof (char));    free( orph ) ;    sprintf (handler, "%s", orph=cut_string(tmpmtype->handle, ' ', 1, 1));    free( orph ) ;  }  if (browser) {#if DEBUG > 3    printf ("using $BROWSER.\n");#endif    command = (char *)calloc (strlen (browser) + 1 + strlen (url) + 2,		    sizeof (char));    sprintf (command, "%s %s &", browser, url);  } else if (strlen (handler)) {#if DEBUG > 3    printf ("using MIME type for text/html.\n");#endif    command = (char *)calloc (strlen (handler) + 1 + strlen (url) + 2,		    sizeof (char));    sprintf (command, "%s %s &", handler, url);  } else {#if DEBUG > 3    printf ("using the default, netscape.\n");#endif    command = (char *)calloc (strlen ("netscape") + 1 + strlen (url) + 2,		    sizeof (char));    sprintf (command, "netscape %s &", url);  }  if (handler) free (handler);    if (command) {#if DEBUG > 3    printf ("executing \"%s\"...\n", command);#endif    system (command);    free (command);  }}void abook_entry_bpe(GtkWidget *widget, GdkEvent *event, gpointer data) {        if (event->type == GDK_BUTTON_PRESS) return;        abook_widget_edit_entry (widget, NULL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -