]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkviewport.c
Include "." and ".." in the list of entries; they are needed for correct
[~andy/gtk] / gtk / gtkviewport.c
index 4ab5c7afb153b0d822eb57a3cf469044bdc1add8..bfe955eab1d662f1624d0029068d64f4a0eb95f7 100644 (file)
@@ -24,9 +24,9 @@
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  */
 
-#include "gtksignal.h"
 #include "gtkviewport.h"
 #include "gtkintl.h"
+#include "gtkmarshalers.h"
 
 enum {
   PROP_0,
@@ -71,26 +71,28 @@ static void gtk_viewport_style_set                (GtkWidget *widget,
 
 static GtkBinClass *parent_class;
 
-GtkType
+GType
 gtk_viewport_get_type (void)
 {
-  static GtkType viewport_type = 0;
+  static GType viewport_type = 0;
 
   if (!viewport_type)
     {
-      static const GtkTypeInfo viewport_info =
+      static const GTypeInfo viewport_info =
       {
-       "GtkViewport",
-       sizeof (GtkViewport),
        sizeof (GtkViewportClass),
-       (GtkClassInitFunc) gtk_viewport_class_init,
-       (GtkObjectInitFunc) gtk_viewport_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
+       NULL,           /* base_init */
+       NULL,           /* base_finalize */
+       (GClassInitFunc) gtk_viewport_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (GtkViewport),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) gtk_viewport_init,
       };
 
-      viewport_type = gtk_type_unique (GTK_TYPE_BIN, &viewport_info);
+      viewport_type = g_type_register_static (GTK_TYPE_BIN, "GtkViewport",
+                                             &viewport_info, 0);
     }
 
   return viewport_type;
@@ -108,7 +110,8 @@ gtk_viewport_class_init (GtkViewportClass *class)
   gobject_class = G_OBJECT_CLASS (class);
   widget_class = (GtkWidgetClass*) class;
   container_class = (GtkContainerClass*) class;
-  parent_class = (GtkBinClass*) gtk_type_class (GTK_TYPE_BIN);
+
+  parent_class = g_type_class_peek_parent (class);
 
   gobject_class->set_property = gtk_viewport_set_property;
   gobject_class->get_property = gtk_viewport_get_property;
@@ -129,7 +132,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
                                    PROP_HADJUSTMENT,
                                    g_param_spec_object ("hadjustment",
                                                        _("Horizontal adjustment"),
-                                                       _("The GtkAdjustment that determines the values of the horizontal position for this viewport."),
+                                                       _("The GtkAdjustment that determines the values of the horizontal position for this viewport"),
                                                         GTK_TYPE_ADJUSTMENT,
                                                         G_PARAM_READWRITE));
 
@@ -137,7 +140,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
                                    PROP_VADJUSTMENT,
                                    g_param_spec_object ("vadjustment",
                                                        _("Vertical adjustment"),
-                                                       _("The GtkAdjustment that determines the values of the vertical position for this viewport."),
+                                                       _("The GtkAdjustment that determines the values of the vertical position for this viewport"),
                                                         GTK_TYPE_ADJUSTMENT,
                                                         G_PARAM_READWRITE));
 
@@ -145,18 +148,21 @@ gtk_viewport_class_init (GtkViewportClass *class)
                                    PROP_SHADOW_TYPE,
                                    g_param_spec_enum ("shadow_type",
                                                      _("Shadow type"),
-                                                     _("Determines how the shadowed box around the viewport is drawn."),
+                                                     _("Determines how the shadowed box around the viewport is drawn"),
                                                      GTK_TYPE_SHADOW_TYPE,
                                                      GTK_SHADOW_IN,
                                                      G_PARAM_READWRITE));
 
   widget_class->set_scroll_adjustments_signal =
