Просмотр исходного кода

tools: add 'Copy Path' menu item

Daniele Bartolini 2 лет назад
Родитель
Сommit
aa91e59cc1
2 измененных файлов с 27 добавлено и 8 удалено
  1. 1 0
      docs/changelog.rst
  2. 26 8
      tools/level_editor/project_browser.vala

+ 1 - 0
docs/changelog.rst

@@ -7,6 +7,7 @@ Changelog
 **Tools**
 
 * Added an option to use the debug keystore when deploying APKs for Android.
+* Added the ability to copy the path of files in the Project Browser.
 
 0.49.0 --- 27 Nov 2023
 ----------------------

+ 26 - 8
tools/level_editor/project_browser.vala

@@ -227,8 +227,9 @@ public class ProjectBrowser : Gtk.Box
 				_tree_view.model.get_value(iter, ProjectStore.Column.TYPE, out type);
 				_tree_view.model.get_value(iter, ProjectStore.Column.NAME, out name);
 
+				Gtk.Menu menu = new Gtk.Menu();
+
 				if (type == "<folder>") {
-					Gtk.Menu menu = new Gtk.Menu();
 					Gtk.MenuItem mi;
 
 					mi = new Gtk.MenuItem.with_label("Import...");
@@ -401,11 +402,7 @@ public class ProjectBrowser : Gtk.Box
 							});
 						menu.add(mi);
 					}
-
-					menu.show_all();
-					menu.popup_at_pointer(ev);
 				} else { // If file
-					Gtk.Menu menu = new Gtk.Menu();
 					Gtk.MenuItem mi;
 
 					mi = new Gtk.MenuItem.with_label("Delete File");
@@ -425,10 +422,31 @@ public class ProjectBrowser : Gtk.Box
 							}
 						});
 					menu.add(mi);
-
-					menu.show_all();
-					menu.popup_at_pointer(ev);
 				}
+
+				// Add shared menu items.
+				Gtk.MenuItem mi;
+
+				mi = new Gtk.SeparatorMenuItem();
+				menu.add(mi);
+
+				mi = new Gtk.MenuItem.with_label("Copy Path");
+				mi.activate.connect(() => {
+						string abs_path;
+
+						if ((string)type == "<folder>")
+							abs_path = _project_store._project.absolute_path((string)name);
+						else
+							abs_path = _project_store._project.absolute_path(ResourceId.path((string)type, (string)name));
+
+						var clip = Gtk.Clipboard.get_default(Gdk.Display.get_default());
+						clip.set_text(abs_path, abs_path.length);
+						clip.store();
+					});
+				menu.add(mi);
+
+				menu.show_all();
+				menu.popup_at_pointer(ev);
 			}
 		} else if (ev.button == Gdk.BUTTON_PRIMARY) {
 			if (ev.type == Gdk.EventType.@2BUTTON_PRESS) {