mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-31 07:52:42 +01:00 
			
		
		
		
	refactor(Bar): roundtrip before setup widgets
This commit is contained in:
		| @@ -38,6 +38,12 @@ class Bar { | ||||
|   bool                          vertical = false; | ||||
|  | ||||
|  private: | ||||
|   static inline const std::string MIN_HEIGHT_MSG = | ||||
|       "Requested height: {} exceeds the minimum height: {} required by the modules"; | ||||
|   static inline const std::string MIN_WIDTH_MSG = | ||||
|       "Requested width: {} exceeds the minimum width: {} required by the modules"; | ||||
|   static inline const std::string BAR_SIZE_MSG = | ||||
|       "Bar configured (width: {}, height: {}) for output: {}"; | ||||
|   static void layerSurfaceHandleConfigure(void *, struct zwlr_layer_surface_v1 *, uint32_t, | ||||
|                                           uint32_t, uint32_t); | ||||
|   static void layerSurfaceHandleClosed(void *, struct zwlr_layer_surface_v1 *); | ||||
|   | ||||
| @@ -21,7 +21,6 @@ class Client { | ||||
|   struct wl_registry *                registry = nullptr; | ||||
|   struct zwlr_layer_shell_v1 *        layer_shell = nullptr; | ||||
|   struct zxdg_output_manager_v1 *     xdg_output_manager = nullptr; | ||||
|   struct wl_seat *                    seat = nullptr; | ||||
|   struct zwp_idle_inhibit_manager_v1 *idle_inhibit_manager = nullptr; | ||||
|   std::vector<std::unique_ptr<Bar>>   bars; | ||||
|  | ||||
|   | ||||
							
								
								
									
										37
									
								
								src/bar.cpp
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								src/bar.cpp
									
									
									
									
									
								
							| @@ -14,7 +14,6 @@ waybar::Bar::Bar(struct waybar_output* w_output) | ||||
|   window.set_title("waybar"); | ||||
|   window.set_name("waybar"); | ||||
|   window.set_decorated(false); | ||||
|   window.set_resizable(false); | ||||
|  | ||||
|   if (output->config["position"] == "right" || output->config["position"] == "left") { | ||||
|     height_ = 0; | ||||
| @@ -29,15 +28,11 @@ waybar::Bar::Bar(struct waybar_output* w_output) | ||||
|   gdk_wayland_window_set_use_custom_surface(gdk_window); | ||||
|   surface = gdk_wayland_window_get_wl_surface(gdk_window); | ||||
|  | ||||
|   // Convert to button code for every module that is used. | ||||
|   setupAltFormatKeyForModuleList("modules-left"); | ||||
|   setupAltFormatKeyForModuleList("modules-right"); | ||||
|   setupAltFormatKeyForModuleList("modules-center"); | ||||
|   std::size_t layer = output->config["layer"] == "top" ? ZWLR_LAYER_SHELL_V1_LAYER_TOP | ||||
|                                                        : ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM; | ||||
|   auto client = waybar::Client::inst(); | ||||
|   layer_surface = zwlr_layer_shell_v1_get_layer_surface( | ||||
|       waybar::Client::inst()->layer_shell, surface, output->output, layer, "waybar"); | ||||
|  | ||||
|       client->layer_shell, surface, output->output, layer, "waybar"); | ||||
|   static const struct zwlr_layer_surface_v1_listener layer_surface_listener = { | ||||
|       .configure = layerSurfaceHandleConfigure, | ||||
|       .closed = layerSurfaceHandleClosed, | ||||
| @@ -72,6 +67,7 @@ waybar::Bar::Bar(struct waybar_output* w_output) | ||||
|   zwlr_layer_surface_v1_set_size(layer_surface, width, height); | ||||
|  | ||||
|   wl_surface_commit(surface); | ||||
|   wl_display_roundtrip(client->wl_display); | ||||
|  | ||||
|   setupWidgets(); | ||||
| } | ||||
| @@ -136,7 +132,6 @@ void waybar::Bar::handleSignal(int signal) { | ||||
| void waybar::Bar::layerSurfaceHandleConfigure(void* data, struct zwlr_layer_surface_v1* surface, | ||||
|                                               uint32_t serial, uint32_t width, uint32_t height) { | ||||
|   auto o = static_cast<waybar::Bar*>(data); | ||||
|   zwlr_layer_surface_v1_ack_configure(surface, serial); | ||||
|   if (width != o->width_ || height != o->height_) { | ||||
|     o->width_ = width; | ||||
|     o->height_ = height; | ||||
| @@ -146,31 +141,18 @@ void waybar::Bar::layerSurfaceHandleConfigure(void* data, struct zwlr_layer_surf | ||||
|     int min_width, min_height; | ||||
|     o->window.get_size(min_width, min_height); | ||||
|     if (o->height_ < static_cast<uint32_t>(min_height)) { | ||||
|       std::cout << fmt::format( | ||||
|                        "Requested height: {} exceeds the minimum \ | ||||
| height: {} required by the modules", | ||||
|                        o->height_, | ||||
|                        min_height) | ||||
|                 << std::endl; | ||||
|       std::cout << fmt::format(MIN_HEIGHT_MSG, o->height_, min_height) << std::endl; | ||||
|       o->height_ = min_height; | ||||
|     } | ||||
|     if (o->width_ < static_cast<uint32_t>(min_width)) { | ||||
|       std::cout << fmt::format( | ||||
|                        "Requested width: {} exceeds the minimum \ | ||||
| width: {} required by the modules", | ||||
|                        o->height_, | ||||
|                        min_width) | ||||
|                 << std::endl; | ||||
|       std::cout << fmt::format(MIN_WIDTH_MSG, o->height_, min_width) << std::endl; | ||||
|       o->width_ = min_width; | ||||
|     } | ||||
|     std::cout << fmt::format("Bar configured (width: {}, height: {}) for output: {}", | ||||
|                              o->width_, | ||||
|                              o->height_, | ||||
|                              o->output->name) | ||||
|               << std::endl; | ||||
|     std::cout << fmt::format(BAR_SIZE_MSG, o->width_, o->height_, o->output->name) << std::endl; | ||||
|  | ||||
|     wl_surface_commit(o->surface); | ||||
|   } | ||||
|   zwlr_layer_surface_v1_ack_configure(surface, serial); | ||||
| } | ||||
|  | ||||
| void waybar::Bar::layerSurfaceHandleClosed(void* data, struct zwlr_layer_surface_v1* /*surface*/) { | ||||
| @@ -227,6 +209,11 @@ auto waybar::Bar::setupWidgets() -> void { | ||||
|   box_.set_center_widget(center_); | ||||
|   box_.pack_end(right_, true, true); | ||||
|  | ||||
|   // Convert to button code for every module that is used. | ||||
|   setupAltFormatKeyForModuleList("modules-left"); | ||||
|   setupAltFormatKeyForModuleList("modules-right"); | ||||
|   setupAltFormatKeyForModuleList("modules-center"); | ||||
|  | ||||
|   Factory factory(*this, output->config); | ||||
|   getModules(factory, "modules-left"); | ||||
|   getModules(factory, "modules-center"); | ||||
|   | ||||
| @@ -39,17 +39,13 @@ void waybar::Client::handleGlobal(void *data, struct wl_registry *registry, uint | ||||
|         wl_registry_bind(registry, name, &wl_output_interface, version)); | ||||
|     client->outputs_.emplace_back(new struct waybar_output({wl_output, "", name, nullptr})); | ||||
|     client->handleOutput(client->outputs_.back()); | ||||
|   } else if (strcmp(interface, wl_seat_interface.name) == 0) { | ||||
|     client->seat = static_cast<struct wl_seat *>( | ||||
|         wl_registry_bind(registry, name, &wl_seat_interface, version)); | ||||
|   } else if (strcmp(interface, zxdg_output_manager_v1_interface.name) == 0 && | ||||
|              version >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION) { | ||||
|     client->xdg_output_manager = static_cast<struct zxdg_output_manager_v1 *>(wl_registry_bind( | ||||
|         registry, name, &zxdg_output_manager_v1_interface, ZXDG_OUTPUT_V1_NAME_SINCE_VERSION)); | ||||
|   } else if (strcmp(interface, zwp_idle_inhibit_manager_v1_interface.name) == 0) { | ||||
|     waybar::Client::inst()->idle_inhibit_manager = | ||||
|         static_cast<struct zwp_idle_inhibit_manager_v1 *>( | ||||
|             wl_registry_bind(registry, name, &zwp_idle_inhibit_manager_v1_interface, 1)); | ||||
|     client->idle_inhibit_manager = static_cast<struct zwp_idle_inhibit_manager_v1 *>( | ||||
|         wl_registry_bind(registry, name, &zwp_idle_inhibit_manager_v1_interface, 1)); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -216,10 +212,9 @@ void waybar::Client::bindInterfaces() { | ||||
|   }; | ||||
|   wl_registry_add_listener(registry, ®istry_listener, this); | ||||
|   wl_display_roundtrip(wl_display); | ||||
|   if (!layer_shell || !seat || !xdg_output_manager) { | ||||
|   if (!layer_shell || !xdg_output_manager) { | ||||
|     throw std::runtime_error("Failed to acquire required resources."); | ||||
|   } | ||||
|   wl_display_roundtrip(wl_display); | ||||
| } | ||||
|  | ||||
| int waybar::Client::main(int argc, char *argv[]) { | ||||
| @@ -266,7 +261,6 @@ int waybar::Client::main(int argc, char *argv[]) { | ||||
|   zwlr_layer_shell_v1_destroy(layer_shell); | ||||
|   zwp_idle_inhibit_manager_v1_destroy(idle_inhibit_manager); | ||||
|   wl_registry_destroy(registry); | ||||
|   wl_seat_destroy(seat); | ||||
|   wl_display_disconnect(wl_display); | ||||
|   return 0; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex