multihead fix: added gimp_preview_renderer_unrealize() which destroys the

2003-11-13  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimppreviewrenderer.[ch]: multihead fix: added
	gimp_preview_renderer_unrealize() which destroys the cached
	GdkGC. This function must be called whenever the widget owning the
	renderer is unrealized.

	* app/widgets/gimpcomponenteditor.c
	* app/widgets/gimpcontainertreeview.c
	* app/widgets/gimplayertreeview.c
	* app/widgets/gimppreview.c: implement GtkWidget::unrealize() and
	call gimp_preview_renderer_unrealize() on all renderers.
This commit is contained in:
Michael Natterer 2003-11-13 15:04:13 +00:00 committed by Michael Natterer
parent a843b2adfd
commit 2b6ed25f06
10 changed files with 133 additions and 2 deletions

View File

@ -1,3 +1,16 @@
2003-11-13 Michael Natterer <mitch@gimp.org>
* app/widgets/gimppreviewrenderer.[ch]: multihead fix: added
gimp_preview_renderer_unrealize() which destroys the cached
GdkGC. This function must be called whenever the widget owning the
renderer is unrealized.
* app/widgets/gimpcomponenteditor.c
* app/widgets/gimpcontainertreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimppreview.c: implement GtkWidget::unrealize() and
call gimp_preview_renderer_unrealize() on all renderers.
2003-11-13 Sven Neumann <sven@gimp.org>
* app/app_procs.[ch]

View File

@ -54,6 +54,8 @@ enum
static void gimp_component_editor_class_init (GimpComponentEditorClass *klass);
static void gimp_component_editor_init (GimpComponentEditor *editor);
static void gimp_component_editor_unrealize (GtkWidget *widget);
static void gimp_component_editor_set_image (GimpImageEditor *editor,
GimpImage *gimage);
@ -119,12 +121,16 @@ gimp_component_editor_get_type (void)
static void
gimp_component_editor_class_init (GimpComponentEditorClass *klass)
{
GtkWidgetClass *widget_class;
GimpImageEditorClass *image_editor_class;
widget_class = GTK_WIDGET_CLASS (klass);
image_editor_class = GIMP_IMAGE_EDITOR_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
widget_class->unrealize = gimp_component_editor_unrealize;
image_editor_class->set_image = gimp_component_editor_set_image;
}
@ -192,6 +198,30 @@ gimp_component_editor_init (GimpComponentEditor *editor)
editor, NULL);
}
static void
gimp_component_editor_unrealize (GtkWidget *widget)
{
GimpComponentEditor *editor = GIMP_COMPONENT_EDITOR (widget);
GtkTreeIter iter;
gboolean iter_valid;
for (iter_valid = gtk_tree_model_get_iter_first (editor->model, &iter);
iter_valid;
iter_valid = gtk_tree_model_iter_next (editor->model, &iter))
{
GimpPreviewRenderer *renderer;
gtk_tree_model_get (editor->model, &iter,
COLUMN_RENDERER, &renderer,
-1);
gimp_preview_renderer_unrealize (renderer);
g_object_unref (renderer);
}
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}
static void
gimp_component_editor_set_image (GimpImageEditor *editor,
GimpImage *gimage)
@ -297,7 +327,6 @@ gimp_component_editor_set_preview_size (GimpComponentEditor *editor,
-1);
gimp_preview_renderer_set_size (renderer, preview_size, 1);
g_object_unref (renderer);
}

View File

