From dd9d9572e89a8ee4ed0f533e0ef9a767dd90a9d6 Mon Sep 17 00:00:00 2001
From: itdominator <1itdominator@gmail.com>
Date: Sun, 12 Dec 2021 00:03:51 -0600
Subject: [PATCH] Added path bar search dropdown.
---
README.md | 1 -
.../new/solarfm/shellfm/windows/view/View.py | 4 +-
.../new/solarfm/signal_classes/Controller.py | 4 ++
.../solarfm/signal_classes/Controller_Data.py | 2 +-
.../solarfm/signal_classes/mixins/TabMixin.py | 49 +++++++++++++++++--
.../signal_classes/mixins/WindowMixin.py | 2 +
user_config/solarfm/Main_Window.glade | 32 ++++++++++++
7 files changed, 88 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index ba3946c..329c271 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,6 @@ sudo apt-get install python3 wget ffmpegthumbnailer steamcmd
# TODO
-- Add path bar search dropdown.
- Add "clear trash", "restore from trash" options.
- Add drive size free and consumed info to bottom bar.
- Add simpleish plugin system to run bash/python scripts.
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/View.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/View.py
index a4f1d73..9a0485b 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/View.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/View.py
@@ -160,6 +160,7 @@ class View(Settings, FileHandler, Launcher, Icon, Path):
images = self.hash_set(self.images),
desktops = self.hash_set(self.desktop),
ungrouped = self.hash_set(self.ungrouped)
+ hidden = self.hash_set(self.hidden)
return {
'path_head': self.get_path(),
@@ -169,7 +170,8 @@ class View(Settings, FileHandler, Launcher, Icon, Path):
'videos': videos,
'images': images,
'desktops': desktops,
- 'ungrouped': ungrouped
+ 'ungrouped': ungrouped,
+ 'hidden': hidden
}
}
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller.py
index f42524e..5c686b0 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller.py
@@ -110,6 +110,10 @@ class Controller(WidgetFileActionMixin, PaneMixin, WindowMixin, ShowHideMixin, \
self.arc_command_buffer.set_text(self.arc_commands[int(id)])
+ def clear_children(self, widget):
+ for child in widget.get_children():
+ widget.remove(child)
+
def get_current_state(self):
wid, tid = self.window_controller.get_active_data()
view = self.get_fm_window(wid).get_view_by_id(tid)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller_Data.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller_Data.py
index b9ff230..bdb20d7 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller_Data.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller_Data.py
@@ -35,6 +35,7 @@ class Controller_Data:
self.file_exists_dialog = self.builder.get_object("file_exists_dialog")
self.exists_file_label = self.builder.get_object("exists_file_label")
self.exists_file_field = self.builder.get_object("exists_file_field")
+ self.path_menu = self.builder.get_object("path_menu")
self.exists_file_rename_bttn = self.builder.get_object("exists_file_rename_bttn")
self.bottom_size_label = self.builder.get_object("bottom_size_label")
@@ -44,7 +45,6 @@ class Controller_Data:
self.trash_files_path = GLib.get_user_data_dir() + "/Trash/files"
self.trash_info_path = GLib.get_user_data_dir() + "/Trash/info"
-
# In compress commands:
# %n: First selected filename/dir to archive
# %N: All selected filenames/dirs to archive, or (with %O) a single filename
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/TabMixin.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/TabMixin.py
index 83b849e..8bdd838 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/TabMixin.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/TabMixin.py
@@ -1,6 +1,11 @@
# Python imports
+import os
# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+gi.require_version('Gdk', '3.0')
+from gi.repository import Gtk, Gdk
# Application imports
from . import WidgetMixin
@@ -144,9 +149,33 @@ class TabMixin(WidgetMixin):
self.window_controller.save_state()
return
if action == "path_entry":
- path = widget.get_text()
- dir = view.get_current_directory() + "/"
- if path == dir :
+ focused_obj = self.window.get_focus()
+ dir = f"{view.get_current_directory()}/"
+ path = widget.get_text()
+
+ self.path_menu.popdown()
+ if isinstance(focused_obj, Gtk.Entry):
+ button_box = self.path_menu.get_children()[0].get_children()[0].get_children()[0]
+ query = widget.get_text().replace(dir, "")
+ files = view.files + view.hidden
+
+ self.clear_children(button_box)
+ show_path_menu = False
+ for file in files:
+ if query.lower() in file.lower() and os.path.isdir(f"{dir}{file}"):
+ show_path_menu = True
+ button = Gtk.Button(label=file)
+ button.show()
+ button.connect("clicked", self.set_path_entry)
+ button_box.add(button)
+
+ if show_path_menu:
+ self.path_menu.popup()
+ widget.grab_focus_without_selecting()
+ widget.set_position(-1)
+
+
+ if path == dir:
return
traversed = view.set_path(path)
@@ -155,6 +184,20 @@ class TabMixin(WidgetMixin):
self.update_view(tab_label, view, store, wid, tid)
+ try:
+ widget.grab_focus_without_selecting()
+ widget.set_position(-1)
+ except Exception as e:
+ pass
+
+ def set_path_entry(self, button=None, eve=None):
+ wid, tid, view, iconview, store = self.get_current_state()
+ path = f"{view.get_current_directory()}/{button.get_label()}"
+ path_entry = self.builder.get_object("path_entry")
+ path_entry.set_text(path)
+ path_entry.grab_focus_without_selecting()
+ path_entry.set_position(-1)
+ self.path_menu.popdown()
def keyboard_close_tab(self):
wid, tid = self.window_controller.get_active_data()
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WindowMixin.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WindowMixin.py
index 06234f4..33b9c55 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WindowMixin.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WindowMixin.py
@@ -114,11 +114,13 @@ class WindowMixin(TabMixin):
def grid_icon_single_left_click(self, iconview, eve):
try:
+ self.path_menu.popdown()
wid, tid = iconview.get_name().split("|")
self.window_controller.set_active_data(wid, tid)
self.set_path_text(wid, tid)
self.set_window_title()
+
if eve.type == Gdk.EventType.BUTTON_RELEASE and eve.button == 1: # l-click
if self.single_click_open: # FIXME: need to find a way to pass the model index
self.grid_icon_double_left_click(iconview)
diff --git a/user_config/solarfm/Main_Window.glade b/user_config/solarfm/Main_Window.glade
index 029013d..e3aecda 100644
--- a/user_config/solarfm/Main_Window.glade
+++ b/user_config/solarfm/Main_Window.glade
@@ -1886,6 +1886,38 @@ SolarFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspe
+