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

📄 clipboard.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
				     (GCompareFunc) find_by_widget);	  if (gtmp)	    last = gtmp->data;	  edit = GTK_EDITABLE (node->relative);	  position = gtk_editable_get_position (edit);	  switch (node->delta)	    {	    case DELTA_DELETE_BLOCK:	      ignore_next = TRUE;	      gtk_editable_delete_text (edit, node->offset,					node->offset + node->length);	      break;	    case DELTA_ADD_BLOCK:	      ignore_next = TRUE;	      gtk_editable_set_position (edit, node->offset);	      dum = node->offset;	      ignore_next = TRUE;	      gtk_editable_insert_text (edit, node->charecter, node->length,					&dum);	      break;	    case DELTA_DELETE_ALL:	      ignore_next = TRUE;	      gtk_editable_delete_text (edit, 0, -1);	      break;	    }	  if (gtmp)	    {	      char *tmp = gtk_editable_get_chars (edit, 0, -1);	      last = gtmp->data;	      last->last = strdup (tmp);	      g_free (tmp);	    }	  if (node->charecter)	    free (node->charecter);	  node->last = NULL;	  undo_list = g_list_remove (undo_list, node);	  free (node);	}    }  if (undo_list)    {      GList *seek;      for (seek = undo_widgets; seek; seek = seek->next)	{	  gtk_widget_set_sensitive (seek->data, TRUE);	}    }  else    {      GList *seek;      for (seek = undo_widgets; seek; seek = seek->next)	{	  gtk_widget_set_sensitive (seek->data, FALSE);	}    }}voidundo_editable_changed (GtkEditable * editable){  GList *seek;  char *current;  if (ignore_next == TRUE)    {      ignore_next = FALSE;      return;    }  current = gtk_editable_get_chars (editable, 0, -1);  seek =    g_list_find_custom (undo_list, GTK_WIDGET (editable),			(GCompareFunc) find_by_widget);  if (seek)    {      UndoNode *last = seek->data;      if (!last)	{	  g_free (current);	  return;	}      if (!last->last)	{	  g_free (current);	  return;	}      if (strlen (current) > strlen (last->last))	{	  UndoNode *node = (UndoNode *) calloc (1, sizeof (UndoNode));	  node->relative = GTK_WIDGET (editable);	  node->offset = find_offset (current, last->last);	  g_return_if_fail (node->offset != -1);	  node->length = strlen (current) - strlen (last->last);	  node->delta = DELTA_DELETE_BLOCK;	  node->last = current;	  node->timestamp = time (NULL);	  add_node (node);	}      else	{	  UndoNode *node = (UndoNode *) calloc (1, sizeof (UndoNode));	  node->relative = GTK_WIDGET (editable);	  node->offset = find_offset (current, last->last);	  node->length = strlen (last->last) - strlen (current);	  node->charecter = (char *) calloc (node->length + 5, sizeof (char));	  memmove (node->charecter, last->last + node->offset, node->length);	  node->delta = DELTA_ADD_BLOCK;	  node->last = current;	  node->timestamp = time (NULL);	  add_node (node);	}      last->last = NULL;    }  else    {      UndoNode *node = (UndoNode *) calloc (1, sizeof (UndoNode));      node->relative = GTK_WIDGET (editable);      node->delta = DELTA_DELETE_ALL;      node->last = current;      node->timestamp = time (NULL);      add_node (node);    }  if (undo_list)    {      GList *seek;      for (seek = undo_widgets; seek; seek = seek->next)	{	  gtk_widget_set_sensitive (seek->data, TRUE);	}    }  else    {      GList *seek;      for (seek = undo_widgets; seek; seek = seek->next)	{	  gtk_widget_set_sensitive (seek->data, FALSE);	}    }#ifdef DMALLOC  if (current)    dmalloc_verify (current);#endif  return;}voidclip_handle_editable (GtkWidget * editable){#ifdef CLIPBOARD  gtk_signal_connect (GTK_OBJECT (editable), "focus_in_event",		      GTK_SIGNAL_FUNC (clip_focus_in_event), NULL);  gtk_signal_connect (GTK_OBJECT (editable), "button_press_event",		      GTK_SIGNAL_FUNC (clip_button_press_event), NULL);  gtk_signal_connect_after (GTK_OBJECT (editable), "button_press_event",			    GTK_SIGNAL_FUNC (clip_button_press_event_after),			    NULL);  if (GTK_EDITABLE (editable)->editable)    gtk_signal_connect (GTK_OBJECT (editable), "changed",			GTK_SIGNAL_FUNC (undo_editable_changed), NULL);  gtk_signal_connect (GTK_OBJECT (editable), "destroy",		      GTK_SIGNAL_FUNC (undo_destroy_notify), NULL);#endif}voidundo_widget_destroy_notify (GtkObject * object){  GtkWidget *widget = GTK_WIDGET (object);  undo_widgets = g_list_remove (undo_widgets, widget);}GtkWidget *clip_create_menu (GtkWidget ** undo, GtkAccelGroup * accel_group){  GtkWidget *menu;  GtkAccelGroup *menu_accels;  GtkWidget *menuitem, *tearoff;  menu = gtk_menu_new ();  gtk_widget_set_name (menu, "menu");  gtk_object_set_data (GTK_OBJECT (menu), "menu", menu);  menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (menu));  tearoff = gtk_tearoff_menu_item_new ();  gtk_widget_show (tearoff);  gtk_container_add (GTK_CONTAINER (menu), tearoff);  menuitem = gtk_menu_item_new_with_label (_("Cut"));  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  if (accel_group)    gtk_widget_add_accelerator (menuitem, "activate", accel_group,				GDK_x, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_cut), NULL);  menuitem = gtk_menu_item_new_with_label (_("Copy"));  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  if (accel_group)    gtk_widget_add_accelerator (menuitem, "activate", accel_group,				GDK_c, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_copy), NULL);  menuitem = gtk_menu_item_new_with_label (_("Paste"));  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  if (accel_group)    gtk_widget_add_accelerator (menuitem, "activate", accel_group,				GDK_v, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_paste), NULL);  menuitem = gtk_menu_item_new_with_label (_("Select All"));  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  if (accel_group)    gtk_widget_add_accelerator (menuitem, "activate", accel_group,				GDK_a, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_select_all), NULL);  menuitem = gtk_menu_item_new_with_label (_("Clear"));  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_clear), NULL);  menuitem = gtk_menu_item_new ();  gtk_widget_set_name (menuitem, "menuitem");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "menuitem", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  gtk_widget_set_sensitive (menuitem, FALSE);  menuitem = gtk_menu_item_new_with_label (_("Undo"));  gtk_widget_set_name (menuitem, "undo");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "undo", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (menu), menuitem);  if (accel_group)    gtk_widget_add_accelerator (menuitem, "activate", accel_group,				GDK_z, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);  gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		      GTK_SIGNAL_FUNC (clip_undo), NULL);  if (undo)    *undo = menuitem;  if (!undo_list)    gtk_widget_set_sensitive (menuitem, FALSE);  return menu;}GtkWidget *clip_create_menuitem (GtkWidget * parent, GtkAccelGroup * group){  GtkWidget *menu, *menuitem;  GtkWidget *undo;  menuitem = gtk_menu_item_new_with_label (_("Edit"));  menu = clip_create_menu (&undo, group);  gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);  gtk_widget_set_name (menuitem, "edit_base");  gtk_widget_ref (menuitem);  gtk_object_set_data_full (GTK_OBJECT (menu), "edit_base", menuitem,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menuitem);  gtk_container_add (GTK_CONTAINER (parent), menuitem);  gtk_signal_connect (GTK_OBJECT (undo), "destroy",		      GTK_SIGNAL_FUNC (undo_widget_destroy_notify), NULL);  undo_widgets = g_list_append (undo_widgets, undo);  return menuitem;}

⌨️ 快捷键说明

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