summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Blandford <jrb@redhat.com>2001-09-18 16:15:10 +0000
committerJonathan Blandford <jrb@src.gnome.org>2001-09-18 16:15:10 +0000
commitf724f836ec03c39c00abc983011e393b56b2c2d1 (patch)
treeb84f9f4b173d4ccb7fe150663038954545bb6ccf
parentcbae279486cd8d098be6ad9023fac6ed10fab20e (diff)
downloadgtk+-f724f836ec03c39c00abc983011e393b56b2c2d1.tar.gz
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.
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.pre-2-06
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-26
-rw-r--r--ChangeLog.pre-2-46
-rw-r--r--ChangeLog.pre-2-66
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--gtk/gtktreemodel.c1
-rw-r--r--gtk/gtktreeprivate.h7
-rw-r--r--gtk/gtktreeview.c68
-rw-r--r--gtk/gtktreeviewcolumn.c41
11 files changed, 127 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 6914fef554..490653b13b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 =
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -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 =
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -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 =
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -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 =
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -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 =
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -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 =
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 6914fef554..490653b13b 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -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 =
diff --git a/gtk/gtktreemodel.c b/gtk/gtktreemodel.c
index 26d2cb8847..ffde83b8eb 100644
--- a/gtk/gtktreemodel.c
+++ b/gtk/gtktreemodel.c
@@ -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);
diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h
index ca33894c5d..67b37f0c7e 100644
--- a/gtk/gtktreeprivate.h
+++ b/gtk/gtktreeprivate.h
@@ -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);
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index bc748f0aeb..d8776045d2 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -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);
}
}
+
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index 787decc08d..5be1875472 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -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;
}