feat(Tray): handle item unregister

This commit is contained in:
Alexis
2018-09-04 23:50:08 +02:00
parent fc6e42d748
commit 20ff2cab9e
12 changed files with 127 additions and 107 deletions

View File

@ -1,6 +1,7 @@
#pragma once
#include <gtkmm.h>
#include <tuple>
#include <dbus-status-notifier-watcher.h>
#include "modules/sni/sni.hpp"
@ -8,8 +9,7 @@ namespace waybar::modules::SNI {
class Host {
public:
Host(Glib::Dispatcher&);
~Host();
Host(Glib::Dispatcher*);
std::vector<Item> items;
private:
static void busAcquired(GDBusConnection*, const gchar*, gpointer);
@ -23,14 +23,14 @@ class Host {
static void itemUnregistered(SnOrgKdeStatusNotifierWatcher*, const gchar*,
gpointer);
void getBusNameAndObjectPath(const gchar*, gchar**, gchar**);
std::tuple<std::string, std::string> getBusNameAndObjectPath(const gchar*);
void addRegisteredItem(const gchar* service);
uint32_t bus_name_id_;
uint32_t watcher_id_;
std::string bus_name_;
std::string object_path_;
Glib::Dispatcher& dp_;
Glib::Dispatcher* dp_;
GCancellable* cancellable_ = nullptr;
SnOrgKdeStatusNotifierWatcher* watcher_ = nullptr;
};

View File

@ -7,8 +7,12 @@ namespace waybar::modules::SNI {
class Item {
public:
Item(std::string, std::string, Glib::Dispatcher&);
~Item();
Item(std::string, std::string, Glib::Dispatcher*);
std::string bus_name;
std::string object_path;
Gtk::EventBox event_box;
int icon_size;
int effective_icon_size;
Gtk::Image* image;
@ -31,9 +35,7 @@ class Item {
void updateImage();
Glib::RefPtr<Gdk::Pixbuf> getIconByName(std::string name, int size);
std::string bus_name_;
std::string object_path_;
Glib::Dispatcher& dp_;
Glib::Dispatcher* dp_;
GCancellable* cancellable_ = nullptr;
SnOrgKdeStatusNotifierItem* proxy_ = nullptr;
};

View File

@ -5,24 +5,25 @@
namespace waybar::modules::SNI {
typedef enum {
GF_WATCH_TYPE_HOST,
GF_WATCH_TYPE_ITEM
} GfWatchType;
typedef struct {
GfWatchType type;
gchar* service;
gchar* bus_name;
gchar* object_path;
guint watch_id;
} GfWatch;
class Watcher {
public:
Watcher();
~Watcher();
private:
typedef enum {
GF_WATCH_TYPE_HOST,
GF_WATCH_TYPE_ITEM
} GfWatchType;
typedef struct {
GfWatchType type;
Watcher* watcher;
gchar* service;
gchar* bus_name;
gchar* object_path;
guint watch_id;
} GfWatch;
static void busAcquired(GDBusConnection*, const gchar*, gpointer);
static gboolean handleRegisterHost(Watcher*,
GDBusMethodInvocation*, const gchar*);
@ -30,8 +31,8 @@ class Watcher {
GDBusMethodInvocation*, const gchar*);
static GfWatch* gfWatchFind(GSList* list, const gchar* bus_name,
const gchar* object_path);
static GfWatch* gfWatchNew(GfWatchType type,
const gchar* service, const gchar* bus_name, const gchar* object_path);
static GfWatch* gfWatchNew(GfWatchType, const gchar*, const gchar*,
const gchar*, Watcher*);
static void nameVanished(GDBusConnection* connection, const char* name,
gpointer data);