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

Greetings

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