[glade] Add _glade_util_file_get_relative_path() to the private zoo.



commit 188bc4f84fdb2f603435a2fc1f1765bd18509a03
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Sat Feb 24 11:34:57 2018 -0300

    Add _glade_util_file_get_relative_path() to the private zoo.

 gladeui/glade-private.h |    3 +++
 gladeui/glade-utils.c   |   41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)
---
diff --git a/gladeui/glade-private.h b/gladeui/glade-private.h
index 9f82580..d567a8c 100644
--- a/gladeui/glade-private.h
+++ b/gladeui/glade-private.h
@@ -68,6 +68,9 @@ gchar *_glade_util_strreplace (gchar *str,
                                const gchar *key,
                                const gchar *replacement);
 
+gchar *_glade_util_file_get_relative_path (GFile *target,
+                                           GFile *source);
+
 /* glade-xml-utils.c */
 
 /* GladeXml Error handling */
diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
index 73b5d25..fa8662a 100644
--- a/gladeui/glade-utils.c
+++ b/gladeui/glade-utils.c
@@ -2104,3 +2104,44 @@ glade_util_remove_scroll_events (GtkWidget *widget)
   g_signal_connect (G_OBJECT (widget), "scroll-event",
                    G_CALLBACK (abort_scroll_events), NULL);
 }
+
+/**
+ * _glade_util_file_get_relative_path:
+ * @target: input GFile
+ * @source: input GFile
+ *
+ * Gets the path for @source relative to @target even if @source is not a
+ * descendant of @target.
+ *
+ */
+gchar *
+_glade_util_file_get_relative_path (GFile *target, GFile *source)
+{
+  gchar *relative_path;
+
+  if ((relative_path = g_file_get_relative_path (target, source)) == NULL)
+    {
+      GString *relpath = g_string_new ("");
+
+      g_object_ref (target);
+
+      while (relative_path == NULL)
+        {
+          GFile *old_target = target;
+          target = g_file_get_parent (target);
+
+          relative_path = g_file_get_relative_path (target, source);
+
+          g_string_append (relpath, "..");
+          g_string_append_c (relpath, G_DIR_SEPARATOR);
+
+          g_object_unref (old_target);
+        }
+
+      g_string_append (relpath, relative_path);
+      g_free (relative_path);
+      relative_path = g_string_free (relpath, FALSE);
+    }
+
+  return relative_path;
+}


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