X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-sidebar.c;h=f15b376acd92078cd6928c5af9ed5b3e182283e5;hb=1600e0323e398d2e235121e9e25df70853095e4c;hp=90e8c1daeb51366fe5cf382c1510fc71cb4462bc;hpb=e637fd672cb1fa494600c66dc7b49a7f77c78aa8;p=evince.git diff --git a/shell/ev-sidebar.c b/shell/ev-sidebar.c index 90e8c1da..f15b376a 100644 --- a/shell/ev-sidebar.c +++ b/shell/ev-sidebar.c @@ -25,6 +25,7 @@ #endif #include + #include #include @@ -52,7 +53,8 @@ struct _EvSidebarPrivate { GtkWidget *menu; GtkWidget *hbox; GtkWidget *label; - + + EvDocumentModel *model; GtkTreeModel *page_model; }; @@ -438,7 +440,9 @@ ev_sidebar_add_page (EvSidebar *ev_sidebar, g_return_if_fail (EV_IS_SIDEBAR (ev_sidebar)); g_return_if_fail (EV_IS_SIDEBAR_PAGE (main_widget)); g_return_if_fail (GTK_IS_WIDGET (main_widget)); - + + ev_sidebar_page_set_model (EV_SIDEBAR_PAGE (main_widget), + ev_sidebar->priv->model); title = ev_sidebar_page_get_label (EV_SIDEBAR_PAGE (main_widget)); index = gtk_notebook_append_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook), @@ -451,7 +455,8 @@ ev_sidebar_add_page (EvSidebar *ev_sidebar, gtk_widget_show (menu_item); gtk_menu_shell_append (GTK_MENU_SHELL (ev_sidebar->priv->menu), menu_item); - + + /* Insert and move to end */ gtk_list_store_insert_with_values (GTK_LIST_STORE (ev_sidebar->priv->page_model), &iter, 0, PAGE_COLUMN_TITLE, title, @@ -459,7 +464,10 @@ ev_sidebar_add_page (EvSidebar *ev_sidebar, PAGE_COLUMN_MAIN_WIDGET, main_widget, PAGE_COLUMN_NOTEBOOK_INDEX, index, -1); - + gtk_list_store_move_before(GTK_LIST_STORE(ev_sidebar->priv->page_model), + &iter, NULL); + + /* Set the first item added as active */ gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter); gtk_tree_model_get (ev_sidebar->priv->page_model, @@ -475,22 +483,17 @@ ev_sidebar_add_page (EvSidebar *ev_sidebar, g_free (label_title); } -void -ev_sidebar_set_document (EvSidebar *sidebar, - EvDocument *document) +static void +ev_sidebar_document_changed_cb (EvDocumentModel *model, + GParamSpec *pspec, + EvSidebar *sidebar) { - EvSidebarPrivate *priv; + EvSidebarPrivate *priv = sidebar->priv; + EvDocument *document = ev_document_model_get_document (model); GtkTreeIter iter; gboolean valid; - gboolean has_pages; - - g_return_if_fail (EV_IS_SIDEBAR (sidebar)); - g_return_if_fail (EV_IS_DOCUMENT (document)); - - priv = sidebar->priv; - - has_pages = FALSE; - + gboolean has_pages = FALSE; + for (valid = gtk_tree_model_get_iter_first (priv->page_model, &iter); valid; valid = gtk_tree_model_iter_next (priv->page_model, &iter)) { @@ -501,18 +504,16 @@ ev_sidebar_set_document (EvSidebar *sidebar, PAGE_COLUMN_MAIN_WIDGET, &widget, PAGE_COLUMN_MENU_ITEM, &menu_widget, -1); - if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (widget), document)) { - ev_sidebar_page_set_document (EV_SIDEBAR_PAGE (widget), document); - has_pages = TRUE; + has_pages = TRUE; } else { - gtk_widget_set_sensitive (menu_widget, FALSE); + gtk_widget_set_sensitive (menu_widget, FALSE); } g_object_unref (widget); g_object_unref (menu_widget); } - + if (!has_pages) { gtk_widget_hide (GTK_WIDGET (sidebar)); } else { @@ -521,3 +522,18 @@ ev_sidebar_set_document (EvSidebar *sidebar, } } +void +ev_sidebar_set_model (EvSidebar *sidebar, + EvDocumentModel *model) +{ + g_return_if_fail (EV_IS_SIDEBAR (sidebar)); + g_return_if_fail (EV_IS_DOCUMENT_MODEL (model)); + + if (model == sidebar->priv->model) + return; + + sidebar->priv->model = model; + g_signal_connect (model, "notify::document", + G_CALLBACK (ev_sidebar_document_changed_cb), + sidebar); +}