X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-sidebar-layers.c;h=794d31fec40765a0db8fa4138fb5841e550bf0d5;hb=aff4186edfaa1036268c97c60432e2d6644e91e5;hp=cebd96d45c802360cf77151698affd0932acda30;hpb=7f94a4075450791807ee2699cb0e7a0293ccc2f3;p=evince.git diff --git a/shell/ev-sidebar-layers.c b/shell/ev-sidebar-layers.c index cebd96d4..794d31fe 100644 --- a/shell/ev-sidebar-layers.c +++ b/shell/ev-sidebar-layers.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" @@ -47,9 +47,9 @@ enum { N_SIGNALS }; -static void ev_sidebar_layers_page_iface_init (EvSidebarPageIface *iface); -static void job_finished_callback (EvJobLayers *job, - EvSidebarLayers *sidebar_layers); +static void ev_sidebar_layers_page_iface_init (EvSidebarPageInterface *iface); +static void job_finished_callback (EvJobLayers *job, + EvSidebarLayers *sidebar_layers); static guint signals[N_SIGNALS]; @@ -122,7 +122,7 @@ ev_sidebar_layers_create_loading_model (void) G_TYPE_INT); gtk_list_store_append (GTK_LIST_STORE (retval), &iter); - markup = g_strdup_printf ("%s", _("Loading...")); + markup = g_strdup_printf ("%s", _("Loading…")); gtk_list_store_set (GTK_LIST_STORE (retval), &iter, EV_DOCUMENT_LAYERS_COLUMN_TITLE, markup, EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, FALSE, @@ -331,6 +331,49 @@ ev_sidebar_layers_new (void) return GTK_WIDGET (g_object_new (EV_TYPE_SIDEBAR_LAYERS, NULL)); } +static void +update_layers_state (GtkTreeModel *model, + GtkTreeIter *iter, + EvDocumentLayers *document_layers) +{ + EvLayer *layer; + gboolean visible; + GtkTreeIter child_iter; + + do { + gtk_tree_model_get (model, iter, + EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, &visible, + EV_DOCUMENT_LAYERS_COLUMN_LAYER, &layer, + -1); + if (layer) { + gboolean layer_visible; + + layer_visible = ev_document_layers_layer_is_visible (document_layers, layer); + if (layer_visible != visible) { + gtk_tree_store_set (GTK_TREE_STORE (model), iter, + EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, layer_visible, + -1); + } + } + + if (gtk_tree_model_iter_children (model, &child_iter, iter)) + update_layers_state (model, &child_iter, document_layers); + } while (gtk_tree_model_iter_next (model, iter)); +} + +void +ev_sidebar_layers_update_layers_state (EvSidebarLayers *sidebar_layers) +{ + GtkTreeModel *model; + GtkTreeIter iter; + EvDocumentLayers *document_layers; + + document_layers = EV_DOCUMENT_LAYERS (sidebar_layers->priv->document); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (sidebar_layers->priv->tree_view)); + if (gtk_tree_model_get_iter_first (model, &iter)) + update_layers_state (model, &iter, document_layers); +} + static void job_finished_callback (EvJobLayers *job, EvSidebarLayers *sidebar_layers) @@ -346,18 +389,15 @@ job_finished_callback (EvJobLayers *job, } static void -ev_sidebar_layers_set_document (EvSidebarPage *sidebar_page, - EvDocument *document) +ev_sidebar_layers_document_changed_cb (EvDocumentModel *model, + GParamSpec *pspec, + EvSidebarLayers *sidebar_layers) { - EvSidebarLayers *sidebar_layers; - EvSidebarLayersPrivate *priv; - - g_return_if_fail (EV_IS_SIDEBAR_PAGE (sidebar_page)); - g_return_if_fail (EV_IS_DOCUMENT (document)); - - sidebar_layers = EV_SIDEBAR_LAYERS (sidebar_page); + EvDocument *document = ev_document_model_get_document (model); + EvSidebarLayersPrivate *priv = sidebar_layers->priv; - priv = sidebar_layers->priv; + if (!EV_IS_DOCUMENT_LAYERS (document)) + return; if (priv->document) { gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), NULL); @@ -381,6 +421,15 @@ ev_sidebar_layers_set_document (EvSidebarPage *sidebar_page, ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE); } +static void +ev_sidebar_layers_set_model (EvSidebarPage *sidebar_page, + EvDocumentModel *model) +{ + g_signal_connect (model, "notify::document", + G_CALLBACK (ev_sidebar_layers_document_changed_cb), + sidebar_page); +} + static gboolean ev_sidebar_layers_support_document (EvSidebarPage *sidebar_page, EvDocument *document) @@ -396,10 +445,10 @@ ev_sidebar_layers_get_label (EvSidebarPage *sidebar_page) } static void -ev_sidebar_layers_page_iface_init (EvSidebarPageIface *iface) +ev_sidebar_layers_page_iface_init (EvSidebarPageInterface *iface) { iface->support_document = ev_sidebar_layers_support_document; - iface->set_document = ev_sidebar_layers_set_document; + iface->set_model = ev_sidebar_layers_set_model; iface->get_label = ev_sidebar_layers_get_label; }