@ -59,6 +59,7 @@ static GObject *gimp_container_tree_view_constructor (GType t
guint n_params,
GObjectConstructParam *params);
static void gimp_container_tree_view_unrealize (GtkWidget *widget);
static void gimp_container_tree_view_unmap (GtkWidget *widget);
static gboolean gimp_container_tree_view_popup_menu (GtkWidget *widget);
static void gimp_container_tree_view_set_container (GimpContainerView *view,
@ -140,6 +141,7 @@ gimp_container_tree_view_class_init (GimpContainerTreeViewClass *klass)
object_class->constructor = gimp_container_tree_view_constructor;
widget_class->unrealize = gimp_container_tree_view_unrealize;
widget_class->unmap = gimp_container_tree_view_unmap;
widget_class->popup_menu = gimp_container_tree_view_popup_menu;
@ -258,6 +260,30 @@ gimp_container_tree_view_constructor (GType type,
return object;
}
static void
gimp_container_tree_view_unrealize (GtkWidget *widget)
{
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (widget);
GtkTreeIter iter;
gboolean iter_valid;
for (iter_valid = gtk_tree_model_get_iter_first (tree_view->model, &iter);
iter_valid;
iter_valid = gtk_tree_model_iter_next (tree_view->model, &iter))
{
GimpPreviewRenderer *renderer;
gtk_tree_model_get (tree_view->model, &iter,
COLUMN_RENDERER, &renderer,
-1);
gimp_preview_renderer_unrealize (renderer);
g_object_unref (renderer);
}
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}
static void
gimp_container_tree_view_unmap (GtkWidget *widget)
{
@ -696,7 +722,6 @@ gimp_container_tree_view_set_preview_size (GimpContainerView *view)
gimp_preview_renderer_set_size (renderer,
view->preview_size,
view->preview_border_width);
g_object_unref (renderer);
}

View File

@ -57,6 +57,7 @@ static GObject * gimp_layer_tree_view_constructor (GType type,
GObjectConstructParam *params);
static void gimp_layer_tree_view_finalize (GObject *object);
static void gimp_layer_tree_view_unrealize (GtkWidget *widget);
static void gimp_layer_tree_view_style_set (GtkWidget *widget,
GtkStyle *prev_style);
@ -188,6 +189,7 @@ gimp_layer_tree_view_class_init (GimpLayerTreeViewClass *klass)
object_class->constructor = gimp_layer_tree_view_constructor;
object_class->finalize = gimp_layer_tree_view_finalize;
widget_class->unrealize = gimp_layer_tree_view_unrealize;
widget_class->style_set = gimp_layer_tree_view_style_set;
container_view_class->set_container = gimp_layer_tree_view_set_container;
@ -417,6 +419,34 @@ gimp_layer_tree_view_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_layer_tree_view_unrealize (GtkWidget *widget)
{
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (widget);
GimpLayerTreeView *layer_view = GIMP_LAYER_TREE_VIEW (widget);
GtkTreeIter iter;
gboolean iter_valid;
for (iter_valid = gtk_tree_model_get_iter_first (tree_view->model, &iter);
iter_valid;
iter_valid = gtk_tree_model_iter_next (tree_view->model, &iter))
{
GimpPreviewRenderer *renderer;
gtk_tree_model_get (tree_view->model, &iter,
layer_view->model_column_mask, &renderer,
-1);
if (renderer)
{
gimp_preview_renderer_unrealize (renderer);
g_object_unref (renderer);
}
}
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}
static void
gimp_layer_tree_view_style_set (GtkWidget *widget,
GtkStyle *prev_style)

View File

@ -255,6 +255,9 @@ gimp_preview_unrealize (GtkWidget *widget)
preview->event_window = NULL;
}
if (preview->renderer)
gimp_preview_renderer_unrealize (preview->renderer);
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}

View File

@ -456,6 +456,18 @@ gimp_preview_renderer_set_background (GimpPreviewRenderer *renderer,
}
}
void
gimp_preview_renderer_unrealize (GimpPreviewRenderer *renderer)
{
g_return_if_fail (GIMP_IS_PREVIEW_RENDERER (renderer));
if (renderer->gc)
{
g_object_unref (renderer->gc);
renderer->gc = NULL;
}
}
void
gimp_preview_renderer_invalidate (GimpPreviewRenderer *renderer)
{

View File

@ -110,6 +110,8 @@ void gimp_preview_renderer_set_border_color (GimpPreviewRenderer *renderer,
void gimp_preview_renderer_set_background (GimpPreviewRenderer *renderer,
const gchar *stock_id);
void gimp_preview_renderer_unrealize (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_invalidate (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_update (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_update_idle (GimpPreviewRenderer *renderer);

View File

@ -255,6 +255,9 @@ gimp_preview_unrealize (GtkWidget *widget)
preview->event_window = NULL;
}
if (preview->renderer)
gimp_preview_renderer_unrealize (preview->renderer);
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}

View File

@ -456,6 +456,18 @@ gimp_preview_renderer_set_background (GimpPreviewRenderer *renderer,
}
}
void
gimp_preview_renderer_unrealize (GimpPreviewRenderer *renderer)
{
g_return_if_fail (GIMP_IS_PREVIEW_RENDERER (renderer));
if (renderer->gc)
{
g_object_unref (renderer->gc);
renderer->gc = NULL;
}
}
void
gimp_preview_renderer_invalidate (GimpPreviewRenderer *renderer)
{

View File

@ -110,6 +110,8 @@ void gimp_preview_renderer_set_border_color (GimpPreviewRenderer *renderer,
void gimp_preview_renderer_set_background (GimpPreviewRenderer *renderer,
const gchar *stock_id);
void gimp_preview_renderer_unrealize (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_invalidate (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_update (GimpPreviewRenderer *renderer);
void gimp_preview_renderer_update_idle (GimpPreviewRenderer *renderer);