[maemo-commits] [maemo-commits] r14726 - in projects/haf/trunk/hail: . hail/hail-hildon-desktop

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Nov 7 13:46:31 EET 2007
Author: mdk
Date: 2007-11-07 13:46:29 +0200 (Wed, 07 Nov 2007)
New Revision: 14726

Modified:
   projects/haf/trunk/hail/ChangeLog
   projects/haf/trunk/hail/hail/hail-hildon-desktop/haildesktoppopupwindow.c
Log:
Applying a fix for 74135.


Modified: projects/haf/trunk/hail/ChangeLog
===================================================================
--- projects/haf/trunk/hail/ChangeLog	2007-11-07 11:43:11 UTC (rev 14725)
+++ projects/haf/trunk/hail/ChangeLog	2007-11-07 11:46:29 UTC (rev 14726)
@@ -1,5 +1,17 @@
-2007-10-19 Fernando Herrera  <fernando.herrera-de-las-heras at nokia.com> 
+2007-11-07  Michael Dominic Kostrzewa  <michael.kostrzewa at nokia.com> 
+
 	* hail/hail-hildon-desktop/haildesktoppopupwindow.c
+	(hail_desktop_popup_window_finalize)
+	(hail_desktop_popup_window_ref_child)
+	(hail_desktop_popup_window_real_initialize)
+	(add_internal_widgets)
+	Fixing a problem exposing HildonDesktopPopupWindow child. 
+	Now the extra_panes and the child are managed in the same
+	way, as internal widgets.	
+	
+	Fixes NB#74135
+	
+	* hail/hail-hildon-desktop/haildesktoppopupwindow.c
 	Correct a mistmatch with the extra panes. This popup windows is a 
 	gtkwindow, so only have one children. His extra panes aren't directly
 	his children, so can't be accessed using gtk_container_for_all. This

Modified: projects/haf/trunk/hail/hail/hail-hildon-desktop/haildesktoppopupwindow.c
===================================================================
--- projects/haf/trunk/hail/hail/hail-hildon-desktop/haildesktoppopupwindow.c	2007-11-07 11:43:11 UTC (rev 14725)
+++ projects/haf/trunk/hail/hail/hail-hildon-desktop/haildesktoppopupwindow.c	2007-11-07 11:46:29 UTC (rev 14726)
@@ -26,7 +26,8 @@
  * In particular it exposes:
  * <itemizedlist>
  * <listitem>The embedded control. It gets a default name and description.</listitem>
- * <listitem>The panes for the menus as a children (they are GtkWindows).</listitem>
+ * <listitem>The popupwindow unique children (GtkWindow is a GtkBin).</listitem>
+ * <listitem>The popupwindow extra panes (they are GtkWindows).</listitem>
  * <listitem>The orientation.</listitem>
  * </itemizedlist>
  */
@@ -50,14 +51,17 @@
 static void       hail_desktop_popup_window_real_initialize(AtkObject *obj,
 							    gpointer data);
 
+static void       add_internal_widgets (GtkWidget *widget, gpointer data);
+
 #define HAIL_DESKTOP_POPUP_WINDOW_DEFAULT_NAME "Hildon Desktop Popup Window"
 #define HAIL_DESKTOP_POPUP_WINDOW_DEFAULT_DESCRIPTION "The window which shows the popup menus"
 
 typedef struct _HailDesktopPopupWindowPrivate HailDesktopPopupWindowPrivate;
 struct _HailDesktopPopupWindowPrivate
 {
-  AtkObject **extra_panes;   /* the widgets */
-  guint	      n_extra_panes; /* number of widget */
+  AtkObject **internal_widgets;   /* the extra_panes and the widget contained  */
+  guint	      n_internal_widgets; /* number of widget */
+  gint index; /* a internal index */
 };
 
 #define HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE(o)  \
@@ -140,8 +144,8 @@
   g_return_if_fail (HAIL_IS_DESKTOP_POPUP_WINDOW (popup_window));
   priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (popup_window);
 
