On Fri, 23 Jun 2017, [email protected] wrote:

Hi, did you do make install? Evince cannot be run from the compile directory, 
unfortunately. 
Greetings

Everything seems to work now - maybe I forgot to install one of the libraries earlier...

I downloaded the debian evince source, patched it and then built it with dpkg-buildpackage. I think I then need to install new versions with:

# dpkg -i evince_3.22.1-3_amd64.deb evince-common_3.22.1-3_all.deb \
gir1.2-evince-3.0_3.22.1-3_amd64.deb libevdocument3-4_3.22.1-3_amd64.deb \ libevview3-3_3.22.1-3_amd64.deb



Anyway, let me know if there is anything I can do to encourage someone to add some sort of option like this to the main tree...

Thanks!

Joseph








José


On Fri, Jun 23, 2017 at 1:31 PM, Joseph Maher via evince-list 
<[email protected]> wrote:

      I have made a failed attempt to port the patch for bug 688636 to the 
current version
      of evince in debian stable (stretch) which is 3.22.1. The patch attempts 
to add a
      command line option to evince, so that it opens the pdf in a new window, 
even if it
      is currently open.  I've attached the patch below, and it compiles, but 
when I run
      the binary I get:

      (evince:8028): EvinceDocument-WARNING **: Error opening directory
      '/usr/lib/x86_64-linux-gnu/evince/4/backends': No such file or directory

      So possibly this is some build problem not directly related to the patch?

      Any advice much appreciated! (patch appended to the end of this email).

      Yours

      Joseph


      diff -r -U3 evince-3.22.1.orig/data/evince.1 evince-3.22.1/data/evince.1
      --- evince-3.22.1.orig/data/evince.1    2014-11-29 01:40:15.000000000 
-0800
      +++ evince-3.22.1/data/evince.1 2017-06-22 18:17:13.388633637 -0700
      @@ -33,6 +33,9 @@
       \fB\-p, \-\-page\-label=PAGE\fR
       Open the document on the page with the specified page label (or page 
number).
       .TP
      +\fB\-o, \-\-really\-open\fR
      +Open new view of the document even if another window showing the 
document is already
      open.
      +.TP
       \fB\-i, \-\-page\-index=NUMBER\fR
       Open the document on the page with the specified page index (this is the 
exact page
      number, not a page label).
       .TP
      diff -r -U3 evince-3.22.1.orig/shell/ev-application.c
      evince-3.22.1/shell/ev-application.c
      --- evince-3.22.1.orig/shell/ev-application.c   2016-07-17 
01:51:40.000000000 -0700
      +++ evince-3.22.1/shell/ev-application.c        2017-06-22 
