+ if (!nb_page) return false;
+
+ /* Optimization posibility: return immediately if image unchanged.
+ * Not enabled because it may break existing (stupid) code that
+ * manipulates the imagelist to cycle images */
+
+ /* if (image == nb_page->m_image) return true; */
+
+ /* For different cases:
+ 1) no image -> no image
+ 2) image -> no image
+ 3) no image -> image
+ 4) image -> image */
+
+ if (image == -1 && nb_page->m_image == -1)
+ return true; /* Case 1): Nothing to do. */
+
+ GtkWidget *pixmapwid = (GtkWidget*) NULL;
+
+ if (nb_page->m_image != -1)
+ {
+ /* Case 2) or 4). There is already an image in the gtkhbox. Let's find it */
+
+ GList *child = gtk_container_get_children(GTK_CONTAINER(nb_page->m_box));
+ while (child)
+ {
+ if (GTK_IS_IMAGE(child->data))
+ {
+ pixmapwid = GTK_WIDGET(child->data);
+ break;
+ }
+ child = child->next;
+ }
+
+ /* We should have the pixmap widget now */
+ wxASSERT(pixmapwid != NULL);
+
+ if (image == -1)
+ {
+ /* If there's no new widget, just remove the old from the box */
+ gtk_container_remove(GTK_CONTAINER(nb_page->m_box), pixmapwid);
+ nb_page->m_image = -1;
+
+ return true; /* Case 2) */
+ }
+ }
+
+ /* Only cases 3) and 4) left */
+ wxASSERT( m_imageList != NULL ); /* Just in case */
+
+ /* Construct the new pixmap */
+ const wxBitmap *bmp = m_imageList->GetBitmapPtr(image);
+
+ if (pixmapwid == NULL)
+ {
+ /* Case 3) No old pixmap. Create a new one and prepend it to the hbox */
+ pixmapwid = gtk_image_new_from_pixbuf(bmp->GetPixbuf());
+
+ /* CHECKME: Are these pack flags okay? */
+ gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
+ gtk_widget_show(pixmapwid);
+ }
+ else
+ {
+ /* Case 4) Simply replace the pixmap */
+ gtk_image_set_from_pixbuf((GtkImage*)pixmapwid, bmp->GetPixbuf());
+ }
+
+ nb_page->m_image = image;
+
+ return true;