-  priv->extra_panes = NULL;
-  priv->n_extra_panes = 0;
+  priv->internal_widgets = NULL;
+  priv->n_internal_widgets = 0;
 }
 
 static void
@@ -155,11 +159,13 @@
   popup_window = HAIL_DESKTOP_POPUP_WINDOW (object);
   priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (popup_window);
 
-  if (priv->extra_panes)
+  if (priv->internal_widgets)
     {
-      for (i = 0; i < priv->n_extra_panes; i++)
-	g_object_unref (priv->extra_panes[i]);
-      g_free (priv->extra_panes);
+      for (i = 0; i < priv->n_internal_widgets; i++)
+	{
+	  g_object_unref (priv->internal_widgets[i]);
+	}
+      g_free (priv->internal_widgets);
     }
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -248,9 +254,9 @@
   popup_window = HAIL_DESKTOP_POPUP_WINDOW (obj);
   priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (popup_window);
 
-  if (priv->extra_panes)
+  if (priv->internal_widgets)
     {
-      n_children += priv->n_extra_panes;
+      n_children = priv->n_internal_widgets;
     }
 
   return n_children;
@@ -273,9 +279,9 @@
   popup_window = HAIL_DESKTOP_POPUP_WINDOW (obj);
   priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (popup_window);
 
-  if (priv->extra_panes != NULL)
+  if (priv->internal_widgets != NULL)
     {
-      accessible = priv->extra_panes[i];
+      accessible = priv->internal_widgets[i];
       g_object_ref (accessible);
     }
 
@@ -333,6 +339,7 @@
   HailDesktopPopupWindowPrivate *priv  = NULL;
   GtkWidget *current_widget = NULL;
   gint i = 0;
+  gint n_extra_panes = 0;
 
   g_return_if_fail (HAIL_IS_DESKTOP_POPUP_WINDOW (obj));
   priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (obj);
@@ -344,19 +351,48 @@
 
   if (HILDON_DESKTOP_IS_POPUP_WINDOW (popup_window))
     {
+      /* add the extra panes */
       g_object_get(G_OBJECT (popup_window),
-		   "n-panes", &priv->n_extra_panes,
+		   "n-panes", &n_extra_panes,
 		   NULL);
 
-      priv->extra_panes = g_new0 (AtkObject *, priv->n_extra_panes);
+      priv->n_internal_widgets = n_extra_panes +1 ; /* the extra panes and the 
+						       popupwindow child*/
+      priv->internal_widgets = g_new0 (AtkObject *, priv->n_internal_widgets);
+      priv->index = 0;
 
-      for ( i = 0 ; i < priv->n_extra_panes; i++) 
+      for ( i = 0 ; i < n_extra_panes; i++) 
 	{	  
 	  current_widget = hildon_desktop_popup_window_get_pane
 	    (HILDON_DESKTOP_POPUP_WINDOW(popup_window), i);
 
-	  priv->extra_panes[i] = gtk_widget_get_accessible (current_widget);
+	  priv->internal_widgets[priv->index] = 
+	    gtk_widget_get_accessible (current_widget);
+
+	  priv->index ++;
 	}
+
+      /* add the internal widgets */
+      gtk_container_forall(GTK_CONTAINER(popup_window),
+			   add_internal_widgets, obj);
+
     }
 }
 
+/*
+ * callback for gtk_container_forall.
+ * It's used from atk object initialize to get the references
+ * to the AtkObjects of the child widgets
+ */
+static void
+add_internal_widgets (GtkWidget *widget, gpointer data)
+{
+  HailDesktopPopupWindow *popup_window = NULL;
+  HailDesktopPopupWindowPrivate *priv  = NULL;
+
+  popup_window = HAIL_DESKTOP_POPUP_WINDOW (data);
+  priv = HAIL_DESKTOP_POPUP_WINDOW_GET_PRIVATE (popup_window);
+
+  priv->internal_widgets[priv->index] = gtk_widget_get_accessible (widget);
+  priv->index++;
+}


More information about the maemo-commits mailing list