[maemo-commits] [maemo-commits] r14726 - in projects/haf/trunk/hail: . hail/hail-hildon-desktop
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Wed Nov 7 13:46:31 EET 2007
- Previous message: [maemo-commits] r14725 - projects/haf/trunk
- Next message: [maemo-commits] r14727 - in projects/haf/trunk/hail: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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++; +}
- Previous message: [maemo-commits] r14725 - projects/haf/trunk
- Next message: [maemo-commits] r14727 - in projects/haf/trunk/hail: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]