(sni) Be able to control order for system tray items.
This commit is contained in:
@@ -14,7 +14,7 @@ namespace waybar::modules::SNI {
|
||||
|
||||
class Host {
|
||||
public:
|
||||
Host(const std::size_t id, const Json::Value&, const Bar&, const std::vector<std::string>&,
|
||||
Host(std::size_t id, const Json::Value&, const Bar&, const std::vector<std::string>&,
|
||||
const std::function<void(std::unique_ptr<Item>&)>&,
|
||||
const std::function<void(std::unique_ptr<Item>&)>&, const std::function<void()>&);
|
||||
~Host();
|
||||
@@ -22,11 +22,13 @@ class Host {
|
||||
void checkIgnoreList(const std::vector<std::string>& ignore_list,
|
||||
const std::function<void(std::unique_ptr<Item>&)>& on_remove);
|
||||
|
||||
void reorderItems();
|
||||
|
||||
private:
|
||||
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
|
||||
void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring,
|
||||
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, const Glib::ustring&);
|
||||
void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, const Glib::ustring&,
|
||||
const Glib::ustring&);
|
||||
void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
|
||||
void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, const Glib::ustring&);
|
||||
static void proxyReady(GObject*, GAsyncResult*, gpointer);
|
||||
static void registerHost(GObject*, GAsyncResult*, gpointer);
|
||||
static void itemRegistered(SnWatcher*, const gchar*, gpointer);
|
||||
@@ -36,7 +38,7 @@ class Host {
|
||||
void removeItem(std::vector<std::unique_ptr<Item>>::iterator);
|
||||
void clearItems();
|
||||
|
||||
std::tuple<std::string, std::string> getBusNameAndObjectPath(const std::string);
|
||||
static std::tuple<std::string, std::string> getBusNameAndObjectPath(const std::string&);
|
||||
void addRegisteredItem(const std::string& service);
|
||||
|
||||
std::vector<std::unique_ptr<Item>> items_;
|
||||
@@ -53,6 +55,8 @@ class Host {
|
||||
const std::vector<std::string> ignore_list_;
|
||||
const std::function<void(std::unique_ptr<Item>&)> on_add_;
|
||||
const std::function<void(std::unique_ptr<Item>&)> on_remove_;
|
||||
|
||||
ItemOrderMap orders_;
|
||||
const std::function<void()> on_update_;
|
||||
};
|
||||
|
||||
|
||||
@@ -24,11 +24,15 @@ struct ToolTip {
|
||||
Glib::ustring text;
|
||||
};
|
||||
|
||||
class Host;
|
||||
|
||||
using ItemOrderMap = std::unordered_map<std::string, int>;
|
||||
|
||||
class Item : public sigc::trackable {
|
||||
public:
|
||||
Item(const std::string&, const std::string&, const Json::Value&, const Bar&,
|
||||
const std::function<void(Item&)>&, const std::function<void(Item&)>&,
|
||||
const std::function<void()>&);
|
||||
const std::function<void()>&, Host&, const ItemOrderMap&);
|
||||
~Item();
|
||||
|
||||
bool isReady() const;
|
||||
@@ -64,6 +68,7 @@ class Item : public sigc::trackable {
|
||||
* while compliant SNI implementation would always reset the flag to desired value.
|
||||
*/
|
||||
bool item_is_menu = true;
|
||||
int order_ = -1; // -1 means not set
|
||||
|
||||
private:
|
||||
void onConfigure(GdkEventConfigure* ev);
|
||||
@@ -114,6 +119,9 @@ class Item : public sigc::trackable {
|
||||
Glib::RefPtr<Gio::DBus::Proxy> proxy_;
|
||||
Glib::RefPtr<Gio::Cancellable> cancellable_;
|
||||
std::set<std::string_view> update_pending_;
|
||||
|
||||
Host& host_;
|
||||
const ItemOrderMap& orders_;
|
||||
};
|
||||
|
||||
} // namespace waybar::modules::SNI
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace waybar::modules::SNI {
|
||||
class Tray : public AModule {
|
||||
public:
|
||||
Tray(const std::string&, const Bar&, const Json::Value&);
|
||||
virtual ~Tray() = default;
|
||||
~Tray() override = default;
|
||||
auto update() -> void override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user