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

📄 main-window-callbacks.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 5 页
字号:
		char *cl_data[3];		afs=(AFS *)calloc (1, sizeof (AFS));		afs->data=strdup (msg);		afs->type=strdup ("message/rfc822");		cl_data[0]=strdup ("message/rfc822");		cl_data[1]=strdup ("Original Message");		cl_data[2]=(char *)calloc (20, sizeof (char)); 		snprintf (cl_data[2], 19, "%lu", (unsigned long)strlen (msg));		gtk_clist_set_row_data (clist, gtk_clist_append (clist, cl_data), afs); 		free (cl_data[0]);		free (cl_data[1]);		free (cl_data[2]);	}	}void send_on_its_merry_way (Message *msg, char *type) {	char *email, *first, *last;	RecipSignalData *recip ;	GtkWidget *window;	GtkTree *tree;	if (!msg)		return;	if (!type)		type=strdup ("Re:");	recip = calloc( 1, sizeof(RecipSignalData) ) ;	window=make_new_message_window (NULL, NULL);		if (strcasecmp (type, "re:")==0) {		tree=GTK_TREE (lw (window, "recip_tree"));                if ((msg->replyto)&&(strlen(msg->replyto)>0))                {                        if (!parse_from_line (msg->replyto, &email, &first, &last)) {                                if (email) free (email);                                if (first) free (first);                                if (last) free (last);                                if (!parse_from_line (msg->from, &email, &first, &last)) {                                        insert_warning ("Unable to parse from line\n");                                        if (email) free (email);                                        if (first) free (first);                                        if (last) free (last);                                        return;                                }                        }                }                else                {                                       if (!parse_from_line (msg->from, &email, &first, &last)) {                                insert_warning ("Unable to parse from line\n");                                if (email) free (email);                                if (first) free (first);                                if (last) free (last);                                return;                        }                }		gtk_tree_clear_items (tree, 0, g_list_length (tree->children));		recip -> tree = tree ;		recip -> email = email ;		recip -> type = 0 ;		new_message_window_add_recip( NULL, recip ) ;		if (email) free (email);		if (first) free (first);		if (last) free (last);	}	if (msg->subject) {		if (strncasecmp (msg->subject, type, strlen (type))==0) {			gtk_entry_set_text (GTK_ENTRY (lw (window, "subject_entry")), msg->subject);		} else {			email=(char *)calloc (strlen (msg->subject) + 10, sizeof (char));			sprintf (email, "%s %s", type, msg->subject);			gtk_entry_set_text (GTK_ENTRY (lw (window, "subject_entry")), email);			free (email);		}	}	if (strcasecmp (type, "re:")==0 && tm_globs->flags & REPLY_NONE)		return;	if (tm_globs->flags & REPLY_QUOTED && strcasecmp (type, "re:")==0) {		GtkText *text=GTK_TEXT (lw (window, "body_textbox"));		char *message;		message=message_get_reply_quoted (msg);		gtk_text_insert (text, NULL, NULL, NULL, message, -1);		free (message);	} else {                GtkCList *clist=GTK_CLIST (lw (window, "attachment_clist"));                AFS *afs;		char *message, *cl_data[3];		message=message_load (folder_seek (folder_seek_by_name (msg->rfolder)), msg);				g_return_if_fail (message != NULL);				afs=(AFS *)calloc (1, sizeof (AFS));		afs->data=strdup (message);		afs->type=strdup ("message/rfc822");		cl_data[0]=strdup ("message/rfc822");		cl_data[1]=strdup ("Original Message");		cl_data[2]=(char *)calloc (20, sizeof (char)); 		snprintf (cl_data[2], 19, "%lu", (unsigned long)strlen (message));		free (message);		gtk_clist_set_row_data (clist, gtk_clist_append (clist, cl_data), afs);		free (cl_data[0]);		free (cl_data[1]);		free (cl_data[2]);	}}void replyto_clicked (GtkWidget *widget, gpointer data) {	send_on_its_merry_way (tm_globs->msg_selected, "Re:");}void forward_clicked (GtkWidget *widget, gpointer data) {	send_on_its_merry_way (tm_globs->msg_selected, "Fwd:");}void destroy_message_popup (GtkWidget *widget, gpointer data) {	gtk_widget_destroy (tm_globs->message_popup);	tm_globs->message_popup=NULL;}void replyto_activate (GtkWidget *widget, gpointer data) {	replyto_clicked (widget, data);	destroy_message_popup (widget, data);}void replytoall_activate (GtkWidget *widget, gpointer data) {	reply_to_all_clicked (widget, data);	destroy_message_popup (widget, data);}void forward_activate (GtkWidget *widget, gpointer data) {	forward_clicked (widget, data);	destroy_message_popup (widget, data);}void move_to_activate (GtkWidget *widget, gpointer data) {	/* find the widget name */	GtkWidget *folder_ctree=lookup_widget (tm_globs->main_window, "folder_tree");	GtkWidget *label=GTK_BIN (widget)->child;	char *name=(char *)calloc (256, sizeof (char));	char *number=(char *)calloc (5, sizeof (char));	Folder *fl=tm_globs->visable, *nfl;	Message *msg=(Message *)data;	gtk_label_get (GTK_LABEL(label), &name);	if (strcmp (name, fl->name)==0) {		insert_message (_("That message is already in folder %s!\n"), name);	} else {		nfl=folder_seek (folder_seek_by_name (name));		nfl->total++;		msg->folder=strdup (name);		snprintf (number, 5, "%d", nfl->unread);		gtk_ctree_node_set_text (GTK_CTREE (folder_ctree), nfl->tree_item, 1, number);		snprintf (number, 5, "%d", nfl->total);		gtk_ctree_node_set_text (GTK_CTREE (folder_ctree), nfl->tree_item, 2, number);		gtk_clist_remove (GTK_CLIST (lookup_widget (tm_globs->main_window, "message_clist")), tm_globs->msg_row);	}	destroy_message_popup (widget, data);}/*void empty_folder_activate (GtkWidget *widget, gpointer data) {}*/void new_folder_activate (GtkWidget *widget, gpointer data) {	GtkWidget *tree=lookup_widget (tm_globs->create_folder, "folder_tree");	gtk_widget_show (tm_globs->create_folder);	if (data) gtk_tree_select_child (GTK_TREE (tree), ((Folder *)data)->ti);}void delete_folder_activate (GtkWidget *widget, gpointer data) {	Folder *folders=folder_first ();	Folder *fl=(Folder *)data;	char *home=(char *)calloc (1024, sizeof (char));	char *fn=(char *)calloc (1024, sizeof (char));	char *fnsmi=(char *)calloc (1024, sizeof (char));	sprintf (home, "$(HOME)");	env_srch_rep (home);	sprintf (fn, "%s/.tradeclient/%s", home, fl->name);	sprintf (fnsmi, "%s/.tradeclient/.%s.smi", home, fl->name);	if (unlink (fn)==-1) {		perror ("Cannot delete file");	}	if (unlink (fnsmi)==-1) {		perror ("Cannot delete file");	}        while (folders) {		if (folders->parent) {                if ((strcmp(folders->parent,fl->name))==0)			delete_folder_activate(NULL,folders);		}                folders=folders->next;        }	if(fl->parent)		if ((strlen(fl->parent))>0)			gtk_tree_remove_item (GTK_TREE (folder_seek			(folder_seek_by_name (fl->parent))->submenu), fl->ti);	gtk_ctree_remove_node (GTK_CTREE (lookup_widget (tm_globs->main_window, "folder_tree")), fl->tree_item);	folder_delete (fl->id);}void clicked_on_folder_in_create (GtkWidget *widget, gpointer data) {	GtkWidget *label=GTK_BIN ((GtkWidget *)data)->child;	char *name;	gtk_label_get (GTK_LABEL (label), &name);	tm_globs->create_folder_in=name;}void unclicked_on_folder_in_create (GtkWidget *widget, gpointer data) {	tm_globs->create_folder_in=NULL;}	void accept_create_folder (GtkWidget *widget, gpointer data) {	GtkWidget *entry;	char *entrytxt;	if (widget) {		entry=lookup_widget (widget, "folder_name");		entrytxt=gtk_entry_get_text (GTK_ENTRY (entry));		if (folder_seek_by_name (entrytxt)==-1) {			if (strlen (gtk_entry_get_text (GTK_ENTRY (entry)))>0) {				if (tm_globs->create_folder_in) {					create_new_folder (folder_seek (folder_create (entrytxt, tm_globs->create_folder_in)));				} else {					create_new_folder (folder_seek (folder_create (entrytxt, NULL)));				}			}			if (tm_globs->message_popup) gtk_widget_destroy (tm_globs->message_popup);			tm_globs->message_popup=NULL;			destroy_create_folder (NULL, NULL);		} else {			insert_message (_("A folder already exists with that name.  Please choose another"));		}	}}void accept_create_folder_two (GtkWidget *widget, gpointer data) {	GtkWidget *entry;	char *entrytxt;	if (widget) {		entry=lookup_widget (widget, "folder_name");		entrytxt=gtk_entry_get_text (GTK_ENTRY (entry));		if (folder_seek_by_name (entrytxt)==-1) {			if (strlen (gtk_entry_get_text (GTK_ENTRY (entry)))>0) {				if (tm_globs->create_folder_in) {					create_new_folder (folder_seek (folder_create (entrytxt, tm_globs->create_folder_in)));				} else {					create_new_folder (folder_seek (folder_create (entrytxt, NULL)));				}			}			destroy_create_folder (NULL, NULL);		} else {			insert_message (_("A folder already exists with that name.  Please choose another"));		}	}}void destroy_create_folder (GtkWidget *widget, gpointer data) {	gtk_widget_hide (tm_globs->create_folder);}void delete_folder_clicked (GtkWidget *widget, gpointer data) {/*	Folder *fold;	GtkWidget *folder_ctree=lookup_widget (tm_globs->main_window, "folder_tree");	GtkWidget *folder_tree=lookup_widget (tm_globs->create_folder, "folder_tree");	GtkWidget *message_clist=lookup_widget (tm_globs->main_window, "message_clist");	PopAccount *pop;	if (tm_globs->visable) {		fold=tm_globs->visable;		if (strcasecmp (fold->name, "inbox")==0) {			puma_message (0, "You cannot delete the Inbox!");			return;		}		if (strcasecmp (fold->name, "outbox")==0) {			puma_message (0, "You cannot delete the Outbox!");			return;		}		if (strcasecmp (fold->name, "trash")==0) {			puma_message (0, "You cannot delete the Trash! Try emptying it");			return;		}		if (strcasecmp (fold->name, "sent-items")==0) {			puma_message (0, "You cannot delete Sent-Items!");			return;		}		gtk_ctree_remove_node (GTK_CTREE (folder_ctree), fold->tree_item);		gtk_tree_remove_item (GTK_TREE (folder_tree), fold->ti);		gtk_clist_clear (GTK_CLIST (message_clist));		destroy_folder (fold);		pop=first_popaccount ();		while (pop) {			if (strcasecmp (pop->folder, fold->name)==0) {				pop->folder=strdup ("Inbox");			}			pop=pop->next;		}	} else {		puma_message (0, "Please highlight a folder first.");	}*/}void address_book_clicked (GtkWidget *widget, gpointer data) {	abook_widget_show (GTK_SIGNAL_FUNC (puma_die));}void save_message_activate (GtkWidget *widget, gpointer data) {	Message *msg=tm_globs->msg_selected;	if (msg) {		char *message=message_load (folder_seek (folder_seek_by_name (msg->rfolder)), msg);		char *tmps=(char *)calloc (strlen (msg->subject)+5, sizeof(char));		char *tmp=rm_crlf (msg->subject);		sprintf (tmps, "%s.eml", tmp);		if (tmp) free (tmp);		save_string (message, strlen (message), tmps);		if (tmps) free (tmps);	}}void message_clist_data_get (GtkWidget          *widget,		       GdkDragContext     *context,		       GtkSelectionData   *selection_data,		       guint               info,		       guint               time,		       gpointer            data2) {	if (info==TARGET_ROOTWIN) {		return;	} else {		if (info==TARGET_URL) {			gtk_selection_data_set (selection_data, selection_data->target, 8, "http://tradeclient.sourceforge.net/", 36);		} else {			if (info==TARGET_STRING)			gtk_selection_data_set (selection_data, selection_data->target, 8, "Unknown", strlen ("Unknown"));		}	}}void message_clist_data_delete () {}void folder_ctree_drag_motion (GtkWidget	       *widget,			    GdkDragContext     *context,			    gint                x,			    gint                y,			    guint               time) {	int row, col;	if (tm_globs->a1!=-1) {		gtk_signal_disconnect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), tm_globs->a1);		tm_globs->a1=-1;	}	if (tm_globs->a2!=-1) {		gtk_signal_disconnect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), tm_globs->a2);		tm_globs->a2=-1;	}	if (tm_globs->a3!=-1) {		gtk_signal_disconnect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), tm_globs->a3);		tm_globs->a3=-1;	}	gtk_clist_get_selection_info (GTK_CLIST (widget), x, y-24, &row, &col);	gtk_clist_select_row (GTK_CLIST (widget), row, col);}void folder_ctree_data_received (GtkWidget          *widget,  		    GdkDragContext     *context,			    gint                x,			    gint                y,			    GtkSelectionData   *data,			    guint               infob,			    guint               time) {	int row, col;	Folder *fl;	if (strcmp (data->data, "Unknown")==0) {		gtk_clist_get_selection_info (GTK_CLIST (widget), x, y-24, &row, &col);		fl=gtk_clist_get_row_data (GTK_CLIST (widget), row);		message_transpose_folders (fl);		GTK_CLIST (widget)->focus_row=row;		gtk_drag_finish (context, FALSE, FALSE, time);		gtk_clist_select_row (GTK_CLIST (widget), gtk_clist_find_row_from_data (GTK_CLIST (widget), tm_globs->visable), 0);	} else {		insert_warning (_("Warning: Drag authentication failed.  Do not drag from other applications into TradeClient.\n"));	}	if (tm_globs->a1==-1) 		tm_globs->a1=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "tree_select_row",		                                 GTK_SIGNAL_FUNC (clicked_on_folder), NULL);/*	if (tm_globs->a2==-1) 		tm_globs->a2=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "tree_unselect_row",		                                 GTK_SIGNAL_FUNC (unclicked_on_folder), NULL);*/	if (tm_globs->a3==-1) 		tm_globs->a3=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "button_press_event",		                                 GTK_SIGNAL_FUNC (t_clicked_on_folder), NULL);}void folder_ctree_drag_leave (GtkWidget	*widget, GdkDragContext *context, guint time) {	if (tm_globs->a1==-1) 		tm_globs->a1=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "tree_select_row",		                                 GTK_SIGNAL_FUNC (clicked_on_folder), NULL);/*	if (tm_globs->a2==-1) 		tm_globs->a2=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "tree_unselect_row",		                                 GTK_SIGNAL_FUNC (unclicked_on_folder), NULL);*/	if (tm_globs->a3==-1) 		tm_globs->a3=gtk_signal_connect (GTK_OBJECT (lookup_widget (tm_globs->main_window, "folder_tree")), "button_press_event",		                                 GTK_SIGNAL_FUNC (t_clicked_on_folder), NULL);	}void message_clist_clicked_column (GtkWidget *clist, gint column, gpointer data) {	if (GTK_CLIST (clist)->sort_type==GTK_SORT_ASCENDING) {

⌨️ 快捷键说明

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