+2005-04-14 Marco Pesenti Gritti <mpg@redhat.com>
+
+ * backend/ev-document.h:
+ * djvu/djvu-document.c: (djvu_document_can_get_text),
+ (djvu_document_document_iface_init):
+ * dvi/dvi-document.c: (dvi_document_can_get_text),
+ (dvi_document_document_iface_init):
+ * pdf/ev-poppler.cc:
+ * pixbuf/pixbuf-document.c: (pixbuf_document_can_get_text),
+ (pixbuf_document_document_iface_init):
+ * ps/ps-document.c: (ps_document_can_get_text),
+ (ps_document_document_iface_init):
+ * shell/ev-view.c: (ev_view_copy), (ev_view_primary_get_cb):
+ * shell/ev-window.c: (update_action_sensitivity):
+
+ Fix the crash when trying to copy in backends that doesnt
+ support it. We can implement a better solution once we
+ do real text selection.
+
2005-04-12 Marco Pesenti Gritti <mpg@redhat.com>
* data/evince-ui.xml:
return iface->get_page_label (document, page);
}
+gboolean
+ev_document_can_get_text (EvDocument *document)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+
+ return iface->can_get_text (document);
+}
+
char *
ev_document_get_text (EvDocument *document,
int page,
double *height);
char * (* get_page_label) (EvDocument *document,
int page);
+ gboolean (* can_get_text) (EvDocument *document);
char * (* get_text) (EvDocument *document,
int page,
EvRectangle *rect);
double *height);
char *ev_document_get_page_label(EvDocument *document,
int page);
+gboolean ev_document_can_get_text (EvDocument *document);
char *ev_document_get_text (EvDocument *document,
int page,
EvRectangle *rect);
g_object_class_override_property (gobject_class, PROP_TITLE, "title");
}
-static char *
-djvu_document_get_text (EvDocument *document, gint page, EvRectangle *rect)
+static gboolean
+djvu_document_can_get_text (EvDocument *document)
{
- /* FIXME this method should not be in EvDocument */
- g_warning ("djvu_document_get_text not implemented");
- return NULL;
+ return FALSE;
}
static void
{
iface->load = djvu_document_load;
iface->save = djvu_document_save;
- iface->get_text = djvu_document_get_text;
+ iface->can_get_text = djvu_document_can_get_text;
iface->get_n_pages = djvu_document_get_n_pages;
iface->get_page_size = djvu_document_get_page_size;
iface->render_pixbuf = djvu_document_render_pixbuf;
g_object_class_override_property (gobject_class, PROP_TITLE, "title");
}
-static char *
-dvi_document_get_text (EvDocument *document, gint page, EvRectangle *rect)
+static gboolean
+dvi_document_can_get_text (EvDocument *document)
{
- /* FIXME this method should not be in EvDocument */
- g_warning ("dvi_document_get_text not implemented");
- return NULL;
+ return FALSE;
}
static void
{
iface->load = dvi_document_load;
iface->save = dvi_document_save;
- iface->get_text = dvi_document_get_text;
+ iface->can_get_text = dvi_document_can_get_text;
iface->get_n_pages = dvi_document_get_n_pages;
iface->get_page_size = dvi_document_get_page_size;
iface->render_pixbuf = dvi_document_render_pixbuf;
document->password = g_strdup (password);
}
+static gboolean
+pdf_document_can_get_text (EvDocument *document)
+{
+ return TRUE;
+}
+
static char *
pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
{
r.x2 = rect->x2;
r.y2 = height - rect->y1;
- g_print ("%f %f %f %f\n", r.x1, r.y1, r.x2, r.y2);
-
return poppler_page_get_text (poppler_page, &r);
}
iface->get_links = pdf_document_get_links;
iface->render_pixbuf = pdf_document_render_pixbuf;
iface->get_text = pdf_document_get_text;
+ iface->can_get_text = pdf_document_can_get_text;
};
static void
g_object_class_override_property (gobject_class, PROP_TITLE, "title");
}
-static char *
-pixbuf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
+static gboolean
+pixbuf_document_can_get_text (EvDocument *document)
{
- /* FIXME this method should not be in EvDocument */
- g_warning ("pixbuf_document_get_text not implemented");
- return NULL;
+ return FALSE;
}
static void
{
iface->load = pixbuf_document_load;
iface->save = pixbuf_document_save;
- iface->get_text = pixbuf_document_get_text;
+ iface->can_get_text = pixbuf_document_can_get_text;
iface->get_n_pages = pixbuf_document_get_n_pages;
iface->get_page_size = pixbuf_document_get_page_size;
iface->render_pixbuf = pixbuf_document_render_pixbuf;
}
}
-static char *
-ps_document_get_text (EvDocument *document, int page, EvRectangle *rect)
+static gboolean
+ps_document_can_get_text (EvDocument *document)
{
- g_warning ("ps_document_get_text not implemented"); /* FIXME ? */
- return NULL;
+ return FALSE;
}
static gboolean
{
iface->load = ps_document_load;
iface->save = ps_document_save;
- iface->get_text = ps_document_get_text;
+ iface->can_get_text = ps_document_can_get_text;
iface->get_n_pages = ps_document_get_n_pages;
iface->get_page_size = ps_document_get_page_size;
iface->render_pixbuf = ps_document_render_pixbuf;
GtkClipboard *clipboard;
char *text;
+ if (!ev_document_can_get_text (ev_view->document)) {
+ return;
+ }
+
g_mutex_lock (EV_DOC_MUTEX);
text = ev_document_get_text (ev_view->document,
ev_view->current_page,
EvView *ev_view = EV_VIEW (data);
char *text;
+ if (!ev_document_can_get_text (ev_view->document)) {
+ return;
+ }
+
g_mutex_lock (EV_DOC_MUTEX);
text = ev_document_get_text (ev_view->document,
ev_view->current_page,
EvDocument *document;
EvWindowPageMode page_mode;
EvView *view;
+ gboolean sensitive;
document = ev_window->priv->document;
page_mode = ev_window->priv->page_mode;
/* "FileCloseWindow": always sensitive */
/* Edit menu */
- set_action_sensitive (ev_window, "EditCopy", document!=NULL);
- set_action_sensitive (ev_window, "EditSelectAll", document!=NULL);
+
+ sensitive = document && ev_document_can_get_text (document);
+ set_action_sensitive (ev_window, "EditCopy", sensitive);
+ set_action_sensitive (ev_window, "EditSelectAll", sensitive);
if (document)
set_action_sensitive (ev_window, "EditFind", EV_IS_DOCUMENT_FIND (document));