X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=backend%2Fev-link.c;h=a325c3525788badbe1921341668a8996e2921f89;hb=47565f7ff3bbb1d56e2a7851c44ae10981c229ac;hp=cde435542310edb43577ec35ea8e482f7719948b;hpb=9832f65434f957b1374d07e6a645b6b8ac88f459;p=evince.git diff --git a/backend/ev-link.c b/backend/ev-link.c index cde43554..a325c352 100644 --- a/backend/ev-link.c +++ b/backend/ev-link.c @@ -32,7 +32,11 @@ enum { PROP_URI, PROP_LEFT, PROP_TOP, - PROP_ZOOM + PROP_BOTTOM, + PROP_RIGHT, + PROP_ZOOM, + PROP_FILENAME, + PROP_PARAMS }; @@ -48,10 +52,14 @@ struct _EvLinkClass { struct _EvLinkPrivate { char *title; char *uri; + char *filename; + char *params; EvLinkType type; int page; double top; double left; + double bottom; + double right; double zoom; }; @@ -70,7 +78,12 @@ ev_link_type_get_type (void) { EV_LINK_TYPE_TITLE, "EV_LINK_TYPE_TITLE", "title" }, { EV_LINK_TYPE_PAGE, "EV_LINK_TYPE_PAGE", "page" }, { EV_LINK_TYPE_PAGE_XYZ, "EV_LINK_TYPE_PAGE_XYZ", "page-xyz" }, + { EV_LINK_TYPE_PAGE_FIT, "EV_LINK_TYPE_PAGE_FIT", "page-fit" }, + { EV_LINK_TYPE_PAGE_FITH, "EV_LINK_TYPE_PAGE_FITH", "page-fith" }, + { EV_LINK_TYPE_PAGE_FITV, "EV_LINK_TYPE_PAGE_FITV", "page-fitv" }, + { EV_LINK_TYPE_PAGE_FITR, "EV_LINK_TYPE_PAGE_FITR", "page-fitr" }, { EV_LINK_TYPE_EXTERNAL_URI, "EV_LINK_TYPE_EXTERNAL_URI", "external" }, + { EV_LINK_TYPE_LAUNCH, "EV_LINK_TYPE_LAUNCH", "launch" }, { 0, NULL, NULL } }; @@ -107,7 +120,7 @@ ev_link_get_link_type (EvLink *self) int ev_link_get_page (EvLink *self) { - g_return_val_if_fail (EV_IS_LINK (self), 0); + g_return_val_if_fail (EV_IS_LINK (self), -1); return self->priv->page; } @@ -128,6 +141,38 @@ ev_link_get_left (EvLink *self) return self->priv->left; } +double +ev_link_get_bottom (EvLink *self) +{ + g_return_val_if_fail (EV_IS_LINK (self), 0); + + return self->priv->bottom; +} + +double +ev_link_get_right (EvLink *self) +{ + g_return_val_if_fail (EV_IS_LINK (self), 0); + + return self->priv->right; +} + +const char * +ev_link_get_filename (EvLink *link) +{ + g_return_val_if_fail (EV_IS_LINK (link), NULL); + + return link->priv->filename; +} + +const char * +ev_link_get_params (EvLink *link) +{ + g_return_val_if_fail (EV_IS_LINK (link), NULL); + + return link->priv->params; +} + double ev_link_get_zoom (EvLink *self) { @@ -163,9 +208,19 @@ ev_link_get_property (GObject *object, guint prop_id, GValue *value, case PROP_LEFT: g_value_set_double (value, self->priv->left); break; + case PROP_BOTTOM: + g_value_set_double (value, self->priv->bottom); + break; + case PROP_RIGHT: + g_value_set_double (value, self->priv->left); + break; case PROP_ZOOM: g_value_set_double (value, self->priv->zoom); break; + case PROP_FILENAME: + g_value_set_string (value, self->priv->filename); + case PROP_PARAMS: + g_value_set_string (value, self->priv->params); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, @@ -199,9 +254,23 @@ ev_link_set_property (GObject *object, guint prop_id, const GValue *value, case PROP_LEFT: link->priv->left = g_value_get_double (value); break; + case PROP_BOTTOM: + link->priv->bottom = g_value_get_double (value); + break; + case PROP_RIGHT: + link->priv->right = g_value_get_double (value); + break; case PROP_ZOOM: link->priv->zoom = g_value_get_double (value); break; + case PROP_FILENAME: + g_free (link->priv->filename); + link->priv->filename = g_strdup (g_value_get_string (value)); + break; + case PROP_PARAMS: + g_free (link->priv->params); + link->priv->params = g_strdup (g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, @@ -230,6 +299,16 @@ ev_window_dispose (GObject *object) priv->uri = NULL; } + if (priv->filename) { + g_free (priv->filename); + priv->filename = NULL; + } + + if (priv->params) { + g_free (priv->params); + priv->params = NULL; + } + G_OBJECT_CLASS (ev_link_parent_class)->dispose (object); } @@ -237,7 +316,7 @@ static void ev_link_init (EvLink *ev_link) { ev_link->priv = EV_LINK_GET_PRIVATE (ev_link); - + ev_link->priv->page = -1; ev_link->priv->type = EV_LINK_TYPE_TITLE; } @@ -269,6 +348,22 @@ ev_link_class_init (EvLinkClass *ev_window_class) NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, + PROP_FILENAME, + g_param_spec_string ("filename", + "Filename", + "The link filename", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, + PROP_PARAMS, + g_param_spec_string ("params", + "Params", + "The link params", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (g_object_class, PROP_TYPE, g_param_spec_enum ("type", @@ -293,7 +388,7 @@ ev_link_class_init (EvLinkClass *ev_window_class) g_param_spec_double ("left", "Left coordinate", "The left coordinate", - 0, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READWRITE | @@ -303,11 +398,32 @@ ev_link_class_init (EvLinkClass *ev_window_class) g_param_spec_double ("top", "Top coordinate", "The top coordinate", + -G_MAXDOUBLE, + G_MAXDOUBLE, 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, + PROP_BOTTOM, + g_param_spec_double ("bottom", + "Bottom coordinate", + "The bottom coordinate", + -G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, + PROP_RIGHT, + g_param_spec_double ("right", + "Right coordinate", + "The right coordinate", + -G_MAXDOUBLE, + G_MAXDOUBLE, + 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, PROP_ZOOM, g_param_spec_double ("zoom", @@ -356,6 +472,62 @@ ev_link_new_page_xyz (const char *title, NULL)); } +EvLink * +ev_link_new_page_fit (const char *title, + int page) +{ + return EV_LINK (g_object_new (EV_TYPE_LINK, + "title", title, + "page", page, + "type", EV_LINK_TYPE_PAGE_FIT, + NULL)); +} + +EvLink * +ev_link_new_page_fith (const char *title, + int page, + double top) +{ + return EV_LINK (g_object_new (EV_TYPE_LINK, + "title", title, + "page", page, + "type", EV_LINK_TYPE_PAGE_FITH, + "top", top, + NULL)); +} + +EvLink * +ev_link_new_page_fitv (const char *title, + int page, + double left) +{ + return EV_LINK (g_object_new (EV_TYPE_LINK, + "title", title, + "page", page, + "type", EV_LINK_TYPE_PAGE_FITV, + "left", left, + NULL)); +} + +EvLink * +ev_link_new_page_fitr (const char *title, + int page, + double left, + double bottom, + double right, + double top) +{ + return EV_LINK (g_object_new (EV_TYPE_LINK, + "title", title, + "page", page, + "type", EV_LINK_TYPE_PAGE_FITR, + "left", left, + "bottom", bottom, + "right", right, + "top", top, + NULL)); +} + EvLink * ev_link_new_external (const char *title, const char *uri) { @@ -366,7 +538,18 @@ ev_link_new_external (const char *title, const char *uri) NULL)); } - +EvLink * +ev_link_new_launch (const char *title, + const char *filename, + const char *params) +{ + return EV_LINK (g_object_new (EV_TYPE_LINK, + "title", title, + "filename", filename, + "params", params, + "type", EV_LINK_TYPE_LAUNCH, + NULL)); +} static void ev_link_mapping_free_foreach (EvLinkMapping *mapping)