diff options
author | Tim Janik <timj@gtk.org> | 1998-11-28 07:42:37 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-11-28 07:42:37 +0000 |
commit | 238ede333fb92750520071b71ebff7130b4c8803 (patch) | |
tree | e53ab2172e6542b6c65d90b25e57823475a82202 /gtk/gtkscrolledwindow.c | |
parent | 67d445eebc8d350f5a5131dc6e3d7b8d8ef9da13 (diff) | |
download | gtk+-238ede333fb92750520071b71ebff7130b4c8803.tar.gz |
changed scrolled window inheritance, it inherits from GtkBin now.
Sat Nov 28 03:13:42 1998 Tim Janik <timj@gtk.org>
* gtk/gtkscrolledwindow.h:
* gtk/gtkscrolledwindow.c: changed scrolled window inheritance,
it inherits from GtkBin now.
* gtk/gtkbin.c (gtk_bin_unmap): removed superfluous check for
visibility of child.
(gtk_bin_draw): removed superfluous check for GTK_WIDGET_DRAWABLE().
added check so a child gets only drawn if it's visible.
* gtk/gtkwidget.h:
* gtk/gtkwidget.c: removed gtk_widget_draw_children().
* gtk/gtkstyle.h:
* gtk/gtkstyle.c: rmoved gtk_reset_widget_shapes.
* gtk/gtkwidget.h:
* gtk/gtkwidget.c: removed crufty relict: gtk_widget_is_child().
added internal function gtk_widget_reset_shapes() from gtkstyle.c.
* gtk/gtkrc.h:
* gtk/gtkrc.c: (gtk_rc_find_pixmap_in_path): removed bogus gscanner
argument, changed callers.
* gtk/gtkmenufactory.c: GtkMenuFactory is deprecated for a long time,
it will issue a warning now.
* gtk/gtkcompat.h: new file to #define aliases for historic
function names.
* changed 8 function names for consistency and provided aliases to keep
source compatibility in gtkcompat.h:
(gtk_accel_label_get_accel_width): renamed from gtk_accel_label_accelerator_width
(gtk_container_set_border_width): renamed from gtk_container_border_width
(gtk_notebook_get_current_page): renamed from gtk_notebook_current_page
(gtk_packer_configure): renamed from gtk_packer_set_child_packing
(gtk_paned_set_gutter_size): renamed from gtk_paned_gutter_size
(gtk_paned_set_handle_size): renamed from gtk_paned_handle_size
(gtk_scale_get_value_width): renamed from gtk_scale_value_width
(gtk_window_set_position): renamed from gtk_window_position
* renamed a few recently added funtions for consistency:
(gtk_notebook_get_tab_label): renamed from gtk_notebook_query_tab_label.
(gtk_notebook_get_menu_label): renamed from gtk_notebook_query_menu_label.
(gtk_progress_configure): renamed from gtk_progress_reconfigure.
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r-- | gtk/gtkscrolledwindow.c | 201 |
1 files changed, 97 insertions, 104 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index ea7939f4dd..5608c5cc7d 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -86,7 +86,7 @@ gtk_scrolled_window_get_type (void) (GtkClassInitFunc) NULL, }; - scrolled_window_type = gtk_type_unique (GTK_TYPE_CONTAINER, &scrolled_window_info); + scrolled_window_type = gtk_type_unique (GTK_TYPE_BIN, &scrolled_window_info); } return scrolled_window_type; @@ -102,7 +102,7 @@ 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_TYPE_CONTAINER); + parent_class = gtk_type_class (GTK_TYPE_BIN); gtk_object_add_arg_type ("GtkScrolledWindow::hadjustment", GTK_TYPE_ADJUSTMENT, @@ -218,7 +218,6 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window) gtk_container_set_resize_mode (GTK_CONTAINER (scrolled_window), GTK_RESIZE_QUEUE); - scrolled_window->child = NULL; scrolled_window->hscrollbar = NULL; scrolled_window->vscrollbar = NULL; scrolled_window->hscrollbar_policy = GTK_POLICY_ALWAYS; @@ -263,6 +262,8 @@ void gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window, GtkAdjustment *hadjustment) { + GtkBin *bin; + g_return_if_fail (scrolled_window != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); if (hadjustment) @@ -270,6 +271,8 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window, else hadjustment = (GtkAdjustment*) gtk_object_new (GTK_TYPE_ADJUSTMENT, NULL); + bin = GTK_BIN (scrolled_window); + if (!scrolled_window->hscrollbar) { gtk_widget_push_composite_child (); @@ -301,8 +304,8 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window, scrolled_window); gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window); - if (scrolled_window->child) - gtk_widget_scroll_adjustements (scrolled_window->child, + if (bin->child) + gtk_widget_scroll_adjustements (bin->child, gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)), gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar))); } @@ -311,6 +314,8 @@ void gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window, GtkAdjustment *vadjustment) { + GtkBin *bin; + g_return_if_fail (scrolled_window != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); if (vadjustment) @@ -318,6 +323,8 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window, else vadjustment = (GtkAdjustment*) gtk_object_new (GTK_TYPE_ADJUSTMENT, NULL); + bin = GTK_BIN (scrolled_window); + if (!scrolled_window->vscrollbar) { gtk_widget_push_composite_child (); @@ -349,8 +356,8 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window, scrolled_window); gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window); - if (scrolled_window->child) - gtk_widget_scroll_adjustements (scrolled_window->child, + if (bin->child) + gtk_widget_scroll_adjustements (bin->child, gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)), gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar))); } @@ -425,8 +432,7 @@ gtk_scrolled_window_destroy (GtkObject *object) gtk_widget_destroy (scrolled_window->hscrollbar); gtk_widget_destroy (scrolled_window->vscrollbar); - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + GTK_OBJECT_CLASS (parent_class)->destroy (object); } static void @@ -445,88 +451,71 @@ gtk_scrolled_window_finalize (GtkObject *object) static void gtk_scrolled_window_map (GtkWidget *widget) { + GtkScrolledWindow *scrolled_window; + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); - if (!GTK_WIDGET_MAPPED (widget)) - { - GtkScrolledWindow *scrolled_window; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); - - if (scrolled_window->child && - GTK_WIDGET_VISIBLE (scrolled_window->child) && - !GTK_WIDGET_MAPPED (scrolled_window->child)) - gtk_widget_map (scrolled_window->child); - - if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && - !GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) - gtk_widget_map (scrolled_window->hscrollbar); - - if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && - !GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) - gtk_widget_map (scrolled_window->vscrollbar); + scrolled_window = GTK_SCROLLED_WINDOW (widget); - gtk_widget_queue_draw (widget); - } + /* chain parent class handler to map self and child */ + GTK_WIDGET_CLASS (parent_class)->map (widget); + + if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && + !GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) + gtk_widget_map (scrolled_window->hscrollbar); + + if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && + !GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) + gtk_widget_map (scrolled_window->vscrollbar); } static void gtk_scrolled_window_unmap (GtkWidget *widget) { + GtkScrolledWindow *scrolled_window; + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); - if (GTK_WIDGET_MAPPED (widget)) - { - GtkScrolledWindow *scrolled_window; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); - - if (scrolled_window->child && - GTK_WIDGET_VISIBLE (scrolled_window->child) && - GTK_WIDGET_MAPPED (scrolled_window->child)) - gtk_widget_unmap (scrolled_window->child); - - if (GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) - gtk_widget_unmap (scrolled_window->hscrollbar); - - if (GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) - gtk_widget_unmap (scrolled_window->vscrollbar); + scrolled_window = GTK_SCROLLED_WINDOW (widget); - gtk_widget_queue_clear (widget); - } + /* chain parent class handler to unmap self and child */ + GTK_WIDGET_CLASS (parent_class)->unmap (widget); + + if (GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) + gtk_widget_unmap (scrolled_window->hscrollbar); + + if (GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) + gtk_widget_unmap (scrolled_window->vscrollbar); } static void gtk_scrolled_window_draw (GtkWidget *widget, GdkRectangle *area) { + GtkScrolledWindow *scrolled_window; + GtkBin *bin; + GdkRectangle child_area; + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); g_return_if_fail (area != NULL); - if (GTK_WIDGET_DRAWABLE (widget)) - { - GtkScrolledWindow *scrolled_window; - GdkRectangle child_area; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - - if (scrolled_window->child && GTK_WIDGET_VISIBLE (scrolled_window->child) && - gtk_widget_intersect (scrolled_window->child, area, &child_area)) - gtk_widget_draw (scrolled_window->child, &child_area); - - if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && - gtk_widget_intersect (scrolled_window->hscrollbar, area, &child_area)) - gtk_widget_draw (scrolled_window->hscrollbar, &child_area); + scrolled_window = GTK_SCROLLED_WINDOW (widget); + bin = GTK_BIN (widget); - if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && - gtk_widget_intersect (scrolled_window->vscrollbar, area, &child_area)) - gtk_widget_draw (scrolled_window->vscrollbar, &child_area); - } + if (bin->child && GTK_WIDGET_VISIBLE (bin->child) && + gtk_widget_intersect (bin->child, area, &child_area)) + gtk_widget_draw (bin->child, &child_area); + + if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && + gtk_widget_intersect (scrolled_window->hscrollbar, area, &child_area)) + gtk_widget_draw (scrolled_window->hscrollbar, &child_area); + + if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && + gtk_widget_intersect (scrolled_window->vscrollbar, area, &child_area)) + gtk_widget_draw (scrolled_window->vscrollbar, &child_area); } static void @@ -535,18 +524,20 @@ gtk_scrolled_window_forall (GtkContainer *container, GtkCallback callback, gpointer callback_data) { - GtkScrolledWindow *scrolled_window; - g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container)); g_return_if_fail (callback != NULL); - scrolled_window = GTK_SCROLLED_WINDOW (container); - - if (scrolled_window->child) - callback (scrolled_window->child, callback_data); + GTK_CONTAINER_CLASS (parent_class)->forall (container, + include_internals, + callback, + callback_data); if (include_internals) { + GtkScrolledWindow *scrolled_window; + + scrolled_window = GTK_SCROLLED_WINDOW (container); + if (scrolled_window->vscrollbar) callback (scrolled_window->vscrollbar, callback_data); if (scrolled_window->hscrollbar) @@ -559,6 +550,7 @@ gtk_scrolled_window_size_request (GtkWidget *widget, GtkRequisition *requisition) { GtkScrolledWindow *scrolled_window; + GtkBin *bin; gint extra_height; gint extra_width; @@ -567,16 +559,17 @@ gtk_scrolled_window_size_request (GtkWidget *widget, g_return_if_fail (requisition != NULL); scrolled_window = GTK_SCROLLED_WINDOW (widget); + bin = GTK_BIN (scrolled_window); requisition->width = 0; requisition->height = 0; - if (scrolled_window->child && GTK_WIDGET_VISIBLE (scrolled_window->child)) + if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) { - gtk_widget_size_request (scrolled_window->child, &scrolled_window->child->requisition); + gtk_widget_size_request (bin->child, &bin->child->requisition); - requisition->width += scrolled_window->child->requisition.width; - requisition->height += scrolled_window->child->requisition.height; + requisition->width += bin->child->requisition.width; + requisition->height += bin->child->requisition.height; } extra_width = 0; @@ -651,6 +644,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GtkScrolledWindow *scrolled_window; + GtkBin *bin; GtkAllocation relative_allocation; GtkAllocation child_allocation; @@ -659,6 +653,8 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget, g_return_if_fail (allocation != NULL); scrolled_window = GTK_SCROLLED_WINDOW (widget); + bin = GTK_BIN (scrolled_window); + widget->allocation = *allocation; if (scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS) @@ -666,7 +662,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget, if (scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS) scrolled_window->vscrollbar_visible = TRUE; - if (scrolled_window->child && GTK_WIDGET_VISIBLE (scrolled_window->child)) + if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) { gboolean previous_hvis; gboolean previous_vvis; @@ -684,7 +680,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget, previous_hvis = scrolled_window->hscrollbar_visible; previous_vvis = scrolled_window->vscrollbar_visible; - gtk_widget_size_allocate (scrolled_window->child, &child_allocation); + gtk_widget_size_allocate (bin->child, &child_allocation); /* If, after the first iteration, the hscrollbar and the * vscrollbar flip visiblity, then we need both. @@ -804,12 +800,15 @@ gtk_scrolled_window_add (GtkContainer *container, GtkWidget *child) { GtkScrolledWindow *scrolled_window; + GtkBin *bin; + + bin = GTK_BIN (container); + g_return_if_fail (bin->child == NULL); scrolled_window = GTK_SCROLLED_WINDOW (container); - g_return_if_fail (scrolled_window->child == NULL); - gtk_widget_set_parent (child, GTK_WIDGET (container)); - scrolled_window->child = child; + gtk_widget_set_parent (child, GTK_WIDGET (bin)); + bin->child = child; /* this is a temporary message */ if (!gtk_widget_scroll_adjustements (child, @@ -818,18 +817,18 @@ gtk_scrolled_window_add (GtkContainer *container, g_message ("gtk_scrolled_window_add(): cannot add non scrollable widget " "use gtk_scrolled_window_add_with_viewport() instead"); - if (GTK_WIDGET_VISIBLE (scrolled_window)) + if (GTK_WIDGET_VISIBLE (child->parent)) { - if (GTK_WIDGET_REALIZED (scrolled_window) && + if (GTK_WIDGET_REALIZED (child->parent) && !GTK_WIDGET_REALIZED (child)) gtk_widget_realize (child); - if (GTK_WIDGET_MAPPED (scrolled_window) && + if (GTK_WIDGET_MAPPED (child->parent) && !GTK_WIDGET_MAPPED (child)) gtk_widget_map (child); } - - if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (scrolled_window)) + + if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (container)) gtk_widget_queue_resize (child); } @@ -837,30 +836,22 @@ static void gtk_scrolled_window_remove (GtkContainer *container, GtkWidget *child) { - GtkScrolledWindow *scrolled_window; - gboolean widget_was_visible; - g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container)); g_return_if_fail (child != NULL); - - scrolled_window = GTK_SCROLLED_WINDOW (container); - g_return_if_fail (scrolled_window->child == child); - - widget_was_visible = GTK_WIDGET_VISIBLE (child); + g_return_if_fail (GTK_BIN (container)->child == child); gtk_widget_scroll_adjustements (child, NULL, NULL); - gtk_widget_unparent (child); - scrolled_window->child = NULL; - - if (widget_was_visible) - gtk_widget_queue_resize (GTK_WIDGET (container)); + + /* chain parent class handler to remove child */ + GTK_CONTAINER_CLASS (parent_class)->remove (container, child); } void gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window, GtkWidget *child) { + GtkBin *bin; GtkWidget *viewport; g_return_if_fail (scrolled_window != NULL); @@ -869,12 +860,14 @@ gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window, g_return_if_fail (GTK_IS_WIDGET (child)); g_return_if_fail (child->parent == NULL); - if (scrolled_window->child != NULL) + bin = GTK_BIN (scrolled_window); + + if (bin->child != NULL) { - g_return_if_fail (GTK_IS_VIEWPORT (scrolled_window->child)); - g_return_if_fail (GTK_BIN (scrolled_window->child)->child == NULL); + g_return_if_fail (GTK_IS_VIEWPORT (bin->child)); + g_return_if_fail (GTK_BIN (bin->child)->child == NULL); - viewport = scrolled_window->child; + viewport = bin->child; } else { |