refuse to allocate with a greater height than requested.

Sat Mar 14 08:29:56 1998  Tim Janik  <timj@gimp.org>

        * gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
                with a greater height than requested.
                        (gtk_handle_box_remove): clean up if the child is detached.

                                * gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
                                        children into account.
This commit is contained in:
Tim Janik 1998-03-14 08:15:23 +00:00 committed by Tim Janik
parent b8e7ea1f11
commit c86bf9bae2
10 changed files with 129 additions and 14 deletions

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -1,3 +1,12 @@
Sat Mar 14 08:29:56 1998 Tim Janik <timj@gimp.org>
* gtk/gtkhandlebox.c (gtk_handle_box_size_allocate): refuse to allocate
with a greater height than requested.
(gtk_handle_box_remove): clean up if the child is detached.
* gtk/gtktoolbar.c (gtk_toolbar_size_allocate): don't take invisible
children into account.
Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu> Sat Mar 14 02:12:44 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv. * gtk/gtkmain.c gdk/gdk.c: Don't leave NULL's in argv.

View File

@ -29,7 +29,7 @@
#define DRAG_HANDLE_SIZE 10 #define DRAG_HANDLE_SIZE 10
#define BORDER_SIZE 5 #define BORDER_SIZE 5
#define GHOST_HEIGHT 3 #define GHOST_HEIGHT 3
#define SNAP_TOLERANCE 10 #define SNAP_TOLERANCE 16
enum enum
{ {
@ -52,7 +52,9 @@ static void gtk_handle_box_unrealize (GtkWidget *widget);
static void gtk_handle_box_size_request (GtkWidget *widget, static void gtk_handle_box_size_request (GtkWidget *widget,
GtkRequisition *requisition); GtkRequisition *requisition);
static void gtk_handle_box_size_allocate (GtkWidget *widget, static void gtk_handle_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation); GtkAllocation *real_allocation);
static void gtk_handle_box_remove (GtkContainer *container,
GtkWidget *widget);
static void gtk_handle_box_draw_ghost (GtkWidget *widget); static void gtk_handle_box_draw_ghost (GtkWidget *widget);
static void gtk_handle_box_paint (GtkWidget *widget, static void gtk_handle_box_paint (GtkWidget *widget,
GdkEventExpose *event, GdkEventExpose *event,
@ -114,11 +116,13 @@ gtk_handle_box_marshal_child_attached (GtkObject *object,
static void static void
gtk_handle_box_class_init (GtkHandleBoxClass *class) gtk_handle_box_class_init (GtkHandleBoxClass *class)
{ {
GtkWidgetClass *widget_class;
GtkObjectClass *object_class; GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkContainerClass *container_class;
object_class = (GtkObjectClass *) class; object_class = (GtkObjectClass *) class;
widget_class = (GtkWidgetClass *) class; widget_class = (GtkWidgetClass *) class;
container_class = (GtkContainerClass *) class;
parent_class = gtk_type_class (gtk_bin_get_type ()); parent_class = gtk_type_class (gtk_bin_get_type ());
@ -154,6 +158,8 @@ gtk_handle_box_class_init (GtkHandleBoxClass *class)
widget_class->button_release_event = gtk_handle_box_button_changed; widget_class->button_release_event = gtk_handle_box_button_changed;
widget_class->motion_notify_event = gtk_handle_box_motion; widget_class->motion_notify_event = gtk_handle_box_motion;
container_class->remove = gtk_handle_box_remove;
class->child_attached = NULL; class->child_attached = NULL;
class->child_detached = NULL; class->child_detached = NULL;
} }
@ -349,21 +355,33 @@ gtk_handle_box_size_request (GtkWidget *widget,
static void static void
gtk_handle_box_size_allocate (GtkWidget *widget, gtk_handle_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation) GtkAllocation *real_allocation)
{ {
GtkBin *bin; GtkBin *bin;
GtkAllocation child_allocation; GtkAllocation *allocation;
GtkHandleBox *hb; GtkHandleBox *hb;
gint border_width; gint border_width;
g_return_if_fail (widget != NULL); g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_HANDLE_BOX (widget)); g_return_if_fail (GTK_IS_HANDLE_BOX (widget));
g_return_if_fail (allocation != NULL); g_return_if_fail (real_allocation != NULL);
widget->allocation = *allocation;
bin = GTK_BIN (widget); bin = GTK_BIN (widget);
hb = GTK_HANDLE_BOX (widget); hb = GTK_HANDLE_BOX (widget);
allocation = &widget->allocation;
allocation->x = real_allocation->x;
if (real_allocation->height > widget->requisition.height)
allocation->y = real_allocation->y + (real_allocation->height - widget->requisition.height) / 2;
else
allocation->y = real_allocation->y;
allocation->height = MIN (real_allocation->height, widget->requisition.height);
allocation->width = real_allocation->width;
/* this will refuse to allocate width greater than neccessary:
* allocation->width = MIN (real_allocation->width, widget->requisition.width);
*/
border_width = GTK_CONTAINER (widget)->border_width; border_width = GTK_CONTAINER (widget)->border_width;
if (GTK_WIDGET_REALIZED (widget)) if (GTK_WIDGET_REALIZED (widget))
@ -399,6 +417,8 @@ gtk_handle_box_size_allocate (GtkWidget *widget,
if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
{ {
GtkAllocation child_allocation;
child_allocation.x = DRAG_HANDLE_SIZE; child_allocation.x = DRAG_HANDLE_SIZE;
child_allocation.y = 0; child_allocation.y = 0;
@ -417,6 +437,34 @@ gtk_handle_box_size_allocate (GtkWidget *widget,
} }
} }
static void
gtk_handle_box_remove (GtkContainer *container,
GtkWidget *widget)
{
GtkHandleBox *hb;
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_HANDLE_BOX (container));
g_return_if_fail (widget != NULL);
hb = GTK_HANDLE_BOX (container);
if (widget == GTK_BIN (container)->child &&
GTK_WIDGET_REALIZED (hb) &&
hb->is_onroot)
{
hb->is_onroot = FALSE;
gdk_pointer_ungrab (GDK_CURRENT_TIME);
gdk_window_reparent (widget->window, hb->steady_window, 0, 0);
gtk_widget_hide (hb->float_window);
}
GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
}
static void static void
gtk_handle_box_draw_ghost (GtkWidget *widget) gtk_handle_box_draw_ghost (GtkWidget *widget)
{ {

View File

@ -101,7 +101,7 @@ gtk_object_debug_foreach (gpointer key, gpointer value, gpointer user_data)
GtkObject *object; GtkObject *object;
object = (GtkObject*) value; object = (GtkObject*) value;
g_print ("%p: %s ref_count=%d%s%s\n", g_print ("GTK-DEBUG: %p: %s ref_count=%d%s%s\n",
object, object,
gtk_type_name (GTK_OBJECT_TYPE (object)), gtk_type_name (GTK_OBJECT_TYPE (object)),
object->ref_count, object->ref_count,
@ -113,7 +113,7 @@ gtk_object_debug (void)
{ {
g_hash_table_foreach (living_objs_ht, gtk_object_debug_foreach, NULL); g_hash_table_foreach (living_objs_ht, gtk_object_debug_foreach, NULL);
g_print ("living objects count = %d\n", obj_count); g_print ("GTK-DEBUG: living objects count = %d\n", obj_count);
} }
static guint static guint
gtk_object_pointer_hash (const gpointer v) gtk_object_pointer_hash (const gpointer v)

View File

@ -453,6 +453,8 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
case GTK_TOOLBAR_CHILD_BUTTON: case GTK_TOOLBAR_CHILD_BUTTON:
case GTK_TOOLBAR_CHILD_RADIOBUTTON: case GTK_TOOLBAR_CHILD_RADIOBUTTON:
case GTK_TOOLBAR_CHILD_TOGGLEBUTTON: case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
if (!GTK_WIDGET_VISIBLE (child->widget))
break;
alloc.width = toolbar->button_maxw; alloc.width = toolbar->button_maxw;
alloc.height = toolbar->button_maxh; alloc.height = toolbar->button_maxh;
@ -471,6 +473,8 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
break; break;
case GTK_TOOLBAR_CHILD_WIDGET: case GTK_TOOLBAR_CHILD_WIDGET:
if (!GTK_WIDGET_VISIBLE (child->widget))
break;
alloc.width = child->widget->requisition.width; alloc.width = child->widget->requisition.width;
alloc.height = child->widget->requisition.height; alloc.height = child->widget->requisition.height;