[gnome-builder/wip/gtk4-port] libide/editor: use panel position instead of frame



commit 198e5609ebd1de01f1422e095f9e29eb1b89cf0a
Author: Christian Hergert <chergert redhat com>
Date:   Thu Apr 7 14:34:41 2022 -0700

    libide/editor: use panel position instead of frame
    
    Currently this will result in the same effect, but longer term we want to
    use it to fix opening on the wrong frame. Additionally, we currently fail
    to raise the page properly too.

 src/libide/editor/ide-editor.c | 50 ++++++++++++++++++++++--------------------
 1 file changed, 26 insertions(+), 24 deletions(-)
---
diff --git a/src/libide/editor/ide-editor.c b/src/libide/editor/ide-editor.c
index 97151de55..2112f8853 100644
--- a/src/libide/editor/ide-editor.c
+++ b/src/libide/editor/ide-editor.c
@@ -29,11 +29,11 @@
 
 typedef struct _Focus
 {
-  IdeWorkspace *workspace;
-  IdeFrame     *frame;
-  IdeLocation  *location;
-  IdeBuffer    *buffer;
-  GFile        *file;
+  IdeWorkspace     *workspace;
+  IdePanelPosition *position;
+  IdeLocation      *location;
+  IdeBuffer        *buffer;
+  GFile            *file;
 } Focus;
 
 static Focus *
@@ -69,14 +69,14 @@ focus_new (IdeWorkspace *workspace,
   if (buffer == NULL)
     buffer = ide_buffer_manager_find_buffer (bufmgr, file);
 
-  if (frame == NULL)
-    frame = ide_workspace_get_most_recent_frame (workspace);
+  focus = g_atomic_rc_box_alloc0 (sizeof *focus);
 
-  g_assert (IDE_IS_FRAME (frame));
+  if (frame != NULL)
+    focus->position = ide_frame_get_position (frame);
+  else
+    focus->position = ide_panel_position_new ();
 
-  focus = g_atomic_rc_box_alloc0 (sizeof *focus);
   g_set_object (&focus->workspace, workspace);
-  g_set_object (&focus->frame, frame);
   g_set_object (&focus->buffer, buffer);
   g_set_object (&focus->location, location);
   g_set_object (&focus->file, file);
@@ -92,7 +92,6 @@ focus_finalize (gpointer data)
   g_clear_object (&focus->workspace);
   g_clear_object (&focus->location);
   g_clear_object (&focus->buffer);
-  g_clear_object (&focus->frame);
   g_clear_object (&focus->file);
 }
 
@@ -112,7 +111,7 @@ focus_complete (Focus        *focus,
   g_assert (!focus->buffer || IDE_IS_BUFFER (focus->buffer));
   g_assert (focus->buffer || error != NULL);
   g_assert (IDE_IS_WORKSPACE (focus->workspace));
-  g_assert (IDE_IS_FRAME (focus->frame));
+  g_assert (focus->position != NULL);
 
   if (error != NULL)
     {
@@ -124,21 +123,26 @@ focus_complete (Focus        *focus,
     }
   else
     {
-      guint n_pages = panel_frame_get_n_pages (PANEL_FRAME (focus->frame));
+      PanelFrame *frame = ide_workspace_get_frame_at_position (focus->workspace, focus->position);
       IdeEditorPage *page = NULL;
 
-      for (guint i = 0; i < n_pages; i++)
+      if (frame != NULL)
         {
-          PanelWidget *child = panel_frame_get_page (PANEL_FRAME (focus->frame), i);
+          guint n_pages = panel_frame_get_n_pages (PANEL_FRAME (frame));
 
-          if (IDE_IS_EDITOR_PAGE (child))
+          for (guint i = 0; i < n_pages; i++)
             {
-              IdeBuffer *buffer = ide_editor_page_get_buffer (IDE_EDITOR_PAGE (child));
+              PanelWidget *child = panel_frame_get_page (PANEL_FRAME (frame), i);
 
-              if (buffer == focus->buffer)
+              if (IDE_IS_EDITOR_PAGE (child))
                 {
-                  page = IDE_EDITOR_PAGE (child);
-                  break;
+                  IdeBuffer *buffer = ide_editor_page_get_buffer (IDE_EDITOR_PAGE (child));
+
+                  if (buffer == focus->buffer)
+                    {
+                      page = IDE_EDITOR_PAGE (child);
+                      break;
+                    }
                 }
             }
         }
@@ -148,11 +152,9 @@ focus_complete (Focus        *focus,
       if (page == NULL)
         {
           page = IDE_EDITOR_PAGE (ide_editor_page_new (focus->buffer));
-          panel_frame_add (PANEL_FRAME (focus->frame), PANEL_WIDGET (page));
+          ide_workspace_add_page (focus->workspace, IDE_PAGE (page), focus->position);
         }
 
-      panel_frame_set_visible_child (PANEL_FRAME (focus->frame), PANEL_WIDGET (page));
-
       if (focus->location != NULL)
         {
           IdeSourceView *view = ide_editor_page_get_view (page);
@@ -183,7 +185,7 @@ ide_editor_load_file_cb (GObject      *object,
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (focus != NULL);
   g_assert (IDE_IS_WORKSPACE (focus->workspace));
-  g_assert (IDE_IS_FRAME (focus->frame));
+  g_assert (focus->position != NULL);
   g_assert (G_IS_FILE (focus->file));
 
   if ((buffer = ide_buffer_manager_load_file_finish (bufmgr, result, &error)))


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]