diff options
author | Lars Hamann <lars@gtk.org> | 1998-11-05 15:44:22 +0000 |
---|---|---|
committer | Lars Hamann <lars@src.gnome.org> | 1998-11-05 15:44:22 +0000 |
commit | 00fbbe68b035f9e2888b0005e30370cb6913be39 (patch) | |
tree | 9e450c963e020e15e6b77b124ec8fb36e58d2350 | |
parent | 6a227eec1cd13cd5b364b2f1f3c77febc5d70de5 (diff) | |
download | gtk+-00fbbe68b035f9e2888b0005e30370cb6913be39.tar.gz |
removed vscrollbar, hscrollbar, vscrollbar_policy, hscrollbar_policy.
Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
* gtk/gtkclist.c (gtk_clist_class_init): added new args types
"hadjustment" & "vadjustment"
(gtk_clist_set_arg) (gtk_clist_get_arg): new object class
set/get_arg functions
(gtk_clist_construct): don't create/adjust scrollbars.
(gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
to set h/vadjustments
(gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
to query h/vadjustments
(create_scrollbars): removed.
(create_adjustments): replacement for create_scrollbars
(gtk_clist_new): call gtk_clist_new_with_titles
(gtk_clist_new_with_titles): don't warn on titles == NULL
(move_horizontal): use CLAMP instead
(gtk_clist_set_policy): deprecated method.
use gtk_scrolled_window_set_policy instead.
(vadjustment_value_changed): use clist->vadj.
(adjust_scrollbars): renamed to adjust_adjustments
(adjust_adjustments): former adjust_scrollbars
(gtk_clist_destroy): unref adjustments
(gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
(gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
(gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
(gtk_clist_thaw) (real_insert_row) (real_remove_row)
(gtk_clist_set_row_height) (real_resize_column):
call adjust_adjustments
(gtk_clist_moveto): return if clist has no adjustments yet.
(gtk_clist_parent_set): new GtkWidget::parent_set function.
Autogenerate h/vadjustments if needed.
(move_horizontal) (move_vertical): some cleanups
* gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
call only gtk_viewport_set_h/vadjustment and let these functions
do the work.
(gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
generate a new adjustment if needed
* gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
* gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
queue_resize if visibility of scrollbars changes
(gtk_scrolled_window_remove): only call container_remove with
scrolled_window->viewport automatically if viewport was autogenerated
(gtk_scrolled_window_add): add widget as scrolled_window->viewport.
auto create a viewport only if widget does not take h/vadjustments.
(gtk_scrolled_window_construct): don't generate a viewport
automatically.
(gtk_scrolled_window_forall): call callback with viewport in any case
(gtk_scrolled_window_set_arg): call gtk_container_add in case of
ARG_VIEWPORT
(gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
(gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
viewport != NULL
* gtk/testgtk.c
(create_ctree) (export_ctree) (create_clist): use a scrolled_window
in conjunction with clists/ctrees
* gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
in conjunction with clists
* gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
in conjunction with clists
-rw-r--r-- | ChangeLog | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 70 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 70 | ||||
-rw-r--r-- | gtk/gtkclist.c | 754 | ||||
-rw-r--r-- | gtk/gtkclist.h | 41 | ||||
-rw-r--r-- | gtk/gtkfilesel.c | 24 | ||||
-rw-r--r-- | gtk/gtkfontsel.c | 53 | ||||
-rw-r--r-- | gtk/gtkscrolledwindow.c | 128 | ||||
-rw-r--r-- | gtk/gtkscrolledwindow.h | 9 | ||||
-rw-r--r-- | gtk/gtkviewport.c | 54 | ||||
-rw-r--r-- | gtk/testgtk.c | 38 | ||||
-rw-r--r-- | tests/testgtk.c | 38 |
16 files changed, 1053 insertions, 576 deletions
@@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index b873509e84..ad8a33cb27 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,73 @@ +Thu Nov 5 16:00:32 1998 Lars Hamann <lars@gtk.org> + + * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar, + vscrollbar_policy, hscrollbar_policy. added h/vadjustment. + + * gtk/gtkclist.c (gtk_clist_class_init): added new args types + "hadjustment" & "vadjustment" + (gtk_clist_set_arg) (gtk_clist_get_arg): new object class + set/get_arg functions + (gtk_clist_construct): don't create/adjust scrollbars. + (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions + to set h/vadjustments + (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions + to query h/vadjustments + (create_scrollbars): removed. + (create_adjustments): replacement for create_scrollbars + (gtk_clist_new): call gtk_clist_new_with_titles + (gtk_clist_new_with_titles): don't warn on titles == NULL + (move_horizontal): use CLAMP instead + (gtk_clist_set_policy): deprecated method. + use gtk_scrolled_window_set_policy instead. + (vadjustment_value_changed): use clist->vadj. + (adjust_scrollbars): renamed to adjust_adjustments + (adjust_adjustments): former adjust_scrollbars + (gtk_clist_destroy): unref adjustments + (gtk_clist_size_allocate) (gtk_clist_map) (title_focus) + (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus) + (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars + (gtk_clist_thaw) (real_insert_row) (real_remove_row) + (gtk_clist_set_row_height) (real_resize_column): + call adjust_adjustments + (gtk_clist_moveto): return if clist has no adjustments yet. + (gtk_clist_parent_set): new GtkWidget::parent_set function. + Autogenerate h/vadjustments if needed. + (move_horizontal) (move_vertical): some cleanups + + * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new): + call only gtk_viewport_set_h/vadjustment and let these functions + do the work. + (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment): + generate a new adjustment if needed + + * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow): + use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed): + queue_resize if visibility of scrollbars changes + (gtk_scrolled_window_remove): only call container_remove with + scrolled_window->viewport automatically if viewport was autogenerated + (gtk_scrolled_window_add): add widget as scrolled_window->viewport. + auto create a viewport only if widget does not take h/vadjustments. + (gtk_scrolled_window_construct): don't generate a viewport + automatically. + (gtk_scrolled_window_forall): call callback with viewport in any case + (gtk_scrolled_window_set_arg): call gtk_container_add in case of + ARG_VIEWPORT + (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request) + (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check + viewport != NULL + + * gtk/testgtk.c + (create_ctree) (export_ctree) (create_clist): use a scrolled_window + in conjunction with clists/ctrees + + * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window + in conjunction with clists + + * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window + in conjunction with clists + Wed Nov 4 21:52:57 1998 Lars Hamann <lars@gtk.org> * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment diff --git a/gtk/gtkclist.c b/gtk/gtkclist.c index 0248e97b11..43d96c004f 100644 --- a/gtk/gtkclist.c +++ b/gtk/gtkclist.c @@ -144,6 +144,12 @@ enum SYNC_INSERT }; +enum { + ARG_0, + ARG_HADJUSTMENT, + ARG_VADJUSTMENT +}; + static void sync_selection (GtkCList * clist, gint row, gint mode); @@ -186,6 +192,8 @@ static gint gtk_clist_focus (GtkContainer *container, GtkDirectionType direction); static void gtk_clist_style_set (GtkWidget *widget, GtkStyle *previous_style); +static void gtk_clist_parent_set (GtkWidget *widget, + GtkWidget *previous_parent); /* GtkContainer Methods */ static void gtk_clist_set_focus_child (GtkContainer *container, @@ -282,8 +290,7 @@ static void column_button_clicked (GtkWidget *widget, gpointer data); /* Scrollbars */ -static void create_scrollbars (GtkCList *clist); -static void adjust_scrollbars (GtkCList *clist); +static void adjust_adjustments (GtkCList *clist); static void check_exposures (GtkCList *clist); static void vadjustment_changed (GtkAdjustment *adjustment, gpointer data); @@ -360,6 +367,13 @@ static GList *gtk_clist_mergesort (GtkCList *clist, /* Misc */ static gboolean title_focus (GtkCList *clist, gint dir); +static void gtk_clist_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id); +static void gtk_clist_get_arg (GtkObject *object, + GtkArg *arg, + guint arg_id); + static GtkContainerClass *parent_class = NULL; static guint clist_signals[LAST_SIGNAL] = {0}; @@ -403,6 +417,15 @@ gtk_clist_class_init (GtkCListClass *klass) parent_class = gtk_type_class (GTK_TYPE_CONTAINER); + gtk_object_add_arg_type ("GtkCList::hadjustment", + GTK_TYPE_ADJUSTMENT, + GTK_ARG_READWRITE, + ARG_HADJUSTMENT); + gtk_object_add_arg_type ("GtkCList::vadjustment", + GTK_TYPE_ADJUSTMENT, + GTK_ARG_READWRITE, + ARG_VADJUSTMENT); + clist_signals[SELECT_ROW] = gtk_signal_new ("select_row", GTK_RUN_FIRST, @@ -517,6 +540,8 @@ gtk_clist_class_init (GtkCListClass *klass) gtk_object_class_add_signals (object_class, clist_signals, LAST_SIGNAL); + object_class->set_arg = gtk_clist_set_arg; + object_class->get_arg = gtk_clist_get_arg; object_class->destroy = gtk_clist_destroy; object_class->finalize = gtk_clist_finalize; @@ -536,6 +561,7 @@ gtk_clist_class_init (GtkCListClass *klass) widget_class->focus_out_event = gtk_clist_focus_out; widget_class->draw_focus = gtk_clist_draw_focus; widget_class->style_set = gtk_clist_style_set; + widget_class->parent_set = gtk_clist_parent_set; /* container_class->add = NULL; use the default GtkContainerClass warning */ /* container_class->remove=NULL; use the default GtkContainerClass warning */ @@ -628,7 +654,6 @@ gtk_clist_class_init (GtkCListClass *klass) GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); - gtk_binding_entry_add_signal (binding_set, GDK_Left, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, @@ -646,7 +671,6 @@ gtk_clist_class_init (GtkCListClass *klass) GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); - gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "undo_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, @@ -774,6 +798,54 @@ gtk_clist_class_init (GtkCListClass *klass) } static void +gtk_clist_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GtkCList *clist; + GtkAdjustment *adjustment; + + clist = GTK_CLIST (object); + + switch (arg_id) + { + case ARG_HADJUSTMENT: + adjustment = GTK_VALUE_POINTER (*arg); + gtk_clist_set_hadjustment (clist, adjustment); + break; + case ARG_VADJUSTMENT: + adjustment = GTK_VALUE_POINTER (*arg); + gtk_clist_set_vadjustment (clist, adjustment); + break; + default: + break; + } +} + +static void +gtk_clist_get_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GtkCList *clist; + + clist = GTK_CLIST (object); + + switch (arg_id) + { + case ARG_HADJUSTMENT: + GTK_VALUE_POINTER (*arg) = clist->hadjustment; + break; + case ARG_VADJUSTMENT: + GTK_VALUE_POINTER (*arg) = clist->vadjustment; + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void gtk_clist_init (GtkCList *clist) { clist->flags = 0; @@ -806,8 +878,8 @@ gtk_clist_init (GtkCList *clist) clist->voffset = 0; clist->shadow_type = GTK_SHADOW_IN; - clist->hscrollbar_policy = GTK_POLICY_ALWAYS; - clist->vscrollbar_policy = GTK_POLICY_ALWAYS; + clist->vadjustment = NULL; + clist->hadjustment = NULL; clist->cursor_drag = NULL; clist->xor_gc = NULL; @@ -877,9 +949,6 @@ gtk_clist_construct (GtkCList *clist, * isn't there*/ column_button_create (clist, 0); - /* create scrollbars */ - create_scrollbars (clist); - if (titles) { GTK_CLIST_SET_FLAG (clist, CLIST_SHOW_TITLES); @@ -895,6 +964,10 @@ gtk_clist_construct (GtkCList *clist, /* GTKCLIST PUBLIC INTERFACE * gtk_clist_new * gtk_clist_new_with_titles + * gtk_clist_set_hadjustment + * gtk_clist_set_vadjustment + * gtk_clist_get_hadjustment + * gtk_clist_get_vadjustment * gtk_clist_set_shadow_type * gtk_clist_set_border *** deprecated function *** * gtk_clist_set_selection_mode @@ -905,14 +978,7 @@ gtk_clist_construct (GtkCList *clist, GtkWidget * gtk_clist_new (gint columns) { - GtkCList *clist; - - if (columns < 1) - return NULL; - - clist = gtk_type_new (GTK_TYPE_CLIST); - gtk_clist_construct (clist, columns, NULL); - return GTK_WIDGET (clist); + return gtk_clist_new_with_titles (columns, NULL); } GtkWidget * @@ -921,16 +987,98 @@ gtk_clist_new_with_titles (gint columns, { GtkWidget *widget; - g_return_val_if_fail (titles != NULL, NULL); - widget = gtk_type_new (GTK_TYPE_CLIST); - gtk_clist_construct (GTK_CLIST (widget), columns, titles); - return widget; } void +gtk_clist_set_hadjustment (GtkCList *clist, + GtkAdjustment *adjustment) +{ + g_return_if_fail (clist != NULL); + g_return_if_fail (GTK_IS_CLIST (clist)); + if (adjustment) + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + + if (clist->hadjustment && (clist->hadjustment != adjustment)) + { + gtk_signal_disconnect_by_data (GTK_OBJECT (clist->hadjustment), clist); + gtk_object_unref (GTK_OBJECT (clist->hadjustment)); + } + + if (!adjustment) + adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0)); + + if (clist->hadjustment != adjustment) + { + clist->hadjustment = adjustment; + gtk_object_ref (GTK_OBJECT (clist->hadjustment)); + gtk_object_sink (GTK_OBJECT (clist->hadjustment)); + + gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "changed", + (GtkSignalFunc) hadjustment_changed, + (gpointer) clist); + gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "value_changed", + (GtkSignalFunc) hadjustment_value_changed, + (gpointer) clist); + } +} + +GtkAdjustment * +gtk_clist_get_hadjustment (GtkCList *clist) +{ + g_return_val_if_fail (clist != NULL, NULL); + g_return_val_if_fail (GTK_IS_CLIST (clist), NULL); + + return clist->hadjustment; +} + +void +gtk_clist_set_vadjustment (GtkCList *clist, + GtkAdjustment *adjustment) +{ + g_return_if_fail (clist != NULL); + g_return_if_fail (GTK_IS_CLIST (clist)); + if (adjustment) + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + + if (clist->vadjustment && (clist->vadjustment != adjustment)) + { + gtk_signal_disconnect_by_data (GTK_OBJECT (clist->vadjustment), clist); + gtk_object_unref (GTK_OBJECT (clist->vadjustment)); + } + + if (!adjustment) + adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0)); + + if (clist->vadjustment != adjustment) + { + clist->vadjustment = adjustment; + gtk_object_ref (GTK_OBJECT (clist->vadjustment)); + gtk_object_sink (GTK_OBJECT (clist->vadjustment)); + + gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "changed", + (GtkSignalFunc) vadjustment_changed, + (gpointer) clist); + gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "value_changed", + (GtkSignalFunc) vadjustment_value_changed, + (gpointer) clist); + } +} + +GtkAdjustment * +gtk_clist_get_vadjustment (GtkCList *clist) +{ + g_return_val_if_fail (clist != NULL, NULL); + g_return_val_if_fail (GTK_IS_CLIST (clist), NULL); + + return clist->vadjustment; +} + +void gtk_clist_set_shadow_type (GtkCList *clist, GtkShadowType type) { @@ -991,22 +1139,6 @@ gtk_clist_set_policy (GtkCList *clist, { g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); - - if (clist->vscrollbar_policy != vscrollbar_policy) - { - clist->vscrollbar_policy = vscrollbar_policy; - - if (GTK_WIDGET (clist)->parent) - gtk_widget_queue_resize (GTK_WIDGET (clist)); - } - - if (clist->hscrollbar_policy != hscrollbar_policy) - { - clist->hscrollbar_policy = hscrollbar_policy; - - if (GTK_WIDGET (clist)->parent) - gtk_widget_queue_resize (GTK_WIDGET (clist)); - } } void @@ -1026,7 +1158,7 @@ gtk_clist_thaw (GtkCList *clist) GTK_CLIST_UNSET_FLAG (clist, CLIST_FROZEN); - adjust_scrollbars (clist); + adjust_adjustments (clist); draw_rows (clist, NULL); } @@ -1555,7 +1687,7 @@ real_resize_column (GtkCList *clist, if (!GTK_CLIST_FROZEN (clist)) { - adjust_scrollbars (clist); + adjust_adjustments (clist); draw_rows (clist, NULL); } } @@ -1802,7 +1934,7 @@ gtk_clist_set_row_height (GtkCList *clist, if (!GTK_CLIST_FROZEN (clist)) { - adjust_scrollbars (clist); + adjust_adjustments (clist); draw_rows (clist, NULL); } } @@ -1821,6 +1953,8 @@ gtk_clist_moveto (GtkCList *clist, return; if (column < -1 || column >= clist->columns) return; + if (!clist->hadjustment || !clist->vadjustment) + return; row_align = CLAMP (row_align, 0, 1); col_align = CLAMP (col_align, 0, 1); @@ -1828,21 +1962,18 @@ gtk_clist_moveto (GtkCList *clist, /* adjust horizontal scrollbar */ if (column >= 0) { - GtkAdjustment *adj; gint x; - adj = GTK_RANGE (clist->hscrollbar)->adjustment; - x = (COLUMN_LEFT (clist, column) - CELL_SPACING - COLUMN_INSET - (col_align * (clist->clist_window_width - 2 * COLUMN_INSET - CELL_SPACING - clist->column[column].area.width))); if (x < 0) - gtk_adjustment_set_value (adj, 0.0); + gtk_adjustment_set_value (clist->hadjustment, 0.0); else if (x > LIST_WIDTH (clist) - clist->clist_window_width) gtk_adjustment_set_value - (adj, LIST_WIDTH (clist) - clist->clist_window_width); + (clist->hadjustment, LIST_WIDTH (clist) - clist->clist_window_width); else - gtk_adjustment_set_value (adj, x); + gtk_adjustment_set_value (clist->hadjustment, x); } /* adjust vertical scrollbar */ @@ -2394,7 +2525,7 @@ real_insert_row (GtkCList *clist, /* redraw the list if it isn't frozen */ if (!GTK_CLIST_FROZEN (clist)) { - adjust_scrollbars (clist); + adjust_adjustments (clist); if (gtk_clist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE) draw_rows (clist, NULL); @@ -2460,7 +2591,7 @@ real_remove_row (GtkCList *clist, /* redraw the row if it isn't frozen */ if (!GTK_CLIST_FROZEN (clist)) { - adjust_scrollbars (clist); + adjust_adjustments (clist); if (was_visible) draw_rows (clist, NULL); @@ -2508,11 +2639,9 @@ real_clear (GtkCList *clist) gtk_clist_set_column_width (clist, i, 0); /* zero-out the scrollbars */ - if (clist->vscrollbar) + if (clist->vadjustment) { - GTK_RANGE (clist->vscrollbar)->adjustment->value = 0.0; - gtk_signal_emit_by_name - (GTK_OBJECT (GTK_RANGE (clist->vscrollbar)->adjustment), "changed"); + gtk_adjustment_set_value (clist->vadjustment, 0.0); if (!GTK_CLIST_FROZEN (clist)) gtk_clist_thaw (clist); } @@ -3858,16 +3987,16 @@ gtk_clist_destroy (GtkObject *object) * to zero. */ - /* destroy the scrollbars */ - if (clist->vscrollbar) + /* unref adjustments */ + if (clist->hadjustment) { - gtk_widget_unparent (clist->vscrollbar); - clist->vscrollbar = NULL; + gtk_object_unref (GTK_OBJECT (clist->hadjustment)); + clist->hadjustment = NULL; } - if (clist->hscrollbar) + if (clist->vadjustment) { - gtk_widget_unparent (clist->hscrollbar); - clist->hscrollbar = NULL; + gtk_object_unref (GTK_OBJECT (clist->vadjustment)); + clist->vadjustment = NULL; } if (clist->htimer) @@ -3920,6 +4049,7 @@ gtk_clist_finalize (GtkObject *object) * gtk_clist_draw * gtk_clist_expose * gtk_clist_style_set + * gtk_clist_parent_set * gtk_clist_key_press * gtk_clist_button_press * gtk_clist_button_release @@ -4183,15 +4313,6 @@ gtk_clist_map (GtkWidget *widget) if (clist->column[i].window && clist->column[i].button) gdk_window_show (clist->column[i].window); - /* map vscrollbars */ - if (GTK_WIDGET_VISIBLE (clist->vscrollbar) && - !GTK_WIDGET_MAPPED (clist->vscrollbar)) - gtk_widget_map (clist->vscrollbar); - - if (GTK_WIDGET_VISIBLE (clist->hscrollbar) && - !GTK_WIDGET_MAPPED (clist->hscrollbar)) - gtk_widget_map (clist->hscrollbar); - /* unfreeze the list */ GTK_CLIST_UNSET_FLAG (clist, CLIST_FROZEN); } @@ -4220,13 +4341,6 @@ gtk_clist_unmap (GtkWidget *widget) gdk_window_hide (clist->title_window); gdk_window_hide (widget->window); - /* unmap scrollbars */ - if (GTK_WIDGET_MAPPED (clist->vscrollbar)) - gtk_widget_unmap (clist->vscrollbar); - - if (GTK_WIDGET_MAPPED (clist->hscrollbar)) - gtk_widget_unmap (clist->hscrollbar); - /* unmap column buttons */ for (i = 0; i < clist->columns; i++) if (clist->column[i].button && @@ -4361,6 +4475,24 @@ gtk_clist_style_set (GtkWidget *widget, } } +static void +gtk_clist_parent_set (GtkWidget *widget, + GtkWidget *previous_parent) +{ + GtkCList *clist; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + clist = GTK_CLIST (widget); + + /* create adjustments */ + if (!clist->hadjustment) + gtk_clist_set_hadjustment (clist, NULL); + if (!clist->vadjustment) + gtk_clist_set_vadjustment (clist, NULL); +} + static gint gtk_clist_key_press (GtkWidget *widget, GdkEventKey *event) @@ -4718,40 +4850,27 @@ move_vertical (GtkCList *clist, gint row, gfloat align) { - gint y; - GtkAdjustment *adj; + gfloat value; - adj = GTK_RANGE (clist->vscrollbar)->adjustment; + value = (ROW_TOP_YPIXEL (clist, row) - clist->voffset - + align * (clist->clist_window_height - clist->row_height) + + (2 * align - 1) * CELL_SPACING); - y = ROW_TOP_YPIXEL (clist, row) - clist->voffset; - - y = y - align * (clist->clist_window_height - clist->row_height) - + (2 * align - 1) * CELL_SPACING; - - if (y + adj->page_size > adj->upper) - adj->value = adj->upper - adj->page_size; - else - adj->value = y; + if (value + clist->vadjustment->page_size > clist->vadjustment->upper) + value = clist->vadjustment->upper - clist->vadjustment->page_size; - gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed"); + gtk_adjustment_set_value(clist->vadjustment, value); } static void move_horizontal (GtkCList *clist, gint diff) { - gfloat upper; - GtkAdjustment *adj; - - adj = GTK_RANGE (clist->hscrollbar)->adjustment; + gfloat value; - adj->value += diff; - - upper = adj->upper - adj->page_size; - adj->value = MIN (adj->value, upper); - adj->value = MAX (adj->value, 0.0); - - gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed"); + value = CLAMP (clist->hadjustment->value + diff, 0.0, + clist->hadjustment->upper - clist->hadjustment->page_size); + gtk_adjustment_set_value(clist->hadjustment, value); } static gint @@ -4824,9 +4943,9 @@ gtk_clist_motion (GtkWidget *widget, clist->htimer = gtk_timeout_add (SCROLL_TIME, (GtkFunction) horizontal_timeout, clist); - if (!((x < 0 && GTK_RANGE (clist->hscrollbar)->adjustment->value == 0) || + if (!((x < 0 && clist->hadjustment->value == 0) || (x >= clist->clist_window_width && - GTK_RANGE (clist->hscrollbar)->adjustment->value == + clist->hadjustment->value == LIST_WIDTH (clist) - clist->clist_window_width))) { if (x < 0) @@ -4927,40 +5046,12 @@ gtk_clist_size_request (GtkWidget *widget, MAX (clist->column_title_area.height, clist->column[i].button->requisition.height); } - requisition->height += clist->column_title_area.height; - - /* add the vscrollbar space */ - if ((clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC) || - GTK_WIDGET_VISIBLE (clist->vscrollbar)) - { - gtk_widget_size_request (clist->vscrollbar, - &clist->vscrollbar->requisition); - - requisition->width += (clist->vscrollbar->requisition.width + - SCROLLBAR_SPACING (clist)); - requisition->height = MAX (requisition->height, - clist->vscrollbar->requisition.height); - } - - /* add the hscrollbar space */ - if ((clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC) || - GTK_WIDGET_VISIBLE (clist->hscrollbar)) - { - gtk_widget_size_request (clist->hscrollbar, - &clist->hscrollbar->requisition); - - requisition->height += (clist->hscrollbar->requisition.height + - SCROLLBAR_SPACING (clist)); - requisition->width = MAX (clist->hscrollbar->requisition.width, - requisition->width - - clist->vscrollbar->requisition.width); - - } requisition->width += (widget->style->klass->xthickness + GTK_CONTAINER (widget)->border_width) * 2; - requisition->height += (widget->style->klass->ythickness + - GTK_CONTAINER (widget)->border_width) * 2; + requisition->height += (clist->column_title_area.height + + (widget->style->klass->ythickness + + GTK_CONTAINER (widget)->border_width) * 2); } static void @@ -4969,8 +5060,6 @@ gtk_clist_size_allocate (GtkWidget *widget, { GtkCList *clist; GtkAllocation clist_allocation; - GtkAllocation child_allocation; - gint i, vscrollbar_vis, hscrollbar_vis; gint border_width; g_return_if_fail (widget != NULL); @@ -5012,41 +5101,6 @@ gtk_clist_size_allocate (GtkWidget *widget, (2 * widget->style->klass->ythickness) - clist->column_title_area.height); - /* - * here's where we decide to show/not show the scrollbars - */ - vscrollbar_vis = 0; - hscrollbar_vis = 0; - - for (i = 0; i <= 1; i++) - { - if (LIST_HEIGHT (clist) <= clist_allocation.height && - clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC) - { - vscrollbar_vis = 0; - } - else if (!vscrollbar_vis) - { - vscrollbar_vis = 1; - clist_allocation.width = MAX (1, clist_allocation.width - - (clist->vscrollbar->requisition.width + - SCROLLBAR_SPACING (clist))); - } - - if (LIST_WIDTH (clist) <= clist_allocation.width && - clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC) - { - hscrollbar_vis = 0; - } - else if (!hscrollbar_vis) - { - hscrollbar_vis = 1; - clist_allocation.height = MAX (1, clist_allocation.height - - (clist->hscrollbar->requisition.height - + SCROLLBAR_SPACING (clist))); - } - } - clist->clist_window_width = clist_allocation.width; clist->clist_window_height = clist_allocation.height; @@ -5077,56 +5131,7 @@ gtk_clist_size_allocate (GtkWidget *widget, size_allocate_columns (clist); size_allocate_title_buttons (clist); - adjust_scrollbars (clist); - - /* allocate the vscrollbar */ - if (vscrollbar_vis) - { - if (!GTK_WIDGET_VISIBLE (clist->vscrollbar)) - gtk_widget_show (clist->vscrollbar); - - child_allocation.x = (clist->internal_allocation.x + - clist->internal_allocation.width - - clist->vscrollbar->requisition.width); - child_allocation.y = clist->internal_allocation.y; - child_allocation.width = clist->vscrollbar->requisition.width; - child_allocation.height = MAX (1, clist->internal_allocation.height - - (hscrollbar_vis ? - (clist->hscrollbar->requisition.height + - SCROLLBAR_SPACING (clist)) : 0)); - gtk_widget_size_allocate (clist->vscrollbar, &child_allocation); - } - else - { - if (GTK_WIDGET_VISIBLE (clist->vscrollbar)) - gtk_widget_hide (clist->vscrollbar); - } - - if (hscrollbar_vis) - { - if (!GTK_WIDGET_VISIBLE (clist->hscrollbar)) - gtk_widget_show (clist->hscrollbar); - - child_allocation.x = clist->internal_allocation.x; - child_allocation.y = (clist->internal_allocation.y + - clist->internal_allocation.height - - clist->hscrollbar->requisition.height); - child_allocation.width = MAX (1, clist->internal_allocation.width - - (vscrollbar_vis ? - (clist->vscrollbar->requisition.width + - SCROLLBAR_SPACING (clist)) : 0)); - child_allocation.height = clist->hscrollbar->requisition.height; - - gtk_widget_size_allocate (clist->hscrollbar, &child_allocation); - } - else - { - if (GTK_WIDGET_VISIBLE (clist->hscrollbar)) - gtk_widget_hide (clist->hscrollbar); - } - - /* set the vscrollbar adjustments */ - adjust_scrollbars (clist); + adjust_adjustments (clist); } /* GTKCONTAINER @@ -5139,28 +5144,21 @@ gtk_clist_forall (GtkContainer *container, gpointer callback_data) { GtkCList *clist; + guint i; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_CLIST (container)); g_return_if_fail (callback != NULL); + if (!include_internals) + return; + clist = GTK_CLIST (container); - if (include_internals) - { - guint i; - - /* callback for the column buttons */ - for (i = 0; i < clist->columns; i++) - if (clist->column[i].button) - (*callback) (clist->column[i].button, callback_data); - - /* callbacks for the scrollbars */ - if (clist->vscrollbar) - (*callback) (clist->vscrollbar, callback_data); - if (clist->hscrollbar) - (*callback) (clist->hscrollbar, callback_data); - } + /* callback for the column buttons */ + for (i = 0; i < clist->columns; i++) + if (clist->column[i].button) + (*callback) (clist->column[i].button, callback_data); } /* PRIVATE DRAWING FUNCTIONS @@ -5646,8 +5644,7 @@ gtk_clist_get_selection_info (GtkCList *clist, * SCROLLBARS * * functions: - * create_scrollbars - * adjust_scrollbars + * adjust_adjustments * vadjustment_changed * hadjustment_changed * vadjustment_value_changed @@ -5655,119 +5652,41 @@ gtk_clist_get_selection_info (GtkCList *clist, * check_exposures */ static void -create_scrollbars (GtkCList *clist) -{ - GtkAdjustment *adjustment; - - clist->vscrollbar = gtk_vscrollbar_new (NULL); - - adjustment = gtk_range_get_adjustment (GTK_RANGE (clist->vscrollbar)); - - gtk_signal_connect (GTK_OBJECT (adjustment), "changed", - (GtkSignalFunc) vadjustment_changed, - (gpointer) clist); - - gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - (GtkSignalFunc) vadjustment_value_changed, - (gpointer) clist); - - gtk_widget_set_parent (clist->vscrollbar, GTK_WIDGET (clist)); - gtk_widget_show (clist->vscrollbar); - - clist->hscrollbar = gtk_hscrollbar_new (NULL); - - adjustment = gtk_range_get_adjustment (GTK_RANGE (clist->hscrollbar)); - - gtk_signal_connect (GTK_OBJECT (adjustment), "changed", - (GtkSignalFunc) hadjustment_changed, - (gpointer) clist); - - gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - (GtkSignalFunc) hadjustment_value_changed, - (gpointer) clist); - - gtk_widget_set_parent (clist->hscrollbar, GTK_WIDGET (clist)); - gtk_widget_show (clist->hscrollbar); -} - -static void -adjust_scrollbars (GtkCList * clist) +adjust_adjustments (GtkCList * clist) { - GtkRange *vscrollbar; - GtkRange *hscrollbar; + if (!clist->hadjustment || !clist->vadjustment) + return; - vscrollbar = GTK_RANGE (clist->vscrollbar); - vscrollbar->adjustment->page_size = clist->clist_window_height; - vscrollbar->adjustment->page_increment = clist->clist_window_height / 2; - vscrollbar->adjustment->step_increment = 10; - vscrollbar->adjustment->lower = 0; - vscrollbar->adjustment->upper = LIST_HEIGHT (clist); + clist->vadjustment->page_size = clist->clist_window_height; + clist->vadjustment->page_increment = clist->clist_window_height / 2; + clist->vadjustment->step_increment = 10; + clist->vadjustment->lower = 0; + clist->vadjustment->upper = LIST_HEIGHT (clist); if (clist->clist_window_height - clist->voffset > LIST_HEIGHT (clist)) { - vscrollbar->adjustment->value = MAX (0, LIST_HEIGHT (clist) - - clist->clist_window_height); - gtk_signal_emit_by_name (GTK_OBJECT (vscrollbar->adjustment), + clist->vadjustment->value = MAX (0, (LIST_HEIGHT (clist) - + clist->clist_window_height)); + gtk_signal_emit_by_name (GTK_OBJECT (clist->vadjustment), "value_changed"); } - hscrollbar = GTK_RANGE (clist->hscrollbar); - hscrollbar->adjustment->page_size = clist->clist_window_width; - hscrollbar->adjustment->page_increment = clist->clist_window_width / 2; - hscrollbar->adjustment->step_increment = 10; - hscrollbar->adjustment->lower = 0; - hscrollbar->adjustment->upper = LIST_WIDTH (clist); + clist->hadjustment->page_size = clist->clist_window_width; + clist->hadjustment->page_increment = clist->clist_window_width / 2; + clist->hadjustment->step_increment = 10; + clist->hadjustment->lower = 0; + clist->hadjustment->upper = LIST_WIDTH (clist); if (clist->clist_window_width - clist->hoffset > LIST_WIDTH (clist)) { - hscrollbar->adjustment->value = MAX (0, LIST_WIDTH (clist) - - clist->clist_window_width); - gtk_signal_emit_by_name (GTK_OBJECT (hscrollbar->adjustment), + clist->hadjustment->value = MAX (0, (LIST_WIDTH (clist) - + clist->clist_window_width)); + gtk_signal_emit_by_name (GTK_OBJECT (clist->hadjustment), "value_changed"); } - if (LIST_HEIGHT (clist) <= clist->clist_window_height && - clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC) - { - if (GTK_WIDGET_VISIBLE (clist->vscrollbar)) - { - gtk_widget_hide (clist->vscrollbar); - gtk_widget_size_allocate (GTK_WIDGET (clist), - >K_WIDGET (clist)->allocation); - } - } - else - { - if (!GTK_WIDGET_VISIBLE (clist->vscrollbar)) - { - gtk_widget_show (clist->vscrollbar); - gtk_widget_size_allocate (GTK_WIDGET (clist), - >K_WIDGET (clist)->allocation); - } - } - - if (LIST_WIDTH (clist) <= clist->clist_window_width && - clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC) - { - if (GTK_WIDGET_VISIBLE (clist->hscrollbar)) - { - gtk_widget_hide (clist->hscrollbar); - gtk_widget_size_allocate (GTK_WIDGET (clist), - >K_WIDGET (clist)->allocation); - } - } - else - { - if (!GTK_WIDGET_VISIBLE (clist->hscrollbar)) - { - gtk_widget_show (clist->hscrollbar); - gtk_widget_size_allocate (GTK_WIDGET (clist), - >K_WIDGET (clist)->allocation); - } - } - - gtk_signal_emit_by_name (GTK_OBJECT (vscrollbar->adjustment), "changed"); - gtk_signal_emit_by_name (GTK_OBJECT (hscrollbar->adjustment), "changed"); + gtk_signal_emit_by_name (GTK_OBJECT (clist->vadjustment), "changed"); + gtk_signal_emit_by_name (GTK_OBJECT (clist->hadjustment), "changed"); } static void @@ -5808,76 +5727,64 @@ vadjustment_value_changed (GtkAdjustment *adjustment, clist = GTK_CLIST (data); - if (!GTK_WIDGET_DRAWABLE (clist)) + if (!GTK_WIDGET_DRAWABLE (clist) || adjustment != clist->vadjustment) return; value = adjustment->value; - if (adjustment == gtk_range_get_adjustment (GTK_RANGE (clist->vscrollbar))) + if (value > -clist->voffset) { - if (value > -clist->voffset) - { - /* scroll down */ - diff = value + clist->voffset; - - /* we have to re-draw the whole screen here... */ - if (diff >= clist->clist_window_height) - { - clist->voffset = -value; - draw_rows (clist, NULL); - return; - } + /* scroll down */ + diff = value + clist->voffset; - if ((diff != 0) && (diff != clist->clist_window_height)) - gdk_window_copy_area (clist->clist_window, - clist->fg_gc, - 0, 0, - clist->clist_window, - 0, - diff, - clist->clist_window_width, - clist->clist_window_height - diff); - - area.x = 0; - area.y = clist->clist_window_height - diff; - area.width = clist->clist_window_width; - area.height = diff; - } - else + /* we have to re-draw the whole screen here... */ + if (diff >= clist->clist_window_height) { - /* scroll up */ - diff = -clist->voffset - value; + clist->voffset = -value; + draw_rows (clist, NULL); + return; + } - /* we have to re-draw the whole screen here... */ - if (diff >= clist->clist_window_height) - { - clist->voffset = -value; - draw_rows (clist, NULL); - return; - } + if ((diff != 0) && (diff != clist->clist_window_height)) + gdk_window_copy_area (clist->clist_window, clist->fg_gc, + 0, 0, clist->clist_window, 0, diff, + clist->clist_window_width, + clist->clist_window_height - diff); - if ((diff != 0) && (diff != clist->clist_window_height)) - gdk_window_copy_area (clist->clist_window, - clist->fg_gc, - 0, diff, - clist->clist_window, - 0, - 0, - clist->clist_window_width, - clist->clist_window_height - diff); - - area.x = 0; - area.y = 0; - area.width = clist->clist_window_width; - area.height = diff; + area.x = 0; + area.y = clist->clist_window_height - diff; + area.width = clist->clist_window_width; + area.height = diff; + } + else + { + /* scroll up */ + diff = -clist->voffset - value; + /* we have to re-draw the whole screen here... */ + if (diff >= clist->clist_window_height) + { + clist->voffset = -value; + draw_rows (clist, NULL); + return; } - clist->voffset = -value; if ((diff != 0) && (diff != clist->clist_window_height)) - check_exposures (clist); + gdk_window_copy_area (clist->clist_window, clist->fg_gc, + 0, diff, clist->clist_window, 0, 0, + clist->clist_window_width, + clist->clist_window_height - diff); + + area.x = 0; + area.y = 0; + area.width = clist->clist_window_width; + area.height = diff; } + clist->voffset = -value; + if ((diff != 0) && (diff != clist->clist_window_height)) + check_exposures (clist); + draw_rows (clist, &area); } @@ -5898,12 +5805,11 @@ hadjustment_value_changed (GtkAdjustment *adjustment, clist = GTK_CLIST (data); - if (!GTK_WIDGET_DRAWABLE (clist) || - adjustment != gtk_range_get_adjustment (GTK_RANGE (clist->hscrollbar))) + if (!GTK_WIDGET_DRAWABLE (clist) || adjustment != clist->hadjustment) return; value = adjustment->value; - + /* move the column buttons and resize windows */ for (i = 0; i < clist->columns; i++) { @@ -6221,9 +6127,7 @@ gtk_clist_focus (GtkContainer *container, { case GTK_DIR_LEFT: case GTK_DIR_RIGHT: - if (GTK_CLIST_CHILD_HAS_FOCUS (clist) && - (!focus_child || (focus_child && focus_child != clist->vscrollbar && - focus_child != clist->hscrollbar))) + if (GTK_CLIST_CHILD_HAS_FOCUS (clist)) { if (title_focus (clist, direction)) return TRUE; @@ -6234,9 +6138,7 @@ gtk_clist_focus (GtkContainer *container, return TRUE; case GTK_DIR_DOWN: case GTK_DIR_TAB_FORWARD: - if (GTK_CLIST_CHILD_HAS_FOCUS (clist) && - (!focus_child || (focus_child != clist->vscrollbar && - focus_child != clist->hscrollbar))) + if (GTK_CLIST_CHILD_HAS_FOCUS (clist)) { gboolean tf = FALSE; @@ -6264,47 +6166,10 @@ gtk_clist_focus (GtkContainer *container, } GTK_CLIST_SET_FLAG (clist, CLIST_CHILD_HAS_FOCUS); - - if ((!GTK_CLIST_CHILD_HAS_FOCUS (clist) || !focus_child || - (focus_child != clist->vscrollbar && - focus_child != clist->hscrollbar)) && - GTK_WIDGET_VISIBLE (clist->vscrollbar) && - GTK_WIDGET_CAN_FOCUS (clist->vscrollbar)) - { - gtk_widget_grab_focus (clist->vscrollbar); - return TRUE; - } - - if ((!GTK_CLIST_CHILD_HAS_FOCUS (clist) || !focus_child || - focus_child != clist->hscrollbar) && - GTK_WIDGET_VISIBLE (clist->hscrollbar) && - GTK_WIDGET_CAN_FOCUS (clist->hscrollbar)) - { - gtk_widget_grab_focus (clist->hscrollbar); - return TRUE; - } break; case GTK_DIR_UP: case GTK_DIR_TAB_BACKWARD: - if (!focus_child && GTK_CLIST_CHILD_HAS_FOCUS (clist) && - GTK_WIDGET_VISIBLE (clist->hscrollbar) && - GTK_WIDGET_CAN_FOCUS (clist->hscrollbar)) - { - gtk_widget_grab_focus (clist->hscrollbar); - return TRUE; - } - - if ((!focus_child || focus_child == clist->hscrollbar) && - GTK_CLIST_CHILD_HAS_FOCUS (clist) && - GTK_WIDGET_VISIBLE (clist->vscrollbar) && - GTK_WIDGET_CAN_FOCUS (clist->vscrollbar)) - { - gtk_widget_grab_focus (clist->vscrollbar); - return TRUE; - } - - if ((!focus_child || focus_child == clist->hscrollbar || - focus_child == clist->vscrollbar) && + if (!focus_child && GTK_CLIST_CHILD_HAS_FOCUS (clist) && clist->rows) { if (clist->focus_row < 0) @@ -6443,9 +6308,7 @@ title_focus (GtkCList *clist, { case GTK_DIR_TAB_BACKWARD: case GTK_DIR_UP: - if (!focus_child || focus_child == clist->hscrollbar || - focus_child == clist->hscrollbar || - !GTK_CLIST_CHILD_HAS_FOCUS (clist)) + if (!focus_child || !GTK_CLIST_CHILD_HAS_FOCUS (clist)) { if (dir == GTK_DIR_UP) i = COLUMN_FROM_XPIXEL (clist, 0); @@ -6459,16 +6322,14 @@ title_focus (GtkCList *clist, break; case GTK_DIR_LEFT: d = -1; - if (!focus_child || focus_child == clist->hscrollbar || - focus_child == clist->hscrollbar) + if (!focus_child) { i = clist->columns - 1; focus_child = clist->column[i].button; } break; case GTK_DIR_RIGHT: - if (!focus_child || focus_child == clist->hscrollbar || - focus_child == clist->hscrollbar) + if (!focus_child) { i = 0; focus_child = clist->column[i].button; @@ -6631,8 +6492,9 @@ scroll_horizontal (GtkCList *clist, column = COLUMN_FROM_XPIXEL (clist, clist->clist_window_width); if (column < 0) return; - if (COLUMN_LEFT_XPIXEL (clist, column) + clist->column[column].area.width - + CELL_SPACING + COLUMN_INSET - 1 <= clist->clist_window_width && + if (COLUMN_LEFT_XPIXEL (clist, column) + + clist->column[column].area.width + + CELL_SPACING + COLUMN_INSET - 1 <= clist->clist_window_width && column < clist->columns - 1) column++; break; diff --git a/gtk/gtkclist.h b/gtk/gtkclist.h index bbc23c762d..3f20066a12 100644 --- a/gtk/gtkclist.h +++ b/gtk/gtkclist.h @@ -156,10 +156,8 @@ struct _GtkCList gint undo_anchor; /* scrollbars */ - GtkWidget *vscrollbar; - GtkWidget *hscrollbar; - guint8 vscrollbar_policy; - guint8 hscrollbar_policy; + GtkAdjustment *hadjustment; + GtkAdjustment *vadjustment; /* xor GC for the vertical drag line */ GdkGC *xor_gc; @@ -384,13 +382,19 @@ void gtk_clist_construct (GtkCList *clist, gchar *titles[]); /* create a new GtkCList */ -GtkWidget *gtk_clist_new (gint columns); -GtkWidget *gtk_clist_new_with_titles (gint columns, +GtkWidget* gtk_clist_new (gint columns); +GtkWidget* gtk_clist_new_with_titles (gint columns, gchar *titles[]); -/* deprecated function, use gtk_clist_set_shadow_type instead. */ -void gtk_clist_set_border (GtkCList *clist, - GtkShadowType border); +/* set adjustments of clist */ +void gtk_clist_set_hadjustment (GtkCList *clist, + GtkAdjustment *adjustment); +void gtk_clist_set_vadjustment (GtkCList *clist, + GtkAdjustment *adjustment); + +/* get adjustments of clist */ +GtkAdjustment* gtk_clist_get_hadjustment (GtkCList *clist); +GtkAdjustment* gtk_clist_get_vadjustment (GtkCList *clist); /* set the border style of the clist */ void gtk_clist_set_shadow_type (GtkCList *clist, @@ -400,14 +404,6 @@ void gtk_clist_set_shadow_type (GtkCList *clist, void gtk_clist_set_selection_mode (GtkCList *clist, GtkSelectionMode mode); -/* set policy on the scrollbar, to either show them all the time - * or show them only when they are needed, ie., when there is more - * than one page of information - */ -void gtk_clist_set_policy (GtkCList *clist, - GtkPolicyType vscrollbar_policy, - GtkPolicyType hscrollbar_policy); - /* freeze all visual updates of the list, and then thaw the list after * you have made a number of changes and the updates wil occure in a * more efficent mannor than if you made them on a unfrozen list @@ -696,6 +692,17 @@ void gtk_clist_sort (GtkCList *clist); void gtk_clist_set_auto_sort (GtkCList *clist, gboolean auto_sort); + +/* Deprecated methods */ + +/* Use gtk_clist_set_shadow_type instead. */ +void gtk_clist_set_border (GtkCList *clist, + GtkShadowType border); + +/* Completely non-functional */ +void gtk_clist_set_policy (GtkCList *clist, + GtkPolicyType vscrollbar_policy, + GtkPolicyType hscrollbar_policy); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gtk/gtkfilesel.c b/gtk/gtkfilesel.c index c9efc1b317..90a5784617 100644 --- a/gtk/gtkfilesel.c +++ b/gtk/gtkfilesel.c @@ -367,6 +367,8 @@ gtk_file_selection_init (GtkFileSelection *filesel) GtkWidget *list_hbox; GtkWidget *confirm_area; GtkWidget *pulldown_hbox; + GtkWidget *scrolled_win; + char *dir_title [] = { "Directories", }; char *file_title [] = { "Files", }; @@ -410,11 +412,16 @@ gtk_file_selection_init (GtkFileSelection *filesel) gtk_signal_connect (GTK_OBJECT (filesel->dir_list), "select_row", (GtkSignalFunc) gtk_file_selection_dir_button, (gpointer) filesel); - gtk_clist_set_policy (GTK_CLIST (filesel->dir_list), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); - gtk_container_border_width (GTK_CONTAINER (filesel->dir_list), 5); - gtk_box_pack_start (GTK_BOX (list_hbox), filesel->dir_list, TRUE, TRUE, 0); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->dir_list); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0); gtk_widget_show (filesel->dir_list); + gtk_widget_show (scrolled_win); /* The files clist */ filesel->file_list = gtk_clist_new_with_titles (1, file_title); @@ -422,11 +429,16 @@ gtk_file_selection_init (GtkFileSelection *filesel) gtk_signal_connect (GTK_OBJECT (filesel->file_list), "select_row", (GtkSignalFunc) gtk_file_selection_file_button, (gpointer) filesel); - gtk_clist_set_policy (GTK_CLIST (filesel->file_list), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); - gtk_container_border_width (GTK_CONTAINER (filesel->file_list), 5); - gtk_box_pack_start (GTK_BOX (list_hbox), filesel->file_list, TRUE, TRUE, 0); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0); gtk_widget_show (filesel->file_list); + gtk_widget_show (scrolled_win); /* action area for packing buttons into. */ filesel->action_area = gtk_hbox_new (TRUE, 0); diff --git a/gtk/gtkfontsel.c b/gtk/gtkfontsel.c index 600b8e8850..7c664306e5 100644 --- a/gtk/gtkfontsel.c +++ b/gtk/gtkfontsel.c @@ -81,6 +81,7 @@ #include "gtksignal.h" #include "gtktable.h" #include "gtkvbox.h" +#include "gtkscrolledwindow.h" /* The maximum number of fontnames requested with XListFonts(). */ #define MAX_FONTS 32767 @@ -431,6 +432,7 @@ gtk_font_selection_class_init(GtkFontSelectionClass *klass) static void gtk_font_selection_init(GtkFontSelection *fontsel) { + GtkWidget *scrolled_win; GtkWidget *text_frame; GtkWidget *text_box, *frame; GtkWidget *table, *label, *hbox, *hbox2, *clist, *button, *vbox, *alignment; @@ -524,33 +526,43 @@ gtk_font_selection_init(GtkFontSelection *fontsel) fontsel->font_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_clist)); gtk_clist_set_column_width (GTK_CLIST(fontsel->font_clist), 0, 300); - gtk_clist_set_policy(GTK_CLIST(fontsel->font_clist), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_widget_set_usize (fontsel->font_clist, FONT_LIST_WIDTH, FONT_LIST_HEIGHT); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->font_clist); - gtk_table_attach (GTK_TABLE (table), fontsel->font_clist, 0, 1, 2, 3, + gtk_widget_show(scrolled_win); + + gtk_table_attach (GTK_TABLE (table), scrolled_win, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); fontsel->font_style_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_style_clist)); gtk_clist_set_column_width (GTK_CLIST(fontsel->font_style_clist), 0, 300); - gtk_clist_set_policy(GTK_CLIST(fontsel->font_style_clist), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_widget_set_usize (fontsel->font_style_clist, FONT_STYLE_LIST_WIDTH, -1); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_style_clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->font_style_clist); - gtk_table_attach (GTK_TABLE (table), fontsel->font_style_clist, 1, 2, 2, 3, + gtk_widget_show(scrolled_win); + gtk_table_attach (GTK_TABLE (table), scrolled_win, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); fontsel->size_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->size_clist)); - gtk_clist_set_policy(GTK_CLIST(fontsel->size_clist), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_widget_set_usize (fontsel->size_clist, FONT_SIZE_LIST_WIDTH, -1); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->size_clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->size_clist); - gtk_table_attach (GTK_TABLE (table), fontsel->size_clist, 2, 3, 2, 3, + gtk_widget_show(scrolled_win); + gtk_table_attach (GTK_TABLE (table), scrolled_win, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); @@ -683,16 +695,19 @@ gtk_font_selection_init(GtkFontSelection *fontsel) gtk_notebook_append_page (GTK_NOTEBOOK (fontsel), fontsel->info_vbox, label); - fontsel->info_clist = gtk_clist_new_with_titles(3, titles); + fontsel->info_clist = gtk_clist_new_with_titles (3, titles); gtk_widget_set_usize (fontsel->info_clist, 390, 150); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 0, 130); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 1, 130); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 2, 130); gtk_clist_column_titles_passive(GTK_CLIST(fontsel->info_clist)); - gtk_clist_set_policy(GTK_CLIST(fontsel->info_clist), GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->info_clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(fontsel->info_clist); - gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), fontsel->info_clist, + gtk_widget_show(scrolled_win); + gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), scrolled_win, TRUE, TRUE, 0); /* Insert the property names */ @@ -806,9 +821,13 @@ gtk_font_selection_init(GtkFontSelection *fontsel) gtk_widget_set_usize (clist, 100, filter_heights[prop]); gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_MULTIPLE); gtk_clist_column_titles_hide(GTK_CLIST(clist)); - gtk_clist_set_policy(GTK_CLIST(clist), GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); gtk_widget_show(clist); + gtk_widget_show(scrolled_win); /* For the bottom-right cell we add the 'Reset Filter' button. */ if (top == 2 && left == 2) @@ -818,7 +837,7 @@ gtk_font_selection_init(GtkFontSelection *fontsel) gtk_table_attach (GTK_TABLE (table), vbox, left, left + 1, top + 1, top + 2, GTK_FILL, GTK_FILL, 0, 0); - gtk_box_pack_start (GTK_BOX (vbox), clist, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); alignment = gtk_alignment_new(0.5, 0.0, 0.8, 0.0); gtk_widget_show(alignment); @@ -832,7 +851,7 @@ gtk_font_selection_init(GtkFontSelection *fontsel) fontsel); } else - gtk_table_attach (GTK_TABLE (table), clist, + gtk_table_attach (GTK_TABLE (table), scrolled_win, left, left + 1, top + 1, top + 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 944cc81ec2..046e5eb472 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -147,12 +147,8 @@ gtk_scrolled_window_set_arg (GtkObject *object, 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); + gtk_container_add (GTK_CONTAINER (scrolled_window), viewport); case ARG_HSCROLLBAR_POLICY: gtk_scrolled_window_set_policy (scrolled_window, GTK_VALUE_ENUM (*arg), @@ -205,6 +201,7 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window) scrolled_window->vscrollbar = NULL; scrolled_window->hscrollbar_policy = GTK_POLICY_ALWAYS; scrolled_window->vscrollbar_policy = GTK_POLICY_ALWAYS; + scrolled_window->autogenerated_viewport = FALSE; } GtkWidget* @@ -216,7 +213,7 @@ gtk_scrolled_window_new (GtkAdjustment *hadjustment, scrolled_window = gtk_type_new (GTK_TYPE_SCROLLED_WINDOW); gtk_scrolled_window_construct (GTK_SCROLLED_WINDOW (scrolled_window), hadjustment, vadjustment); - + return scrolled_window; } @@ -230,14 +227,13 @@ gtk_scrolled_window_construct (GtkScrolledWindow *scrolled_window, 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->hscrollbar = gtk_hscrollbar_new (hadjustment); + scrolled_window->vscrollbar = gtk_vscrollbar_new (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); + hadjustment = + gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)); + vadjustment = + gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)); gtk_signal_connect (GTK_OBJECT (hadjustment), "changed", (GtkSignalFunc) gtk_scrolled_window_adjustment_changed, @@ -246,18 +242,12 @@ gtk_scrolled_window_construct (GtkScrolledWindow *scrolled_window, (GtkSignalFunc) gtk_scrolled_window_adjustment_changed, (gpointer) scrolled_window); - scrolled_window->hscrollbar = gtk_hscrollbar_new (hadjustment); - scrolled_window->vscrollbar = gtk_vscrollbar_new (vadjustment); - - gtk_widget_set_parent (scrolled_window->viewport, GTK_WIDGET (scrolled_window)); gtk_widget_set_parent (scrolled_window->hscrollbar, GTK_WIDGET (scrolled_window)); gtk_widget_set_parent (scrolled_window->vscrollbar, GTK_WIDGET (scrolled_window)); - gtk_widget_show (scrolled_window->viewport); gtk_widget_show (scrolled_window->hscrollbar); gtk_widget_show (scrolled_window->vscrollbar); - gtk_widget_ref (scrolled_window->viewport); gtk_widget_ref (scrolled_window->hscrollbar); gtk_widget_ref (scrolled_window->vscrollbar); } @@ -344,7 +334,8 @@ gtk_scrolled_window_map (GtkWidget *widget) GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); scrolled_window = GTK_SCROLLED_WINDOW (widget); - if (GTK_WIDGET_VISIBLE (scrolled_window->viewport) && + if (scrolled_window->viewport && + GTK_WIDGET_VISIBLE (scrolled_window->viewport) && !GTK_WIDGET_MAPPED (scrolled_window->viewport)) gtk_widget_map (scrolled_window->viewport); @@ -371,7 +362,8 @@ gtk_scrolled_window_unmap (GtkWidget *widget) GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); scrolled_window = GTK_SCROLLED_WINDOW (widget); - if (GTK_WIDGET_MAPPED (scrolled_window->viewport)) + if (scrolled_window->viewport && + GTK_WIDGET_MAPPED (scrolled_window->viewport)) gtk_widget_unmap (scrolled_window->viewport); if (GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) @@ -397,7 +389,8 @@ gtk_scrolled_window_draw (GtkWidget *widget, { scrolled_window = GTK_SCROLLED_WINDOW (widget); - if (gtk_widget_intersect (scrolled_window->viewport, area, &child_area)) + if (scrolled_window->viewport && + gtk_widget_intersect (scrolled_window->viewport, area, &child_area)) gtk_widget_draw (scrolled_window->viewport, &child_area); if (gtk_widget_intersect (scrolled_window->hscrollbar, area, &child_area)) @@ -425,7 +418,8 @@ gtk_scrolled_window_size_request (GtkWidget *widget, requisition->width = 0; requisition->height = 0; - if (GTK_WIDGET_VISIBLE (scrolled_window->viewport)) + if (scrolled_window->viewport && + GTK_WIDGET_VISIBLE (scrolled_window->viewport)) { gtk_widget_size_request (scrolled_window->viewport, &scrolled_window->viewport->requisition); @@ -483,7 +477,8 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget, if (scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS) scrolled_window->vscrollbar_visible = TRUE; - if (GTK_WIDGET_VISIBLE (scrolled_window->viewport)) + if (scrolled_window->viewport && + GTK_WIDGET_VISIBLE (scrolled_window->viewport)) { count = 0; @@ -562,13 +557,75 @@ gtk_scrolled_window_add (GtkContainer *container, GtkWidget *widget) { GtkScrolledWindow *scrolled_window; + GtkArgInfo *info_hadj; + GtkArgInfo *info_vadj; + GtkArg arg; + gchar *error; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container)); g_return_if_fail (widget != NULL); scrolled_window = GTK_SCROLLED_WINDOW (container); - gtk_container_add (GTK_CONTAINER (scrolled_window->viewport), widget); + + if (scrolled_window->viewport) + gtk_container_remove (container, scrolled_window->viewport); + + error = gtk_object_arg_get_info (GTK_OBJECT_TYPE (widget), + "hadjustment", &info_hadj); + if (!error) + { + error = gtk_object_arg_get_info (GTK_OBJECT_TYPE (widget), + "vadjustment", &info_vadj); + + if (!error) + { + gtk_object_set (GTK_OBJECT (widget), + "hadjustment", + gtk_scrolled_window_get_hadjustment + (scrolled_window), + "vadjustment", + gtk_scrolled_window_get_vadjustment + (scrolled_window), + NULL); + scrolled_window->viewport = widget; + gtk_widget_set_parent (widget, GTK_WIDGET (scrolled_window)); + gtk_widget_ref (widget); + scrolled_window->autogenerated_viewport = FALSE; + } + } + + if (error) + { + g_free (error); + + scrolled_window->viewport = gtk_viewport_new + (gtk_scrolled_window_get_hadjustment (scrolled_window), + gtk_scrolled_window_get_vadjustment (scrolled_window)); + gtk_widget_set_parent (scrolled_window->viewport, + GTK_WIDGET (scrolled_window)); + gtk_widget_ref (scrolled_window->viewport); + gtk_widget_show (scrolled_window->viewport); + scrolled_window->autogenerated_viewport = FALSE; + + gtk_container_add (GTK_CONTAINER (scrolled_window->viewport), widget); + + widget = scrolled_window->viewport; + } + + if (GTK_WIDGET_VISIBLE (scrolled_window)) + { + if (GTK_WIDGET_REALIZED (scrolled_window) && + !GTK_WIDGET_REALIZED (widget)) + gtk_widget_realize (widget); + + if (GTK_WIDGET_MAPPED (scrolled_window) && + !GTK_WIDGET_MAPPED (widget)) + gtk_widget_map (widget); + } + + if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (scrolled_window)) + gtk_widget_queue_resize (widget); } static void @@ -582,15 +639,18 @@ gtk_scrolled_window_remove (GtkContainer *container, g_return_if_fail (widget != NULL); scrolled_window = GTK_SCROLLED_WINDOW (container); - if (scrolled_window->viewport == widget || scrolled_window->hscrollbar == widget || scrolled_window->vscrollbar == widget) { /* this happens during destroy */ + + if (scrolled_window->viewport == widget) + scrolled_window->autogenerated_viewport = FALSE; + gtk_widget_unparent (widget); } - else + else if (scrolled_window->autogenerated_viewport) gtk_container_remove (GTK_CONTAINER (scrolled_window->viewport), widget); } @@ -608,16 +668,13 @@ gtk_scrolled_window_forall (GtkContainer *container, scrolled_window = GTK_SCROLLED_WINDOW (container); + if (scrolled_window->viewport) + (* callback) (scrolled_window->viewport, callback_data); if (include_internals) { - if (scrolled_window->viewport) - (* callback) (scrolled_window->viewport, callback_data); - (* callback) (scrolled_window->vscrollbar, callback_data); (* callback) (scrolled_window->hscrollbar, callback_data); } - else if (scrolled_window->viewport) - gtk_container_foreach (GTK_CONTAINER (scrolled_window->viewport), callback, callback_data); } static void @@ -649,6 +706,7 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment, gpointer data) { GtkScrolledWindow *scrolled_win; + gboolean visible; g_return_if_fail (adjustment != NULL); g_return_if_fail (data != NULL); @@ -659,16 +717,22 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment, { if (scrolled_win->hscrollbar_policy == GTK_POLICY_AUTOMATIC) { + visible = scrolled_win->hscrollbar_visible; scrolled_win->hscrollbar_visible = ((adjustment->upper - adjustment->lower) > adjustment->page_size); + if (scrolled_win->hscrollbar_visible != visible) + gtk_widget_queue_resize (GTK_WIDGET (scrolled_win)); } } else if (adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_win->vscrollbar))) { if (scrolled_win->vscrollbar_policy == GTK_POLICY_AUTOMATIC) { + visible = scrolled_win->vscrollbar_visible; scrolled_win->vscrollbar_visible = ((adjustment->upper - adjustment->lower) > adjustment->page_size); + if (scrolled_win->vscrollbar_visible != visible) + gtk_widget_queue_resize (GTK_WIDGET (scrolled_win)); } } else diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h index 2c22202c30..a29c7b2e94 100644 --- a/gtk/gtkscrolledwindow.h +++ b/gtk/gtkscrolledwindow.h @@ -49,10 +49,11 @@ struct _GtkScrolledWindow GtkWidget *hscrollbar; GtkWidget *vscrollbar; - guint8 hscrollbar_policy; - guint8 vscrollbar_policy; - gint hscrollbar_visible : 1; - gint vscrollbar_visible : 1; + guint hscrollbar_policy : 2; + guint vscrollbar_policy : 2; + guint hscrollbar_visible : 1; + guint vscrollbar_visible : 1; + guint autogenerated_viewport : 1; }; struct _GtkScrolledWindowClass diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c index bc9f9460e7..1baf3a8874 100644 --- a/gtk/gtkviewport.c +++ b/gtk/gtkviewport.c @@ -140,17 +140,11 @@ gtk_viewport_set_arg (GtkObject *object, GtkAdjustment *adjustment; case ARG_HADJUSTMENT: - g_return_if_fail (viewport->hadjustment == NULL); adjustment = GTK_VALUE_POINTER (*arg); - if (!adjustment) - adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0); gtk_viewport_set_hadjustment (viewport, adjustment); break; case ARG_VADJUSTMENT: - g_return_if_fail (viewport->vadjustment == NULL); adjustment = GTK_VALUE_POINTER (*arg); - if (!adjustment) - adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0); gtk_viewport_set_vadjustment (viewport, adjustment); break; case ARG_SHADOW_TYPE: @@ -210,12 +204,6 @@ gtk_viewport_new (GtkAdjustment *hadjustment, viewport = gtk_type_new (gtk_viewport_get_type ()); - if (!hadjustment) - hadjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0); - - if (!vadjustment) - vadjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0); - gtk_viewport_set_hadjustment (viewport, hadjustment); gtk_viewport_set_vadjustment (viewport, vadjustment); @@ -257,17 +245,22 @@ gtk_viewport_set_hadjustment (GtkViewport *viewport, { g_return_if_fail (viewport != NULL); g_return_if_fail (GTK_IS_VIEWPORT (viewport)); - g_return_if_fail (adjustment != NULL); + if (adjustment) + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - if (viewport->hadjustment != adjustment) + if (viewport->hadjustment && viewport->hadjustment != adjustment) { - if (viewport->hadjustment) - { - gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment), - (gpointer) viewport); - gtk_object_unref (GTK_OBJECT (viewport->hadjustment)); - } + gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment), + (gpointer) viewport); + gtk_object_unref (GTK_OBJECT (viewport->hadjustment)); + } + if (!adjustment) + adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0)); + + if (viewport->hadjustment != adjustment) + { viewport->hadjustment = adjustment; gtk_object_ref (GTK_OBJECT (viewport->hadjustment)); gtk_object_sink (GTK_OBJECT (viewport->hadjustment)); @@ -289,17 +282,22 @@ gtk_viewport_set_vadjustment (GtkViewport *viewport, { g_return_if_fail (viewport != NULL); g_return_if_fail (GTK_IS_VIEWPORT (viewport)); - g_return_if_fail (adjustment != NULL); + if (adjustment) + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - if (viewport->vadjustment != adjustment) + if (viewport->vadjustment && viewport->vadjustment != adjustment) { - if (viewport->vadjustment) - { - gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment), - (gpointer) viewport); - gtk_object_unref (GTK_OBJECT (viewport->vadjustment)); - } + gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment), + (gpointer) viewport); + gtk_object_unref (GTK_OBJECT (viewport->vadjustment)); + } + + if (!adjustment) + adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0)); + if (viewport->vadjustment != adjustment) + { viewport->vadjustment = adjustment; gtk_object_ref (GTK_OBJECT (viewport->vadjustment)); gtk_object_sink (GTK_OBJECT (viewport->vadjustment)); diff --git a/gtk/testgtk.c b/gtk/testgtk.c index 98cb6f20ad..1aafdbc2c2 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -3261,7 +3261,7 @@ create_list (void) scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), - GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0); gtk_widget_set_usize (scrolled_win, -1, 300); @@ -3876,6 +3876,7 @@ create_clist (void) GtkWidget *clist; GtkWidget *button; GtkWidget *separator; + GtkWidget *scrolled_win; GtkWidget *undo_button; GtkWidget *label; @@ -3905,6 +3906,12 @@ create_clist (void) /* create GtkCList here so we have a pointer to throw at the * button callbacks -- more is done with it later */ clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles); + gtk_widget_show (clist); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (scrolled_win), clist); /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/ gtk_signal_connect (GTK_OBJECT (clist), "click_column", @@ -4014,8 +4021,6 @@ create_clist (void) gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50); gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_justification (GTK_CLIST (clist), 1, GTK_JUSTIFY_RIGHT); @@ -4062,8 +4067,8 @@ create_clist (void) } } - gtk_container_border_width (GTK_CONTAINER (clist), 5); - gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); @@ -4427,6 +4432,7 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree) static GtkWidget *export_window = NULL; static GtkCTree *export_ctree; GtkWidget *vbox; + GtkWidget *scrolled_win; GtkWidget *button; GtkWidget *sep; GNode *gnode; @@ -4459,12 +4465,15 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree) export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title)); gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (export_ctree), - TRUE, TRUE, 0); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), + GTK_WIDGET (export_ctree)); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_clist_set_selection_mode (GTK_CLIST (export_ctree), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (export_ctree), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200); gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200); gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200); @@ -4732,6 +4741,7 @@ void create_ctree (void) static GtkWidget *window = NULL; GtkTooltips *tooltips; GtkCTree *ctree; + GtkWidget *scrolled_win; GtkWidget *vbox; GtkWidget *bbox; GtkWidget *mbox; @@ -4866,10 +4876,13 @@ void create_ctree (void) gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical", GTK_SIGNAL_FUNC (after_press), NULL); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree)); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_min_width (GTK_CLIST (ctree), 0, 50); gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE); gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200); @@ -7997,7 +8010,6 @@ create_main_window (void) gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS); gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0); box2 = gtk_vbox_new (FALSE, 0); diff --git a/tests/testgtk.c b/tests/testgtk.c index 98cb6f20ad..1aafdbc2c2 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -3261,7 +3261,7 @@ create_list (void) scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), - GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0); gtk_widget_set_usize (scrolled_win, -1, 300); @@ -3876,6 +3876,7 @@ create_clist (void) GtkWidget *clist; GtkWidget *button; GtkWidget *separator; + GtkWidget *scrolled_win; GtkWidget *undo_button; GtkWidget *label; @@ -3905,6 +3906,12 @@ create_clist (void) /* create GtkCList here so we have a pointer to throw at the * button callbacks -- more is done with it later */ clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles); + gtk_widget_show (clist); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (scrolled_win), clist); /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/ gtk_signal_connect (GTK_OBJECT (clist), "click_column", @@ -4014,8 +4021,6 @@ create_clist (void) gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50); gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_justification (GTK_CLIST (clist), 1, GTK_JUSTIFY_RIGHT); @@ -4062,8 +4067,8 @@ create_clist (void) } } - gtk_container_border_width (GTK_CONTAINER (clist), 5); - gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); @@ -4427,6 +4432,7 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree) static GtkWidget *export_window = NULL; static GtkCTree *export_ctree; GtkWidget *vbox; + GtkWidget *scrolled_win; GtkWidget *button; GtkWidget *sep; GNode *gnode; @@ -4459,12 +4465,15 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree) export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title)); gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (export_ctree), - TRUE, TRUE, 0); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), + GTK_WIDGET (export_ctree)); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_clist_set_selection_mode (GTK_CLIST (export_ctree), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (export_ctree), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200); gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200); gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200); @@ -4732,6 +4741,7 @@ void create_ctree (void) static GtkWidget *window = NULL; GtkTooltips *tooltips; GtkCTree *ctree; + GtkWidget *scrolled_win; GtkWidget *vbox; GtkWidget *bbox; GtkWidget *mbox; @@ -4866,10 +4876,13 @@ void create_ctree (void) gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical", GTK_SIGNAL_FUNC (after_press), NULL); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0); + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree)); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED); - gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS, - GTK_POLICY_AUTOMATIC); gtk_clist_set_column_min_width (GTK_CLIST (ctree), 0, 50); gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE); gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200); @@ -7997,7 +8010,6 @@ create_main_window (void) gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS); gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0); box2 = gtk_vbox_new (FALSE, 0); |