📄 imap-window-callbacks.c
字号:
char *msg = NULL; int popup = 0; GtkWidget *popmenu; GList *msel = NULL; if (event->button == 3) { msel = GTK_CLIST (widget)->selection; if (!msel) return; popmenu = imap_window_popup_menu (widget, msel); gtk_menu_popup (GTK_MENU (popmenu), NULL, NULL, NULL, NULL, 3, 0); } else { if (event->button == 2) { popup = 1; } else { if (event->button != 1) { return; } } } if (!event) { popup = 0; } else { if (event->type == 5) { popup = 1; } } gtk_clist_get_selection_info (GTK_CLIST (widget), event->x, event->y, &row, &column); if (event->button == 2) { gtk_clist_unselect_all (GTK_CLIST (widget)); gtk_clist_select_row (GTK_CLIST (widget), row, column); } imapmsg = gtk_clist_get_row_data (GTK_CLIST (widget), row); if (!imapmsg) return; if (popup) { header = mail_fetchheader (tm_globs->mailstream, imapmsg->msgno); body = mail_fetchtext (tm_globs->mailstream, imapmsg->msgno); length = strlen (header) + strlen (body) + 2; msg = (char *) malloc (length * sizeof (char)); msg = strncpy (msg, header, length); msg = strncat (msg, body, length); gtk_clist_set_row_style (GTK_CLIST (widget), row, tm_globs->read_odd); gtk_widget_show (message_window_new_stream (msg)); }}voidon_imap_delete_clicked (GtkButton * button, gpointer user_data){ ImapInfo *imapinfo; GtkWidget *ctree = lookup_widget (tm_globs->main_window, "folder_ntree"); GtkCTreeNode *node = user_data; char *mbox; extern GList *nf_imap_folder_list; imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), node); mbox = cut_string (imapinfo->mailbox, '}', 2, 1); mmpopid = imapinfo->acct->id; if (mail_delete (tm_globs->mailstream, imapinfo->mailbox)) { mail_unsubscribe (tm_globs->mailstream, imapinfo->mailbox); nf_imap_folder_list = g_list_remove (nf_imap_folder_list, (gpointer) imapinfo->mailbox); } else { insert_error ("Unable to delete mailbox \"%s\" in account \"%s\"!\n", mbox, imapinfo->acct->name); } free (mbox); gtk_ctree_remove_node (GTK_CTREE (ctree), node); gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "yesno"));}voidon_imap_unsubscribe_clicked (GtkButton * button, gpointer user_data){ ImapInfo *imapinfo; GtkWidget *ctree = lookup_widget (tm_globs->main_window, "folder_ntree"); GtkCTreeNode *node = user_data; char *mbox; extern GList *nf_imap_folder_list; imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), node); mbox = cut_string (imapinfo->mailbox, '}', 2, 1); mmpopid = imapinfo->acct->id; mail_unsubscribe (tm_globs->mailstream, imapinfo->mailbox); nf_imap_folder_list = g_list_remove (nf_imap_folder_list, (gpointer) imapinfo->mailbox); free (mbox); gtk_ctree_remove_node (GTK_CTREE (ctree), node); gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "yesno"));}voidon_imap_delete_cancel_clicked (GtkButton * button, gpointer user_data){}voidon_imap_new_clicked (GtkButton * button, gpointer user_data){ GtkWidget *ac = lookup_widget (GTK_WIDGET (button), "combo_entry2"); GtkWidget *mb = lookup_widget (GTK_WIDGET (button), "entry1"); PopAccount *acct = seek_popaccount (seek_popaccount_by_name (gtk_entry_get_text (GTK_ENTRY (ac)))); char *mbox = gtk_entry_get_text (GTK_ENTRY (mb)); char *mailbox; if ((mbox) && (strlen (mbox))) { mailbox = (char *) calloc (4096, sizeof (char)); snprintf (mailbox, 4094, "{%s:%d/imap/user=\"%s\"}%s", acct->phost, acct->pport, acct->puser, mbox); mmpopid = acct->id; tm_globs->mailstream = mail_open (tm_globs->mailstream, mailbox, OP_HALFOPEN); if (!tm_globs->mailstream) return; if (mail_create (tm_globs->mailstream, mailbox)) { mail_subscribe (tm_globs->mailstream, mailbox); } else { insert_error ("Unable to create mailbox \"%s\" in account \"%s\"!\n", mbox, acct->name); } free (mailbox); } on_imap_new_cancel_clicked (button, NULL);}voidon_imap_new_cancel_clicked (GtkButton * button, gpointer user_data){ gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "window2"));}GtkWidget *imap_window_popup_menu (GtkWidget * widget, GList * msel){ GtkWidget *imapm_popup; GtkWidget *imapm_title; GtkWidget *m_sep0, *m_sep1; GtkWidget *replyto, *forward, *delete; GtkWidget *moveto, *move_menu; GtkWidget *copylocal, *copylocal_menu, *copy_folder; GList *seek; GtkWidget *m_mbox; extern GList *nf_imap_folder_list; char *mainmailbox, *mailbox, *tmp; ImapInfo *imapinfo; int length; Folder *fseek = folder_first (); imapm_popup = gtk_menu_new (); gtk_object_set_data (GTK_OBJECT (imapm_popup), "imapm_popup", imapm_popup); gtk_widget_show (imapm_popup); imapm_title = gtk_menu_item_new_with_label ("Message Actions"); gtk_widget_ref (imapm_title); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "imapm_title", imapm_title, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), imapm_title); gtk_widget_show (imapm_title); m_sep0 = gtk_menu_item_new (); gtk_widget_ref (m_sep0); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "m_sep0", m_sep0, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), m_sep0); gtk_widget_show (m_sep0); replyto = gtk_menu_item_new_with_label ("Reply To"); gtk_widget_ref (replyto); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "replyto", replyto, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), replyto); gtk_widget_show (replyto); forward = gtk_menu_item_new_with_label ("Forward"); gtk_widget_ref (forward); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "forward", forward, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), forward); gtk_widget_show (forward); delete = gtk_menu_item_new_with_label ("Delete"); gtk_widget_ref (delete); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "delete", delete, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), delete); gtk_widget_show (delete); m_sep1 = gtk_menu_item_new (); gtk_widget_ref (m_sep1); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "m_sep1", m_sep1, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), m_sep1); gtk_widget_show (m_sep1); moveto = gtk_menu_item_new_with_label ("Move to Folder"); gtk_widget_ref (moveto); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "moveto", moveto, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), moveto); gtk_widget_show (moveto); move_menu = gtk_menu_new (); gtk_object_set_data (GTK_OBJECT (imapm_popup), "move_menu", move_menu); gtk_widget_show (move_menu); gtk_menu_item_set_submenu (GTK_MENU_ITEM (moveto), move_menu); imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (lookup_widget (tm_globs->main_window, "folder_ntree")), GTK_CTREE_NODE (tm_globs->imap_node)); if (imapinfo->mailbox) { mainmailbox = strdup (imapinfo->mailbox); } else { mainmailbox = (char *) calloc (4096, sizeof (char)); snprintf (mainmailbox, 4094, "{%s:%d/imap/user=\"%s\"}%s", imapinfo->acct->phost, imapinfo->acct->pport, imapinfo->acct->puser, "INBOX"); } m_mbox = gtk_menu_item_new_with_label ("INBOX"); gtk_widget_show (m_mbox); gtk_container_add (GTK_CONTAINER (move_menu), m_mbox); gtk_signal_connect (GTK_OBJECT (m_mbox), "activate", GTK_SIGNAL_FUNC (nf_imap_moveto), (gpointer) "INBOX"); for (seek = nf_imap_folder_list; seek; seek = seek->next) { mailbox = seek->data; tmp = cut_string (mailbox, '}', 2, 1); length = strlen (mailbox) - strlen (tmp); if (strncmp (mainmailbox, mailbox, length) == 0) { m_mbox = gtk_menu_item_new_with_label (tmp); gtk_widget_show (m_mbox); gtk_container_add (GTK_CONTAINER (move_menu), m_mbox); gtk_signal_connect (GTK_OBJECT (m_mbox), "activate", GTK_SIGNAL_FUNC (nf_imap_moveto), (gpointer) strdup (tmp)); } free (tmp); } free (mainmailbox); copylocal = gtk_menu_item_new_with_label ("Make Copy in"); gtk_widget_ref (copylocal); gtk_object_set_data_full (GTK_OBJECT (imapm_popup), "copylocal", copylocal, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapm_popup), copylocal); gtk_widget_show (copylocal); copylocal_menu = gtk_menu_new (); gtk_object_set_data (GTK_OBJECT (imapm_popup), "copylocal_menu", copylocal_menu); gtk_widget_show (copylocal_menu); gtk_menu_item_set_submenu (GTK_MENU_ITEM (copylocal), copylocal_menu); while (fseek) { if ((strcmp (fseek->name, "Outbox") != 0) && (strcmp (fseek->name, "Sent-Items") != 0) && (strcmp (fseek->name, "Trash") != 0)) { copy_folder = gtk_menu_item_new_with_label (fseek->name); gtk_widget_show (copy_folder); gtk_container_add (GTK_CONTAINER (copylocal_menu), copy_folder); gtk_signal_connect (GTK_OBJECT (copy_folder), "activate", GTK_SIGNAL_FUNC (nf_imap_copyto), (gpointer) fseek); } fseek = fseek->next; } gtk_signal_connect (GTK_OBJECT (replyto), "activate", GTK_SIGNAL_FUNC (on_reply_activate), widget); gtk_signal_connect (GTK_OBJECT (forward), "activate", GTK_SIGNAL_FUNC (on_forward_activate), widget); gtk_signal_connect (GTK_OBJECT (delete), "activate", GTK_SIGNAL_FUNC (on_delete_activate), widget); return imapm_popup;}voidon_imap_subscribe_clicked (GtkButton * button, gpointer user_data){ GtkWidget *ctree = lookup_widget (GTK_WIDGET (button), "ctree1"); GList *seek; GtkWidget *node; ImapInfo *imapinfo; char *mailbox; if (GTK_CLIST (ctree)->selection) { for (seek = GTK_CLIST (ctree)->selection; seek; seek = seek->next) { node = seek->data; imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), GTK_CTREE_NODE (node)); if (imapinfo->mailbox) { mailbox = (char *) calloc (4096, sizeof (char)); snprintf (mailbox, 4094, "{%s:%d/imap/user=\"%s\"}%s", imapinfo->acct->phost, imapinfo->acct->pport, imapinfo->acct->puser, imapinfo->mailbox); mmpopid = imapinfo->acct->id; tm_globs->mailstream = mail_open (tm_globs->mailstream, mailbox, OP_HALFOPEN); if (!tm_globs->mailstream) return; mail_subscribe (tm_globs->mailstream, mailbox); free (mailbox); } } gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "window1")); } else { insert_message ("Please select a folder to subscribe to.\n"); }}voidon_imap_subscribe_cancel_clicked (GtkButton * button, gpointer user_data){ gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "window1"));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -