diff options
-rw-r--r-- | ChangeLog | 31 | ||||
-rw-r--r-- | components/services/install-view/nautilus-service-install-view.c | 30 | ||||
-rw-r--r-- | components/services/install/lib/eazel-softcat.c | 3 | ||||
-rw-r--r-- | components/services/install/nautilus-view/nautilus-service-install-view.c | 30 | ||||
-rw-r--r-- | nautilus-installer/src/callbacks.c | 108 | ||||
-rw-r--r-- | nautilus-installer/src/installer.c | 38 |
6 files changed, 145 insertions, 95 deletions
@@ -1,3 +1,34 @@ +2000-12-06 Robey Pointer <robey@eazel.com> + + * components/services/install/lib/eazel-softcat.c: + (gnome_vfs_escape_string): + + Fixed a dumb url-quoting error that resulted in "hilarious" + quoting flubs. + + * components/services/install/nautilus-view/nautilus-service-instal + l-view.c: (nautilus_service_install_done): + + Never return to the summary-view page after completion now: let + the user do their own navigation. + + * nautilus-installer/src/callbacks.c: (log_debug), + (reply_callback), (ask_to_delete_rpms), (ask_are_you_sure), + (druid_cancel), (begin_install), (druid_finish): + * nautilus-installer/src/installer.c: (start_over), + (insert_info_page), (get_detailed_errors_foreach), + (get_detailed_errors), (install_failed), (uninstall_failed), + (download_failed), (eazel_installer_post_install), + (draw_splash_text), (eazel_installer_set_default_texts), + (eazel_installer_initialize): + + Ask if the user wants to delete the RPMs after a successful + install, and ask for verification when they hit the "cancel" + button. Eliminate a redundant cancel callback that caused double + vision. Restore the error dialog's AWOL title (?). Turn off that + damn checkbox for now (can turn it on later if anyone makes an + installer PR2.1). + John Fleck <jfleck@inkstain.net> reviewed by: Ali Abdin diff --git a/components/services/install-view/nautilus-service-install-view.c b/components/services/install-view/nautilus-service-install-view.c index ff65788bc..e05126d30 100644 --- a/components/services/install-view/nautilus-service-install-view.c +++ b/components/services/install-view/nautilus-service-install-view.c @@ -59,8 +59,6 @@ /* number of rows of (label, progressbar) to scroll at the bottom */ #define STATUS_ROWS 4 -#define NEXT_SERVICE_VIEW "eazel:" - /* This ensures that if the arch is detected as i[3-9]86, the requested archtype will be set to i386 */ #define ASSUME_ix86_IS_i386 @@ -813,29 +811,6 @@ nautilus_service_install_installing (EazelInstallCallback *cb, const PackageData } } -#if 0 -static void -show_dialog_and_run_away (NautilusServiceInstallView *view, const char *message) -{ - GtkWidget *dialog; - GtkWidget *toplevel; - - toplevel = gtk_widget_get_toplevel (view->details->message_box); - if (GTK_IS_WINDOW (toplevel)) { - dialog = gnome_ok_dialog_parented (message, GTK_WINDOW (toplevel)); - } else { - dialog = gnome_ok_dialog (message); - } - gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - - /* just in case we were in "loading" mode */ - nautilus_view_report_load_complete (view->details->nautilus_view); - - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - nautilus_view_open_location (view->details->nautilus_view, NEXT_SERVICE_VIEW); -} -#endif - /* Get the toplevel menu name for the desktop file installed */ static char* nautilus_install_service_locate_menu_entries (NautilusServiceInstallView *view) @@ -998,7 +973,7 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti CORBA_exception_free (&ev); } - if (view->details->core_package && success) { + if (success && view->details->core_package) { message = _("A core package of Nautilus has been\n" "updated. You should restart Nautilus.\n\n" "Do you wish to do that now?"); @@ -1016,9 +991,8 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti g_message ("Exec error %s", strerror (errno)); } } - } else { - nautilus_view_open_location (view->details->nautilus_view, NEXT_SERVICE_VIEW); } + /* don't change views anymore, let the user navigate where they want to go. */ } } diff --git a/components/services/install/lib/eazel-softcat.c b/components/services/install/lib/eazel-softcat.c index 8a828caf1..89aa2a5a3 100644 --- a/components/services/install/lib/eazel-softcat.c +++ b/components/services/install/lib/eazel-softcat.c @@ -329,7 +329,7 @@ static char _bad[] = { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* `abcdefghijklmno */ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1 /* pqrstuvwxyz{|}~del */ }; -#define EVILCHAR(c) (((c) < 0x20) || ((c) > 0x7F) || (_bad[c])) +#define EVILCHAR(c) (((c) < 0x20) || ((c) > 0x7F) || (_bad[c-0x20])) static char * gnome_vfs_escape_string (const char *in) @@ -357,6 +357,7 @@ gnome_vfs_escape_string (const char *in) *q++ = *p; } } + *q = '\0'; return quoted; } diff --git a/components/services/install/nautilus-view/nautilus-service-install-view.c b/components/services/install/nautilus-view/nautilus-service-install-view.c index ff65788bc..e05126d30 100644 --- a/components/services/install/nautilus-view/nautilus-service-install-view.c +++ b/components/services/install/nautilus-view/nautilus-service-install-view.c @@ -59,8 +59,6 @@ /* number of rows of (label, progressbar) to scroll at the bottom */ #define STATUS_ROWS 4 -#define NEXT_SERVICE_VIEW "eazel:" - /* This ensures that if the arch is detected as i[3-9]86, the requested archtype will be set to i386 */ #define ASSUME_ix86_IS_i386 @@ -813,29 +811,6 @@ nautilus_service_install_installing (EazelInstallCallback *cb, const PackageData } } -#if 0 -static void -show_dialog_and_run_away (NautilusServiceInstallView *view, const char *message) -{ - GtkWidget *dialog; - GtkWidget *toplevel; - - toplevel = gtk_widget_get_toplevel (view->details->message_box); - if (GTK_IS_WINDOW (toplevel)) { - dialog = gnome_ok_dialog_parented (message, GTK_WINDOW (toplevel)); - } else { - dialog = gnome_ok_dialog (message); - } - gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - - /* just in case we were in "loading" mode */ - nautilus_view_report_load_complete (view->details->nautilus_view); - - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - nautilus_view_open_location (view->details->nautilus_view, NEXT_SERVICE_VIEW); -} -#endif - /* Get the toplevel menu name for the desktop file installed */ static char* nautilus_install_service_locate_menu_entries (NautilusServiceInstallView *view) @@ -998,7 +973,7 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti CORBA_exception_free (&ev); } - if (view->details->core_package && success) { + if (success && view->details->core_package) { message = _("A core package of Nautilus has been\n" "updated. You should restart Nautilus.\n\n" "Do you wish to do that now?"); @@ -1016,9 +991,8 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti g_message ("Exec error %s", strerror (errno)); } } - } else { - nautilus_view_open_location (view->details->nautilus_view, NEXT_SERVICE_VIEW); } + /* don't change views anymore, let the user navigate where they want to go. */ } } diff --git a/nautilus-installer/src/callbacks.c b/nautilus-installer/src/callbacks.c index 5a81ade1f..292d8dcdf 100644 --- a/nautilus-installer/src/callbacks.c +++ b/nautilus-installer/src/callbacks.c @@ -30,15 +30,89 @@ #include "support.h" #include "installer.h" + +extern int installer_debug; + +/* better than a macro, and uses our nice logging system */ +static void +log_debug (const gchar *format, ...) +{ + va_list args; + + if (installer_debug) { + va_start (args, format); + g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args); + va_end (args); + } +} + +/* do what gnome ought to do automatically */ +static void +reply_callback (int reply, gboolean *answer) +{ + *answer = (reply == 0); +} + +static void +ask_to_delete_rpms (EazelInstaller *installer) +{ + GtkWidget *toplevel, *dialog; + char *message; + char *package_list; + gboolean answer; + + message = g_strdup_printf (_("Would you like to delete the downloaded package files?\n" + "(They are no longer needed by the installer.)\n\n" + "The package files are stored in %s"), installer->tmpdir); + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (installer->druid)); + if (GTK_IS_WINDOW (toplevel)) { + dialog = gnome_question_dialog_parented (message, (GnomeReplyCallback)reply_callback, + &answer, GTK_WINDOW (toplevel)); + } else { + dialog = gnome_question_dialog (message, (GnomeReplyCallback)reply_callback, &answer); + } + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + + if (answer) { + g_message ("Deleting package files..."); + package_list = g_strdup_printf ("%s/package-list.xml", installer->tmpdir); + unlink (package_list); + g_free (package_list); + eazel_install_delete_downloads (installer->service); + } +} + +static gboolean +ask_are_you_sure (EazelInstaller *installer) +{ + GtkWidget *toplevel, *dialog; + char *message; + gboolean answer; + + message = _("Cancel the installation:\nAre you sure?"); + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (installer->druid)); + if (GTK_IS_WINDOW (toplevel)) { + dialog = gnome_question_dialog_parented (message, (GnomeReplyCallback)reply_callback, + &answer, GTK_WINDOW (toplevel)); + } else { + dialog = gnome_question_dialog (message, (GnomeReplyCallback)reply_callback, &answer); + } + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + return answer; +} + void druid_cancel (GnomeDruid *gnomedruid, EazelInstaller *installer) { g_mem_profile (); - exit (1); + if (ask_are_you_sure (installer)) { + exit (1); + } } - void druid_delete (GtkWidget *widget, GdkEvent *event, EazelInstaller *installer) { @@ -46,7 +120,6 @@ druid_delete (GtkWidget *widget, GdkEvent *event, EazelInstaller *installer) exit (1); } - gboolean begin_install (EazelInstaller *installer) { @@ -57,9 +130,7 @@ begin_install (EazelInstaller *installer) gnome_druid_set_buttons_sensitive(druid, FALSE, FALSE, TRUE); - g_message ("%s:%d", __FILE__, __LINE__); - - g_message ("%s %s %s %s", + g_message ("dep-check:%s install-categories:%s problems:%s successful:%s", installer->got_dep_check ? "TRUE" : "FALSE", installer->install_categories ? "TRUE" : "FALSE", installer->problems ? "TRUE" : "FALSE", @@ -69,7 +140,7 @@ begin_install (EazelInstaller *installer) if (installer->got_dep_check==FALSE && installer->install_categories == NULL) { GList *iterator; GList *install_categories = NULL; - g_message ("%s:%d", __FILE__, __LINE__); + log_debug ("first time through"); for (iterator = installer->categories; iterator; iterator = iterator->next) { CategoryData *category = (CategoryData*)iterator->data; GtkWidget *widget = gtk_object_get_data (GTK_OBJECT (window), category->name); @@ -83,7 +154,7 @@ begin_install (EazelInstaller *installer) } if (installer->successful && installer->force_remove_categories) { - g_message ("%s:%d", __FILE__, __LINE__); + log_debug ("-> force remove categories"); eazel_installer_do_install (installer, installer->force_remove_categories, TRUE); eazel_installer_post_install (installer); categorydata_list_destroy (installer->force_remove_categories); @@ -91,7 +162,7 @@ begin_install (EazelInstaller *installer) } if (installer->problems) { - g_message ("%s:%d", __FILE__, __LINE__); + log_debug ("-> problem cases"); eazel_install_problem_handle_cases (installer->problem, installer->service, &(installer->problems), @@ -101,21 +172,20 @@ begin_install (EazelInstaller *installer) eazel_installer_post_install (installer); return TRUE; } else { - g_message ("%s:%d", __FILE__, __LINE__); + log_debug ("-> let's go"); if (installer->successful && installer->install_categories) { - g_message ("%s:%d", __FILE__, __LINE__); + log_debug (" ... ready to install"); eazel_installer_do_install (installer, installer->install_categories, FALSE); eazel_installer_post_install (installer); if (installer->problems) { - g_message ("%sn:%d", __FILE__, __LINE__); + log_debug (" ... had problems"); return TRUE; } } - gnome_druid_set_buttons_sensitive(druid, FALSE, TRUE, TRUE); + gnome_druid_set_buttons_sensitive (druid, FALSE, TRUE, TRUE); } - g_message ("%s:%d", __FILE__, __LINE__); /* FALSE means remove this source */ return FALSE; } @@ -126,14 +196,8 @@ druid_finish (GnomeDruidPage *gnomedruidpage, gpointer arg1, EazelInstaller *installer) { - char *package_list; - - /* for now, always delete the rpm files on exit */ - g_message ("Farewell -- deleting RPM files."); - package_list = g_strdup_printf ("%s/package-list.xml", installer->tmpdir); - unlink (package_list); - g_free (package_list); - eazel_install_delete_downloads (installer->service); + g_message ("Farewell!"); + ask_to_delete_rpms (installer); g_mem_profile (); exit (0); diff --git a/nautilus-installer/src/installer.c b/nautilus-installer/src/installer.c index 8d6223c2b..246309b6f 100644 --- a/nautilus-installer/src/installer.c +++ b/nautilus-installer/src/installer.c @@ -108,7 +108,8 @@ typedef struct { " http://www.eazel.com/support/\n" \ "Once you have resolved the problem, please restart the installer.") -#define D_SPLASH_TITLE _("Welcome to the Eazel Installer!") +#define D_ERROR_TITLE _("An error has occurred") +#define D_SPLASH_TITLE _("Welcome to the Eazel Installer!") #define D_FINISHED_TITLE _("Congratulations!") #define D_INFO_EAZEL_HACKING_TITLE _("Eazel-Hacking") @@ -135,6 +136,7 @@ typedef struct { "Linux 7.x systems.") #define NAUTILUS_INSTALLER_RELEASE +#undef THAT_DAMN_CHECKBOX enum { ERROR_RPM_4_NOT_SUPPORTED, @@ -195,7 +197,6 @@ log_debug (const gchar *format, ...) } } - static void get_pixmap_x_y (char **xpmdata, int *x, int *y) { @@ -278,7 +279,7 @@ static void start_over (EazelInstaller *installer) { GtkWidget *install_page; - g_message ("START OVER"); + g_message ("--- installation round begins ---"); install_page = gtk_object_get_data (GTK_OBJECT (installer->window), "install_page"); gnome_druid_set_page (installer->druid, GNOME_DRUID_PAGE (install_page)); } @@ -672,10 +673,6 @@ insert_info_page (EazelInstaller *installer, gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - gtk_signal_connect (GTK_OBJECT (info_page), "cancel", - GTK_SIGNAL_FUNC (druid_cancel), - installer); gnome_druid_insert_page (installer->druid, installer->back_page, GNOME_DRUID_PAGE (info_page)); @@ -982,9 +979,9 @@ get_detailed_errors_foreach (PackageData *pack, GetErrorsForEachData *data) cat = (CategoryData *)iter->data; for (iter2 = cat->packages; iter2 ; iter2 = g_list_next (iter2)) { pack_in = (PackageData *)iter2->data; - g_message ("pack->name = %s, pack_in->name = %s", pack->name, pack_in->name); + trilobite_debug ("pack->name = %s, pack_in->name = %s", pack->name, pack_in->name); if (strcmp (pack->name, pack_in->name) == 0) { - g_message ("yes"); + g_message ("bad mojo: cannot open package %s", pack->name); distro = trilobite_get_distribution_name (trilobite_get_distribution (), TRUE, FALSE); message = g_strdup_printf (_("Initial package download failed: Possibly your " @@ -1036,11 +1033,11 @@ get_detailed_errors (const PackageData *pack, EazelInstaller *installer) data.installer = installer; data.path = NULL; - g_message ("copying package"); + log_debug ("copying package"); non_const_pack = packagedata_copy (pack, TRUE); - g_message ("getting detailed errors"); + log_debug ("getting detailed errors"); get_detailed_errors_foreach (non_const_pack, &data); - g_message ("destroying copy"); + log_debug ("destroying copy"); packagedata_destroy (non_const_pack, TRUE); } @@ -1078,7 +1075,7 @@ install_failed (EazelInstall *service, const PackageData *pd, EazelInstaller *installer) { - log_debug ("INSTALL FAILED."); + g_message ("INSTALL FAILED."); get_detailed_errors (pd, installer); collect_failure_info (service, pd, installer, FALSE); @@ -1089,7 +1086,7 @@ uninstall_failed (EazelInstall *service, const PackageData *pd, EazelInstaller *installer) { - log_debug ("UNINSTALL FAILED."); + g_message ("UNINSTALL FAILED."); collect_failure_info (service, pd, installer, TRUE); } @@ -1104,7 +1101,7 @@ download_failed (EazelInstall *service, temp = g_strdup_printf (_("Download of %s failed"), name); installer->failure_info = g_list_append (installer->failure_info, temp); } - log_debug ("Download FAILED for %s", name); + g_message ("Download FAILED for %s", name); } static gboolean @@ -1657,7 +1654,7 @@ eazel_installer_post_install (EazelInstaller *installer) } else if (installer->uninstalling==TRUE && installer->install_categories) { /* begin_install (installer); */ } - g_message ("out of post_install"); + log_debug ("out of post_install"); } /* fill in the splash text to look nice */ @@ -1702,6 +1699,7 @@ draw_splash_text (EazelInstaller *installer, const char *splash_text) gtk_widget_show (vbox); button = gtk_check_button_new_with_label ("I am now ready to install Nautilus."); +#ifdef THAT_DAMN_CHECKBOX gtk_widget_show (button); gtk_object_ref (GTK_OBJECT (button)); gtk_object_set_data_full (GTK_OBJECT (installer->window), "kohberg", button, @@ -1710,6 +1708,11 @@ draw_splash_text (EazelInstaller *installer, const char *splash_text) gtk_box_pack_start (GTK_BOX (vbox), button, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (button), "toggled", GTK_SIGNAL_FUNC (go_live), installer); +#else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); + go_live (GTK_TOGGLE_BUTTON (button), installer); + gnome_druid_set_buttons_sensitive (installer->druid, FALSE, TRUE, TRUE); +#endif nautilus_druid_page_eazel_put_widget (NAUTILUS_DRUID_PAGE_EAZEL (start_page), vbox); } @@ -1778,6 +1781,7 @@ eazel_installer_set_default_texts (EazelInstaller *installer) text_labels [ERROR_LABEL] = g_strdup (D_ERROR_LABEL); text_labels [ERROR_LABEL_2] = g_strdup (D_ERROR_LABEL_2); text_labels [SPLASH_TITLE] = g_strdup (D_SPLASH_TITLE); + text_labels [ERROR_TITLE] = g_strdup (D_ERROR_TITLE); text_labels [FINISHED_TITLE] = g_strdup (D_FINISHED_TITLE); text_labels [WHAT_TO_INSTALL_LABEL] = g_strdup (D_WHAT_TO_INSTALL_LABEL); text_labels [WHAT_TO_INSTALL_LABEL_SINGLE] = g_strdup (D_WHAT_TO_INSTALL_LABEL_SINGLE); @@ -2208,7 +2212,9 @@ eazel_installer_initialize (EazelInstaller *object) GTK_SIGNAL_FUNC (druid_finish), installer); +#ifdef THAT_DAMN_CHECKBOX gnome_druid_set_buttons_sensitive (installer->druid, FALSE, FALSE, TRUE); +#endif while (gtk_events_pending ()) { gtk_main_iteration (); |