[maemo-commits] [maemo-commits] r12535 - in projects/haf/trunk/hildon-desktop: . src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Jun 28 15:36:44 EEST 2007
Author: jobi
Date: 2007-06-28 15:36:29 +0300 (Thu, 28 Jun 2007)
New Revision: 12535

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/src/hd-home-background-dialog.c
   projects/haf/trunk/hildon-desktop/src/hd-home-background.c
   projects/haf/trunk/hildon-desktop/src/hd-home-background.h
   projects/haf/trunk/hildon-desktop/src/hd-home-window.c
Log:

2007-06-28  Johan Bilien  <johan.bilien at nokia.com>

	* src/hd-home-background.[ch]:
	- added hd_home_background_cancel
	- if background was cancelled, return from the callback immediately
	* src/hd-home-window.c:
	- attach the background being set to the cancel note, so it
	can be cancelled.
	Fixes: NB#61779



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-28 12:32:14 UTC (rev 12534)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-28 12:36:29 UTC (rev 12535)
@@ -1,3 +1,13 @@
+2007-06-28  Johan Bilien  <johan.bilien at nokia.com>
+
+	* src/hd-home-background.[ch]:
+	- added hd_home_background_cancel
+	- if background was cancelled, return from the callback immediately
+	* src/hd-home-window.c:
+	- attach the background being set to the cancel note, so it
+	can be cancelled.
+	Fixes: NB#61779
+
 2007-06-28  Moises Martinez  <moises.martinez at nokia.com>
 
 	* libhildondesktop/hildon-desktop-popup-window.c:

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-background-dialog.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-background-dialog.c	2007-06-28 12:32:14 UTC (rev 12534)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background-dialog.c	2007-06-28 12:36:29 UTC (rev 12535)
@@ -956,5 +956,5 @@
   g_return_val_if_fail (HD_IS_HOME_BACKGROUND_DIALOG (dialog), NULL);
   priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog);
 
-  return g_object_ref (priv->background);
+  return hd_home_background_copy (priv->background);
 }

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-background.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-background.c	2007-06-28 12:32:14 UTC (rev 12534)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background.c	2007-06-28 12:36:29 UTC (rev 12535)
@@ -65,12 +65,11 @@
 
 struct _HDHomeBackgroundPrivate
 {
-  GdkColor         *color;
+  GdkColor             *color;
+  BackgroundMode        mode;
+  gchar                *filename;
+  gboolean              cancelled;
 
-  BackgroundMode    mode;
-
-  gchar            *filename;
-
 };
 
 G_DEFINE_TYPE (HDHomeBackground, hd_home_background, G_TYPE_OBJECT);
@@ -505,6 +504,13 @@
                                               GError           *error,
                                               struct cb_data   *data)
 {
+  if (data->background->priv->cancelled)
+    {
+      g_debug ("background is cancelled");
+      g_free (data);
+      return;
+    }
+
   if (error)
     {
       goto cleanup;
@@ -580,6 +586,8 @@
   g_debug ("Applying background %s aynchronously",
            priv->filename);
 
+  priv->cancelled = FALSE;
+
   /* Here goes */
 #define S(string) (string?string:"")
   org_maemo_hildon_background_manager_set_background_async 
@@ -641,3 +649,11 @@
 
 }
 
+void
+hd_home_background_cancel (HDHomeBackground *background)
+{
+  g_return_if_fail (HD_IS_HOME_BACKGROUND (background));
+
+  background->priv->cancelled = TRUE;
+
+}

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-background.h
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-background.h	2007-06-28 12:32:14 UTC (rev 12534)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background.h	2007-06-28 12:36:29 UTC (rev 12535)
@@ -86,6 +86,8 @@
 gboolean    hd_home_background_equal            (const HDHomeBackground *bg1,
                                                  const HDHomeBackground *bg2);
 
+void        hd_home_background_cancel           (HDHomeBackground *background);
+
 G_END_DECLS
 
 #endif /* __HD_HOME_BACKGROUND_H__ */

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-window.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-window.c	2007-06-28 12:32:14 UTC (rev 12534)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-window.c	2007-06-28 12:36:29 UTC (rev 12535)
@@ -124,7 +124,6 @@
   GtkWidget        *cancel_note;
   guint             background_loading_timeout;
   guint             cancel_note_update_timeout;
-  gboolean          background_cancelled;
 };
 
 /* Properties */
@@ -293,7 +292,8 @@
 hd_home_window_cancel_note_hide (HDHomeWindow *window);
 
 static void
-hd_home_window_cancel_note_show (HDHomeWindow *window);
+hd_home_window_cancel_note_show (HDHomeWindow *window,
+                                 HDHomeBackground *background);
 
 #if 0
 static void
@@ -668,12 +668,6 @@
       priv->background_loading_timeout = 0;
     }
 
