fail silently for toplevels. if resize_mode changes to GTK_RESIZE_PARENT,

Fri Jun 19 06:18:19 1998  Tim Janik  <timj@gtk.org>

        * gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
        for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
        resize widget list before queuing the container for a new reize.
        (gtk_container_need_resize): changed return value to FALSE, since this
        used to indicate that no further resizes are needed.
        (gtk_container_set_arg):
        (gtk_container_get_arg):
        (gtk_container_class_init): implemented GtkContainer::resize_mode
        argument.

        (gtk_container_resize_children): when we walk up the tree of a resize
        widget we need to stop if we are the current parent.

        * gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
        GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
        (gtk_widget_hide_all): retrive the toplevel widget from via
        gtk_widget_get_resize_container().
This commit is contained in:
Tim Janik 1998-06-19 06:56:15 +00:00 committed by Tim Janik
parent 5c5a45f9b0
commit 5c68ecbc0f
10 changed files with 195 additions and 35 deletions

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,3 +1,23 @@
Fri Jun 19 06:18:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.c (gtk_container_set_resize_mode): fail silently
for toplevels. if resize_mode changes to GTK_RESIZE_PARENT, clear the
resize widget list before queuing the container for a new reize.
(gtk_container_need_resize): changed return value to FALSE, since this
used to indicate that no further resizes are needed.
(gtk_container_set_arg):
(gtk_container_get_arg):
(gtk_container_class_init): implemented GtkContainer::resize_mode
argument.
(gtk_container_resize_children): when we walk up the tree of a resize
widget we need to stop if we are the current parent.
* gtk/gtkwidget.c (gtk_widget_queue_resize): flag the resize child with
GTK_RESIZE_NEEDED for container->resize_mode==GTK_RESIZE_IMMEDIATE.
(gtk_widget_hide_all): retrive the toplevel widget from via
gtk_widget_get_resize_container().
Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org> Thu Jun 18 23:08:36 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtklist.c (gtk_list_button_press): Only respond * gtk/gtklist.c (gtk_list_button_press): Only respond

View File

