refactor(bar): onRealize, onMap
This commit is contained in:
		
							parent
							
								
									07147878a9
								
							
						
					
					
						commit
						2a9fa1a4b9
					
				| 
						 | 
					@ -38,13 +38,13 @@ class Bar {
 | 
				
			||||||
  bool                          vertical = false;
 | 
					  bool                          vertical = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 private:
 | 
					 private:
 | 
				
			||||||
  static constexpr const char* MIN_HEIGHT_MSG =
 | 
					  static constexpr const char *MIN_HEIGHT_MSG =
 | 
				
			||||||
      "Requested height: {} exceeds the minimum height: {} required by the modules";
 | 
					      "Requested height: {} exceeds the minimum height: {} required by the modules";
 | 
				
			||||||
  static constexpr const char* MIN_WIDTH_MSG =
 | 
					  static constexpr const char *MIN_WIDTH_MSG =
 | 
				
			||||||
      "Requested width: {} exceeds the minimum width: {} required by the modules";
 | 
					      "Requested width: {} exceeds the minimum width: {} required by the modules";
 | 
				
			||||||
  static constexpr const char* BAR_SIZE_MSG =
 | 
					  static constexpr const char *BAR_SIZE_MSG =
 | 
				
			||||||
      "Bar configured (width: {}, height: {}) for output: {}";
 | 
					      "Bar configured (width: {}, height: {}) for output: {}";
 | 
				
			||||||
  static constexpr const char* SIZE_DEFINED =
 | 
					  static constexpr const char *SIZE_DEFINED =
 | 
				
			||||||
      "{} size is defined in the config file so it will stay like that";
 | 
					      "{} size is defined in the config file so it will stay like that";
 | 
				
			||||||
  static void layerSurfaceHandleConfigure(void *, struct zwlr_layer_surface_v1 *, uint32_t,
 | 
					  static void layerSurfaceHandleConfigure(void *, struct zwlr_layer_surface_v1 *, uint32_t,
 | 
				
			||||||
                                          uint32_t, uint32_t);
 | 
					                                          uint32_t, uint32_t);
 | 
				
			||||||
| 
						 | 
					@ -52,6 +52,8 @@ class Bar {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void destroyOutput();
 | 
					  void destroyOutput();
 | 
				
			||||||
  void onConfigure(GdkEventConfigure *ev);
 | 
					  void onConfigure(GdkEventConfigure *ev);
 | 
				
			||||||
 | 
					  void onRealize();
 | 
				
			||||||
 | 
					  void onMap(GdkEventAny *ev);
 | 
				
			||||||
  void setMarginsAndZone(uint32_t height, uint32_t width);
 | 
					  void setMarginsAndZone(uint32_t height, uint32_t width);
 | 
				
			||||||
  auto setupWidgets() -> void;
 | 
					  auto setupWidgets() -> void;
 | 
				
			||||||
  void getModules(const Factory &, const std::string &);
 | 
					  void getModules(const Factory &, const std::string &);
 | 
				
			||||||
| 
						 | 
					@ -66,6 +68,7 @@ class Bar {
 | 
				
			||||||
  } margins_;
 | 
					  } margins_;
 | 
				
			||||||
  uint32_t                                      width_ = 0;
 | 
					  uint32_t                                      width_ = 0;
 | 
				
			||||||
  uint32_t                                      height_ = 1;
 | 
					  uint32_t                                      height_ = 1;
 | 
				
			||||||
 | 
					  uint8_t                                       anchor_;
 | 
				
			||||||
  Gtk::Box                                      left_;
 | 
					  Gtk::Box                                      left_;
 | 
				
			||||||
  Gtk::Box                                      center_;
 | 
					  Gtk::Box                                      center_;
 | 
				
			||||||
  Gtk::Box                                      right_;
 | 
					  Gtk::Box                                      right_;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,4 +26,4 @@ class Mode : public ALabel, public sigc::trackable {
 | 
				
			||||||
  util::JsonParser parser_;
 | 
					  util::JsonParser parser_;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}  // namespace waybar::modules::sway
 | 
					}  // namespace waybar::modules::sway
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,9 +37,9 @@ class Workspaces : public IModule, public sigc::trackable {
 | 
				
			||||||
  std::vector<Json::Value>                     workspaces_;
 | 
					  std::vector<Json::Value>                     workspaces_;
 | 
				
			||||||
  std::vector<std::string>                     workspaces_order_;
 | 
					  std::vector<std::string>                     workspaces_order_;
 | 
				
			||||||
  waybar::util::SleeperThread                  thread_;
 | 
					  waybar::util::SleeperThread                  thread_;
 | 
				
			||||||
 | 
					  Ipc                                          ipc_;
 | 
				
			||||||
  std::mutex                                   mutex_;
 | 
					  std::mutex                                   mutex_;
 | 
				
			||||||
  Gtk::Box                                     box_;
 | 
					  Gtk::Box                                     box_;
 | 
				
			||||||
  Ipc                                          ipc_;
 | 
					 | 
				
			||||||
  util::JsonParser                             parser_;
 | 
					  util::JsonParser                             parser_;
 | 
				
			||||||
  bool                                         scrolling_;
 | 
					  bool                                         scrolling_;
 | 
				
			||||||
  std::unordered_map<std::string, Gtk::Button> buttons_;
 | 
					  std::unordered_map<std::string, Gtk::Button> buttons_;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										170
									
								
								src/bar.cpp
								
								
								
								
							
							
						
						
									
										170
									
								
								src/bar.cpp
								
								
								
								
							| 
						 | 
					@ -9,6 +9,7 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config)
 | 
				
			||||||
      window{Gtk::WindowType::WINDOW_TOPLEVEL},
 | 
					      window{Gtk::WindowType::WINDOW_TOPLEVEL},
 | 
				
			||||||
      surface(nullptr),
 | 
					      surface(nullptr),
 | 
				
			||||||
      layer_surface(nullptr),
 | 
					      layer_surface(nullptr),
 | 
				
			||||||
 | 
					      anchor_(ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP),
 | 
				
			||||||
      left_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
					      left_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
				
			||||||
      center_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
					      center_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
				
			||||||
      right_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
					      right_(Gtk::ORIENTATION_HORIZONTAL, 0),
 | 
				
			||||||
