*
*/
-
+#define GTK_TEXT_USE_INTERNAL_UNSUPPORTED_API
#include "gtktextbtree.h"
static void gtk_text_mark_init (GtkTextMark *mark);
if (seg)
{
- g_return_if_fail (seg->body.mark.tree == NULL);
-
if (seg->body.mark.tree != NULL)
g_warning ("GtkTextMark being finalized while still in the buffer; "
"someone removed a reference they didn't own! Crash "
mark->segment = NULL;
}
+
+ /* chain parent_class' handler */
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
}
/**
- * gtk_text_mark_is_visible:
+ * gtk_text_mark_get_visible:
* @mark: a #GtkTextMark
*
* Returns %TRUE if the mark is visible (i.e. a cursor is displayed
* Return value: %TRUE if visible
**/
gboolean
-gtk_text_mark_is_visible (GtkTextMark *mark)
+gtk_text_mark_get_visible (GtkTextMark *mark)
{
GtkTextLineSegment *seg;
{
GtkTextLineSegment *seg;
- g_return_val_if_fail (mark != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), FALSE);
seg = mark->segment;
return seg->body.mark.tree == NULL;
}
+/**
+ * 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: the mark's #GtkTextBuffer
+ **/
+GtkTextBuffer*
+gtk_text_mark_get_buffer (GtkTextMark *mark)
+{
+ GtkTextLineSegment *seg;
+
+ g_return_val_if_fail (GTK_IS_TEXT_MARK (mark), FALSE);
+
+ seg = mark->segment;
+
+ if (seg->body.mark.tree == NULL)
+ return NULL;
+ else
+ return _gtk_text_btree_get_buffer (seg->body.mark.tree);
+}
+
+/**
+ * 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 == >k_text_left_mark_type;
+}
+
/*
* Macro that determines the size of a mark segment:
*/
* a mark lies in a range of characters being deleted.
*
* Results:
- * Returns 1 to indicate that deletion has been rejected.
+ * Returns 1 to indicate that deletion has been rejected,
+ * or 0 otherwise
*
* Side effects:
- * None (even if the whole tree is being deleted we don't
- * free up the mark; it will be done elsewhere).
+ * Frees mark if tree is going away
*
*--------------------------------------------------------------
*/
static gboolean
-mark_segment_delete_func (GtkTextLineSegment *segPtr,
+mark_segment_delete_func (GtkTextLineSegment *seg,
GtkTextLine *line,
gboolean tree_gone)
{
- return TRUE;
+ if (tree_gone)
+ {
+ _gtk_text_btree_release_mark_segment (seg->body.mark.tree, seg);
+ return FALSE;
+ }
+ else
+ return TRUE;
}
/*