New member finished' in
EShellOfflineHandlerPrivate'.
* e-shell-offline-handler.c: New member `finished' in `EShellOfflineHandlerPrivate'. (finalize_offline): Ref the handler as we might get destroyed while putting every component offline. (impl_OfflineProgressListener_updateProgress): Don't emit ::offline_procedure_finished if ->finished is %TRUE. Also, set it to %TRUE after emitting the signal. (cancel_offline): Likewise. (finalize_offline): Likewise. (update_dialog_clist): Guard against NULL ->dialog_gui. svn path=/trunk/; revision=14182
This commit is contained in:
@ -1,3 +1,16 @@
|
||||
2001-10-26 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-offline-handler.c: New member `finished' in
|
||||
`EShellOfflineHandlerPrivate'.
|
||||
(finalize_offline): Ref the handler as we might get destroyed
|
||||
while putting every component offline.
|
||||
(impl_OfflineProgressListener_updateProgress): Don't emit
|
||||
::offline_procedure_finished if ->finished is %TRUE. Also, set it
|
||||
to %TRUE after emitting the signal.
|
||||
(cancel_offline): Likewise.
|
||||
(finalize_offline): Likewise.
|
||||
(update_dialog_clist): Guard against NULL ->dialog_gui.
|
||||
|
||||
2001-10-26 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* evolution-storage.c (impl_Storage_async_xfer_folder): Implement.
|
||||
|
@ -90,7 +90,8 @@ struct _EShellOfflineHandlerPrivate {
|
||||
int num_total_connections;
|
||||
GHashTable *id_to_component_info;
|
||||
|
||||
gboolean procedure_in_progress : 1;
|
||||
int procedure_in_progress : 1;
|
||||
int finished : 1;
|
||||
};
|
||||
|
||||
|
||||
@ -206,8 +207,10 @@ impl_OfflineProgressListener_updateProgress (PortableServer_Servant servant,
|
||||
|
||||
update_dialog_clist (offline_handler);
|
||||
|
||||
if (priv->num_total_connections == 0)
|
||||
if (priv->num_total_connections == 0 && ! priv->finished) {
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], TRUE);
|
||||
priv->finished = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -362,7 +365,10 @@ cancel_offline (EShellOfflineHandler *offline_handler)
|
||||
|
||||
priv->num_total_connections = 0;
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], FALSE);
|
||||
if (! priv->finished) {
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], FALSE);
|
||||
priv->finished = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -432,6 +438,8 @@ prepare_for_offline (EShellOfflineHandler *offline_handler)
|
||||
|
||||
g_assert (g_hash_table_lookup (priv->id_to_component_info, component_info->id) == NULL);
|
||||
g_hash_table_insert (priv->id_to_component_info, component_info->id, component_info);
|
||||
|
||||
g_print ("Inserting -- %p %s\n", component_info, component_info->id);
|
||||
}
|
||||
|
||||
/* If an error occurred while preparing, just put all the components
|
||||
@ -464,6 +472,8 @@ finalize_offline_hash_foreach (void *key,
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
g_print ("Offline -- %p\n", component_info);
|
||||
|
||||
GNOME_Evolution_Offline_goOffline (component_info->offline_interface,
|
||||
component_info->progress_listener_interface,
|
||||
&ev);
|
||||
@ -484,12 +494,17 @@ finalize_offline (EShellOfflineHandler *offline_handler)
|
||||
|
||||
priv = offline_handler->priv;
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (offline_handler));
|
||||
|
||||
g_hash_table_foreach (priv->id_to_component_info, finalize_offline_hash_foreach, offline_handler);
|
||||
|
||||
if (priv->num_total_connections == 0) {
|
||||
if (priv->num_total_connections == 0 && ! priv->finished) {
|
||||
/* Nothing else to do, we are all set. */
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], TRUE);
|
||||
priv->finished = TRUE;
|
||||
}
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (offline_handler));
|
||||
}
|
||||
|
||||
|
||||
@ -528,6 +543,8 @@ update_dialog_clist (EShellOfflineHandler *offline_handler)
|
||||
GtkWidget *clist;
|
||||
|
||||
priv = offline_handler->priv;
|
||||
if (priv->dialog_gui == NULL)
|
||||
return;
|
||||
|
||||
clist = glade_xml_get_widget (priv->dialog_gui, "active_connection_clist");
|
||||
|
||||
@ -719,6 +736,7 @@ init (EShellOfflineHandler *shell_offline_handler)
|
||||
priv->id_to_component_info = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
priv->procedure_in_progress = FALSE;
|
||||
priv->finished = FALSE;
|
||||
|
||||
shell_offline_handler->priv = priv;
|
||||
}
|
||||
@ -805,10 +823,13 @@ e_shell_offline_handler_put_components_offline (EShellOfflineHandler *offline_ha
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_STARTED]);
|
||||
|
||||
priv->finished = FALSE;
|
||||
|
||||
if (! prepare_for_offline (offline_handler)) {
|
||||
/* FIXME: Maybe do something smarter here. */
|
||||
g_warning ("Couldn't put components off-line");
|
||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], FALSE);
|
||||
priv->finished = TRUE;
|
||||
gtk_object_unref (GTK_OBJECT (offline_handler));
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user