[gnome-builder/wip/gtk4-port] libide/search: allow search popover to place itself
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port] libide/search: allow search popover to place itself
- Date: Thu, 14 Apr 2022 00:06:27 +0000 (UTC)
commit 5b65084110ef9e0f924e74495dc45ab44f40a419
Author: Christian Hergert <chergert redhat com>
Date: Wed Apr 13 17:06:20 2022 -0700
libide/search: allow search popover to place itself
That way it can adjust for things like navigation sidebar and stay center
on the parent window.
src/libide/gui/ide-workspace.c | 7 +------
src/libide/search/ide-search-popover.c | 23 +++++++++++++++++++++++
src/libide/search/ide-search-popover.h | 6 +++++-
src/libide/search/ide-search-popover.ui | 4 ++--
4 files changed, 31 insertions(+), 9 deletions(-)
---
diff --git a/src/libide/gui/ide-workspace.c b/src/libide/gui/ide-workspace.c
index 7470c271f..b29d3a85a 100644
--- a/src/libide/gui/ide-workspace.c
+++ b/src/libide/gui/ide-workspace.c
@@ -376,12 +376,7 @@ ide_workspace_size_allocate (GtkWidget *widget,
GTK_WIDGET_CLASS (ide_workspace_parent_class)->size_allocate (widget, width, height, baseline);
if (priv->search_popover != NULL)
- {
- GdkRectangle point = { width / 2, 100, 1, 1 };
-
- gtk_popover_set_pointing_to (GTK_POPOVER (priv->search_popover), &point);
- gtk_popover_present (GTK_POPOVER (priv->search_popover));
- }
+ ide_search_popover_present (priv->search_popover, width, height);
if (priv->queued_window_save == 0 &&
IDE_WORKSPACE_GET_CLASS (self)->save_size != NULL)
diff --git a/src/libide/search/ide-search-popover.c b/src/libide/search/ide-search-popover.c
index dd5ee459e..f333d115c 100644
--- a/src/libide/search/ide-search-popover.c
+++ b/src/libide/search/ide-search-popover.c
@@ -31,6 +31,7 @@ struct _IdeSearchPopover
IdeSearchEngine *search_engine;
+ GtkBox *nav_box;
GtkSearchEntry *entry;
};
@@ -153,6 +154,7 @@ ide_search_popover_class_init (IdeSearchPopoverClass *klass)
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/libide-search/ide-search-popover.ui");
gtk_widget_class_bind_template_child (widget_class, IdeSearchPopover, entry);
+ gtk_widget_class_bind_template_child (widget_class, IdeSearchPopover, nav_box);
}
static void
@@ -170,3 +172,24 @@ ide_search_popover_new (IdeSearchEngine *search_engine)
"search-engine", search_engine,
NULL);
}
+
+void
+ide_search_popover_present (IdeSearchPopover *self,
+ int parent_width,
+ int parent_height)
+{
+ GdkRectangle point;
+ int min_width;
+ int nat_width;
+
+ g_return_if_fail (IDE_IS_SEARCH_POPOVER (self));
+
+ gtk_widget_measure (GTK_WIDGET (self->nav_box),
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &min_width, &nat_width, NULL, NULL);
+
+ point = (GdkRectangle) { (parent_width - min_width) / 2, 100, 1, 1 };
+ gtk_popover_set_pointing_to (GTK_POPOVER (self), &point);
+ gtk_popover_present (GTK_POPOVER (self));
+}
diff --git a/src/libide/search/ide-search-popover.h b/src/libide/search/ide-search-popover.h
index 6b3f78878..8e36ba325 100644
--- a/src/libide/search/ide-search-popover.h
+++ b/src/libide/search/ide-search-popover.h
@@ -38,6 +38,10 @@ IDE_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (IdeSearchPopover, ide_search_popover, IDE, SEARCH_POPOVER, GtkPopover)
IDE_AVAILABLE_IN_ALL
-GtkWidget *ide_search_popover_new (IdeSearchEngine *search_engine);
+GtkWidget *ide_search_popover_new (IdeSearchEngine *search_engine);
+IDE_AVAILABLE_IN_ALL
+void ide_search_popover_present (IdeSearchPopover *self,
+ int parent_width,
+ int parent_height);
G_END_DECLS
diff --git a/src/libide/search/ide-search-popover.ui b/src/libide/search/ide-search-popover.ui
index 687e59f66..f7839f7f1 100644
--- a/src/libide/search/ide-search-popover.ui
+++ b/src/libide/search/ide-search-popover.ui
@@ -12,7 +12,7 @@
<object class="GtkBox">
<property name="orientation">horizontal</property>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="nav_box">
<property name="orientation">vertical</property>
<child>
<object class="AdwHeaderBar">
@@ -70,7 +70,7 @@
</object>
</child>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="main_box">
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]