[gtksourceview] completion: use new GtkTreeColumn for placeholder text and align to it.
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] completion: use new GtkTreeColumn for placeholder text and align to it.
- Date: Wed, 28 Aug 2013 22:13:58 +0000 (UTC)
commit 5555e6cdfcdf792881e32ce67ec96144cc4230ec
Author: Christian Hergert <christian hergert me>
Date: Wed Aug 28 15:12:40 2013 -0700
completion: use new GtkTreeColumn for placeholder text and align to it.
The little bit of magic is the horizontal_separator and focus_padding
values which were determined by reading the layout code of gtktreeview.
If the column was the "expander-column", it would be a bit more complex
but we don't have those thankfully.
https://bugzilla.gnome.org/show_bug.cgi?id=706465
gtksourceview/gtksourcecompletion.c | 58 ++++++++++++++++++++++++++++++-
gtksourceview/gtksourcecompletion.ui | 7 +++-
gtksourceview/gtksourcecompletioninfo.c | 13 +++++++
gtksourceview/gtksourcecompletioninfo.h | 4 ++
4 files changed, 79 insertions(+), 3 deletions(-)
---
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index b06ba3f..75ced9b 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -60,6 +60,9 @@
* displayed in a #GtkSourceCompletionInfo window, which appears when
* the "Details" button is clicked.
*
+ * The #GtkSourceCompletionInfo window for proposals will try to align the
+ * proposal text with the #GtkSourceView<!-- -->'s cursor.
+ *
* A #GtkSourceCompletionInfo window can also be used to display
* calltips. When no proposals are available, it can be useful to
* display extra information like a function's prototype (number of
@@ -572,6 +575,52 @@ gtk_source_completion_hide_default (GtkSourceCompletion *completion)
}
static void
+gtk_source_completion_proposals_size_allocate (GtkSourceCompletion *completion,
+ GtkAllocation *allocation,
+ GtkWidget *widget)
+{
+ GtkTreeViewColumn *column;
+ gint cell_offset = 0;
+ gint column_offset;
+ gint focus_padding;
+ gint horizontal_separator;
+ gint x_offset = 0;
+
+ if (!gtk_widget_get_realized (GTK_WIDGET (completion->priv->tree_view_proposals)))
+ {
+ return;
+ }
+
+ gtk_widget_style_get (GTK_WIDGET (completion->priv->tree_view_proposals),
+ "focus-padding", &focus_padding,
+ "horizontal-separator", &horizontal_separator,
+ NULL);
+
+ column = gtk_tree_view_get_column (completion->priv->tree_view_proposals, 1);
+ column_offset = gtk_tree_view_column_get_x_offset (column);
+ gtk_tree_view_column_cell_get_position (column,
+ completion->priv->cell_renderer_proposal,
+ &cell_offset,
+ NULL);
+
+ x_offset = column_offset + cell_offset + horizontal_separator + focus_padding;
+
+ gtk_tree_view_convert_bin_window_to_widget_coords (completion->priv->tree_view_proposals,
+ x_offset,
+ 0,
+ &x_offset,
+ NULL);
+ gtk_widget_translate_coordinates (GTK_WIDGET (completion->priv->tree_view_proposals),
+ GTK_WIDGET (completion->priv->main_window),
+ x_offset,
+ 0,
+ &x_offset,
+ NULL);
+
+ _gtk_source_completion_info_set_xoffset (completion->priv->main_window, -x_offset);
+}
+
+static void
gtk_source_completion_activate_proposal (GtkSourceCompletion *completion)
{
GtkSourceCompletionProvider *provider = NULL;
@@ -2178,6 +2227,11 @@ init_tree_view (GtkSourceCompletion *completion,
G_CALLBACK (gtk_source_completion_activate_proposal),
completion);
+ g_signal_connect_swapped (completion->priv->tree_view_proposals,
+ "size-allocate",
+ G_CALLBACK (gtk_source_completion_proposals_size_allocate),
+ completion);
+
/* Selection */
selection = gtk_tree_view_get_selection (completion->priv->tree_view_proposals);
@@ -2196,7 +2250,7 @@ init_tree_view (GtkSourceCompletion *completion,
cell_renderer = GTK_CELL_RENDERER (gtk_builder_get_object (builder, "cell_renderer_icon"));
- column = GTK_TREE_VIEW_COLUMN (gtk_builder_get_object (builder, "tree_view_column_proposal"));
+ column = GTK_TREE_VIEW_COLUMN (gtk_builder_get_object (builder, "tree_view_column_icon"));
gtk_tree_view_column_set_attributes (column, cell_renderer,
"pixbuf", GTK_SOURCE_COMPLETION_MODEL_COLUMN_ICON,
@@ -2221,6 +2275,8 @@ init_tree_view (GtkSourceCompletion *completion,
cell_renderer = GTK_CELL_RENDERER (gtk_builder_get_object (builder, "cell_renderer_proposal"));
completion->priv->cell_renderer_proposal = cell_renderer;
+ column = GTK_TREE_VIEW_COLUMN (gtk_builder_get_object (builder, "tree_view_column_proposal"));
+
gtk_tree_view_column_set_attributes (column, cell_renderer,
"markup", GTK_SOURCE_COMPLETION_MODEL_COLUMN_MARKUP,
"cell-background-set",
GTK_SOURCE_COMPLETION_MODEL_COLUMN_IS_HEADER,
diff --git a/gtksourceview/gtksourcecompletion.ui b/gtksourceview/gtksourcecompletion.ui
index 5a8f70e..45f7688 100644
--- a/gtksourceview/gtksourcecompletion.ui
+++ b/gtksourceview/gtksourcecompletion.ui
@@ -55,11 +55,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<property name="show_expanders">False</property>
<property name="expand">True</property>
<child>
- <object class="GtkTreeViewColumn" id="tree_view_column_proposal">
- <property name="expand">True</property>
+ <object class="GtkTreeViewColumn" id="tree_view_column_icon">
<child>
<object class="GtkCellRendererPixbuf" id="cell_renderer_icon"/>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="tree_view_column_proposal">
<child>
<object class="GtkCellRendererText" id="cell_renderer_proposal"/>
</child>
diff --git a/gtksourceview/gtksourcecompletioninfo.c b/gtksourceview/gtksourcecompletioninfo.c
index 49e1747..3e95624 100644
--- a/gtksourceview/gtksourcecompletioninfo.c
+++ b/gtksourceview/gtksourcecompletioninfo.c
@@ -65,6 +65,8 @@ struct _GtkSourceCompletionInfoPrivate
GtkWidget *attached_to;
gulong focus_out_event_handler;
+
+ gint xoffset;
};
/* Signals */
@@ -327,6 +329,15 @@ gtk_source_completion_info_class_init (GtkSourceCompletionInfoClass *klass)
0);
}
+void
+_gtk_source_completion_info_set_xoffset (GtkSourceCompletionInfo *window,
+ gint xoffset)
+{
+ g_return_if_fail (GTK_SOURCE_IS_COMPLETION_INFO (window));
+
+ window->priv->xoffset = xoffset;
+}
+
/* Move to iter */
static void
@@ -478,6 +489,8 @@ move_to_iter (GtkSourceCompletionInfo *window,
overlapup = TRUE;
}
+ x += window->priv->xoffset;
+
/* Make sure that text is still readable */
move_overlap (&y, h, oy, cy, height, overlapup);
diff --git a/gtksourceview/gtksourcecompletioninfo.h b/gtksourceview/gtksourcecompletioninfo.h
index ee0963b..6604685 100644
--- a/gtksourceview/gtksourcecompletioninfo.h
+++ b/gtksourceview/gtksourcecompletioninfo.h
@@ -62,6 +62,10 @@ void gtk_source_completion_info_move_to_iter (GtkSourceCompletionInfo
*info,
GtkTextView *view,
GtkTextIter *iter);
+G_GNUC_INTERNAL
+void _gtk_source_completion_info_set_xoffset (GtkSourceCompletionInfo *info,
+ gint xoffset);
+
G_DEPRECATED_FOR (gtk_container_add)
void gtk_source_completion_info_set_widget (GtkSourceCompletionInfo *info,
GtkWidget *widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]