Add put for use with editable widgets. This function is private, and

Tue Sep 18 12:12:43 2001  Jonathan Blandford  <jrb@redhat.com>

	* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
	editable widgets.  This function is private, and should only be
	used by GtkTreeView.
This commit is contained in:
Jonathan Blandford 2001-09-18 16:15:10 +00:00 committed by Jonathan Blandford
parent cbae279486
commit f724f836ec
11 changed files with 127 additions and 32 deletions

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1,3 +1,9 @@
Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
editable widgets. This function is private, and should only be
used by GtkTreeView.
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =

View File

@ -1011,7 +1011,6 @@ gtk_tree_model_row_changed (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter)
{
gint i;
g_return_if_fail (GTK_IS_TREE_MODEL (tree_model));
g_return_if_fail (path != NULL);
g_return_if_fail (iter != NULL);

View File

@ -279,6 +279,13 @@ void _gtk_tree_view_column_set_width (GtkTreeViewColumn *column,
gint width);
void _gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
GtkTreeViewColumn *column);
gboolean _gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
GtkCellEditable **editable_widget,
GdkEvent *event,
gchar *path_string,
GdkRectangle *background_area,
GdkRectangle *cell_area,
guint flags);
GtkTreeSelection* _gtk_tree_selection_new (void);
GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view);

View File

@ -73,6 +73,8 @@ struct _GtkTreeViewChild
GtkWidget *widget;
gint x;
gint y;
gint width;
gint height;
};
@ -374,7 +376,13 @@ static void gtk_tree_view_search_init (GtkWidget *entry
GtkTreeView *tree_view);
static void gtk_tree_view_interactive_search (GtkTreeView *tree_view,
GdkEventKey *key);
static void gtk_tree_view_put (GtkTreeView *tree_view,
GtkWidget *child_widget,
gint x,
gint y,
gint width,
gint height);
static GtkContainerClass *parent_class = NULL;
static guint tree_view_signals[LAST_SIGNAL] = { 0 };
@ -1410,16 +1418,15 @@ gtk_tree_view_size_allocate (GtkWidget *widget,
while (tmp_list)
{
GtkAllocation allocation;
GtkRequisition requisition;
GtkTreeViewChild *child = tmp_list->data;
tmp_list = tmp_list->next;
/* totally ignore our childs allocation <-: */
allocation.x = child->x;
allocation.y = child->y;
gtk_widget_get_child_requisition (child->widget, &requisition);
allocation.width = requisition.width;
allocation.height = requisition.height;
allocation.width = child->width;
allocation.height = child->height;
gtk_widget_size_allocate (child->widget, &allocation);
}
@ -1539,6 +1546,7 @@ gtk_tree_view_button_press (GtkWidget *widget,
for (list = tree_view->priv->columns; list; list = list->next)
{
GtkTreeIter iter;
GtkCellEditable *cell_editable = NULL;
column = list->data;
@ -1576,12 +1584,21 @@ gtk_tree_view_button_press (GtkWidget *widget,
path_string = gtk_tree_path_to_string (path);
if (gtk_tree_view_column_cell_event (column,
(GdkEvent *)event,
path_string,
&background_area,
&cell_area, 0))
if (_gtk_tree_view_column_cell_event (column,
&cell_editable,
(GdkEvent *)event,
path_string,
&background_area,
&cell_area, 0))
{
if (cell_editable != NULL)
{
gtk_tree_view_put (tree_view,
GTK_WIDGET (cell_editable),
cell_area.x, cell_area.y, cell_area.width, cell_area.height);
gtk_cell_editable_start_editing (cell_editable,
(GdkEvent *)event);
}
g_free (path_string);
gtk_tree_path_free (path);
return TRUE;
@ -4197,6 +4214,36 @@ gtk_tree_view_real_move_cursor (GtkTreeView *tree_view,
}
}
static void
gtk_tree_view_put (GtkTreeView *tree_view,
GtkWidget *child_widget,
gint x,
gint y,
gint width,
gint height)
{
GtkTreeViewChild *child;
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
g_return_if_fail (GTK_IS_WIDGET (child_widget));
child = g_new (GtkTreeViewChild, 1);
child->widget = child_widget;
child->x = x;
child->y = y;
child->width = width;
child->height = height;
tree_view->priv->children = g_list_append (tree_view->priv->children, child);
if (GTK_WIDGET_REALIZED (tree_view))
gtk_widget_set_parent_window (child->widget, tree_view->priv->bin_window);
gtk_widget_set_parent (child_widget, GTK_WIDGET (tree_view));
}
/* TreeModel Callbacks
*/
@ -9054,3 +9101,4 @@ gtk_tree_view_search_init (GtkWidget *entry,
selected_iter);
}
}

View File

@ -2229,34 +2229,23 @@ gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
}
}
/**
* gtk_tree_view_column_cell_event:
* @tree_column: A #GtkTreeViewColumn.
* @event: a #GdkEvent
* @path_string: widget-dependent string representation of the event location; e.g. for #GtkTreeView, a string representation of #GtkTreePath
* @background_area: background area as passed to gtk_cell_renderer_render()
* @cell_area: cell area as passed to gtk_cell_renderer_render()
* @flags: render flags
*
* Handles an event. This is used primarily by the GtkTreeView.
*
* Return value: %TRUE if the event was consumed/handled
**/
gboolean
gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
GdkEvent *event,
gchar *path_string,
GdkRectangle *background_area,
GdkRectangle *cell_area,
guint flags)
_gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
GtkCellEditable **editable_widget,
GdkEvent *event,
gchar *path_string,
GdkRectangle *background_area,
GdkRectangle *cell_area,
guint flags)
{
gboolean visible, can_activate;
gboolean visible, can_activate, can_edit;
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE);
g_object_get (G_OBJECT (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell),
"visible", &visible,
"can_activate", &can_activate,
"can_edit", &can_edit,
NULL);
if (visible && can_activate)
{
@ -2268,7 +2257,17 @@ gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
cell_area,
flags))
return TRUE;
}
else if (visible && can_edit)
{
*editable_widget = gtk_cell_renderer_start_editing (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell,
event,
tree_column->tree_view,
path_string,
background_area,
cell_area,
flags);
return (*editable_widget != NULL);
}
return FALSE;
}