[gnome-builder/wip/gtk4-port] libide/search: allow search popover to place itself



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]