-    gtk_signal_new ("set_scroll_adjustments",
-                   GTK_RUN_LAST,
-                   GTK_CLASS_TYPE (object_class),
-                   GTK_SIGNAL_OFFSET (GtkViewportClass, set_scroll_adjustments),
-                   gtk_marshal_VOID__OBJECT_OBJECT,
-                   GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
+    g_signal_new ("set_scroll_adjustments",
+                 G_OBJECT_CLASS_TYPE (gobject_class),
+                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                 G_STRUCT_OFFSET (GtkViewportClass, set_scroll_adjustments),
+                 NULL, NULL,
+                 _gtk_marshal_VOID__OBJECT_OBJECT,
+                 G_TYPE_NONE, 2,
+                 GTK_TYPE_ADJUSTMENT,
+                 GTK_TYPE_ADJUSTMENT);
 }
 
 static void
@@ -199,10 +205,10 @@ gtk_viewport_get_property (GObject         *object,
   switch (prop_id)
     {
     case PROP_HADJUSTMENT:
-      g_value_set_object (value, G_OBJECT (viewport->hadjustment));
+      g_value_set_object (value, viewport->hadjustment);
       break;
     case PROP_VADJUSTMENT:
-      g_value_set_object (value, G_OBJECT (viewport->vadjustment));
+      g_value_set_object (value, viewport->vadjustment);
       break;
     case PROP_SHADOW_TYPE:
       g_value_set_enum (value, viewport->shadow_type);
@@ -228,6 +234,15 @@ gtk_viewport_init (GtkViewport *viewport)
   viewport->vadjustment = NULL;
 }
 
+/**
+ * gtk_viewport_new:
+ * @hadjustment: horizontal adjustment.
+ * @vadjustment: vertical adjustment.
+ * @returns: a new #GtkViewport.
+ *
+ * Creates a new #GtkViewport with the given adjustments.
+ *
+ **/
 GtkWidget*
 gtk_viewport_new (GtkAdjustment *hadjustment,
                  GtkAdjustment *vadjustment)
@@ -249,20 +264,38 @@ gtk_viewport_destroy (GtkObject *object)
 
   if (viewport->hadjustment)
     {
-      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment), viewport);
-      gtk_object_unref (GTK_OBJECT (viewport->hadjustment));
+      g_signal_handlers_disconnect_by_func (viewport->hadjustment,
+                                           gtk_viewport_adjustment_changed,
+                                           viewport);
+      g_signal_handlers_disconnect_by_func (viewport->hadjustment,
+                                           gtk_viewport_adjustment_value_changed,
+                                           viewport);
+      g_object_unref (viewport->hadjustment);
       viewport->hadjustment = NULL;
     }
   if (viewport->vadjustment)
     {
-      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment), viewport);
-      gtk_object_unref (GTK_OBJECT (viewport->vadjustment));
+      g_signal_handlers_disconnect_by_func (viewport->vadjustment,
+                                           gtk_viewport_adjustment_changed,
+                                           viewport);
+      g_signal_handlers_disconnect_by_func (viewport->vadjustment,
+                                           gtk_viewport_adjustment_value_changed,
+                                           viewport);
+      g_object_unref (viewport->vadjustment);
       viewport->vadjustment = NULL;
     }
 
   GTK_OBJECT_CLASS (parent_class)->destroy (object);
 }
 
+/**
+ * gtk_viewport_get_hadjustment:
+ * @viewport: a #GtkViewport.
+ * 
+ * Returns the horizontal adjustment of the viewport.
+ *
+ * Return value: the horizontal adjustment of @viewport.
+ **/
 GtkAdjustment*
 gtk_viewport_get_hadjustment (GtkViewport *viewport)
 {
@@ -274,6 +307,14 @@ gtk_viewport_get_hadjustment (GtkViewport *viewport)
   return viewport->hadjustment;
 }
 
+/**
+ * gtk_viewport_get_vadjustment:
+ * @viewport: a #GtkViewport.
+ * 
+ * Returns the vertical adjustment of the viewport.
+ *
+ * Return value: the vertical adjustment of @viewport.
+ **/
 GtkAdjustment*
 gtk_viewport_get_vadjustment (GtkViewport *viewport)
 {
@@ -285,6 +326,13 @@ gtk_viewport_get_vadjustment (GtkViewport *viewport)
   return viewport->vadjustment;
 }
 
