*
* 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.
*
*/
{
GtkToolItem parent;
+ EvDocument *document;
+ EvDocumentModel *doc_model;
+
GtkWidget *entry;
GtkWidget *label;
- EvPageCache *page_cache;
guint signal_id;
GtkTreeModel *filter_model;
GtkTreeModel *model;
static void
update_pages_label (EvPageActionWidget *action_widget,
- gint page,
- EvPageCache *page_cache)
+ gint page)
{
char *label_text;
gint n_pages;
- n_pages = page_cache ? ev_page_cache_get_n_pages (page_cache) : 0;
- if (page_cache && ev_page_cache_has_nonnumeric_page_labels (page_cache)) {
+ n_pages = ev_document_get_n_pages (action_widget->document);
+ if (ev_document_has_text_page_labels (action_widget->document)) {
label_text = g_strdup_printf (_("(%d of %d)"), page + 1, n_pages);
} else {
label_text = g_strdup_printf (_("of %d"), n_pages);
}
static void
-page_changed_cb (EvPageCache *page_cache,
- gint page,
- EvPageActionWidget *action_widget)
+ev_page_action_widget_set_current_page (EvPageActionWidget *action_widget,
+ gint page)
{
- if (page_cache && page >= 0) {
+ if (page >= 0) {
gchar *page_label;
gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry),
- CLAMP (ev_page_cache_get_max_label_chars (page_cache),
+ CLAMP (ev_document_get_max_label_len (action_widget->document),
6, 12));
- page_label = ev_page_cache_get_page_label (page_cache, page);
+ page_label = ev_document_get_page_label (action_widget->document, page);
gtk_entry_set_text (GTK_ENTRY (action_widget->entry), page_label);
gtk_editable_set_position (GTK_EDITABLE (action_widget->entry), -1);
g_free (page_label);
gtk_entry_set_text (GTK_ENTRY (action_widget->entry), "");
}
- update_pages_label (action_widget, page, page_cache);
+ update_pages_label (action_widget, page);
+}
+
+static void
+page_changed_cb (EvDocumentModel *model,
+ gint old_page,
+ gint new_page,
+ EvPageActionWidget *action_widget)
+{
+ ev_page_action_widget_set_current_page (action_widget, new_page);
}
static gboolean
page_scroll_cb (EvPageActionWidget *action_widget, GdkEventScroll *event)
{
- EvPageCache *page_cache = action_widget->page_cache;
+ EvDocumentModel *model = action_widget->doc_model;
gint pageno;
- pageno = ev_page_cache_get_current_page (page_cache);
+ pageno = ev_document_model_get_page (model);
if ((event->direction == GDK_SCROLL_DOWN) &&
- (pageno < ev_page_cache_get_n_pages (page_cache) - 1))
+ (pageno < ev_document_get_n_pages (action_widget->document) - 1))
pageno++;
if ((event->direction == GDK_SCROLL_UP) && (pageno > 0))
pageno--;
- ev_page_cache_set_current_page (page_cache, pageno);
+ ev_document_model_set_page (model, pageno);
return TRUE;
}
static void
activate_cb (EvPageActionWidget *action_widget)
{
- EvPageCache *page_cache;
+ EvDocumentModel *model;
const char *text;
- gchar *page_label;
EvLinkDest *link_dest;
EvLinkAction *link_action;
EvLink *link;
gchar *link_text;
+ gint current_page;
+
+ model = action_widget->doc_model;
+ current_page = ev_document_model_get_page (model);
text = gtk_entry_get_text (GTK_ENTRY (action_widget->entry));
g_object_unref (link);
g_free (link_text);
- /* rest the entry to the current page if we were unable to
- * change it */
- page_cache = action_widget->page_cache;
- page_label = ev_page_cache_get_page_label (page_cache,
- ev_page_cache_get_current_page (page_cache));
- gtk_entry_set_text (GTK_ENTRY (action_widget->entry), page_label);
- gtk_editable_set_position (GTK_EDITABLE (action_widget->entry), -1);
- g_free (page_label);
+ if (current_page == ev_document_model_get_page (model))
+ ev_page_action_widget_set_current_page (action_widget, current_page);
}
static void
gtk_widget_add_events (action_widget->entry,
GDK_BUTTON_MOTION_MASK);
gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry), 5);
+ gtk_entry_set_text (GTK_ENTRY (action_widget->entry), "");
g_signal_connect_swapped (action_widget->entry, "scroll-event",
G_CALLBACK (page_scroll_cb),
action_widget);
gtk_widget_show (GTK_WIDGET (action_widget));
}
-void
-ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget,
- EvPageCache *page_cache)
+static void
+ev_page_action_widget_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvPageActionWidget *action_widget)
{
- if (action_widget->page_cache != NULL) {
- if (action_widget->signal_id > 0) {
- g_signal_handler_disconnect (action_widget->page_cache,
- action_widget->signal_id);
- action_widget->signal_id = 0;
- }
- g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache),
- (gpointer)&action_widget->page_cache);
- action_widget->page_cache = NULL;
- }
+ EvDocument *document = ev_document_model_get_document (model);
- if (page_cache != NULL) {
- action_widget->page_cache = page_cache;
- g_object_add_weak_pointer (G_OBJECT (page_cache),
- (gpointer)&action_widget->page_cache);
- action_widget->signal_id =
- g_signal_connect_object (page_cache, "page-changed",
- G_CALLBACK (page_changed_cb),
- action_widget, 0);
- page_changed_cb (page_cache,
- ev_page_cache_get_current_page (page_cache),
- action_widget);
- } else {
+ g_object_ref (document);
+ if (action_widget->document)
+ g_object_unref (action_widget->document);
+ action_widget->document = document;
+
+ if (action_widget->signal_id > 0) {
+ g_signal_handler_disconnect (action_widget->doc_model,
+ action_widget->signal_id);
action_widget->signal_id = 0;
- page_changed_cb (NULL, 0, action_widget);
}
+ action_widget->signal_id =
+ g_signal_connect_object (action_widget->doc_model,
+ "page-changed",
+ G_CALLBACK (page_changed_cb),
+ action_widget, 0);
+
+ ev_page_action_widget_set_current_page (action_widget,
+ ev_document_model_get_page (model));
+}
+
+void
+ev_page_action_widget_set_model (EvPageActionWidget *action_widget,
+ EvDocumentModel *model)
+{
+ if (action_widget->doc_model) {
+ g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model),
+ (gpointer)&action_widget->doc_model);
+ }
+ action_widget->doc_model = model;
+ g_object_add_weak_pointer (G_OBJECT (model),
+ (gpointer)&action_widget->doc_model);
+
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_page_action_widget_document_changed_cb),
+ action_widget);
}
static void
{
EvPageActionWidget *action_widget = EV_PAGE_ACTION_WIDGET (object);
- if (action_widget->page_cache != NULL) {
+ if (action_widget->doc_model != NULL) {
if (action_widget->signal_id > 0) {
- g_signal_handler_disconnect (action_widget->page_cache,
+ g_signal_handler_disconnect (action_widget->doc_model,
action_widget->signal_id);
action_widget->signal_id = 0;
}
- g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache),
- (gpointer)&action_widget->page_cache);
- action_widget->page_cache = NULL;
+ g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model),
+ (gpointer)&action_widget->doc_model);
+ action_widget->doc_model = NULL;
+ }
+
+ if (action_widget->document) {
+ g_object_unref (action_widget->document);
+ action_widget->document = NULL;
}
G_OBJECT_CLASS (ev_page_action_widget_parent_class)->finalize (object);
g_signal_new ("activate_link",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (EvPageActionClass, activate_link),
+ G_STRUCT_OFFSET (EvPageActionWidgetClass, activate_link),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
void
-ev_page_action_widget_update_model (EvPageActionWidget *proxy, GtkTreeModel *model)
+ev_page_action_widget_update_links_model (EvPageActionWidget *proxy, GtkTreeModel *model)
{
GtkTreeModel *filter_model;
GtkEntryCompletion *completion;
gtk_entry_set_completion (GTK_ENTRY (proxy->entry), completion);
g_object_unref (completion);
- g_object_unref (model);
}
void