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

📄 gtklist.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))    gtk_list_end_drag_selection (list);  if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)    gtk_list_end_selection (list);  container = GTK_CONTAINER (list);  switch (list->selection_mode)    {    case GTK_SELECTION_BROWSE:      if (container->focus_child)	{	  gtk_list_select_child (list, container->focus_child);	  return;	}      break;    case GTK_SELECTION_EXTENDED:      g_list_free (list->undo_selection);      g_list_free (list->undo_unselection);      list->undo_selection = NULL;      list->undo_unselection = NULL;      if (list->children &&	  GTK_WIDGET_STATE (list->children->data) != GTK_STATE_SELECTED)	gtk_list_fake_toggle_row (list, GTK_WIDGET (list->children->data));      list->anchor_state =  GTK_STATE_SELECTED;      list->anchor = 0;      list->drag_pos = 0;      list->undo_focus_child = container->focus_child;      gtk_list_update_extended_selection (list, g_list_length(list->children));      gtk_list_end_selection (list);      return;    case GTK_SELECTION_MULTIPLE:      for (work = list->children; work; work = work->next)	{	  if (GTK_WIDGET_STATE (work->data) == GTK_STATE_NORMAL)	    gtk_list_select_child (list, GTK_WIDGET (work->data));	}      return;    default:      break;    }}voidgtk_list_unselect_all (GtkList *list){  GtkContainer *container;  GtkWidget *item;  GList *work;   g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  if (!list->children)    return;  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))    gtk_list_end_drag_selection (list);  if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)    gtk_list_end_selection (list);  container = GTK_CONTAINER (list);  switch (list->selection_mode)    {    case GTK_SELECTION_BROWSE:      if (container->focus_child)	{	  gtk_list_select_child (list, container->focus_child);	  return;	}      break;    case GTK_SELECTION_EXTENDED:      gtk_list_reset_extended_selection (list);      break;    default:      break;    }  work = list->selection;  while (work)    {      item = work->data;      work = work->next;      gtk_list_unselect_child (list, item);    }}voidgtk_list_extend_selection (GtkList       *list,			   GtkScrollType  scroll_type,			   gfloat         position,			   gboolean       auto_start_selection){  GtkContainer *container;  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||      list->selection_mode != GTK_SELECTION_EXTENDED)    return;  container = GTK_CONTAINER (list);  if (auto_start_selection)    {      gint focus_row;      focus_row = g_list_index (list->children, container->focus_child);      gtk_list_set_anchor (list, list->add_mode, focus_row,			   container->focus_child);    }  else if (list->anchor < 0)    return;  gtk_list_move_focus_child (list, scroll_type, position);  gtk_list_update_extended_selection     (list, g_list_index (list->children, container->focus_child));}voidgtk_list_end_drag_selection (GtkList *list){  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  list->drag_selection = FALSE;  if (GTK_WIDGET_HAS_GRAB (list))    {      gtk_grab_remove (GTK_WIDGET (list));      if (gdk_pointer_is_grabbed())	gdk_pointer_ungrab (GDK_CURRENT_TIME);    }  if (list->htimer)    {      gtk_timeout_remove (list->htimer);      list->htimer = 0;    }  if (list->vtimer)    {      gtk_timeout_remove (list->vtimer);      list->vtimer = 0;    }}voidgtk_list_start_selection (GtkList *list){  GtkContainer *container;  gint focus_row;  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))    return;  container = GTK_CONTAINER (list);  if ((focus_row = g_list_index (list->selection, container->focus_child))      >= 0)    gtk_list_set_anchor (list, list->add_mode,			 focus_row, container->focus_child);}voidgtk_list_end_selection (GtkList *list){  gint i;  gint e;  gboolean top_down;  GList *work;  GtkWidget *item;  gint item_index;  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||      list->anchor < 0)    return;  i = MIN (list->anchor, list->drag_pos);  e = MAX (list->anchor, list->drag_pos);  top_down = (list->anchor < list->drag_pos);  list->anchor = -1;  list->drag_pos = -1;    if (list->undo_selection)    {      work = list->selection;      list->selection = list->undo_selection;      list->undo_selection = work;      work = list->selection;      while (work)	{	  item = work->data;	  work = work->next;	  item_index = g_list_index (list->children, item);	  if (item_index < i || item_index > e)	    {	      gtk_widget_set_state (item, GTK_STATE_SELECTED);	      gtk_list_unselect_child (list, item);	      list->undo_selection = g_list_prepend (list->undo_selection,						     item);	    }	}    }      if (top_down)    {      for (work = g_list_nth (list->children, i); i <= e;	   i++, work = work->next)	{	  item = work->data;	  if (g_list_find (list->selection, item))	    {	      if (item->state == GTK_STATE_NORMAL)		{		  gtk_widget_set_state (item, GTK_STATE_SELECTED);		  gtk_list_unselect_child (list, item);		  list->undo_selection = g_list_prepend (list->undo_selection,							 item);		}	    }	  else if (item->state == GTK_STATE_SELECTED)	    {	      gtk_widget_set_state (item, GTK_STATE_NORMAL);	      list->undo_unselection = g_list_prepend (list->undo_unselection,						       item);	    }	}    }  else    {      for (work = g_list_nth (list->children, e); i <= e;	   e--, work = work->prev)	{	  item = work->data;	  if (g_list_find (list->selection, item))	    {	      if (item->state == GTK_STATE_NORMAL)		{		  gtk_widget_set_state (item, GTK_STATE_SELECTED);		  gtk_list_unselect_child (list, item);		  list->undo_selection = g_list_prepend (list->undo_selection,							 item);		}	    }	  else if (item->state == GTK_STATE_SELECTED)	    {	      gtk_widget_set_state (item, GTK_STATE_NORMAL);	      list->undo_unselection = g_list_prepend (list->undo_unselection,						       item);	    }	}    }  for (work = g_list_reverse (list->undo_unselection); work; work = work->next)    gtk_list_select_child (list, GTK_WIDGET (work->data));}voidgtk_list_toggle_row (GtkList   *list,		     GtkWidget *item){  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  g_return_if_fail (item != NULL);  g_return_if_fail (GTK_IS_LIST_ITEM (item));  switch (list->selection_mode)    {    case GTK_SELECTION_EXTENDED:    case GTK_SELECTION_MULTIPLE:    case GTK_SELECTION_SINGLE:      if (item->state == GTK_STATE_SELECTED)	{	  gtk_list_unselect_child (list, item);	  return;	}    case GTK_SELECTION_BROWSE:      gtk_list_select_child (list, item);      break;    }}voidgtk_list_toggle_focus_row (GtkList *list){  GtkContainer *container;  gint focus_row;  g_return_if_fail (list != 0);  g_return_if_fail (GTK_IS_LIST (list));  container = GTK_CONTAINER (list);  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||      !container->focus_child)    return;  switch (list->selection_mode)    {    case  GTK_SELECTION_SINGLE:    case  GTK_SELECTION_MULTIPLE:      gtk_list_toggle_row (list, container->focus_child);      break;    case GTK_SELECTION_EXTENDED:      if ((focus_row = g_list_index (list->children, container->focus_child))	  < 0)	return;      g_list_free (list->undo_selection);      g_list_free (list->undo_unselection);      list->undo_selection = NULL;      list->undo_unselection = NULL;      list->anchor = focus_row;      list->drag_pos = focus_row;      list->undo_focus_child = container->focus_child;      if (list->add_mode)	gtk_list_fake_toggle_row (list, container->focus_child);      else	gtk_list_fake_unselect_all (list, container->focus_child);            gtk_list_end_selection (list);      break;    default:      break;    }}voidgtk_list_toggle_add_mode (GtkList *list){  GtkContainer *container;  g_return_if_fail (list != 0);  g_return_if_fail (GTK_IS_LIST (list));    if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||      list->selection_mode != GTK_SELECTION_EXTENDED)    return;    container = GTK_CONTAINER (list);  if (list->add_mode)    {      list->add_mode = FALSE;      list->anchor_state = GTK_STATE_SELECTED;    }  else    list->add_mode = TRUE;    if (container->focus_child)    gtk_widget_queue_draw (container->focus_child);}voidgtk_list_undo_selection (GtkList *list){  GList *work;  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  if (list->selection_mode != GTK_SELECTION_EXTENDED ||      (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)))    return;    if (list->anchor >= 0)    gtk_list_end_selection (list);  if (!(list->undo_selection || list->undo_unselection))    {      gtk_list_unselect_all (list);      return;    }  for (work = list->undo_selection; work; work = work->next)    gtk_list_select_child (list, GTK_WIDGET (work->data));  for (work = list->undo_unselection; work; work = work->next)    gtk_list_unselect_child (list, GTK_WIDGET (work->data));  if (list->undo_focus_child)    {      GtkContainer *container;      container = GTK_CONTAINER (list);      if (container->focus_child &&	  GTK_WIDGET_HAS_FOCUS (container->focus_child))	gtk_widget_grab_focus (list->undo_focus_child);      else	gtk_container_set_focus_child (container, list->undo_focus_child);    }  list->undo_focus_child = NULL;   g_list_free (list->undo_selection);  g_list_free (list->undo_unselection);  list->undo_selection = NULL;  list->undo_unselection = NULL;}/* Private GtkList Selection Methods : * * gtk_real_list_select_child * gtk_real_list_unselect_child */static voidgtk_real_list_select_child (GtkList   *list,			    GtkWidget *child){  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  g_return_if_fail (child != NULL);  g_return_if_fail (GTK_IS_LIST_ITEM (child));  switch (child->state)    {    case GTK_STATE_SELECTED:    case GTK_STATE_INSENSITIVE:      break;    default:      gtk_list_item_select (GTK_LIST_ITEM (child));      break;    }}static voidgtk_real_list_unselect_child (GtkList	*list,			      GtkWidget *child){  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));  g_return_if_fail (child != NULL);  g_return_if_fail (GTK_IS_LIST_ITEM (child));  if (child->state == GTK_STATE_SELECTED)    gtk_list_item_deselect (GTK_LIST_ITEM (child));}/* Private GtkList Selection Functions : * * gtk_list_set_anchor * gtk_list_fake_unselect_all * gtk_list_fake_toggle_row * gtk_list_update_extended_selection * gtk_list_reset_extended_selection */static voidgtk_list_set_anchor (GtkList   *list,		     gboolean   add_mode,		     gint       anchor,		     GtkWidget *undo_focus_child){  GList *work;  g_return_if_fail (list != NULL);  g_return_if_fail (GTK_IS_LIST (list));    if (list->selection_mode != GTK_SELECTION_EXTENDED || list->anchor >= 0)    return;  g_list_free (list->undo_selection);  g_list_free (list->undo_unselection);  list->undo_selection = NULL;  list->undo_unselection = NULL;  if ((work = g_list_nth (list->children, anchor)))    {      if (add_mode)	gtk_list_fake_toggle_row (list, GTK_WIDGET (work->data));      else	{	  gtk_list_fake_unselect_all (list, GTK_WIDGET (work->data));	  list->anchor_state = GTK_STATE_SELECTED;	}    }  list->anchor = anchor;  list->drag_pos = anchor;  list->undo_focus_child = undo_focus_child;}static voidgtk_list_fake_unselect_all (GtkList   *list,			    GtkWidget *item){  GList *work;  if (item && item->state == GTK_STATE_NORMAL)    gtk_widget_set_state (item, GTK_STATE_SELECTED);  list->undo_selection = list->selection;  list->selection = NULL;    for (work = list->undo_selection; work; work = work->next)    if (work->data != item)      gtk_widget_set_state (GTK_WIDGET (work->data), GTK_STATE_NORMAL);}static voidgtk_list_fake_toggle_row (GtkList   *list,			  GtkWidget *item){  if (!item)    return;  

⌨️ 快捷键说明

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