]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtknotebook.c
Merge branch 'notebooks-without-mouse-scrolling'
[~andy/gtk] / gtk / gtknotebook.c
index f6e3b9de9018c0014869211a6daa5ff69996fe26..456be285cedcb3b14adf4360ca5cc69ff98e6aae 100644 (file)
 
 #include "config.h"
 
+#include "gtknotebook.h"
+
 #include <stdio.h>
 #include <string.h>
 
 #include <gdk/gdkkeysyms.h>
 
-#undef GTK_DISABLE_DEPRECATED
-
-#include "gtknotebook.h"
 #include "gtkmain.h"
 #include "gtkmenu.h"
 #include "gtkmenuitem.h"
 #include "gtklabel.h"
+#include "gtksizerequest.h"
 #include "gtkintl.h"
 #include "gtkmarshalers.h"
 #include "gtkbindings.h"
 #include "gtkdnd.h"
 #include "gtkbuildable.h"
 
-#include "gtkalias.h"
-
 #define SCROLL_DELAY_FACTOR   5
 #define SCROLL_THRESHOLD      12
 #define DND_THRESHOLD_MULTIPLIER 4
 #define FRAMES_PER_SECOND     45
 #define MSECS_BETWEEN_UPDATES (1000 / FRAMES_PER_SECOND)
 
+typedef struct _GtkNotebookPage GtkNotebookPage;
+
+typedef enum
+{
+  DRAG_OPERATION_NONE,
+  DRAG_OPERATION_REORDER,
+  DRAG_OPERATION_DETACH
+} GtkNotebookDragOperation;
+
+enum {
+  ACTION_WIDGET_START,
+  ACTION_WIDGET_END,
+  N_ACTION_WIDGETS
+};
+
+struct _GtkNotebookPrivate
+{
+  GtkNotebookDragOperation   operation;
+  GtkNotebookPage           *cur_page;
+  GtkNotebookPage           *detached_tab;
+  GtkTargetList             *source_targets;
+  GtkWidget                 *action_widget[N_ACTION_WIDGETS];
+  GtkWidget                 *dnd_window;
+  GtkWidget                 *menu;
+
+  GdkWindow               *drag_window;
+  GdkWindow               *event_window;
+
+  GList         *children;
+  GList         *first_tab;             /* The first tab visible (for scrolling notebooks) */
+  GList         *focus_tab;
+
+  gint           drag_begin_x;
+  gint           drag_begin_y;
+  gint           drag_offset_x;
+  gint           drag_offset_y;
+  gint           drag_window_x;
+  gint           drag_window_y;
+  gint           mouse_x;
+  gint           mouse_y;
+  gint           pressed_button;
+
+  gpointer       group;
+
+  guint          dnd_timer;
+  guint          switch_tab_timer;
+
+  guint16        tab_hborder;
+  guint16        tab_vborder;
+
+  guint32        timer;
+  guint32        timestamp;
+
+  guint          button             : 2;
+  guint          child_has_focus    : 1;
+  guint          click_child        : 3;
+  guint          during_detach      : 1;
+  guint          during_reorder     : 1;
+  guint          focus_out          : 1; /* Flag used by ::move-focus-out implementation */
+  guint          has_scrolled       : 1;
+  guint          have_visible_child : 1;
+  guint          homogeneous        : 1;
+  guint          in_child           : 3;
+  guint          need_timer         : 1;
+  guint          show_border        : 1;
+  guint          show_tabs          : 1;
+  guint          scrollable         : 1;
+  guint          tab_pos            : 2;
+
+  guint          has_before_previous : 1;
+  guint          has_before_next     : 1;
+  guint          has_after_previous  : 1;
+  guint          has_after_next      : 1;
+};
+
 enum {
   SWITCH_PAGE,
   FOCUS_TAB,
@@ -89,13 +162,6 @@ typedef enum
   POINTER_BETWEEN
 } GtkNotebookPointerPosition;
 
-typedef enum
-{
-  DRAG_OPERATION_NONE,
-  DRAG_OPERATION_REORDER,
-  DRAG_OPERATION_DETACH
-} GtkNotebookDragOperation;
-
 #define ARROW_IS_LEFT(arrow)  ((arrow) == ARROW_LEFT_BEFORE || (arrow) == ARROW_LEFT_AFTER)
 #define ARROW_IS_BEFORE(arrow) ((arrow) == ARROW_LEFT_BEFORE || (arrow) == ARROW_RIGHT_BEFORE)
 
