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; }
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; } }