static gchar *
ide_xml_indenter_format (IdeIndenter *indenter,
                         GtkTextView *view,
                         GtkTextIter *begin,
                         GtkTextIter *end,
                         gint        *cursor_offset,
                         GdkEventKey *trigger)
{
  IdeXmlIndenter *xml = (IdeXmlIndenter *)indenter;
  guint tab_width = 2;
  gint indent_width = -1;

  g_return_val_if_fail (IDE_IS_XML_INDENTER (xml), NULL);

  *cursor_offset = 0;

  if (GTK_SOURCE_IS_VIEW (view))
    {
      tab_width = gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (view));
      indent_width = gtk_source_view_get_indent_width (GTK_SOURCE_VIEW (view));
      if (indent_width != -1)
        tab_width = indent_width;
    }

  xml->tab_width = tab_width;
  xml->use_tabs = !gtk_source_view_get_insert_spaces_instead_of_tabs (GTK_SOURCE_VIEW (view));

  if (indent_width <= 0)
    xml->indent_width = tab_width;
  else
    xml->indent_width = indent_width;

  /* do nothing if we are in a cdata section */
  if (text_iter_in_cdata (begin))
    return NULL;

  switch (trigger->keyval)
    {
    case GDK_KEY_Return:
    case GDK_KEY_KP_Enter:
      if ((trigger->state & GDK_SHIFT_MASK) == 0)
        return ide_xml_indenter_indent (xml, begin, end, cursor_offset);
      return NULL;

    case GDK_KEY_slash:
      return ide_xml_indenter_maybe_unindent (xml, begin, end);

    case GDK_KEY_greater:
      return ide_xml_indenter_maybe_add_closing (xml, begin, end, cursor_offset);

    default:
      g_return_val_if_reached (NULL);
    }

  return NULL;
}
Exemple #2
0
static gboolean
check_previous (GtkSourceView   *view,
                ModelineOptions *previous,
                ModelineSet      set)
{
	GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
	   
	/* Do not restore default when this is the first time */
	if (!previous)
		return FALSE;

	/* Do not restore default when previous was not set */
	if (!(previous->set & set))
		return FALSE;

	/* Only restore default when setting has not changed */
	switch (set)
	{
		case MODELINE_SET_INSERT_SPACES:
			return gtk_source_view_get_insert_spaces_instead_of_tabs (view) ==
			       previous->insert_spaces;
		break;
		case MODELINE_SET_TAB_WIDTH:
			return gtk_source_view_get_tab_width (view) == previous->tab_width;
		break;
		case MODELINE_SET_INDENT_WIDTH:
			return gtk_source_view_get_indent_width (view) == previous->indent_width;
		break;
		case MODELINE_SET_WRAP_MODE:
			return gtk_text_view_get_wrap_mode (GTK_TEXT_VIEW (view)) ==
			       previous->wrap_mode;
		break;
		case MODELINE_SET_RIGHT_MARGIN_POSITION:
			return gtk_source_view_get_right_margin_position (view) ==
			       previous->right_margin_position;
		break;
		case MODELINE_SET_SHOW_RIGHT_MARGIN:
			return gtk_source_view_get_show_right_margin (view) ==
			       previous->display_right_margin;
		break;
		case MODELINE_SET_LANGUAGE:
		{
			GtkSourceLanguage *language = gtk_source_buffer_get_language (buffer);
			
			return (language == NULL && previous->language_id == NULL) ||
			       (language != NULL && g_strcmp0 (gtk_source_language_get_id (language),
			                                       previous->language_id) == 0);
		}
		break;
		default:
			return FALSE;
		break;
	}
}