+2008-11-11 Alejandro G. Castro <alex@igalia.com>
+
+ * src/hildon-pnnable-area.c,
+ (hildon_pannable_area_dispose),
+ (hildon_pannable_area_button_press_cb),
+ (hildon_pannable_area_child_mapped),
+ (hildon_pannable_area_add),
+ (hildon_pannable_area_remove): Added code to control the position
+ of the event_window when adding and removing children from the
+ pannable. We have to raise the event window when the child is
+ mapped.
+
+ Fixes: NB#89811 (Not able to select first image thumbnail in multi
+ selection mode using custom widget inside pannable)
+
2008-11-11 Claudio Saavedra <csaavedra@igalia.com>
* configure.ac: post release version bump
GdkEventButton * event);
static gboolean hildon_pannable_area_scroll_cb (GtkWidget *widget,
GdkEventScroll *event);
+static void hildon_pannable_area_child_mapped (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data);
static void hildon_pannable_area_add (GtkContainer *container, GtkWidget *child);
static void hildon_pannable_area_remove (GtkContainer *container, GtkWidget *child);
static void hildon_pannable_calculate_vel_factor (HildonPannableArea * self);
hildon_pannable_area_dispose (GObject * object)
{
HildonPannableAreaPrivate *priv = HILDON_PANNABLE_AREA (object)->priv;
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (object));
if (priv->idle_id) {
g_source_remove (priv->idle_id);
priv->vadjust = NULL;
}
+ if (child) {
+ g_signal_handlers_disconnect_by_func (GTK_WIDGET (child),
+ G_CALLBACK (hildon_pannable_area_child_mapped),
+ object);
+ }
+
if (G_OBJECT_CLASS (hildon_pannable_area_parent_class)->dispose)
G_OBJECT_CLASS (hildon_pannable_area_parent_class)->dispose (object);
}
priv->vel_x = 0;
priv->vel_y = 0;
- if ((priv->child) && (priv->child != gtk_bin_get_child (GTK_BIN (widget))->window)) {
+ if (priv->child) {
g_object_add_weak_pointer ((GObject *) priv->child,
(gpointer) & priv->child);
return TRUE;
}
+static void
+hildon_pannable_area_child_mapped (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ HildonPannableAreaPrivate *priv = HILDON_PANNABLE_AREA (user_data)->priv;
+
+ if (priv->event_window != NULL && priv->enabled)
+ gdk_window_raise (priv->event_window);
+}
static void
hildon_pannable_area_add (GtkContainer *container, GtkWidget *child)
gtk_widget_set_parent (child, GTK_WIDGET (container));
GTK_BIN (container)->child = child;
+ g_signal_connect_after (child, "map-event",
+ G_CALLBACK (hildon_pannable_area_child_mapped),
+ container);
+
if (!gtk_widget_set_scroll_adjustments (child, priv->hadjust, priv->vadjust)) {
g_warning ("%s: cannot add non scrollable widget, "
"wrap it in a viewport", __FUNCTION__);
gtk_widget_set_scroll_adjustments (child, NULL, NULL);
+ g_signal_handlers_disconnect_by_func (GTK_WIDGET (child),
+ G_CALLBACK (hildon_pannable_area_child_mapped),
+ container);
+
/* chain parent class handler to remove child */
GTK_CONTAINER_CLASS (hildon_pannable_area_parent_class)->remove (container, child);
}