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

📄 imap-window-callbacks.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
  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 + -