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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Mar 1 14:06:44 EET 2007
Author: jobi
Date: 2007-03-01 14:06:43 +0200 (Thu, 01 Mar 2007)
New Revision: 10281

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-03-01  Johan Bilien  <johan.bilien at nokia.com>

	* src/hd-home-background.[ch]:
	- added _equal() method
	* hd_home_window.c:
	- added previous_background private pointer
	- revert to previous background when dialog is cancelled



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-03-01 12:04:14 UTC (rev 10280)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-03-01 12:06:43 UTC (rev 10281)
@@ -1,3 +1,11 @@
+2007-03-01  Johan Bilien  <johan.bilien at nokia.com>
+
+	* src/hd-home-background.[ch]:
+	- added _equal() method
+	* hd_home_window.c:
+	- added previous_background private pointer
+	- revert to previous background when dialog is cancelled
+
 2007-02-28  Johan Bilien  <johan.bilien at nokia.com>
 
 	* background-manager/background-manager.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-03-01 12:04:14 UTC (rev 10280)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background-dialog.c	2007-03-01 12:06:43 UTC (rev 10281)
@@ -922,5 +922,5 @@
   g_return_val_if_fail (HD_IS_HOME_BACKGROUND_DIALOG (dialog), NULL);
   priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog);
 
-  return priv->background;
+  return g_object_ref (priv->background);
 }

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-background.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-background.c	2007-03-01 12:04:14 UTC (rev 10280)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background.c	2007-03-01 12:06:43 UTC (rev 10281)
@@ -680,6 +680,8 @@
     data->callback (data->background, pixmap_xid, error, data->user_data);
 
 cleanup:
+  if (G_IS_OBJECT (data->background))
+      g_object_unref (data->background);
   g_free (data);
 }
 
@@ -718,7 +720,7 @@
   data = g_new (struct cb_data, 1);
 
   data->callback = cb;
-  data->background = background;
+  data->background = g_object_ref (background);
   data->user_data = user_data;
   data->window = window;
 
@@ -781,3 +783,30 @@
   return dest;
 
 }
+
+gboolean
+hd_home_background_equal (const HDHomeBackground *background1,
+                          const HDHomeBackground *background2)
+{
+  HDHomeBackgroundPrivate      *priv1;
+  HDHomeBackgroundPrivate      *priv2;
+
+  g_return_val_if_fail (HD_IS_HOME_BACKGROUND (background1) &&
+                        HD_IS_HOME_BACKGROUND (background2),
+                        FALSE);
+
+  priv1 = background1->priv;
+  priv2 = background2->priv;
+
+#define equal_or_null(s, t) ((!s && !t) || ((s && t) && g_str_equal (s,t)))
+  return (equal_or_null (priv1->filename,         priv2->filename)        &&
+          equal_or_null (priv1->west_border,      priv2->west_border)     &&
+          equal_or_null (priv1->east_border,      priv2->east_border)     &&
+          equal_or_null (priv1->north_border,     priv2->north_border)    &&
+          equal_or_null (priv1->south_border,     priv2->south_border)    &&
+          gdk_color_equal (priv1->color,          priv2->color)           &&
+          priv1->mode == priv2->mode);
+#undef equal_or_null
+
+}
+

Modified: projects/haf/trunk/hildon-desktop/src/hd-home-background.h
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-home-background.h	2007-03-01 12:04:14 UTC (rev 10280)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-background.h	2007-03-01 12:06:43 UTC (rev 10281)
@@ -83,6 +83,9 @@
 HDHomeBackground *
             hd_home_background_copy             (const HDHomeBackground *src);
 
+gboolean    hd_home_background_equal            (const HDHomeBackground *bg1,
+                                                 const HDHomeBackground *bg2);
+
 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-03-01 12:04:14 UTC (rev 10280)
+++ projects/haf/trunk/hildon-desktop/src/hd-home-window.c	2007-03-01 12:06:43 UTC (rev 10281)
@@ -91,6 +91,7 @@
   gchar            *west_border;
 
   HDHomeBackground *background;
+  HDHomeBackground *previous_background;
 };
 
 /* Properties */
@@ -1131,8 +1132,9 @@
                                        gint response,
                                        GtkDialog *dialog)
 {
-  HDHomeBackground *background;
-  GdkRectangle *workarea;
+  HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
+  HDHomeBackground     *background;
+  GdkRectangle         *workarea;
 
   g_object_get (window, "work-area", &workarea, NULL);
 
@@ -1143,12 +1145,15 @@
     {
       case GTK_RESPONSE_OK:
           gtk_widget_hide (GTK_WIDGET(dialog));
-          hd_home_background_apply_async 
-              (background,
-               GTK_WIDGET (window)->window,
-               workarea,
-               (HDHomeBackgroundApplyCallback)background_apply_and_save_callback,
+          if (!hd_home_background_equal (priv->background,
+                                         background))
+            hd_home_background_apply_async 
+                (background,
+                 GTK_WIDGET (window)->window,
+                 workarea,
+                 (HDHomeBackgroundApplyCallback)background_apply_and_save_callback,
                window);
+          g_object_unref (priv->previous_background);
           break;
       case HILDON_HOME_SET_BG_RESPONSE_PREVIEW:
           hd_home_background_apply_async 
@@ -1161,7 +1166,17 @@
           break;
       case GTK_RESPONSE_CANCEL:
       case GTK_RESPONSE_DELETE_EVENT:
+          if (!hd_home_background_equal (priv->background,
+                                         priv->previous_background))
+            hd_home_background_apply_async 
+                (priv->previous_background,
+                 GTK_WIDGET (window)->window,
+                 workarea,
+                 (HDHomeBackgroundApplyCallback)background_apply_callback,
+                 window);
+
           gtk_widget_hide (GTK_WIDGET (dialog));
+          g_object_unref (priv->previous_background);
           break;
       default:
           break;
@@ -1174,6 +1189,8 @@
   HDHomeWindowPrivate      *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
   GtkWidget                *dialog;
 
+  priv->previous_background = hd_home_background_copy (priv->background);
+
   dialog = g_object_new (HD_TYPE_HOME_BACKGROUND_DIALOG,
 #ifdef HAVE_LIBOSSO
                          "osso-context", priv->osso_context,


More information about the maemo-commits mailing list