| 
						 | 
					@ -21,41 +22,27 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config)
 | 
				
			||||||
    height_ = 0;
 | 
					    height_ = 0;
 | 
				
			||||||
    width_ = 1;
 | 
					    width_ = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  height_ = config["height"].isUInt() ? config["height"].asUInt() : height_;
 | 
				
			||||||
 | 
					  width_ = config["width"].isUInt() ? config["width"].asUInt() : width_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto gtk_window = window.gobj();
 | 
					  window.signal_realize().connect_notify(sigc::mem_fun(*this, &Bar::onRealize));
 | 
				
			||||||
  auto gtk_widget = GTK_WIDGET(gtk_window);
 | 
					  window.signal_map_event().connect_notify(sigc::mem_fun(*this, &Bar::onMap));
 | 
				
			||||||
  gtk_widget_realize(gtk_widget);
 | 
					  window.signal_configure_event().connect_notify(sigc::mem_fun(*this, &Bar::onConfigure));
 | 
				
			||||||
  auto gdk_window = window.get_window()->gobj();
 | 
					  window.set_size_request(width_, height_);
 | 
				
			||||||
  gdk_wayland_window_set_use_custom_surface(gdk_window);
 | 
					 | 
				
			||||||
  surface = gdk_wayland_window_get_wl_surface(gdk_window);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::size_t layer =
 | 
					 | 
				
			||||||
      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(
 | 
					 | 
				
			||||||
      client->layer_shell, surface, output->output, layer, "waybar");
 | 
					 | 
				
			||||||
  static const struct zwlr_layer_surface_v1_listener layer_surface_listener = {
 | 
					 | 
				
			||||||
      .configure = layerSurfaceHandleConfigure,
 | 
					 | 
				
			||||||
      .closed = layerSurfaceHandleClosed,
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  zwlr_layer_surface_v1_add_listener(layer_surface, &layer_surface_listener, this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto height = config["height"].isUInt() ? config["height"].asUInt() : height_;
 | 
					 | 
				
			||||||
  auto width = config["width"].isUInt() ? config["width"].asUInt() : width_;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  std::size_t anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP;
 | 
					 | 
				
			||||||
  if (config["position"] == "bottom") {
 | 
					  if (config["position"] == "bottom") {
 | 
				
			||||||
    anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
 | 
					    anchor_ = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
 | 
				
			||||||
  } else if (config["position"] == "left") {
 | 
					  } else if (config["position"] == "left") {
 | 
				
			||||||
    anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT;
 | 
					    anchor_ = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT;
 | 
				
			||||||
  } else if (config["position"] == "right") {
 | 
					  } else if (config["position"] == "right") {
 | 
				
			||||||
    anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
 | 
					    anchor_ = ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (anchor == ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM || anchor == ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP) {
 | 
					  if (anchor_ == ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM ||
 | 
				
			||||||
    anchor |= ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
 | 
					      anchor_ == ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP) {
 | 
				
			||||||
  } else if (anchor == ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT ||
 | 
					    anchor_ |= ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
 | 
				
			||||||
             anchor == ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT) {
 | 
					  } else if (anchor_ == ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT ||
 | 
				
			||||||
    anchor |= ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
 | 
					             anchor_ == ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT) {
 | 
				
			||||||
 | 
					    anchor_ |= ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
 | 
				
			||||||
    left_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
					    left_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
				
			||||||
    center_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
					    center_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
				
			||||||
    right_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
					    right_ = Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0);
 | 
				
			||||||
| 
						 | 
					@ -63,17 +50,71 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config)
 | 
				
			||||||
    vertical = true;
 | 
					    vertical = true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  zwlr_layer_surface_v1_set_anchor(layer_surface, anchor);
 | 
					  setupWidgets();
 | 
				
			||||||
  zwlr_layer_surface_v1_set_size(layer_surface, width, height);
 | 
					
 | 
				
			||||||
  setMarginsAndZone(height, width);
 | 
					  if (window.get_realized()) {
 | 
				
			||||||
 | 
					    onRealize();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  window.show_all();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void waybar::Bar::onConfigure(GdkEventConfigure* ev) {
 | 
				
			||||||
 | 
					  auto tmp_height = height_;
 | 
				
			||||||
 | 
					  auto tmp_width = width_;
 | 
				
			||||||
 | 
					  if (ev->height > static_cast<int>(height_)) {
 | 
				
			||||||
 | 
					    // Default minimal value
 | 
				
			||||||
 | 
					    if (height_ != 1) {
 | 
				
			||||||
 | 
					      spdlog::warn(MIN_HEIGHT_MSG, height_, ev->height);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config["height"].isUInt()) {
 | 
				
			||||||
 | 
					      spdlog::info(SIZE_DEFINED, "Height");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      tmp_height = ev->height;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (ev->width > static_cast<int>(width_)) {
 | 
				
			||||||
 | 
					    // Default minimal value
 | 
				
			||||||
 | 
					    if (width_ != 1) {
 | 
				
			||||||
 | 
					      spdlog::warn(MIN_WIDTH_MSG, width_, ev->width);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config["width"].isUInt()) {
 | 
				
			||||||
 | 
					      spdlog::info(SIZE_DEFINED, "Width");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      tmp_width = ev->width;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (tmp_width != width_ || tmp_height != height_) {
 | 
				
			||||||
 | 
					    zwlr_layer_surface_v1_set_size(layer_surface, tmp_width, tmp_height);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void waybar::Bar::onRealize() {
 | 
				
			||||||
 | 
					  auto gdk_window = window.get_window()->gobj();
 | 
				
			||||||
 | 
					  gdk_wayland_window_set_use_custom_surface(gdk_window);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void waybar::Bar::onMap(GdkEventAny* ev) {
 | 
				
			||||||
 | 
					  auto gdk_window = window.get_window()->gobj();
 | 
				
			||||||
 | 
					  surface = gdk_wayland_window_get_wl_surface(gdk_window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto client = waybar::Client::inst();
 | 
				
			||||||
 | 
					  auto layer =
 | 
				
			||||||
 | 
					      config["layer"] == "top" ? ZWLR_LAYER_SHELL_V1_LAYER_TOP : ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM;
 | 
				
			||||||
 | 
					  layer_surface = zwlr_layer_shell_v1_get_layer_surface(
 | 
				
			||||||
 | 
					      client->layer_shell, surface, output->output, layer, "waybar");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  zwlr_layer_surface_v1_set_keyboard_interactivity(layer_surface, false);
 | 
				
			||||||
 | 
					  zwlr_layer_surface_v1_set_anchor(layer_surface, anchor_);
 | 
				
			||||||
 | 
					  zwlr_layer_surface_v1_set_size(layer_surface, width_, height_);
 | 
				
			||||||
 | 
					  setMarginsAndZone(height_, width_);
 | 
				
			||||||
 | 
					  static const struct zwlr_layer_surface_v1_listener layer_surface_listener = {
 | 
				
			||||||
 | 
					      .configure = layerSurfaceHandleConfigure,
 | 
				
			||||||
 | 
					      .closed = layerSurfaceHandleClosed,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  zwlr_layer_surface_v1_add_listener(layer_surface, &layer_surface_listener, this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wl_surface_commit(surface);
 | 
					  wl_surface_commit(surface);
 | 
				
			||||||
  wl_display_roundtrip(client->wl_display);
 | 
					  wl_display_roundtrip(client->wl_display);
 | 
				
			||||||
 | 
					 | 
				
			||||||
  setupWidgets();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  window.set_size_request(width_, height_);
 | 
					 | 
				
			||||||
  window.signal_configure_event().connect_notify(sigc::mem_fun(*this, &Bar::onConfigure));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void waybar::Bar::setMarginsAndZone(uint32_t height, uint32_t width) {
 | 
					void waybar::Bar::setMarginsAndZone(uint32_t height, uint32_t width) {
 | 
				
			||||||
| 
						 | 
					@ -127,36 +168,6 @@ void waybar::Bar::setMarginsAndZone(uint32_t height, uint32_t width) {
 | 
				
			||||||
  zwlr_layer_surface_v1_set_exclusive_zone(layer_surface, zone);
 | 
					  zwlr_layer_surface_v1_set_exclusive_zone(layer_surface, zone);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void waybar::Bar::onConfigure(GdkEventConfigure* ev) {
 | 
					 | 
				
			||||||
  auto tmp_height = height_;
 | 
					 | 
				
			||||||
  auto tmp_width = width_;
 | 
					 | 
				
			||||||
  if (ev->height > static_cast<int>(height_)) {
 | 
					 | 
				
			||||||
    // Default minimal value
 | 
					 | 
				
			||||||
    if (height_ != 1) {
 | 
					 | 
				
			||||||
      spdlog::warn(MIN_HEIGHT_MSG, height_, ev->height);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (config["height"].isUInt()) {
 | 
					 | 
				
			||||||
      spdlog::info(SIZE_DEFINED, "Height");
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      tmp_height = ev->height;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (ev->width > static_cast<int>(width_)) {
 | 
					 | 
				
			||||||
    // Default minimal value
 | 
					 | 
				
			||||||
    if (width_ != 1) {
 | 
					 | 
				
			||||||
      spdlog::warn(MIN_WIDTH_MSG, width_, ev->width);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (config["width"].isUInt()) {
 | 
					 | 
				
			||||||
      spdlog::info(SIZE_DEFINED, "Width");
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      tmp_width = ev->width;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (tmp_width != width_ || tmp_height != height_) {
 | 
					 | 
				
			||||||
    zwlr_layer_surface_v1_set_size(layer_surface, tmp_width, tmp_height);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Converting string to button code rn as to avoid doing it later
 | 
					// Converting string to button code rn as to avoid doing it later
 | 
				
			||||||
void waybar::Bar::setupAltFormatKeyForModule(const std::string& module_name) {
 | 
					void waybar::Bar::setupAltFormatKeyForModule(const std::string& module_name) {
 | 
				
			||||||
  if (config.isMember(module_name)) {
 | 
					  if (config.isMember(module_name)) {
 | 
				
			||||||
| 
						 | 
					@ -229,9 +240,9 @@ void waybar::Bar::layerSurfaceHandleConfigure(void* data, struct zwlr_layer_surf
 | 
				
			||||||
    auto zone = o->vertical ? width + o->margins_.right : height + o->margins_.bottom;
 | 
					    auto zone = o->vertical ? width + o->margins_.right : height + o->margins_.bottom;
 | 
				
			||||||
    zwlr_layer_surface_v1_set_exclusive_zone(o->layer_surface, zone);
 | 
					    zwlr_layer_surface_v1_set_exclusive_zone(o->layer_surface, zone);
 | 
				
			||||||
    spdlog::info(BAR_SIZE_MSG,
 | 
					    spdlog::info(BAR_SIZE_MSG,
 | 
				
			||||||
                             o->width_ == 1 ? "auto" : std::to_string(o->width_),
 | 
					                 o->width_ == 1 ? "auto" : std::to_string(o->width_),
 | 
				
			||||||
                             o->height_ == 1 ? "auto" : std::to_string(o->height_),
 | 
					                 o->height_ == 1 ? "auto" : std::to_string(o->height_),
 | 
				
			||||||
                             o->output->name);
 | 
					                 o->output->name);
 | 
				
			||||||
    wl_surface_commit(o->surface);
 | 
					    wl_surface_commit(o->surface);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  zwlr_layer_surface_v1_ack_configure(surface, serial);
 | 
					  zwlr_layer_surface_v1_ack_configure(surface, serial);
 | 
				
			||||||
| 
						 | 
					@ -239,7 +250,10 @@ void waybar::Bar::layerSurfaceHandleConfigure(void* data, struct zwlr_layer_surf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void waybar::Bar::layerSurfaceHandleClosed(void* data, struct zwlr_layer_surface_v1* /*surface*/) {
 | 
					void waybar::Bar::layerSurfaceHandleClosed(void* data, struct zwlr_layer_surface_v1* /*surface*/) {
 | 
				
			||||||
  auto o = static_cast<waybar::Bar*>(data);
 | 
					  auto o = static_cast<waybar::Bar*>(data);
 | 
				
			||||||
  zwlr_layer_surface_v1_destroy(o->layer_surface);
 | 
					  if (o->layer_surface) {
 | 
				
			||||||
 | 
					    zwlr_layer_surface_v1_destroy(o->layer_surface);
 | 
				
			||||||
 | 
					    o->layer_surface = nullptr;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  o->modules_left_.clear();
 | 
					  o->modules_left_.clear();
 | 
				
			||||||
  o->modules_center_.clear();
 | 
					  o->modules_center_.clear();
 | 
				
			||||||
  o->modules_right_.clear();
 | 
					  o->modules_right_.clear();
 | 
				
			||||||
| 
						 | 
					@ -272,14 +286,11 @@ void waybar::Bar::getModules(const Factory& factory, const std::string& pos) {
 | 
				
			||||||
          modules_right_.emplace_back(module);
 | 
					          modules_right_.emplace_back(module);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        module->dp.connect([module, &name] {
 | 
					        module->dp.connect([module, &name] {
 | 
				
			||||||
          // Fix https://github.com/Alexays/Waybar/issues/320, proper way?
 | 
					          try {
 | 
				
			||||||
          Glib::signal_idle().connect_once([module, &name] {
 | 
					            module->update();
 | 
				
			||||||
            try {
 | 
					          } catch (const std::exception& e) {
 | 
				
			||||||
              module->update();
 | 
					            spdlog::error("{}: {}", name.asString(), e.what());
 | 
				
			||||||
            } catch (const std::exception& e) {
 | 
					          }
 | 
				
			||||||
              spdlog::error("{}: {}", name.asString(), e.what());
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          });
 | 
					 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      } catch (const std::exception& e) {
 | 
					      } catch (const std::exception& e) {
 | 
				
			||||||
        spdlog::warn("module {}: {}", name.asString(), e.what());
 | 
					        spdlog::warn("module {}: {}", name.asString(), e.what());
 | 
				
			||||||
| 
						 | 
					@ -313,5 +324,4 @@ auto waybar::Bar::setupWidgets() -> void {
 | 
				
			||||||
  for (auto const& module : modules_right_) {
 | 
					  for (auto const& module : modules_right_) {
 | 
				
			||||||
    right_.pack_end(*module, false, false, 0);
 | 
					    right_.pack_end(*module, false, false, 0);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  window.show_all();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue