[maemo-commits] [maemo-commits] r8441 - in projects/haf/trunk/maemo-af-desktop: . hildon-home

From: www-data at stage.maemo.org www-data at stage.maemo.org
Date: Wed Nov 29 11:08:58 EET 2006
Author: jobi
Date: 2006-11-29 11:08:57 +0200 (Wed, 29 Nov 2006)
New Revision: 8441

Modified:
   projects/haf/trunk/maemo-af-desktop/ChangeLog
   projects/haf/trunk/maemo-af-desktop/hildon-home/background-manager.c
Log:

2006-11-29  Johan Bilien <johan.bilien at nokia.com>

	* hildon-home/background-manager.c: Check if the operation
	was cancelled during loading and compositing. Fixes: NB#42484



Modified: projects/haf/trunk/maemo-af-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/maemo-af-desktop/ChangeLog	2006-11-29 09:05:13 UTC (rev 8440)
+++ projects/haf/trunk/maemo-af-desktop/ChangeLog	2006-11-29 09:08:57 UTC (rev 8441)
@@ -1,3 +1,8 @@
+2006-11-29  Johan Bilien <johan.bilien at nokia.com>
+
+	* hildon-home/background-manager.c: Check if the operation
+	was cancelled during loading and compositing. Fixes: NB#42484
+
 2006-11-28  Moises Martinez <moises.martinzes at nokia.com>
 
 	* hildon-navigator/hn-wm.c

Modified: projects/haf/trunk/maemo-af-desktop/hildon-home/background-manager.c
===================================================================
--- projects/haf/trunk/maemo-af-desktop/hildon-home/background-manager.c	2006-11-29 09:05:13 UTC (rev 8440)
+++ projects/haf/trunk/maemo-af-desktop/hildon-home/background-manager.c	2006-11-29 09:08:57 UTC (rev 8441)
@@ -533,12 +533,19 @@
   gboolean image_from_mmc = FALSE;
   gboolean mmc_cover_open = FALSE;
   gboolean oom = FALSE;
+  BackgroundManager *bm;
+  BackgroundManagerPrivate *priv;
 
   g_return_val_if_fail (uri != NULL, NULL);
 
   client = gconf_client_get_default ();
   g_assert (GCONF_IS_CLIENT (client));
 
+  bm = background_manager_get_default ();
+  g_assert (IS_BACKGROUND_MANAGER (bm));
+
+  priv = BACKGROUND_MANAGER_GET_PRIVATE (bm);
+
   mmc_mount_point = g_strconcat ("file://",
                                  hildon_home_get_mmc_mount_point (),
                                  NULL);
@@ -582,8 +589,17 @@
   /* XXX Run the main loop to update the progress note */
   if (cancellable)
     {
+      gboolean is_cancelled = TRUE;
       while (gtk_events_pending ())
         gtk_main_iteration ();
+
+      if (GTK_IS_DIALOG (priv->loading_note))
+          is_cancelled = 
+              GPOINTER_TO_INT (g_object_get_data (G_OBJECT (priv->loading_note),
+                                                  "is-cancelled"));
+
+      if (is_cancelled)
+        return NULL;
     }
 
   result = gnome_vfs_open (&handle, uri, GNOME_VFS_OPEN_READ);
@@ -616,8 +632,17 @@
       /* XXX Run the main loop to update the progress note */
       if (cancellable)
         {
+          gboolean is_cancelled = TRUE;
           while (gtk_events_pending ())
             gtk_main_iteration ();
+
+          if (GTK_IS_DIALOG (priv->loading_note))
+            is_cancelled = 
+                GPOINTER_TO_INT (g_object_get_data (G_OBJECT (priv->loading_note),
+                                                    "is-cancelled"));
+
+          if (is_cancelled)
+            return NULL;
         }
 
       result = gnome_vfs_read (handle, buffer, BUFFER_SIZE, &bytes_read);
@@ -1111,6 +1136,13 @@
       g_error_free (bg_error);
       bg_error = NULL;
     }
