diff options
author | Giselle Machado <[email protected]> | 2014-06-22 18:39:58 +0200 |
---|---|---|
committer | raveit65 <[email protected]> | 2017-08-28 16:04:01 +0200 |
commit | 4fc9b355075c0298b0306f43e5b73d136dcdf939 (patch) | |
tree | 2a15ae1a3e3519cae56d320a490618855a71b304 | |
parent | d16ebefe945ddca508e2e7c7e360f671078cf5d3 (diff) | |
download | atril-4fc9b355075c0298b0306f43e5b73d136dcdf939.tar.bz2 atril-4fc9b355075c0298b0306f43e5b73d136dcdf939.tar.xz |
Refreshing annotations' sidebar upon deletion
When an annotation is deleted, the sidebar needs to
be refreshed so that the annotation is removed from
the list
See item 3 in this comment:
https://bugzilla.gnome.org/show_bug.cgi?id=649044#c33
origin commit:
https://git.gnome.org/browse/evince/commit/?id=13defb2
-rw-r--r-- | libview/ev-view-private.h | 2 | ||||
-rw-r--r-- | libview/ev-view.c | 14 | ||||
-rw-r--r-- | shell/ev-sidebar-annotations.c | 6 | ||||
-rw-r--r-- | shell/ev-sidebar-annotations.h | 9 | ||||
-rw-r--r-- | shell/ev-window.c | 11 |
5 files changed, 38 insertions, 4 deletions
diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h index 4711e8f9..02219641 100644 --- a/libview/ev-view-private.h +++ b/libview/ev-view-private.h @@ -242,6 +242,8 @@ struct _EvViewClass { EvSourceLink *link); void (*annot_added) (EvView *view, EvAnnotation *annot); + void (*annot_removed) (EvView *view, + EvAnnotation *annot); void (*layers_changed) (EvView *view); }; diff --git a/libview/ev-view.c b/libview/ev-view.c index f409a2e5..b898286e 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -57,6 +57,7 @@ enum { SIGNAL_SELECTION_CHANGED, SIGNAL_SYNC_SOURCE, SIGNAL_ANNOT_ADDED, + SIGNAL_ANNOT_REMOVED, SIGNAL_LAYERS_CHANGED, N_SIGNALS }; @@ -3102,6 +3103,8 @@ ev_view_remove_annotation (EvView *view, g_return_if_fail (EV_IS_VIEW (view)); g_return_if_fail (EV_IS_ANNOTATION (annot)); + g_object_ref (annot); + page = ev_annotation_get_page_index (annot); if (EV_IS_ANNOTATION_MARKUP (annot)) { @@ -3125,6 +3128,9 @@ ev_view_remove_annotation (EvView *view, /* FIXME: only redraw the annot area */ ev_view_reload_page (view, page, NULL); + + g_signal_emit (view, signals[SIGNAL_ANNOT_REMOVED], 0, annot); + g_object_unref (annot); } static gboolean @@ -5189,6 +5195,14 @@ ev_view_class_init (EvViewClass *class) g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, EV_TYPE_ANNOTATION); + signals[SIGNAL_ANNOT_REMOVED] = g_signal_new ("annot-removed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EvViewClass, annot_removed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + EV_TYPE_ANNOTATION); signals[SIGNAL_LAYERS_CHANGED] = g_signal_new ("layers-changed", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, diff --git a/shell/ev-sidebar-annotations.c b/shell/ev-sidebar-annotations.c index 6cb98fef..ee605005 100644 --- a/shell/ev-sidebar-annotations.c +++ b/shell/ev-sidebar-annotations.c @@ -303,6 +303,12 @@ ev_sidebar_annotations_annot_added (EvSidebarAnnotations *sidebar_annots, ev_sidebar_annotations_load (sidebar_annots); } +void +ev_sidebar_annotations_annot_removed (EvSidebarAnnotations *sidebar_annots) +{ + ev_sidebar_annotations_load (sidebar_annots); +} + static void selection_changed_cb (GtkTreeSelection *selection, EvSidebarAnnotations *sidebar_annots) diff --git a/shell/ev-sidebar-annotations.h b/shell/ev-sidebar-annotations.h index 9aa7181c..db80983f 100644 --- a/shell/ev-sidebar-annotations.h +++ b/shell/ev-sidebar-annotations.h @@ -53,10 +53,11 @@ struct _EvSidebarAnnotationsClass { void (* annot_add_cancelled) (EvSidebarAnnotations *sidebar_annots); }; -GType ev_sidebar_annotations_get_type (void) G_GNUC_CONST; -GtkWidget *ev_sidebar_annotations_new (void); -void ev_sidebar_annotations_annot_added (EvSidebarAnnotations *sidebar_annots, - EvAnnotation *annot); +GType ev_sidebar_annotations_get_type (void) G_GNUC_CONST; +GtkWidget *ev_sidebar_annotations_new (void); +void ev_sidebar_annotations_annot_added (EvSidebarAnnotations *sidebar_annots, + EvAnnotation *annot); +void ev_sidebar_annotations_annot_removed (EvSidebarAnnotations *sidebar_annots); G_END_DECLS #endif /* __EV_SIDEBAR_ANNOTATIONS_H__ */ diff --git a/shell/ev-window.c b/shell/ev-window.c index 13870211..ecdc86bf 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -6442,6 +6442,14 @@ view_annot_added (EvView *view, } static void +view_annot_removed (EvView *view, + EvAnnotation *annot, + EvWindow *window) +{ + ev_sidebar_annotations_annot_removed (EV_SIDEBAR_ANNOTATIONS (window->priv->sidebar_annots)); +} + +static void sidebar_annots_annot_add_cancelled (EvSidebarAnnotations *sidebar_annots, EvWindow *window) { @@ -7870,6 +7878,9 @@ ev_window_init (EvWindow *ev_window) g_signal_connect_object (ev_window->priv->view, "annot-added", G_CALLBACK (view_annot_added), ev_window, 0); + g_signal_connect_object (ev_window->priv->view, "annot-removed", + G_CALLBACK (view_annot_removed), + ev_window, 0); g_signal_connect_object (ev_window->priv->view, "layers-changed", G_CALLBACK (view_layers_changed_cb), ev_window, 0); |