mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-30 23:42:42 +01:00 
			
		
		
		
	Merge pull request #1035 from alebastr/deferred-output-removal
fix: schedule output destruction on idle callback
This commit is contained in:
		| @@ -51,6 +51,7 @@ class Client { | ||||
|   static void handleOutputDescription(void *, struct zxdg_output_v1 *, const char *); | ||||
|   void        handleMonitorAdded(Glib::RefPtr<Gdk::Monitor> monitor); | ||||
|   void        handleMonitorRemoved(Glib::RefPtr<Gdk::Monitor> monitor); | ||||
|   void        handleDeferredMonitorRemoval(Glib::RefPtr<Gdk::Monitor> monitor); | ||||
|  | ||||
|   Json::Value                     config_; | ||||
|   Glib::RefPtr<Gtk::StyleContext> style_context_; | ||||
|   | ||||
| @@ -179,6 +179,16 @@ void waybar::Client::handleMonitorAdded(Glib::RefPtr<Gdk::Monitor> monitor) { | ||||
|  | ||||
| void waybar::Client::handleMonitorRemoved(Glib::RefPtr<Gdk::Monitor> monitor) { | ||||
|   spdlog::debug("Output removed: {} {}", monitor->get_manufacturer(), monitor->get_model()); | ||||
|   /* This event can be triggered from wl_display_roundtrip called by GTK or our code. | ||||
|    * Defer destruction of bars for the output to the next iteration of the event loop to avoid | ||||
|    * deleting objects referenced by currently executed code. | ||||
|    */ | ||||
|   Glib::signal_idle().connect_once( | ||||
|       sigc::bind(sigc::mem_fun(*this, &Client::handleDeferredMonitorRemoval), monitor), | ||||
|       Glib::PRIORITY_HIGH_IDLE); | ||||
| } | ||||
|  | ||||
| void waybar::Client::handleDeferredMonitorRemoval(Glib::RefPtr<Gdk::Monitor> monitor) { | ||||
|   for (auto it = bars.begin(); it != bars.end();) { | ||||
|     if ((*it)->output->monitor == monitor) { | ||||
|       auto output_name = (*it)->output->name; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex