summaryrefslogtreecommitdiff
path: root/gtk/gtkscrolledwindow.c
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>1998-07-16 02:47:15 +0000
committerTim Janik <timj@src.gnome.org>1998-07-16 02:47:15 +0000
commitaf24aef782056e52eb4d39c2880da648578c2728 (patch)
tree14e2d310c6aae8e7b23b1f343018e277665d1436 /gtk/gtkscrolledwindow.c
parent8b9b7b9d04c1f11118f28a9ec7b4c65a7a3f967c (diff)
downloadgtk+-af24aef782056e52eb4d39c2880da648578c2728.tar.gz
handle negative values similar to gtk_widget_set_uposition(). that is:
Thu Jul 16 01:27:15 1998 Tim Janik <timj@gtk.org> * gtk/gtkwidget.h: * gtk/gtkwidget.c (gtk_widget_set_usize): handle negative values similar to gtk_widget_set_uposition(). that is: -1=unspecified, -2=leave untouched. changed the width/height field of GtkWidgetAuxInfo to be gint16s rather than guint16s, since that's what the code expected (for a long time actually). * gtk/gtkviewport.c: added support for object arguments: GtkViewport::shadow_type, GtkViewport::vadjustment and GtkViewport::hadjustment. (gtk_viewport_add): chain gtk_bin_add. * gtk/gtkscrolledwindow.c: added support for object argument: GtkScrolledWindow::hscrollbar_policy, GtkScrolledWindow::vscrollbar_policy and GtkScrolledWindow::viewport. * gtk/gtkadjustment.h: * gtk/gtkadjustment.c: * gtk/gtkctree.h: * gtk/gtkclist.h: * gtk/gtkctree.c: * gtk/gtkclist.c: * gtk/gtkscrolledwindow.h: * gtk/gtkscrolledwindow.c: * gtk/gtkviewport.h: * gtk/gtkviewport.c: GtkType and macro fixups.
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r--gtk/gtkscrolledwindow.c111
1 files changed, 102 insertions, 9 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 82fb86d64e..eddc77831c 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -22,9 +22,22 @@
#define SCROLLBAR_SPACING(w) (GTK_SCROLLED_WINDOW_CLASS (GTK_OBJECT (w)->klass)->scrollbar_spacing)
+enum {
+ ARG_0,
+ ARG_VIEWPORT,
+ ARG_HSCROLLBAR_POLICY,
+ ARG_VSCROLLBAR_POLICY
+};
+
static void gtk_scrolled_window_class_init (GtkScrolledWindowClass *klass);
static void gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window);
+static void gtk_scrolled_window_set_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id);
+static void gtk_scrolled_window_get_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id);
static void gtk_scrolled_window_destroy (GtkObject *object);
static void gtk_scrolled_window_finalize (GtkObject *object);
static void gtk_scrolled_window_map (GtkWidget *widget);
@@ -51,10 +64,10 @@ static void gtk_scrolled_window_adjustment_changed (GtkAdjustment *adju
static GtkContainerClass *parent_class = NULL;
-guint
+GtkType
gtk_scrolled_window_get_type (void)
{
- static guint scrolled_window_type = 0;
+ static GtkType scrolled_window_type = 0;
if (!scrolled_window_type)
{
@@ -70,7 +83,7 @@ gtk_scrolled_window_get_type (void)
(GtkClassInitFunc) NULL,
};
- scrolled_window_type = gtk_type_unique (gtk_container_get_type (), &scrolled_window_info);
+ scrolled_window_type = gtk_type_unique (GTK_TYPE_CONTAINER, &scrolled_window_info);
}
return scrolled_window_type;
@@ -86,9 +99,23 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
container_class = (GtkContainerClass*) class;
-
- parent_class = gtk_type_class (gtk_container_get_type ());
-
+ parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+
+ gtk_object_add_arg_type ("GtkScrolledWindow::viewport",
+ GTK_TYPE_VIEWPORT,
+ GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT,
+ ARG_VIEWPORT);
+ gtk_object_add_arg_type ("GtkScrolledWindow::hscrollbar_policy",
+ GTK_TYPE_POLICY_TYPE,
+ GTK_ARG_READWRITE,
+ ARG_HSCROLLBAR_POLICY);
+ gtk_object_add_arg_type ("GtkScrolledWindow::vscrollbar_policy",
+ GTK_TYPE_POLICY_TYPE,
+ GTK_ARG_READWRITE,
+ ARG_VSCROLLBAR_POLICY);
+
+ object_class->set_arg = gtk_scrolled_window_set_arg;
+ object_class->get_arg = gtk_scrolled_window_get_arg;
object_class->destroy = gtk_scrolled_window_destroy;
object_class->finalize = gtk_scrolled_window_finalize;
@@ -106,6 +133,67 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
}
static void
+gtk_scrolled_window_set_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id)
+{
+ GtkScrolledWindow *scrolled_window;
+
+ scrolled_window = GTK_SCROLLED_WINDOW (object);
+
+ switch (arg_id)
+ {
+ GtkWidget *viewport;
+
+ case ARG_VIEWPORT:
+ g_return_if_fail (scrolled_window->viewport == NULL);
+ viewport = GTK_VALUE_POINTER (*arg);
+ if (!viewport)
+ viewport = gtk_viewport_new (NULL, NULL);
+ scrolled_window->viewport = viewport;
+ gtk_scrolled_window_construct (scrolled_window, NULL, NULL);
+ case ARG_HSCROLLBAR_POLICY:
+ gtk_scrolled_window_set_policy (scrolled_window,
+ GTK_VALUE_ENUM (*arg),
+ scrolled_window->vscrollbar_policy);
+ break;
+ case ARG_VSCROLLBAR_POLICY:
+ gtk_scrolled_window_set_policy (scrolled_window,
+ scrolled_window->hscrollbar_policy,
+ GTK_VALUE_ENUM (*arg));
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gtk_scrolled_window_get_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id)
+{
+ GtkScrolledWindow *scrolled_window;
+
+ scrolled_window = GTK_SCROLLED_WINDOW (object);
+
+ switch (arg_id)
+ {
+ case ARG_VIEWPORT:
+ GTK_VALUE_POINTER (*arg) = scrolled_window->viewport;
+ break;
+ case ARG_HSCROLLBAR_POLICY:
+ GTK_VALUE_ENUM (*arg) = scrolled_window->hscrollbar_policy;
+ break;
+ case ARG_VSCROLLBAR_POLICY:
+ GTK_VALUE_ENUM (*arg) = scrolled_window->vscrollbar_policy;
+ break;
+ default:
+ arg->type = GTK_TYPE_INVALID;
+ break;
+ }
+}
+
+static void
gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
{
GTK_WIDGET_SET_FLAGS (scrolled_window, GTK_NO_WINDOW);
@@ -124,7 +212,7 @@ gtk_scrolled_window_new (GtkAdjustment *hadjustment,
{
GtkWidget *scrolled_window;
- scrolled_window = gtk_type_new (gtk_scrolled_window_get_type ());
+ scrolled_window = gtk_type_new (GTK_TYPE_SCROLLED_WINDOW);
gtk_scrolled_window_construct (GTK_SCROLLED_WINDOW (scrolled_window), hadjustment, vadjustment);
@@ -138,9 +226,14 @@ gtk_scrolled_window_construct (GtkScrolledWindow *scrolled_window,
{
g_return_if_fail (scrolled_window != NULL);
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
- g_return_if_fail (scrolled_window->viewport == NULL);
+ g_return_if_fail (scrolled_window->hscrollbar == NULL);
+ g_return_if_fail (scrolled_window->vscrollbar == NULL);
+
+ if (scrolled_window->viewport)
+ g_return_if_fail (hadjustment == NULL && vadjustment == NULL);
+ else
+ scrolled_window->viewport = gtk_viewport_new (hadjustment, vadjustment);
- scrolled_window->viewport = gtk_viewport_new (hadjustment, vadjustment);
hadjustment = gtk_viewport_get_hadjustment (GTK_VIEWPORT (scrolled_window->viewport));
vadjustment = gtk_viewport_get_vadjustment (GTK_VIEWPORT (scrolled_window->viewport));
gtk_container_set_resize_mode (GTK_CONTAINER (scrolled_window->viewport), GTK_RESIZE_PARENT);