summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2002-04-14 15:05:04 +0000
committerKristian Rietveld <kristian@src.gnome.org>2002-04-14 15:05:04 +0000
commit54db0fc9fd6430d8548be5a607dfc66b869415c7 (patch)
tree8758e6ba4dc829bb3c6c98a5248915e38999d182
parent2b350816a8ad73396446f21f46ced48dfd11fbd0 (diff)
downloadgdk-pixbuf-54db0fc9fd6430d8548be5a607dfc66b869415c7.tar.gz
add _gtk_tree_view_column_get_editable_cell and
Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and _gtk_tree_view_column_get_neighbor_sizes * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add real_width field, (_gtk_tree_view_column_get_editable_cell): implement, (gtk_tree_view_column_cell_process_action): fill info->real_width (_gtk_tree_view_column_get_neighbor_sizes): implement * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable widget" show up with the same size as the actual cell, so it doesnt cover the complete column if there are any other cells in that column.
-rw-r--r--ChangeLog15
-rw-r--r--ChangeLog.pre-2-1015
-rw-r--r--ChangeLog.pre-2-215
-rw-r--r--ChangeLog.pre-2-415
-rw-r--r--ChangeLog.pre-2-615
-rw-r--r--ChangeLog.pre-2-815
-rw-r--r--gtk/gtktreeprivate.h7
-rw-r--r--gtk/gtktreeview.c28
-rw-r--r--gtk/gtktreeviewcolumn.c68
9 files changed, 183 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 5f53cfd1b..d7fd25fd7 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+ _gtk_tree_view_column_get_neighbor_sizes
+
+ * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+ real_width field,
+ (_gtk_tree_view_column_get_editable_cell): implement,
+ (gtk_tree_view_column_cell_process_action): fill info->real_width
+ (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+ * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+ widget" show up with the same size as the actual cell, so it doesnt
+ cover the complete column if there are any other cells in that column.
+
2002-04-14 Abigail Brady <morwen@evilmagic.org>
* gtk/gtkfilesel.c: Fix typo in message.
diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h
index 0d101cf70..868d5cd4b 100644
--- a/gtk/gtktreeprivate.h
+++ b/gtk/gtktreeprivate.h
@@ -312,7 +312,8 @@ void _gtk_tree_view_column_start_editing (GtkTreeViewColumn *tree_column,
GtkCellEditable *editable_widget);
void _gtk_tree_view_column_stop_editing (GtkTreeViewColumn *tree_column);
void _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view);
-gboolean _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column);
+gboolean _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column);
+GtkCellRenderer *_gtk_tree_view_column_get_editable_cell (GtkTreeViewColumn *column);
GtkTreeSelection* _gtk_tree_selection_new (void);
GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view);
@@ -335,6 +336,10 @@ void _gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
guint flags);
void _gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
gboolean install_handler);
+void _gtk_tree_view_column_get_neighbor_sizes (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ gint *left,
+ gint *right);
#ifdef __cplusplus
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 5d4b87044..6e915d8d5 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -1794,6 +1794,14 @@ gtk_tree_view_button_press (GtkWidget *widget,
tree_view->priv->cursor)
{
GtkTreePath *cursor = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
+ GtkTreeIter iter;
+
+ gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
+ gtk_tree_view_column_cell_set_cell_data (column,
+ tree_view->priv->model,
+ &iter,
+ GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
+ node->children?TRUE:FALSE);
if ((cursor && !gtk_tree_path_compare (cursor, path))
|| !_gtk_tree_view_column_has_editable_cell (column))
@@ -1802,14 +1810,6 @@ gtk_tree_view_button_press (GtkWidget *widget,
/* FIXME: get the right flags */
guint flags = 0;
- GtkTreeIter iter;
-
- gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
- gtk_tree_view_column_cell_set_cell_data (column,
- tree_view->priv->model,
- &iter,
- GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
- node->children?TRUE:FALSE);
path_string = gtk_tree_path_to_string (path);
@@ -1822,11 +1822,20 @@ gtk_tree_view_button_press (GtkWidget *widget,
{
if (cell_editable != NULL)
{
+ gint left, right;
+ GdkRectangle area;
+
+ area = cell_area;
+ _gtk_tree_view_column_get_neighbor_sizes (column, _gtk_tree_view_column_get_editable_cell (column), &left, &right);
+
+ area.x += left;
+ area.width -= right + left;
+
gtk_tree_view_real_start_editing (tree_view,
column,
path,
cell_editable,
- &cell_area,
+ &area,
(GdkEvent *)event,
flags);
gtk_tree_path_free (path);
@@ -1840,6 +1849,7 @@ gtk_tree_view_button_press (GtkWidget *widget,
if (cursor)
gtk_tree_path_free (cursor);
}
+
/* select */
pre_val = tree_view->priv->vadjustment->value;
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index 4317c890f..c2e5b2e0f 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -64,6 +64,7 @@ struct _GtkTreeViewColumnCellInfo
gpointer func_data;
GtkDestroyNotify destroy;
gint requested_width;
+ gint real_width;
guint expand : 1;
guint pack : 1;
guint has_focus : 1;
@@ -1053,6 +1054,19 @@ _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column)
return FALSE;
}
+GtkCellRenderer *
+_gtk_tree_view_column_get_editable_cell (GtkTreeViewColumn *column)
+{
+ GList *list;
+
+ for (list = column->cell_list; list; list = list ->next)
+ if (((GtkTreeViewColumnCellInfo *)list->data)->cell->mode ==
+ GTK_CELL_RENDERER_MODE_EDITABLE)
+ return ((GtkTreeViewColumnCellInfo *)list->data)->cell;
+
+ return NULL;
+}
+
/* Public Functions */
@@ -2349,6 +2363,7 @@ gtk_tree_view_column_cell_process_action (GtkTreeViewColumn *tree_column,
real_cell_area.width = info->requested_width +
(info->expand?extra_space:0);
+ info->real_width = real_cell_area.width;
real_cell_area.x += focus_line_width;
if (action == CELL_ACTION_RENDER)
{
@@ -2447,6 +2462,7 @@ gtk_tree_view_column_cell_process_action (GtkTreeViewColumn *tree_column,
real_cell_area.width = info->requested_width +
(info->expand?extra_space:0);
+ info->real_width = real_cell_area.width;
if (action == CELL_ACTION_RENDER)
{
gtk_cell_renderer_render (info->cell,
@@ -2698,3 +2714,55 @@ _gtk_tree_view_column_stop_editing (GtkTreeViewColumn *tree_column)
tree_column->editable_widget = NULL;
}
+
+void
+_gtk_tree_view_column_get_neighbor_sizes (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ gint *left,
+ gint *right)
+{
+ GList *list;
+
+ if (left)
+ {
+ *left = 0;
+
+ for (list = column->cell_list; list; list = list->next)
+ {
+ GtkTreeViewColumnCellInfo *info =
+ (GtkTreeViewColumnCellInfo *)list->data;
+
+ if (info->cell == cell)
+ break;
+
+ *left += info->real_width;
+ }
+ }
+
+ if (right)
+ {
+ *right = 0;
+
+ for (list = column->cell_list; list; list = list->next)
+ {
+ GtkTreeViewColumnCellInfo *info =
+ (GtkTreeViewColumnCellInfo *)list->data;
+
+ if (info->cell == cell)
+ break;
+ }
+
+ /* skip cell */
+ if (list && list->next)
+ {
+ list = list->next;
+ for ( ; list; list = list->next)
+ {
+ GtkTreeViewColumnCellInfo *info =
+ (GtkTreeViewColumnCellInfo *)list->data;
+
+ *right += info->real_width;
+ }
+ }
+ }
+}