Beispiel #1
0
static void
gbp_spell_navigator_change (GspellNavigator *navigator,
                            const gchar     *word,
                            const gchar     *change_to)
{
  GbpSpellNavigator *self = (GbpSpellNavigator *)navigator;
  GtkTextIter word_start;
  GtkTextIter word_end;
  g_autofree gchar *word_in_buffer = NULL;

  g_assert (GBP_IS_SPELL_NAVIGATOR (self));
  g_assert (GTK_IS_TEXT_MARK (self->word_start));
  g_assert (GTK_IS_TEXT_MARK (self->word_end));

  gtk_text_buffer_get_iter_at_mark (self->buffer, &word_start, self->word_start);
  gtk_text_buffer_get_iter_at_mark (self->buffer, &word_end, self->word_end);

  word_in_buffer = gtk_text_buffer_get_slice (self->buffer, &word_start, &word_end, TRUE);
  g_return_if_fail (word_in_buffer != NULL);
  g_return_if_fail (g_strcmp0 (word_in_buffer, word) == 0);

  gtk_text_buffer_begin_user_action (self->buffer);

  gtk_text_buffer_delete (self->buffer, &word_start, &word_end);
  gtk_text_buffer_insert (self->buffer, &word_start, change_to, -1);

  gtk_text_buffer_end_user_action (self->buffer);
}
static gboolean
gb_color_picker_document_monitor_queue_oper_cb (gpointer data)
{
  QueuedColorize *qc = data;

  g_assert (qc != NULL);
  g_assert (GB_IS_COLOR_PICKER_DOCUMENT_MONITOR (qc->self));
  g_assert (GTK_IS_TEXT_MARK (qc->begin));
  g_assert (GTK_IS_TEXT_MARK (qc->end));
  g_assert (GTK_TEXT_BUFFER (qc->buffer));

  block_signals (qc->self, IDE_BUFFER (qc->buffer));

  if (qc->buffer != NULL)
    {
      GtkTextIter begin;
      GtkTextIter end;

      gtk_text_buffer_get_iter_at_mark (qc->buffer, &begin, qc->begin);
      gtk_text_buffer_get_iter_at_mark (qc->buffer, &end, qc->end);

      if (qc->uncolorize)
        gb_color_picker_document_monitor_uncolorize (qc->self, qc->buffer, &begin, &end);
      else
        gb_color_picker_document_monitor_colorize (qc->self, qc->buffer, &begin, &end);

      gtk_text_buffer_delete_mark (qc->buffer, qc->begin);
      gtk_text_buffer_delete_mark (qc->buffer, qc->end);
    }

  unblock_signals (qc->self, IDE_BUFFER (qc->buffer));

  return G_SOURCE_REMOVE;
}
Beispiel #3
0
static void
gbp_spell_navigator_change_all (GspellNavigator *navigator,
                                const gchar     *word,
                                const gchar     *change_to)
{
  GbpSpellNavigator *self = (GbpSpellNavigator *)navigator;
  GtkTextIter iter;

  g_assert (GBP_IS_SPELL_NAVIGATOR (self));
  g_assert (GTK_IS_TEXT_MARK (self->start_boundary));
  g_assert (GTK_IS_TEXT_MARK (self->end_boundary));

  gtk_text_buffer_get_iter_at_mark (self->buffer, &iter, self->start_boundary);
  gtk_text_buffer_begin_user_action (self->buffer);

  while (TRUE)
    {
      gboolean found;
      GtkTextIter match_start;
      GtkTextIter match_end;
      GtkTextIter limit;

      gtk_text_buffer_get_iter_at_mark (self->buffer, &limit, self->end_boundary);
      found = gtk_text_iter_forward_search (&iter,
                                            word,
                                            GTK_TEXT_SEARCH_VISIBLE_ONLY |
                                            GTK_TEXT_SEARCH_TEXT_ONLY,
                                            &match_start,
                                            &match_end,
                                            &limit);

      if (!found)
        break;

      if (gbp_spell_utils_text_iter_starts_word (&match_start) &&
          gbp_spell_utils_text_iter_ends_word (&match_end))
        {
          gtk_text_buffer_delete (self->buffer, &match_start, &match_end);
          gtk_text_buffer_insert (self->buffer, &match_end, change_to, -1);
        }

      iter = match_end;
    }

  gtk_text_buffer_end_user_action (self->buffer);
}
Beispiel #4
0
/**
 * gtk_text_mark_get_left_gravity:
 * @mark: a #GtkTextMark
 * 
 * Determines whether the mark has left gravity.
 * 
 * Return value: %TRUE if the mark has left gravity, %FALSE otherwise
 **/
gboolean
gtk_text_mark_get_left_gravity (GtkTextMark *mark)
{
  GtkTextLineSegment *seg;

  g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), FALSE);
  
  seg = mark->segment;

  return seg->type == &gtk_text_left_mark_type;
}
Beispiel #5
0
/**
 * gtk_text_mark_get_buffer:
 * @mark: a #GtkTextMark
 * 
 * Gets the buffer this mark is located inside,
 * or %NULL if the mark is deleted.
 *
 * Return value: (transfer none): the mark's #GtkTextBuffer
 **/
GtkTextBuffer*
gtk_text_mark_get_buffer (GtkTextMark *mark)
{
  GtkTextLineSegment *seg;

  g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), NULL);

  seg = mark->segment;

  if (seg->body.mark.tree == NULL)
    return NULL;
  else
    return _gtk_text_btree_get_buffer (seg->body.mark.tree);
}
Beispiel #6
0
/**
 * gtk_text_mark_get_deleted:
 * @mark: a #GtkTextMark
 * 
 * Returns %TRUE if the mark has been removed from its buffer
 * with gtk_text_buffer_delete_mark(). See gtk_text_buffer_add_mark()
 * for a way to add it to a buffer again.
 * 
 * Return value: whether the mark is deleted
 **/
gboolean
gtk_text_mark_get_deleted (GtkTextMark *mark)
{
  GtkTextLineSegment *seg;

  g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), FALSE);

  seg = mark->segment;

  if (seg == NULL)
    return TRUE;

  return seg->body.mark.tree == NULL;
}
gboolean
ide_source_snippet_insert_set (IdeSourceSnippet *self,
                               GtkTextMark      *mark)
{
  GtkTextIter iter;

  g_return_val_if_fail (IDE_IS_SOURCE_SNIPPET (self), FALSE);
  g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), FALSE);

  gtk_text_buffer_get_iter_at_mark (self->buffer, &iter, mark);

  if (!ide_source_snippet_within_bounds (self, &iter))
    return FALSE;

  self->current_chunk = ide_source_snippet_get_index (self, &iter);

  return TRUE;
}