-  if (priv->background_cancelled)
-    {
-      priv->background_cancelled = FALSE;
-      return;
-    }
-
   if (GTK_IS_WIDGET (priv->cancel_note))
     hd_home_window_cancel_note_hide (window);
 
@@ -685,7 +679,7 @@
                  error->code,
                  error->message,
       dbus_g_error_get_name (error));
-      
+
       if (dbus_g_error_has_name (error,
                                  "org.freedesktop.DBus.GLib.UnmappedError.BackgroundManagerErrorQuark.Code2"))
         text = HH_FILE_CORRUPTED_TEXT;
@@ -735,16 +729,13 @@
   HDHomeWindowPrivate  *priv;
   gchar                *conffile;
   GError               *save_error = NULL;
-  gboolean              background_cancelled;
 
   priv = HD_HOME_WINDOW_GET_PRIVATE (window);
 
-  background_cancelled = priv->background_cancelled;
-
   background_apply_callback (background, picture, error, window);
 
   /* Do not save if an error occurred */
-  if (error || background_cancelled)
+  if (error)
     return;
 
   conffile = g_build_path (G_DIR_SEPARATOR_S,
@@ -1812,14 +1803,21 @@
   g_signal_emit_by_name (window, "layout-mode-accept");
 }
 
+typedef struct
+{
+  HDHomeWindow         *window;
+  HDHomeBackground     *background;
+} BackgroundTimeoutData;
+
 static gboolean
-hd_home_window_set_background_timeout (HDHomeWindow *window)
+hd_home_window_set_background_timeout (BackgroundTimeoutData *data)
 {
-  HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
+  HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (data->window);
 
   priv->background_loading_timeout = 0;
 
-  hd_home_window_cancel_note_show (window);
+  hd_home_window_cancel_note_show (data->window, data->background);
+  g_free (data);
   return FALSE;
 }
 
@@ -1844,13 +1842,16 @@
           if (!hd_home_background_equal (priv->background,
                                          background))
             {
+              BackgroundTimeoutData *data = g_new (BackgroundTimeoutData, 1);
+              data->window = window;
+              data->background = background;
               priv->background_loading_timeout =
                   g_timeout_add (1000,
                                  (GSourceFunc)
                                    hd_home_window_set_background_timeout,
-                                 window);
+                                 data);
               hd_home_background_apply_async
-                  (hd_home_background_copy (background),
+                  (background,
                    GTK_WIDGET (window)->window,
                    workarea,
                    (HDHomeBackgroundApplyCallback)background_apply_and_save_callback,
@@ -1860,13 +1861,17 @@
           break;
       case HILDON_HOME_SET_BG_RESPONSE_PREVIEW:
             {
+              BackgroundTimeoutData *data = g_new (BackgroundTimeoutData, 1);
+              data->window = window;
+              data->background = background;
+
               priv->background_loading_timeout =
                   g_timeout_add (1000,
                                  (GSourceFunc)
                                    hd_home_window_set_background_timeout,
-                                 window);
+                                 data);
               hd_home_background_apply_async
-                  (hd_home_background_copy (background),
+                   (background,
                    GTK_WIDGET (window)->window,
                    workarea,
                    (HDHomeBackgroundApplyCallback)background_apply_callback,
@@ -1981,10 +1986,15 @@
 hd_home_window_cancel_note_response (HDHomeWindow *window)
 {
   HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
+  HDHomeBackground     *background;
 
+  background = g_object_get_data (G_OBJECT (priv->cancel_note), "background");
+
+  if (HD_IS_HOME_BACKGROUND (background))
+    hd_home_background_cancel (background);
+
   hd_home_window_cancel_note_hide (window);
 
-  priv->background_cancelled = TRUE;
 }
 
 static gboolean
@@ -1998,7 +2008,8 @@
 }
 
 static void
-hd_home_window_cancel_note_show (HDHomeWindow *window)
+hd_home_window_cancel_note_show (HDHomeWindow          *window,
+                                 HDHomeBackground      *background)
 {
   HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
   GtkWidget            *label, *prog_bar;
@@ -2006,6 +2017,7 @@
   if (priv->cancel_note)
     return;
 
+
   priv->cancel_note =
       gtk_dialog_new_with_buttons ("",
                                    NULL,
@@ -2014,6 +2026,9 @@
                                    HH_SET_BG_CANCEL, GTK_RESPONSE_CANCEL,
                                    NULL);
 
+  g_object_set_data (G_OBJECT (priv->cancel_note),
+                     "background", background);
+
   label = gtk_label_new (HH_CANCEL_BG_TEXT);
   gtk_container_add (GTK_CONTAINER (GTK_DIALOG (priv->cancel_note)->vbox),
                      label);


More information about the maemo-commits mailing list