@@ -105,14 +171,9 @@ enum {
   PROP_SHOW_TABS,
   PROP_SHOW_BORDER,
   PROP_SCROLLABLE,
-  PROP_TAB_BORDER,
-  PROP_TAB_HBORDER,
-  PROP_TAB_VBORDER,
   PROP_PAGE,
   PROP_ENABLE_POPUP,
-  PROP_GROUP_ID,
   PROP_GROUP,
-  PROP_HOMOGENEOUS
 };
 
 enum {
@@ -127,12 +188,6 @@ enum {
   CHILD_PROP_DETACHABLE
 };
 
-enum {
-  ACTION_WIDGET_START,
-  ACTION_WIDGET_END,
-  N_ACTION_WIDGETS
-};
-
 #define GTK_NOTEBOOK_PAGE(_glist_)         ((GtkNotebookPage *)((GList *)(_glist_))->data)
 
 /* some useful defines for calculating coords */
@@ -142,7 +197,7 @@ enum {
 #define PAGE_TOP_Y(_page_)    (((GtkNotebookPage *) (_page_))->allocation.y)
 #define PAGE_BOTTOM_Y(_page_) (((GtkNotebookPage *) (_page_))->allocation.y + ((GtkNotebookPage *) (_page_))->allocation.height)
 #define PAGE_MIDDLE_Y(_page_) (((GtkNotebookPage *) (_page_))->allocation.y + ((GtkNotebookPage *) (_page_))->allocation.height / 2)
-#define NOTEBOOK_IS_TAB_LABEL_PARENT(_notebook_,_page_) (((GtkNotebookPage *) (_page_))->tab_label->parent == ((GtkWidget *) (_notebook_)))
+#define NOTEBOOK_IS_TAB_LABEL_PARENT(_notebook_,_page_) (gtk_widget_get_parent (((GtkNotebookPage *) (_page_))->tab_label) == ((GtkWidget *) (_notebook_)))
 
 struct _GtkNotebookPage
 {
@@ -171,42 +226,6 @@ struct _GtkNotebookPage
   gulong notify_visible_handler;
 };
 
-#define GTK_NOTEBOOK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_NOTEBOOK, GtkNotebookPrivate))
-
-typedef struct _GtkNotebookPrivate GtkNotebookPrivate;
-
-struct _GtkNotebookPrivate
-{
-  gpointer group;
-  gint  mouse_x;
-  gint  mouse_y;
-  gint  pressed_button;
-  guint dnd_timer;
-  guint switch_tab_timer;
-
-  gint  drag_begin_x;
-  gint  drag_begin_y;
-
-  gint  drag_offset_x;
-  gint  drag_offset_y;
-
-  GtkWidget *dnd_window;
-  GtkTargetList *source_targets;
-  GtkNotebookDragOperation operation;
-  GdkWindow *drag_window;
-  gint drag_window_x;
-  gint drag_window_y;
-  GtkNotebookPage *detached_tab;
-
-  guint32 timestamp;
-
-  GtkWidget *action_widget[N_ACTION_WIDGETS];
-
-  guint during_reorder : 1;
-  guint during_detach  : 1;
-  guint has_scrolled   : 1;
-};
-
 static const GtkTargetEntry notebook_targets [] = {
   { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, 0 },
 };
@@ -233,6 +252,16 @@ static gboolean gtk_notebook_reorder_tab         (GtkNotebook      *notebook,
                                                  gboolean          move_to_last);
 static void     gtk_notebook_remove_tab_label    (GtkNotebook      *notebook,
                                                  GtkNotebookPage  *page);
+static void     gtk_notebook_set_tab_label_packing   (GtkNotebook  *notebook,
+                                                      GtkWidget    *child,
+                                                      gboolean      expand,
+                                                      gboolean      fill,
+                                                      GtkPackType   pack_type);
+static void     gtk_notebook_query_tab_label_packing (GtkNotebook  *notebook,
+                                                      GtkWidget    *child,
+                                                      gboolean     *expand,
+                                                      gboolean     *fill,
+                                                      GtkPackType  *pack_type);
 
 /*** GtkObject Methods ***/
 static void gtk_notebook_destroy             (GtkObject        *object);
@@ -256,8 +285,6 @@ static void gtk_notebook_size_allocate       (GtkWidget        *widget,
                                              GtkAllocation    *allocation);
 static gint gtk_notebook_expose              (GtkWidget        *widget,
                                              GdkEventExpose   *event);
-static gboolean gtk_notebook_scroll          (GtkWidget        *widget,
-                                              GdkEventScroll   *event);
 static gint gtk_notebook_button_press        (GtkWidget        *widget,
                                              GdkEventButton   *event);
 static gint gtk_notebook_button_release      (GtkWidget        *widget,
@@ -395,7 +422,7 @@ static void gtk_notebook_calc_tabs           (GtkNotebook      *notebook,
 
 /*** GtkNotebook Page Switch Methods ***/
 static void gtk_notebook_real_switch_page    (GtkNotebook      *notebook,
-                                             GtkNotebookPage  *page,
+                                             GtkWidget        *child,
                                              guint             page_num);
 
 /*** GtkNotebook Page Switch Functions ***/
@@ -417,15 +444,6 @@ static void gtk_notebook_menu_detacher       (GtkWidget        *widget,
                                              GtkMenu          *menu);
 
 /*** GtkNotebook Private Setters ***/
-static void gtk_notebook_set_homogeneous_tabs_internal (GtkNotebook *notebook,
-                                                       gboolean     homogeneous);
-static void gtk_notebook_set_tab_border_internal       (GtkNotebook *notebook,
-                                                       guint        border_width);
-static void gtk_notebook_set_tab_hborder_internal      (GtkNotebook *notebook,
-                                                       guint        tab_hborder);
-static void gtk_notebook_set_tab_vborder_internal      (GtkNotebook *notebook,
-                                                       guint        tab_vborder);
-
 static void gtk_notebook_update_tab_states             (GtkNotebook *notebook);
 static gboolean gtk_notebook_mnemonic_activate_switch_page (GtkWidget *child,
                                                            gboolean overload,
@@ -464,10 +482,10 @@ add_tab_bindings (GtkBindingSet    *binding_set,
                  GdkModifierType   modifiers,
                  GtkDirectionType  direction)
 {
-  gtk_binding_entry_add_signal (binding_set, GDK_Tab, modifiers,
+  gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, modifiers,
                                 "move_focus_out", 1,
                                 GTK_TYPE_DIRECTION_TYPE, direction);
-  gtk_binding_entry_add_signal (binding_set, GDK_KP_Tab, modifiers,
+  gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, modifiers,
                                 "move_focus_out", 1,
                                 GTK_TYPE_DIRECTION_TYPE, direction);
 }
@@ -477,7 +495,7 @@ add_arrow_bindings (GtkBindingSet    *binding_set,
                    guint             keysym,
                    GtkDirectionType  direction)
 {
-  guint keypad_keysym = keysym - GDK_Left + GDK_KP_Left;
+  guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left;
   
   gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK,
                                 "move_focus_out", 1,
@@ -493,7 +511,7 @@ add_reorder_bindings (GtkBindingSet    *binding_set,
                      GtkDirectionType  direction,
                      gboolean          move_to_last)
 {
-  guint keypad_keysym = keysym - GDK_Left + GDK_KP_Left;
+  guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left;
 
   gtk_binding_entry_add_signal (binding_set, keysym, GDK_MOD1_MASK,
                                "reorder_tab", 2,
@@ -541,7 +559,6 @@ gtk_notebook_class_init (GtkNotebookClass *class)
   widget_class->size_request = gtk_notebook_size_request;
   widget_class->size_allocate = gtk_notebook_size_allocate;
   widget_class->expose_event = gtk_notebook_expose;
-  widget_class->scroll_event = gtk_notebook_scroll;
   widget_class->button_press_event = gtk_notebook_button_press;
   widget_class->button_release_event = gtk_notebook_button_release;
   widget_class->popup_menu = gtk_notebook_popup_menu;
@@ -596,45 +613,18 @@ gtk_notebook_class_init (GtkNotebookClass *class)
                                                      GTK_TYPE_POSITION_TYPE,
                                                      GTK_POS_TOP,
                                                      GTK_PARAM_READWRITE));
-  g_object_class_install_property (gobject_class,
-                                  PROP_TAB_BORDER,
-                                  g_param_spec_uint ("tab-border",
-                                                     P_("Tab Border"),
-                                                     P_("Width of the border around the tab labels"),
-                                                     0,
-                                                     G_MAXUINT,
-                                                     2,
-                                                     GTK_PARAM_WRITABLE));
-  g_object_class_install_property (gobject_class,
-                                  PROP_TAB_HBORDER,
-                                  g_param_spec_uint ("tab-hborder",
-                                                     P_("Horizontal Tab Border"),
-                                                     P_("Width of the horizontal border of tab labels"),
-                                                     0,
-                                                     G_MAXUINT,
-                                                     2,
-                                                     GTK_PARAM_READWRITE));
-  g_object_class_install_property (gobject_class,
-                                  PROP_TAB_VBORDER,
-                                  g_param_spec_uint ("tab-vborder",
-                                                     P_("Vertical Tab Border"),
-                                                     P_("Width of the vertical border of tab labels"),
-                                                     0,
-                                                     G_MAXUINT,
-                                                     2,
-                                                     GTK_PARAM_READWRITE));
   g_object_class_install_property (gobject_class,
                                   PROP_SHOW_TABS,
                                   g_param_spec_boolean ("show-tabs",
                                                         P_("Show Tabs"),
-                                                        P_("Whether tabs should be shown or not"),
+                                                        P_("Whether tabs should be shown"),
                                                         TRUE,
                                                         GTK_PARAM_READWRITE));
   g_object_class_install_property (gobject_class,
                                   PROP_SHOW_BORDER,
                                   g_param_spec_boolean ("show-border",
                                                         P_("Show Border"),
-                                                        P_("Whether the border should be shown or not"),
+                                                        P_("Whether the border should be shown"),
                                                         TRUE,
                                                         GTK_PARAM_READWRITE));
   g_object_class_install_property (gobject_class,
@@ -651,22 +641,6 @@ gtk_notebook_class_init (GtkNotebookClass *class)
                                                         P_("If TRUE, pressing the right mouse button on the notebook pops up a menu that you can use to go to a page"),
                                                         FALSE,
                                                         GTK_PARAM_READWRITE));
-  g_object_class_install_property (gobject_class,
-                                  PROP_HOMOGENEOUS,
-                                  g_param_spec_boolean ("homogeneous",
-                                                        P_("Homogeneous"),
-                                                        P_("Whether tabs should have homogeneous sizes"),
-                                                        FALSE,
-                                                        GTK_PARAM_READWRITE));
-  g_object_class_install_property (gobject_class,
-                                  PROP_GROUP_ID,
-                                  g_param_spec_int ("group-id",
-                                                    P_("Group ID"),
-                                                    P_("Group ID for tabs drag and drop"),
-                                                    -1,
-                                                    G_MAXINT,
-                                                    -1,
-                                                    GTK_PARAM_READWRITE));
 
   /**
    * GtkNotebook:group:
@@ -707,14 +681,14 @@ gtk_notebook_class_init (GtkNotebookClass *class)
                                              CHILD_PROP_TAB_EXPAND,
                                              g_param_spec_boolean ("tab-expand", 
                                                                    P_("Tab expand"), 
-                                                                   P_("Whether to expand the child's tab or not"),
+                                                                   P_("Whether to expand the child's tab"),
                                                                    FALSE,
                                                                    GTK_PARAM_READWRITE));
   gtk_container_class_install_child_property (container_class,
                                              CHILD_PROP_TAB_FILL,
                                              g_param_spec_boolean ("tab-fill", 
                                                                    P_("Tab fill"), 
-                                                                   P_("Whether the child's tab should fill the allocated area or not"),
+                                                                   P_("Whether the child's tab should fill the allocated area"),
                                                                    TRUE,
                                                                    GTK_PARAM_READWRITE));
   gtk_container_class_install_child_property (container_class,
@@ -728,7 +702,7 @@ gtk_notebook_class_init (GtkNotebookClass *class)
                                              CHILD_PROP_REORDERABLE,
                                              g_param_spec_boolean ("reorderable",
                                                                    P_("Tab reorderable"),
-                                                                   P_("Whether the tab is reorderable by user action or not"),
+                                                                   P_("Whether the tab is reorderable by user action"),
                                                                    FALSE,
                                                                    GTK_PARAM_READWRITE));
   gtk_container_class_install_child_property (container_class,
@@ -857,9 +831,9 @@ gtk_notebook_class_init (GtkNotebookClass *class)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GtkNotebookClass, switch_page),
                  NULL, NULL,
-                 _gtk_marshal_VOID__POINTER_UINT,
+                 _gtk_marshal_VOID__OBJECT_UINT,
                  G_TYPE_NONE, 2,
-                 G_TYPE_POINTER,
+                 GTK_TYPE_WIDGET,
                  G_TYPE_UINT);
   notebook_signals[FOCUS_TAB] = 
     g_signal_new (I_("focus-tab"),
@@ -982,7 +956,7 @@ gtk_notebook_class_init (GtkNotebookClass *class)
    * a notebook where the tab will be attached. It is also 
    * responsible for moving/resizing the window and adding the 
    * necessary properties to the notebook (e.g. the 
-   * #GtkNotebook:group-id ).
+   * #GtkNotebook:group ).
    *
    * The default handler uses the global window creation hook,
    * if one has been set with gtk_notebook_set_window_creation_hook().
@@ -1003,62 +977,62 @@ gtk_notebook_class_init (GtkNotebookClass *class)
  
   binding_set = gtk_binding_set_by_class (class);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_space, 0,
+                                GDK_KEY_space, 0,
                                 "select-page", 1, 
                                 G_TYPE_BOOLEAN, FALSE);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_KP_Space, 0,
+                                GDK_KEY_KP_Space, 0,
                                 "select-page", 1, 
                                 G_TYPE_BOOLEAN, FALSE);
   
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_Home, 0,
+                                GDK_KEY_Home, 0,
                                 "focus-tab", 1, 
                                 GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_FIRST);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_KP_Home, 0,
+                                GDK_KEY_KP_Home, 0,
                                 "focus-tab", 1, 
                                 GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_FIRST);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_End, 0,
+                                GDK_KEY_End, 0,
                                 "focus-tab", 1, 
                                 GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_LAST);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_KP_End, 0,
+                                GDK_KEY_KP_End, 0,
                                 "focus-tab", 1, 
                                 GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_LAST);
 
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_Page_Up, GDK_CONTROL_MASK,
+                                GDK_KEY_Page_Up, GDK_CONTROL_MASK,
                                 "change-current-page", 1,
                                 G_TYPE_INT, -1);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_Page_Down, GDK_CONTROL_MASK,
+                                GDK_KEY_Page_Down, GDK_CONTROL_MASK,
                                 "change-current-page", 1,
                                 G_TYPE_INT, 1);
 
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_Page_Up, GDK_CONTROL_MASK | GDK_MOD1_MASK,
+                                GDK_KEY_Page_Up, GDK_CONTROL_MASK | GDK_MOD1_MASK,
                                 "change-current-page", 1,
                                 G_TYPE_INT, -1);
   gtk_binding_entry_add_signal (binding_set,
-                                GDK_Page_Down, GDK_CONTROL_MASK | GDK_MOD1_MASK,
+                                GDK_KEY_Page_Down, GDK_CONTROL_MASK | GDK_MOD1_MASK,
                                 "change-current-page", 1,
                                 G_TYPE_INT, 1);
 
-  add_arrow_bindings (binding_set, GDK_Up, GTK_DIR_UP);
-  add_arrow_bindings (binding_set, GDK_Down, GTK_DIR_DOWN);
-  add_arrow_bindings (binding_set, GDK_Left, GTK_DIR_LEFT);
-  add_arrow_bindings (binding_set, GDK_Right, GTK_DIR_RIGHT);
+  add_arrow_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP);
+  add_arrow_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN);
+  add_arrow_bindings (binding_set, GDK_KEY_Left, GTK_DIR_LEFT);
+  add_arrow_bindings (binding_set, GDK_KEY_Right, GTK_DIR_RIGHT);
 
-  add_reorder_bindings (binding_set, GDK_Up, GTK_DIR_UP, FALSE);
-  add_reorder_bindings (binding_set, GDK_Down, GTK_DIR_DOWN, FALSE);
-  add_reorder_bindings (binding_set, GDK_Left, GTK_DIR_LEFT, FALSE);
-  add_reorder_bindings (binding_set, GDK_Right, GTK_DIR_RIGHT, FALSE);
-  add_reorder_bindings (binding_set, GDK_Home, GTK_DIR_LEFT, TRUE);
-  add_reorder_bindings (binding_set, GDK_Home, GTK_DIR_UP, TRUE);
-  add_reorder_bindings (binding_set, GDK_End, GTK_DIR_RIGHT, TRUE);
-  add_reorder_bindings (binding_set, GDK_End, GTK_DIR_DOWN, TRUE);
+  add_reorder_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP, FALSE);
+  add_reorder_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN, FALSE);
+  add_reorder_bindings (binding_set, GDK_KEY_Left, GTK_DIR_LEFT, FALSE);
+  add_reorder_bindings (binding_set, GDK_KEY_Right, GTK_DIR_RIGHT, FALSE);
+  add_reorder_bindings (binding_set, GDK_KEY_Home, GTK_DIR_LEFT, TRUE);
+  add_reorder_bindings (binding_set, GDK_KEY_Home, GTK_DIR_UP, TRUE);
+  add_reorder_bindings (binding_set, GDK_KEY_End, GTK_DIR_RIGHT, TRUE);
+  add_reorder_bindings (binding_set, GDK_KEY_End, GTK_DIR_DOWN, TRUE);
 
   add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD);
   add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
@@ -1072,36 +1046,39 @@ gtk_notebook_init (GtkNotebook *notebook)
   GtkNotebookPrivate *priv;
 
   gtk_widget_set_can_focus (GTK_WIDGET (notebook), TRUE);
-  GTK_WIDGET_SET_FLAGS (notebook, GTK_NO_WINDOW);
-
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
-  notebook->cur_page = NULL;
-  notebook->children = NULL;
-  notebook->first_tab = NULL;
-  notebook->focus_tab = NULL;
-  notebook->event_window = NULL;
-  notebook->menu = NULL;
-
-  notebook->tab_hborder = 2;
-  notebook->tab_vborder = 2;
-
-  notebook->show_tabs = TRUE;
-  notebook->show_border = TRUE;
-  notebook->tab_pos = GTK_POS_TOP;
-  notebook->scrollable = FALSE;
-  notebook->in_child = 0;
-  notebook->click_child = 0;
-  notebook->button = 0;
-  notebook->need_timer = 0;
-  notebook->child_has_focus = FALSE;
-  notebook->have_visible_child = FALSE;
-  notebook->focus_out = FALSE;
-
-  notebook->has_before_previous = 1;
-  notebook->has_before_next     = 0;
-  notebook->has_after_previous  = 0;
-  notebook->has_after_next      = 1;
+  gtk_widget_set_has_window (GTK_WIDGET (notebook), FALSE);
+
+  notebook->priv = G_TYPE_INSTANCE_GET_PRIVATE (notebook,
+                                                GTK_TYPE_NOTEBOOK,
+                                                GtkNotebookPrivate);
+  priv = notebook->priv;
+
+  priv->cur_page = NULL;
+  priv->children = NULL;
+  priv->first_tab = NULL;
+  priv->focus_tab = NULL;
+  priv->event_window = NULL;
+  priv->menu = NULL;
+
+  priv->tab_hborder = 2;
+  priv->tab_vborder = 2;
+
+  priv->show_tabs = TRUE;
+  priv->show_border = TRUE;
+  priv->tab_pos = GTK_POS_TOP;
+  priv->scrollable = FALSE;
+  priv->in_child = 0;
+  priv->click_child = 0;
+  priv->button = 0;
+  priv->need_timer = 0;
+  priv->child_has_focus = FALSE;
+  priv->have_visible_child = FALSE;
+  priv->focus_out = FALSE;
+
+  priv->has_before_previous = 1;
+  priv->has_before_next     = 0;
+  priv->has_after_previous  = 0;
+  priv->has_after_next      = 1;
 
   priv->group = NULL;
   priv->pressed_button = -1;
@@ -1166,7 +1143,9 @@ static gboolean
 gtk_notebook_select_page (GtkNotebook *notebook,
                           gboolean     move_focus)
 {
-  if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && notebook->show_tabs)
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && priv->show_tabs)
     {
       gtk_notebook_page_select (notebook, move_focus);
       return TRUE;
@@ -1179,9 +1158,10 @@ static gboolean
 gtk_notebook_focus_tab (GtkNotebook       *notebook,
                         GtkNotebookTab     type)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *list;
 
-  if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && notebook->show_tabs)
+  if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && priv->show_tabs)
     {
       switch (type)
        {
@@ -1207,13 +1187,14 @@ static gboolean
 gtk_notebook_change_current_page (GtkNotebook *notebook,
                                  gint         offset)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *current = NULL;
 
-  if (!notebook->show_tabs)
+  if (!priv->show_tabs)
     return FALSE;
 
-  if (notebook->cur_page)
-    current = g_list_find (notebook->children, notebook->cur_page);
+  if (priv->cur_page)
+    current = g_list_find (priv->children, priv->cur_page);
 
   while (offset != 0)
     {
@@ -1252,6 +1233,8 @@ static GtkDirectionType
 get_effective_direction (GtkNotebook      *notebook,
                         GtkDirectionType  direction)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+
   /* Remap the directions into the effective direction it would be for a
    * GTK_POS_TOP notebook
    */
@@ -1273,15 +1256,17 @@ get_effective_direction (GtkNotebook      *notebook,
 
   int text_dir = gtk_widget_get_direction (GTK_WIDGET (notebook)) == GTK_TEXT_DIR_RTL ? 1 : 0;
 
-  return translate_direction[text_dir][notebook->tab_pos][direction];
+  return translate_direction[text_dir][priv->tab_pos][direction];
 }
 
 static gint
 get_effective_tab_pos (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+
   if (gtk_widget_get_direction (GTK_WIDGET (notebook)) == GTK_TEXT_DIR_RTL)
     {
-      switch (notebook->tab_pos) 
+      switch (priv->tab_pos)
        {
        case GTK_POS_LEFT:
          return GTK_POS_RIGHT;
@@ -1291,7 +1276,7 @@ get_effective_tab_pos (GtkNotebook *notebook)
        }
     }
 
-  return notebook->tab_pos;
+  return priv->tab_pos;
 }
 
 static gint
@@ -1323,10 +1308,11 @@ static void
 gtk_notebook_move_focus_out (GtkNotebook      *notebook,
                             GtkDirectionType  direction_type)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkDirectionType effective_direction = get_effective_direction (notebook, direction_type);
   GtkWidget *toplevel;
   
-  if (GTK_CONTAINER (notebook)->focus_child && effective_direction == GTK_DIR_UP)
+  if (gtk_container_get_focus_child (GTK_CONTAINER (notebook)) && effective_direction == GTK_DIR_UP)
     if (focus_tabs_in (notebook))
       return;
   if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && effective_direction == GTK_DIR_DOWN)
@@ -1341,41 +1327,42 @@ gtk_notebook_move_focus_out (GtkNotebook      *notebook,
     return;
 
   g_object_ref (notebook);
-  
-  notebook->focus_out = TRUE;
+
+  priv->focus_out = TRUE;
   g_signal_emit_by_name (toplevel, "move-focus", direction_type);
-  notebook->focus_out = FALSE;
-  
+  priv->focus_out = FALSE;
+
   g_object_unref (notebook);
 }
 
 static gint
 reorder_tab (GtkNotebook *notebook, GList *position, GList *tab)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *elem;
 
   if (position == tab)
-    return g_list_position (notebook->children, tab);
+    return g_list_position (priv->children, tab);
 
   /* check that we aren't inserting the tab in the
    * same relative position, taking packing into account */
-  elem = (position) ? position->prev : g_list_last (notebook->children);
+  elem = (position) ? position->prev : g_list_last (priv->children);
 
   while (elem && elem != tab && GTK_NOTEBOOK_PAGE (elem)->pack != GTK_NOTEBOOK_PAGE (tab)->pack)
     elem = elem->prev;
 
   if (elem == tab)
-    return g_list_position (notebook->children, tab);
+    return g_list_position (priv->children, tab);
 
   /* now actually reorder the tab */
-  if (notebook->first_tab == tab)
-    notebook->first_tab = gtk_notebook_search_page (notebook, notebook->first_tab,
+  if (priv->first_tab == tab)
+    priv->first_tab = gtk_notebook_search_page (notebook, priv->first_tab,
                                                    STEP_NEXT, TRUE);
 
-  notebook->children = g_list_remove_link (notebook->children, tab);
+  priv->children = g_list_remove_link (priv->children, tab);
 
   if (!position)
-    elem = g_list_last (notebook->children);
+    elem = g_list_last (priv->children);
   else
     {
       elem = position->prev;
@@ -1385,12 +1372,12 @@ reorder_tab (GtkNotebook *notebook, GList *position, GList *tab)
   if (elem)
     elem->next = tab;
   else
-    notebook->children = tab;
+    priv->children = tab;
 
   tab->prev = elem;
   tab->next = position;
 
-  return g_list_position (notebook->children, tab);
+  return g_list_position (priv->children, tab);
 }
 
 static gboolean
@@ -1398,16 +1385,17 @@ gtk_notebook_reorder_tab (GtkNotebook      *notebook,
                          GtkDirectionType  direction_type,
                          gboolean          move_to_last)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkDirectionType effective_direction = get_effective_direction (notebook, direction_type);
   GtkNotebookPage *page;
   GList *last, *child;
   gint page_num;
 
-  if (!gtk_widget_is_focus (GTK_WIDGET (notebook)) || !notebook->show_tabs)
+  if (!gtk_widget_is_focus (GTK_WIDGET (notebook)) || !priv->show_tabs)
     return FALSE;
 
-  if (!notebook->cur_page ||
-      !notebook->cur_page->reorderable)
+  if (!priv->cur_page ||
+      !priv->cur_page->reorderable)
     return FALSE;
 
   if (effective_direction != GTK_DIR_LEFT &&
@@ -1416,7 +1404,7 @@ gtk_notebook_reorder_tab (GtkNotebook      *notebook,
 
   if (move_to_last)
     {
-      child = notebook->focus_tab;
+      child = priv->focus_tab;
 
       do
        {
@@ -1430,28 +1418,28 @@ gtk_notebook_reorder_tab (GtkNotebook      *notebook,
       child = last;
     }
   else
-    child = gtk_notebook_search_page (notebook, notebook->focus_tab,
+    child = gtk_notebook_search_page (notebook, priv->focus_tab,
                                      (effective_direction == GTK_DIR_RIGHT) ? STEP_NEXT : STEP_PREV,
                                      TRUE);
 
-  if (!child || child->data == notebook->cur_page)
+  if (!child || child->data == priv->cur_page)
     return FALSE;
 
   page = child->data;
 
-  if (page->pack == notebook->cur_page->pack)
+  if (page->pack == priv->cur_page->pack)
     {
       if (effective_direction == GTK_DIR_RIGHT)
-       page_num = reorder_tab (notebook, (page->pack == GTK_PACK_START) ? child->next : child, notebook->focus_tab);
+       page_num = reorder_tab (notebook, (page->pack == GTK_PACK_START) ? child->next : child, priv->focus_tab);
       else
-       page_num = reorder_tab (notebook, (page->pack == GTK_PACK_START) ? child : child->next, notebook->focus_tab);
+       page_num = reorder_tab (notebook, (page->pack == GTK_PACK_START) ? child : child->next, priv->focus_tab);
 
       gtk_notebook_pages_allocate (notebook);
 
       g_signal_emit (notebook,
                     notebook_signals[PAGE_REORDERED],
                     0,
-                    ((GtkNotebookPage *) notebook->focus_tab->data)->child,
+                    ((GtkNotebookPage *) priv->focus_tab->data)->child,
                     page_num);
 
       return TRUE;
@@ -1483,9 +1471,9 @@ static void
 gtk_notebook_destroy (GtkObject *object)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (object);
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
 
-  if (notebook->menu)
+  if (priv->menu)
     gtk_notebook_popup_disable (notebook);
 
   if (priv->source_targets)
@@ -1530,27 +1518,12 @@ gtk_notebook_set_property (GObject         *object,
       else
        gtk_notebook_popup_disable (notebook);
       break;
-    case PROP_HOMOGENEOUS:
-      gtk_notebook_set_homogeneous_tabs_internal (notebook, g_value_get_boolean (value));
-      break;  
     case PROP_PAGE:
       gtk_notebook_set_current_page (notebook, g_value_get_int (value));
       break;
     case PROP_TAB_POS:
       gtk_notebook_set_tab_pos (notebook, g_value_get_enum (value));
       break;
-    case PROP_TAB_BORDER:
-      gtk_notebook_set_tab_border_internal (notebook, g_value_get_uint (value));
-      break;
-    case PROP_TAB_HBORDER:
-      gtk_notebook_set_tab_hborder_internal (notebook, g_value_get_uint (value));
-      break;
-    case PROP_TAB_VBORDER:
-      gtk_notebook_set_tab_vborder_internal (notebook, g_value_get_uint (value));
-      break;
-    case PROP_GROUP_ID:
-      gtk_notebook_set_group_id (notebook, g_value_get_int (value));
-      break;
     case PROP_GROUP:
       gtk_notebook_set_group (notebook, g_value_get_pointer (value));
       break;
@@ -1566,43 +1539,28 @@ gtk_notebook_get_property (GObject         *object,
                           GValue          *value,
                           GParamSpec      *pspec)
 {
-  GtkNotebook *notebook;
-  GtkNotebookPrivate *priv;
-
-  notebook = GTK_NOTEBOOK (object);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebook *notebook = GTK_NOTEBOOK (object);
+  GtkNotebookPrivate *priv = notebook->priv;
 
   switch (prop_id)
     {
     case PROP_SHOW_TABS:
-      g_value_set_boolean (value, notebook->show_tabs);
+      g_value_set_boolean (value, priv->show_tabs);
       break;
     case PROP_SHOW_BORDER:
-      g_value_set_boolean (value, notebook->show_border);
+      g_value_set_boolean (value, priv->show_border);
       break;
     case PROP_SCROLLABLE:
-      g_value_set_boolean (value, notebook->scrollable);
+      g_value_set_boolean (value, priv->scrollable);
       break;
     case PROP_ENABLE_POPUP:
-      g_value_set_boolean (value, notebook->menu != NULL);
-      break;
-    case PROP_HOMOGENEOUS:
-      g_value_set_boolean (value, notebook->homogeneous);
+      g_value_set_boolean (value, priv->menu != NULL);
       break;
     case PROP_PAGE:
       g_value_set_int (value, gtk_notebook_get_current_page (notebook));
       break;
     case PROP_TAB_POS:
-      g_value_set_enum (value, notebook->tab_pos);
-      break;
-    case PROP_TAB_HBORDER:
-      g_value_set_uint (value, notebook->tab_hborder);
-      break;
-    case PROP_TAB_VBORDER:
-      g_value_set_uint (value, notebook->tab_vborder);
-      break;
-    case PROP_GROUP_ID:
-      g_value_set_int (value, gtk_notebook_get_group_id (notebook));
+      g_value_set_enum (value, priv->tab_pos);
       break;
     case PROP_GROUP:
       g_value_set_pointer (value, priv->group);
@@ -1643,16 +1601,17 @@ static gboolean
 gtk_notebook_get_event_window_position (GtkNotebook  *notebook,
                                        GdkRectangle *rectangle)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation, action_allocation;
   GtkWidget *widget = GTK_WIDGET (notebook);
-  gint border_width = GTK_CONTAINER (notebook)->border_width;
+  guint border_width = gtk_container_get_border_width (GTK_CONTAINER (notebook));
   GtkNotebookPage *visible_page = NULL;
   GList *tmp_list;
   gint tab_pos = get_effective_tab_pos (notebook);
   gboolean is_rtl;
   gint i;
 
-  for (tmp_list = notebook->children; tmp_list; tmp_list = tmp_list->next)
+  for (tmp_list = priv->children; tmp_list; tmp_list = tmp_list->next)
     {
       GtkNotebookPage *page = tmp_list->data;
       if (gtk_widget_get_visible (page->child))
@@ -1662,51 +1621,57 @@ gtk_notebook_get_event_window_position (GtkNotebook  *notebook,
        }
     }
 
-  if (notebook->show_tabs && visible_page)
+  if (priv->show_tabs && visible_page)
     {
       if (rectangle)
        {
+          gtk_widget_get_allocation (widget, &allocation);
+
          is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
-         rectangle->x = widget->allocation.x + border_width;
-         rectangle->y = widget->allocation.y + border_width;
+         rectangle->x = allocation.x + border_width;
+         rectangle->y = allocation.y + border_width;
 
          switch (tab_pos)
            {
            case GTK_POS_TOP:
            case GTK_POS_BOTTOM:
-             rectangle->width = widget->allocation.width - 2 * border_width;
+             rectangle->width = allocation.width - 2 * border_width;
              rectangle->height = visible_page->requisition.height;
              if (tab_pos == GTK_POS_BOTTOM)
-               rectangle->y += widget->allocation.height - 2 * border_width - rectangle->height;
+               rectangle->y += allocation.height - 2 * border_width - rectangle->height;
 
               for (i = 0; i < N_ACTION_WIDGETS; i++)
                 {
                   if (priv->action_widget[i] &&
                       gtk_widget_get_visible (priv->action_widget[i]))
                     {
-                      rectangle->width -= priv->action_widget[i]->allocation.width;
+                      gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
+
+                      rectangle->width -= action_allocation.width;
                       if ((!is_rtl && i == ACTION_WIDGET_START) ||
                           (is_rtl && i == ACTION_WIDGET_END))
-                        rectangle->x += priv->action_widget[i]->allocation.width;
+                        rectangle->x += action_allocation.width;
                     }
                 }
              break;
            case GTK_POS_LEFT:
            case GTK_POS_RIGHT:
              rectangle->width = visible_page->requisition.width;
-             rectangle->height = widget->allocation.height - 2 * border_width;
+             rectangle->height = allocation.height - 2 * border_width;
              if (tab_pos == GTK_POS_RIGHT)
-               rectangle->x += widget->allocation.width - 2 * border_width - rectangle->width;
+               rectangle->x += allocation.width - 2 * border_width - rectangle->width;
 
               for (i = 0; i < N_ACTION_WIDGETS; i++)
                 {
                   if (priv->action_widget[i] &&
                       gtk_widget_get_visible (priv->action_widget[i]))
                     {
-                      rectangle->height -= priv->action_widget[i]->allocation.height;
+                      gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
+
+                      rectangle->height -= action_allocation.height;
 
                       if (i == ACTION_WIDGET_START)
-                        rectangle->y += priv->action_widget[i]->allocation.height;
+                        rectangle->y += action_allocation.height;
                     }
                 }
               break;
@@ -1730,21 +1695,18 @@ gtk_notebook_get_event_window_position (GtkNotebook  *notebook,
 static void
 gtk_notebook_map (GtkWidget *widget)
 {
-  GtkNotebookPrivate *priv;
-  GtkNotebook *notebook;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList *children;
   gint i;
 
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-
-  notebook = GTK_NOTEBOOK (widget);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  gtk_widget_set_mapped (widget, TRUE);
 
-  if (notebook->cur_page &&
-      gtk_widget_get_visible (notebook->cur_page->child) &&
-      !gtk_widget_get_mapped (notebook->cur_page->child))
-    gtk_widget_map (notebook->cur_page->child);
+  if (priv->cur_page &&
+      gtk_widget_get_visible (priv->cur_page->child) &&
+      !gtk_widget_get_mapped (priv->cur_page->child))
+    gtk_widget_map (priv->cur_page->child);
 
   for (i = 0; i < N_ACTION_WIDGETS; i++)
     {
@@ -1755,11 +1717,11 @@ gtk_notebook_map (GtkWidget *widget)
         gtk_widget_map (priv->action_widget[i]);
     }
 
-  if (notebook->scrollable)
+  if (priv->scrollable)
     gtk_notebook_pages_allocate (notebook);
   else
     {
-      children = notebook->children;
+      children = priv->children;
 
       while (children)
        {
@@ -1774,17 +1736,20 @@ gtk_notebook_map (GtkWidget *widget)
     }
 
   if (gtk_notebook_get_event_window_position (notebook, NULL))
-    gdk_window_show_unraised (notebook->event_window);
+    gdk_window_show_unraised (priv->event_window);
 }
 
 static void
 gtk_notebook_unmap (GtkWidget *widget)
 {
-  stop_scrolling (GTK_NOTEBOOK (widget));
-  
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  stop_scrolling (notebook);
+
+  gtk_widget_set_mapped (widget, FALSE);
 
-  gdk_window_hide (GTK_NOTEBOOK (widget)->event_window);
+  gdk_window_hide (priv->event_window);
 
   GTK_WIDGET_CLASS (gtk_notebook_parent_class)->unmap (widget);
 }
@@ -1792,19 +1757,21 @@ gtk_notebook_unmap (GtkWidget *widget)
 static void
 gtk_notebook_realize (GtkWidget *widget)
 {
-  GtkNotebook *notebook;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
+  GdkWindow *window;
   GdkWindowAttr attributes;
   gint attributes_mask;
   GdkRectangle event_window_pos;
 
-  notebook = GTK_NOTEBOOK (widget);
-  GTK_WIDGET_SET_FLAGS (notebook, GTK_REALIZED);
+  gtk_widget_set_realized (widget, TRUE);
 
   gtk_notebook_get_event_window_position (notebook, &event_window_pos);
-  
-  widget->window = gtk_widget_get_parent_window (widget);
-  g_object_ref (widget->window);
-  
+
+  window = gtk_widget_get_parent_window (widget);
+  gtk_widget_set_window (widget, window);
+  g_object_ref (window);
+
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.x = event_window_pos.x;
   attributes.y = event_window_pos.y;
@@ -1814,29 +1781,25 @@ gtk_notebook_realize (GtkWidget *widget)
   attributes.event_mask = gtk_widget_get_events (widget);
   attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
                            GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK |
-                           GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK |
-                           GDK_SCROLL_MASK);
+                           GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
   attributes_mask = GDK_WA_X | GDK_WA_Y;
 
-  notebook->event_window = gdk_window_new (gtk_widget_get_parent_window (widget), 
+  priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
                                           &attributes, attributes_mask);
-  gdk_window_set_user_data (notebook->event_window, notebook);
+  gdk_window_set_user_data (priv->event_window, notebook);
 
-  widget->style = gtk_style_attach (widget->style, widget->window);
+  gtk_widget_style_attach (widget);
 }
 
 static void
 gtk_notebook_unrealize (GtkWidget *widget)
 {
-  GtkNotebook *notebook;
-  GtkNotebookPrivate *priv;
-
-  notebook = GTK_NOTEBOOK (widget);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
-  gdk_window_set_user_data (notebook->event_window, NULL);
-  gdk_window_destroy (notebook->event_window);
-  notebook->event_window = NULL;
+  gdk_window_set_user_data (priv->event_window, NULL);
+  gdk_window_destroy (priv->event_window);
+  priv->event_window = NULL;
 
   if (priv->drag_window)
     {
@@ -1852,8 +1815,8 @@ static void
 gtk_notebook_size_request (GtkWidget      *widget,
                           GtkRequisition *requisition)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList *children;
   GtkRequisition child_requisition;
@@ -1866,6 +1829,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
   gint arrow_spacing;
   gint scroll_arrow_hlength;
   gint scroll_arrow_vlength;
+  guint border_width;
 
   gtk_widget_style_get (widget,
                         "focus-line-width", &focus_width,
@@ -1876,44 +1840,57 @@ gtk_notebook_size_request (GtkWidget      *widget,
                         "scroll-arrow-vlength", &scroll_arrow_vlength,
                        NULL);
 
-  widget->requisition.width = 0;
-  widget->requisition.height = 0;
+  requisition->width = 0;
+  requisition->height = 0;
 
-  for (children = notebook->children, vis_pages = 0; children;
+  for (children = priv->children, vis_pages = 0; children;
        children = children->next)
     {
+      GtkWidget *parent;
       page = children->data;
 
       if (gtk_widget_get_visible (page->child))
        {
          vis_pages++;
-         gtk_widget_size_request (page->child, &child_requisition);
-         
-         widget->requisition.width = MAX (widget->requisition.width,
+          gtk_size_request_get_size (GTK_SIZE_REQUEST (page->child),
+                                     &child_requisition, NULL);
+
+         requisition->width = MAX (requisition->width,
                                           child_requisition.width);
-         widget->requisition.height = MAX (widget->requisition.height,
+         requisition->height = MAX (requisition->height,
                                            child_requisition.height);
 
-         if (notebook->menu && page->menu_label->parent &&
-             !gtk_widget_get_visible (page->menu_label->parent))
-           gtk_widget_show (page->menu_label->parent);
+         if (priv->menu && page->menu_label)
+            {
+              parent = gtk_widget_get_parent (page->menu_label);
+              if (parent && !gtk_widget_get_visible (parent))
+                gtk_widget_show (parent);
+            }
        }
       else
        {
-         if (page == notebook->cur_page)
+         if (page == priv->cur_page)
            switch_page = TRUE;
-         if (notebook->menu && page->menu_label->parent &&
-             gtk_widget_get_visible (page->menu_label->parent))
-           gtk_widget_hide (page->menu_label->parent);
+
+         if (priv->menu && page->menu_label)
+            {
+              parent = gtk_widget_get_parent (page->menu_label);
+              if (parent && gtk_widget_get_visible (parent))
+                gtk_widget_hide (parent);
+            }
        }
     }
 
-  if (notebook->show_border || notebook->show_tabs)
+  if (priv->show_border || priv->show_tabs)
     {
-      widget->requisition.width += widget->style->xthickness * 2;
-      widget->requisition.height += widget->style->ythickness * 2;
+      GtkStyle *style;
+
+      style = gtk_widget_get_style (widget);
 
-      if (notebook->show_tabs)
+      requisition->width += style->xthickness * 2;
+      requisition->height += style->ythickness * 2;
+
+      if (priv->show_tabs)
        {
          gint tab_width = 0;
          gint tab_height = 0;
@@ -1923,7 +1900,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
           gint action_width = 0;
           gint action_height = 0;
          
-         for (children = notebook->children; children;
+         for (children = priv->children; children;
               children = children->next)
            {
              page = children->data;
@@ -1933,28 +1910,24 @@ gtk_notebook_size_request (GtkWidget      *widget,
                  if (!gtk_widget_get_visible (page->tab_label))
                    gtk_widget_show (page->tab_label);
 
-                 gtk_widget_size_request (page->tab_label,
-                                          &child_requisition);
+                  gtk_size_request_get_size (GTK_SIZE_REQUEST (page->tab_label),
+                                             &child_requisition, NULL);
 
-                 page->requisition.width = 
-                   child_requisition.width +
-                   2 * widget->style->xthickness;
-                 page->requisition.height = 
-                   child_requisition.height +
-                   2 * widget->style->ythickness;
-                 
-                 switch (notebook->tab_pos)
+                  page->requisition.width = child_requisition.width + 2 * style->xthickness;
+                 page->requisition.height = child_requisition.height + 2 * style->ythickness;
+
+                 switch (priv->tab_pos)
                    {
                    case GTK_POS_TOP:
                    case GTK_POS_BOTTOM:
-                     page->requisition.height += 2 * (notebook->tab_vborder +
+                     page->requisition.height += 2 * (priv->tab_vborder +
                                                       focus_width);
                      tab_height = MAX (tab_height, page->requisition.height);
                      tab_max = MAX (tab_max, page->requisition.width);
                      break;
                    case GTK_POS_LEFT:
                    case GTK_POS_RIGHT:
-                     page->requisition.width += 2 * (notebook->tab_hborder +
+                     page->requisition.width += 2 * (priv->tab_hborder +
                                                      focus_width);
                      tab_width = MAX (tab_width, page->requisition.width);
                      tab_max = MAX (tab_max, page->requisition.height);
@@ -1965,7 +1938,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
                gtk_widget_hide (page->tab_label);
            }
 
-         children = notebook->children;
+         children = priv->children;
 
          if (vis_pages)
            {
@@ -1973,28 +1946,29 @@ gtk_notebook_size_request (GtkWidget      *widget,
                 {
                   if (priv->action_widget[i])
                     {
-                      gtk_widget_size_request (priv->action_widget[i], &action_widget_requisition[i]);
-                      action_widget_requisition[i].width += widget->style->xthickness;
-                      action_widget_requisition[i].height += widget->style->ythickness;
+                      gtk_size_request_get_size (GTK_SIZE_REQUEST (priv->action_widget[i]),
+                                                 &action_widget_requisition[i], NULL);
+                      action_widget_requisition[i].width += style->xthickness;
+                      action_widget_requisition[i].height += style->ythickness;
                     }
                 }
 
-             switch (notebook->tab_pos)
+             switch (priv->tab_pos)
                {
                case GTK_POS_TOP:
                case GTK_POS_BOTTOM:
                  if (tab_height == 0)
                    break;
 
-                 if (notebook->scrollable && vis_pages > 1 && 
-                     widget->requisition.width < tab_width)
+                 if (priv->scrollable && vis_pages > 1 &&
+                     requisition->width < tab_width)
                    tab_height = MAX (tab_height, scroll_arrow_hlength);
 
                   tab_height = MAX (tab_height, action_widget_requisition[ACTION_WIDGET_START].height);
                   tab_height = MAX (tab_height, action_widget_requisition[ACTION_WIDGET_END].height);
 
                  padding = 2 * (tab_curvature + focus_width +
-                                notebook->tab_hborder) - tab_overlap;
+                                priv->tab_hborder) - tab_overlap;
                  tab_max += padding;
                  while (children)
                    {
@@ -2004,7 +1978,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
                      if (!gtk_widget_get_visible (page->child))
                        continue;
 
-                     if (notebook->homogeneous)
+                     if (priv->homogeneous)
                        page->requisition.width = tab_max;
                      else
                        page->requisition.width += padding;
@@ -2013,29 +1987,29 @@ gtk_notebook_size_request (GtkWidget      *widget,
                      page->requisition.height = tab_height;
                    }
 
-                 if (notebook->scrollable && vis_pages > 1 &&
-                     widget->requisition.width < tab_width)
+                 if (priv->scrollable && vis_pages > 1 &&
+                     requisition->width < tab_width)
                    tab_width = tab_max + 2 * (scroll_arrow_hlength + arrow_spacing);
 
                  action_width += action_widget_requisition[ACTION_WIDGET_START].width;
                  action_width += action_widget_requisition[ACTION_WIDGET_END].width;
-                  if (notebook->homogeneous && !notebook->scrollable)
-                    widget->requisition.width = MAX (widget->requisition.width,
+                  if (priv->homogeneous && !priv->scrollable)
+                    requisition->width = MAX (requisition->width,
                                                      vis_pages * tab_max +
                                                      tab_overlap + action_width);
                   else
-                    widget->requisition.width = MAX (widget->requisition.width,
+                    requisition->width = MAX (requisition->width,
                                                      tab_width + tab_overlap + action_width);
 
-                 widget->requisition.height += tab_height;
+                 requisition->height += tab_height;
                  break;
                case GTK_POS_LEFT:
                case GTK_POS_RIGHT:
                  if (tab_width == 0)
                    break;
 
-                 if (notebook->scrollable && vis_pages > 1 && 
-                     widget->requisition.height < tab_height)
+                 if (priv->scrollable && vis_pages > 1 &&
+                     requisition->height < tab_height)
                    tab_width = MAX (tab_width,
                                      arrow_spacing + 2 * scroll_arrow_vlength);
 
@@ -2043,7 +2017,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
                  tab_width = MAX (tab_width, action_widget_requisition[ACTION_WIDGET_END].width);
 
                  padding = 2 * (tab_curvature + focus_width +
-                                notebook->tab_vborder) - tab_overlap;
+                                priv->tab_vborder) - tab_overlap;
                  tab_max += padding;
 
                  while (children)
@@ -2056,7 +2030,7 @@ gtk_notebook_size_request (GtkWidget      *widget,
 
                      page->requisition.width = tab_width;
 
-                     if (notebook->homogeneous)
+                     if (priv->homogeneous)
                        page->requisition.height = tab_max;
                      else
                        page->requisition.height += padding;
@@ -2064,35 +2038,35 @@ gtk_notebook_size_request (GtkWidget      *widget,
                      tab_height += page->requisition.height;
                    }
 
-                 if (notebook->scrollable && vis_pages > 1 && 
-                     widget->requisition.height < tab_height)
+                 if (priv->scrollable && vis_pages > 1 &&
+                     requisition->height < tab_height)
                    tab_height = tab_max + (2 * scroll_arrow_vlength + arrow_spacing);
                  action_height += action_widget_requisition[ACTION_WIDGET_START].height;
                  action_height += action_widget_requisition[ACTION_WIDGET_END].height;
 
-                  if (notebook->homogeneous && !notebook->scrollable)
-                    widget->requisition.height =
-                     MAX (widget->requisition.height,
+                  if (priv->homogeneous && !priv->scrollable)
+                    requisition->height =
+                     MAX (requisition->height,
                           vis_pages * tab_max + tab_overlap + action_height);
                   else
-                    widget->requisition.height =
-                     MAX (widget->requisition.height,
+                    requisition->height =
+                     MAX (requisition->height,
                           tab_height + tab_overlap + action_height);
 
-                 if (!notebook->homogeneous || notebook->scrollable)
+                 if (!priv->homogeneous || priv->scrollable)
                    vis_pages = 1;
-                 widget->requisition.height = MAX (widget->requisition.height,
-                                                   vis_pages * tab_max +
-                                                   tab_overlap);
+                 requisition->height = MAX (requisition->height,
+                                            vis_pages * tab_max +
+                                            tab_overlap);
 
-                 widget->requisition.width += tab_width;
+                 requisition->width += tab_width;
                  break;
                }
            }
        }
       else
        {
-         for (children = notebook->children; children;
+         for (children = priv->children; children;
               children = children->next)
            {
              page = children->data;
@@ -2103,14 +2077,16 @@ gtk_notebook_size_request (GtkWidget      *widget,
        }
     }
 
-  widget->requisition.width += GTK_CONTAINER (widget)->border_width * 2;
-  widget->requisition.height += GTK_CONTAINER (widget)->border_width * 2;
+  border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
+
+  requisition->width += border_width * 2;
+  requisition->height += border_width * 2;
 
   if (switch_page)
     {
       if (vis_pages)
        {
-         for (children = notebook->children; children;
+         for (children = priv->children; children;
               children = children->next)
            {
              page = children->data;
@@ -2123,16 +2099,16 @@ gtk_notebook_size_request (GtkWidget      *widget,
        }
       else if (gtk_widget_get_visible (widget))
        {
-         widget->requisition.width = GTK_CONTAINER (widget)->border_width * 2;
-         widget->requisition.height= GTK_CONTAINER (widget)->border_width * 2;
+         requisition->width  = border_width * 2;
+         requisition->height = border_width * 2;
        }
     }
-  if (vis_pages && !notebook->cur_page)
+  if (vis_pages && !priv->cur_page)
     {
       children = gtk_notebook_search_page (notebook, NULL, STEP_NEXT, TRUE);
       if (children)
        {
-         notebook->first_tab = children;
+         priv->first_tab = children;
          gtk_notebook_switch_page (notebook, GTK_NOTEBOOK_PAGE (children));
        }
     }
@@ -2142,114 +2118,114 @@ static void
 gtk_notebook_size_allocate (GtkWidget     *widget,
                            GtkAllocation *allocation)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkStyle *style;
   gint tab_pos = get_effective_tab_pos (notebook);
   gboolean is_rtl;
   gint focus_width;
 
+  style = gtk_widget_get_style (widget);
+
   gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL);
-  
-  widget->allocation = *allocation;
-  if (GTK_WIDGET_REALIZED (widget))
+
+  gtk_widget_set_allocation (widget, allocation);
+
+  if (gtk_widget_get_realized (widget))
     {
       GdkRectangle position;
 
       if (gtk_notebook_get_event_window_position (notebook, &position))
        {
-         gdk_window_move_resize (notebook->event_window,
+         gdk_window_move_resize (priv->event_window,
                                  position.x, position.y,
                                  position.width, position.height);
          if (gtk_widget_get_mapped (GTK_WIDGET (notebook)))
-           gdk_window_show_unraised (notebook->event_window);
+           gdk_window_show_unraised (priv->event_window);
        }
       else
-       gdk_window_hide (notebook->event_window);
+       gdk_window_hide (priv->event_window);
     }
 
-  if (notebook->children)
+  if (priv->children)
     {
-      gint border_width = GTK_CONTAINER (widget)->border_width;
+      guint border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
       GtkNotebookPage *page;
       GtkAllocation child_allocation;
       GList *children;
       gint i;
-      
-      child_allocation.x = widget->allocation.x + border_width;
-      child_allocation.y = widget->allocation.y + border_width;
+
+      child_allocation.x = allocation->x + border_width;
+      child_allocation.y = allocation->y + border_width;
       child_allocation.width = MAX (1, allocation->width - border_width * 2);
       child_allocation.height = MAX (1, allocation->height - border_width * 2);
 
-      if (notebook->show_tabs || notebook->show_border)
+      if (priv->show_tabs || priv->show_border)
        {
-         child_allocation.x += widget->style->xthickness;
-         child_allocation.y += widget->style->ythickness;
-         child_allocation.width = MAX (1, child_allocation.width -
-                                       widget->style->xthickness * 2);
-         child_allocation.height = MAX (1, child_allocation.height -
-                                        widget->style->ythickness * 2);
-
-         if (notebook->show_tabs && notebook->children && notebook->cur_page)
+         child_allocation.x += style->xthickness;
+         child_allocation.y += style->ythickness;
+         child_allocation.width = MAX (1, child_allocation.width - style->xthickness * 2);
+         child_allocation.height = MAX (1, child_allocation.height - style->ythickness * 2);
+
+         if (priv->show_tabs && priv->children && priv->cur_page)
            {
              switch (tab_pos)
                {
                case GTK_POS_TOP:
-                 child_allocation.y += notebook->cur_page->requisition.height;
+                 child_allocation.y += priv->cur_page->requisition.height;
                case GTK_POS_BOTTOM:
                  child_allocation.height =
                    MAX (1, child_allocation.height -
-                        notebook->cur_page->requisition.height);
+                        priv->cur_page->requisition.height);
                  break;
                case GTK_POS_LEFT:
-                 child_allocation.x += notebook->cur_page->requisition.width;
+                 child_allocation.x += priv->cur_page->requisition.width;
                case GTK_POS_RIGHT:
                  child_allocation.width =
                    MAX (1, child_allocation.width -
-                        notebook->cur_page->requisition.width);
+                        priv->cur_page->requisition.width);
                  break;
                }
 
               for (i = 0; i < N_ACTION_WIDGETS; i++)
                 {
                   GtkAllocation widget_allocation;
-
+                 GtkRequisition requisition;
+                 
                   if (!priv->action_widget[i])
                     continue;
 
-                 widget_allocation.x = widget->allocation.x + border_width;
-                 widget_allocation.y = widget->allocation.y + border_width;
+                 widget_allocation.x = allocation->x + border_width;
+                 widget_allocation.y = allocation->y + border_width;
                  is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
 
+                  gtk_size_request_get_size (GTK_SIZE_REQUEST (priv->action_widget[i]),
+                                             &requisition, NULL);
+
                  switch (tab_pos)
                    {
                    case GTK_POS_BOTTOM:
-                     widget_allocation.y +=
-                       widget->allocation.height - 2 * border_width - notebook->cur_page->requisition.height;
+                     widget_allocation.y += allocation->height - 2 * border_width - priv->cur_page->requisition.height;
                      /* fall through */
                    case GTK_POS_TOP:
-                     widget_allocation.width = priv->action_widget[i]->requisition.width;
-                     widget_allocation.height = notebook->cur_page->requisition.height - widget->style->ythickness;
+                     widget_allocation.width = requisition.width;
+                     widget_allocation.height = priv->cur_page->requisition.height - style->ythickness;
 
                      if ((i == ACTION_WIDGET_START && is_rtl) ||
                           (i == ACTION_WIDGET_END && !is_rtl))
-                       widget_allocation.x +=
-                         widget->allocation.width - 2 * border_width -
-                         priv->action_widget[i]->requisition.width;
+                       widget_allocation.x += allocation->width - 2 * border_width - requisition.width;
                       if (tab_pos == GTK_POS_TOP) /* no fall through */
                           widget_allocation.y += 2 * focus_width;
                      break;
                    case GTK_POS_RIGHT:
-                     widget_allocation.x +=
-                       widget->allocation.width - 2 * border_width - notebook->cur_page->requisition.width;
+                     widget_allocation.x += allocation->width - 2 * border_width - priv->cur_page->requisition.width;
                      /* fall through */
                    case GTK_POS_LEFT:
-                     widget_allocation.height = priv->action_widget[i]->requisition.height;
-                     widget_allocation.width = notebook->cur_page->requisition.width - widget->style->xthickness;
+                     widget_allocation.height = requisition.height;
+                     widget_allocation.width = priv->cur_page->requisition.width - style->xthickness;
 
                       if (i == ACTION_WIDGET_END)
-                        widget_allocation.y +=
-                          widget->allocation.height - 2 * border_width -
-                          priv->action_widget[i]->requisition.height;
+                        widget_allocation.y += allocation->height - 2 * border_width - requisition.height;
                       if (tab_pos == GTK_POS_LEFT) /* no fall through */  
                         widget_allocation.x += 2 * focus_width;
                      break;
@@ -2260,7 +2236,7 @@ gtk_notebook_size_allocate (GtkWidget     *widget,
            }
        }
 
-      children = notebook->children;
+      children = priv->children;
       while (children)
        {
          page = children->data;
@@ -2278,13 +2254,10 @@ static gint
 gtk_notebook_expose (GtkWidget      *widget,
                     GdkEventExpose *event)
 {
-  GtkNotebook *notebook;
-  GtkNotebookPrivate *priv;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   gint i;
 
-  notebook = GTK_NOTEBOOK (widget);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
-
   if (event->window == priv->drag_window)
     {
       GdkRectangle area = { 0, };
@@ -2298,47 +2271,47 @@ gtk_notebook_expose (GtkWidget      *widget,
        * ARGB visuals or shape windows.
        */
       cr = gdk_cairo_create (priv->drag_window);
-      gdk_cairo_set_source_color (cr, &widget->style->bg [GTK_STATE_NORMAL]);
+      gdk_cairo_set_source_color (cr, &gtk_widget_get_style(widget)->bg [GTK_STATE_NORMAL]);
       cairo_paint (cr);
       cairo_destroy (cr);
 
       gdk_drawable_get_size (priv->drag_window,
                             &area.width, &area.height);
       gtk_notebook_draw_tab (notebook,
-                            notebook->cur_page,
+                            priv->cur_page,
                             &area);
       gtk_notebook_draw_focus (widget, event);
       gtk_container_propagate_expose (GTK_CONTAINER (notebook),
-                                     notebook->cur_page->tab_label, event);
+                                     priv->cur_page->tab_label, event);
     }
   else if (gtk_widget_is_drawable (widget))
     {
       gtk_notebook_paint (widget, &event->area);
-      if (notebook->show_tabs)
+      if (priv->show_tabs)
        {
          GtkNotebookPage *page;
          GList *pages;
 
          gtk_notebook_draw_focus (widget, event);
-         pages = notebook->children;
+         pages = priv->children;
 
          while (pages)
            {
              page = GTK_NOTEBOOK_PAGE (pages);
              pages = pages->next;
 
-             if (page->tab_label->window == event->window &&
+             if (gtk_widget_get_window (page->tab_label) == event->window &&
                  gtk_widget_is_drawable (page->tab_label))
                gtk_container_propagate_expose (GTK_CONTAINER (notebook),
                                                page->tab_label, event);
            }
        }
 
-      if (notebook->cur_page)
+      if (priv->cur_page)
        gtk_container_propagate_expose (GTK_CONTAINER (notebook),
-                                       notebook->cur_page->child,
+                                       priv->cur_page->child,
                                        event);
-      if (notebook->show_tabs)
+      if (priv->show_tabs)
       {
         for (i = 0; i < N_ACTION_WIDGETS; i++)
         {
@@ -2356,13 +2329,14 @@ gtk_notebook_expose (GtkWidget      *widget,
 static gboolean
 gtk_notebook_show_arrows (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   gboolean show_arrow = FALSE;
   GList *children;
-  
-  if (!notebook->scrollable)
+
+  if (!priv->scrollable)
     return FALSE;
 
-  children = notebook->children;
+  children = priv->children;
   while (children)
     {
       GtkNotebookPage *page = children->data;
@@ -2381,6 +2355,7 @@ gtk_notebook_get_arrow_rect (GtkNotebook     *notebook,
                             GdkRectangle    *rectangle,
                             GtkNotebookArrow arrow)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GdkRectangle event_window_pos;
   gboolean before = ARROW_IS_BEFORE (arrow);
   gboolean left = ARROW_IS_LEFT (arrow);
@@ -2395,15 +2370,15 @@ gtk_notebook_get_arrow_rect (GtkNotebook     *notebook,
                             "scroll-arrow-vlength", &scroll_arrow_vlength,
                             NULL);
 
-      switch (notebook->tab_pos)
+      switch (priv->tab_pos)
        {
        case GTK_POS_LEFT:
        case GTK_POS_RIGHT:
           rectangle->width = scroll_arrow_vlength;
           rectangle->height = scroll_arrow_vlength;
 
-         if ((before && (notebook->has_before_previous != notebook->has_before_next)) ||
-             (!before && (notebook->has_after_previous != notebook->has_after_next))) 
+         if ((before && (priv->has_before_previous != priv->has_before_next)) ||
+             (!before && (priv->has_after_previous != priv->has_after_next)))
          rectangle->x = event_window_pos.x + (event_window_pos.width - rectangle->width) / 2;
          else if (left)
            rectangle->x = event_window_pos.x + event_window_pos.width / 2 - rectangle->width;
@@ -2421,14 +2396,14 @@ gtk_notebook_get_arrow_rect (GtkNotebook     *notebook,
 
          if (before)
            {
-             if (left || !notebook->has_before_previous)
+             if (left || !priv->has_before_previous)
                rectangle->x = event_window_pos.x;
              else
                rectangle->x = event_window_pos.x + rectangle->width;
            }
          else
            {
-             if (!left || !notebook->has_after_next)
+             if (!left || !priv->has_after_next)
                rectangle->x = event_window_pos.x + event_window_pos.width - rectangle->width;
              else
                rectangle->x = event_window_pos.x + event_window_pos.width - 2 * rectangle->width;
@@ -2444,16 +2419,17 @@ gtk_notebook_get_arrow (GtkNotebook *notebook,
                        gint         x,
                        gint         y)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GdkRectangle arrow_rect;
   GdkRectangle event_window_pos;
   gint i;
   gint x0, y0;
   GtkNotebookArrow arrow[4];
 
-  arrow[0] = notebook->has_before_previous ? ARROW_LEFT_BEFORE : ARROW_NONE;
-  arrow[1] = notebook->has_before_next ? ARROW_RIGHT_BEFORE : ARROW_NONE;
-  arrow[2] = notebook->has_after_previous ? ARROW_LEFT_AFTER : ARROW_NONE;
-  arrow[3] = notebook->has_after_next ? ARROW_RIGHT_AFTER : ARROW_NONE;
+  arrow[0] = priv->has_before_previous ? ARROW_LEFT_BEFORE : ARROW_NONE;
+  arrow[1] = priv->has_before_next ? ARROW_RIGHT_BEFORE : ARROW_NONE;
+  arrow[2] = priv->has_after_previous ? ARROW_LEFT_AFTER : ARROW_NONE;
+  arrow[3] = priv->has_after_next ? ARROW_RIGHT_AFTER : ARROW_NONE;
 
   if (gtk_notebook_show_arrows (notebook))
     {
@@ -2481,6 +2457,7 @@ static void
 gtk_notebook_do_arrow (GtkNotebook     *notebook,
                       GtkNotebookArrow arrow)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *widget = GTK_WIDGET (notebook);
   gboolean is_rtl, left;
 
@@ -2488,8 +2465,8 @@ gtk_notebook_do_arrow (GtkNotebook     *notebook,
   left = (ARROW_IS_LEFT (arrow) && !is_rtl) || 
          (!ARROW_IS_LEFT (arrow) && is_rtl);
 
-  if (!notebook->focus_tab ||
-      gtk_notebook_search_page (notebook, notebook->focus_tab,
+  if (!priv->focus_tab ||
+      gtk_notebook_search_page (notebook, priv->focus_tab,
                                left ? STEP_PREV : STEP_NEXT,
                                TRUE))
     {
@@ -2503,6 +2480,7 @@ gtk_notebook_arrow_button_press (GtkNotebook      *notebook,
                                 GtkNotebookArrow  arrow,
                                 gint              button)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *widget = GTK_WIDGET (notebook);
   gboolean is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
   gboolean left = (ARROW_IS_LEFT (arrow) && !is_rtl) || 
@@ -2510,9 +2488,9 @@ gtk_notebook_arrow_button_press (GtkNotebook      *notebook,
 
   if (!gtk_widget_has_focus (widget))
     gtk_widget_grab_focus (widget);
-  
-  notebook->button = button;
-  notebook->click_child = arrow;
+
+  priv->button = button;
+  priv->click_child = arrow;
 
   if (button == 1)
     {
@@ -2544,7 +2522,7 @@ get_widget_coordinates (GtkWidget *widget,
   if (!gdk_event_get_coords (event, &tx, &ty))
     return FALSE;
 
-  while (window && window != widget->window)
+  while (window && window != gtk_widget_get_window (widget))
     {
       gint window_x, window_y;
 
@@ -2566,54 +2544,14 @@ get_widget_coordinates (GtkWidget *widget,
     return FALSE;
 }
 
-static gboolean
-gtk_notebook_scroll (GtkWidget      *widget,
-                     GdkEventScroll *event)
-{
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
-  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
-  GtkWidget *child, *event_widget;
-  gint i;
-
-  if (!notebook->cur_page)
-    return FALSE;
-
-  child = notebook->cur_page->child;
-  event_widget = gtk_get_event_widget ((GdkEvent *)event);
-
-  /* ignore scroll events from the content of the page */
-  if (!event_widget || gtk_widget_is_ancestor (event_widget, child) || event_widget == child)
-    return FALSE;
-
-  /* nor from the action area */
-  for (i = 0; i < 2; i++)
-    {
-      if (event_widget == priv->action_widget[i] ||
-          gtk_widget_is_ancestor (event_widget, priv->action_widget[i]))
-        return FALSE;
-    }
-
-  switch (event->direction)
-    {
-    case GDK_SCROLL_RIGHT:
-    case GDK_SCROLL_DOWN:
-      gtk_notebook_next_page (notebook);
-      break;
-    case GDK_SCROLL_LEFT:
-    case GDK_SCROLL_UP:
-      gtk_notebook_prev_page (notebook);
-      break;
-    }
-
-  return TRUE;
-}
-
 static GList*
 get_tab_at_pos (GtkNotebook *notebook, gint x, gint y)
 {
+   GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
-  GList *children = notebook->children;
+  GList *children;
 
+  children = priv->children;
   while (children)
     {
       page = children->data;
@@ -2637,14 +2575,14 @@ gtk_notebook_button_press (GtkWidget      *widget,
                           GdkEventButton *event)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList *tab;
   GtkNotebookArrow arrow;
   gint x, y;
 
-  if (event->type != GDK_BUTTON_PRESS || !notebook->children ||
-      notebook->button)
+  if (event->type != GDK_BUTTON_PRESS || !priv->children ||
+      priv->button)
     return FALSE;
 
   if (!get_widget_coordinates (widget, (GdkEvent *)event, &x, &y))
@@ -2654,9 +2592,9 @@ gtk_notebook_button_press (GtkWidget      *widget,
   if (arrow)
     return gtk_notebook_arrow_button_press (notebook, arrow, event->button);
 
-  if (event->button == 3 && notebook->menu)
+  if (event->button == 3 && priv->menu)
     {
-      gtk_menu_popup (GTK_MENU (notebook->menu), NULL, NULL, 
+      gtk_menu_popup (GTK_MENU (priv->menu), NULL, NULL,
                      NULL, NULL, 3, event->time);
       return TRUE;
     }
@@ -2664,14 +2602,14 @@ gtk_notebook_button_press (GtkWidget      *widget,
   if (event->button != 1)
     return FALSE;
 
-  notebook->button = event->button;
+  priv->button = event->button;
 
   if ((tab = get_tab_at_pos (notebook, x, y)) != NULL)
     {
       gboolean page_changed, was_focus;
 
       page = tab->data;
-      page_changed = page != notebook->cur_page;
+      page_changed = page != priv->cur_page;
       was_focus = gtk_widget_is_focus (widget);
 
       gtk_notebook_switch_focus_tab (notebook, tab);
@@ -2708,14 +2646,16 @@ popup_position_func (GtkMenu  *menu,
                      gpointer  data)
 {
   GtkNotebook *notebook = data;
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation;
   GtkWidget *w;
   GtkRequisition requisition;
 
-  if (notebook->focus_tab)
+  if (priv->focus_tab)
     {
       GtkNotebookPage *page;
 
-      page = notebook->focus_tab->data;
+      page = priv->focus_tab->data;
       w = page->tab_label;
     }
   else
@@ -2723,15 +2663,18 @@ popup_position_func (GtkMenu  *menu,
      w = GTK_WIDGET (notebook);
    }
 
-  gdk_window_get_origin (w->window, x, y);
-  gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
+  gdk_window_get_origin (gtk_widget_get_window (w), x, y);
+
+  gtk_widget_get_allocation (w, &allocation);
+  gtk_size_request_get_size (GTK_SIZE_REQUEST (menu),
+                             &requisition, NULL);
 
   if (gtk_widget_get_direction (w) == GTK_TEXT_DIR_RTL)
-    *x += w->allocation.x + w->allocation.width - requisition.width;
+    *x += allocation.x + allocation.width - requisition.width;
   else
-    *x += w->allocation.x;
+    *x += allocation.x;
 
-  *y += w->allocation.y + w->allocation.height;
+  *y += allocation.y + allocation.height;
 
   *push_in = FALSE;
 }
@@ -2740,13 +2683,14 @@ static gboolean
 gtk_notebook_popup_menu (GtkWidget *widget)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
-  if (notebook->menu)
+  if (priv->menu)
     {
-      gtk_menu_popup (GTK_MENU (notebook->menu), NULL, NULL, 
+      gtk_menu_popup (GTK_MENU (priv->menu), NULL, NULL,
                      popup_position_func, notebook,
                      0, gtk_get_current_event_time ());
-      gtk_menu_shell_select_first (GTK_MENU_SHELL (notebook->menu), FALSE);
+      gtk_menu_shell_select_first (GTK_MENU_SHELL (priv->menu), FALSE);
       return TRUE;
     }
 
@@ -2756,14 +2700,16 @@ gtk_notebook_popup_menu (GtkWidget *widget)
 static void 
 stop_scrolling (GtkNotebook *notebook)
 {
-  if (notebook->timer)
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (priv->timer)
     {
-      g_source_remove (notebook->timer);
-      notebook->timer = 0;
-      notebook->need_timer = FALSE;
+      g_source_remove (priv->timer);
+      priv->timer = 0;
+      priv->need_timer = FALSE;
     }
-  notebook->click_child = 0;
-  notebook->button = 0;
+  priv->click_child = 0;
+  priv->button = 0;
   gtk_notebook_redraw_arrows (notebook);
 }
 
@@ -2771,31 +2717,30 @@ static GList*
 get_drop_position (GtkNotebook *notebook,
                   guint        pack)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *children, *last_child;
   GtkNotebookPage *page;
   gboolean is_rtl;
   gint x, y;
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
   x = priv->mouse_x;
   y = priv->mouse_y;
 
   is_rtl = gtk_widget_get_direction ((GtkWidget *) notebook) == GTK_TEXT_DIR_RTL;
-  children = notebook->children;
+  children = priv->children;
   last_child = NULL;
 
   while (children)
     {
       page = children->data;
 
-      if ((priv->operation != DRAG_OPERATION_REORDER || page != notebook->cur_page) &&
+      if ((priv->operation != DRAG_OPERATION_REORDER || page != priv->cur_page) &&
          gtk_widget_get_visible (page->child) &&
          page->tab_label &&
          gtk_widget_get_mapped (page->tab_label) &&
          page->pack == pack)
        {
-         switch (notebook->tab_pos)
+         switch (priv->tab_pos)
            {
            case GTK_POS_TOP:
            case GTK_POS_BOTTOM:
@@ -2833,8 +2778,9 @@ get_drop_position (GtkNotebook *notebook,
 
 static void
 show_drag_window (GtkNotebook        *notebook,
-                 GtkNotebookPrivate *priv,
-                 GtkNotebookPage    *page)
+                 GtkNotebookPrivate    *priv,
+                 GtkNotebookPage    *page,
+                  GdkDevice          *device)
 {
   GtkWidget *widget = GTK_WIDGET (notebook);
 
@@ -2869,10 +2815,10 @@ show_drag_window (GtkNotebook        *notebook,
   gdk_window_show (priv->drag_window);
 
   /* the grab will dissapear when the window is hidden */
-  gdk_pointer_grab (priv->drag_window,
-                   FALSE,
-                   GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
-                   NULL, NULL, GDK_CURRENT_TIME);
+  gdk_device_grab (device, priv->drag_window,
+                   GDK_OWNERSHIP_WINDOW, FALSE,
+                   GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
+                   NULL, GDK_CURRENT_TIME);
 }
 
 /* This function undoes the reparenting that happens both when drag_window
@@ -2880,13 +2826,13 @@ show_drag_window (GtkNotebook        *notebook,
  */
 static void
 hide_drag_window (GtkNotebook        *notebook,
-                 GtkNotebookPrivate *priv,
+                 GtkNotebookPrivate    *priv,
                  GtkNotebookPage    *page)
 {
   GtkWidget *widget = GTK_WIDGET (notebook);
-  GtkWidget *parent = page->tab_label->parent;
+  GtkWidget *parent = gtk_widget_get_parent (page->tab_label);
 
-  if (page->tab_label->window != widget->window ||
+  if (gtk_widget_get_window (page->tab_label) != gtk_widget_get_window (widget) ||
       !NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, page))
     {
       g_object_ref (page->tab_label);
@@ -2911,15 +2857,13 @@ hide_drag_window (GtkNotebook        *notebook,
 static void
 gtk_notebook_stop_reorder (GtkNotebook *notebook)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
   if (priv->operation == DRAG_OPERATION_DETACH)
     page = priv->detached_tab;
   else
-    page = notebook->cur_page;
+    page = priv->cur_page;
 
   if (!page || !page->tab_label)
     return;
@@ -2934,8 +2878,8 @@ gtk_notebook_stop_reorder (GtkNotebook *notebook)
          GList *element;
 
          element = get_drop_position (notebook, page->pack);
-         old_page_num = g_list_position (notebook->children, notebook->focus_tab);
-         page_num = reorder_tab (notebook, element, notebook->focus_tab);
+         old_page_num = g_list_position (priv->children, priv->focus_tab);
+         page_num = reorder_tab (notebook, element, priv->focus_tab);
           gtk_notebook_child_reordered (notebook, page);
           
          if (priv->has_scrolled || old_page_num != page_num)
@@ -2972,15 +2916,16 @@ gtk_notebook_button_release (GtkWidget      *widget,
     return FALSE;
 
   notebook = GTK_NOTEBOOK (widget);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-  page = notebook->cur_page;
+  priv = notebook->priv;
+
+  page = priv->cur_page;
 
   if (!priv->during_detach &&
       page->reorderable &&
       event->button == priv->pressed_button)
     gtk_notebook_stop_reorder (notebook);
 
-  if (event->button == notebook->button)
+  if (event->button == priv->button)
     {
       stop_scrolling (notebook);
       return TRUE;
@@ -2994,14 +2939,15 @@ gtk_notebook_leave_notify (GtkWidget        *widget,
                           GdkEventCrossing *event)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   gint x, y;
 
   if (!get_widget_coordinates (widget, (GdkEvent *)event, &x, &y))
     return FALSE;
 
-  if (notebook->in_child)
+  if (priv->in_child)
     {
-      notebook->in_child = 0;
+      priv->in_child = 0;
       gtk_notebook_redraw_arrows (notebook);
     }
 
@@ -3011,19 +2957,19 @@ gtk_notebook_leave_notify (GtkWidget        *widget,
 static GtkNotebookPointerPosition
 get_pointer_position (GtkNotebook *notebook)
 {
-  GtkWidget *widget = (GtkWidget *) notebook;
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkWidget *widget = GTK_WIDGET (notebook);
   gint wx, wy, width, height;
   gboolean is_rtl;
 
-  if (!notebook->scrollable)
+  if (!priv->scrollable)
     return POINTER_BETWEEN;
 
-  gdk_window_get_position (notebook->event_window, &wx, &wy);
-  gdk_drawable_get_size (GDK_DRAWABLE (notebook->event_window), &width, &height);
+  gdk_window_get_position (priv->event_window, &wx, &wy);
+  gdk_drawable_get_size (GDK_DRAWABLE (priv->event_window), &width, &height);
 
-  if (notebook->tab_pos == GTK_POS_TOP ||
-      notebook->tab_pos == GTK_POS_BOTTOM)
+  if (priv->tab_pos == GTK_POS_TOP ||
+      priv->tab_pos == GTK_POS_BOTTOM)
     {
       gint x;
 
@@ -3054,29 +3000,28 @@ get_pointer_position (GtkNotebook *notebook)
 static gboolean
 scroll_notebook_timer (gpointer data)
 {
-  GtkNotebook *notebook = (GtkNotebook *) data;
-  GtkNotebookPrivate *priv;
+  GtkNotebook *notebook = GTK_NOTEBOOK (data);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPointerPosition pointer_position;
   GList *element, *first_tab;
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
   pointer_position = get_pointer_position (notebook);
 
-  element = get_drop_position (notebook, notebook->cur_page->pack);
-  reorder_tab (notebook, element, notebook->focus_tab);
-  first_tab = gtk_notebook_search_page (notebook, notebook->first_tab,
+  element = get_drop_position (notebook, priv->cur_page->pack);
+  reorder_tab (notebook, element, priv->focus_tab);
+  first_tab = gtk_notebook_search_page (notebook, priv->first_tab,
                                        (pointer_position == POINTER_BEFORE) ? STEP_PREV : STEP_NEXT,
                                        TRUE);
   if (first_tab)
     {
-      notebook->first_tab = first_tab;
+      priv->first_tab = first_tab;
       gtk_notebook_pages_allocate (notebook);
 
       gdk_window_move_resize (priv->drag_window,
                              priv->drag_window_x,
                              priv->drag_window_y,
-                             notebook->cur_page->allocation.width,
-                             notebook->cur_page->allocation.height);
+                             priv->cur_page->allocation.width,
+                             priv->cur_page->allocation.height);
       gdk_window_raise (priv->drag_window);
     }
 
@@ -3088,6 +3033,7 @@ check_threshold (GtkNotebook *notebook,
                 gint         current_x,
                 gint         current_y)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *widget;
   gint dnd_threshold;
   GdkRectangle rectangle = { 0, }; /* shut up gcc */
@@ -3100,8 +3046,8 @@ check_threshold (GtkNotebook *notebook,
   /* we want a large threshold */
   dnd_threshold *= DND_THRESHOLD_MULTIPLIER;
 
-  gdk_window_get_position (notebook->event_window, &rectangle.x, &rectangle.y);
-  gdk_drawable_get_size (GDK_DRAWABLE (notebook->event_window), &rectangle.width, &rectangle.height);
+  gdk_window_get_position (priv->event_window, &rectangle.x, &rectangle.y);
+  gdk_drawable_get_size (GDK_DRAWABLE (priv->event_window), &rectangle.width, &rectangle.height);
 
   rectangle.x -= dnd_threshold;
   rectangle.width += 2 * dnd_threshold;
@@ -3119,7 +3065,7 @@ gtk_notebook_motion_notify (GtkWidget      *widget,
                            GdkEventMotion *event)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GtkNotebookArrow arrow;
   GtkNotebookPointerPosition pointer_position;
@@ -3127,7 +3073,7 @@ gtk_notebook_motion_notify (GtkWidget      *widget,
   guint timeout;
   gint x_win, y_win;
 
-  page = notebook->cur_page;
+  page = priv->cur_page;
 
   if (!page)
     return FALSE;
@@ -3148,14 +3094,14 @@ gtk_notebook_motion_notify (GtkWidget      *widget,
    * (priv->drag_window has a pointer grab), but we need coordinates relative to
    * the notebook widget.
    */
-  gdk_window_get_origin (widget->window, &x_win, &y_win);
+  gdk_window_get_origin (gtk_widget_get_window (widget), &x_win, &y_win);
   priv->mouse_x = event->x_root - x_win;
   priv->mouse_y = event->y_root - y_win;
 
   arrow = gtk_notebook_get_arrow (notebook, priv->mouse_x, priv->mouse_y);
-  if (arrow != notebook->in_child)
+  if (arrow != priv->in_child)
     {
-      notebook->in_child = arrow;
+      priv->in_child = arrow;
       gtk_notebook_redraw_arrows (notebook);
     }
 
@@ -3165,7 +3111,7 @@ gtk_notebook_motion_notify (GtkWidget      *widget,
   if (page->detachable &&
       check_threshold (notebook, priv->mouse_x, priv->mouse_y))
     {
-      priv->detached_tab = notebook->cur_page;
+      priv->detached_tab = priv->cur_page;
       priv->during_detach = TRUE;
 
       gtk_drag_begin (widget, priv->source_targets, GDK_ACTION_MOVE,
@@ -3212,7 +3158,7 @@ gtk_notebook_motion_notify (GtkWidget      *widget,
          if (priv->operation != DRAG_OPERATION_REORDER)
            {
              priv->operation = DRAG_OPERATION_REORDER;
-             show_drag_window (notebook, priv, page);
+             show_drag_window (notebook, priv, page, event->device);
            }
 
          gtk_notebook_pages_allocate (notebook);
@@ -3271,29 +3217,32 @@ gtk_notebook_draw_focus (GtkWidget      *widget,
                         GdkEventExpose *event)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
   if (gtk_widget_has_focus (widget) && gtk_widget_is_drawable (widget) &&
-      notebook->show_tabs && notebook->cur_page &&
-      notebook->cur_page->tab_label->window == event->window)
+      priv->show_tabs && priv->cur_page &&
+      gtk_widget_get_window (priv->cur_page->tab_label) == event->window)
     {
       GtkNotebookPage *page;
 
-      page = notebook->cur_page;
+      page = priv->cur_page;
 
       if (gtk_widget_intersect (page->tab_label, &event->area, NULL))
         {
+          GtkAllocation tab_allocation;
           GdkRectangle area;
           gint focus_width;
 
           gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL);
 
-          area.x = page->tab_label->allocation.x - focus_width;
-          area.y = page->tab_label->allocation.y - focus_width;
-          area.width = page->tab_label->allocation.width + 2 * focus_width;
-          area.height = page->tab_label->allocation.height + 2 * focus_width;
+          gtk_widget_get_allocation (page->tab_label, &tab_allocation);
+          area.x = tab_allocation.x - focus_width;
+          area.y = tab_allocation.y - focus_width;
+          area.width = tab_allocation.width + 2 * focus_width;
+          area.height = tab_allocation.height + 2 * focus_width;
 
-         gtk_paint_focus (widget->style, event->window, 
-                           GTK_WIDGET_STATE (widget), NULL, widget, "tab",
+         gtk_paint_focus (gtk_widget_get_style (widget), event->window,
+                           gtk_widget_get_state (widget), NULL, widget, "tab",
                           area.x, area.y, area.width, area.height);
         }
     }
@@ -3303,26 +3252,25 @@ static void
 gtk_notebook_style_set  (GtkWidget *widget,
                         GtkStyle  *previous)
 {
-  GtkNotebook *notebook;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
   gboolean has_before_previous;
   gboolean has_before_next;
   gboolean has_after_previous;
   gboolean has_after_next;
 
-  notebook = GTK_NOTEBOOK (widget);
-  
   gtk_widget_style_get (widget,
                         "has-backward-stepper", &has_before_previous,
                         "has-secondary-forward-stepper", &has_before_next,
                         "has-secondary-backward-stepper", &has_after_previous,
                         "has-forward-stepper", &has_after_next,
                         NULL);
-  
-  notebook->has_before_previous = has_before_previous;
-  notebook->has_before_next = has_before_next;
-  notebook->has_after_previous = has_after_previous;
-  notebook->has_after_next = has_after_next;
+
+  priv->has_before_previous = has_before_previous;
+  priv->has_before_next = has_before_next;
+  priv->has_after_previous = has_after_previous;
+  priv->has_after_next = has_after_next;
 
   GTK_WIDGET_CLASS (gtk_notebook_parent_class)->style_set (widget, previous);
 }
@@ -3332,16 +3280,19 @@ on_drag_icon_expose (GtkWidget      *widget,
                     GdkEventExpose *event,
                     gpointer        data)
 {
-  GtkWidget *notebook, *child = GTK_WIDGET (data);
+  GtkWidget *notebook, *child;
   GtkRequisition requisition;
   gint gap_pos;
 
   notebook = GTK_WIDGET (data);
-  child = GTK_BIN (widget)->child;
-  gtk_widget_size_request (widget, &requisition);
+  child = gtk_bin_get_child (GTK_BIN (widget));
+
+  gtk_size_request_get_size (GTK_SIZE_REQUEST (widget),
+                             &requisition, NULL);
   gap_pos = get_tab_gap_pos (GTK_NOTEBOOK (notebook));
 
-  gtk_paint_extension (notebook->style, widget->window,
+  gtk_paint_extension (gtk_widget_get_style (notebook),
+                       gtk_widget_get_window (widget),
                       GTK_STATE_NORMAL, GTK_SHADOW_OUT,
                       NULL, widget, "tab",
                       0, 0,
@@ -3357,8 +3308,8 @@ static void
 gtk_notebook_drag_begin (GtkWidget        *widget,
                         GdkDragContext   *context)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
-  GtkNotebook *notebook = (GtkNotebook*) widget;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *tab_label;
 
   if (priv->dnd_timer)
@@ -3372,7 +3323,7 @@ gtk_notebook_drag_begin (GtkWidget        *widget,
 
   tab_label = priv->detached_tab->tab_label;
 
-  hide_drag_window (notebook, priv, notebook->cur_page);
+  hide_drag_window (notebook, priv, priv->cur_page);
   g_object_ref (tab_label);
   gtk_widget_unparent (tab_label);
 
@@ -3395,14 +3346,15 @@ static void
 gtk_notebook_drag_end (GtkWidget      *widget,
                       GdkDragContext *context)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
-  gtk_notebook_stop_reorder (GTK_NOTEBOOK (widget));
+  gtk_notebook_stop_reorder (notebook);
 
   if (priv->detached_tab)
-    gtk_notebook_switch_page (GTK_NOTEBOOK (widget), priv->detached_tab);
+    gtk_notebook_switch_page (notebook, priv->detached_tab);
 
-  GTK_BIN (priv->dnd_window)->child = NULL;
+  _gtk_bin_set_child (GTK_BIN (priv->dnd_window), NULL);
   gtk_widget_destroy (priv->dnd_window);
   priv->dnd_window = NULL;
 
@@ -3429,14 +3381,12 @@ gtk_notebook_drag_failed (GtkWidget      *widget,
 {
   if (result == GTK_DRAG_RESULT_NO_TARGET)
     {
-      GtkNotebookPrivate *priv;
-      GtkNotebook *notebook, *dest_notebook = NULL;
+      GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+      GtkNotebookPrivate *priv = notebook->priv;
+      GtkNotebook *dest_notebook = NULL;
       GdkDisplay *display;
       gint x, y;
 
-      notebook = GTK_NOTEBOOK (widget);
-      priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
       display = gtk_widget_get_display (widget);
       gdk_display_get_pointer (display, NULL, &x, &y, NULL);
 
@@ -3455,14 +3405,11 @@ gtk_notebook_drag_failed (GtkWidget      *widget,
 static gboolean
 gtk_notebook_switch_tab_timeout (gpointer data)
 {
-  GtkNotebook *notebook;
-  GtkNotebookPrivate *priv;
+  GtkNotebook *notebook = GTK_NOTEBOOK (data);
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *tab;
   gint x, y;
 
-  notebook = GTK_NOTEBOOK (data);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
   priv->switch_tab_timer = 0;
   x = priv->mouse_x;
   y = priv->mouse_y;
@@ -3472,7 +3419,7 @@ gtk_notebook_switch_tab_timeout (gpointer data)
       /* FIXME: hack, we don't want the
        * focus to move fom the source widget
        */
-      notebook->child_has_focus = FALSE;
+      priv->child_has_focus = FALSE;
       gtk_notebook_switch_focus_tab (notebook, tab);
     }
 
@@ -3486,21 +3433,23 @@ gtk_notebook_drag_motion (GtkWidget      *widget,
                          gint            y,
                          guint           time)
 {
-  GtkNotebook *notebook;
-  GtkNotebookPrivate *priv;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation;
   GdkRectangle position;
   GtkSettings *settings;
   GtkNotebookArrow arrow;
   guint timeout;
   GdkAtom target, tab_target;
 
-  notebook = GTK_NOTEBOOK (widget);
+  gtk_widget_get_allocation (widget, &allocation);
+
   arrow = gtk_notebook_get_arrow (notebook,
-                                 x + widget->allocation.x,
-                                 y + widget->allocation.y);
+                                  x + allocation.x,
+                                  y + allocation.y);
   if (arrow)
     {
-      notebook->click_child = arrow;
+      priv->click_child = arrow;
       gtk_notebook_set_scroll_timer (notebook);
       gdk_drag_status (context, 0, time);
       return TRUE;
@@ -3523,8 +3472,8 @@ gtk_notebook_drag_motion (GtkWidget      *widget,
 
       if (widget_group && source_widget_group &&
          widget_group == source_widget_group &&
-         !(widget == GTK_NOTEBOOK (source_widget)->cur_page->child || 
-           gtk_widget_is_ancestor (widget, GTK_NOTEBOOK (source_widget)->cur_page->child)))
+         !(widget == GTK_NOTEBOOK (source_widget)->priv->cur_page->child ||
+           gtk_widget_is_ancestor (widget, GTK_NOTEBOOK (source_widget)->priv->cur_page->child)))
        {
          gdk_drag_status (context, GDK_ACTION_MOVE, time);
          return TRUE;
@@ -3537,9 +3486,8 @@ gtk_notebook_drag_motion (GtkWidget      *widget,
        }
     }
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
-  x += widget->allocation.x;
-  y += widget->allocation.y;
+  x += allocation.x;
+  y += allocation.y;
 
   if (gtk_notebook_get_event_window_position (notebook, &position) &&
       x >= position.x && x <= position.x + position.width &&
@@ -3575,9 +3523,8 @@ gtk_notebook_drag_leave (GtkWidget      *widget,
                         GdkDragContext *context,
                         guint           time)
 {
-  GtkNotebookPrivate *priv;
-
-  priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
   if (priv->switch_tab_timer)
     {
@@ -3616,7 +3563,8 @@ do_detach_tab (GtkNotebook     *from,
               gint             x,
               gint             y)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebookPrivate *to_priv = to->priv;
+  GtkAllocation to_allocation;
   GtkWidget *tab_label, *menu_label;
   gboolean tab_expand, tab_fill, reorderable, detachable;
   GList *element;
@@ -3646,12 +3594,12 @@ do_detach_tab (GtkNotebook     *from,
 
   gtk_container_remove (GTK_CONTAINER (from), child);
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (to);
-  priv->mouse_x = x + GTK_WIDGET (to)->allocation.x;
-  priv->mouse_y = y + GTK_WIDGET (to)->allocation.y;
+  gtk_widget_get_allocation (GTK_WIDGET (to), &to_allocation);
+  to_priv->mouse_x = x + to_allocation.x;
+  to_priv->mouse_y = y + to_allocation.y;
 
   element = get_drop_position (to, tab_pack);
-  page_num = g_list_position (to->children, element);
+  page_num = g_list_position (to_priv->children, element);
   gtk_notebook_insert_page_menu (to, child, tab_label, menu_label, page_num);
 
   gtk_container_child_set (GTK_CONTAINER (to), child,
@@ -3680,11 +3628,10 @@ gtk_notebook_drag_data_get (GtkWidget        *widget,
                            guint             info,
                            guint             time)
 {
-  GtkNotebookPrivate *priv;
-
   if (data->target == gdk_atom_intern_static_string ("GTK_NOTEBOOK_TAB"))
     {
-      priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
+      GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+      GtkNotebookPrivate *priv = notebook->priv;
 
       gtk_selection_data_set (data,
                              data->target,
@@ -3808,15 +3755,14 @@ gtk_notebook_get_child_property (GtkContainer    *container,
                                 GValue          *value,
                                 GParamSpec      *pspec)
 {
+  GtkNotebook *notebook = GTK_NOTEBOOK (container);
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *list;
-  GtkNotebook *notebook;
   GtkWidget *label;
   gboolean expand;
   gboolean fill;
   GtkPackType pack_type;
 
-  notebook = GTK_NOTEBOOK (container);
-
   /* not finding child's page is valid for menus or labels */
   list = gtk_notebook_find_child (notebook, child, NULL);
   if (!list)
@@ -3832,7 +3778,7 @@ gtk_notebook_get_child_property (GtkContainer    *container,
       label = gtk_notebook_get_tab_label (notebook, child);
 
       if (GTK_IS_LABEL (label))
-       g_value_set_string (value, GTK_LABEL (label)->label);
+       g_value_set_string (value, gtk_label_get_label (GTK_LABEL (label)));
       else
        g_value_set_string (value, NULL);
       break;
@@ -3840,12 +3786,12 @@ gtk_notebook_get_child_property (GtkContainer    *container,
       label = gtk_notebook_get_menu_label (notebook, child);
 
       if (GTK_IS_LABEL (label))
-       g_value_set_string (value, GTK_LABEL (label)->label);
+       g_value_set_string (value, gtk_label_get_label (GTK_LABEL (label)));
       else
        g_value_set_string (value, NULL);
       break;
     case CHILD_PROP_POSITION:
-      g_value_set_int (value, g_list_position (notebook->children, list));
+      g_value_set_int (value, g_list_position (priv->children, list));
       break;
     case CHILD_PROP_TAB_EXPAND:
        gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (container), child,
@@ -3888,14 +3834,13 @@ static void
 gtk_notebook_remove (GtkContainer *container,
                     GtkWidget    *widget)
 {
-  GtkNotebook *notebook;
+  GtkNotebook *notebook = GTK_NOTEBOOK (container);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList *children;
   gint page_num = 0;
 
-  notebook = GTK_NOTEBOOK (container);
-
-  children = notebook->children;
+  children = priv->children;
   while (children)
     {
       page = children->data;
@@ -3926,13 +3871,15 @@ gtk_notebook_remove (GtkContainer *container,
 static gboolean
 focus_tabs_in (GtkNotebook *notebook)
 {
-  if (notebook->show_tabs && notebook->cur_page)
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (priv->show_tabs && priv->cur_page)
     {
       gtk_widget_grab_focus (GTK_WIDGET (notebook));
 
       gtk_notebook_switch_focus_tab (notebook,
-                                    g_list_find (notebook->children,
-                                                 notebook->cur_page));
+                                    g_list_find (priv->children,
+                                                 priv->cur_page));
 
       return TRUE;
     }
@@ -3945,9 +3892,10 @@ focus_tabs_move (GtkNotebook     *notebook,
                 GtkDirectionType direction,
                 gint             search_direction)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *new_page;
 
-  new_page = gtk_notebook_search_page (notebook, notebook->focus_tab,
+  new_page = gtk_notebook_search_page (notebook, priv->focus_tab,
                                       search_direction, TRUE);
   if (!new_page)
     {
@@ -3974,8 +3922,10 @@ static gboolean
 focus_child_in (GtkNotebook      *notebook,
                GtkDirectionType  direction)
 {
-  if (notebook->cur_page)
-    return gtk_widget_child_focus (notebook->cur_page->child, direction);
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (priv->cur_page)
+    return gtk_widget_child_focus (priv->cur_page->child, direction);
   else
     return FALSE;
 }
@@ -3985,7 +3935,7 @@ focus_action_in (GtkNotebook      *notebook,
                  gint              action,
                  GtkDirectionType  direction)
 {
-  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  GtkNotebookPrivate *priv = notebook->priv;
 
   if (priv->action_widget[action] &&
       gtk_widget_get_visible (priv->action_widget[action]))
@@ -4001,9 +3951,9 @@ static gint
 gtk_notebook_focus (GtkWidget        *widget,
                    GtkDirectionType  direction)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *old_focus_child;
-  GtkNotebook *notebook;
   GtkDirectionType effective_direction;
   gint first_action;
   gint last_action;
@@ -4012,11 +3962,9 @@ gtk_notebook_focus (GtkWidget        *widget,
   GtkContainer *container;
 
   container = GTK_CONTAINER (widget);
-  notebook = GTK_NOTEBOOK (container);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
 
-  if (notebook->tab_pos == GTK_POS_TOP ||
-      notebook->tab_pos == GTK_POS_LEFT)
+  if (priv->tab_pos == GTK_POS_TOP ||
+      priv->tab_pos == GTK_POS_LEFT)
     {
       first_action = ACTION_WIDGET_START;
       last_action = ACTION_WIDGET_END;
@@ -4027,14 +3975,14 @@ gtk_notebook_focus (GtkWidget        *widget,
       last_action = ACTION_WIDGET_START;
     }
 
-  if (notebook->focus_out)
+  if (priv->focus_out)
     {
-      notebook->focus_out = FALSE; /* Clear this to catch the wrap-around case */
+      priv->focus_out = FALSE; /* Clear this to catch the wrap-around case */
       return FALSE;
     }
 
   widget_is_focus = gtk_widget_is_focus (widget);
-  old_focus_child = container->focus_child;
+  old_focus_child = gtk_container_get_focus_child (container);
 
   effective_direction = get_effective_direction (notebook, direction);
 
@@ -4059,7 +4007,7 @@ gtk_notebook_focus (GtkWidget        *widget,
               switch (direction)
                 {
                case GTK_DIR_TAB_FORWARD:
-                  if ((notebook->tab_pos == GTK_POS_RIGHT || notebook->tab_pos == GTK_POS_BOTTOM) &&
+                  if ((priv->tab_pos == GTK_POS_RIGHT || priv->tab_pos == GTK_POS_BOTTOM) &&
                       focus_child_in (notebook, direction))
                     return TRUE;
                  return focus_tabs_in (notebook);
@@ -4088,7 +4036,7 @@ gtk_notebook_focus (GtkWidget        *widget,
                case GTK_DIR_TAB_FORWARD:
                   return FALSE;
                 case GTK_DIR_TAB_BACKWARD:
-                  if ((notebook->tab_pos == GTK_POS_TOP || notebook->tab_pos == GTK_POS_LEFT) &&
+                  if ((priv->tab_pos == GTK_POS_TOP || priv->tab_pos == GTK_POS_LEFT) &&
                       focus_child_in (notebook, direction))
                     return TRUE;
                  return focus_tabs_in (notebook);
@@ -4178,6 +4126,7 @@ gtk_notebook_set_focus_child (GtkContainer *container,
                              GtkWidget    *child)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (container);
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *page_child;
   GtkWidget *toplevel;
 
@@ -4189,10 +4138,10 @@ gtk_notebook_set_focus_child (GtkContainer *container,
   toplevel = gtk_widget_get_toplevel (GTK_WIDGET (container));
   if (toplevel && gtk_widget_is_toplevel (toplevel))
     {
-      page_child = GTK_WINDOW (toplevel)->focus_widget; 
+      page_child = gtk_window_get_focus (GTK_WINDOW (toplevel));
       while (page_child)
        {
-         if (page_child->parent == GTK_WIDGET (container))
+          if (gtk_widget_get_parent (page_child) == GTK_WIDGET (container))
            {
              GList *list = gtk_notebook_find_child (notebook, page_child, NULL);
              if (list != NULL) 
@@ -4201,15 +4150,15 @@ gtk_notebook_set_focus_child (GtkContainer *container,
              
                  if (page->last_focus_child)
                    g_object_remove_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
-                 
-                 page->last_focus_child = GTK_WINDOW (toplevel)->focus_widget;
+
+                 page->last_focus_child = gtk_window_get_focus (GTK_WINDOW (toplevel));
                  g_object_add_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
              
                  break;
                }
            }
 
-         page_child = page_child->parent;
+          page_child = gtk_widget_get_parent (page_child);
        }
     }
   
@@ -4217,13 +4166,13 @@ gtk_notebook_set_focus_child (GtkContainer *container,
     {
       g_return_if_fail (GTK_IS_WIDGET (child));
 
-      notebook->child_has_focus = TRUE;
-      if (!notebook->focus_tab)
+      priv->child_has_focus = TRUE;
+      if (!priv->focus_tab)
        {
          GList *children;
          GtkNotebookPage *page;
 
-         children = notebook->children;
+         children = priv->children;
          while (children)
            {
              page = children->data;
@@ -4234,7 +4183,7 @@ gtk_notebook_set_focus_child (GtkContainer *container,
        }
     }
   else
-    notebook->child_has_focus = FALSE;
+    priv->child_has_focus = FALSE;
 
   GTK_CONTAINER_CLASS (gtk_notebook_parent_class)->set_focus_child (container, child);
 }
@@ -4245,15 +4194,12 @@ gtk_notebook_forall (GtkContainer *container,
                     GtkCallback   callback,
                     gpointer      callback_data)
 {
-  GtkNotebookPrivate *priv;
-  GtkNotebook *notebook;
+  GtkNotebook *notebook = GTK_NOTEBOOK (container);
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *children;
   gint i;
 
-  notebook = GTK_NOTEBOOK (container);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
-  children = notebook->children;
+  children = priv->children;
   while (children)
     {
       GtkNotebookPage *page;
@@ -4293,15 +4239,16 @@ page_visible_cb (GtkWidget  *page,
                  GParamSpec *arg,
                  gpointer    data)
 {
-  GtkNotebook *notebook = (GtkNotebook *) data;
+  GtkNotebook *notebook = GTK_NOTEBOOK (data);
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *list;
   GList *next = NULL;
 
-  if (notebook->cur_page &&
-      notebook->cur_page->child == page &&
+  if (priv->cur_page &&
+      priv->cur_page->child == page &&
       !gtk_widget_get_visible (page))
     {
-      list = g_list_find (notebook->children, notebook->cur_page);
+      list = g_list_find (priv->children, priv->cur_page);
       if (list)
         {
           next = gtk_notebook_search_page (notebook, list, STEP_NEXT, TRUE);
@@ -4321,6 +4268,7 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
                               GtkWidget   *menu_label,
                               gint         position)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   gint nchildren;
 
@@ -4329,16 +4277,16 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
   page = g_slice_new0 (GtkNotebookPage);
   page->child = child;
 
-  nchildren = g_list_length (notebook->children);
+  nchildren = g_list_length (priv->children);
   if ((position < 0) || (position > nchildren))
     position = nchildren;
 
-  notebook->children = g_list_insert (notebook->children, page, position);
+  priv->children = g_list_insert (priv->children, page, position);
 
   if (!tab_label)
     {
       page->default_tab = TRUE;
-      if (notebook->show_tabs)
+      if (priv->show_tabs)
        tab_label = gtk_label_new (NULL);
     }
   page->tab_label = tab_label;
@@ -4352,9 +4300,9 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
   else  
     g_object_ref_sink (page->menu_label);
 
-  if (notebook->menu)
+  if (priv->menu)
     gtk_notebook_menu_item_create (notebook,
-                                  g_list_find (notebook->children, page));
+                                  g_list_find (priv->children, page));
 
   gtk_widget_set_parent (child, GTK_WIDGET (notebook));
   if (tab_label)
@@ -4362,16 +4310,16 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
 
   gtk_notebook_update_labels (notebook);
 
-  if (!notebook->first_tab)
-    notebook->first_tab = notebook->children;
+  if (!priv->first_tab)
+    priv->first_tab = priv->children;
 
   /* child visible will be turned on by switch_page below */
-  if (notebook->cur_page != page)
+  if (priv->cur_page != page)
     gtk_widget_set_child_visible (child, FALSE);
 
   if (tab_label)
     {
-      if (notebook->show_tabs && gtk_widget_get_visible (child))
+      if (priv->show_tabs && gtk_widget_get_visible (child))
        gtk_widget_show (tab_label);
       else
        gtk_widget_hide (tab_label);
@@ -4392,16 +4340,16 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
                 child,
                 position);
 
-  if (!notebook->cur_page)
+  if (!priv->cur_page)
     {
       gtk_notebook_switch_page (notebook, page);
       /* focus_tab is set in the switch_page method */
-      gtk_notebook_switch_focus_tab (notebook, notebook->focus_tab);
+      gtk_notebook_switch_focus_tab (notebook, priv->focus_tab);
     }
 
   gtk_notebook_update_tab_states (notebook);
 
-  if (notebook->scrollable)
+  if (priv->scrollable)
     gtk_notebook_redraw_arrows (notebook);
 
   gtk_widget_child_notify (child, "tab-expand");
@@ -4430,64 +4378,73 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
 static void
 gtk_notebook_redraw_tabs (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation;
   GtkWidget *widget;
   GtkNotebookPage *page;
+  GtkStyle *style;
   GdkRectangle redraw_rect;
   gint border;
   gint tab_pos = get_effective_tab_pos (notebook);
 
   widget = GTK_WIDGET (notebook);
-  border = GTK_CONTAINER (notebook)->border_width;
+  border = gtk_container_get_border_width (GTK_CONTAINER (notebook));
 
-  if (!gtk_widget_get_mapped (widget) || !notebook->first_tab)
+  if (!gtk_widget_get_mapped (widget) || !priv->first_tab)
     return;
 
-  page = notebook->first_tab->data;
+  page = priv->first_tab->data;
 
   redraw_rect.x = border;
   redraw_rect.y = border;
 
+  style = gtk_widget_get_style (widget);
+  gtk_widget_get_allocation (widget, &allocation);
+
   switch (tab_pos)
     {
     case GTK_POS_BOTTOM:
-      redraw_rect.y = widget->allocation.height - border -
-       page->allocation.height - widget->style->ythickness;
+      redraw_rect.y = allocation.height - border -
+       page->allocation.height - style->ythickness;
 
-      if (page != notebook->cur_page)
-       redraw_rect.y -= widget->style->ythickness;
+      if (page != priv->cur_page)
+       redraw_rect.y -= style->ythickness;
       /* fall through */
     case GTK_POS_TOP:
-      redraw_rect.width = widget->allocation.width - 2 * border;
-      redraw_rect.height = page->allocation.height + widget->style->ythickness;
+      redraw_rect.width = allocation.width - 2 * border;
+      redraw_rect.height = page->allocation.height + style->ythickness;
 
-      if (page != notebook->cur_page)
-       redraw_rect.height += widget->style->ythickness;
+      if (page != priv->cur_page)
+       redraw_rect.height += style->ythickness;
       break;
     case GTK_POS_RIGHT:
-      redraw_rect.x = widget->allocation.width - border -
-       page->allocation.width - widget->style->xthickness;
+      redraw_rect.x = allocation.width - border -
+       page->allocation.width - style->xthickness;
 
-      if (page != notebook->cur_page)
-       redraw_rect.x -= widget->style->xthickness;
+      if (page != priv->cur_page)
+       redraw_rect.x -= style->xthickness;
       /* fall through */
     case GTK_POS_LEFT:
-      redraw_rect.width = page->allocation.width + widget->style->xthickness;
-      redraw_rect.height = widget->allocation.height - 2 * border;
+      redraw_rect.width = page->allocation.width + style->xthickness;
+      redraw_rect.height = allocation.height - 2 * border;
 
-      if (page != notebook->cur_page)
-       redraw_rect.width += widget->style->xthickness;
+      if (page != priv->cur_page)
+       redraw_rect.width += style->xthickness;
       break;
     }
 
-  redraw_rect.x += widget->allocation.x;
-  redraw_rect.y += widget->allocation.y;
+  redraw_rect.x += allocation.x;
+  redraw_rect.y += allocation.y;
 
-  gdk_window_invalidate_rect (widget->window, &redraw_rect, TRUE);
+  gdk_window_invalidate_rect (gtk_widget_get_window (widget),
+                              &redraw_rect, TRUE);
 }
 
 static void
 gtk_notebook_redraw_arrows (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+
   if (gtk_widget_get_mapped (GTK_WIDGET (notebook)) &&
       gtk_notebook_show_arrows (notebook))
     {
@@ -4495,10 +4452,10 @@ gtk_notebook_redraw_arrows (GtkNotebook *notebook)
       gint i;
       GtkNotebookArrow arrow[4];
 
-      arrow[0] = notebook->has_before_previous ? ARROW_LEFT_BEFORE : ARROW_NONE;
-      arrow[1] = notebook->has_before_next ? ARROW_RIGHT_BEFORE : ARROW_NONE;
-      arrow[2] = notebook->has_after_previous ? ARROW_LEFT_AFTER : ARROW_NONE;
-      arrow[3] = notebook->has_after_next ? ARROW_RIGHT_AFTER : ARROW_NONE;
+      arrow[0] = priv->has_before_previous ? ARROW_LEFT_BEFORE : ARROW_NONE;
+      arrow[1] = priv->has_before_next ? ARROW_RIGHT_BEFORE : ARROW_NONE;
+      arrow[2] = priv->has_after_previous ? ARROW_LEFT_AFTER : ARROW_NONE;
+      arrow[3] = priv->has_after_next ? ARROW_RIGHT_AFTER : ARROW_NONE;
 
       for (i = 0; i < 4; i++) 
        {
@@ -4506,7 +4463,7 @@ gtk_notebook_redraw_arrows (GtkNotebook *notebook)
            continue;
 
          gtk_notebook_get_arrow_rect (notebook, &rect, arrow[i]);
-         gdk_window_invalidate_rect (GTK_WIDGET (notebook)->window, 
+          gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (notebook)),
                                      &rect, FALSE);
        }
     }
@@ -4515,13 +4472,14 @@ gtk_notebook_redraw_arrows (GtkNotebook *notebook)
 static gboolean
 gtk_notebook_timer (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   gboolean retval = FALSE;
 
-  if (notebook->timer)
+  if (priv->timer)
     {
-      gtk_notebook_do_arrow (notebook, notebook->click_child);
+      gtk_notebook_do_arrow (notebook, priv->click_child);
 
-      if (notebook->need_timer)
+      if (priv->need_timer)
        {
           GtkSettings *settings;
           guint        timeout;
@@ -4529,8 +4487,8 @@ gtk_notebook_timer (GtkNotebook *notebook)
           settings = gtk_widget_get_settings (GTK_WIDGET (notebook));
           g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
 
-         notebook->need_timer = FALSE;
-         notebook->timer = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
+         priv->need_timer = FALSE;
+         priv->timer = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
                                           (GSourceFunc) gtk_notebook_timer,
                                           (gpointer) notebook);
        }
@@ -4544,19 +4502,20 @@ gtk_notebook_timer (GtkNotebook *notebook)
 static void
 gtk_notebook_set_scroll_timer (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *widget = GTK_WIDGET (notebook);
 
-  if (!notebook->timer)
+  if (!priv->timer)
     {
       GtkSettings *settings = gtk_widget_get_settings (widget);
       guint timeout;
 
       g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
 
-      notebook->timer = gdk_threads_add_timeout (timeout,
+      priv->timer = gdk_threads_add_timeout (timeout,
                                       (GSourceFunc) gtk_notebook_timer,
                                       (gpointer) notebook);
-      notebook->need_timer = TRUE;
+      priv->need_timer = TRUE;
     }
 }
 
@@ -4572,7 +4531,8 @@ gtk_notebook_find_child (GtkNotebook *notebook,
                         GtkWidget   *child,
                         const gchar *function)
 {
-  GList *list = g_list_find_custom (notebook->children, child,
+  GtkNotebookPrivate *priv = notebook->priv;
+  GList *list = g_list_find_custom (priv->children, child,
                                    gtk_notebook_page_compare);
 
 #ifndef G_DISABLE_CHECKS
@@ -4605,7 +4565,7 @@ static void
 gtk_notebook_real_remove (GtkNotebook *notebook,
                          GList       *list)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList * next_list;
   gint need_resize = FALSE;
@@ -4613,18 +4573,17 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
 
   gboolean destroying;
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
   destroying = GTK_OBJECT_FLAGS (notebook) & GTK_IN_DESTRUCTION;
-  
+
   next_list = gtk_notebook_search_page (notebook, list, STEP_NEXT, TRUE);
   if (!next_list)
     next_list = gtk_notebook_search_page (notebook, list, STEP_PREV, TRUE);
 
-  notebook->children = g_list_remove_link (notebook->children, list);
+  priv->children = g_list_remove_link (priv->children, list);
 
-  if (notebook->cur_page == list->data)
+  if (priv->cur_page == list->data)
     { 
-      notebook->cur_page = NULL;
+      priv->cur_page = NULL;
       if (next_list && !destroying)
        gtk_notebook_switch_page (notebook, GTK_NOTEBOOK_PAGE (next_list));
     }
@@ -4632,9 +4591,9 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
   if (priv->detached_tab == list->data)
     priv->detached_tab = NULL;
 
-  if (list == notebook->first_tab)
-    notebook->first_tab = next_list;
-  if (list == notebook->focus_tab && !destroying)
+  if (list == priv->first_tab)
+    priv->first_tab = next_list;
+  if (list == priv->focus_tab && !destroying)
     gtk_notebook_switch_focus_tab (notebook, next_list);
 
   page = list->data;
@@ -4655,17 +4614,20 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
       if (destroying)
         gtk_widget_destroy (tab_label);
       g_object_unref (tab_label);
-    } 
+    }
 
-  if (notebook->menu)
+  if (priv->menu)
     {
-      gtk_container_remove (GTK_CONTAINER (notebook->menu), 
-                           page->menu_label->parent);
-      gtk_widget_queue_resize (notebook->menu);
+      GtkWidget *parent = gtk_widget_get_parent (page->menu_label);
+
+      gtk_notebook_menu_label_unparent (parent, NULL);
+      gtk_container_remove (GTK_CONTAINER (priv->menu), parent);
+
+      gtk_widget_queue_resize (priv->menu);
     }
   if (!page->default_menu)
     g_object_unref (page->menu_label);
-  
+
   g_list_free (list);
 
   if (page->last_focus_child)
@@ -4684,12 +4646,13 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
 static void
 gtk_notebook_update_labels (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GList *list;
   gchar string[32];
   gint page_num = 1;
 
-  if (!notebook->show_tabs && !notebook->menu)
+  if (!priv->show_tabs && !priv->menu)
     return;
 
   for (list = gtk_notebook_search_page (notebook, NULL, STEP_NEXT, FALSE);
@@ -4698,7 +4661,7 @@ gtk_notebook_update_labels (GtkNotebook *notebook)
     {
       page = list->data;
       g_snprintf (string, sizeof(string), _("Page %u"), page_num++);
-      if (notebook->show_tabs)
+      if (priv->show_tabs)
        {
          if (page->default_tab)
            {
@@ -4719,11 +4682,11 @@ gtk_notebook_update_labels (GtkNotebook *notebook)
                   gtk_widget_get_visible (page->tab_label))
            gtk_widget_hide (page->tab_label);
        }
-      if (notebook->menu && page->default_menu)
+      if (priv->menu && page->default_menu)
        {
          if (GTK_IS_LABEL (page->tab_label))
            gtk_label_set_text (GTK_LABEL (page->menu_label),
-                                GTK_LABEL (page->tab_label)->label);
+                                gtk_label_get_label (GTK_LABEL (page->tab_label)));
          else
            gtk_label_set_text (GTK_LABEL (page->menu_label), string);
        }
@@ -4734,10 +4697,11 @@ static gint
 gtk_notebook_real_page_position (GtkNotebook *notebook,
                                 GList       *list)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *work;
   gint count_start;
 
-  for (work = notebook->children, count_start = 0;
+  for (work = priv->children, count_start = 0;
        work && work != list; work = work->next)
     if (GTK_NOTEBOOK_PAGE (work)->pack == GTK_PACK_START)
       count_start++;
@@ -4757,6 +4721,7 @@ gtk_notebook_search_page (GtkNotebook *notebook,
                          gint         direction,
                          gboolean     find_visible)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page = NULL;
   GList *old_list = NULL;
   gint flag = 0;
@@ -4783,7 +4748,7 @@ gtk_notebook_search_page (GtkNotebook *notebook,
          list = list->next;
        }
       else
-       list = notebook->children;
+       list = priv->children;
 
       while (list)
        {
@@ -4830,11 +4795,12 @@ gtk_notebook_paint (GtkWidget    *widget,
   GtkNotebook *notebook;
   GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
+  GtkAllocation allocation;
   GList *children;
   gboolean showarrow;
   gint width, height;
   gint x, y;
-  gint border_width = GTK_CONTAINER (widget)->border_width;
+  guint border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
   gint gap_x = 0, gap_width = 0, step = STEP_PREV;
   gboolean is_rtl;
   gint tab_pos;
@@ -4843,35 +4809,38 @@ gtk_notebook_paint (GtkWidget    *widget,
     return;
 
   notebook = GTK_NOTEBOOK (widget);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  priv = notebook->priv;
   is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
   tab_pos = get_effective_tab_pos (notebook);
 
-  if ((!notebook->show_tabs && !notebook->show_border) ||
-      !notebook->cur_page || !gtk_widget_get_visible (notebook->cur_page->child))
+  if ((!priv->show_tabs && !priv->show_border) ||
+      !priv->cur_page || !gtk_widget_get_visible (priv->cur_page->child))
     return;
 
-  x = widget->allocation.x + border_width;
-  y = widget->allocation.y + border_width;
-  width = widget->allocation.width - border_width * 2;
-  height = widget->allocation.height - border_width * 2;
+  gtk_widget_get_allocation (widget, &allocation);
+
+  x = allocation.x + border_width;
+  y = allocation.y + border_width;
+  width = allocation.width - border_width * 2;
+  height = allocation.height - border_width * 2;
 
-  if (notebook->show_border && (!notebook->show_tabs || !notebook->children))
+  if (priv->show_border && (!priv->show_tabs || !priv->children))
     {
-      gtk_paint_box (widget->style, widget->window,
+      gtk_paint_box (gtk_widget_get_style (widget),
+                     gtk_widget_get_window (widget),
                     GTK_STATE_NORMAL, GTK_SHADOW_OUT,
                     area, widget, "notebook",
                     x, y, width, height);
       return;
     }
 
-  if (!notebook->first_tab)
-    notebook->first_tab = notebook->children;
+  if (!priv->first_tab)
+    priv->first_tab = priv->children;
 
-  if (!gtk_widget_get_mapped (notebook->cur_page->tab_label))
-    page = GTK_NOTEBOOK_PAGE (notebook->first_tab);
+  if (!gtk_widget_get_mapped (priv->cur_page->tab_label))
+    page = GTK_NOTEBOOK_PAGE (priv->first_tab);
   else
-    page = notebook->cur_page;
+    page = priv->cur_page;
 
   switch (tab_pos)
     {
@@ -4889,8 +4858,8 @@ gtk_notebook_paint (GtkWidget    *widget,
       break;
     }
 
-  if (!NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, notebook->cur_page) ||
-      !gtk_widget_get_mapped (notebook->cur_page->tab_label))
+  if (!NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, priv->cur_page) ||
+      !gtk_widget_get_mapped (priv->cur_page->tab_label))
     {
       gap_x = 0;
       gap_width = 0;
@@ -4902,26 +4871,27 @@ gtk_notebook_paint (GtkWidget    *widget,
        case GTK_POS_TOP:
        case GTK_POS_BOTTOM:
          if (priv->operation == DRAG_OPERATION_REORDER)
-           gap_x = priv->drag_window_x - widget->allocation.x - border_width;
+           gap_x = priv->drag_window_x - allocation.x - border_width;
          else
-           gap_x = notebook->cur_page->allocation.x - widget->allocation.x - border_width;
+           gap_x = priv->cur_page->allocation.x - allocation.x - border_width;
 
-         gap_width = notebook->cur_page->allocation.width;
+         gap_width = priv->cur_page->allocation.width;
          step = is_rtl ? STEP_NEXT : STEP_PREV;
          break;
        case GTK_POS_LEFT:
        case GTK_POS_RIGHT:
          if (priv->operation == DRAG_OPERATION_REORDER)
-           gap_x = priv->drag_window_y - border_width - widget->allocation.y;
+           gap_x = priv->drag_window_y - border_width - allocation.y;
          else
-           gap_x = notebook->cur_page->allocation.y - widget->allocation.y - border_width;
+           gap_x = priv->cur_page->allocation.y - allocation.y - border_width;
 
-         gap_width = notebook->cur_page->allocation.height;
+         gap_width = priv->cur_page->allocation.height;
          step = STEP_PREV;
          break;
        }
     }
-  gtk_paint_box_gap (widget->style, widget->window,
+  gtk_paint_box_gap (gtk_widget_get_style (widget),
+                     gtk_widget_get_window (widget),
                     GTK_STATE_NORMAL, GTK_SHADOW_OUT,
                     area, widget, "notebook",
                     x, y, width, height,
@@ -4938,22 +4908,22 @@ gtk_notebook_paint (GtkWidget    *widget,
        continue;
       if (!gtk_widget_get_mapped (page->tab_label))
        showarrow = TRUE;
-      else if (page != notebook->cur_page)
+      else if (page != priv->cur_page)
        gtk_notebook_draw_tab (notebook, page, area);
     }
 
-  if (showarrow && notebook->scrollable) 
+  if (showarrow && priv->scrollable)
     {
-      if (notebook->has_before_previous)
+      if (priv->has_before_previous)
        gtk_notebook_draw_arrow (notebook, ARROW_LEFT_BEFORE);
-      if (notebook->has_before_next)
+      if (priv->has_before_next)
        gtk_notebook_draw_arrow (notebook, ARROW_RIGHT_BEFORE);
-      if (notebook->has_after_previous)
+      if (priv->has_after_previous)
        gtk_notebook_draw_arrow (notebook, ARROW_LEFT_AFTER);
-      if (notebook->has_after_next)
+      if (priv->has_after_next)
        gtk_notebook_draw_arrow (notebook, ARROW_RIGHT_AFTER);
     }
-  gtk_notebook_draw_tab (notebook, notebook->cur_page, area);
+  gtk_notebook_draw_tab (notebook, priv->cur_page, area);
 }
 
 static void
@@ -4975,12 +4945,12 @@ gtk_notebook_draw_tab (GtkNotebook     *notebook,
     return;
 
   widget = GTK_WIDGET (notebook);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  priv = notebook->priv;
 
-  if (priv->operation == DRAG_OPERATION_REORDER && page == notebook->cur_page)
+  if (priv->operation == DRAG_OPERATION_REORDER && page == priv->cur_page)
     window = priv->drag_window;
   else
-    window = widget->window;
+    window = gtk_widget_get_window (widget);
 
   page_area.x = page->allocation.x;
   page_area.y = page->allocation.y;
@@ -4991,12 +4961,12 @@ gtk_notebook_draw_tab (GtkNotebook     *notebook,
     {
       gap_side = get_tab_gap_pos (notebook);
 
-      if (notebook->cur_page == page)
+      if (priv->cur_page == page)
        state_type = GTK_STATE_NORMAL;
       else 
        state_type = GTK_STATE_ACTIVE;
 
-      gtk_paint_extension (widget->style, window,
+      gtk_paint_extension (gtk_widget_get_style (widget), window,
                           state_type, GTK_SHADOW_OUT,
                           area, widget, "tab",
                           page_area.x, page_area.y,
@@ -5009,6 +4979,7 @@ static void
 gtk_notebook_draw_arrow (GtkNotebook      *notebook,
                         GtkNotebookArrow  nbarrow)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkStateType state_type;
   GtkShadowType shadow_type;
   GtkWidget *widget;
@@ -5035,31 +5006,31 @@ gtk_notebook_draw_arrow (GtkNotebook      *notebook,
                             "scroll-arrow-vlength", &scroll_arrow_vlength,
                             NULL);
 
-      if (notebook->in_child == nbarrow)
+      if (priv->in_child == nbarrow)
         {
-          if (notebook->click_child == nbarrow)
+          if (priv->click_child == nbarrow)
             state_type = GTK_STATE_ACTIVE;
           else
             state_type = GTK_STATE_PRELIGHT;
         }
       else
-        state_type = GTK_WIDGET_STATE (widget);
+        state_type = gtk_widget_get_state (widget);
 
-      if (notebook->click_child == nbarrow)
+      if (priv->click_child == nbarrow)
         shadow_type = GTK_SHADOW_IN;
       else
         shadow_type = GTK_SHADOW_OUT;
 
-      if (notebook->focus_tab &&
-         !gtk_notebook_search_page (notebook, notebook->focus_tab,
+      if (priv->focus_tab &&
+         !gtk_notebook_search_page (notebook, priv->focus_tab,
                                     left ? STEP_PREV : STEP_NEXT, TRUE))
        {
          shadow_type = GTK_SHADOW_ETCHED_IN;
          state_type = GTK_STATE_INSENSITIVE;
        }
       
-      if (notebook->tab_pos == GTK_POS_LEFT ||
-         notebook->tab_pos == GTK_POS_RIGHT)
+      if (priv->tab_pos == GTK_POS_LEFT ||
+         priv->tab_pos == GTK_POS_RIGHT)
         {
           arrow = (ARROW_IS_LEFT (nbarrow) ? GTK_ARROW_UP : GTK_ARROW_DOWN);
           arrow_size = scroll_arrow_vlength;
@@ -5069,8 +5040,9 @@ gtk_notebook_draw_arrow (GtkNotebook      *notebook,
           arrow = (ARROW_IS_LEFT (nbarrow) ? GTK_ARROW_LEFT : GTK_ARROW_RIGHT);
           arrow_size = scroll_arrow_hlength;
         }
-     
-      gtk_paint_arrow (widget->style, widget->window, state_type, 
+
+      gtk_paint_arrow (gtk_widget_get_style (widget),
+                       gtk_widget_get_window (widget), state_type,
                       shadow_type, NULL, widget, "notebook",
                       arrow, TRUE, arrow_rect.x, arrow_rect.y, 
                       arrow_size, arrow_size);
@@ -5093,8 +5065,10 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
                        gint        *max,
                        gint        *tab_space)
 {
-  GtkNotebookPrivate *priv;
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation, action_allocation;
   GtkWidget *widget;
+  GtkStyle *style;
   GList *children;
   gint tab_pos = get_effective_tab_pos (notebook);
   gint tab_overlap;
@@ -5103,34 +5077,42 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
   gint scroll_arrow_vlength;
   gboolean is_rtl;
   gint i;
+  guint border_width;
 
   widget = GTK_WIDGET (notebook);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-  children = notebook->children;
+  children = priv->children;
   is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
 
+  style = gtk_widget_get_style (widget);
+
   gtk_widget_style_get (GTK_WIDGET (notebook),
                         "arrow-spacing", &arrow_spacing,
                         "scroll-arrow-hlength", &scroll_arrow_hlength,
                         "scroll-arrow-vlength", &scroll_arrow_vlength,
                         NULL);
 
+  border_width = gtk_container_get_border_width (GTK_CONTAINER (notebook));
+
+  gtk_widget_get_allocation (widget, &allocation);
+
   switch (tab_pos)
     {
     case GTK_POS_TOP:
     case GTK_POS_BOTTOM:
-      *min = widget->allocation.x + GTK_CONTAINER (notebook)->border_width;
-      *max = widget->allocation.x + widget->allocation.width - GTK_CONTAINER (notebook)->border_width;
+      *min = allocation.x + border_width;
+      *max = allocation.x + allocation.width - border_width;
 
       for (i = 0; i < N_ACTION_WIDGETS; i++)
         {
           if (priv->action_widget[i])
             {
+              gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
+
               if ((i == ACTION_WIDGET_START && !is_rtl) ||
                   (i == ACTION_WIDGET_END && is_rtl))
-                *min += priv->action_widget[i]->allocation.width + widget->style->xthickness;
+                *min += action_allocation.width + style->xthickness;
               else
-                *max -= priv->action_widget[i]->allocation.width + widget->style->xthickness;
+                *max -= action_allocation.width + style->xthickness;
             }
         }
 
@@ -5148,17 +5130,19 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
       break;
     case GTK_POS_RIGHT:
     case GTK_POS_LEFT:
-      *min = widget->allocation.y + GTK_CONTAINER (notebook)->border_width;
-      *max = widget->allocation.y + widget->allocation.height - GTK_CONTAINER (notebook)->border_width;
+      *min = allocation.y + border_width;
+      *max = allocation.y + allocation.height - border_width;
 
       for (i = 0; i < N_ACTION_WIDGETS; i++)
         {
           if (priv->action_widget[i])
             {
+              gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
+
               if (i == ACTION_WIDGET_START)
-                *min += priv->action_widget[i]->allocation.height + widget->style->ythickness;
+                *min += action_allocation.height + style->ythickness;
               else
-                *max -= priv->action_widget[i]->allocation.height + widget->style->ythickness;
+                *max -= action_allocation.height + style->ythickness;
             }
         }
 
@@ -5176,7 +5160,7 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
       break;
     }
 
-  if (!notebook->scrollable)
+  if (!priv->scrollable)
     *show_arrows = FALSE;
   else
     {
@@ -5193,25 +5177,25 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
              /* take arrows into account */
              *tab_space = *max - *min - tab_overlap;
 
-             if (notebook->has_after_previous)
+             if (priv->has_after_previous)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_hlength;
                  *max -= arrow_spacing + scroll_arrow_hlength;
                }
 
-             if (notebook->has_after_next)
+             if (priv->has_after_next)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_hlength;
                  *max -= arrow_spacing + scroll_arrow_hlength;
                }
 
-             if (notebook->has_before_previous)
+             if (priv->has_before_previous)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_hlength;
                  *min += arrow_spacing + scroll_arrow_hlength;
                }
 
-             if (notebook->has_before_next)
+             if (priv->has_before_next)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_hlength;
                  *min += arrow_spacing + scroll_arrow_hlength;
@@ -5227,13 +5211,13 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
              /* take arrows into account */
              *tab_space = *max - *min - tab_overlap;
 
-             if (notebook->has_after_previous || notebook->has_after_next)
+             if (priv->has_after_previous || priv->has_after_next)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_vlength;
                  *max -= arrow_spacing + scroll_arrow_vlength;
                }
 
-             if (notebook->has_before_previous || notebook->has_before_next)
+             if (priv->has_before_previous || priv->has_before_next)
                {
                  *tab_space -= arrow_spacing + scroll_arrow_vlength;
                  *min += arrow_spacing + scroll_arrow_vlength;
@@ -5254,6 +5238,7 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
                                   gint        *n,
                                   gint        *remaining_space)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkWidget *widget;
   GtkContainer *container;
   GList *children;
@@ -5269,22 +5254,22 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
     {
       *remaining_space = tab_space;
 
-      if (NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, notebook->cur_page) &&
-         gtk_widget_get_visible (notebook->cur_page->child))
+      if (NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, priv->cur_page) &&
+         gtk_widget_get_visible (priv->cur_page->child))
        {
          gtk_notebook_calc_tabs (notebook,
-                                 notebook->focus_tab,
-                                 &(notebook->focus_tab),
+                                 priv->focus_tab,
+                                 &(priv->focus_tab),
                                  remaining_space, STEP_NEXT);
        }
 
       if (tab_space <= 0 || *remaining_space <= 0)
        {
          /* show 1 tab */
-         notebook->first_tab = notebook->focus_tab;
-         *last_child = gtk_notebook_search_page (notebook, notebook->focus_tab,
+         priv->first_tab = priv->focus_tab;
+         *last_child = gtk_notebook_search_page (notebook, priv->focus_tab,
                                                  STEP_NEXT, TRUE);
-          page = notebook->first_tab->data;
+          page = priv->first_tab->data;
           *remaining_space = tab_space - page->requisition.width;
           *n = 1;
        }
@@ -5292,14 +5277,14 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
        {
          children = NULL;
 
-         if (notebook->first_tab && notebook->first_tab != notebook->focus_tab)
+         if (priv->first_tab && priv->first_tab != priv->focus_tab)
            {
              /* Is first_tab really predecessor of focus_tab? */
-             page = notebook->first_tab->data;
+             page = priv->first_tab->data;
              if (NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, page) &&
                  gtk_widget_get_visible (page->child))
-               for (children = notebook->focus_tab;
-                    children && children != notebook->first_tab;
+               for (children = priv->focus_tab;
+                    children && children != priv->first_tab;
                     children = gtk_notebook_search_page (notebook,
                                                          children,
                                                          STEP_PREV,
@@ -5308,44 +5293,44 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
 
          if (!children)
            {
-             if (NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, notebook->cur_page))
-               notebook->first_tab = notebook->focus_tab;
+             if (NOTEBOOK_IS_TAB_LABEL_PARENT (notebook, priv->cur_page))
+               priv->first_tab = priv->focus_tab;
              else
-               notebook->first_tab = gtk_notebook_search_page (notebook, notebook->focus_tab,
+               priv->first_tab = gtk_notebook_search_page (notebook, priv->focus_tab,
                                                                STEP_NEXT, TRUE);
            }
          else
            /* calculate shown tabs counting backwards from the focus tab */
            gtk_notebook_calc_tabs (notebook,
                                    gtk_notebook_search_page (notebook,
-                                                             notebook->focus_tab,
+                                                             priv->focus_tab,
                                                              STEP_PREV,
                                                              TRUE),
-                                   &(notebook->first_tab), remaining_space,
+                                   &(priv->first_tab), remaining_space,
                                    STEP_PREV);
 
          if (*remaining_space < 0)
            {
-             notebook->first_tab =
-               gtk_notebook_search_page (notebook, notebook->first_tab,
+             priv->first_tab =
+               gtk_notebook_search_page (notebook, priv->first_tab,
                                          STEP_NEXT, TRUE);
-             if (!notebook->first_tab)
-               notebook->first_tab = notebook->focus_tab;
+             if (!priv->first_tab)
+               priv->first_tab = priv->focus_tab;
 
-             *last_child = gtk_notebook_search_page (notebook, notebook->focus_tab,
+             *last_child = gtk_notebook_search_page (notebook, priv->focus_tab,
                                                      STEP_NEXT, TRUE); 
            }
          else /* focus_tab -> end */   
            {
-             if (!notebook->first_tab)
-               notebook->first_tab = gtk_notebook_search_page (notebook,
+             if (!priv->first_tab)
+               priv->first_tab = gtk_notebook_search_page (notebook,
                                                                NULL,
                                                                STEP_NEXT,
                                                                TRUE);
              children = NULL;
              gtk_notebook_calc_tabs (notebook,
                                      gtk_notebook_search_page (notebook,
-                                                               notebook->focus_tab,
+                                                               priv->focus_tab,
                                                                STEP_NEXT,
                                                                TRUE),
                                      &children, remaining_space, STEP_NEXT);
@@ -5359,15 +5344,15 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
 
                  gtk_notebook_calc_tabs (notebook,
                                          gtk_notebook_search_page (notebook,
-                                                                   notebook->first_tab,
+                                                                   priv->first_tab,
                                                                    STEP_PREV,
                                                                    TRUE),
                                          &children, remaining_space, STEP_PREV);
 
                  if (*remaining_space == 0)
-                   notebook->first_tab = children;
+                   priv->first_tab = children;
                  else
-                   notebook->first_tab = gtk_notebook_search_page(notebook,
+                   priv->first_tab = gtk_notebook_search_page(notebook,
                                                                   children,
                                                                   STEP_NEXT,
                                                                   TRUE);
@@ -5380,7 +5365,7 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
               *remaining_space = - (*remaining_space);
               *n = 0;
 
-              for (children = notebook->first_tab;
+              for (children = priv->first_tab;
                    children && children != *last_child;
                    children = gtk_notebook_search_page (notebook, children,
                                                         STEP_NEXT, TRUE))
@@ -5393,7 +5378,7 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
       /* unmap all non-visible tabs */
       for (children = gtk_notebook_search_page (notebook, NULL,
                                                STEP_NEXT, TRUE);
-          children && children != notebook->first_tab;
+          children && children != priv->first_tab;
           children = gtk_notebook_search_page (notebook, children,
                                                STEP_NEXT, TRUE))
        {
@@ -5421,8 +5406,8 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
       *n = 0;
 
       *remaining_space = max - min - tab_overlap - tab_space;
-      children = notebook->children;
-      notebook->first_tab = gtk_notebook_search_page (notebook, NULL,
+      children = priv->children;
+      priv->first_tab = gtk_notebook_search_page (notebook, NULL,
                                                      STEP_NEXT, TRUE);
       while (children)
        {
@@ -5440,7 +5425,7 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
        }
 
       /* if notebook is homogeneous, all tabs are expanded */
-      if (notebook->homogeneous && *n)
+      if (priv->homogeneous && *n)
        *n = c;
     }
 }
@@ -5482,60 +5467,66 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
                                        gint          min,
                                        gint          max)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation allocation;
   GtkWidget *widget;
   GtkContainer *container;
-  GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
+  GtkStyle *style;
   gboolean allocate_at_bottom;
   gint tab_overlap, tab_pos, tab_extra_space;
   gint left_x, right_x, top_y, bottom_y, anchor;
   gint xthickness, ythickness;
+  guint border_width;
   gboolean gap_left, packing_changed;
   GtkAllocation child_allocation = { 0, };
 
   widget = GTK_WIDGET (notebook);
   container = GTK_CONTAINER (notebook);
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
   gtk_widget_style_get (widget, "tab-overlap", &tab_overlap, NULL);
   tab_pos = get_effective_tab_pos (notebook);
   allocate_at_bottom = get_allocate_at_bottom (widget, direction);
   anchor = 0;
 
-  child_allocation.x = widget->allocation.x + container->border_width;
-  child_allocation.y = widget->allocation.y + container->border_width;
+  gtk_widget_get_allocation (widget, &allocation);
+
+  border_width = gtk_container_get_border_width (container);
+  child_allocation.x = allocation.x + border_width;
+  child_allocation.y = allocation.y + border_width;
 
-  xthickness = widget->style->xthickness;
-  ythickness = widget->style->ythickness;
+  style = gtk_widget_get_style (widget);
+  xthickness = style->xthickness;
+  ythickness = style->ythickness;
 
   switch (tab_pos)
     {
     case GTK_POS_BOTTOM:
-      child_allocation.y = widget->allocation.y + widget->allocation.height -
-       notebook->cur_page->requisition.height - container->border_width;
+      child_allocation.y = allocation.y + allocation.height -
+       priv->cur_page->requisition.height - border_width;
       /* fall through */
     case GTK_POS_TOP:
       child_allocation.x = (allocate_at_bottom) ? max : min;
-      child_allocation.height = notebook->cur_page->requisition.height;
+      child_allocation.height = priv->cur_page->requisition.height;
       anchor = child_allocation.x;
       break;
       
     case GTK_POS_RIGHT:
-      child_allocation.x = widget->allocation.x + widget->allocation.width -
-       notebook->cur_page->requisition.width - container->border_width;
+      child_allocation.x = allocation.x + allocation.width -
+       priv->cur_page->requisition.width - border_width;
       /* fall through */
     case GTK_POS_LEFT:
       child_allocation.y = (allocate_at_bottom) ? max : min;
-      child_allocation.width = notebook->cur_page->requisition.width;
+      child_allocation.width = priv->cur_page->requisition.width;
       anchor = child_allocation.y;
       break;
     }
 
   left_x   = CLAMP (priv->mouse_x - priv->drag_offset_x,
-                   min, max - notebook->cur_page->allocation.width);
+                   min, max - priv->cur_page->allocation.width);
   top_y    = CLAMP (priv->mouse_y - priv->drag_offset_y,
-                   min, max - notebook->cur_page->allocation.height);
-  right_x  = left_x + notebook->cur_page->allocation.width;
-  bottom_y = top_y + notebook->cur_page->allocation.height;
+                   min, max - priv->cur_page->allocation.height);
+  right_x  = left_x + priv->cur_page->allocation.width;
+  bottom_y = top_y + priv->cur_page->allocation.height;
   gap_left = packing_changed = FALSE;
 
   while (*children && *children != last_child)
@@ -5564,7 +5555,7 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
        continue;
 
       tab_extra_space = 0;
-      if (*expanded_tabs && (showarrow || page->expand || notebook->homogeneous))
+      if (*expanded_tabs && (showarrow || page->expand || priv->homogeneous))
        {
          tab_extra_space = *remaining_space / *expanded_tabs;
          *remaining_space -= tab_extra_space;
@@ -5583,19 +5574,19 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
            {
              if (!allocate_at_bottom)
                {
-                 if ((notebook->cur_page->pack == GTK_PACK_START && left_x >= anchor) ||
-                     (notebook->cur_page->pack == GTK_PACK_END && left_x < anchor))
+                 if ((priv->cur_page->pack == GTK_PACK_START && left_x >= anchor) ||
+                     (priv->cur_page->pack == GTK_PACK_END && left_x < anchor))
                    {
                      left_x = priv->drag_window_x = anchor;
-                     anchor += notebook->cur_page->allocation.width - tab_overlap;
+                     anchor += priv->cur_page->allocation.width - tab_overlap;
                    }
                }
              else
                {
-                 if ((notebook->cur_page->pack == GTK_PACK_START && right_x <= anchor) ||
-                     (notebook->cur_page->pack == GTK_PACK_END && right_x > anchor))
+                 if ((priv->cur_page->pack == GTK_PACK_START && right_x <= anchor) ||
+                     (priv->cur_page->pack == GTK_PACK_END && right_x > anchor))
                    {
-                     anchor -= notebook->cur_page->allocation.width;
+                     anchor -= priv->cur_page->allocation.width;
                      left_x = priv->drag_window_x = anchor;
                      anchor += tab_overlap;
                    }
@@ -5604,7 +5595,7 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
              gap_left = TRUE;
            }
 
-         if (priv->operation == DRAG_OPERATION_REORDER && page == notebook->cur_page)
+         if (priv->operation == DRAG_OPERATION_REORDER && page == priv->cur_page)
            {
              priv->drag_window_x = left_x;
              priv->drag_window_y = child_allocation.y;
@@ -5613,17 +5604,17 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
            {
              if (allocate_at_bottom)
                anchor -= child_allocation.width;
-             if (priv->operation == DRAG_OPERATION_REORDER && page->pack == notebook->cur_page->pack)
+
+             if (priv->operation == DRAG_OPERATION_REORDER && page->pack == priv->cur_page->pack)
                {
                  if (!allocate_at_bottom &&
                      left_x >= anchor &&
                      left_x <= anchor + child_allocation.width / 2)
-                   anchor += notebook->cur_page->allocation.width - tab_overlap;
+                    anchor += priv->cur_page->allocation.width - tab_overlap;
                  else if (allocate_at_bottom &&
                           right_x >= anchor + child_allocation.width / 2 &&
                           right_x <= anchor + child_allocation.width)
-                   anchor -= notebook->cur_page->allocation.width - tab_overlap;
+                    anchor -= priv->cur_page->allocation.width - tab_overlap;
                }
 
              child_allocation.x = anchor;
@@ -5639,17 +5630,17 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
              !gap_left && packing_changed)
            {
              if (!allocate_at_bottom &&
-                 ((notebook->cur_page->pack == GTK_PACK_START && top_y >= anchor) ||
-                  (notebook->cur_page->pack == GTK_PACK_END && top_y < anchor)))
+                 ((priv->cur_page->pack == GTK_PACK_START && top_y >= anchor) ||
+                  (priv->cur_page->pack == GTK_PACK_END && top_y < anchor)))
                {
                  top_y = priv->drag_window_y = anchor;
-                 anchor += notebook->cur_page->allocation.height - tab_overlap;
+                 anchor += priv->cur_page->allocation.height - tab_overlap;
                }
  
              gap_left = TRUE;
            }
 
-         if (priv->operation == DRAG_OPERATION_REORDER && page == notebook->cur_page)
+         if (priv->operation == DRAG_OPERATION_REORDER && page == priv->cur_page)
            {
              priv->drag_window_x = child_allocation.x;
              priv->drag_window_y = top_y;
@@ -5659,16 +5650,16 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
              if (allocate_at_bottom)
                anchor -= child_allocation.height;
 
-             if (priv->operation == DRAG_OPERATION_REORDER && page->pack == notebook->cur_page->pack)
+              if (priv->operation == DRAG_OPERATION_REORDER && page->pack == priv->cur_page->pack)
                {
                  if (!allocate_at_bottom &&
                      top_y >= anchor &&
                      top_y <= anchor + child_allocation.height / 2)
-                   anchor += notebook->cur_page->allocation.height - tab_overlap;
+                   anchor += priv->cur_page->allocation.height - tab_overlap;
                  else if (allocate_at_bottom &&
                           bottom_y >= anchor + child_allocation.height / 2 &&
                           bottom_y <= anchor + child_allocation.height)
-                   anchor -= notebook->cur_page->allocation.height - tab_overlap;
+                   anchor -= priv->cur_page->allocation.height - tab_overlap;
                }
 
              child_allocation.y = anchor;
@@ -5680,7 +5671,7 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
       page->allocation = child_allocation;
 
       if ((page == priv->detached_tab && priv->operation == DRAG_OPERATION_DETACH) ||
-         (page == notebook->cur_page && priv->operation == DRAG_OPERATION_REORDER))
+         (page == priv->cur_page && priv->operation == DRAG_OPERATION_REORDER))
        {
          /* needs to be allocated at 0,0
           * to be shown in the drag window */
@@ -5688,7 +5679,7 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
          page->allocation.y = 0;
        }
       
-      if (page != notebook->cur_page)
+      if (page != priv->cur_page)
        {
          switch (tab_pos)
            {
@@ -5713,20 +5704,20 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
        case GTK_POS_TOP:
        case GTK_POS_BOTTOM:
          if (priv->operation != DRAG_OPERATION_REORDER ||
-             (priv->operation == DRAG_OPERATION_REORDER && page != notebook->cur_page))
+             (priv->operation == DRAG_OPERATION_REORDER && page != priv->cur_page))
            {
              if (priv->operation == DRAG_OPERATION_REORDER)
                {
-                 if (page->pack == notebook->cur_page->pack &&
+                  if (page->pack == priv->cur_page->pack &&
                      !allocate_at_bottom &&
                      left_x >  anchor + child_allocation.width / 2 &&
                      left_x <= anchor + child_allocation.width)
-                   anchor += notebook->cur_page->allocation.width - tab_overlap;
-                 else if (page->pack == notebook->cur_page->pack &&
+                    anchor += priv->cur_page->allocation.width - tab_overlap;
+                  else if (page->pack == priv->cur_page->pack &&
                           allocate_at_bottom &&
                           right_x >= anchor &&
                           right_x <= anchor + child_allocation.width / 2)
-                   anchor -= notebook->cur_page->allocation.width - tab_overlap;
+                    anchor -= priv->cur_page->allocation.width - tab_overlap;
                }
  
              if (!allocate_at_bottom)
@@ -5739,20 +5730,20 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
        case GTK_POS_LEFT:
        case GTK_POS_RIGHT:
          if (priv->operation != DRAG_OPERATION_REORDER  ||
-             (priv->operation == DRAG_OPERATION_REORDER && page != notebook->cur_page))
+             (priv->operation == DRAG_OPERATION_REORDER && page != priv->cur_page))
            {
              if (priv->operation == DRAG_OPERATION_REORDER)
                {
-                 if (page->pack == notebook->cur_page->pack &&
+                 if (page->pack == priv->cur_page->pack &&
                      !allocate_at_bottom &&
                      top_y >= anchor + child_allocation.height / 2 &&
                      top_y <= anchor + child_allocation.height)
-                   anchor += notebook->cur_page->allocation.height - tab_overlap;
-                 else if (page->pack == notebook->cur_page->pack &&
+                   anchor += priv->cur_page->allocation.height - tab_overlap;
+                 else if (page->pack == priv->cur_page->pack &&
                           allocate_at_bottom &&
                           bottom_y >= anchor &&
                           bottom_y <= anchor + child_allocation.height / 2)
-                   anchor -= notebook->cur_page->allocation.height - tab_overlap;
+                   anchor -= priv->cur_page->allocation.height - tab_overlap;
                }
 
              if (!allocate_at_bottom)
@@ -5772,15 +5763,15 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
   /* Don't move the current tab past the last position during tabs reordering */
   if (children &&
       priv->operation == DRAG_OPERATION_REORDER &&
-      ((direction == STEP_NEXT && notebook->cur_page->pack == GTK_PACK_START) ||
-       ((direction == STEP_PREV || packing_changed) && notebook->cur_page->pack == GTK_PACK_END)))
+      ((direction == STEP_NEXT && priv->cur_page->pack == GTK_PACK_START) ||
+       ((direction == STEP_PREV || packing_changed) && priv->cur_page->pack == GTK_PACK_END)))
     {
       switch (tab_pos)
        {
        case GTK_POS_TOP:
        case GTK_POS_BOTTOM:
          if (allocate_at_bottom)
-           anchor -= notebook->cur_page->allocation.width;
+           anchor -= priv->cur_page->allocation.width;
 
          if ((!allocate_at_bottom && priv->drag_window_x > anchor) ||
              (allocate_at_bottom && priv->drag_window_x < anchor))
@@ -5789,7 +5780,7 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
        case GTK_POS_LEFT:
        case GTK_POS_RIGHT:
          if (allocate_at_bottom)
-           anchor -= notebook->cur_page->allocation.height;
+           anchor -= priv->cur_page->allocation.height;
 
          if ((!allocate_at_bottom && priv->drag_window_y > anchor) ||
              (allocate_at_bottom && priv->drag_window_y < anchor))
@@ -5802,14 +5793,15 @@ gtk_notebook_calculate_tabs_allocation (GtkNotebook  *notebook,
 static void
 gtk_notebook_pages_allocate (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *children = NULL;
   GList *last_child = NULL;
   gboolean showarrow = FALSE;
   gint tab_space, min, max, remaining_space;
-  gint expanded_tabs, operation;
+  gint expanded_tabs;
   gboolean tab_allocations_changed = FALSE;
 
-  if (!notebook->show_tabs || !notebook->children || !notebook->cur_page)
+  if (!priv->show_tabs || !priv->children || !priv->cur_page)
     return;
 
   min = max = tab_space = remaining_space = 0;
@@ -5822,19 +5814,19 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
                                     min, max, tab_space, &last_child,
                                     &expanded_tabs, &remaining_space);
 
-  children = notebook->first_tab;
+  children = priv->first_tab;
   gtk_notebook_calculate_tabs_allocation (notebook, &children, last_child,
                                          showarrow, STEP_NEXT,
                                          &remaining_space, &expanded_tabs, min, max);
   if (children && children != last_child)
     {
-      children = notebook->children;
+      children = priv->children;
       gtk_notebook_calculate_tabs_allocation (notebook, &children, last_child,
                                              showarrow, STEP_PREV,
                                              &remaining_space, &expanded_tabs, min, max);
     }
 
-  children = notebook->children;
+  children = priv->children;
 
   while (children)
     {
@@ -5843,10 +5835,8 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
       children = children->next;
     }
 
-  operation = GTK_NOTEBOOK_GET_PRIVATE (notebook)->operation;
-
-  if (!notebook->first_tab)
-    notebook->first_tab = notebook->children;
+  if (!priv->first_tab)
+    priv->first_tab = priv->children;
 
   if (tab_allocations_changed)
     gtk_notebook_redraw_tabs (notebook);
@@ -5857,8 +5847,10 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
                            GtkNotebookPage *page)
 {
   GtkWidget *widget = GTK_WIDGET (notebook);
-  GtkAllocation child_allocation;
+  GtkNotebookPrivate *priv = notebook->priv;
+  GtkAllocation child_allocation, label_allocation;
   GtkRequisition tab_requisition;
+  GtkStyle *style;
   gint xthickness;
   gint ythickness;
   gint padding;
@@ -5876,10 +5868,12 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
       return was_visible;
     }
 
-  xthickness = widget->style->xthickness;
-  ythickness = widget->style->ythickness;
+  style = gtk_widget_get_style (widget);
+  xthickness = style->xthickness;
+  ythickness = style->ythickness;
 
-  gtk_widget_get_child_requisition (page->tab_label, &tab_requisition);
+  gtk_size_request_get_size (GTK_SIZE_REQUEST (page->tab_label),
+                             &tab_requisition, NULL);
   gtk_widget_style_get (widget,
                        "focus-line-width", &focus_width,
                        "tab-curvature", &tab_curvature,
@@ -5888,10 +5882,10 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
     {
     case GTK_POS_TOP:
     case GTK_POS_BOTTOM:
-      padding = tab_curvature + focus_width + notebook->tab_hborder;
+      padding = tab_curvature + focus_width + priv->tab_hborder;
       if (page->fill)
        {
-         child_allocation.x = xthickness + focus_width + notebook->tab_hborder;
+         child_allocation.x = xthickness + focus_width + priv->tab_hborder;
          child_allocation.width = MAX (1, page->allocation.width - 2 * child_allocation.x);
          child_allocation.x += page->allocation.x;
        }
@@ -5903,17 +5897,17 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
          child_allocation.width = tab_requisition.width;
        }
 
-      child_allocation.y = notebook->tab_vborder + focus_width + page->allocation.y;
+      child_allocation.y = priv->tab_vborder + focus_width + page->allocation.y;
 
       if (tab_pos == GTK_POS_TOP)
        child_allocation.y += ythickness;
 
       child_allocation.height = MAX (1, (page->allocation.height - ythickness -
-                                        2 * (notebook->tab_vborder + focus_width)));
+                                        2 * (priv->tab_vborder + focus_width)));
       break;
     case GTK_POS_LEFT:
     case GTK_POS_RIGHT:
-      padding = tab_curvature + focus_width + notebook->tab_vborder;
+      padding = tab_curvature + focus_width + priv->tab_vborder;
       if (page->fill)
        {
          child_allocation.y = ythickness + padding;
@@ -5929,20 +5923,21 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
          child_allocation.height = tab_requisition.height;
        }
 
-      child_allocation.x = notebook->tab_hborder + focus_width + page->allocation.x;
+      child_allocation.x = priv->tab_hborder + focus_width + page->allocation.x;
 
       if (tab_pos == GTK_POS_LEFT)
        child_allocation.x += xthickness;
 
       child_allocation.width = MAX (1, (page->allocation.width - xthickness -
-                                       2 * (notebook->tab_hborder + focus_width)));
+                                       2 * (priv->tab_hborder + focus_width)));
       break;
     }
 
-  tab_allocation_changed = (child_allocation.x != page->tab_label->allocation.x ||
-                           child_allocation.y != page->tab_label->allocation.y ||
-                           child_allocation.width != page->tab_label->allocation.width ||
-                           child_allocation.height != page->tab_label->allocation.height);
+  gtk_widget_get_allocation (page->tab_label, &label_allocation);
+  tab_allocation_changed = (child_allocation.x != label_allocation.x ||
+                           child_allocation.y != label_allocation.y ||
+                           child_allocation.width != label_allocation.width ||
+                           child_allocation.height != label_allocation.height);
 
   gtk_widget_size_allocate (page->tab_label, &child_allocation);
 
@@ -6068,15 +6063,16 @@ gtk_notebook_calc_tabs (GtkNotebook  *notebook,
 static void
 gtk_notebook_update_tab_states (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *list;
 
-  for (list = notebook->children; list != NULL; list = list->next)
+  for (list = priv->children; list != NULL; list = list->next)
     {
       GtkNotebookPage *page = list->data;
       
       if (page->tab_label)
        {
-         if (page == notebook->cur_page)
+         if (page == priv->cur_page)
            gtk_widget_set_state (page->tab_label, GTK_STATE_NORMAL);
          else
            gtk_widget_set_state (page->tab_label, GTK_STATE_ACTIVE);
@@ -6090,28 +6086,31 @@ gtk_notebook_update_tab_states (GtkNotebook *notebook)
  */
 static void
 gtk_notebook_real_switch_page (GtkNotebook     *notebook,
-                              GtkNotebookPage *page,
+                              GtkWidget*       child,
                               guint            page_num)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
+  GList *list = gtk_notebook_find_child (notebook, GTK_WIDGET (child), NULL);
+  GtkNotebookPage *page = GTK_NOTEBOOK_PAGE (list);
   gboolean child_has_focus;
 
-  if (notebook->cur_page == page || !gtk_widget_get_visible (page->child))
+  if (priv->cur_page == page || !gtk_widget_get_visible (GTK_WIDGET (child)))
     return;
 
   /* save the value here, changing visibility changes focus */
-  child_has_focus = notebook->child_has_focus;
+  child_has_focus = priv->child_has_focus;
 
-  if (notebook->cur_page)
-    gtk_widget_set_child_visible (notebook->cur_page->child, FALSE);
+  if (priv->cur_page)
+    gtk_widget_set_child_visible (priv->cur_page->child, FALSE);
 
-  notebook->cur_page = page;
+  priv->cur_page = page;
 
-  if (!notebook->focus_tab ||
-      notebook->focus_tab->data != (gpointer) notebook->cur_page)
-    notebook->focus_tab = 
-      g_list_find (notebook->children, notebook->cur_page);
+  if (!priv->focus_tab ||
+      priv->focus_tab->data != (gpointer) priv->cur_page)
+    priv->focus_tab =
+      g_list_find (priv->children, priv->cur_page);
 
-  gtk_widget_set_child_visible (notebook->cur_page->child, TRUE);
+  gtk_widget_set_child_visible (priv->cur_page->child, TRUE);
 
   /* If the focus was on the previous page, move it to the first
    * element on the new page, if possible, or if not, to the
@@ -6119,11 +6118,11 @@ gtk_notebook_real_switch_page (GtkNotebook     *notebook,
    */
   if (child_has_focus)
     {
-      if (notebook->cur_page->last_focus_child &&
-         gtk_widget_is_ancestor (notebook->cur_page->last_focus_child, notebook->cur_page->child))
-       gtk_widget_grab_focus (notebook->cur_page->last_focus_child);
+      if (priv->cur_page->last_focus_child &&
+         gtk_widget_is_ancestor (priv->cur_page->last_focus_child, priv->cur_page->child))
+       gtk_widget_grab_focus (priv->cur_page->last_focus_child);
       else
-       if (!gtk_widget_child_focus (notebook->cur_page->child, GTK_DIR_TAB_FORWARD))
+       if (!gtk_widget_child_focus (priv->cur_page->child, GTK_DIR_TAB_FORWARD))
          gtk_widget_grab_focus (GTK_WIDGET (notebook));
     }
   
@@ -6142,18 +6141,19 @@ gtk_notebook_real_switch_page (GtkNotebook     *notebook,
 static void
 gtk_notebook_switch_page (GtkNotebook     *notebook,
                          GtkNotebookPage *page)
-{ 
+{
+  GtkNotebookPrivate *priv = notebook->priv;
   guint page_num;
 
-  if (notebook->cur_page == page)
+  if (priv->cur_page == page)
     return;
 
-  page_num = g_list_index (notebook->children, page);
+  page_num = g_list_index (priv->children, page);
 
   g_signal_emit (notebook,
                 notebook_signals[SWITCH_PAGE],
                 0,
-                page,
+                page->child,
                 page_num);
 }
 
@@ -6161,14 +6161,15 @@ static gint
 gtk_notebook_page_select (GtkNotebook *notebook,
                          gboolean     move_focus)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GtkDirectionType dir = GTK_DIR_DOWN; /* Quiet GCC */
   gint tab_pos = get_effective_tab_pos (notebook);
 
-  if (!notebook->focus_tab)
+  if (!priv->focus_tab)
     return FALSE;
 
-  page = notebook->focus_tab->data;
+  page = priv->focus_tab->data;
   gtk_notebook_switch_page (notebook, page);
 
   if (move_focus)
@@ -6199,22 +6200,23 @@ static void
 gtk_notebook_switch_focus_tab (GtkNotebook *notebook, 
                               GList       *new_child)
 {
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *old_child;
   GtkNotebookPage *page;
 
-  if (notebook->focus_tab == new_child)
+  if (priv->focus_tab == new_child)
     return;
 
-  old_child = notebook->focus_tab;
-  notebook->focus_tab = new_child;
+  old_child = priv->focus_tab;
+  priv->focus_tab = new_child;
 
-  if (notebook->scrollable)
+  if (priv->scrollable)
     gtk_notebook_redraw_arrows (notebook);
 
-  if (!notebook->show_tabs || !notebook->focus_tab)
+  if (!priv->show_tabs || !priv->focus_tab)
     return;
 
-  page = notebook->focus_tab->data;
+  page = priv->focus_tab->data;
   if (gtk_widget_get_mapped (page->tab_label))
     gtk_notebook_redraw_tabs (notebook);
   else
@@ -6227,18 +6229,21 @@ static void
 gtk_notebook_menu_switch_page (GtkWidget       *widget,
                               GtkNotebookPage *page)
 {
+  GtkNotebookPrivate *priv;
   GtkNotebook *notebook;
+  GtkWidget *parent;
   GList *children;
   guint page_num;
 
-  notebook = GTK_NOTEBOOK (gtk_menu_get_attach_widget
-                          (GTK_MENU (widget->parent)));
+  parent = gtk_widget_get_parent (widget);
+  notebook = GTK_NOTEBOOK (gtk_menu_get_attach_widget (GTK_MENU (parent)));
+  priv = notebook->priv;
 
-  if (notebook->cur_page == page)
+  if (priv->cur_page == page)
     return;
 
   page_num = 0;
-  children = notebook->children;
+  children = priv->children;
   while (children && children->data != page)
     {
       children = children->next;
@@ -6248,7 +6253,7 @@ gtk_notebook_menu_switch_page (GtkWidget       *widget,
   g_signal_emit (notebook,
                 notebook_signals[SWITCH_PAGE],
                 0,
-                page,
+                page->child,
                 page_num);
 }
 
@@ -6261,7 +6266,8 @@ gtk_notebook_menu_switch_page (GtkWidget       *widget,
 static void
 gtk_notebook_menu_item_create (GtkNotebook *notebook, 
                               GList       *list)
-{      
+{
+  GtkNotebookPrivate *priv = notebook->priv;
   GtkNotebookPage *page;
   GtkWidget *menu_item;
 
@@ -6269,7 +6275,7 @@ gtk_notebook_menu_item_create (GtkNotebook *notebook,
   if (page->default_menu)
     {
       if (GTK_IS_LABEL (page->tab_label))
-       page->menu_label = gtk_label_new (GTK_LABEL (page->tab_label)->label);
+       page->menu_label = gtk_label_new (gtk_label_get_label (GTK_LABEL (page->tab_label)));
       else
        page->menu_label = gtk_label_new ("");
       gtk_misc_set_alignment (GTK_MISC (page->menu_label), 0.0, 0.5);
@@ -6278,7 +6284,7 @@ gtk_notebook_menu_item_create (GtkNotebook *notebook,
   gtk_widget_show (page->menu_label);
   menu_item = gtk_menu_item_new ();
   gtk_container_add (GTK_CONTAINER (menu_item), page->menu_label);
-  gtk_menu_shell_insert (GTK_MENU_SHELL (notebook->menu), menu_item,
+  gtk_menu_shell_insert (GTK_MENU_SHELL (priv->menu), menu_item,
                         gtk_notebook_real_page_position (notebook, list));
   g_signal_connect (menu_item, "activate",
                    G_CALLBACK (gtk_notebook_menu_switch_page), page);
@@ -6290,89 +6296,20 @@ static void
 gtk_notebook_menu_label_unparent (GtkWidget *widget, 
                                  gpointer  data)
 {
-  gtk_widget_unparent (GTK_BIN (widget)->child);
-  GTK_BIN (widget)->child = NULL;
+  gtk_widget_unparent (gtk_bin_get_child (GTK_BIN (widget)));
+  _gtk_bin_set_child (GTK_BIN (widget), NULL);
 }
 
 static void
 gtk_notebook_menu_detacher (GtkWidget *widget,
                            GtkMenu   *menu)
 {
-  GtkNotebook *notebook;
-
-  notebook = GTK_NOTEBOOK (widget);
-  g_return_if_fail (notebook->menu == (GtkWidget*) menu);
-
-  notebook->menu = NULL;
-}
-
-/* Private GtkNotebook Setter Functions:
- *
- * gtk_notebook_set_homogeneous_tabs_internal
- * gtk_notebook_set_tab_border_internal
- * gtk_notebook_set_tab_hborder_internal
- * gtk_notebook_set_tab_vborder_internal
- */
-static void
-gtk_notebook_set_homogeneous_tabs_internal (GtkNotebook *notebook,
-                                           gboolean     homogeneous)
-{
-  if (homogeneous == notebook->homogeneous)
-    return;
-
-  notebook->homogeneous = homogeneous;
-  gtk_widget_queue_resize (GTK_WIDGET (notebook));
-
-  g_object_notify (G_OBJECT (notebook), "homogeneous");
-}
-
-static void
-gtk_notebook_set_tab_border_internal (GtkNotebook *notebook,
-                                     guint        border_width)
-{
-  notebook->tab_hborder = border_width;
-  notebook->tab_vborder = border_width;
-
-  if (notebook->show_tabs &&
-      gtk_widget_get_visible (GTK_WIDGET (notebook)))
-    gtk_widget_queue_resize (GTK_WIDGET (notebook));
-
-  g_object_freeze_notify (G_OBJECT (notebook));
-  g_object_notify (G_OBJECT (notebook), "tab-hborder");
-  g_object_notify (G_OBJECT (notebook), "tab-vborder");
-  g_object_thaw_notify (G_OBJECT (notebook));
-}
-
-static void
-gtk_notebook_set_tab_hborder_internal (GtkNotebook *notebook,
-                                      guint        tab_hborder)
-{
-  if (notebook->tab_hborder == tab_hborder)
-    return;
-
-  notebook->tab_hborder = tab_hborder;
-
-  if (notebook->show_tabs &&
-      gtk_widget_get_visible (GTK_WIDGET (notebook)))
-    gtk_widget_queue_resize (GTK_WIDGET (notebook));
-
-  g_object_notify (G_OBJECT (notebook), "tab-hborder");
-}
-
-static void
-gtk_notebook_set_tab_vborder_internal (GtkNotebook *notebook,
-                                      guint        tab_vborder)
-{
-  if (notebook->tab_vborder == tab_vborder)
-    return;
+  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+  GtkNotebookPrivate *priv = notebook->priv;
 
-  notebook->tab_vborder = tab_vborder;
+  g_return_if_fail (priv->menu == (GtkWidget*) menu);
 
-  if (notebook->show_tabs &&
-      gtk_widget_get_visible (GTK_WIDGET (notebook)))
-    gtk_widget_queue_resize (GTK_WIDGET (notebook));
-
-  g_object_notify (G_OBJECT (notebook), "tab-vborder");
+  priv->menu = NULL;
 }
 
 /* Public GtkNotebook Page Insert/Remove Methods :
@@ -6540,9 +6477,10 @@ gtk_notebook_mnemonic_activate_switch_page (GtkWidget *child,
                                            gpointer data)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (data);
+  GtkNotebookPrivate *priv = notebook->priv;
   GList *list;
-  
-  list = g_list_find_custom (notebook->children, child,
+
+  list = g_list_find_custom (priv->children, child,
                             gtk_notebook_page_compare_tab);
   if (list)
     {
@@ -6610,14 +6548,17 @@ void
 gtk_notebook_remove_page (GtkNotebook *notebook,
                          gint         page_num)
 {
+  GtkNotebookPrivate *priv;
   GList *list = NULL;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
+  priv = notebook->priv;
+
   if (page_num >= 0)
-    list = g_list_nth (notebook->children, page_num);
+    list = g_list_nth (priv->children, page_num);
   else
-    list = g_list_last (notebook->children);
+    list = g_list_last (priv->children);
 
   if (list)
     gtk_container_remove (GTK_CONTAINER (notebook),
@@ -6644,12 +6585,16 @@ gtk_notebook_remove_page (GtkNotebook *notebook,
 gint
 gtk_notebook_get_current_page (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), -1);
 
-  if (!notebook->cur_page)
+  priv = notebook->priv;
+
+  if (!priv->cur_page)
     return -1;
 
-  return g_list_index (notebook->children, notebook->cur_page);
+  return g_list_index (priv->children, priv->cur_page);
 }
 
 /**
@@ -6667,15 +6612,18 @@ GtkWidget*
 gtk_notebook_get_nth_page (GtkNotebook *notebook,
                           gint         page_num)
 {
+  GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
   GList *list;
 
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), NULL);
 
+  priv = notebook->priv;
+
   if (page_num >= 0)
-    list = g_list_nth (notebook->children, page_num);
+    list = g_list_nth (priv->children, page_num);
   else
-    list = g_list_last (notebook->children);
+    list = g_list_last (priv->children);
 
   if (list)
     {
@@ -6699,9 +6647,13 @@ gtk_notebook_get_nth_page (GtkNotebook *notebook,
 gint
 gtk_notebook_get_n_pages (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), 0);
 
-  return g_list_length (notebook->children);
+  priv = notebook->priv;
+
+  return g_list_length (priv->children);
 }
 
 /**
@@ -6719,13 +6671,16 @@ gint
 gtk_notebook_page_num (GtkNotebook      *notebook,
                       GtkWidget        *child)
 {
+  GtkNotebookPrivate *priv;
   GList *children;
   gint num;
 
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), -1);
 
+  priv = notebook->priv;
+
   num = 0;
-  children = notebook->children;
+  children = priv->children;
   while (children)
     {
       GtkNotebookPage *page =  children->data;
@@ -6759,14 +6714,17 @@ void
 gtk_notebook_set_current_page (GtkNotebook *notebook,
                               gint         page_num)
 {
+  GtkNotebookPrivate *priv;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
+  priv = notebook->priv;
+
   if (page_num < 0)
-    page_num = g_list_length (notebook->children) - 1;
+    page_num = g_list_length (priv->children) - 1;
 
-  list = g_list_nth (notebook->children, page_num);
+  list = g_list_nth (priv->children, page_num);
   if (list)
     gtk_notebook_switch_page (notebook, GTK_NOTEBOOK_PAGE (list));
 }
@@ -6781,11 +6739,14 @@ gtk_notebook_set_current_page (GtkNotebook *notebook,
 void
 gtk_notebook_next_page (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  list = g_list_find (notebook->children, notebook->cur_page);
+  priv = notebook->priv;
+
+  list = g_list_find (priv->children, priv->cur_page);
   if (!list)
     return;
 
@@ -6806,11 +6767,14 @@ gtk_notebook_next_page (GtkNotebook *notebook)
 void
 gtk_notebook_prev_page (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  list = g_list_find (notebook->children, notebook->cur_page);
+  priv = notebook->priv;
+
+  list = g_list_find (priv->children, priv->cur_page);
   if (!list)
     return;
 
@@ -6824,13 +6788,15 @@ gtk_notebook_prev_page (GtkNotebook *notebook)
 /* Public GtkNotebook/Tab Style Functions
  *
  * gtk_notebook_set_show_border
+ * gtk_notebook_get_show_border
  * gtk_notebook_set_show_tabs
+ * gtk_notebook_get_show_tabs
  * gtk_notebook_set_tab_pos
- * gtk_notebook_set_homogeneous_tabs
- * gtk_notebook_set_tab_border
- * gtk_notebook_set_tab_hborder
- * gtk_notebook_set_tab_vborder
+ * gtk_notebook_get_tab_pos
  * gtk_notebook_set_scrollable
+ * gtk_notebook_get_scrollable
+ * gtk_notebook_get_tab_hborder
+ * gtk_notebook_get_tab_vborder
  */
 /**
  * gtk_notebook_set_show_border:
@@ -6845,11 +6811,15 @@ void
 gtk_notebook_set_show_border (GtkNotebook *notebook,
                              gboolean     show_border)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  if (notebook->show_border != show_border)
+  priv = notebook->priv;
+
+  if (priv->show_border != show_border)
     {
-      notebook->show_border = show_border;
+      priv->show_border = show_border;
 
       if (gtk_widget_get_visible (GTK_WIDGET (notebook)))
        gtk_widget_queue_resize (GTK_WIDGET (notebook));
@@ -6872,7 +6842,7 @@ gtk_notebook_get_show_border (GtkNotebook *notebook)
 {
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
 
-  return notebook->show_border;
+  return notebook->priv->show_border;
 }
 
 /**
@@ -6893,15 +6863,15 @@ gtk_notebook_set_show_tabs (GtkNotebook *notebook,
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  priv = notebook->priv;
 
   show_tabs = show_tabs != FALSE;
 
-  if (notebook->show_tabs == show_tabs)
+  if (priv->show_tabs == show_tabs)
     return;
 
-  notebook->show_tabs = show_tabs;
-  children = notebook->children;
+  priv->show_tabs = show_tabs;
+  children = priv->children;
 
   if (!show_tabs)
     {
@@ -6951,7 +6921,7 @@ gtk_notebook_get_show_tabs (GtkNotebook *notebook)
 {
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
 
-  return notebook->show_tabs;
+  return notebook->priv->show_tabs;
 }
 
 /**
@@ -6966,11 +6936,15 @@ void
 gtk_notebook_set_tab_pos (GtkNotebook     *notebook,
                          GtkPositionType  pos)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  if (notebook->tab_pos != pos)
+  priv = notebook->priv;
+
+  if (priv->tab_pos != pos)
     {
-      notebook->tab_pos = pos;
+      priv->tab_pos = pos;
       if (gtk_widget_get_visible (GTK_WIDGET (notebook)))
        gtk_widget_queue_resize (GTK_WIDGET (notebook));
     }
@@ -6992,74 +6966,7 @@ gtk_notebook_get_tab_pos (GtkNotebook *notebook)
 {
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), GTK_POS_TOP);
 
-  return notebook->tab_pos;
-}
-
-/**
- * gtk_notebook_set_homogeneous_tabs:
- * @notebook: a #GtkNotebook
- * @homogeneous: %TRUE if all tabs should be the same size.
- * 
- * Sets whether the tabs must have all the same size or not.
- **/
-void
-gtk_notebook_set_homogeneous_tabs (GtkNotebook *notebook,
-                                  gboolean     homogeneous)
-{
-  g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
-
-  gtk_notebook_set_homogeneous_tabs_internal (notebook, homogeneous);
-}
-
-/**
- * gtk_notebook_set_tab_border:
- * @notebook: a #GtkNotebook
- * @border_width: width of the border around the tab labels.
- * 
- * Sets the width the border around the tab labels
- * in a notebook. This is equivalent to calling
- * gtk_notebook_set_tab_hborder (@notebook, @border_width) followed
- * by gtk_notebook_set_tab_vborder (@notebook, @border_width).
- **/
-void
-gtk_notebook_set_tab_border (GtkNotebook *notebook,
-                            guint        border_width)
-{
-  g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
-
-  gtk_notebook_set_tab_border_internal (notebook, border_width);
-}
-
-/**
- * gtk_notebook_set_tab_hborder:
- * @notebook: a #GtkNotebook
- * @tab_hborder: width of the horizontal border of tab labels.
- * 
- * Sets the width of the horizontal border of tab labels.
- **/
-void
-gtk_notebook_set_tab_hborder (GtkNotebook *notebook,
-                             guint        tab_hborder)
-{
-  g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
-
-  gtk_notebook_set_tab_hborder_internal (notebook, tab_hborder);
-}
-
-/**
- * gtk_notebook_set_tab_vborder:
- * @notebook: a #GtkNotebook
- * @tab_vborder: width of the vertical border of tab labels.
- * 
- * Sets the width of the vertical border of tab labels.
- **/
-void
-gtk_notebook_set_tab_vborder (GtkNotebook *notebook,
-                             guint        tab_vborder)
-{
-  g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
-
-  gtk_notebook_set_tab_vborder_internal (notebook, tab_vborder);
+  return notebook->priv->tab_pos;
 }
 
 /**
@@ -7074,13 +6981,17 @@ void
 gtk_notebook_set_scrollable (GtkNotebook *notebook,
                             gboolean     scrollable)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
+  priv = notebook->priv;
+
   scrollable = (scrollable != FALSE);
 
-  if (scrollable != notebook->scrollable)
+  if (scrollable != priv->scrollable)
     {
-      notebook->scrollable = scrollable;
+      priv->scrollable = scrollable;
 
       if (gtk_widget_get_visible (GTK_WIDGET (notebook)))
        gtk_widget_queue_resize (GTK_WIDGET (notebook));
@@ -7103,9 +7014,46 @@ gtk_notebook_get_scrollable (GtkNotebook *notebook)
 {
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
 
-  return notebook->scrollable;
+  return notebook->priv->scrollable;
 }
 
+/**
+ * gtk_notebook_get_tab_hborder:
+ * @notebook: a #GtkNotebook
+ *
+ * Returns the horizontal width of a tab border.
+ *
+ * Return value: horizontal width of a tab border
+ *
+ * Since: 2.22
+ */
+guint16
+gtk_notebook_get_tab_hborder (GtkNotebook *notebook)
+{
+  g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
+
+  return notebook->priv->tab_hborder;
+}
+
+/**
+ * gtk_notebook_get_tab_vborder:
+ * @notebook: a #GtkNotebook
+ *
+ * Returns the vertical width of a tab border.
+ *
+ * Return value: vertical width of a tab border
+ *
+ * Since: 2.22
+ */
+guint16
+gtk_notebook_get_tab_vborder (GtkNotebook *notebook)
+{
+  g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
+
+  return notebook->priv->tab_vborder;
+}
+
+
 /* Public GtkNotebook Popup Menu Methods:
  *
  * gtk_notebook_popup_enable
@@ -7118,26 +7066,29 @@ gtk_notebook_get_scrollable (GtkNotebook *notebook)
  * @notebook: a #GtkNotebook
  * 
  * Enables the popup menu: if the user clicks with the right mouse button on
- * the bookmarks, a menu with all the pages will be popped up.
+ * the tab labels, a menu with all the pages will be popped up.
  **/
 void
 gtk_notebook_popup_enable (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  if (notebook->menu)
+  priv = notebook->priv;
+
+  if (priv->menu)
     return;
 
-  notebook->menu = gtk_menu_new ();
+  priv->menu = gtk_menu_new ();
   for (list = gtk_notebook_search_page (notebook, NULL, STEP_NEXT, FALSE);
        list;
        list = gtk_notebook_search_page (notebook, list, STEP_NEXT, FALSE))
     gtk_notebook_menu_item_create (notebook, list);
 
   gtk_notebook_update_labels (notebook);
-  gtk_menu_attach_to_widget (GTK_MENU (notebook->menu),
+  gtk_menu_attach_to_widget (GTK_MENU (priv->menu),
                             GTK_WIDGET (notebook),
                             gtk_notebook_menu_detacher);
 
@@ -7153,14 +7104,18 @@ gtk_notebook_popup_enable (GtkNotebook *notebook)
 void       
 gtk_notebook_popup_disable  (GtkNotebook *notebook)
 {
+  GtkNotebookPrivate *priv;
+
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  if (!notebook->menu)
+  priv = notebook->priv;
+
+  if (!priv->menu)
     return;
 
-  gtk_container_foreach (GTK_CONTAINER (notebook->menu),
+  gtk_container_foreach (GTK_CONTAINER (priv->menu),
                         (GtkCallback) gtk_notebook_menu_label_unparent, NULL);
-  gtk_widget_destroy (notebook->menu);
+  gtk_widget_destroy (priv->menu);
 
   g_object_notify (G_OBJECT (notebook), "enable-popup");
 }
@@ -7173,8 +7128,6 @@ gtk_notebook_popup_disable  (GtkNotebook *notebook)
  * gtk_notebook_get_menu_label
  * gtk_notebook_set_menu_label
  * gtk_notebook_set_menu_label_text
- * gtk_notebook_set_tab_label_packing
- * gtk_notebook_query_tab_label_packing
  * gtk_notebook_get_tab_reorderable
  * gtk_notebook_set_tab_reorderable
  * gtk_notebook_get_tab_detachable
@@ -7226,12 +7179,15 @@ gtk_notebook_set_tab_label (GtkNotebook *notebook,
                            GtkWidget   *child,
                            GtkWidget   *tab_label)
 {
+  GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
   g_return_if_fail (GTK_IS_WIDGET (child));
 
+  priv = notebook->priv;
+
   list = CHECK_FIND_CHILD (notebook, child);
   if (!list)  
     return;
@@ -7258,7 +7214,7 @@ gtk_notebook_set_tab_label (GtkNotebook *notebook,
       page->default_tab = TRUE;
       page->tab_label = NULL;
 
-      if (notebook->show_tabs)
+      if (priv->show_tabs)
        {
          gchar string[32];
 
@@ -7276,7 +7232,7 @@ gtk_notebook_set_tab_label (GtkNotebook *notebook,
                        G_CALLBACK (gtk_notebook_mnemonic_activate_switch_page),
                        notebook);
 
-  if (notebook->show_tabs && gtk_widget_get_visible (child))
+  if (priv->show_tabs && gtk_widget_get_visible (child))
     {
       gtk_widget_show (page->tab_label);
       gtk_widget_queue_resize (GTK_WIDGET (notebook));
@@ -7344,12 +7300,12 @@ gtk_notebook_get_tab_label_text (GtkNotebook *notebook,
  * gtk_notebook_get_menu_label:
  * @notebook: a #GtkNotebook
  * @child: a widget contained in a page of @notebook
- * 
+ *
  * Retrieves the menu label widget of the page containing @child.
- * 
- * Return value: the menu label, or %NULL if the
- *               notebook page does not have a menu label other
- *               than the default (the tab label).
+ *
+ * Return value: (transfer none): the menu label, or %NULL if the
+ *     notebook page does not have a menu label other than the
+ *     default (the tab label).
  **/
 GtkWidget*
 gtk_notebook_get_menu_label (GtkNotebook *notebook,
@@ -7361,14 +7317,14 @@ gtk_notebook_get_menu_label (GtkNotebook *notebook,
   g_return_val_if_fail (GTK_IS_WIDGET (child), NULL);
 
   list = CHECK_FIND_CHILD (notebook, child);
-  if (!list)  
+  if (!list)
     return NULL;
 
   if (GTK_NOTEBOOK_PAGE (list)->default_menu)
     return NULL;
 
   return GTK_NOTEBOOK_PAGE (list)->menu_label;
-}  
+}
 
 /**
  * gtk_notebook_set_menu_label:
@@ -7383,12 +7339,15 @@ gtk_notebook_set_menu_label (GtkNotebook *notebook,
                             GtkWidget   *child,
                             GtkWidget   *menu_label)
 {
+  GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
   g_return_if_fail (GTK_IS_WIDGET (child));
 
+  priv = notebook->priv;
+
   list = CHECK_FIND_CHILD (notebook, child);
   if (!list)  
     return;
@@ -7396,9 +7355,9 @@ gtk_notebook_set_menu_label (GtkNotebook *notebook,
   page = list->data;
   if (page->menu_label)
     {
-      if (notebook->menu)
-       gtk_container_remove (GTK_CONTAINER (notebook->menu), 
-                             page->menu_label->parent);
+      if (priv->menu)
+       gtk_container_remove (GTK_CONTAINER (priv->menu),
+                              gtk_widget_get_parent (page->menu_label));
 
       if (!page->default_menu)
        g_object_unref (page->menu_label);
@@ -7413,7 +7372,7 @@ gtk_notebook_set_menu_label (GtkNotebook *notebook,
   else
     page->default_menu = TRUE;
 
-  if (notebook->menu)
+  if (priv->menu)
     gtk_notebook_menu_item_create (notebook, list);
   gtk_widget_child_notify (child, "menu-label");
 }
@@ -7481,48 +7440,38 @@ static void
 gtk_notebook_child_reordered (GtkNotebook     *notebook,
                              GtkNotebookPage *page)
 {
-  if (notebook->menu)
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (priv->menu)
     {
       GtkWidget *menu_item;
-      
-      menu_item = page->menu_label->parent;
+
+      menu_item = gtk_widget_get_parent (page->menu_label);
       gtk_container_remove (GTK_CONTAINER (menu_item), page->menu_label);
-      gtk_container_remove (GTK_CONTAINER (notebook->menu), menu_item);
-      gtk_notebook_menu_item_create (notebook, g_list_find (notebook->children, page));
+      gtk_container_remove (GTK_CONTAINER (priv->menu), menu_item);
+      gtk_notebook_menu_item_create (notebook, g_list_find (priv->children, page));
     }
 
   gtk_notebook_update_tab_states (notebook);
   gtk_notebook_update_labels (notebook);
 }
 
-/**
- * gtk_notebook_set_tab_label_packing:
- * @notebook: a #GtkNotebook
- * @child: the child widget
- * @expand: whether to expand the bookmark or not
- * @fill: whether the bookmark should fill the allocated area or not
- * @pack_type: the position of the bookmark
- *
- * Sets the packing parameters for the tab label of the page
- * containing @child. See gtk_box_pack_start() for the exact meaning
- * of the parameters.
- *
- * Deprecated: 2.20: Modify the #GtkNotebook:tab-expand and
- *   #GtkNotebook:tab-fill child properties instead.
- **/
-void
+static void
 gtk_notebook_set_tab_label_packing (GtkNotebook *notebook,
-                                   GtkWidget   *child,
-                                   gboolean     expand,
-                                   gboolean     fill,
-                                   GtkPackType  pack_type)
+                                    GtkWidget   *child,
+                                    gboolean     expand,
+                                    gboolean     fill,
+                                    GtkPackType  pack_type)
 {
+  GtkNotebookPrivate *priv;
   GtkNotebookPage *page;
   GList *list;
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
   g_return_if_fail (GTK_IS_WIDGET (child));
 
+  priv = notebook->priv;
+
   list = CHECK_FIND_CHILD (notebook, child);
   if (!list)  
     return;
@@ -7545,31 +7494,17 @@ gtk_notebook_set_tab_label_packing (GtkNotebook *notebook,
     }
   gtk_widget_child_notify (child, "tab-pack");
   gtk_widget_child_notify (child, "position");
-  if (notebook->show_tabs)
+  if (priv->show_tabs)
     gtk_notebook_pages_allocate (notebook);
   gtk_widget_thaw_child_notify (child);
 }  
 
-/**
- * gtk_notebook_query_tab_label_packing:
- * @notebook: a #GtkNotebook
- * @child: the page
- * @expand: location to store the expand value (or NULL)
- * @fill: location to store the fill value (or NULL)
- * @pack_type: location to store the pack_type (or NULL)
- * 
- * Query the packing attributes for the tab label of the page
- * containing @child.
- *
- * Deprecated: 2.20: Modify the #GtkNotebook:tab-expand and
- *   #GtkNotebook:tab-fill child properties instead.
- **/
-void
+static void
 gtk_notebook_query_tab_label_packing (GtkNotebook *notebook,
-                                     GtkWidget   *child,
-                                     gboolean    *expand,
-                                     gboolean    *fill,
-                                     GtkPackType *pack_type)
+                                      GtkWidget   *child,
+                                      gboolean    *expand,
+                                      gboolean    *fill,
+                                      GtkPackType *pack_type)
 {
   GList *list;
 
@@ -7604,6 +7539,7 @@ gtk_notebook_reorder_child (GtkNotebook *notebook,
                            GtkWidget   *child,
                            gint         position)
 {
+  GtkNotebookPrivate *priv;
   GList *list, *new_list;
   GtkNotebookPage *page;
   gint old_pos;
@@ -7612,30 +7548,32 @@ gtk_notebook_reorder_child (GtkNotebook *notebook,
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
   g_return_if_fail (GTK_IS_WIDGET (child));
 
+  priv = notebook->priv;
+
   list = CHECK_FIND_CHILD (notebook, child);
   if (!list)
     return;
 
-  max_pos = g_list_length (notebook->children) - 1;
+  max_pos = g_list_length (priv->children) - 1;
   if (position < 0 || position > max_pos)
     position = max_pos;
 
-  old_pos = g_list_position (notebook->children, list);
+  old_pos = g_list_position (priv->children, list);
 
   if (old_pos == position)
     return;
 
   page = list->data;
-  notebook->children = g_list_delete_link (notebook->children, list);
+  priv->children = g_list_delete_link (priv->children, list);
 
-  notebook->children = g_list_insert (notebook->children, page, position);
-  new_list = g_list_nth (notebook->children, position);
+  priv->children = g_list_insert (priv->children, page, position);
+  new_list = g_list_nth (priv->children, position);
 
   /* Fix up GList references in GtkNotebook structure */
-  if (notebook->first_tab == list)
-    notebook->first_tab = new_list;
-  if (notebook->focus_tab == list)
-    notebook->focus_tab = new_list;
+  if (priv->first_tab == list)
+    priv->first_tab = new_list;
+  if (priv->focus_tab == list)
+    priv->focus_tab = new_list;
 
   gtk_widget_freeze_child_notify (child);
 
@@ -7644,7 +7582,7 @@ gtk_notebook_reorder_child (GtkNotebook *notebook,
   gtk_widget_child_notify (child, "tab-pack");
   gtk_widget_child_notify (child, "position");
 
-  if (notebook->show_tabs)
+  if (priv->show_tabs)
     gtk_notebook_pages_allocate (notebook);
 
   gtk_widget_thaw_child_notify (child);
@@ -7680,32 +7618,6 @@ gtk_notebook_set_window_creation_hook (GtkNotebookWindowCreationFunc  func,
   window_creation_hook_destroy = destroy;
 }
 
-/**
- * gtk_notebook_set_group_id:
- * @notebook: a #GtkNotebook
- * @group_id: a group identificator, or -1 to unset it
- *
- * Sets an group identificator for @notebook, notebooks sharing
- * the same group identificator will be able to exchange tabs
- * via drag and drop. A notebook with group identificator -1 will
- * not be able to exchange tabs with any other notebook.
- * 
- * Since: 2.10
- * Deprecated: 2.12: use gtk_notebook_set_group() instead.
- */
-void
-gtk_notebook_set_group_id (GtkNotebook *notebook,
-                          gint         group_id)
-{
-  gpointer group;
-
-  g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
-
-  /* add 1 to get rid of the -1/NULL difference */
-  group = GINT_TO_POINTER (group_id + 1);
-  gtk_notebook_set_group (notebook, group);
-}
-
 /**
  * gtk_notebook_set_group:
  * @notebook: a #GtkNotebook
@@ -7726,59 +7638,32 @@ gtk_notebook_set_group (GtkNotebook *notebook,
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  priv = notebook->priv;
 
   if (priv->group != group)
     {
       priv->group = group;
-      g_object_notify (G_OBJECT (notebook), "group-id");
       g_object_notify (G_OBJECT (notebook), "group");
     }
 }
 
-/**
- * gtk_notebook_get_group_id:
- * @notebook: a #GtkNotebook
- * 
- * Gets the current group identificator for @notebook.
- * 
- * Return Value: the group identificator, or -1 if none is set.
- *
- * Since: 2.10
- * Deprecated: 2.12: use gtk_notebook_get_group() instead.
- */
-gint
-gtk_notebook_get_group_id (GtkNotebook *notebook)
-{
-  GtkNotebookPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), -1);
-
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-
-  /* substract 1 to get rid of the -1/NULL difference */
-  return GPOINTER_TO_INT (priv->group) - 1;
-}
-
 /**
  * gtk_notebook_get_group:
  * @notebook: a #GtkNotebook
- * 
+ *
  * Gets the current group identificator pointer for @notebook.
- * 
- * Return Value: the group identificator, or %NULL if none is set.
+ *
+ * Return Value: (transfer none): the group identificator,
+ *     or %NULL if none is set.
  *
  * Since: 2.12
  **/
 gpointer
 gtk_notebook_get_group (GtkNotebook *notebook)
 {
-  GtkNotebookPrivate *priv;
-
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), NULL);
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-  return priv->group;
+  return notebook->priv->group;
 }
 
 /**
@@ -7877,7 +7762,7 @@ gtk_notebook_get_tab_detachable (GtkNotebook *notebook,
  * notebook or widget.
  *
  * Note that 2 notebooks must share a common group identificator
- * (see gtk_notebook_set_group_id ()) to allow automatic tabs
+ * (see gtk_notebook_set_group()) to allow automatic tabs
  * interchange between them.
  *
  * If you want a widget to interact with a notebook through DnD
@@ -7940,8 +7825,8 @@ gtk_notebook_set_tab_detachable (GtkNotebook *notebook,
  *
  * Gets one of the action widgets. See gtk_notebook_set_action_widget().
  *
- * Returns: The action widget with the given @pack_type or
- *     %NULL when this action widget has not been set
+ * Returns: (transfer none): The action widget with the given @pack_type
+ *     or %NULL when this action widget has not been set
  *
  * Since: 2.20
  */
@@ -7949,12 +7834,9 @@ GtkWidget*
 gtk_notebook_get_action_widget (GtkNotebook *notebook,
                                 GtkPackType  pack_type)
 {
-  GtkNotebookPrivate *priv;
-
   g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), NULL);
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
-  return priv->action_widget[pack_type];
+  return notebook->priv->action_widget[pack_type];
 }
 
 /**
@@ -7981,9 +7863,9 @@ gtk_notebook_set_action_widget (GtkNotebook *notebook,
 
   g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
   g_return_if_fail (!widget || GTK_IS_WIDGET (widget));
-  g_return_if_fail (!widget || widget->parent == NULL);
+  g_return_if_fail (!widget || gtk_widget_get_parent (widget) == NULL);
 
-  priv = GTK_NOTEBOOK_GET_PRIVATE (notebook);
+  priv = notebook->priv;
 
   if (priv->action_widget[pack_type])
     gtk_widget_unparent (priv->action_widget[pack_type]);
@@ -7992,12 +7874,9 @@ gtk_notebook_set_action_widget (GtkNotebook *notebook,
 
   if (widget)
     {
-      gtk_widget_set_child_visible (widget, notebook->show_tabs);
+      gtk_widget_set_child_visible (widget, priv->show_tabs);
       gtk_widget_set_parent (widget, GTK_WIDGET (notebook));
     }
 
   gtk_widget_queue_resize (GTK_WIDGET (notebook));
 }
-
-#define __GTK_NOTEBOOK_C__
-#include "gtkaliasdef.c"