18:17:13.392633236 -0700
      @@ -284,6 +284,7 @@
              EvWindowRunMode mode;
              gchar          *search_string;
              guint           timestamp;
      +       gboolean        new_view;
       } EvRegisterDocData;

       static void
      @@ -421,7 +422,7 @@
                                      owner,
                                      APPLICATION_DBUS_OBJECT_PATH,
                                      APPLICATION_DBUS_INTERFACE,
      -                               "Reload",
      +                               (data->new_view ? "NewView" : "Reload"),
                                      g_variant_builder_end (&builder),
                                      NULL,
                                      G_DBUS_CALL_FLAGS_NONE,
      @@ -454,7 +455,8 @@
                                    EvLinkDest     *dest,
                                    EvWindowRunMode mode,
                                    const gchar    *search_string,
      -                            guint           timestamp)
      +                            guint           timestamp,
      +                            gboolean        new_view)
       {
              EvRegisterDocData *data;

      @@ -490,6 +492,7 @@
              data->mode = mode;
              data->search_string = search_string ? g_strdup (search_string) : 
NULL;
              data->timestamp = timestamp;
      +       data->new_view = new_view;

               g_dbus_connection_call (g_application_get_dbus_connection 
(G_APPLICATION
      (application)),
                                      EVINCE_DAEMON_SERVICE,
      @@ -569,7 +572,6 @@

              if (!gtk_widget_get_realized (GTK_WIDGET (ev_window)))
                      gtk_widget_realize (GTK_WIDGET (ev_window));
      -
       #ifdef GDK_WINDOWING_X11
              gdk_window = gtk_widget_get_window (GTK_WIDGET (ev_window));
              if (GDK_IS_X11_WINDOW (gdk_window)) {
      @@ -623,7 +625,8 @@
                                       EvLinkDest     *dest,
                                       EvWindowRunMode mode,
                                       const gchar    *search_string,
      -                                guint           timestamp)
      +                                guint           timestamp,
      +                                gboolean        new_view)
       {
              g_return_if_fail (uri != NULL);

      @@ -639,7 +642,7 @@
              /* Register the uri or send Reload to
               * remote instance if already registered
               */
      -       ev_application_register_uri (application, uri, screen, dest, mode,
      search_string, timestamp);
      +       ev_application_register_uri (application, uri, screen, dest, mode,
      search_string, timestamp, new_view);
       #else
              _ev_application_open_uri_at_dest (application, uri, screen, dest, 
mode,
      search_string, timestamp);
       #endif /* ENABLE_DBUS */
      @@ -725,13 +728,16 @@
               return TRUE;
       }

      -static gboolean
      -handle_reload_cb (EvEvinceApplication   *object,
      -                  GDBusMethodInvocation *invocation,
      -                  GVariant              *args,
      -                  guint                  timestamp,
      -                  EvApplication         *application)
      -{
      +typedef enum { HDC_RELOAD, HDC_NEWVIEW } hdc_action;
      +
      +  static void
      +    handle_document_cb (EvEvinceApplication   *object,
      +                                     hdc_action            action,
      +                                      GVariant              *args,
      +                                      guint                  timestamp,
      +                                      EvApplication         *application)
      +    {
      +
               GList           *windows, *l;
               GVariantIter     iter;
               const gchar     *key;
      @@ -741,6 +747,7 @@
               EvWindowRunMode  mode = EV_WINDOW_MODE_NORMAL;
               const gchar     *search_string = NULL;
               GdkScreen       *screen = NULL;
      +        EvWindow        *window = NULL;

               g_variant_iter_init (&iter, args);

      @@ -769,20 +776,54 @@
               for (l = windows; l != NULL; l = g_list_next (l)) {
                       if (!EV_IS_WINDOW (l->data))
                               continue;
      +                window = EV_WINDOW (l->data);

      -                ev_application_open_uri_in_window (application, NULL,
      -                                                   EV_WINDOW (l->data),
      -                                                   screen, dest, mode,
      -                                                   search_string,
      -                                                   timestamp);
      +               switch (action) {
      +                       case HDC_NEWVIEW:
      +                               l = NULL; /* exit cycle */
      +                               /* FIXME screen and timestamp discarded 
here */
      +                               ev_window_new_view(window, dest, mode,
      search_string);
      +                               break;
      +                       case HDC_RELOAD:
      +                               ev_application_open_uri_in_window 
(application, NULL,
      + EV_WINDOW (l->data),
      +                                                                  
screen, dest,
      mode,
      + search_string,
      + timestamp);
      +                               break;
      +               }
               }

               if (dest)
                       g_object_unref (dest);
      +}
      +
      +static gboolean
      +handle_reload_cb (EvEvinceApplication   *object,
      +                  GDBusMethodInvocation *invocation,
      +                  GVariant              *args,
      +                  guint                  timestamp,
      +                  EvApplication         *application)
      +{
      +       handle_document_cb(object, HDC_RELOAD, args, timestamp, 
application);

      -        ev_evince_application_complete_reload (object, invocation);
      +       ev_evince_application_complete_reload (object, invocation);

      -        return TRUE;
      +       return TRUE;
      +}
      +
      +static gboolean
      +handle_new_view_cb (EvEvinceApplication   *object,
      +                  GDBusMethodInvocation *invocation,
      +                  GVariant              *args,
      +                  guint                  timestamp,
      +                  EvApplication         *application)
      +{
      +       handle_document_cb(object, HDC_NEWVIEW, args, timestamp, 
application);
      +
      +       ev_evince_application_complete_new_view (object, invocation);
      +
      +       return TRUE;
       }
       #endif /* ENABLE_DBUS */

      @@ -797,7 +838,7 @@
              for (l = uri_list; l != NULL; l = l->next) {
                      ev_application_open_uri_at_dest (application, (char 
*)l->data,
                                                       screen, NULL, 0, NULL,
      -                                                timestamp);
      +                                                timestamp, 0);
              }
       }

      @@ -1173,6 +1214,9 @@
               g_signal_connect (skeleton, "handle-reload",
                                 G_CALLBACK (handle_reload_cb),
                                 application);
      +        g_signal_connect (skeleton, "handle-new-view",
      +                          G_CALLBACK (handle_new_view_cb),
      +                          application);
               application->keys = ev_media_player_keys_new ();

               return TRUE;
      diff -r -U3 evince-3.22.1.orig/shell/ev-application.h
      evince-3.22.1/shell/ev-application.h
      --- evince-3.22.1.orig/shell/ev-application.h   2015-04-26 
