📄 main-window-callbacks.c
字号:
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 + -