+/**
+ * gtk_viewport_set_hadjustment:
+ * @viewport: a #GtkViewport.
+ * @adjustment: a #GtkAdjustment.
+ * 
+ * Sets the horizontal adjustment of the viewport.
+ **/
 void
 gtk_viewport_set_hadjustment (GtkViewport   *viewport,
                              GtkAdjustment *adjustment)
@@ -295,8 +343,13 @@ gtk_viewport_set_hadjustment (GtkViewport   *viewport,
 
   if (viewport->hadjustment && viewport->hadjustment != adjustment)
     {
-      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment), viewport);
-      gtk_object_unref (GTK_OBJECT (viewport->hadjustment));
+      g_signal_handlers_disconnect_by_func (viewport->hadjustment,
+                                           gtk_viewport_adjustment_changed,
+                                           viewport);
+      g_signal_handlers_disconnect_by_func (viewport->hadjustment,
+                                           gtk_viewport_adjustment_value_changed,
+                                           viewport);
+      g_object_unref (viewport->hadjustment);
       viewport->hadjustment = NULL;
     }
 
@@ -307,15 +360,15 @@ gtk_viewport_set_hadjustment (GtkViewport   *viewport,
   if (viewport->hadjustment != adjustment)
     {
       viewport->hadjustment = adjustment;
-      gtk_object_ref (GTK_OBJECT (viewport->hadjustment));
+      g_object_ref (viewport->hadjustment);
       gtk_object_sink (GTK_OBJECT (viewport->hadjustment));
       
-      gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
-                         (GtkSignalFunc) gtk_viewport_adjustment_changed,
-                         (gpointer) viewport);
-      gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
-                         (GtkSignalFunc) gtk_viewport_adjustment_value_changed,
-                         (gpointer) viewport);
+      g_signal_connect (adjustment, "changed",
+                       G_CALLBACK (gtk_viewport_adjustment_changed),
+                       viewport);
+      g_signal_connect (adjustment, "value_changed",
+                       G_CALLBACK (gtk_viewport_adjustment_value_changed),
+                       viewport);
 
       gtk_viewport_adjustment_changed (adjustment, viewport);
     }
@@ -323,6 +376,13 @@ gtk_viewport_set_hadjustment (GtkViewport   *viewport,
   g_object_notify (G_OBJECT (viewport), "hadjustment");
 }
 
+/**
+ * gtk_viewport_set_vadjustment:
+ * @viewport: a #GtkViewport.
+ * @adjustment: a #GtkAdjustment.
+ * 
+ * Sets the vertical adjustment of the viewport.
+ **/
 void
 gtk_viewport_set_vadjustment (GtkViewport   *viewport,
                              GtkAdjustment *adjustment)
@@ -333,8 +393,13 @@ gtk_viewport_set_vadjustment (GtkViewport   *viewport,
 
   if (viewport->vadjustment && viewport->vadjustment != adjustment)
     {
-      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment), viewport);
-      gtk_object_unref (GTK_OBJECT (viewport->vadjustment));
+      g_signal_handlers_disconnect_by_func (viewport->vadjustment,
+                                           gtk_viewport_adjustment_changed,
+                                           viewport);
+      g_signal_handlers_disconnect_by_func (viewport->vadjustment,
+                                           gtk_viewport_adjustment_value_changed,
+                                           viewport);
+      g_object_unref (viewport->vadjustment);
       viewport->vadjustment = NULL;
     }
 
