diff options
author | Marco Pesenti Gritti <marco@src.gnome.org> | 2003-11-13 22:02:03 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2003-11-13 22:02:03 +0800 |
commit | f96998042311fdbe13591635b4861f6e9db7c230 (patch) | |
tree | ed45fb5150f213180392d71f4563ac0d86eec9d7 /src/ephy-main.c | |
parent | f6bdfce7e16b98825598dc990efef0846efdb079 (diff) | |
download | gsoc2013-epiphany-f96998042311fdbe13591635b4861f6e9db7c230.tar.gz gsoc2013-epiphany-f96998042311fdbe13591635b4861f6e9db7c230.tar.zst gsoc2013-epiphany-f96998042311fdbe13591635b4861f6e9db7c230.zip |
ChangeLog
Diffstat (limited to 'src/ephy-main.c')
-rw-r--r-- | src/ephy-main.c | 261 |
1 files changed, 62 insertions, 199 deletions
diff --git a/src/ephy-main.c b/src/ephy-main.c index 80627736c..542cc3c06 100644 --- a/src/ephy-main.c +++ b/src/ephy-main.c @@ -21,60 +21,32 @@ #endif #include "ephy-shell.h" -#include "ephy-automation.h" -#include "ephy-window.h" -#include "ephy-file-helpers.h" -#include "EphyAutomation.h" #include <libgnomeui/gnome-ui-init.h> +#include <gtk/gtkmain.h> #include <gtk/gtkmessagedialog.h> #include <libgnome/gnome-program.h> #include <bonobo/bonobo-main.h> +#include <glib/gi18n.h> -#define EPHY_FACTORY_OAFIID "OAFIID:GNOME_Epiphany_Automation_Factory" - -static gint -ephy_main_translate_url_arguments (poptContext context, gchar ***urls); -static gboolean -ephy_main_start (gpointer data); - -GnomeProgram *program; -CORBA_Environment corba_env; /* Global for downloader */ -static gboolean open_in_existing = FALSE; /* load in existing window? */ -static gboolean open_in_new_tab = FALSE; /* force open in a new tab? */ -static gboolean noraise = FALSE; /* no raise */ -static gboolean open_in_new_window = FALSE; /* force open in a new window? */ -static gboolean open_fullscreen = FALSE; /* open ephy in full screen ? */ -static gchar *session_filename = NULL; /* the session filename */ -static gchar *bookmark_url = NULL; /* the temp bookmark to add */ -static gchar *bookmarks_file = NULL; /* the bookmarks file to import */ -static gboolean open_as_bookmarks_editor = FALSE; /* --bookmarks-editor */ +static gboolean open_in_existing = FALSE; +static gboolean open_in_new_tab = FALSE; +static gboolean open_fullscreen = FALSE; +static gboolean open_as_bookmarks_editor = FALSE; static gboolean open_as_nautilus_view = FALSE; -static gint n_urls; -static gchar **url; -static gboolean first_instance; +static const char *session_filename = NULL; +static const char *bookmark_url = NULL; +static const char *bookmarks_file = NULL; -/* command line argument parsing structure */ static struct poptOption popt_options[] = { - { NULL, '\0', POPT_ARG_INCLUDE_TABLE, &bonobo_activation_popt_options, 0, NULL, - NULL }, { "new-tab", 'n', POPT_ARG_NONE, &open_in_new_tab, 0, N_("Open a new tab in an existing Epiphany window"), NULL }, - { "new-window", 'w', POPT_ARG_NONE, &open_in_new_window, 0, - N_("Open a new window in an existing Epiphany process"), - NULL }, - { "noraise", '\0', POPT_ARG_NONE, &noraise, 0, - N_("Do not raise the window when opening a page in an existing Epiphany process"), - NULL }, { "fullscreen", 'f', POPT_ARG_NONE, &open_fullscreen, 0, N_("Run Epiphany in full screen mode"), NULL }, - { "existing", 'x', POPT_ARG_NONE, &open_in_existing, 0, - N_("Attempt to load URL in existing Epiphany window"), - NULL }, { "load-session", 'l', POPT_ARG_STRING, &session_filename, 0, N_("Load the given session file"), N_("FILE") }, @@ -90,18 +62,26 @@ static struct poptOption popt_options[] = { "bookmarks-editor", 'b', POPT_ARG_NONE, &open_as_bookmarks_editor, 0, N_("Launch the bookmarks editor"), NULL }, - - /* terminator, must be last */ { NULL, 0, 0, NULL, 0, NULL, NULL } }; +static void +shell_weak_notify (gpointer data, + GObject *where_the_object_was) +{ + gtk_main_quit (); +} + int main (int argc, char *argv[]) { poptContext context; GValue context_as_value = { 0 }; GnomeProgram *program; - CORBA_Object factory; + EphyShellStartupFlags startup_flags; + const char **args, *string_arg; + gboolean new_instance; + GError *err = NULL; #ifdef ENABLE_NLS /* Initialize the i18n stuff */ @@ -109,8 +89,8 @@ main (int argc, char *argv[]) bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif - g_set_application_name (_("Epiphany Web Browser")); + g_set_application_name (_("Epiphany Web Browser")); program = gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv, GNOME_PARAM_POPT_TABLE, popt_options, @@ -121,188 +101,71 @@ main (int argc, char *argv[]) g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT, g_value_init (&context_as_value, G_TYPE_POINTER)); - context = g_value_get_pointer (&context_as_value); + args = poptGetArgs (context); + poptFreeContext (context); - /* load arguments that aren't regular options (urls to load) */ - n_urls = ephy_main_translate_url_arguments (context, &url); - - g_value_unset (&context_as_value); - - factory = bonobo_activation_activate_from_id - (EPHY_FACTORY_OAFIID, - Bonobo_ACTIVATION_FLAG_EXISTING_ONLY, - NULL, NULL); - - if (factory != NULL) + startup_flags = 0; + string_arg = NULL; + if (open_in_new_tab) { - first_instance = FALSE; - ephy_main_start (NULL); + startup_flags |= EPHY_SHELL_STARTUP_TABS; } - else + else if (open_fullscreen) { - first_instance = TRUE; - - ephy_shell_new (); - - g_idle_add ((GSourceFunc) ephy_main_start, NULL); - - bonobo_main (); + startup_flags |= EPHY_SHELL_STARTUP_FULLSCREEN; } - - return 0; -} - -static gboolean -ephy_main_start (gpointer data) -{ - GNOME_EphyAutomation gaserver; - int i; - - CORBA_exception_init (&corba_env); - - gaserver = bonobo_activation_activate_from_id ("OAFIID:GNOME_Epiphany_Automation", - 0, NULL, &corba_env); - - if (gaserver == NULL) + else if (open_in_existing) { - GtkWidget *dialog; - dialog = gtk_message_dialog_new - (NULL, - GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("Epiphany can't be used now. " - "Running the command \"bonobo-slay\" " - "from the console may fix the problem. If not, " - "you can try rebooting the computer or " - "installing Epiphany again.\n\n" - "Bonobo couldn't locate the GNOME_Epiphany_Automation.server.")); - gtk_dialog_run (GTK_DIALOG (dialog)); - + startup_flags |= EPHY_SHELL_STARTUP_EXISTING_WINDOW; } - /* Launch the bookmarks editor */ else if (open_as_bookmarks_editor) { - GNOME_EphyAutomation_openBookmarksEditor - (gaserver, &corba_env); - } - /* load the session if requested */ - else if (session_filename) - { - GNOME_EphyAutomation_loadSession - (gaserver, session_filename, &corba_env); - } - /* if we're given a bookmarks file to import... */ - else if (bookmarks_file != NULL) - { - GNOME_EphyAutomation_importBookmarks - (gaserver, bookmarks_file, &corba_env); + startup_flags |= EPHY_SHELL_STARTUP_BOOKMARKS_EDITOR; } - /* if found and we're given a bookmark to add... */ - else if (bookmark_url != NULL) + else if (open_as_nautilus_view) { - GNOME_EphyAutomation_addBookmark - (gaserver, bookmark_url, &corba_env); + startup_flags |= EPHY_SHELL_STARTUP_NAUTILUS_VIEW; } - /* provided with urls? */ - else if (!open_as_nautilus_view) + else if (session_filename != NULL) { - /* open all of the urls */ - for (i = 0; i < n_urls; i++) - { - GNOME_EphyAutomation_loadurl - (gaserver, url[i], - open_fullscreen, - open_in_existing, - open_in_new_window, - open_in_new_tab, - !noraise, - &corba_env); - } + startup_flags |= EPHY_SHELL_STARTUP_SESSION; + string_arg = session_filename; } - - /* Unref so it will exit if no more used - * If started with --nautilus-view, only exit when the - * last view has been destroyed. - */ - if (first_instance && !open_as_nautilus_view) + else if (bookmarks_file != NULL) { - g_object_unref (G_OBJECT(ephy_shell)); + startup_flags |= EPHY_SHELL_STARTUP_IMPORT_BOOKMARKS; + string_arg = bookmarks_file; } - - if (gaserver) + else if (bookmark_url != NULL) { - bonobo_object_release_unref (gaserver, &corba_env); + startup_flags |= EPHY_SHELL_STARTUP_ADD_BOOKMARK; + string_arg = bookmark_url; } - CORBA_exception_free (&corba_env); - - gdk_notify_startup_complete (); + bonobo_activate (); - return FALSE; -} - -/* dummy argument to open a default window */ -static gint -ephy_main_dummy_url_argument (gchar ***urls) -{ - *urls = g_new0 (gchar *, 2); + ephy_shell = ephy_shell_new (); + new_instance = ephy_shell_startup (ephy_shell, startup_flags, + args, string_arg, &err); - (*urls)[0] = g_strdup (""); - (*urls)[1] = NULL; - - return 1; -} - -/** - * translate_url_arguments: gather URL arguments and expand them fully - * with realpath if they're filenames - */ -static gint -ephy_main_translate_url_arguments (poptContext context, gchar ***urls) -{ - gchar buffer[PATH_MAX]; - gchar **args; - gint i, n; - - /* any context remaining? */ - if (context == NULL) - { - return ephy_main_dummy_url_argument (urls); - } - - /* get the args and check */ - args = (gchar **) poptGetArgs (context); - if (args == NULL) - { - poptFreeContext (context); - return ephy_main_dummy_url_argument (urls); - } + if (err != NULL) + { + GtkWidget *dialog; - /* count args */ - for (n = 0; args[n] != NULL; n++) - /* nothing */; + dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, + GTK_BUTTONS_CLOSE, + GTK_MESSAGE_ERROR, err->message); + gtk_dialog_run (GTK_DIALOG (dialog)); + } + else if (new_instance) + { + g_object_unref (ephy_shell); - /* allocate pointer array */ - *urls = g_new0 (gchar *, n + 1); + g_object_weak_ref (G_OBJECT (ephy_shell), shell_weak_notify, NULL); - /* translate each one */ - for (i = 0; i < n; i++) - { - /* try to expand as files */ - if (realpath (args[i], buffer) != NULL) - { - (*urls)[i] = g_strconcat ("file://", buffer, NULL); - } - else - { - (*urls)[i] = g_strdup (args[i]); - } - } - poptFreeContext (context); - (*urls)[i] = NULL; + gtk_main (); + } - /* return the number of urls */ - return n; + return 0; } |