@ -1,7 +1,7 @@
;; generated by makeenums.pl ; -*- scheme -*- ;; generated by makeenums.pl ; -*- scheme -*-
; enumerations from "../../gtk+/gtk/gtkclist.h" ; enumerations from "./gtkclist.h"
(define-enum GtkCellType (define-enum GtkCellType
(empty GTK_CELL_EMPTY) (empty GTK_CELL_EMPTY)
@ -10,7 +10,7 @@
(pixtext GTK_CELL_PIXTEXT) (pixtext GTK_CELL_PIXTEXT)
(widget GTK_CELL_WIDGET)) (widget GTK_CELL_WIDGET))
; enumerations from "../../gtk+/gtk/gtkctree.h" ; enumerations from "./gtkctree.h"
(define-enum GtkCTreePos (define-enum GtkCTreePos
(before GTK_CTREE_POS_BEFORE) (before GTK_CTREE_POS_BEFORE)
@ -22,14 +22,14 @@
(dotted GTK_CTREE_LINES_DOTTED) (dotted GTK_CTREE_LINES_DOTTED)
(none GTK_CTREE_LINES_NONE)) (none GTK_CTREE_LINES_NONE))
; enumerations from "../../gtk+/gtk/gtkdebug.h" ; enumerations from "./gtkdebug.h"
(define-flags GtkDebugFlag (define-flags GtkDebugFlag
(objects GTK_DEBUG_OBJECTS) (objects GTK_DEBUG_OBJECTS)
(misc GTK_DEBUG_MISC) (misc GTK_DEBUG_MISC)
(signals GTK_DEBUG_SIGNALS)) (signals GTK_DEBUG_SIGNALS))
; enumerations from "../../gtk+/gtk/gtkenums.h" ; enumerations from "./gtkenums.h"
(define-flags GtkAccelFlags (define-flags GtkAccelFlags
(visible GTK_ACCEL_VISIBLE) (visible GTK_ACCEL_VISIBLE)
@ -211,13 +211,13 @@
(dialog GTK_WINDOW_DIALOG) (dialog GTK_WINDOW_DIALOG)
(popup GTK_WINDOW_POPUP)) (popup GTK_WINDOW_POPUP))
; enumerations from "../../gtk+/gtk/gtkfontsel.h" ; enumerations from "./gtkfontsel.h"
(define-enum GtkFontMetricType (define-enum GtkFontMetricType
(ixels-metric PIXELS_METRIC) (ixels-metric PIXELS_METRIC)
(oints-metric POINTS_METRIC)) (oints-metric POINTS_METRIC))
; enumerations from "../../gtk+/gtk/gtkobject.h" ; enumerations from "./gtkobject.h"
(define-flags GtkObjectFlags (define-flags GtkObjectFlags
(destroyed GTK_DESTROYED) (destroyed GTK_DESTROYED)
@ -234,7 +234,7 @@
(mask GTK_ARG_MASK) (mask GTK_ARG_MASK)
(readwrite GTK_ARG_READWRITE)) (readwrite GTK_ARG_READWRITE))
; enumerations from "../../gtk+/gtk/gtkpacker.h" ; enumerations from "./gtkpacker.h"
(define-flags GtkPackerOptions (define-flags GtkPackerOptions
(expand GTK_PACK_EXPAND) (expand GTK_PACK_EXPAND)
@ -266,7 +266,7 @@
(w GTK_ANCHOR_W) (w GTK_ANCHOR_W)
(e GTK_ANCHOR_E)) (e GTK_ANCHOR_E))
; enumerations from "../../gtk+/gtk/gtkprivate.h" ; enumerations from "./gtkprivate.h"
(define-flags GtkPrivateFlags (define-flags GtkPrivateFlags
(user-style PRIVATE_GTK_USER_STYLE) (user-style PRIVATE_GTK_USER_STYLE)
@ -277,13 +277,13 @@
(has-shape-mask PRIVATE_GTK_HAS_SHAPE_MASK) (has-shape-mask PRIVATE_GTK_HAS_SHAPE_MASK)
(in-reparent PRIVATE_GTK_IN_REPARENT)) (in-reparent PRIVATE_GTK_IN_REPARENT))
; enumerations from "../../gtk+/gtk/gtkspinbutton.h" ; enumerations from "./gtkspinbutton.h"
(define-enum GtkSpinButtonUpdatePolicy (define-enum GtkSpinButtonUpdatePolicy
(always GTK_UPDATE_ALWAYS) (always GTK_UPDATE_ALWAYS)
(if-valid GTK_UPDATE_IF_VALID)) (if-valid GTK_UPDATE_IF_VALID))
; enumerations from "../../gtk+/gtk/gtktoolbar.h" ; enumerations from "./gtktoolbar.h"
(define-enum GtkToolbarChildType (define-enum GtkToolbarChildType
(space GTK_TOOLBAR_CHILD_SPACE) (space GTK_TOOLBAR_CHILD_SPACE)
@ -292,13 +292,13 @@
(radiobutton GTK_TOOLBAR_CHILD_RADIOBUTTON) (radiobutton GTK_TOOLBAR_CHILD_RADIOBUTTON)
(widget GTK_TOOLBAR_CHILD_WIDGET)) (widget GTK_TOOLBAR_CHILD_WIDGET))
; enumerations from "../../gtk+/gtk/gtktree.h" ; enumerations from "./gtktree.h"
(define-enum GtkTreeViewMode (define-enum GtkTreeViewMode
(line GTK_TREE_VIEW_LINE) (line GTK_TREE_VIEW_LINE)
(item GTK_TREE_VIEW_ITEM)) (item GTK_TREE_VIEW_ITEM))
; enumerations from "../../gtk+/gtk/gtktypeutils.h" ; enumerations from "./gtktypeutils.h"
(define-enum GtkFundamentalType (define-enum GtkFundamentalType
(invalid GTK_TYPE_INVALID) (invalid GTK_TYPE_INVALID)
@ -323,7 +323,7 @@
(c-callback GTK_TYPE_C_CALLBACK) (c-callback GTK_TYPE_C_CALLBACK)
(object GTK_TYPE_OBJECT)) (object GTK_TYPE_OBJECT))
; enumerations from "../../gtk+/gtk/gtkwidget.h" ; enumerations from "./gtkwidget.h"
(define-flags GtkWidgetFlags (define-flags GtkWidgetFlags
(toplevel GTK_TOPLEVEL) (toplevel GTK_TOPLEVEL)
@ -341,7 +341,7 @@
(rc-style GTK_RC_STYLE) (rc-style GTK_RC_STYLE)
(basic GTK_BASIC)) (basic GTK_BASIC))
; enumerations from "../../gtk+/gdk/gdkprivate.h" ; enumerations from "../gdk/gdkprivate.h"
(define-flags GdkDebugFlag (define-flags GdkDebugFlag
(misc GDK_DEBUG_MISC) (misc GDK_DEBUG_MISC)
@ -350,7 +350,7 @@
(color-context GDK_DEBUG_COLOR_CONTEXT) (color-context GDK_DEBUG_COLOR_CONTEXT)
(xim GDK_DEBUG_XIM)) (xim GDK_DEBUG_XIM))
; enumerations from "../../gtk+/gdk/gdktypes.h" ; enumerations from "../gdk/gdktypes.h"
(define-enum GdkWindowType (define-enum GdkWindowType
(root GDK_WINDOW_ROOT) (root GDK_WINDOW_ROOT)

View File

@ -35,6 +35,7 @@ enum {
enum { enum {
ARG_0, ARG_0,
ARG_BORDER_WIDTH, ARG_BORDER_WIDTH,
ARG_RESIZE_MODE,
ARG_CHILD ARG_CHILD
}; };
@ -168,6 +169,7 @@ gtk_container_class_init (GtkContainerClass *class)
hadjustment_key_id = g_quark_from_static_string (hadjustment_key); hadjustment_key_id = g_quark_from_static_string (hadjustment_key);
gtk_object_add_arg_type ("GtkContainer::border_width", GTK_TYPE_ULONG, GTK_ARG_READWRITE, ARG_BORDER_WIDTH); gtk_object_add_arg_type ("GtkContainer::border_width", GTK_TYPE_ULONG, GTK_ARG_READWRITE, ARG_BORDER_WIDTH);
gtk_object_add_arg_type ("GtkContainer::resize_mode", GTK_TYPE_RESIZE_MODE, GTK_ARG_READWRITE, ARG_RESIZE_MODE);
gtk_object_add_arg_type ("GtkContainer::child", GTK_TYPE_WIDGET, GTK_ARG_WRITABLE, ARG_CHILD); gtk_object_add_arg_type ("GtkContainer::child", GTK_TYPE_WIDGET, GTK_ARG_WRITABLE, ARG_CHILD);
container_signals[ADD] = container_signals[ADD] =
@ -697,6 +699,9 @@ gtk_container_set_arg (GtkContainer *container,
case ARG_BORDER_WIDTH: case ARG_BORDER_WIDTH:
gtk_container_border_width (container, GTK_VALUE_ULONG (*arg)); gtk_container_border_width (container, GTK_VALUE_ULONG (*arg));
break; break;
case ARG_RESIZE_MODE:
gtk_container_set_resize_mode (container, GTK_VALUE_ENUM (*arg));
break;
case ARG_CHILD: case ARG_CHILD:
gtk_container_add (container, GTK_WIDGET (GTK_VALUE_OBJECT (*arg))); gtk_container_add (container, GTK_WIDGET (GTK_VALUE_OBJECT (*arg)));
break; break;
@ -715,6 +720,9 @@ gtk_container_get_arg (GtkContainer *container,
case ARG_BORDER_WIDTH: case ARG_BORDER_WIDTH:
GTK_VALUE_ULONG (*arg) = container->border_width; GTK_VALUE_ULONG (*arg) = container->border_width;
break; break;
case ARG_RESIZE_MODE:
GTK_VALUE_ENUM (*arg) = container->resize_mode;
break;
default: default:
arg->type = GTK_TYPE_INVALID; arg->type = GTK_TYPE_INVALID;
break; break;
@ -819,9 +827,14 @@ gtk_container_set_resize_mode (GtkContainer *container,
{ {
g_return_if_fail (container != NULL); g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_CONTAINER (container)); g_return_if_fail (GTK_IS_CONTAINER (container));
g_return_if_fail (!(GTK_WIDGET_TOPLEVEL (container) && g_return_if_fail (resize_mode <= GTK_RESIZE_IMMEDIATE);
resize_mode == GTK_RESIZE_PARENT));
if (GTK_WIDGET_TOPLEVEL (container) &&
resize_mode == GTK_RESIZE_PARENT)
resize_mode = GTK_RESIZE_QUEUE;
if (container->resize_mode != resize_mode)
{
container->resize_mode = resize_mode; container->resize_mode = resize_mode;
if (container->resize_widgets != NULL) if (container->resize_widgets != NULL)
@ -830,8 +843,9 @@ gtk_container_set_resize_mode (GtkContainer *container,
gtk_container_check_resize (container); gtk_container_check_resize (container);
else if (resize_mode == GTK_RESIZE_PARENT) else if (resize_mode == GTK_RESIZE_PARENT)
{ {
gtk_container_clear_resize_widgets (container);
gtk_widget_queue_resize (GTK_WIDGET (container)); gtk_widget_queue_resize (GTK_WIDGET (container));
container->resize_widgets = NULL; }
} }
} }
} }
@ -849,7 +863,7 @@ gint
gtk_container_need_resize (GtkContainer *container) gtk_container_need_resize (GtkContainer *container)
{ {
gtk_container_check_resize (container); gtk_container_check_resize (container);
return TRUE; return FALSE;
} }
static void static void
@ -876,7 +890,7 @@ gtk_container_real_check_resize (GtkContainer *container)
} }
} }
/* The window hasn't changed size but one of its children /* The container hasn't changed size but one of its children
* queued a resize request. Which means that the allocation * queued a resize request. Which means that the allocation
* is not sufficient for the requisition of some child. * is not sufficient for the requisition of some child.
* We've already performed a size request at this point, * We've already performed a size request at this point,
@ -895,12 +909,12 @@ gtk_container_resize_children (GtkContainer *container)
GSList *resize_containers; GSList *resize_containers;
GSList *node; GSList *node;
resize_widgets = container->resize_widgets;
container->resize_widgets = NULL;
g_return_if_fail (container != NULL); g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_CONTAINER (container)); g_return_if_fail (GTK_IS_CONTAINER (container));
resize_widgets = container->resize_widgets;
container->resize_widgets = NULL;
for (node = resize_widgets; node; node = node->next) for (node = resize_widgets; node; node = node->next)
{ {
widget = node->data; widget = node->data;

View File

@ -1421,7 +1421,7 @@ gtk_widget_hide_all (GtkWidget *widget)
{ {
GtkWidget *toplevel; GtkWidget *toplevel;
toplevel = gtk_widget_get_toplevel (widget); toplevel = gtk_widget_get_resize_container (widget);
GTK_CONTAINER (toplevel)->resize_widgets = GTK_CONTAINER (toplevel)->resize_widgets =
g_slist_remove (GTK_CONTAINER (toplevel)->resize_widgets, widget); g_slist_remove (GTK_CONTAINER (toplevel)->resize_widgets, widget);
GTK_PRIVATE_UNSET_FLAG (widget, GTK_RESIZE_NEEDED); GTK_PRIVATE_UNSET_FLAG (widget, GTK_RESIZE_NEEDED);
@ -1675,11 +1675,17 @@ gtk_widget_queue_resize (GtkWidget *widget)
break; break;
case GTK_RESIZE_IMMEDIATE: case GTK_RESIZE_IMMEDIATE:
if (!GTK_WIDGET_RESIZE_NEEDED (widget))
{
GTK_PRIVATE_SET_FLAG (widget, GTK_RESIZE_NEEDED);
container->resize_widgets = container->resize_widgets =
g_slist_prepend (container->resize_widgets, widget); g_slist_prepend (container->resize_widgets, widget);
gtk_container_check_resize (container); gtk_container_check_resize (container);
}
break;
case GTK_RESIZE_PARENT: case GTK_RESIZE_PARENT:
/* Ignore */ /* Ignore */
break;
} }
} }
else else