aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-07-10 17:30:28 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2000-07-10 17:30:28 +0800
commit84ba8642c55c514b7fe23aa90fabdbd0d90250ab (patch)
tree54fe069a02cf1ea69f6ee237221ef3c919ff46e7
parentf587f3d4a5643c1ebe5aa7be2883fa1137b6645f (diff)
downloadgsoc2013-evolution-84ba8642c55c514b7fe23aa90fabdbd0d90250ab.tar.gz
gsoc2013-evolution-84ba8642c55c514b7fe23aa90fabdbd0d90250ab.tar.zst
gsoc2013-evolution-84ba8642c55c514b7fe23aa90fabdbd0d90250ab.zip
As a quasi-hack, do a gdk_flush() when the shell view is unrealized so
2000-07-10 Federico Mena Quintero <federico@helixcode.com> * e-shell-view.c (unrealize): As a quasi-hack, do a gdk_flush() when the shell view is unrealized so that the DeleteEvent gets sent to the remote plugs as soon as possible before we start making other CORBA calls. The problem is that our CORBA pipe is synchronous while our X pipe is asynch. We have to ensure ordering for certain operations. This is NOT the correct and complete fix, which should go in Bonobo. svn path=/trunk/; revision=4030
-rw-r--r--calendar/gui/main.c1
-rw-r--r--calendar/pcs/cal-backend-imc.c2
-rw-r--r--calendar/pcs/cal-factory.c2
-rw-r--r--shell/ChangeLog10
-rw-r--r--shell/e-shell-view.c23
-rw-r--r--wombat/wombat.c5
6 files changed, 41 insertions, 2 deletions
diff --git a/calendar/gui/main.c b/calendar/gui/main.c
index 486372463d..de8d8e1c2a 100644
--- a/calendar/gui/main.c
+++ b/calendar/gui/main.c
@@ -89,6 +89,7 @@ main (int argc, char **argv)
component_factory_init ();
bonobo_main ();
+ fprintf (stderr, "main(): Out of bonobo_main(), we are dying cleanly. Have a nice day.\n");
return 0;
}
diff --git a/calendar/pcs/cal-backend-imc.c b/calendar/pcs/cal-backend-imc.c
index 3e079218cf..20c0292793 100644
--- a/calendar/pcs/cal-backend-imc.c
+++ b/calendar/pcs/cal-backend-imc.c
@@ -560,6 +560,8 @@ cal_destroy_cb (GtkObject *object, gpointer data)
IMCPrivate *priv;
GList *l;
+ fprintf (stderr, "cal_destroy_cb(): A Cal was destroyed!\n");
+
cal = CAL (object);
cbimc = CAL_BACKEND_IMC (data);
diff --git a/calendar/pcs/cal-factory.c b/calendar/pcs/cal-factory.c
index 9e60815805..83ebd272a3 100644
--- a/calendar/pcs/cal-factory.c
+++ b/calendar/pcs/cal-factory.c
@@ -274,6 +274,8 @@ backend_last_client_gone_cb (CalBackend *backend, gpointer data)
gboolean result;
GnomeVFSURI *orig_uri;
+ fprintf (stderr, "backend_last_client_gone_cb() called!\n");
+
factory = CAL_FACTORY (data);
priv = factory->priv;
diff --git a/shell/ChangeLog b/shell/ChangeLog
index ca0a178947..890eb8d51e 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,13 @@
+2000-07-10 Federico Mena Quintero <federico@helixcode.com>
+
+ * e-shell-view.c (unrealize): As a quasi-hack, do a gdk_flush()
+ when the shell view is unrealized so that the DeleteEvent gets
+ sent to the remote plugs as soon as possible before we start
+ making other CORBA calls. The problem is that our CORBA pipe is
+ synchronous while our X pipe is asynch. We have to ensure
+ ordering for certain operations. This is NOT the correct and
+ complete fix, which should go in Bonobo.
+
2000-07-08 Ettore Perazzoli <ettore@helixcode.com>
* e-shell-view.c (e_shell_view_display_uri): Don't update the
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index fc211e8727..36e0becf0d 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -353,6 +353,22 @@ destroy (GtkObject *object)
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
+/* Unrealize handler */
+static void
+unrealize (GtkWidget *widget)
+{
+ if (GTK_WIDGET_CLASS (parent_class)->unrealize)
+ (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+
+ /* We flush so that all the destroy window requests for foreign windows
+ * get sent over the X wire. Hopefully this will diminish the chance of
+ * hitting the CORBA (sync) vs. Xlib (async) race conditions. This is
+ * not the complete fix, which should actually be put in Bonobo and
+ * completed. FIXME.
+ */
+ gdk_flush ();
+}
+
/* Initialization. */
@@ -360,10 +376,15 @@ static void
class_init (EShellViewClass *klass)
{
GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+
+ object_class = (GtkObjectClass *) klass;
+ widget_class = (GtkWidgetClass *) klass;
- object_class = GTK_OBJECT_CLASS (klass);
object_class->destroy = destroy;
+ widget_class->unrealize = unrealize;
+
parent_class = gtk_type_class (gnome_app_get_type ());
signals[SHORTCUT_BAR_MODE_CHANGED]
diff --git a/wombat/wombat.c b/wombat/wombat.c
index 0d5b8b7a01..1db39e5673 100644
--- a/wombat/wombat.c
+++ b/wombat/wombat.c
@@ -40,8 +40,10 @@ static gboolean
termination_handler (gpointer data)
{
if (cal_factory_get_n_backends (cal_factory) == 0
- && pas_book_factory_get_n_backends (pas_book_factory) == 0)
+ && pas_book_factory_get_n_backends (pas_book_factory) == 0) {
+ fprintf (stderr, "termination_handler(): Terminating the Wombat. Have a nice day.\n");
gtk_main_quit ();
+ }
termination_handler_id = 0;
return FALSE;
@@ -94,6 +96,7 @@ setup_pas (int argc, char **argv)
static void
last_calendar_gone_cb (CalFactory *factory, gpointer data)
{
+ fprintf (stderr, "last_calendar_gone_cb() called! Queueing termination...\n");
queue_termination ();
}