83
84
bool run_local_panel_service();
84
85
gboolean reconnect_to_service(gpointer data);
85
86
void on_proxy_ready_cb(GObject* source, GAsyncResult* res, gpointer data);
86
void on_proxy_name_owner_changed(GDBusProxy* proxy, GParamSpec* pspec,
87
DBusIndicators::Impl* remote);
88
void on_proxy_signal_received(GDBusProxy* proxy,
89
char* sender_name, char* signal_name,
91
DBusIndicators::Impl* remote);
92
87
void request_sync(GDBusProxy* proxy, const char* method, GVariant* name,
94
89
void on_sync_ready_cb(GObject* source, GAsyncResult* res, gpointer data);
113
108
void Sync(GVariant* args, SyncData* data);
114
109
void SyncGeometries(std::string const& name,
115
110
EntryLocationMap const& locations);
111
void OnProxyNameOwnerChanged(GDBusProxy*proxy, GParamSpec *pspec);
112
void OnProxySignalReceived(GDBusProxy* proxy,
115
GVariant* parameters);
117
117
virtual void OnEntryScroll(std::string const& entry_id, int delta);
118
118
virtual void OnEntryShowMenu(std::string const& entry_id,
180
178
// Connect to interesting signals
181
proxy_signal_id_ = g_signal_connect(proxy_, "g-signal",
182
G_CALLBACK(on_proxy_signal_received),
184
proxy_name_id_ = g_signal_connect(proxy_, "notify::g-name-owner",
185
G_CALLBACK(on_proxy_name_owner_changed),
179
signal_manager_.Add (new glib::Signal<void, GDBusProxy*, char*, char*, GVariant*>
180
(proxy_, "g-signal", sigc::mem_fun(this, &Impl::OnProxySignalReceived)));
182
signal_manager_.Add(new glib::Signal<void, GDBusProxy*,GParamSpec*>
183
(proxy_, "notify::g-name-owner", sigc::mem_fun(this, &Impl::OnProxyNameOwnerChanged)));
188
185
RequestSyncAll();
373
370
return g_getenv("PANEL_USE_LOCAL_SERVICE") != NULL;
373
void DBusIndicators::Impl::OnProxyNameOwnerChanged(GDBusProxy* proxy,
376
char* name_owner = g_dbus_proxy_get_name_owner(proxy);
378
if (name_owner == NULL)
380
// The panel service has stopped for some reason. Restart it if not in
382
if (!g_getenv("UNITY_DEV_MODE"))
389
void DBusIndicators::Impl::OnProxySignalReceived(GDBusProxy* proxy,
392
GVariant* parameters)
394
std::string signal_name(signal_name_);
395
if (signal_name == "EntryActivated")
397
const char* entry_name = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
399
owner_->ActivateEntry(entry_name);
402
else if (signal_name == "EntryActivateRequest")
404
const char* entry_name = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
406
owner_->on_entry_activate_request.emit(entry_name);
409
else if (signal_name == "ReSync")
411
const char* id = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
412
bool sync_one = !g_strcmp0 (id, "") == 0;
415
RequestSyncIndicator(id);
421
else if (signal_name == "ActiveMenuPointerMotion")
425
g_variant_get (parameters, "(ii)", &x, &y);
426
owner_->on_menu_pointer_moved.emit(x, y);
428
else if (signal_name == "EntryShowNowChanged")
433
g_variant_get (parameters, "(sb)", &id, &show_now);
434
owner_->SetEntryShowNow(id, show_now);
377
440
DBusIndicators::DBusIndicators()
378
441
: pimpl(new Impl(this))
498
void on_proxy_signal_received(GDBusProxy* proxy,
499
char* sender_name, char* signal_name_,
500
GVariant* parameters,
501
DBusIndicators::Impl* remote)
503
std::string signal_name(signal_name_);
504
if (signal_name == "EntryActivated")
506
const char* entry_name = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
508
remote->owner_->ActivateEntry(entry_name);
511
else if (signal_name == "EntryActivateRequest")
513
const char* entry_name = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
515
remote->owner_->on_entry_activate_request.emit(entry_name);
518
else if (signal_name == "ReSync")
520
const char* id = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL);
521
bool sync_one = !g_strcmp0 (id, "") == 0;
524
remote->RequestSyncIndicator(id);
527
remote->RequestSyncAll();
530
else if (signal_name == "ActiveMenuPointerMotion")
534
g_variant_get (parameters, "(ii)", &x, &y);
535
remote->owner_->on_menu_pointer_moved.emit(x, y);
537
else if (signal_name == "EntryShowNowChanged")
542
g_variant_get (parameters, "(sb)", &id, &show_now);
543
remote->owner_->SetEntryShowNow(id, show_now);
549
void on_proxy_name_owner_changed(GDBusProxy* proxy, GParamSpec* pspec,
550
DBusIndicators::Impl* remote)
552
char* name_owner = g_dbus_proxy_get_name_owner(proxy);
554
if (name_owner == NULL)
556
// The panel service has stopped for some reason. Restart it if not in
558
if (!g_getenv("UNITY_DEV_MODE"))
565
561
void request_sync(GDBusProxy* proxy, const char* method, GVariant* name, SyncData* data)
567
563
g_dbus_proxy_call(proxy, method, name, G_DBUS_CALL_FLAGS_NONE,