X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-sidebar-layers.c;h=794d31fec40765a0db8fa4138fb5841e550bf0d5;hb=2faf7d9668abe843e8688fa928a4d52d7df92879;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;
}