Fix all remaining GTK3 issues.

Work around the issue of GnomeCanvasItem amending its own flags to
GtkObject::flags (which is sealed) by giving it its own flags field.
This breaks libgnomecanvas ABI and API, but I see no other way.

This commit didn't work the first time because gnome-pilot libraries
were still pulling in the system-wide libgnomecanvas, and that was
interfereing with our bundled version which has a different ABI.
But gnome-pilot integration was dropped in the previous commit, so
everything is now using the bundled libgnomecanvas.
This commit is contained in:
Matthew Barnes
2010-01-13 12:50:49 -05:00
parent 333897772f
commit c2c89fcb8c
20 changed files with 508 additions and 240 deletions

View File

@ -266,7 +266,7 @@ ecb_set_property (GObject *object,
if (color_changed) {
ecb->priv->color = color;
if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(item)) {
if (item->flags & GNOME_CANVAS_ITEM_REALIZED) {
get_color (ecb);
if (!item->canvas->aa) {
gdk_gc_set_foreground (ecb->priv->gc, &ecb->priv->color);

View File

@ -256,7 +256,7 @@ e_canvas_vbox_real_add_item(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item)
e_canvas_vbox->items = g_list_append(e_canvas_vbox->items, item);
g_object_weak_ref (G_OBJECT (item),
e_canvas_vbox_remove_item, e_canvas_vbox);
if (GTK_OBJECT_FLAGS( e_canvas_vbox ) & GNOME_CANVAS_ITEM_REALIZED) {
if (GNOME_CANVAS_ITEM (e_canvas_vbox)->flags & GNOME_CANVAS_ITEM_REALIZED) {
gnome_canvas_item_set(item,
"width", (gdouble) e_canvas_vbox->minimum_width,
NULL);
@ -270,7 +270,7 @@ e_canvas_vbox_real_add_item_start(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *i
e_canvas_vbox->items = g_list_prepend(e_canvas_vbox->items, item);
g_object_weak_ref (G_OBJECT (item),
e_canvas_vbox_remove_item, e_canvas_vbox);
if (GTK_OBJECT_FLAGS( e_canvas_vbox ) & GNOME_CANVAS_ITEM_REALIZED) {
if (GNOME_CANVAS_ITEM (e_canvas_vbox)->flags & GNOME_CANVAS_ITEM_REALIZED) {
gnome_canvas_item_set(item,
"width", (gdouble) e_canvas_vbox->minimum_width,
NULL);
@ -297,7 +297,7 @@ static void
e_canvas_vbox_reflow( GnomeCanvasItem *item, gint flags )
{
ECanvasVbox *e_canvas_vbox = E_CANVAS_VBOX(item);
if (GTK_OBJECT_FLAGS( e_canvas_vbox ) & GNOME_CANVAS_ITEM_REALIZED) {
if (item->flags & GNOME_CANVAS_ITEM_REALIZED) {
gdouble old_height;
gdouble running_height;

View File

@ -399,7 +399,7 @@ pick_current_item (GnomeCanvas *canvas, GdkEvent *event)
/* find the closest item */
if (canvas->root->object.flags & GNOME_CANVAS_ITEM_VISIBLE)
if (canvas->root->flags & GNOME_CANVAS_ITEM_VISIBLE)
gnome_canvas_item_invoke_point (canvas->root, x, y, cx, cy,
&canvas->new_current_item);
else
@ -593,7 +593,11 @@ e_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event)
canvas = GNOME_CANVAS (widget);
ecanvas = E_CANVAS (widget);
/* XXX Can't access flags directly anymore, but is it really needed?
* If so, could we call gtk_widget_send_focus_change() instead? */
#if 0
GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
#endif
gtk_im_context_focus_in (ecanvas->im_context);
@ -616,7 +620,11 @@ e_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event)
canvas = GNOME_CANVAS (widget);
ecanvas = E_CANVAS (widget);
/* XXX Can't access flags directly anymore, but is it really needed?
* If so, could we call gtk_widget_send_focus_change() instead? */
#if 0
GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
#endif
gtk_im_context_focus_out (ecanvas->im_context);
@ -700,12 +708,12 @@ e_canvas_item_invoke_reflow (GnomeCanvasItem *item, gint flags)
group = GNOME_CANVAS_GROUP (item);
for (list = group->item_list; list; list = list->next) {
child = GNOME_CANVAS_ITEM (list->data);
if (child->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
if (child->flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
e_canvas_item_invoke_reflow (child, flags);
}
}
if (item->object.flags & E_CANVAS_ITEM_NEEDS_REFLOW) {
if (item->flags & E_CANVAS_ITEM_NEEDS_REFLOW) {
ECanvasItemReflowFunc func;
func = (ECanvasItemReflowFunc)
g_object_get_data (G_OBJECT (item),
@ -714,14 +722,14 @@ e_canvas_item_invoke_reflow (GnomeCanvasItem *item, gint flags)
func (item, flags);
}
item->object.flags &= ~E_CANVAS_ITEM_NEEDS_REFLOW;
item->object.flags &= ~E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
item->flags &= ~E_CANVAS_ITEM_NEEDS_REFLOW;
item->flags &= ~E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
}
static void
do_reflow (ECanvas *canvas)
{
if (GNOME_CANVAS(canvas)->root->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
if (GNOME_CANVAS(canvas)->root->flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
e_canvas_item_invoke_reflow (GNOME_CANVAS(canvas)->root, 0);
}
@ -761,10 +769,10 @@ add_idle (ECanvas *canvas)
static void
e_canvas_item_descendent_needs_reflow (GnomeCanvasItem *item)
{
if (item->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
if (item->flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
return;
item->object.flags |= E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
item->flags |= E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
if (item->parent)
e_canvas_item_descendent_needs_reflow(item->parent);
}
@ -772,8 +780,8 @@ e_canvas_item_descendent_needs_reflow (GnomeCanvasItem *item)
void
e_canvas_item_request_reflow (GnomeCanvasItem *item)
{
if (item->object.flags & GNOME_CANVAS_ITEM_REALIZED) {
item->object.flags |= E_CANVAS_ITEM_NEEDS_REFLOW;
if (item->flags & GNOME_CANVAS_ITEM_REALIZED) {
item->flags |= E_CANVAS_ITEM_NEEDS_REFLOW;
e_canvas_item_descendent_needs_reflow(item);
add_idle(E_CANVAS(item->canvas));
}