02:38:27.000000000 -0700
      +++ evince-3.22.1/shell/ev-application.h        2017-06-22 
18:17:13.392633236 -0700
      @@ -58,7 +58,8 @@
                                                            EvLinkDest *dest,
                                                            EvWindowRunMode 
mode,
                                                            const gchar 
*search_string,
      -                                                     guint32 timestamp);
      +                                                     guint32 timestamp,
      +                                                     gboolean new_view);
       void             ev_application_open_uri_list       (EvApplication 
*application,
                                                            GSList *uri_list,
                                                            GdkScreen *screen,
      diff -r -U3 evince-3.22.1.orig/shell/ev-gdbus.xml 
evince-3.22.1/shell/ev-gdbus.xml
      --- evince-3.22.1.orig/shell/ev-gdbus.xml       2014-11-29 
01:40:16.000000000 -0800
      +++ evince-3.22.1/shell/ev-gdbus.xml    2017-06-22 18:17:13.392633236 
-0700
      @@ -8,6 +8,10 @@
             <arg type='a{sv}' name='args' direction='in'/>
             <arg type='u' name='timestamp' direction='in'/>
           </method>
      +    <method name='NewView'>
      +      <arg type='a{sv}' name='args' direction='in'/>
      +      <arg type='u' name='timestamp' direction='in'/>
      +    </method>
           <method name='GetWindowList'>
             <arg type='ao' name='window_list' direction='out'/>
           </method>
      diff -r -U3 evince-3.22.1.orig/shell/ev-window.c 
evince-3.22.1/shell/ev-window.c
      --- evince-3.22.1.orig/shell/ev-window.c        2016-10-11 
22:41:36.000000000 -0700
      +++ evince-3.22.1/shell/ev-window.c     2017-06-22 18:25:53.608283392 
-0700
      @@ -2588,6 +2588,24 @@
              gtk_window_present (GTK_WINDOW (new_window));
       }

      +void  ev_window_new_view (EvWindow   *window,
      +                         EvLinkDest *dest,
      +                         EvWindowRunMode mode,
      +                         const gchar * search_string)
      +{
      +        EvWindow *new_window = EV_WINDOW (ev_window_new ());
      +
      +        if (window->priv->metadata)
      +                new_window->priv->metadata = g_object_ref 
(window->priv->metadata);
      +        ev_window_open_document (new_window,
      +                                 window->priv->document,
      +                                dest, mode, search_string);
      +        gtk_window_present (GTK_WINDOW (new_window));
      + }
      +
      +
      +
      +
       static void
       ev_window_cmd_file_open_copy (GSimpleAction *action,
                                    GVariant      *parameter,
      @@ -5093,7 +5111,7 @@
       {
              ev_application_open_uri_at_dest (EV_APP, uri,
                                               gtk_window_get_screen (GTK_WINDOW
      (ev_window)),
      -                                        NULL, 0, NULL, 
gtk_get_current_event_time
      ());
      +                                        NULL, 0, NULL, 
gtk_get_current_event_time
      (), 0);
       }

       static void
      @@ -5948,7 +5966,7 @@
                                               ev_link_action_get_dest (action),
                                               0,
                                               NULL,
      -                                        gtk_get_current_event_time ());
      +                                        gtk_get_current_event_time (), 
