summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2020-09-10 16:36:33 -0700
committerChristian Hergert <chergert@redhat.com>2020-09-21 15:32:49 -0700
commitdbd70556a3a59ac28869bd4045bd6a1ba6c4113e (patch)
tree03f7bbceb8bccd1b5a6692b866c7454e2b0ea3ae
parenta140e01f530b3b65af62d2e2cb3d401f634ac5f1 (diff)
downloadgtksourceview-dbd70556a3a59ac28869bd4045bd6a1ba6c4113e.tar.gz
assistant: move resize/reposition to base class
-rw-r--r--gtksourceview/gtksourceassistant-private.h1
-rw-r--r--gtksourceview/gtksourceassistant.c32
-rw-r--r--gtksourceview/gtksourcecompletion.c1
-rw-r--r--gtksourceview/gtksourcecompletionlist.c55
-rw-r--r--gtksourceview/gtksourcecompletionlist.ui4
5 files changed, 47 insertions, 46 deletions
diff --git a/gtksourceview/gtksourceassistant-private.h b/gtksourceview/gtksourceassistant-private.h
index 7bc6d55f..d8d2084b 100644
--- a/gtksourceview/gtksourceassistant-private.h
+++ b/gtksourceview/gtksourceassistant-private.h
@@ -54,6 +54,7 @@ void _gtk_source_assistant_set_mark (GtkSourceAssistant *assist
GtkTextMark *mark);
void _gtk_source_assistant_set_child (GtkSourceAssistant *assistant,
GtkWidget *child);
+void _gtk_source_assistant_reposition (GtkSourceAssistant *assistant);
void _gtk_source_assistant_destroy (GtkSourceAssistant *assistant);
G_END_DECLS
diff --git a/gtksourceview/gtksourceassistant.c b/gtksourceview/gtksourceassistant.c
index b9cd434a..3c7e383d 100644
--- a/gtksourceview/gtksourceassistant.c
+++ b/gtksourceview/gtksourceassistant.c
@@ -126,6 +126,8 @@ _gtk_source_assistant_update_position (GtkSourceAssistant *assistant)
gtk_popover_set_pointing_to (GTK_POPOVER (assistant), &rect);
}
+ gtk_native_check_resize (GTK_NATIVE (assistant));
+
if (priv->child != NULL)
{
children = _gtk_source_assistant_child_get_attached (priv->child);
@@ -146,13 +148,41 @@ _gtk_source_assistant_update_position (GtkSourceAssistant *assistant)
}
static void
+_gtk_source_assistant_update_size (GtkSourceAssistant *self)
+{
+ int min_width;
+ int nat_width;
+
+ g_assert (GTK_SOURCE_IS_ASSISTANT (self));
+
+ /* Hack to force the sizing request, otherwise the popover does
+ * not shrink as results are reduced.
+ */
+ gtk_widget_set_size_request (GTK_WIDGET (self), -1, -1);
+ gtk_widget_measure (GTK_WIDGET (self),
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &min_width, &nat_width, NULL, NULL);
+ gtk_widget_set_size_request (GTK_WIDGET (self), min_width, -1);
+}
+
+void
+_gtk_source_assistant_reposition (GtkSourceAssistant *self)
+{
+ g_return_if_fail (GTK_SOURCE_IS_ASSISTANT (self));
+
+ _gtk_source_assistant_update_size (self);
+ _gtk_source_assistant_update_position (self);
+}
+
+static void
_gtk_source_assistant_show (GtkWidget *widget)
{
GtkSourceAssistant *assistant = (GtkSourceAssistant *)widget;
g_assert (GTK_SOURCE_IS_ASSISTANT (assistant));
- _gtk_source_assistant_update_position (assistant);
+ _gtk_source_assistant_reposition (assistant);
GTK_WIDGET_CLASS (_gtk_source_assistant_parent_class)->show (widget);
}
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index 8b5eaf7e..1e1f47dd 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -158,7 +158,6 @@ display_show (GtkSourceCompletionList *display)
{
g_assert (GTK_SOURCE_IS_COMPLETION_LIST (display));
- _gtk_source_completion_list_reposition (display);
gtk_widget_show (GTK_WIDGET (display));
gtk_widget_grab_focus (GTK_WIDGET (display));
}
diff --git a/gtksourceview/gtksourcecompletionlist.c b/gtksourceview/gtksourcecompletionlist.c
index 8532951e..06962768 100644
--- a/gtksourceview/gtksourcecompletionlist.c
+++ b/gtksourceview/gtksourcecompletionlist.c
@@ -84,8 +84,6 @@ _gtk_source_completion_list_show (GtkWidget *widget)
g_assert (GTK_SOURCE_IS_COMPLETION_LIST (self));
- _gtk_source_completion_list_reposition (self);
-
GTK_WIDGET_CLASS (_gtk_source_completion_list_parent_class)->show (widget);
if (_gtk_source_completion_list_get_show_details (self))
@@ -219,9 +217,17 @@ _gtk_source_completion_list_notify_alternates_cb (GtkSourceCompletionList *se
}
static void
-_gtk_source_completion_list_notify_proposal (GtkSourceCompletionList *self,
- GParamSpec *pspec,
- GtkSourceCompletionListBox *listbox)
+_gtk_source_completion_list_reposition_cb (GtkSourceCompletionList *self)
+{
+ g_assert (GTK_SOURCE_IS_COMPLETION_LIST (self));
+
+ _gtk_source_assistant_reposition (GTK_SOURCE_ASSISTANT (self));
+}
+
+static void
+_gtk_source_completion_list_notify_proposal_cb (GtkSourceCompletionList *self,
+ GParamSpec *pspec,
+ GtkSourceCompletionListBox *listbox)
{
g_assert (GTK_SOURCE_IS_COMPLETION_LIST (self));
g_assert (GTK_SOURCE_IS_COMPLETION_LIST_BOX (listbox));
@@ -422,8 +428,8 @@ _gtk_source_completion_list_class_init (GtkSourceCompletionListClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkSourceCompletionList, listbox);
gtk_widget_class_bind_template_child (widget_class, GtkSourceCompletionList, scroller);
gtk_widget_class_bind_template_child (widget_class, GtkSourceCompletionList, show_details);
- gtk_widget_class_bind_template_callback (widget_class, _gtk_source_completion_list_reposition);
- gtk_widget_class_bind_template_callback (widget_class, _gtk_source_completion_list_notify_proposal);
+ gtk_widget_class_bind_template_callback (widget_class, _gtk_source_completion_list_notify_proposal_cb);
+ gtk_widget_class_bind_template_callback (widget_class, _gtk_source_completion_list_reposition_cb);
g_type_ensure (GTK_SOURCE_TYPE_COMPLETION_LIST_BOX);
}
@@ -546,41 +552,6 @@ _gtk_source_completion_list_set_font_desc (GtkSourceCompletionList *self,
}
void
-_gtk_source_completion_list_reposition (GtkSourceCompletionList *self)
-{
- int old_x_offset, old_y_offset;
- int x_offset = 0, y_offset = 0;
- int min_width, nat_width;
-
- g_return_if_fail (GTK_SOURCE_IS_COMPLETION_LIST (self));
-
- /* Hack to force the sizing request, otherwise the popover does
- * not shrink as results are reduced.
- */
- gtk_widget_set_size_request (GTK_WIDGET (self), -1, -1);
- gtk_widget_measure (GTK_WIDGET (self),
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- &min_width, &nat_width, NULL, NULL);
- gtk_widget_set_size_request (GTK_WIDGET (self), min_width, -1);
-
- /* Reposition the popup if we have a new offset */
- _gtk_source_completion_list_get_offset (GTK_SOURCE_ASSISTANT (self), &x_offset, &y_offset);
- gtk_popover_get_offset (GTK_POPOVER (self), &old_x_offset, &old_y_offset);
- if (old_x_offset != x_offset || old_y_offset != y_offset)
- {
- gtk_popover_set_offset (GTK_POPOVER (self), x_offset, y_offset);
- }
-
- gtk_native_check_resize (GTK_NATIVE (self));
-
- if (gtk_widget_get_visible (GTK_WIDGET (self->info)))
- {
- gtk_native_check_resize (GTK_NATIVE (self->info));
- }
-}
-
-void
_gtk_source_completion_list_set_show_icons (GtkSourceCompletionList *self,
gboolean show_icons)
{
diff --git a/gtksourceview/gtksourcecompletionlist.ui b/gtksourceview/gtksourcecompletionlist.ui
index 588e3841..6209a694 100644
--- a/gtksourceview/gtksourcecompletionlist.ui
+++ b/gtksourceview/gtksourcecompletionlist.ui
@@ -16,8 +16,8 @@
<child>
<object class="GtkSourceCompletionListBox" id="listbox">
<property name="can-focus">false</property>
- <signal name="notify::proposal" handler="_gtk_source_completion_list_notify_proposal" swapped="true"/>
- <signal name="reposition" handler="_gtk_source_completion_list_reposition" swapped="true"/>
+ <signal name="notify::proposal" handler="_gtk_source_completion_list_notify_proposal_cb" swapped="true"/>
+ <signal name="reposition" handler="_gtk_source_completion_list_reposition_cb" swapped="true"/>
</object>
</child>
</object>