@@ -345,20 +410,20 @@ gtk_viewport_set_vadjustment (GtkViewport   *viewport,
   if (viewport->vadjustment != adjustment)
     {
       viewport->vadjustment = adjustment;
-      gtk_object_ref (GTK_OBJECT (viewport->vadjustment));
+      g_object_ref (viewport->vadjustment);
       gtk_object_sink (GTK_OBJECT (viewport->vadjustment));
       
-      gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
-                         (GtkSignalFunc) gtk_viewport_adjustment_changed,
-                         (gpointer) viewport);
-      gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
-                         (GtkSignalFunc) gtk_viewport_adjustment_value_changed,
-                         (gpointer) viewport);
+      g_signal_connect (adjustment, "changed",
+                       G_CALLBACK (gtk_viewport_adjustment_changed),
+                       viewport);
+      g_signal_connect (adjustment, "value_changed",
+                       G_CALLBACK (gtk_viewport_adjustment_value_changed),
+                       viewport);
 
       gtk_viewport_adjustment_changed (adjustment, viewport);
     }
 
-  g_object_notify (G_OBJECT (viewport), "vadjustment");
+    g_object_notify (G_OBJECT (viewport), "vadjustment");
 }
 
 static void
@@ -372,6 +437,13 @@ gtk_viewport_set_scroll_adjustments (GtkViewport      *viewport,
     gtk_viewport_set_vadjustment (viewport, vadjustment);
 }
 
+/** 
+ * gtk_viewport_set_shadow_type:
+ * @viewport: a #GtkViewport.
+ * @type: the new shadow type.
+ *
+ * Sets the shadow type of the viewport.
+ **/ 
 void
 gtk_viewport_set_shadow_type (GtkViewport   *viewport,
                              GtkShadowType  type)
@@ -387,9 +459,9 @@ gtk_viewport_set_shadow_type (GtkViewport   *viewport,
          gtk_widget_size_allocate (GTK_WIDGET (viewport), &(GTK_WIDGET (viewport)->allocation));
          gtk_widget_queue_draw (GTK_WIDGET (viewport));
        }
-    }
 
