Commit 637c61da authored by Havoc Pennington's avatar Havoc Pennington Committed by Havoc Pennington

handle case where there are no rows in the model

2001-01-09  Havoc Pennington  <hp@redhat.com>

	* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
	there are no rows in the model

	* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
	NULL, then return the start of the list

	* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
	if we can't get any rows from an empty model

	* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
	extraneous * after function pointer typedef usage

	* Makefile.am: don't specify full path to cp and rm

	* gtk/gtkcellrenderertextpixbuf.c
	(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
	NULL before dereferencing, fixes a segfault that happened from
	time to time

	* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
	use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
	and reindent the function
	(gtk_cell_renderer_pixbuf_get_size): indentation

	* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
	we quit it
	(gtk_dialog_add_buttons_valist): add g_return_if_fail
	(gtk_dialog_set_default_response): New function, to set default
	button
	(gtk_dialog_set_response_sensitive): New function, to set
	sensitivity of buttons

	* gtk/gtkcellrendererpixbuf.c
	(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
	(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf

	* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
	handle any G_TYPE_OBJECT subclass, not just the base class, and
	also boxed types.
	(_gtk_tree_data_list_value_to_node): ditto

	* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
	--gtk-debug=tree

	* gtk/gtkmain.c: add GTK_DEBUG_TREE

	* gtk/gtkdebug.h: add GTK_DEBUG_TREE
parent 0056107b
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
2001-01-09 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_check_dirty): handle case where
there are no rows in the model
* gtk/gtkliststore.c (gtk_list_store_iter_children): if parent is
NULL, then return the start of the list
* gtk/gtktreeview.c (gtk_tree_view_setup_model): don't build tree
if we can't get any rows from an empty model
* gtk/gtktreeviewcolumn.h (struct _GtkTreeViewColumn): remove
extraneous * after function pointer typedef usage
* Makefile.am: don't specify full path to cp and rm
* gtk/gtkcellrenderertextpixbuf.c
(gtk_cell_renderer_text_pixbuf_get_size): check width/height !=
NULL before dereferencing, fixes a segfault that happened from
time to time
* gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render):
use gdk_pixbuf_render_to_drawable_alpha() to get alpha channel,
and reindent the function
(gtk_cell_renderer_pixbuf_get_size): indentation
* gtk/gtkdialog.c (gtk_dialog_run): destroy main loop only after
we quit it
(gtk_dialog_add_buttons_valist): add g_return_if_fail
(gtk_dialog_set_default_response): New function, to set default
button
(gtk_dialog_set_response_sensitive): New function, to set
sensitivity of buttons
* gtk/gtkcellrendererpixbuf.c
(gtk_cell_renderer_pixbuf_get_property): allow getting a NULL pixbuf
(gtk_cell_renderer_pixbuf_set_property): allow setting a NULL pixbuf
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle any G_TYPE_OBJECT subclass, not just the base class, and
also boxed types.
(_gtk_tree_data_list_value_to_node): ditto
* gtk/gtkrbtree.c: Run _gtk_rbtree_test at strategic points if
--gtk-debug=tree
* gtk/gtkmain.c: add GTK_DEBUG_TREE
* gtk/gtkdebug.h: add GTK_DEBUG_TREE
2001-01-09 Tor Lillqvist <tml@iki.fi> 2001-01-09 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c: Implement better mouse * gdk/win32/gdkevents-win32.c: Implement better mouse
......
...@@ -119,12 +119,12 @@ GDKTARGET=@gdktarget@ ...@@ -119,12 +119,12 @@ GDKTARGET=@gdktarget@
## Copy .pc files to target-specific names ## Copy .pc files to target-specific names
gtk+-$(GDKTARGET)-2.0.pc: gtk+-2.0.pc gtk+-$(GDKTARGET)-2.0.pc: gtk+-2.0.pc
/bin/rm -f gtk+-$(GDKTARGET)-2.0.pc && \ rm -f gtk+-$(GDKTARGET)-2.0.pc && \
/bin/cp gtk+-2.0.pc gtk+-$(GDKTARGET)-2.0.pc cp gtk+-2.0.pc gtk+-$(GDKTARGET)-2.0.pc
gdk-$(GDKTARGET)-2.0.pc: gdk-2.0.pc gdk-$(GDKTARGET)-2.0.pc: gdk-2.0.pc
/bin/rm -f gdk-$(GDKTARGET)-2.0.pc && \ rm -f gdk-$(GDKTARGET)-2.0.pc && \
/bin/cp gdk-2.0.pc gdk-$(GDKTARGET)-2.0.pc cp gdk-2.0.pc gdk-$(GDKTARGET)-2.0.pc
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA= gdk-pixbuf-2.0.pc gdk-$(GDKTARGET)-2.0.pc gtk+-$(GDKTARGET)-2.0.pc pkgconfig_DATA= gdk-pixbuf-2.0.pc gdk-$(GDKTARGET)-2.0.pc gtk+-$(GDKTARGET)-2.0.pc
......
...@@ -117,7 +117,8 @@ gtk_cell_renderer_pixbuf_get_property (GObject *object, ...@@ -117,7 +117,8 @@ gtk_cell_renderer_pixbuf_get_property (GObject *object,
switch (param_id) switch (param_id)
{ {
case PROP_PIXBUF: case PROP_PIXBUF:
g_value_set_object (value, G_OBJECT (cellpixbuf->pixbuf)); g_value_set_object (value,
cellpixbuf->pixbuf ? G_OBJECT (cellpixbuf->pixbuf) : NULL);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
...@@ -139,8 +140,9 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object, ...@@ -139,8 +140,9 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object,
switch (param_id) switch (param_id)
{ {
case PROP_PIXBUF: case PROP_PIXBUF:
pixbuf = GDK_PIXBUF (g_value_get_object (value)); pixbuf = (GdkPixbuf*) g_value_get_object (value);
g_object_ref (G_OBJECT (pixbuf)); if (pixbuf)
g_object_ref (G_OBJECT (pixbuf));
if (cellpixbuf->pixbuf) if (cellpixbuf->pixbuf)
g_object_unref (G_OBJECT (cellpixbuf->pixbuf)); g_object_unref (G_OBJECT (cellpixbuf->pixbuf));
cellpixbuf->pixbuf = pixbuf; cellpixbuf->pixbuf = pixbuf;
...@@ -154,7 +156,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object, ...@@ -154,7 +156,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object,
GtkCellRenderer * GtkCellRenderer *
gtk_cell_renderer_pixbuf_new (void) gtk_cell_renderer_pixbuf_new (void)
{ {
return GTK_CELL_RENDERER (gtk_type_new (gtk_cell_renderer_pixbuf_get_type ())); return GTK_CELL_RENDERER (gtk_type_new (gtk_cell_renderer_pixbuf_get_type ()));
} }
static void static void
...@@ -163,15 +165,15 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell, ...@@ -163,15 +165,15 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell,
gint *width, gint *width,
gint *height) gint *height)
{ {
GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell; GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell;
if (width) if (width)
*width = (gint) GTK_CELL_RENDERER (cellpixbuf)->xpad * 2 + *width = (gint) GTK_CELL_RENDERER (cellpixbuf)->xpad * 2 +
(cellpixbuf->pixbuf ? gdk_pixbuf_get_width (cellpixbuf->pixbuf) : 0); (cellpixbuf->pixbuf ? gdk_pixbuf_get_width (cellpixbuf->pixbuf) : 0);
if (height) if (height)
*height = (gint) GTK_CELL_RENDERER (cellpixbuf)->ypad * 2 + *height = (gint) GTK_CELL_RENDERER (cellpixbuf)->ypad * 2 +
(cellpixbuf->pixbuf ? gdk_pixbuf_get_height (cellpixbuf->pixbuf) : 0); (cellpixbuf->pixbuf ? gdk_pixbuf_get_height (cellpixbuf->pixbuf) : 0);
} }
static void static void
...@@ -184,54 +186,45 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell, ...@@ -184,54 +186,45 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell,
guint flags) guint flags)
{ {
GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell; GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell;
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
guchar *pixels; guchar *pixels;
gint rowstride; gint rowstride;
gint real_xoffset; gint real_xoffset;
gint real_yoffset; gint real_yoffset;
GdkGC *bg_gc = NULL; GdkRectangle pix_rect;
GdkRectangle draw_rect;
pixbuf = cellpixbuf->pixbuf;
pixbuf = cellpixbuf->pixbuf;
if (!pixbuf)
return; if (!pixbuf)
return;
if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
bg_gc = widget->style->bg_gc [GTK_STATE_SELECTED]; rowstride = gdk_pixbuf_get_rowstride (pixbuf);
else pixels = gdk_pixbuf_get_pixels (pixbuf);
bg_gc = widget->style->base_gc [GTK_STATE_NORMAL];
real_xoffset = GTK_CELL_RENDERER (cellpixbuf)->xalign * (cell_area->width - gdk_pixbuf_get_width (pixbuf) - (2 * GTK_CELL_RENDERER (cellpixbuf)->xpad));
gdk_gc_set_clip_rectangle (bg_gc, cell_area); real_xoffset = MAX (real_xoffset, 0) + GTK_CELL_RENDERER (cellpixbuf)->xpad;
real_yoffset = GTK_CELL_RENDERER (cellpixbuf)->yalign * (cell_area->height - gdk_pixbuf_get_height (pixbuf) - (2 * GTK_CELL_RENDERER (cellpixbuf)->ypad));
rowstride = gdk_pixbuf_get_rowstride (pixbuf); real_yoffset = MAX (real_yoffset, 0) + GTK_CELL_RENDERER (cellpixbuf)->ypad;
pixels = gdk_pixbuf_get_pixels (pixbuf);
pix_rect.x = cell_area->x + real_xoffset;
real_xoffset = GTK_CELL_RENDERER (cellpixbuf)->xalign * (cell_area->width - gdk_pixbuf_get_width (pixbuf) - (2 * GTK_CELL_RENDERER (cellpixbuf)->xpad)); pix_rect.y = cell_area->y + real_yoffset;
real_xoffset = MAX (real_xoffset, 0) + GTK_CELL_RENDERER (cellpixbuf)->xpad; pix_rect.width = gdk_pixbuf_get_width (pixbuf);
real_yoffset = GTK_CELL_RENDERER (cellpixbuf)->yalign * (cell_area->height - gdk_pixbuf_get_height (pixbuf) - (2 * GTK_CELL_RENDERER (cellpixbuf)->ypad)); pix_rect.height = gdk_pixbuf_get_height (pixbuf);
real_yoffset = MAX (real_yoffset, 0) + GTK_CELL_RENDERER (cellpixbuf)->ypad;
if (gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect))
if (gdk_pixbuf_get_has_alpha (pixbuf)) gdk_pixbuf_render_to_drawable_alpha (pixbuf,
gdk_draw_rgb_32_image (window, window,
bg_gc, /* pixbuf 0, 0 is at pix_rect.x, pix_rect.y */
cell_area->x + real_xoffset, draw_rect.x - pix_rect.x,
cell_area->y + real_yoffset, draw_rect.y - pix_rect.y,
gdk_pixbuf_get_width (pixbuf), draw_rect.x,
gdk_pixbuf_get_height (pixbuf), draw_rect.y,
GDK_RGB_DITHER_NORMAL, draw_rect.width,
pixels, draw_rect.height,
rowstride); GDK_PIXBUF_ALPHA_FULL,
else 0,
gdk_draw_rgb_image (window, GDK_RGB_DITHER_NORMAL,
bg_gc, 0, 0);
cell_area->x + real_xoffset,
cell_area->y + real_yoffset,
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
GDK_RGB_DITHER_NORMAL,
pixels,
rowstride);
gdk_gc_set_clip_rectangle (bg_gc, NULL);
} }
...@@ -301,13 +301,17 @@ gtk_cell_renderer_text_pixbuf_get_size (GtkCellRenderer *cell, ...@@ -301,13 +301,17 @@ gtk_cell_renderer_text_pixbuf_get_size (GtkCellRenderer *cell,
if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT || if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT ||
celltextpixbuf->pixbuf_pos == GTK_POS_RIGHT) celltextpixbuf->pixbuf_pos == GTK_POS_RIGHT)
{ {
*width = pixbuf_width + text_width; if (width)
*height = MAX (pixbuf_height, text_height); *width = pixbuf_width + text_width;
if (height)
*height = MAX (pixbuf_height, text_height);
} }
else else
{ {
*width = MAX (pixbuf_width, text_width); if (width)
*height = pixbuf_height + text_height; *width = MAX (pixbuf_width, text_width);
if (height)
*height = pixbuf_height + text_height;
} }
} }
......
...@@ -37,7 +37,8 @@ typedef enum { ...@@ -37,7 +37,8 @@ typedef enum {
GTK_DEBUG_SIGNALS = 1 << 2, GTK_DEBUG_SIGNALS = 1 << 2,
GTK_DEBUG_DND = 1 << 3, GTK_DEBUG_DND = 1 << 3,
GTK_DEBUG_PLUGSOCKET = 1 << 4, GTK_DEBUG_PLUGSOCKET = 1 << 4,
GTK_DEBUG_TEXT = 1 << 5 GTK_DEBUG_TEXT = 1 << 5,
GTK_DEBUG_TREE = 1 << 6
} GtkDebugFlag; } GtkDebugFlag;
#ifdef G_ENABLE_DEBUG #ifdef G_ENABLE_DEBUG
......
...@@ -410,6 +410,8 @@ gtk_dialog_add_buttons_valist(GtkDialog *dialog, ...@@ -410,6 +410,8 @@ gtk_dialog_add_buttons_valist(GtkDialog *dialog,
const gchar* text; const gchar* text;
gint response_id; gint response_id;
g_return_if_fail (GTK_IS_DIALOG (dialog));
if (first_button_text == NULL) if (first_button_text == NULL)
return; return;
...@@ -443,8 +445,7 @@ void ...@@ -443,8 +445,7 @@ void
gtk_dialog_add_buttons (GtkDialog *dialog, gtk_dialog_add_buttons (GtkDialog *dialog,
const gchar *first_button_text, const gchar *first_button_text,
...) ...)
{ {
va_list args; va_list args;
va_start (args, first_button_text); va_start (args, first_button_text);
...@@ -456,6 +457,78 @@ gtk_dialog_add_buttons (GtkDialog *dialog, ...@@ -456,6 +457,78 @@ gtk_dialog_add_buttons (GtkDialog *dialog,
va_end (args); va_end (args);
} }
/**
* gtk_dialog_set_response_sensitive:
* @dialog: a #GtkDialog
* @response_id: a response ID
* @setting: %TRUE for sensitive
*
* Calls gtk_widget_set_sensitive (widget, @setting) for each
* widget in the dialog's action area with the given @response_id.
* A convenient way to sensitize/desensitize dialog buttons.
*
**/
void
gtk_dialog_set_response_sensitive (GtkDialog *dialog,
gint response_id,
gboolean setting)
{
GList *children;
GList *tmp_list;
children = gtk_container_children (GTK_CONTAINER (dialog));
tmp_list = children;
while (tmp_list != NULL)
{
GtkWidget *widget = tmp_list->data;
ResponseData *rd = g_object_get_data (G_OBJECT (widget),
"gtk-dialog-response-data");
if (rd && rd->response_id == response_id)
gtk_widget_set_sensitive (widget, setting);
tmp_list = g_list_next (tmp_list);
}
g_list_free (children);
}
/**
* gtk_dialog_set_default_response:
* @dialog: a #GtkDialog
* @response_id: a response ID
*
* Sets the last widget in the dialog's action area with the given @response_id
* as the default widget for the dialog. Pressing "Enter" normally activates
* the default widget.
*
**/
void
gtk_dialog_set_default_response (GtkDialog *dialog,
gint response_id)
{
GList *children;
GList *tmp_list;
children = gtk_container_children (GTK_CONTAINER (dialog));
tmp_list = children;
while (tmp_list != NULL)
{
GtkWidget *widget = tmp_list->data;
ResponseData *rd = g_object_get_data (G_OBJECT (widget),
"gtk-dialog-response-data");
if (rd && rd->response_id == response_id)
gtk_widget_grab_default (widget);
tmp_list = g_list_next (tmp_list);
}
g_list_free (children);
}
/** /**
* gtk_dialog_response: * gtk_dialog_response:
* @dialog: a #GtkDialog * @dialog: a #GtkDialog
...@@ -488,12 +561,8 @@ typedef struct ...@@ -488,12 +561,8 @@ typedef struct
static void static void
shutdown_loop (RunInfo *ri) shutdown_loop (RunInfo *ri)
{ {
if (ri->loop != NULL) if (g_main_loop_is_running (ri->loop))
{ g_main_loop_quit (ri->loop);
g_main_quit (ri->loop);
g_main_destroy (ri->loop);
ri->loop = NULL;
}
} }
static void static void
...@@ -615,9 +684,11 @@ gtk_dialog_run (GtkDialog *dialog) ...@@ -615,9 +684,11 @@ gtk_dialog_run (GtkDialog *dialog)
ri.loop = g_main_new (FALSE); ri.loop = g_main_new (FALSE);
g_main_run (ri.loop); g_main_loop_run (ri.loop);
g_assert (ri.loop == NULL); g_main_loop_unref (ri.loop);