Commit 74e7da21 authored by Havoc Pennington's avatar Havoc Pennington Committed by Havoc Pennington

geez, don't call g_list funcs on GSList

2001-06-08  Havoc Pennington  <hp@redhat.com>

	* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
	don't call g_list funcs on GSList

	* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
	gtk_container_focus(), since some widgets have focusable locations
	which are not other widgets. These widgets should not have to be
	containers just to manage the focus. For example, GtkHSV is
	currently a container for no good reason. Also, this cleans
	up the "if (is_container && is_sensitive && is_drawable)
	container_focus ()" mess in widget implementations.

	* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
	function, and have it just call gtk_widget_child_focus().

	* gtk/gtkhsv.c: derive from widget not container

	Throughout: fix to reflect GtkContainer::focus change
parent 72ef055b
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
2001-06-08 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): geez,
don't call g_list funcs on GSList
* gtk/gtkwidget.c (gtk_widget_child_focus): replaces
gtk_container_focus(), since some widgets have focusable locations
which are not other widgets. These widgets should not have to be
containers just to manage the focus. For example, GtkHSV is
currently a container for no good reason. Also, this cleans
up the "if (is_container && is_sensitive && is_drawable)
container_focus ()" mess in widget implementations.
* gtk/gtkcontainer.c (gtk_container_focus): deprecate this
function, and have it just call gtk_widget_child_focus().
* gtk/gtkhsv.c: derive from widget not container
Throughout: fix to reflect GtkContainer::focus change
Fri Jun 8 12:38:49 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktable.c (gtk_table_resize): warn if row/cols are out of
......
......@@ -352,3 +352,16 @@ Incompatible Changes from GTK+-1.2 to GTK+-2.0:
these widgets will need a rewrite (though if you could figure out
how to subclass the old version of GtkRange, you have our
respect). Also, GtkTroughType is gone.
* The GtkContainer::focus signal/virtualfunction and
gtk_container_focus() call were replaced by
GtkWidget::focus and gtk_widget_child_focus().
The semantics are the same, so you should be able to just
replace "container_class->focus = mywidget_focus" with
"widget_class->focus = mywidget_focus" and replace
gtk_container_focus() calls with gtk_widget_child_focus() calls.
The purpose of this change was to allow non-containers to have
focusable elements.
\ No newline at end of file
......@@ -361,6 +361,15 @@ Define a function pointer. Deprecated.
@arg:
@arg_id:
<!-- ##### SIGNAL GtkContainer::focus ##### -->
<para>
</para>
@container: the object which received the signal.
@direction:
@Returns:
<!-- ##### ARG GtkContainer:reallocate-redraws ##### -->
<para>
......
......@@ -382,15 +382,6 @@ GtkContainer
@container: the object which received the signal.
<!-- ##### SIGNAL GtkContainer::focus ##### -->
<para>
</para>
@container: the object which received the signal.
@direction:
@Returns:
<!-- ##### SIGNAL GtkContainer::remove ##### -->
<para>
......
......@@ -1530,6 +1530,15 @@ GtkWidget
@event:
@Returns:
<!-- ##### SIGNAL GtkWidget::focus ##### -->
<para>
</para>
@widget: the object which received the signal.
@arg1:
@Returns:
<!-- ##### SIGNAL GtkWidget::focus-in-event ##### -->
<para>
......
......@@ -216,7 +216,7 @@ static gint gtk_clist_focus_in (GtkWidget *widget,
GdkEventFocus *event);
static gint gtk_clist_focus_out (GtkWidget *widget,
GdkEventFocus *event);
static gint gtk_clist_focus (GtkContainer *container,
static gint gtk_clist_focus (GtkWidget *widget,
GtkDirectionType direction);
static void gtk_clist_set_focus_child (GtkContainer *container,
GtkWidget *child);
......@@ -530,12 +530,12 @@ gtk_clist_class_init (GtkCListClass *klass)
widget_class->drag_drop = gtk_clist_drag_drop;
widget_class->drag_data_get = gtk_clist_drag_data_get;
widget_class->drag_data_received = gtk_clist_drag_data_received;
widget_class->focus = gtk_clist_focus;
/* container_class->add = NULL; use the default GtkContainerClass warning */
/* container_class->remove=NULL; use the default GtkContainerClass warning */
container_class->forall = gtk_clist_forall;
container_class->focus = gtk_clist_focus;
container_class->set_focus_child = gtk_clist_set_focus_child;
klass->set_scroll_adjustments = gtk_clist_set_scroll_adjustments;
......@@ -6402,23 +6402,22 @@ gtk_clist_focus_content_area (GtkCList *clist)
}
static gboolean
gtk_clist_focus (GtkContainer *container,
gtk_clist_focus (GtkWidget *widget,
GtkDirectionType direction)
{
GtkCList *clist = GTK_CLIST (container);
GtkWidget *focus_child = container->focus_child;
GtkCList *clist = GTK_CLIST (widget);
GtkWidget *focus_child;
gboolean is_current_focus;
if (!GTK_WIDGET_IS_SENSITIVE (container))
if (!GTK_WIDGET_IS_SENSITIVE (widget))
return FALSE;
focus_child = GTK_CONTAINER (widget)->focus_child;
is_current_focus = gtk_widget_is_focus (GTK_WIDGET (clist));
if (focus_child &&
GTK_IS_CONTAINER (focus_child) &&
GTK_WIDGET_DRAWABLE (focus_child) &&
GTK_WIDGET_IS_SENSITIVE (focus_child) &&
gtk_container_focus (GTK_CONTAINER (focus_child), direction))
gtk_widget_child_focus (focus_child, direction))
return TRUE;
switch (direction)
......@@ -6562,8 +6561,7 @@ focus_column (GtkCList *clist, gint column, gint dir)
{
GtkWidget *child = clist->column[column].button;
if (GTK_IS_CONTAINER (child) &&
gtk_container_focus (GTK_CONTAINER (child), dir))
if (gtk_widget_child_focus (child, dir))
{
return TRUE;
}
......
......@@ -39,7 +39,6 @@ enum {
ADD,
REMOVE,
CHECK_RESIZE,
FOCUS,
SET_FOCUS_CHILD,
LAST_SIGNAL
};
......@@ -79,7 +78,7 @@ static void gtk_container_add_unimplemented (GtkContainer *container
static void gtk_container_remove_unimplemented (GtkContainer *container,
GtkWidget *widget);
static void gtk_container_real_check_resize (GtkContainer *container);
static gboolean gtk_container_real_focus (GtkContainer *container,
static gboolean gtk_container_focus (GtkWidget *widget,
GtkDirectionType direction);
static void gtk_container_real_set_focus_child (GtkContainer *container,
GtkWidget *widget);
......@@ -205,12 +204,12 @@ gtk_container_class_init (GtkContainerClass *class)
widget_class->show_all = gtk_container_show_all;
widget_class->hide_all = gtk_container_hide_all;
widget_class->expose_event = gtk_container_expose;
widget_class->focus = gtk_container_focus;
class->add = gtk_container_add_unimplemented;
class->remove = gtk_container_remove_unimplemented;
class->check_resize = gtk_container_real_check_resize;
class->forall = NULL;
class->focus = gtk_container_real_focus;
class->set_focus_child = gtk_container_real_set_focus_child;
class->child_type = NULL;
class->composite_name = gtk_container_child_default_composite_name;
......@@ -238,14 +237,6 @@ gtk_container_class_init (GtkContainerClass *class)
GTK_SIGNAL_OFFSET (GtkContainerClass, check_resize),
gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
container_signals[FOCUS] =
gtk_signal_new ("focus",
GTK_RUN_LAST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkContainerClass, focus),
gtk_marshal_ENUM__ENUM,
GTK_TYPE_DIRECTION_TYPE, 1,
GTK_TYPE_DIRECTION_TYPE);
container_signals[SET_FOCUS_CHILD] =
gtk_signal_new ("set-focus-child",
GTK_RUN_FIRST,
......@@ -1282,22 +1273,6 @@ gtk_container_foreach_full (GtkContainer *container,
notify (callback_data);
}
gboolean
gtk_container_focus (GtkContainer *container,
GtkDirectionType direction)
{
gint return_val;
g_return_val_if_fail (container != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CONTAINER (container), FALSE);
gtk_signal_emit (GTK_OBJECT (container),
container_signals[FOCUS],
direction, &return_val);
return return_val;
}
void
gtk_container_set_focus_child (GtkContainer *container,
GtkWidget *widget)
......@@ -1480,20 +1455,16 @@ filter_unfocusable (GtkContainer *container,
}
static gboolean
gtk_container_real_focus (GtkContainer *container,
GtkDirectionType direction)
gtk_container_focus (GtkWidget *widget,
GtkDirectionType direction)
{
GList *children;
gint return_val;
GtkContainer *container;
g_return_val_if_fail (container != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CONTAINER (container), FALSE);
g_return_val_if_fail (GTK_IS_CONTAINER (widget), FALSE);
/* Fail if the container is inappropriate for focus movement
*/
if (!GTK_WIDGET_DRAWABLE (container) ||
!GTK_WIDGET_IS_SENSITIVE (container))
return FALSE;
container = GTK_CONTAINER (widget);
return_val = FALSE;
......@@ -1936,25 +1907,15 @@ gtk_container_focus_move (GtkContainer *container,
{
focus_child = NULL;
if (GTK_WIDGET_DRAWABLE (child) &&
GTK_IS_CONTAINER (child))
if (gtk_container_focus (GTK_CONTAINER (child), direction))
if (gtk_widget_child_focus (child, direction))
return TRUE;
}
}
else if (GTK_WIDGET_DRAWABLE (child) &&
gtk_widget_is_ancestor (child, GTK_WIDGET (container)))
{
if (GTK_IS_CONTAINER (child))
{
if (gtk_container_focus (GTK_CONTAINER (child), direction))
return TRUE;
}
else if (GTK_WIDGET_CAN_FOCUS (child))
{
gtk_widget_grab_focus (child);
return TRUE;
}
if (gtk_widget_child_focus (child, direction))
return TRUE;
}
}
......
......@@ -83,9 +83,7 @@ struct _GtkContainerClass
void (* forall) (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callbabck_data);
gboolean (* focus) (GtkContainer *container,
GtkDirectionType direction);
gpointer callback_data);
void (* set_focus_child) (GtkContainer *container,
GtkWidget *widget);
GtkType (*child_type) (GtkContainer *container);
......@@ -129,8 +127,6 @@ void gtk_container_foreach_full (GtkContainer *container,
gpointer callback_data,
GtkDestroyNotify notify);
GList* gtk_container_children (GtkContainer *container);
gboolean gtk_container_focus (GtkContainer *container,
GtkDirectionType direction);
void gtk_container_propagate_expose (GtkContainer *container,
GtkWidget *child,
GdkEventExpose *event);
......@@ -203,8 +199,7 @@ void gtk_container_addv (GtkContainer *container,
void gtk_container_child_set (GtkContainer *container,
GtkWidget *child,
const gchar *first_arg_name,
...);
...);
/* Non-public methods */
......
......@@ -103,7 +103,7 @@ static gint gtk_hsv_motion (GtkWidget *widget,
GdkEventMotion *event);
static gint gtk_hsv_expose (GtkWidget *widget,
GdkEventExpose *event);
static gboolean gtk_hsv_focus (GtkContainer *container,
static gboolean gtk_hsv_focus (GtkWidget *widget,
GtkDirectionType direction);
static void gtk_hsv_move (GtkHSV *hsv,
......@@ -139,7 +139,7 @@ gtk_hsv_get_type (void)
(GtkClassInitFunc) NULL
};
hsv_type = gtk_type_unique (GTK_TYPE_CONTAINER, &hsv_info);
hsv_type = gtk_type_unique (GTK_TYPE_WIDGET, &hsv_info);
}
return hsv_type;
......@@ -151,13 +151,11 @@ gtk_hsv_class_init (GtkHSVClass *class)
{
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkContainerClass *container_class;
GtkHSVClass *hsv_class;
GtkBindingSet *binding_set;
object_class = (GtkObjectClass *) class;
widget_class = (GtkWidgetClass *) class;
container_class = GTK_CONTAINER_CLASS (class);
hsv_class = GTK_HSV_CLASS (class);
parent_class = gtk_type_class (GTK_TYPE_WIDGET);
......@@ -174,8 +172,7 @@ gtk_hsv_class_init (GtkHSVClass *class)
widget_class->button_release_event = gtk_hsv_button_release;
widget_class->motion_notify_event = gtk_hsv_motion;
widget_class->expose_event = gtk_hsv_expose;
container_class->focus = gtk_hsv_focus;
widget_class->focus = gtk_hsv_focus;
hsv_class->move = gtk_hsv_move;
......@@ -1357,18 +1354,14 @@ gtk_hsv_expose (GtkWidget *widget,
}
static gboolean
gtk_hsv_focus (GtkContainer *container,
gtk_hsv_focus (GtkWidget *widget,
GtkDirectionType dir)
{
GtkHSV *hsv;
HSVPrivate *priv;
hsv = GTK_HSV (container);
hsv = GTK_HSV (widget);
priv = hsv->priv;
if (!GTK_WIDGET_DRAWABLE (container) ||
!GTK_WIDGET_IS_SENSITIVE (container))
return FALSE;
if (!GTK_WIDGET_HAS_FOCUS (hsv))
{
......
......@@ -50,8 +50,7 @@ typedef struct _GtkHSVClass GtkHSVClass;
struct _GtkHSV
{
/* we derive from container purely so we can have a _focus method */
GtkContainer parent_instance;
GtkWidget parent_instance;
/* Private data */
gpointer priv;
......
......@@ -75,6 +75,9 @@ static gint gtk_list_button_press (GtkWidget *widget,
static gint gtk_list_button_release (GtkWidget *widget,
GdkEventButton *event);
static gboolean gtk_list_focus (GtkWidget *widget,
GtkDirectionType direction);
/*** GtkContainer Methods ***/
static void gtk_list_add (GtkContainer *container,
GtkWidget *widget);
......@@ -87,8 +90,6 @@ static void gtk_list_forall (GtkContainer *container,
static GtkType gtk_list_child_type (GtkContainer *container);
static void gtk_list_set_focus_child (GtkContainer *container,
GtkWidget *widget);
static gint gtk_list_focus (GtkContainer *container,
GtkDirectionType direction);
/*** GtkList Private Functions ***/
static void gtk_list_move_focus_child (GtkList *list,
......@@ -228,13 +229,13 @@ gtk_list_class_init (GtkListClass *class)
widget_class->size_request = gtk_list_size_request;
widget_class->size_allocate = gtk_list_size_allocate;
widget_class->drag_begin = gtk_list_drag_begin;
widget_class->focus = gtk_list_focus;
container_class->add = gtk_list_add;
container_class->remove = gtk_list_remove;
container_class->forall = gtk_list_forall;
container_class->child_type = gtk_list_child_type;
container_class->set_focus_child = gtk_list_set_focus_child;
container_class->focus = gtk_list_focus;
class->selection_changed = NULL;
class->select_child = gtk_real_list_select_child;
......@@ -973,15 +974,15 @@ gtk_list_set_focus_child (GtkContainer *container,
}
}
static gint
gtk_list_focus (GtkContainer *container,
static gboolean
gtk_list_focus (GtkWidget *widget,
GtkDirectionType direction)
{
gint return_val = FALSE;
GtkContainer *container;
g_return_val_if_fail (container != NULL, FALSE);
g_return_val_if_fail (GTK_IS_LIST (container), FALSE);
container = GTK_CONTAINER (widget);
if (container->focus_child == NULL ||
!GTK_WIDGET_HAS_FOCUS (container->focus_child))
{
......@@ -989,9 +990,9 @@ gtk_list_focus (GtkContainer *container,
gtk_container_set_focus_child
(container, GTK_LIST (container)->last_focus_child);
if (GTK_CONTAINER_CLASS (parent_class)->focus)
return_val = GTK_CONTAINER_CLASS (parent_class)->focus (container,
direction);
if (GTK_WIDGET_CLASS (parent_class)->focus)
return_val = GTK_WIDGET_CLASS (parent_class)->focus (widget,
direction);
}
if (!return_val)
......
......@@ -23,6 +23,7 @@
BOOLEAN:BOXED
BOOLEAN:BOXED,BOXED
BOOLEAN:ENUM
BOOLEAN:OBJECT,INT,INT,UINT
BOOLEAN:OBJECT,STRING,STRING,BOXED
BOOLEAN:OBJECT,BOXED,BOXED
......
......@@ -23,6 +23,7 @@
BOOLEAN:BOXED
BOOLEAN:BOXED,BOXED
BOOLEAN:ENUM
BOOLEAN:OBJECT,INT,INT,UINT
BOOLEAN:OBJECT,STRING,STRING,BOXED
BOOLEAN:OBJECT,BOXED,BOXED
......
......@@ -156,6 +156,8 @@ static gint gtk_notebook_focus_in (GtkWidget *widget,
static void gtk_notebook_draw_focus (GtkWidget *widget);
static void gtk_notebook_style_set (GtkWidget *widget,
GtkStyle *previous_style);
static gint gtk_notebook_focus (GtkWidget *widget,
GtkDirectionType direction);
/*** GtkContainer Methods ***/
static void gtk_notebook_set_child_arg (GtkContainer *container,
......@@ -170,8 +172,6 @@ static void gtk_notebook_add (GtkContainer *container,
GtkWidget *widget);
static void gtk_notebook_remove (GtkContainer *container,
GtkWidget *widget);
static gint gtk_notebook_focus (GtkContainer *container,
GtkDirectionType direction);
static void gtk_notebook_set_focus_child (GtkContainer *container,
GtkWidget *child);
static GtkType gtk_notebook_child_type (GtkContainer *container);
......@@ -310,11 +310,11 @@ gtk_notebook_class_init (GtkNotebookClass *class)
widget_class->motion_notify_event = gtk_notebook_motion_notify;
widget_class->focus_in_event = gtk_notebook_focus_in;
widget_class->style_set = gtk_notebook_style_set;
widget_class->focus = gtk_notebook_focus;
container_class->add = gtk_notebook_add;
container_class->remove = gtk_notebook_remove;
container_class->forall = gtk_notebook_forall;
container_class->focus = gtk_notebook_focus;
container_class->set_focus_child = gtk_notebook_set_focus_child;
container_class->get_child_arg = gtk_notebook_get_child_arg;
container_class->set_child_arg = gtk_notebook_set_child_arg;
......@@ -1190,7 +1190,7 @@ gtk_notebook_arrow_button_press (GtkNotebook *notebook,
dir = (arrow == GTK_ARROW_LEFT) ? GTK_DIR_UP : GTK_DIR_DOWN;
else
dir = (arrow == GTK_ARROW_LEFT) ? GTK_DIR_LEFT : GTK_DIR_RIGHT;
gtk_container_focus (GTK_CONTAINER (notebook), dir);
gtk_widget_child_focus (widget, dir);
}
if (!notebook->timer)
......@@ -1677,28 +1677,14 @@ static gboolean
focus_child_in (GtkNotebook *notebook,
GtkDirectionType direction)
{
if (GTK_WIDGET_DRAWABLE (notebook->cur_page->child) &&
GTK_WIDGET_IS_SENSITIVE (notebook->cur_page->child))
{
if (GTK_IS_CONTAINER (notebook->cur_page->child))
{
if (gtk_container_focus (GTK_CONTAINER (notebook->cur_page->child), direction))
return TRUE;
}
else if (GTK_WIDGET_CAN_FOCUS (notebook->cur_page->child))
{
gtk_widget_grab_focus (notebook->cur_page->child);
return TRUE;
}
}
return FALSE;
return gtk_widget_child_focus (notebook->cur_page->child, direction);
}
/* Focus in the notebook can either be on the pages, or on
* the tabs.
*/
static gint
gtk_notebook_focus (GtkContainer *container,
gtk_notebook_focus (GtkWidget *widget,
GtkDirectionType direction)
{
GtkWidget *old_focus_child;
......@@ -1720,26 +1706,23 @@ gtk_notebook_focus (GtkContainer *container,
#undef D
gboolean widget_is_focus;
GtkContainer *container;
g_return_val_if_fail (container != NULL, FALSE);
g_return_val_if_fail (GTK_IS_NOTEBOOK (container), FALSE);
g_return_val_if_fail (GTK_IS_NOTEBOOK (widget), FALSE);
container = GTK_CONTAINER (widget);
notebook = GTK_NOTEBOOK (container);
widget_is_focus = gtk_widget_is_focus (GTK_WIDGET (container));
widget_is_focus = gtk_widget_is_focus (widget);
old_focus_child = container->focus_child;
effective_direction = translate_direction[notebook->tab_pos][direction];
if (old_focus_child &&
GTK_IS_CONTAINER (old_focus_child) &&
GTK_WIDGET_DRAWABLE (old_focus_child) &&
GTK_WIDGET_IS_SENSITIVE (old_focus_child) &&
gtk_container_focus (GTK_CONTAINER (old_focus_child), direction))
return TRUE;
if (old_focus_child) /* Focus on page child */
{
if (gtk_widget_child_focus (old_focus_child, direction))
return TRUE;
switch (effective_direction)
{
case GTK_DIR_TAB_BACKWARD:
......@@ -2041,14 +2024,14 @@ gtk_notebook_timer (GtkNotebook *notebook)
if (!notebook->focus_tab ||
gtk_notebook_search_page (notebook, notebook->focus_tab,
STEP_PREV, TRUE))
gtk_container_focus (GTK_CONTAINER (notebook), GTK_DIR_LEFT);
gtk_widget_child_focus (GTK_WIDGET (notebook), GTK_DIR_LEFT);
}
else if (notebook->click_child == GTK_ARROW_RIGHT)
{
if (!notebook->focus_tab ||
gtk_notebook_search_page (notebook, notebook->focus_tab,
STEP_NEXT, TRUE))
gtk_container_focus (GTK_CONTAINER (notebook), GTK_DIR_RIGHT);
gtk_widget_child_focus (GTK_WIDGET (notebook), GTK_DIR_RIGHT);
}
if (notebook->need_timer)
{
......@@ -3491,21 +3474,9 @@ gtk_notebook_page_select (GtkNotebook *notebook,
dir = GTK_DIR_LEFT;
break;
}
if (GTK_WIDGET_VISIBLE (page->child))
{
if (GTK_IS_CONTAINER (page->child))
{
if (gtk_container_focus (GTK_CONTAINER (page->child),
dir))
return TRUE;
}
else if (GTK_WIDGET_CAN_FOCUS (page->child))
{
gtk_widget_grab_focus (page->child);
return TRUE;
}
}