-  g_object_notify (G_OBJECT (viewport), "shadow_type");
+      g_object_notify (G_OBJECT (viewport), "shadow_type");
+    }
 }
 
 /**
@@ -419,8 +491,6 @@ gtk_viewport_realize (GtkWidget *widget)
   gint event_mask;
   gint border_width;
 
-  g_return_if_fail (GTK_IS_VIEWPORT (widget));
-
   border_width = GTK_CONTAINER (widget)->border_width;
 
   bin = GTK_BIN (widget);
@@ -498,11 +568,7 @@ gtk_viewport_realize (GtkWidget *widget)
 static void
 gtk_viewport_unrealize (GtkWidget *widget)
 {
-  GtkViewport *viewport;
-
-  g_return_if_fail (GTK_IS_VIEWPORT (widget));
-
-  viewport = GTK_VIEWPORT (widget);
+  GtkViewport *viewport = GTK_VIEWPORT (widget);
 
   gdk_window_set_user_data (viewport->view_window, NULL);
   gdk_window_destroy (viewport->view_window);
@@ -529,9 +595,10 @@ gtk_viewport_paint (GtkWidget    *widget,
     {
       viewport = GTK_VIEWPORT (widget);
 
-      gtk_draw_shadow (widget->style, widget->window,
-                      GTK_STATE_NORMAL, viewport->shadow_type,
-                      0, 0, -1, -1);
+      gtk_paint_shadow (widget->style, widget->window,
+                       GTK_STATE_NORMAL, viewport->shadow_type,
+                       NULL, widget, "viewport",
+                       0, 0, -1, -1);
     }
 }
 
@@ -541,10 +608,6 @@ gtk_viewport_expose (GtkWidget      *widget,
 {
   GtkViewport *viewport;
   GtkBin *bin;
-  GdkEventExpose child_event;
-
-  g_return_val_if_fail (GTK_IS_VIEWPORT (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
 
   if (GTK_WIDGET_DRAWABLE (widget))
     {
@@ -555,8 +618,6 @@ gtk_viewport_expose (GtkWidget      *widget,
        gtk_viewport_paint (widget, &event->area);
       else if (event->window == viewport->bin_window)
        {
-         child_event = *event;
-
          gtk_paint_flat_box(widget->style, viewport->bin_window, 
                             GTK_STATE_NORMAL, GTK_SHADOW_NONE,
                             &event->area, widget, "viewportbin",
@@ -577,8 +638,7 @@ gtk_viewport_add (GtkContainer *container,
 {
   GtkBin *bin;
 
-  g_return_if_fail (GTK_IS_VIEWPORT (container));
-  g_return_if_fail (child != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (child));
 
   bin = GTK_BIN (container);
   g_return_if_fail (bin->child == NULL);
@@ -596,9 +656,6 @@ gtk_viewport_size_request (GtkWidget      *widget,
   GtkBin *bin;
   GtkRequisition child_requisition;
 
-  g_return_if_fail (GTK_IS_VIEWPORT (widget));
-  g_return_if_fail (requisition != NULL);
-
   viewport = GTK_VIEWPORT (widget);
   bin = GTK_BIN (widget);
 
@@ -630,7 +687,7 @@ gtk_viewport_size_allocate (GtkWidget     *widget,
   if (!viewport->hadjustment)
     gtk_viewport_set_hadjustment (viewport, NULL);
   if (!viewport->vadjustment)
-    gtk_viewport_set_hadjustment (viewport, NULL);
+    gtk_viewport_set_vadjustment (viewport, NULL);
 
   /* If our size changed, and we have a shadow, queue a redraw on widget->window to
    * redraw the shadow correctly.
@@ -671,12 +728,12 @@ gtk_viewport_size_allocate (GtkWidget     *widget,
     }
 
   viewport->hadjustment->page_size = child_allocation.width;
-  viewport->hadjustment->page_increment = viewport->hadjustment->page_size / 2;
-  viewport->hadjustment->step_increment = 10;
+  viewport->hadjustment->step_increment = child_allocation.width * 0.1;
+  viewport->hadjustment->page_increment = child_allocation.width * 0.9;
 
   viewport->vadjustment->page_size = child_allocation.height;
-  viewport->vadjustment->page_increment = viewport->vadjustment->page_size / 2;
-  viewport->vadjustment->step_increment = 10;
+  viewport->vadjustment->step_increment = child_allocation.height * 0.1;
+  viewport->vadjustment->page_increment = child_allocation.height * 0.9;
 
   hval = viewport->hadjustment->value;
   vval = viewport->vadjustment->value;
@@ -721,17 +778,17 @@ gtk_viewport_size_allocate (GtkWidget     *widget,
       gtk_widget_size_allocate (bin->child, &child_allocation);
     }
 
-  gtk_signal_emit_by_name (GTK_OBJECT (viewport->hadjustment), "changed");
-  gtk_signal_emit_by_name (GTK_OBJECT (viewport->vadjustment), "changed");
+  gtk_adjustment_changed (viewport->hadjustment);
+  gtk_adjustment_changed (viewport->vadjustment);
   if (viewport->hadjustment->value != hval)
     {
       viewport->hadjustment->value = hval;
-      gtk_signal_emit_by_name (GTK_OBJECT (viewport->hadjustment), "value_changed");
+      gtk_adjustment_value_changed (viewport->hadjustment);
     }
   if (viewport->vadjustment->value != vval)
     {
       viewport->vadjustment->value = vval;
-      gtk_signal_emit_by_name (GTK_OBJECT (viewport->vadjustment), "value_changed");
+      gtk_adjustment_value_changed (viewport->vadjustment);
     }
 }
 
@@ -741,7 +798,7 @@ gtk_viewport_adjustment_changed (GtkAdjustment *adjustment,
 {
   GtkViewport *viewport;
 
-  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
   g_return_if_fail (GTK_IS_VIEWPORT (data));
 
   viewport = GTK_VIEWPORT (data);
@@ -755,7 +812,7 @@ gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
   GtkBin *bin;
   GtkAllocation child_allocation;
 
-  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
   g_return_if_fail (GTK_IS_VIEWPORT (data));
 
   viewport = GTK_VIEWPORT (data);