[gnome-builder] libide/gui: re-raise pane after moving



commit 184646bea9b63e120bac01c797d5e7425fc0e8f8
Author: Christian Hergert <chergert redhat com>
Date:   Fri Sep 16 21:27:17 2022 -0700

    libide/gui: re-raise pane after moving
    
    This is just a start, and it needs some work to truly maintain the
    proper ordering.

 src/libide/gui/ide-workspace-session.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)
---
diff --git a/src/libide/gui/ide-workspace-session.c b/src/libide/gui/ide-workspace-session.c
index a6a861e8f..f97948839 100644
--- a/src/libide/gui/ide-workspace-session.c
+++ b/src/libide/gui/ide-workspace-session.c
@@ -170,6 +170,9 @@ ide_workspace_save_session_frame_cb (PanelFrame *frame,
           ide_session_item_set_module_name (page_item, "libide-gui");
           ide_session_item_set_position (page_item, page_position);
 
+          if (panel_frame_get_visible_child (frame) == widget)
+            ide_session_item_set_metadata (page_item, "is-front", "b", TRUE);
+
           ide_session_append (session, page_item);
         }
     }
@@ -474,6 +477,7 @@ ide_workspace_restore_pane (IdeWorkspace     *self,
   PanelWidget *widget;
   const char *id;
   GtkWidget *frame;
+  gboolean is_front;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (IDE_IS_WORKSPACE (self));
@@ -485,17 +489,23 @@ ide_workspace_restore_pane (IdeWorkspace     *self,
       !(widget = _ide_workspace_find_widget (self, dock, id)))
     return;
 
+  g_object_ref (widget);
+
   if ((current_position = panel_widget_get_position (widget)) &&
       panel_position_equal (current_position, position))
-    return;
+    goto check_front;
 
   if ((frame = gtk_widget_get_ancestor (GTK_WIDGET (widget), PANEL_TYPE_FRAME)))
     {
-      g_object_ref (widget);
       panel_frame_remove (PANEL_FRAME (frame), widget);
       ide_workspace_add_pane (self, IDE_PANE (widget), position);
-      g_object_unref (widget);
     }
+
+check_front:
+  if (ide_session_item_get_metadata (item, "is-front", "b", &is_front) && is_front)
+    panel_widget_raise (widget);
+
+  g_object_unref (widget);
 }
 
 void


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