diff --git a/ChangeLog b/ChangeLog index 757c7e6063..52da5cc827 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-07-18 Kristian Rietveld + + Fix for #335012, reported by Matteo Nastasi. + + * gtk/gtktreeview.c (gtk_tree_view_real_start_editing): if the + requested space of the editable is smaller than the cell area, + put it up above the middle of the cell area. + + * gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing): + configure the inner border to cover the cell area if the + entry requisition is smaller than the cell_area. + 2006-07-18 Kristian Rietveld Another fix for #164884. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 757c7e6063..52da5cc827 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,15 @@ +2006-07-18 Kristian Rietveld + + Fix for #335012, reported by Matteo Nastasi. + + * gtk/gtktreeview.c (gtk_tree_view_real_start_editing): if the + requested space of the editable is smaller than the cell area, + put it up above the middle of the cell area. + + * gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing): + configure the inner border to cover the cell area if the + entry requisition is smaller than the cell_area. + 2006-07-18 Kristian Rietveld Another fix for #164884. diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c index 4ad8c08324..02a3f36581 100644 --- a/gtk/gtkcellrenderertext.c +++ b/gtk/gtkcellrenderertext.c @@ -1778,6 +1778,8 @@ gtk_cell_renderer_text_start_editing (GtkCellRenderer *cell, GdkRectangle *cell_area, GtkCellRendererState flags) { + GtkBorder border; + GtkRequisition requisition; GtkCellRendererText *celltext; GtkCellRendererTextPrivate *priv; @@ -1799,6 +1801,14 @@ gtk_cell_renderer_text_start_editing (GtkCellRenderer *cell, gtk_editable_select_region (GTK_EDITABLE (priv->entry), 0, -1); + gtk_widget_size_request (priv->entry, &requisition); + if (requisition.height < cell_area->height) + { + g_object_get (priv->entry, "inner-border", &border, NULL); + border.top = (cell_area->height - requisition.height) / 2; + border.bottom = (cell_area->height - requisition.height) / 2; + gtk_entry_set_inner_border (GTK_ENTRY (priv->entry), &border); + } priv->in_entry_menu = FALSE; if (priv->entry_menu_popdown_timeout) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 733a3cf79c..790bc24ce6 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -14280,6 +14280,7 @@ gtk_tree_view_real_start_editing (GtkTreeView *tree_view, guint flags) { gint pre_val = tree_view->priv->vadjustment->value; + GtkRequisition requisition; tree_view->priv->edited_column = column; _gtk_tree_view_column_start_editing (column, GTK_CELL_EDITABLE (cell_editable)); @@ -14288,12 +14289,29 @@ gtk_tree_view_real_start_editing (GtkTreeView *tree_view, cell_area->y += pre_val - tree_view->priv->vadjustment->value; + gtk_widget_size_request (GTK_WIDGET (cell_editable), &requisition); + GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS); - gtk_tree_view_put (tree_view, - GTK_WIDGET (cell_editable), - cell_area->x, cell_area->y, cell_area->width, cell_area->height); + + if (requisition.height < cell_area->height) + { + gint diff = cell_area->height - requisition.height; + gtk_tree_view_put (tree_view, + GTK_WIDGET (cell_editable), + cell_area->x, cell_area->y + diff/2, + cell_area->width, requisition.height); + } + else + { + 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 (GTK_CELL_EDITABLE (cell_editable), (GdkEvent *)event); + gtk_widget_grab_focus (GTK_WIDGET (cell_editable)); g_signal_connect (cell_editable, "remove_widget", G_CALLBACK (gtk_tree_view_remove_widget), tree_view);