[gnome-builder] editor: resolve symlink before performing lookup



commit 27124478dc529f2e123640a39067f6a7e83a294d
Author: Christian Hergert <chergert redhat com>
Date:   Tue Mar 26 18:59:58 2019 -0700

    editor: resolve symlink before performing lookup
    
    This resolves the symlink before we continue to lookup any
    existing window. This is useful when we have an installation
    that contains symlinks somewhere in the home directory or
    path to the project.

 src/libide/editor/ide-editor-surface.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/src/libide/editor/ide-editor-surface.c b/src/libide/editor/ide-editor-surface.c
index 278fd8b3f..2d1507ae9 100644
--- a/src/libide/editor/ide-editor-surface.c
+++ b/src/libide/editor/ide-editor-surface.c
@@ -23,8 +23,12 @@
 #include "config.h"
 
 #include <glib/gi18n.h>
+#include <libide-io.h>
 #include <libide-code.h>
 
+#include "ide-buffer-private.h"
+#include "ide-gfile-private.h"
+
 #include "ide-editor-addin.h"
 #include "ide-editor-surface.h"
 #include "ide-editor-private.h"
@@ -608,7 +612,6 @@ ide_editor_surface_find_source_location (GtkWidget *widget,
     IdeEditorPage *page;
   } *lookup = user_data;
   IdeBuffer *buffer;
-  GFile *file;
 
   g_return_if_fail (IDE_IS_PAGE (widget));
 
@@ -619,9 +622,8 @@ ide_editor_surface_find_source_location (GtkWidget *widget,
     return;
 
   buffer = ide_editor_page_get_buffer (IDE_EDITOR_PAGE (widget));
-  file = ide_buffer_get_file (buffer);
 
-  if (g_file_equal (file, lookup->file))
+  if (_ide_buffer_is_file (buffer, lookup->file))
     lookup->page = IDE_EDITOR_PAGE (widget);
 }
 
@@ -662,10 +664,11 @@ cleanup:
 }
 
 static void
-ide_editor_surface_focus_location_full (IdeEditorSurface  *self,
-                                        IdeLocation *location,
-                                        gboolean           open_if_not_found)
+ide_editor_surface_focus_location_full (IdeEditorSurface *self,
+                                        IdeLocation      *location,
+                                        gboolean          open_if_not_found)
 {
+  g_autoptr(GFile) translated = NULL;
   struct {
     GFile *file;
     IdeEditorPage *page;
@@ -679,7 +682,10 @@ ide_editor_surface_focus_location_full (IdeEditorSurface  *self,
   g_assert (IDE_IS_EDITOR_SURFACE (self));
   g_assert (location != NULL);
 
-  lookup.file = ide_location_get_file (location);
+  /* Remove symlinks to increase chance we find a match */
+  translated = _ide_g_file_readlink (ide_location_get_file (location));
+
+  lookup.file = translated;
   lookup.page = NULL;
 
   if (lookup.file == NULL)


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