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>
|
2001-10-26 Ettore Perazzoli <ettore@ximian.com>
|
||||||
|
|
||||||
* evolution-storage.c (impl_Storage_async_xfer_folder): Implement.
|
* evolution-storage.c (impl_Storage_async_xfer_folder): Implement.
|
||||||
|
@ -90,7 +90,8 @@ struct _EShellOfflineHandlerPrivate {
|
|||||||
int num_total_connections;
|
int num_total_connections;
|
||||||
GHashTable *id_to_component_info;
|
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);
|
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);
|
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], TRUE);
|
||||||
|
priv->finished = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -362,7 +365,10 @@ cancel_offline (EShellOfflineHandler *offline_handler)
|
|||||||
|
|
||||||
priv->num_total_connections = 0;
|
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_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_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
|
/* 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);
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
g_print ("Offline -- %p\n", component_info);
|
||||||
|
|
||||||
GNOME_Evolution_Offline_goOffline (component_info->offline_interface,
|
GNOME_Evolution_Offline_goOffline (component_info->offline_interface,
|
||||||
component_info->progress_listener_interface,
|
component_info->progress_listener_interface,
|
||||||
&ev);
|
&ev);
|
||||||
@ -484,12 +494,17 @@ finalize_offline (EShellOfflineHandler *offline_handler)
|
|||||||
|
|
||||||
priv = offline_handler->priv;
|
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);
|
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. */
|
/* Nothing else to do, we are all set. */
|
||||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], TRUE);
|
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;
|
GtkWidget *clist;
|
||||||
|
|
||||||
priv = offline_handler->priv;
|
priv = offline_handler->priv;
|
||||||
|
if (priv->dialog_gui == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
clist = glade_xml_get_widget (priv->dialog_gui, "active_connection_clist");
|
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->id_to_component_info = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
|
||||||
priv->procedure_in_progress = FALSE;
|
priv->procedure_in_progress = FALSE;
|
||||||
|
priv->finished = FALSE;
|
||||||
|
|
||||||
shell_offline_handler->priv = priv;
|
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]);
|
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_STARTED]);
|
||||||
|
|
||||||
|
priv->finished = FALSE;
|
||||||
|
|
||||||
if (! prepare_for_offline (offline_handler)) {
|
if (! prepare_for_offline (offline_handler)) {
|
||||||
/* FIXME: Maybe do something smarter here. */
|
/* FIXME: Maybe do something smarter here. */
|
||||||
g_warning ("Couldn't put components off-line");
|
g_warning ("Couldn't put components off-line");
|
||||||
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], FALSE);
|
gtk_signal_emit (GTK_OBJECT (offline_handler), signals[OFFLINE_PROCEDURE_FINISHED], FALSE);
|
||||||
|
priv->finished = TRUE;
|
||||||
gtk_object_unref (GTK_OBJECT (offline_handler));
|
gtk_object_unref (GTK_OBJECT (offline_handler));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user