+  else if (!compose)
+    {
+      g_debug ("Assuming loading of titlebar cancelled");
+      if (pixbuf)
+        g_object_unref (pixbuf);
+      return NULL;
+    }
   else
     {
       g_debug ("Compositing titlebar");
@@ -1137,6 +1169,13 @@
       g_error_free (bg_error);
       bg_error = NULL;
     }
+  else if (!compose)
+    {
+      g_debug ("Assuming loading of sidebar cancelled");
+      if (pixbuf)
+        g_object_unref (pixbuf);
+      return NULL;
+    }
   else
     {
       gint width = gdk_pixbuf_get_width (compose);
@@ -1363,17 +1402,17 @@
       response == GTK_RESPONSE_DELETE_EVENT)
     {
       BackgroundManager *manager = BACKGROUND_MANAGER (user_data);
+      gtk_widget_set_sensitive (GTK_WIDGET (dialog), FALSE);
       
       if (manager->priv->child_pid != 0)
         {
-          g_object_set_data (G_OBJECT (dialog),
-                             "is-cancelled", GINT_TO_POINTER (1));
-          fprintf (stderr, "about to kill %i\n", manager->priv->child_pid);
-          gtk_widget_set_sensitive (GTK_WIDGET (dialog), FALSE);
+          g_debug ("about to kill %i\n", manager->priv->child_pid);
           kill (manager->priv->child_pid, SIGKILL);
 
-          g_signal_emit (manager, manager_signals[LOAD_CANCEL], 0);
         }
+      g_object_set_data (G_OBJECT (dialog),
+                         "is-cancelled", GINT_TO_POINTER (1));
+      g_signal_emit (manager, manager_signals[LOAD_CANCEL], 0);
     }
 }
 
@@ -1530,30 +1569,45 @@
 
   err = NULL;
   if (current->image_uri)
-    image = load_image_from_uri (current->image_uri, TRUE, cancellable, &err);
-  else
-    image = NULL;
-
-  if (err && err->message)
     {
-      g_warning ("Unable to load background from `%s': %s",
-                 current->image_uri,
-                 err->message);
+      image = load_image_from_uri (current->image_uri, TRUE, cancellable, &err);
 
-      if (cancellable)
+      if (!image)
         {
-          if (priv->loading_note)
-            gtk_widget_destroy (priv->loading_note);
-          
-          priv->loading_note = NULL;
+          g_debug ("No image, no error. Assuming loading was cancelled");
+          if (cancellable)
+            {
+              if (priv->loading_note)
+                gtk_widget_destroy (priv->loading_note);
+
+              priv->loading_note = NULL;
+            }
+          return;
         }
-      
-      g_signal_emit (manager, manager_signals[LOAD_ERROR], 0, err);
 
-      g_error_free (err);
+      if (err && err->message)
+        {
+          g_warning ("Unable to load background from `%s': %s",
+                     current->image_uri,
+                     err->message);
 
-      return;
+          if (cancellable)
+            {
+              if (priv->loading_note)
+                gtk_widget_destroy (priv->loading_note);
+
+              priv->loading_note = NULL;
+            }
+
+          g_signal_emit (manager, manager_signals[LOAD_ERROR], 0, err);
+
+          g_error_free (err);
+
+          return;
+        }
     }
+  else
+    image = NULL;
 
   gdk_drawable_get_size (GDK_DRAWABLE (priv->desktop), &width, &height);
 
@@ -1576,10 +1630,24 @@
 
       return;
     }
-  else if (image)
+  else if (!pixbuf)
     {
-      g_object_unref (image);
+      g_debug ("Assuming compositing cancelled");
+      if (image)
+        g_object_unref (image);
+
+      if (cancellable)
+        {
+          if (priv->loading_note)
+            gtk_widget_destroy (priv->loading_note);
+
+          priv->loading_note = NULL;
+        }
+      return;
     }
+  
+  if (image)
+    g_object_unref (image);
 
   pipe (parent_exit_notify);
   pipe (pipe_from_child);


More information about the maemo-commits mailing list