0);

              g_free (uri);
       }
      diff -r -U3 evince-3.22.1.orig/shell/ev-window.h 
evince-3.22.1/shell/ev-window.h
      --- evince-3.22.1.orig/shell/ev-window.h        2015-04-26 
02:38:27.000000000 -0700
      +++ evince-3.22.1/shell/ev-window.h     2017-06-22 18:23:16.676305253 
-0700
      @@ -83,6 +83,10 @@
                                                                 EvLinkDest 
*dest,
                                                                 
EvWindowRunMode mode,
                                                                 const gchar
      *search_string);
      +void           ev_window_new_view                       (EvWindow 
*ev_window,
      +                                                          EvLinkDest 
*dest,
      +                                                          
EvWindowRunMode mode,
      +                                                          const gchar
      *search_string);
       void            ev_window_open_recent_view               (EvWindow 
*ev_window);
       gboolean       ev_window_is_empty                       (const EvWindow 
*ev_window);
       void           ev_window_print_range                    (EvWindow 
*ev_window,
      diff -r -U3 evince-3.22.1.orig/shell/main.c evince-3.22.1/shell/main.c
      --- evince-3.22.1.orig/shell/main.c     2015-04-26 02:38:27.000000000 
-0700
      +++ evince-3.22.1/shell/main.c  2017-06-22 18:17:13.404632038 -0700
      @@ -47,6 +47,7 @@
       static gint     ev_page_index = 0;
       static gchar   *ev_named_dest;
       static gboolean preview_mode = FALSE;
      +static gboolean really_open = FALSE;
       static gboolean fullscreen_mode = FALSE;
       static gboolean presentation_mode = FALSE;
       static gboolean unlink_temp_file = FALSE;
      @@ -74,6 +75,7 @@
              { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &fullscreen_mode, 
N_("Run evince
      in fullscreen mode"), NULL },
              { "presentation", 's', 0, G_OPTION_ARG_NONE, &presentation_mode, 
N_("Run
      evince in presentation mode"), NULL },
              { "preview", 'w', 0, G_OPTION_ARG_NONE, &preview_mode, N_("Run 
evince as a
      previewer"), NULL },
      +       { "really-open", 'o', 0, G_OPTION_ARG_NONE, &really_open, 
N_("Open a new view
      even if file is already open in evince"), NULL },
              { "find", 'l', 0, G_OPTION_ARG_STRING, &ev_find_string, N_("The 
word or
      phrase to find in the document"), N_("STRING")},
              { "unlink-tempfile", 'u', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE,
      &unlink_temp_file, NULL, NULL },
              { "print-settings", 't', G_OPTION_FLAG_HIDDEN, 
G_OPTION_ARG_FILENAME,
      &print_settings, NULL, NULL },
      @@ -214,11 +216,9 @@
                              continue;
                      }

      -
      -
                      ev_application_open_uri_at_dest (EV_APP, uri, screen, 
dest,
                                                       mode, ev_find_string,
      -                                                GDK_CURRENT_TIME);
      +                                                GDK_CURRENT_TIME, 
really_open);

                      if (dest)
                              g_object_unref (dest);


      _______________________________________________
      evince-list mailing list
      [email protected]
      https://mail.gnome.org/mailman/listinfo/evince-list



_______________________________________________
evince-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/evince-list

Reply via email to