summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Hamann <lars@gtk.org>1998-11-05 15:44:22 +0000
committerLars Hamann <lars@src.gnome.org>1998-11-05 15:44:22 +0000
commit00fbbe68b035f9e2888b0005e30370cb6913be39 (patch)
tree9e450c963e020e15e6b77b124ec8fb36e58d2350
parent6a227eec1cd13cd5b364b2f1f3c77febc5d70de5 (diff)
downloadgtk+-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--ChangeLog70
-rw-r--r--ChangeLog.pre-2-070
-rw-r--r--ChangeLog.pre-2-1070
-rw-r--r--ChangeLog.pre-2-270
-rw-r--r--ChangeLog.pre-2-470
-rw-r--r--ChangeLog.pre-2-670
-rw-r--r--ChangeLog.pre-2-870
-rw-r--r--gtk/gtkclist.c754
-rw-r--r--gtk/gtkclist.h41
-rw-r--r--gtk/gtkfilesel.c24
-rw-r--r--gtk/gtkfontsel.c53
-rw-r--r--gtk/gtkscrolledwindow.c128
-rw-r--r--gtk/gtkscrolledwindow.h9
-rw-r--r--gtk/gtkviewport.c54
-rw-r--r--gtk/testgtk.c38
-rw-r--r--tests/testgtk.c38
16 files changed, 1053 insertions, 576 deletions
diff --git a/ChangeLog b/ChangeLog
index b873509e84..ad8a33cb27 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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),
- &GTK_WIDGET (clist)->allocation);
- }
- }
- else
- {
- if (!GTK_WIDGET_VISIBLE (clist->vscrollbar))
- {
- gtk_widget_show (clist->vscrollbar);
- gtk_widget_size_allocate (GTK_WIDGET (clist),
- &GTK_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),
- &GTK_WIDGET (clist)->allocation);
- }
- }
- else
- {
- if (!GTK_WIDGET_VISIBLE (clist->hscrollbar))
- {
- gtk_widget_show (clist->hscrollbar);
- gtk_widget_size_allocate (GTK_WIDGET (clist),
- &GTK_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);