*
* 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.
*
*/
#endif /* WITH_SMCLIENT */
#ifdef G_OS_WIN32
-#ifdef DATADIR
-#undef DATADIR
-#endif
#include <io.h>
#include <conio.h>
#if !(_WIN32_WINNT >= 0x0500)
static gchar *ev_page_label;
static gchar *ev_find_string;
+static gint ev_page_index = 0;
static gboolean preview_mode = FALSE;
static gboolean fullscreen_mode = FALSE;
static gboolean presentation_mode = FALSE;
static gchar *print_settings;
static const char **file_arguments = NULL;
+
static gboolean
option_version_cb (const gchar *option_name,
const gchar *value,
static const GOptionEntry goption_options[] =
{
- { "page-label", 'p', 0, G_OPTION_ARG_STRING, &ev_page_label, N_("The page of the document to display."), N_("PAGE")},
+ { "page-label", 'p', 0, G_OPTION_ARG_STRING, &ev_page_label, N_("The page label of the document to display."), N_("PAGE")},
+ { "page-index", 'i', 0, G_OPTION_ARG_INT, &ev_page_index, N_("The page number of the document to display."), N_("NUMBER")},
{ "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 },
{
GString *cmd_str;
gchar *cmd;
- gint argc;
- gchar **argv;
gboolean retval = FALSE;
GError *error = NULL;
}
cmd = g_string_free (cmd_str, FALSE);
- g_shell_parse_argv (cmd, &argc, &argv, &error);
- g_free (cmd);
-
+
if (!error) {
- retval = gdk_spawn_on_screen (gdk_screen_get_default (),
- NULL, argv, NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL, NULL,
- &error);
- g_strfreev (argv);
+ GAppInfo *app;
+
+ app = g_app_info_create_from_commandline (cmd, NULL, 0, &error);
+
+ if (app != NULL) {
+ retval = g_app_info_launch (app, NULL, NULL, &error);
+ g_object_unref (app);
+ }
}
if (error) {
g_error_free (error);
}
+ g_free (cmd);
+
return retval;
}
+static gchar *
+get_label_from_filename (const gchar *filename)
+{
+ GFile *file;
+ gchar *label;
+ gboolean exists;
+
+ label = g_strrstr (filename, "#");
+ if (!label)
+ return NULL;
+
+ /* Filename contains a #, check
+ * whether it's part of the path
+ * or a label
+ */
+ file = g_file_new_for_commandline_arg (filename);
+ exists = g_file_query_exists (file, NULL);
+ g_object_unref (file);
+
+ return exists ? NULL : label;
+}
+
static void
load_files (const char **files)
{
if (ev_page_label)
global_dest = ev_link_dest_new_page_label (ev_page_label);
+ else if (ev_page_index)
+ global_dest = ev_link_dest_new_page (MAX (0, ev_page_index - 1));
if (fullscreen_mode)
mode = EV_WINDOW_MODE_FULLSCREEN;
mode = EV_WINDOW_MODE_PRESENTATION;
for (i = 0; files[i]; i++) {
+ const gchar *filename;
gchar *uri;
gchar *label;
GFile *file;
EvLinkDest *dest = NULL;
const gchar *app_uri;
- file = g_file_new_for_commandline_arg (files[i]);
+ filename = files[i];
+ label = get_label_from_filename (filename);
+ if (label) {
+ *label = 0;
+ label++;
+ dest = ev_link_dest_new_page_label (label);
+ } else if (global_dest) {
+ dest = g_object_ref (global_dest);
+ }
+
+ file = g_file_new_for_commandline_arg (filename);
uri = g_file_get_uri (file);
g_object_unref (file);
continue;
}
- label = strchr (uri, '#');
- if (label) {
- *label = 0;
- label++;
- dest = ev_link_dest_new_page_label (label);
- } else if (global_dest) {
- dest = g_object_ref (global_dest);
- }
+
ev_application_open_uri_at_dest (EV_APP, uri, screen, dest,
mode, ev_find_string,
#ifdef ENABLE_NLS
/* Initialize the i18n stuff */
- bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir());
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif
ev_application_load_session (EV_APP);
load_files (file_arguments);
- if (ev_application_has_window (EV_APP)) {
- /* Change directory so we don't prevent unmounting in case the initial cwd
- * is on an external device (see bug #575436)
- */
- g_chdir (g_get_home_dir ());
- gtk_main ();
- }
+ /* Change directory so we don't prevent unmounting in case the initial cwd
+ * is on an external device (see bug #575436)
+ */
+ g_chdir (g_get_home_dir ());
+
+ gtk_main ();
ev_shutdown ();
ev_stock_icons_shutdown ();