summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-05-13 14:43:44 -0400
committerVictor Kareh <[email protected]>2026-05-19 16:21:12 -0400
commit4bd2f90bbede5fddfeb9964896dcd389db28cef3 (patch)
tree2fd2f7d52e4c6b31e1608a7d7075453d6d2f88ff
parent1b104d3b7e603996d5b95c61064d0e646f7dce57 (diff)
downloadatril-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.c74
-rw-r--r--libdocument/ev-annotation.h6
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);