fix #3490: expand menu file before opening it
This commit is contained in:
		
							parent
							
								
									003dd3a9a2
								
							
						
					
					
						commit
						7ec1343ad5
					
				|  | @ -20,6 +20,9 @@ class Config { | |||
|   static std::optional<std::string> findConfigPath( | ||||
|       const std::vector<std::string> &names, const std::vector<std::string> &dirs = CONFIG_DIRS); | ||||
| 
 | ||||
|   static std::optional<std::string> tryExpandPath(const std::string &base, | ||||
|                                                   const std::string &filename); | ||||
| 
 | ||||
|   Config() = default; | ||||
| 
 | ||||
|   void load(const std::string &config); | ||||
|  |  | |||
|  | @ -6,6 +6,8 @@ | |||
| #include <iostream> | ||||
| #include <util/command.hpp> | ||||
| 
 | ||||
| #include "config.hpp" | ||||
| 
 | ||||
| namespace waybar { | ||||
| 
 | ||||
| ALabel::ALabel(const Json::Value& config, const std::string& name, const std::string& id, | ||||
|  | @ -61,6 +63,14 @@ ALabel::ALabel(const Json::Value& config, const std::string& name, const std::st | |||
|     try { | ||||
|       // Check that the file exists
 | ||||
|       std::string menuFile = config_["menu-file"].asString(); | ||||
| 
 | ||||
|       // there might be "~" or "$HOME" in original path, try to expand it.
 | ||||
|       auto result = Config::tryExpandPath(menuFile, ""); | ||||
|       if (!result.has_value()) { | ||||
|         throw std::runtime_error("Failed to expand file: " + menuFile); | ||||
|       } | ||||
| 
 | ||||
|       menuFile = result.value(); | ||||
|       // Read the menu descriptor file
 | ||||
|       std::ifstream file(menuFile); | ||||
|       if (!file.is_open()) { | ||||
|  | @ -170,7 +180,7 @@ bool waybar::ALabel::handleToggle(GdkEventButton* const& e) { | |||
|   return AModule::handleToggle(e); | ||||
| } | ||||
| 
 | ||||
| void ALabel::handleGtkMenuEvent(GtkMenuItem* menuitem, gpointer data) { | ||||
| void ALabel::handleGtkMenuEvent(GtkMenuItem* /*menuitem*/, gpointer data) { | ||||
|   waybar::util::command::res res = waybar::util::command::exec((char*)data, "GtkMenu"); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,7 +21,8 @@ const std::vector<std::string> Config::CONFIG_DIRS = { | |||
| 
 | ||||
| const char *Config::CONFIG_PATH_ENV = "WAYBAR_CONFIG_DIR"; | ||||
| 
 | ||||
| std::optional<std::string> tryExpandPath(const std::string &base, const std::string &filename) { | ||||
| std::optional<std::string> Config::tryExpandPath(const std::string &base, | ||||
|                                                  const std::string &filename) { | ||||
|   fs::path path; | ||||
| 
 | ||||
|   if (!filename.empty()) { | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ std::string waybar::CssReloadHelper::findPath(const std::string& filename) { | |||
| 
 | ||||
|   // File monitor does not work with symlinks, so resolve them
 | ||||
|   std::string original = result; | ||||
|   while(std::filesystem::is_symlink(result)) { | ||||
|   while (std::filesystem::is_symlink(result)) { | ||||
|     result = std::filesystem::read_symlink(result); | ||||
| 
 | ||||
|     // prevent infinite cycle
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue