[glade] Add _glade_util_file_get_relative_path() to the private zoo.
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] Add _glade_util_file_get_relative_path() to the private zoo.
- Date: Sat, 24 Feb 2018 15:12:42 +0000 (UTC)
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]