Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-window.c111
-rw-r--r--shell/main.c36
2 files changed, 78 insertions, 69 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c
index df7bf25..64f0163 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -58,7 +58,6 @@ struct _EvWindowPrivate {
GtkWidget *hpaned;
GtkWidget *sidebar;
GtkWidget *find_bar;
- GtkWidget *bonobo_widget;
GtkWidget *view;
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
@@ -179,86 +178,66 @@ ev_window_is_empty (const EvWindow *ev_window)
{
g_return_val_if_fail (EV_IS_WINDOW (ev_window), FALSE);
- return ev_window->priv->bonobo_widget == NULL;
+ return ev_window->priv->document == NULL;
}
-void
-ev_window_open (EvWindow *ev_window, const char *uri)
+static void
+unable_to_load (EvWindow *ev_window,
+ const char *error_message)
{
- EvDocument *document = g_object_new (PDF_TYPE_DOCUMENT, NULL);
- GError *error = NULL;
+ GtkWidget *dialog;
- if (ev_document_load (document, uri, &error)) {
- if (ev_window->priv->document)
- g_object_unref (ev_window->priv->document);
- ev_window->priv->document = document;
+ dialog = gtk_message_dialog_new (GTK_WINDOW (ev_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Unable to open document"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", error_message);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
- ev_view_set_document (EV_VIEW (ev_window->priv->view),
- document);
+void
+ev_window_open (EvWindow *ev_window, const char *uri)
+{
+ EvDocument *document = NULL;
+ char *mime_type;
- update_action_sensitivity (ev_window);
-
- } else {
- GtkWidget *dialog;
+ mime_type = gnome_vfs_get_mime_type (uri);
- g_object_unref (document);
+ if (!strcmp (mime_type, "application/pdf"))
+ document = g_object_new (PDF_TYPE_DOCUMENT, NULL);
- dialog = gtk_message_dialog_new (GTK_WINDOW (ev_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("Unable to open document"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", error->message);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
+ if (document) {
+ GError *error = NULL;
- g_error_free (error);
- }
-
-#if 0
- char *mime_type;
- BonoboObject *bonobo_control;
- CORBA_Environment ev;
- Bonobo_PersistFile pf;
+ if (ev_document_load (document, uri, &error)) {
+ if (ev_window->priv->document)
+ g_object_unref (ev_window->priv->document);
+ ev_window->priv->document = document;
- mime_type = gnome_vfs_get_mime_type (uri);
+ ev_view_set_document (EV_VIEW (ev_window->priv->view),
+ document);
- g_return_if_fail (mime_type != NULL); /* FIXME set error */
-
- if (!strcmp (mime_type, "application/pdf")) {
- bonobo_control = create_gpdf_control ();
- } else if (!strcmp (mime_type, "application/postscript")) {
- bonobo_control = create_ggv_control ();
- } else if (!strcmp (mime_type, "application/x-gzip")) {
- g_message ("Cannot open gzip-compressed file %s.", uri);
- goto finally;
- } else if (!strcmp (mime_type, "application/x-bzip")) {
- g_message ("Cannot open bzip2-compressed file %s.", uri);
- goto finally;
+ update_action_sensitivity (ev_window);
+
+ } else {
+ g_assert (error != NULL);
+ g_object_unref (document);
+ unable_to_load (ev_window, error->message);
+ g_error_free (error);
+ }
} else {
- g_warning ("Don't know how to open %s file %s.",
- mime_type, uri); /* FIXME set error */
- goto finally;
+ char *error_message;
+
+ error_message = g_strdup_printf (_("Unhandled MIME type: '%s'"),
+ mime_type);
+ unable_to_load (ev_window, error_message);
+ g_free (error_message);
}
- ev_window->priv->bonobo_widget = bonobo_widget_new_control_from_objref (
- bonobo_object_corba_objref (bonobo_control), CORBA_OBJECT_NIL);
- gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
- ev_window->priv->bonobo_widget,
- TRUE, TRUE, 0);
- CORBA_exception_init (&ev);
- pf = bonobo_object_query_interface (
- bonobo_control, "IDL:Bonobo/PersistFile:1.0", &ev);
- Bonobo_PersistFile_load (pf, uri, &ev);
- gtk_widget_show (ev_window->priv->bonobo_widget);
- bonobo_object_release_unref (pf, &ev);
- bonobo_object_unref (bonobo_control);
- CORBA_exception_free (&ev);
-
-finally:
g_free (mime_type);
-#endif
}
static void
diff --git a/shell/main.c b/shell/main.c
index ac20266..4b0c842 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -26,19 +26,50 @@
#include <gtk/gtkmain.h>
#include <libgnome/gnome-program.h>
#include <libgnomeui/gnome-ui-init.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
static struct poptOption popt_options[] =
{
{ NULL, 0, 0, NULL, 0, NULL, NULL }
};
+static void
+load_files (const char **files)
+{
+ GtkWidget *window;
+ int i;
+
+ if (!files) {
+ window = GTK_WIDGET (ev_application_new_window (EV_APP));
+ gtk_widget_show (window);
+ return;
+ }
+
+ for (i = 0; files[i]; i++) {
+ const char *uri;
+ char *freeme = NULL;
+ char *scheme;
+
+ if ((scheme = gnome_vfs_get_uri_scheme (files[i])))
+ uri = files[i];
+ else
+ uri = freeme = gnome_vfs_get_uri_from_local_path (files[i]);
+
+ window = GTK_WIDGET (ev_application_new_window (EV_APP));
+ gtk_widget_show (window);
+ ev_window_open (EV_WINDOW (window), uri);
+
+ g_free (scheme);
+ g_free (freeme);
+ }
+}
+
int
main (int argc, char *argv[])
{
poptContext context;
GValue context_as_value = { 0 };
GnomeProgram *program;
- GtkWidget *window;
#ifdef ENABLE_NLS
/* Initialize the i18n stuff */
@@ -61,8 +92,7 @@ main (int argc, char *argv[])
g_value_init (&context_as_value, G_TYPE_POINTER));
context = g_value_get_pointer (&context_as_value);
- window = GTK_WIDGET (ev_application_new_window (EV_APP));
- gtk_widget_show (window);
+ load_files (poptGetArgs (context));
gtk_main ();