/* * Copyright 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . * * Authors: * Charles Kerr */ #include #include #include namespace unity { namespace indicator { namespace datetime { /*** **** ***/ Clock::Clock(): m_cancellable(g_cancellable_new()) { g_bus_get(G_BUS_TYPE_SYSTEM, m_cancellable, onSystemBusReady, this); } Clock::~Clock() { g_cancellable_cancel(m_cancellable); g_clear_object(&m_cancellable); if (m_sleep_subscription_id) g_dbus_connection_signal_unsubscribe(m_system_bus, m_sleep_subscription_id); g_clear_object(&m_system_bus); } void Clock::onSystemBusReady(GObject*, GAsyncResult * res, gpointer gself) { GDBusConnection * system_bus; if ((system_bus = g_bus_get_finish(res, nullptr))) { auto self = static_cast(gself); self->m_system_bus = system_bus; self->m_sleep_subscription_id = g_dbus_connection_signal_subscribe( system_bus, nullptr, "org.freedesktop.login1.Manager", // interface "PrepareForSleep", // signal name "/org/freedesktop/login1", // object path nullptr, // arg0 G_DBUS_SIGNAL_FLAGS_NONE, onPrepareForSleep, self, nullptr); } } void Clock::onPrepareForSleep(GDBusConnection* /*connection*/, const gchar* /*sender_name*/, const gchar* /*object_path*/, const gchar* /*interface_name*/, const gchar* /*signal_name*/, GVariant* /*parameters*/, gpointer gself) { static_cast(gself)->minuteChanged(); } /*** **** ***/ } // namespace datetime } // namespace indicator } // namespace unity