]> www.fi.muni.cz Git - evince.git/commitdiff
Fix the crash when trying to copy in backends that doesnt support it. We
authorMarco Pesenti Gritti <mpg@redhat.com>
Thu, 14 Apr 2005 15:41:30 +0000 (15:41 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Thu, 14 Apr 2005 15:41:30 +0000 (15:41 +0000)
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.

ChangeLog
backend/ev-document.c
backend/ev-document.h
djvu/djvu-document.c
dvi/dvi-document.c
pdf/ev-poppler.cc
pixbuf/pixbuf-document.c
ps/ps-document.c
shell/ev-view.c
shell/ev-window.c

index 4fc983a75df858ac5f0fd8fa69bc8e31c7cb4b8e..87c05e835994b3010c8fa7b4182bc12df88e6782 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+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:
index aa61fc694b94f062fac9a55d6a3ce3488ffa972e..124a626154f1be0ff0d38ab9aa09cdb3da8465ce 100644 (file)
@@ -182,6 +182,14 @@ ev_document_get_page_label(EvDocument    *document,
        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,
index 743b947811dd6e6056fced5dda1278edffe24574..6cdf8d24c45559bcc3168c2cdc5639f5607341d6 100644 (file)
@@ -79,6 +79,7 @@ struct _EvDocumentIface
                                         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);
@@ -109,6 +110,7 @@ void       ev_document_get_page_size (EvDocument    *document,
                                      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);
index 1b155bf47085bb08b6159155de8093ace50dd066..d74af665c268fc0769ef53bf238f02b5f3d0dd29 100644 (file)
@@ -224,12 +224,10 @@ djvu_document_class_init (DjvuDocumentClass *klass)
        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
@@ -237,7 +235,7 @@ djvu_document_document_iface_init (EvDocumentIface *iface)
 {
        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;
index f827ff40ace36608626108236e8b3bce9b7e2606..b9edc9e65c4a95462c7afff94558b6cbaddbaf1d 100644 (file)
@@ -238,12 +238,10 @@ dvi_document_class_init (DviDocumentClass *klass)
        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
@@ -251,7 +249,7 @@ dvi_document_document_iface_init (EvDocumentIface *iface)
 {
        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;
index ac602b0452a7f3a45f96cdab1d46d3cd3e8070fb..1599f2f24906ad9af5336f45514bb36e5d8757fe 100644 (file)
@@ -324,6 +324,12 @@ pdf_document_set_password (EvDocumentSecurity *document_security,
        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)
 {
@@ -341,8 +347,6 @@ 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);
 }
 
@@ -357,6 +361,7 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
        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
index b83da789791c741c9d41259033b3174cacf2388d..0aabb55f537d5172eee03589cd0bcaee09cfbdaf 100644 (file)
@@ -169,12 +169,10 @@ pixbuf_document_class_init (PixbufDocumentClass *klass)
        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
@@ -182,7 +180,7 @@ pixbuf_document_document_iface_init (EvDocumentIface *iface)
 {
        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;
index c857a21d4d9fd392045bd0d1a34bccf333f4e1b7..d06855f30ac02ee9039f98a4ed793380f7ef81bc 100644 (file)
@@ -1286,11 +1286,10 @@ ps_document_get_page_size (EvDocument   *document,
        }
 }
 
-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
@@ -1348,7 +1347,7 @@ ps_document_document_iface_init (EvDocumentIface *iface)
 {
        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;
index 5678fc28e24c9c7d6f6b58e2f6fcd6ca4e95fc2f..b615b6c4b0bc92ea6f4a4cbc9d5acbcf8956266b 100644 (file)
@@ -620,6 +620,10 @@ ev_view_copy (EvView *ev_view)
        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,
@@ -641,6 +645,10 @@ ev_view_primary_get_cb (GtkClipboard     *clipboard,
        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,
index 734846ffc8aace25c5d620be9ac8530b08e04844..4d03050e168c434d920626022025ce49bfdba52d 100644 (file)
@@ -183,6 +183,7 @@ update_action_sensitivity (EvWindow *ev_window)
        EvDocument *document;
        EvWindowPageMode page_mode;
        EvView *view;
+       gboolean sensitive;
 
        document = ev_window->priv->document;
        page_mode = ev_window->priv->page_mode;
@@ -195,8 +196,10 @@ update_action_sensitivity (EvWindow *ev_window)
        /* "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));