[maemo-commits] [maemo-commits] r12072 - in projects/haf/trunk/hildon-desktop: . libhildondesktop

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Jun 1 18:42:26 EEST 2007
Author: jobi
Date: 2007-06-01 18:42:24 +0300 (Fri, 01 Jun 2007)
New Revision: 12072

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c
Log:

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

	* libhildondesktop/hildon-home-area.c:
	- track changes in the applets' state rather than check it each time
	* libhildondesktop/hildon-desktop-home-item.c:
	- send proper "notify" when the state changes



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-01 15:22:34 UTC (rev 12071)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-01 15:42:24 UTC (rev 12072)
@@ -1,3 +1,10 @@
+2007-06-01  Johan Bilien  <johan.bilien at nokia.com>
+
+	* libhildondesktop/hildon-home-area.c:
+	- track changes in the applets' state rather than check it each time
+	* libhildondesktop/hildon-desktop-home-item.c:
+	- send proper "notify" when the state changes
+
 2007-06-01  Lucas Rocha  <lucas.rocha at nokia.com>
 
 	* libhildondesktop/hildon-desktop-popup-menu.c: cleanup the scrolling

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c	2007-06-01 15:22:34 UTC (rev 12071)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c	2007-06-01 15:42:24 UTC (rev 12072)
@@ -410,7 +410,7 @@
                              "state of the applet",
                              -1,
                              G_MAXINT,
-                             -1,
+                             0,
                              G_PARAM_READABLE);
 
   g_object_class_install_property (object_class,
@@ -772,6 +772,7 @@
       g_source_remove (priv->timeout);
       priv->timeout = 0;
       priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL;
+      g_object_notify (G_OBJECT (widget), "state");
 
       gdk_pointer_ungrab (GDK_CURRENT_TIME);
 
@@ -1491,6 +1492,7 @@
           priv->y_offset = event->y;
           priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_MOVING;
         }
+      g_object_notify (G_OBJECT (w), "state");
 
       priv->timeout = g_timeout_add (DRAG_UPDATE_TIMEOUT,
                                      (GSourceFunc)
@@ -1533,6 +1535,7 @@
       g_source_remove (priv->timeout);
       priv->timeout = 0;
       priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL;
+      g_object_notify (G_OBJECT (applet), "state");
 
       gdk_pointer_ungrab (event->time);
 

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c	2007-06-01 15:22:34 UTC (rev 12071)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c	2007-06-01 15:42:24 UTC (rev 12072)
@@ -64,7 +64,11 @@
   Picture       alpha_mask;
   Picture       alpha_mask_unscaled;
   gint          background_width, background_height;
-  gulong        realize_handler, style_set_handler, size_allocate_handler;
+  gint          state;
+  gulong        realize_handler,
+                style_set_handler,
+                size_allocate_handler,
+                state_change_handler;
 #endif
 } ChildData;
 
@@ -201,6 +205,9 @@
 hildon_home_area_child_realize (GtkWidget             *child,
                                 HildonHomeArea        *area);
 
+static void
+hildon_home_area_child_state_change (ChildData         *child_data);
+
 #endif
 
 
@@ -958,8 +965,7 @@
 #ifdef HAVE_X_COMPOSITE
 static void
 hildon_home_area_child_compose (ChildData *child_data,
-                                HildonHomeArea *area,
-                                gboolean alpha)
+                                HildonHomeArea *area)
 {
   HildonHomeAreaPriv   *priv;
   GtkAllocation        *alloc;
@@ -972,9 +978,9 @@
   alloc = &(child_data->widget->allocation);
 
   XRenderComposite (GDK_DISPLAY (),
-                    (alpha)?PictOpOver:PictOpSrc,
+                    (child_data->state == 0)?PictOpOver:PictOpSrc,
                     child_data->picture,
-                    (alpha)?child_data->alpha_mask:None,
+                    (child_data->state == 0)?child_data->alpha_mask:None,
                     priv->picture,
                     0,
                     0,
@@ -1386,24 +1392,28 @@
 
 }
 
-static gint
-find_by_window (ChildData *data, Window *w)
-{
-  return !(data->window == *w);
-}
-
 static void
-child_is_dragged (ChildData *child, gboolean *is_dragged)
+hildon_home_area_child_state_change (ChildData *child_data)
 {
-  gint  state;
+  gint state;
 
-  g_object_get (child->widget,
+  g_object_get (child_data->widget,
                 "state", &state,
                 NULL);
-  if (!*is_dragged && state)
-    *is_dragged = TRUE;
+
+  g_debug ("state changed to %i", state);
+
+  child_data->state = state;
+
 }
 
+
+static gint
+find_by_window (ChildData *data, Window *w)
+{
+  return !(data->window == *w);
+}
+
 static gboolean
 hildon_home_area_expose (GtkWidget *widget,
                          GdkEventExpose *event)
@@ -1421,7 +1431,6 @@
       XRenderPictureAttributes  pa;
       Window                   *wchildren, root, parent;
       int                       n_children, i;
-      gboolean                  is_dragged = FALSE;
 
       gdk_window_get_internal_paint_info (widget->window,
                                           &drawable,
@@ -1473,10 +1482,6 @@
           return FALSE;
         }
 
-      g_list_foreach (priv->children_data,
-                      (GFunc)child_is_dragged,
-                      &is_dragged);
-
       for (i = 0; i < n_children; i++)
         {
           GList        *l = NULL;
@@ -1487,8 +1492,7 @@
 
           if (l)
             hildon_home_area_child_compose (l->data,
-                                            HILDON_HOME_AREA (widget),
-                                            !is_dragged);
+                                            HILDON_HOME_AREA (widget));
         }
 
       XFree (wchildren);
@@ -1910,6 +1914,8 @@
                                            child_data->style_set_handler);
               g_signal_handler_disconnect (applet,
                                            child_data->size_allocate_handler);
+              g_signal_handler_disconnect (applet,
+                                           child_data->state_change_handler);
             }
 #endif
 
@@ -2243,16 +2249,23 @@
 void
 hildon_home_area_put (HildonHomeArea *area, GtkWidget *widget, gint x, gint y)
 {
-  ChildData  *child_data;
+  ChildData    *child_data;
+  gint          state = 0;
 
   g_return_if_fail (HILDON_IS_HOME_AREA (area) && GTK_IS_WIDGET (widget));
 
   gtk_widget_set_parent (widget, GTK_WIDGET (area));
 
+  if (HILDON_DESKTOP_IS_HOME_ITEM (widget))
+    g_object_get (widget,
+                  "state", &state,
+                  NULL);
+
   child_data = g_new0 (ChildData, 1);
   child_data->widget = widget;
   child_data->x = x;
   child_data->y = y;
+  child_data->state = state;
 
   gtk_container_child_set (GTK_CONTAINER (area), widget,
                            "child-data", child_data,
@@ -2274,6 +2287,15 @@
                             G_CALLBACK (hildon_home_area_child_size_allocate),
                             area);
 
+      if (HILDON_DESKTOP_IS_HOME_ITEM (widget))
+        child_data->state_change_handler =
+            g_signal_connect_swapped (widget, "notify::state",
+                                      G_CALLBACK (
+                                         hildon_home_area_child_state_change),
+                                      child_data);
+
+
+
       if (GTK_WIDGET_REALIZED (widget))
         {
           hildon_home_area_create_child_data (HILDON_HOME_AREA (area), widget);


More information about the maemo-commits mailing list