diff options
| author | Victor Kareh <[email protected]> | 2026-05-13 14:43:44 -0400 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-05-19 16:21:12 -0400 |
| commit | 4bd2f90bbede5fddfeb9964896dcd389db28cef3 (patch) | |
| tree | 2fd2f7d52e4c6b31e1608a7d7075453d6d2f88ff | |
| parent | 1b104d3b7e603996d5b95c61064d0e646f7dce57 (diff) | |
| download | atril-4bd2f90bbede5fddfeb9964896dcd389db28cef3.tar.bz2 atril-4bd2f90bbede5fddfeb9964896dcd389db28cef3.tar.xz | |
libdocument: Use a common annotation type for text markup annotations
And a type property for the different kinds of text markup annotations
Backported from https://gitlab.gnome.org/GNOME/evince/-/commit/28e04b43
| -rw-r--r-- | libdocument/ev-annotation.c | 74 | ||||
| -rw-r--r-- | libdocument/ev-annotation.h | 6 |
2 files changed, 73 insertions, 7 deletions
diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c index 55237cb9..d0e03ebb 100644 --- a/libdocument/ev-annotation.c +++ b/libdocument/ev-annotation.c @@ -68,6 +68,8 @@ struct _EvAnnotationAttachmentClass { struct _EvAnnotationTextMarkup { EvAnnotation parent; + + EvAnnotationTextMarkupType type; }; struct _EvAnnotationTextMarkupClass { @@ -110,6 +112,11 @@ enum { PROP_ATTACHMENT_ATTACHMENT = PROP_MARKUP_POPUP_IS_OPEN + 1 }; +/* EvAnnotationTextMarkup */ +enum { + PROP_TEXT_MARKUP_TYPE = PROP_MARKUP_POPUP_IS_OPEN + 1 +}; + G_DEFINE_ABSTRACT_TYPE (EvAnnotation, ev_annotation, G_TYPE_OBJECT) G_DEFINE_INTERFACE (EvAnnotationMarkup, ev_annotation_markup, EV_TYPE_ANNOTATION) G_DEFINE_TYPE_WITH_CODE (EvAnnotationText, ev_annotation_text, EV_TYPE_ANNOTATION, @@ -1237,6 +1244,51 @@ ev_annotation_attachment_set_attachment (EvAnnotationAttachment *annot, static void ev_annotation_text_markup_init (EvAnnotationTextMarkup *annot) { + EV_ANNOTATION (annot)->type = EV_ANNOTATION_TYPE_TEXT_MARKUP; +} + +static void +ev_annotation_text_markup_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EvAnnotationTextMarkup *annot = EV_ANNOTATION_TEXT_MARKUP (object); + + if (prop_id < PROP_TEXT_MARKUP_TYPE) { + ev_annotation_markup_set_property (object, prop_id, value, pspec); + return; + } + + switch (prop_id) { + case PROP_TEXT_MARKUP_TYPE: + annot->type = (EvAnnotationTextMarkupType) g_value_get_enum (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +ev_annotation_text_markup_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EvAnnotationTextMarkup *annot = EV_ANNOTATION_TEXT_MARKUP (object); + + if (prop_id < PROP_TEXT_MARKUP_TYPE) { + ev_annotation_markup_get_property (object, prop_id, value, pspec); + return; + } + + switch (prop_id) { + case PROP_TEXT_MARKUP_TYPE: + g_value_set_enum (value, annot->type); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } } static void @@ -1245,6 +1297,18 @@ ev_annotation_text_markup_class_init (EvAnnotationTextMarkupClass *klass) GObjectClass *g_object_class = G_OBJECT_CLASS (klass); ev_annotation_markup_class_install_properties (g_object_class); + + g_object_class->set_property = ev_annotation_text_markup_set_property; + g_object_class->get_property = ev_annotation_text_markup_get_property; + + g_object_class_install_property (g_object_class, + PROP_TEXT_MARKUP_TYPE, + g_param_spec_enum ("type", + "Type", + "The text markup annotation type", + EV_TYPE_ANNOTATION_TEXT_MARKUP_TYPE, + EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT, + G_PARAM_READWRITE)); } static void @@ -1255,10 +1319,8 @@ ev_annotation_text_markup_markup_iface_init (EvAnnotationMarkupInterface *iface) EvAnnotation * ev_annotation_text_markup_highlight_new (EvPage *page) { - EvAnnotation *annot = EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, - "page", page, - NULL)); - annot->type = EV_ANNOTATION_TYPE_HIGHLIGHT; - - return annot; + return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, + "page", page, + "type", EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT, + NULL)); } diff --git a/libdocument/ev-annotation.h b/libdocument/ev-annotation.h index d2010103..d1c85cb5 100644 --- a/libdocument/ev-annotation.h +++ b/libdocument/ev-annotation.h @@ -94,7 +94,7 @@ typedef enum { EV_ANNOTATION_TYPE_UNKNOWN, EV_ANNOTATION_TYPE_TEXT, EV_ANNOTATION_TYPE_ATTACHMENT, - EV_ANNOTATION_TYPE_HIGHLIGHT + EV_ANNOTATION_TYPE_TEXT_MARKUP } EvAnnotationType; typedef enum { @@ -110,6 +110,10 @@ typedef enum { EV_ANNOTATION_TEXT_ICON_UNKNOWN } EvAnnotationTextIcon; +typedef enum { + EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT +} EvAnnotationTextMarkupType; + /* EvAnnotation */ GType ev_annotation_get_type (void) G_GNUC_CONST; EvAnnotationType ev_annotation_get_annotation_type (EvAnnotation *annot); |
