Get the URI from the file dialog rather than the filename.
[raktpdf.git] / src / rakt-window.c
index 7cea82202828ca59208b9f1b1c394fdc9bc53009..c1e19611a3c599d06a2206c8e50a447b88b9d8f6 100644 (file)
@@ -58,12 +58,15 @@ static const GtkActionEntry action_entries[] = {
        {
                "FileMenu", NULL, "_File", NULL, NULL, NULL
        },
+       {
+               "GoMenu", NULL, "_Go", NULL, NULL, NULL
+       },
        {
                "HelpMenu", NULL, "_Help", NULL, NULL, NULL
        },
        {
-               "Open", GTK_STOCK_OPEN,
-               "_Open", "<control>O", "Open a PDF file",
+               "Open", GTK_STOCK_OPEN, "_Open",
+               "<control>O", "Open a PDF file",
                G_CALLBACK (on_action_open)
        },
        {
@@ -77,13 +80,13 @@ static const GtkActionEntry action_entries[] = {
                G_CALLBACK (on_action_go_previous)
        },
        {
-               "Quit", GTK_STOCK_QUIT,
-               "_Quit", "<control>Q", "Quit the application",
+               "Quit", GTK_STOCK_QUIT, "_Quit",
+               "<control>Q", "Quit the application",
                G_CALLBACK (on_action_quit)
        },
        {
-               "About", GTK_STOCK_ABOUT,
-               "_About", NULL, "About this application",
+               "About", GTK_STOCK_ABOUT, "_About",
+               NULL, "About this application",
                G_CALLBACK (on_action_about)
        }
 };
@@ -96,6 +99,10 @@ static const gchar *ui_layout =
        "                       <separator action='Sep1'/>"
        "                       <menuitem action='Quit'/>"
        "               </menu>"
+       "               <menu action='GoMenu'>"
+       "                       <menuitem action='Previous'/>"
+       "                       <menuitem action='Next'/>"
+       "               </menu>"
        "               <menu action='HelpMenu'>"
        "                       <menuitem action='About'/>"
        "               </menu>"
@@ -152,20 +159,14 @@ render_page (RaktWindow *window)
 }
 
 static void
-open_document (RaktWindow *window, gchar *file)
+open_document (RaktWindow *window, gchar *uri)
 {
        RaktWindowPriv *priv;
        GError *error = NULL;
-       gchar real[PATH_MAX], buf[16 + PATH_MAX];
 
        priv = GET_PRIV (window);
 
-       realpath (file, real);
-
-       g_strlcpy (buf, "file://", sizeof (buf));
-       g_strlcat (buf, real, sizeof (buf));
-
-       priv->document = poppler_document_new_from_file (buf, NULL, &error);
+       priv->document = poppler_document_new_from_file (uri, NULL, &error);
 
        priv->page_no = 0;
        render_page (window);
@@ -176,6 +177,7 @@ window_create_menu (RaktWindow *window)
 {
        RaktWindowPriv *priv;
        GtkActionGroup *action_group;
+       GtkAccelGroup *accel_group;
        GError *error = NULL;
 
        priv = GET_PRIV (window);
@@ -191,6 +193,10 @@ window_create_menu (RaktWindow *window)
        gtk_action_group_add_actions (action_group, action_entries,
                                      G_N_ELEMENTS (action_entries), window);
        gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0);
+
+       accel_group = gtk_ui_manager_get_accel_group (priv->ui_manager);
+       gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
        g_object_unref (action_group);
 
        gtk_ui_manager_add_ui_from_string (priv->ui_manager, ui_layout, -1, &error);
@@ -296,10 +302,11 @@ on_action_open (GtkAction *action, RaktWindow *window)
        n = gtk_dialog_run (GTK_DIALOG (dialog));
 
        if (n == GTK_RESPONSE_ACCEPT) {
-               gchar *file;
+               gchar *uri;
 
-               file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
-               open_document (window, file);
+               uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+               open_document (window, uri);
+               g_free (uri);
        }
 
        gtk_widget_destroy (dialog);