Compare commits
	
		
			2 Commits
		
	
	
		
			ubports/fo
			...
			personal/m
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					ff5e59da02 | ||
| 
						 | 
					17a1b26982 | 
							
								
								
									
										5
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								Makefile
									
									
									
									
									
								
							@@ -41,11 +41,12 @@ SRC = \
 | 
				
			|||||||
  mce_battery.c \
 | 
					  mce_battery.c \
 | 
				
			||||||
  mce_charger.c \
 | 
					  mce_charger.c \
 | 
				
			||||||
  mce_display.c \
 | 
					  mce_display.c \
 | 
				
			||||||
  mce_inactivity.c \
 | 
					 | 
				
			||||||
  mce_proxy.c
 | 
					  mce_proxy.c
 | 
				
			||||||
GEN_SRC = \
 | 
					GEN_SRC = \
 | 
				
			||||||
  com.canonical.Unity.Screen.c
 | 
					  com.canonical.Unity.Screen.c \
 | 
				
			||||||
 | 
					  org.ayatana.indicator.power.Battery.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#  mce_inactivity.c \
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Directories
 | 
					# Directories
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,8 +43,8 @@
 | 
				
			|||||||
#include <mce_battery.h>
 | 
					#include <mce_battery.h>
 | 
				
			||||||
#include <mce_charger.h>
 | 
					#include <mce_charger.h>
 | 
				
			||||||
#include <mce_display.h>
 | 
					#include <mce_display.h>
 | 
				
			||||||
#include <mce_inactivity.h>
 | 
					//#include <mce_inactivity.h>
 | 
				
			||||||
#include <mce_tklock.h>
 | 
					//#include <mce_tklock.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= *
 | 
					/* ========================================================================= *
 | 
				
			||||||
 * MAINLOOP
 | 
					 * MAINLOOP
 | 
				
			||||||
@@ -111,12 +111,12 @@ static const char *display_state_repr(MCE_DISPLAY_STATE state)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    static const char * const lut[] = {
 | 
					    static const char * const lut[] = {
 | 
				
			||||||
        [MCE_DISPLAY_STATE_OFF] = "off",
 | 
					        [MCE_DISPLAY_STATE_OFF] = "off",
 | 
				
			||||||
        [MCE_DISPLAY_STATE_DIM] = "dim",
 | 
					 | 
				
			||||||
        [MCE_DISPLAY_STATE_ON]  = "on",
 | 
					        [MCE_DISPLAY_STATE_ON]  = "on",
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    return lut[state];
 | 
					    return lut[state];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
static const char *tklock_mode_repr(MCE_TKLOCK_MODE mode)
 | 
					static const char *tklock_mode_repr(MCE_TKLOCK_MODE mode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static const char * const lut[] = {
 | 
					    static const char * const lut[] = {
 | 
				
			||||||
@@ -130,6 +130,7 @@ static const char *tklock_mode_repr(MCE_TKLOCK_MODE mode)
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
    return lut[mode];
 | 
					    return lut[mode];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void battery_cb(MceBattery *battery, void *arg)
 | 
					static void battery_cb(MceBattery *battery, void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -159,6 +160,7 @@ static void display_cb(MceDisplay *display, void *arg)
 | 
				
			|||||||
           what_changed);
 | 
					           what_changed);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
static void tklock_cb(MceTklock *tklock, void *arg)
 | 
					static void tklock_cb(MceTklock *tklock, void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const char *what_changed = arg;
 | 
					    const char *what_changed = arg;
 | 
				
			||||||
@@ -169,6 +171,7 @@ static void tklock_cb(MceTklock *tklock, void *arg)
 | 
				
			|||||||
           what_changed);
 | 
					           what_changed);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void inactivity_cb(MceInactivity *inactivity, void *arg)
 | 
					static void inactivity_cb(MceInactivity *inactivity, void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const char *what_changed = arg;
 | 
					    const char *what_changed = arg;
 | 
				
			||||||
@@ -177,6 +180,7 @@ static void inactivity_cb(MceInactivity *inactivity, void *arg)
 | 
				
			|||||||
           bool_repr(inactivity->status),
 | 
					           bool_repr(inactivity->status),
 | 
				
			||||||
           what_changed);
 | 
					           what_changed);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= *
 | 
					/* ========================================================================= *
 | 
				
			||||||
 * MAIN_ENTRY
 | 
					 * MAIN_ENTRY
 | 
				
			||||||
@@ -218,6 +222,7 @@ main(int argc, char **argv)
 | 
				
			|||||||
    gulong display_state_id =
 | 
					    gulong display_state_id =
 | 
				
			||||||
        mce_display_add_state_changed_handler(display, display_cb, "state");
 | 
					        mce_display_add_state_changed_handler(display, display_cb, "state");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
    MceTklock *tklock = mce_tklock_new();
 | 
					    MceTklock *tklock = mce_tklock_new();
 | 
				
			||||||
    gulong tklock_valid_id =
 | 
					    gulong tklock_valid_id =
 | 
				
			||||||
        mce_tklock_add_valid_changed_handler(tklock, tklock_cb, "valid");
 | 
					        mce_tklock_add_valid_changed_handler(tklock, tklock_cb, "valid");
 | 
				
			||||||
@@ -231,7 +236,7 @@ main(int argc, char **argv)
 | 
				
			|||||||
        mce_inactivity_add_valid_changed_handler(inactivity, inactivity_cb, "valid");
 | 
					        mce_inactivity_add_valid_changed_handler(inactivity, inactivity_cb, "valid");
 | 
				
			||||||
    gulong inactivity_status_id =
 | 
					    gulong inactivity_status_id =
 | 
				
			||||||
        mce_inactivity_add_status_changed_handler(inactivity, inactivity_cb, "status");
 | 
					        mce_inactivity_add_status_changed_handler(inactivity, inactivity_cb, "status");
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
    guint timeout_id = 0;
 | 
					    guint timeout_id = 0;
 | 
				
			||||||
    gint timeout_s = (argc > 1) ? strtol(argv[1], NULL, 0) : 0;
 | 
					    gint timeout_s = (argc > 1) ? strtol(argv[1], NULL, 0) : 0;
 | 
				
			||||||
    if( timeout_s > 0)
 | 
					    if( timeout_s > 0)
 | 
				
			||||||
@@ -264,6 +269,7 @@ main(int argc, char **argv)
 | 
				
			|||||||
    mce_display_remove_handler(display, display_state_id);
 | 
					    mce_display_remove_handler(display, display_state_id);
 | 
				
			||||||
    mce_display_unref(display);
 | 
					    mce_display_unref(display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
    mce_tklock_remove_handler(tklock, tklock_valid_id);
 | 
					    mce_tklock_remove_handler(tklock, tklock_valid_id);
 | 
				
			||||||
    mce_tklock_remove_handler(tklock, tklock_mode_id);
 | 
					    mce_tklock_remove_handler(tklock, tklock_mode_id);
 | 
				
			||||||
    mce_tklock_remove_handler(tklock, tklock_locked_id);
 | 
					    mce_tklock_remove_handler(tklock, tklock_locked_id);
 | 
				
			||||||
@@ -272,7 +278,7 @@ main(int argc, char **argv)
 | 
				
			|||||||
    mce_inactivity_remove_handler(inactivity, inactivity_valid_id);
 | 
					    mce_inactivity_remove_handler(inactivity, inactivity_valid_id);
 | 
				
			||||||
    mce_inactivity_remove_handler(inactivity, inactivity_status_id);
 | 
					    mce_inactivity_remove_handler(inactivity, inactivity_status_id);
 | 
				
			||||||
    mce_inactivity_unref(inactivity);
 | 
					    mce_inactivity_unref(inactivity);
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
    printf("exit\n");
 | 
					    printf("exit\n");
 | 
				
			||||||
    return exitcode;
 | 
					    return exitcode;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								spec/org.ayatana.indicator.power.Battery.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								spec/org.ayatana.indicator.power.Battery.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8" ?>
 | 
				
			||||||
 | 
					<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
 | 
				
			||||||
 | 
					<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
 | 
				
			||||||
 | 
					  <interface name="org.ayatana.indicator.power.Battery">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <property name="PowerLevel" type="s" access="read">
 | 
				
			||||||
 | 
					      <doc:doc>
 | 
				
			||||||
 | 
					        <doc:description>
 | 
				
			||||||
 | 
					          <doc:para>The battery's power level. Possible values: 'ok', 'low', 'very_low', 'critical'</doc:para>
 | 
				
			||||||
 | 
					        </doc:description>
 | 
				
			||||||
 | 
					      </doc:doc>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <property name="PowerPercentage" type="i" access="read">
 | 
				
			||||||
 | 
					      <doc:doc>
 | 
				
			||||||
 | 
					        <doc:description>
 | 
				
			||||||
 | 
					          <doc:para>The battery's power level in percentage.</doc:para>
 | 
				
			||||||
 | 
					        </doc:description>
 | 
				
			||||||
 | 
					      </doc:doc>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <property name="IsWarning" type="b" access="read">
 | 
				
			||||||
 | 
					      <doc:doc>
 | 
				
			||||||
 | 
					        <doc:description>
 | 
				
			||||||
 | 
					          <doc:para>Whether or not ayatana-indicator-power-service is warning the user about low battery power.</doc:para>
 | 
				
			||||||
 | 
					        </doc:description>
 | 
				
			||||||
 | 
					      </doc:doc>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <property name="IsDischarging" type="b" access="read">
 | 
				
			||||||
 | 
					      <doc:doc>
 | 
				
			||||||
 | 
					        <doc:description>
 | 
				
			||||||
 | 
					          <doc:para>Whether or not the battery is discharging</doc:para>
 | 
				
			||||||
 | 
					        </doc:description>
 | 
				
			||||||
 | 
					      </doc:doc>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </interface>
 | 
				
			||||||
 | 
					</node>
 | 
				
			||||||
@@ -38,14 +38,16 @@
 | 
				
			|||||||
#include "mce_proxy.h"
 | 
					#include "mce_proxy.h"
 | 
				
			||||||
#include "mce_log_p.h"
 | 
					#include "mce_log_p.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mce/dbus-names.h>
 | 
					 | 
				
			||||||
#include <mce/mode-names.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <gutil_misc.h>
 | 
					#include <gutil_misc.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Generated headers */
 | 
					/* Generated headers */
 | 
				
			||||||
#include "com.nokia.mce.request.h"
 | 
					#include "org.ayatana.indicator.power.Battery.h"
 | 
				
			||||||
#include "com.nokia.mce.signal.h"
 | 
					
 | 
				
			||||||
 | 
					#define MCE_BATTERY_STATUS_OK "ok"
 | 
				
			||||||
 | 
					#define MCE_BATTERY_STATUS_LOW "low"
 | 
				
			||||||
 | 
					#define MCE_BATTERY_STATUS_EMPTY "very_low"
 | 
				
			||||||
 | 
					#define MCE_BATTERY_STATUS_CRITICAL "critical"
 | 
				
			||||||
 | 
					#define MCE_BATTERY_STATUS_UNKNOWN "unknown"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum mce_battery_ind {
 | 
					enum mce_battery_ind {
 | 
				
			||||||
    BATTERY_IND_LEVEL,
 | 
					    BATTERY_IND_LEVEL,
 | 
				
			||||||
@@ -65,7 +67,7 @@ struct mce_battery_priv {
 | 
				
			|||||||
    MceProxy* proxy;
 | 
					    MceProxy* proxy;
 | 
				
			||||||
    BATTERY_FLAGS flags;
 | 
					    BATTERY_FLAGS flags;
 | 
				
			||||||
    gulong proxy_valid_id;
 | 
					    gulong proxy_valid_id;
 | 
				
			||||||
    gulong battery_ind_id[BATTERY_IND_COUNT];
 | 
					    gulong battery_ind_id;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum mce_battery_signal {
 | 
					enum mce_battery_signal {
 | 
				
			||||||
@@ -133,13 +135,13 @@ mce_battery_status_update(
 | 
				
			|||||||
    MceBatteryPriv* priv = self->priv;
 | 
					    MceBatteryPriv* priv = self->priv;
 | 
				
			||||||
    MCE_BATTERY_STATUS new_status;
 | 
					    MCE_BATTERY_STATUS new_status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!g_strcmp0(status, MCE_BATTERY_STATUS_FULL)) {
 | 
					    if (!g_strcmp0(status, MCE_BATTERY_STATUS_OK)) {
 | 
				
			||||||
        new_status = MCE_BATTERY_FULL;
 | 
					 | 
				
			||||||
    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_OK)) {
 | 
					 | 
				
			||||||
        new_status = MCE_BATTERY_OK;
 | 
					        new_status = MCE_BATTERY_OK;
 | 
				
			||||||
    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_LOW)) {
 | 
					    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_LOW)) {
 | 
				
			||||||
        new_status = MCE_BATTERY_LOW;
 | 
					        new_status = MCE_BATTERY_LOW;
 | 
				
			||||||
    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_EMPTY)) {
 | 
					    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_EMPTY)) {
 | 
				
			||||||
 | 
					        new_status = MCE_BATTERY_LOW;
 | 
				
			||||||
 | 
					    } else if (!g_strcmp0(status, MCE_BATTERY_STATUS_CRITICAL)) {
 | 
				
			||||||
        new_status = MCE_BATTERY_EMPTY;
 | 
					        new_status = MCE_BATTERY_EMPTY;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        GASSERT(!g_strcmp0(status, MCE_BATTERY_STATUS_UNKNOWN));
 | 
					        GASSERT(!g_strcmp0(status, MCE_BATTERY_STATUS_UNKNOWN));
 | 
				
			||||||
@@ -153,73 +155,31 @@ mce_battery_status_update(
 | 
				
			|||||||
    mce_battery_check_valid(self);
 | 
					    mce_battery_check_valid(self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					static void
 | 
				
			||||||
void
 | 
					on_properties_changed (GDBusProxy*          /* proxy */,
 | 
				
			||||||
mce_battery_level_query_done(
 | 
					                       GVariant            *changed_properties,
 | 
				
			||||||
    GObject* proxy,
 | 
					                       const gchar* const* /* invalidated_properties */,
 | 
				
			||||||
    GAsyncResult* result,
 | 
					                       gpointer             user_data)
 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    MceBattery* self = MCE_BATTERY(arg);
 | 
					  GVariantIter iter;
 | 
				
			||||||
    GError* error = NULL;
 | 
					  const gchar *key;
 | 
				
			||||||
 | 
					  GVariant *value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_variant_iter_init (&iter, changed_properties);
 | 
				
			||||||
 | 
					  while (g_variant_iter_next (&iter, "{&sv}", &key, &value))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!g_strcmp0(key, "PowerPercentage")) {
 | 
				
			||||||
            gint level;
 | 
					            gint level;
 | 
				
			||||||
 | 
					            g_variant_get (value, "i", &level);
 | 
				
			||||||
    if (com_nokia_mce_request_call_get_battery_level_finish(
 | 
					            mce_battery_level_update(MCE_BATTERY(user_data), level);
 | 
				
			||||||
        COM_NOKIA_MCE_REQUEST(proxy), &level, result, &error)) {
 | 
					        } else if (!g_strcmp0(key, "PowerLevel")) {
 | 
				
			||||||
        GDEBUG("Battery level is currently %d", level);
 | 
					            const char* status;
 | 
				
			||||||
        mce_battery_level_update(self, level);
 | 
					            g_variant_get (value, "s", &status);
 | 
				
			||||||
    } else {
 | 
					            mce_battery_status_update(MCE_BATTERY(user_data), status);
 | 
				
			||||||
        /* Should retry? */
 | 
					 | 
				
			||||||
        GWARN("Failed to query battery level %s", GERRMSG(error));
 | 
					 | 
				
			||||||
        g_error_free(error);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    mce_battery_unref(self);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					      g_variant_unref (value);
 | 
				
			||||||
void
 | 
					 | 
				
			||||||
mce_battery_status_query_done(
 | 
					 | 
				
			||||||
    GObject* proxy,
 | 
					 | 
				
			||||||
    GAsyncResult* result,
 | 
					 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    MceBattery* self = MCE_BATTERY(arg);
 | 
					 | 
				
			||||||
    GError* error = NULL;
 | 
					 | 
				
			||||||
    char* status = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (com_nokia_mce_request_call_get_battery_status_finish(
 | 
					 | 
				
			||||||
        COM_NOKIA_MCE_REQUEST(proxy), &status, result, &error)) {
 | 
					 | 
				
			||||||
        GDEBUG("Battery is currently %s", status);
 | 
					 | 
				
			||||||
        mce_battery_status_update(self, status);
 | 
					 | 
				
			||||||
        g_free(status);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        /* Should retry? */
 | 
					 | 
				
			||||||
        GWARN("Failed to query battery status %s", GERRMSG(error));
 | 
					 | 
				
			||||||
        g_error_free(error);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    mce_battery_unref(self);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
mce_battery_level_ind(
 | 
					 | 
				
			||||||
    ComNokiaMceSignal* proxy,
 | 
					 | 
				
			||||||
    gint level,
 | 
					 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    GDEBUG("Battery level is %d", level);
 | 
					 | 
				
			||||||
    mce_battery_level_update(MCE_BATTERY(arg), level);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
mce_battery_status_ind(
 | 
					 | 
				
			||||||
    ComNokiaMceSignal* proxy,
 | 
					 | 
				
			||||||
    const char* status,
 | 
					 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    GDEBUG("Battery is %s", status);
 | 
					 | 
				
			||||||
    mce_battery_status_update(MCE_BATTERY(arg), status);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					static
 | 
				
			||||||
@@ -236,24 +196,17 @@ mce_battery_query(
 | 
				
			|||||||
     * for the valid signal before we can connect the battery state
 | 
					     * for the valid signal before we can connect the battery state
 | 
				
			||||||
     * signal and submit the initial query.
 | 
					     * signal and submit the initial query.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    if (proxy->signal) {
 | 
					    if (proxy->ayatana_request && !priv->battery_ind_id) {
 | 
				
			||||||
        if (!priv->battery_ind_id[BATTERY_IND_LEVEL]) {
 | 
					        priv->battery_ind_id = g_signal_connect(proxy->ayatana_request, "g-properties-changed",
 | 
				
			||||||
            priv->battery_ind_id[BATTERY_IND_LEVEL] =
 | 
					            G_CALLBACK(on_properties_changed), self);
 | 
				
			||||||
                g_signal_connect(proxy->signal, "battery-level-ind",
 | 
					 | 
				
			||||||
                    G_CALLBACK(mce_battery_level_ind), self);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!priv->battery_ind_id[BATTERY_IND_STATUS]) {
 | 
					    if (proxy->ayatana_request && proxy->valid) {
 | 
				
			||||||
            priv->battery_ind_id[BATTERY_IND_STATUS] =
 | 
					        const char* status = org_ayatana_indicator_power_battery_get_power_level(proxy->ayatana_request);
 | 
				
			||||||
                g_signal_connect(proxy->signal, "battery-status-ind",
 | 
					        mce_battery_status_update(self, status);
 | 
				
			||||||
                    G_CALLBACK(mce_battery_status_ind), self);
 | 
					
 | 
				
			||||||
        }
 | 
					        u_int32_t level = org_ayatana_indicator_power_battery_get_power_percentage(proxy->ayatana_request);
 | 
				
			||||||
    }
 | 
					        mce_battery_level_update(self, level);
 | 
				
			||||||
    if (proxy->request && proxy->valid) {
 | 
					 | 
				
			||||||
        com_nokia_mce_request_call_get_battery_level(proxy->request, NULL,
 | 
					 | 
				
			||||||
            mce_battery_level_query_done, mce_battery_ref(self));
 | 
					 | 
				
			||||||
        com_nokia_mce_request_call_get_battery_status(proxy->request, NULL,
 | 
					 | 
				
			||||||
            mce_battery_status_query_done, mce_battery_ref(self));
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -389,8 +342,7 @@ mce_battery_finalize(
 | 
				
			|||||||
    MceBattery* self = MCE_BATTERY(object);
 | 
					    MceBattery* self = MCE_BATTERY(object);
 | 
				
			||||||
    MceBatteryPriv* priv = self->priv;
 | 
					    MceBatteryPriv* priv = self->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gutil_disconnect_handlers(priv->proxy->signal, priv->battery_ind_id,
 | 
					    mce_proxy_remove_handler(priv->proxy, priv->battery_ind_id);
 | 
				
			||||||
        G_N_ELEMENTS(priv->battery_ind_id));
 | 
					 | 
				
			||||||
    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
					    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
				
			||||||
    mce_proxy_unref(priv->proxy);
 | 
					    mce_proxy_unref(priv->proxy);
 | 
				
			||||||
    G_OBJECT_CLASS(PARENT_CLASS)->finalize(object);
 | 
					    G_OBJECT_CLASS(PARENT_CLASS)->finalize(object);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,14 +38,14 @@
 | 
				
			|||||||
#include "mce_proxy.h"
 | 
					#include "mce_proxy.h"
 | 
				
			||||||
#include "mce_log_p.h"
 | 
					#include "mce_log_p.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mce/dbus-names.h>
 | 
					 | 
				
			||||||
#include <mce/mode-names.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <gutil_misc.h>
 | 
					#include <gutil_misc.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MCE_CHARGER_STATE_ON        "on"
 | 
				
			||||||
 | 
					#define MCE_CHARGER_STATE_OFF       "off"
 | 
				
			||||||
 | 
					#define MCE_CHARGER_STATE_UNKNOWN   "unknown"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Generated headers */
 | 
					/* Generated headers */
 | 
				
			||||||
#include "com.nokia.mce.request.h"
 | 
					#include "org.ayatana.indicator.power.Battery.h"
 | 
				
			||||||
#include "com.nokia.mce.signal.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct mce_charger_priv {
 | 
					struct mce_charger_priv {
 | 
				
			||||||
    MceProxy* proxy;
 | 
					    MceProxy* proxy;
 | 
				
			||||||
@@ -102,44 +102,27 @@ mce_charger_state_update(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					static void
 | 
				
			||||||
void
 | 
					on_properties_changed (GDBusProxy*          /* proxy */,
 | 
				
			||||||
mce_charger_state_query_done(
 | 
					                       GVariant            *changed_properties,
 | 
				
			||||||
    GObject* proxy,
 | 
					                       const gchar* const* /* invalidated_properties */,
 | 
				
			||||||
    GAsyncResult* result,
 | 
					                       gpointer             user_data)
 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GError* error = NULL;
 | 
					  GVariantIter iter;
 | 
				
			||||||
    char* state = NULL;
 | 
					  const gchar *key;
 | 
				
			||||||
    MceCharger* self = MCE_CHARGER(arg);
 | 
					  GVariant *value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (com_nokia_mce_request_call_get_charger_state_finish(
 | 
					  g_variant_iter_init (&iter, changed_properties);
 | 
				
			||||||
        COM_NOKIA_MCE_REQUEST(proxy), &state, result, &error)) {
 | 
					  while (g_variant_iter_next (&iter, "{&sv}", &key, &value))
 | 
				
			||||||
        GDEBUG("Charger is currently %s", state);
 | 
					    {
 | 
				
			||||||
        mce_charger_state_update(self, state);
 | 
					        if (!g_strcmp0(key, "IsDischarging")) {
 | 
				
			||||||
        g_free(state);
 | 
					            gboolean state;
 | 
				
			||||||
    } else {
 | 
					            g_variant_get (value, "b", &state);
 | 
				
			||||||
        /*
 | 
					            mce_charger_state_update(MCE_CHARGER(user_data), state ? MCE_CHARGER_STATE_OFF : MCE_CHARGER_STATE_ON);
 | 
				
			||||||
         * We could retry but it's probably not worth the trouble
 | 
					 | 
				
			||||||
         * because the next time charger state changes we receive
 | 
					 | 
				
			||||||
         * charger_state_ind signal and sync our state with mce.
 | 
					 | 
				
			||||||
         * Until then, this object stays invalid.
 | 
					 | 
				
			||||||
         */
 | 
					 | 
				
			||||||
        GWARN("Failed to query charger state %s", GERRMSG(error));
 | 
					 | 
				
			||||||
        g_error_free(error);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    mce_charger_unref(self);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					      g_variant_unref (value);
 | 
				
			||||||
void
 | 
					    }
 | 
				
			||||||
mce_charger_state_ind(
 | 
					 | 
				
			||||||
    ComNokiaMceSignal* proxy,
 | 
					 | 
				
			||||||
    const char* state,
 | 
					 | 
				
			||||||
    gpointer arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    GDEBUG("Charger is %s", state);
 | 
					 | 
				
			||||||
    mce_charger_state_update(MCE_CHARGER(arg), state);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					static
 | 
				
			||||||
@@ -156,13 +139,14 @@ mce_charger_state_query(
 | 
				
			|||||||
     * for the valid signal before we can connect the charger state
 | 
					     * for the valid signal before we can connect the charger state
 | 
				
			||||||
     * signal and submit the initial query.
 | 
					     * signal and submit the initial query.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    if (proxy->signal && !priv->charger_state_ind_id) {
 | 
					    if (proxy->ayatana_request && !priv->charger_state_ind_id) {
 | 
				
			||||||
        priv->charger_state_ind_id = g_signal_connect(proxy->signal,
 | 
					        priv->charger_state_ind_id = g_signal_connect(proxy->ayatana_request, "g-properties-changed",
 | 
				
			||||||
            MCE_CHARGER_STATE_SIG, G_CALLBACK(mce_charger_state_ind), self);
 | 
					                G_CALLBACK(on_properties_changed), self);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (proxy->request && proxy->valid) {
 | 
					
 | 
				
			||||||
        com_nokia_mce_request_call_get_charger_state(proxy->request, NULL,
 | 
					    if (proxy->ayatana_request && proxy->valid) {
 | 
				
			||||||
            mce_charger_state_query_done, mce_charger_ref(self));
 | 
					        gboolean state = org_ayatana_indicator_power_battery_get_is_discharging(proxy->ayatana_request);
 | 
				
			||||||
 | 
					        mce_charger_state_update(self, state ? MCE_CHARGER_STATE_OFF : MCE_CHARGER_STATE_ON);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -290,7 +274,7 @@ mce_charger_finalize(
 | 
				
			|||||||
    MceChargerPriv* priv = self->priv;
 | 
					    MceChargerPriv* priv = self->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->charger_state_ind_id) {
 | 
					    if (priv->charger_state_ind_id) {
 | 
				
			||||||
        g_signal_handler_disconnect(priv->proxy->signal,
 | 
					        g_signal_handler_disconnect(priv->proxy->ayatana_request,
 | 
				
			||||||
            priv->charger_state_ind_id);
 | 
					            priv->charger_state_ind_id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
					    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -149,12 +149,12 @@ mce_display_status_query(
 | 
				
			|||||||
     * for the valid signal before we can connect the display state
 | 
					     * for the valid signal before we can connect the display state
 | 
				
			||||||
     * signal and submit the initial query.
 | 
					     * signal and submit the initial query.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    if (proxy->signal && !priv->display_status_ind_id) {
 | 
					    if (proxy->unity_request && !priv->display_status_ind_id) {
 | 
				
			||||||
        priv->display_status_ind_id = g_signal_connect(proxy->signal,
 | 
					        priv->display_status_ind_id = g_signal_connect(proxy->unity_request,
 | 
				
			||||||
            MCE_DISPLAY_SIG, G_CALLBACK(mce_display_power_state_change), self);
 | 
					            MCE_DISPLAY_SIG, G_CALLBACK(mce_display_power_state_change), self);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (proxy->request && proxy->valid) {
 | 
					    if (proxy->unity_request && proxy->valid) {
 | 
				
			||||||
        com_canonical_unity_screen_call_get_display_power_state(proxy->request, NULL,
 | 
					        com_canonical_unity_screen_call_get_display_power_state(proxy->unity_request, NULL,
 | 
				
			||||||
            mce_display_status_query_done, mce_display_ref(self));
 | 
					            mce_display_status_query_done, mce_display_ref(self));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -283,7 +283,7 @@ mce_display_finalize(
 | 
				
			|||||||
    MceDisplayPriv* priv = self->priv;
 | 
					    MceDisplayPriv* priv = self->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->display_status_ind_id) {
 | 
					    if (priv->display_status_ind_id) {
 | 
				
			||||||
        g_signal_handler_disconnect(priv->proxy->signal,
 | 
					        g_signal_handler_disconnect(priv->proxy->unity_request,
 | 
				
			||||||
            priv->display_status_ind_id);
 | 
					            priv->display_status_ind_id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
					    mce_proxy_remove_handler(priv->proxy, priv->proxy_valid_id);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,12 +39,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Generated headers */
 | 
					/* Generated headers */
 | 
				
			||||||
#include "com.canonical.Unity.Screen.h"
 | 
					#include "com.canonical.Unity.Screen.h"
 | 
				
			||||||
 | 
					#include "org.ayatana.indicator.power.Battery.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GLOG_MODULE_DEFINE("mce");
 | 
					GLOG_MODULE_DEFINE("mce");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct mce_proxy_priv {
 | 
					struct mce_proxy_priv {
 | 
				
			||||||
    GDBusConnection* bus;
 | 
					    GDBusConnection* bus;
 | 
				
			||||||
 | 
					    GDBusConnection* session_bus;
 | 
				
			||||||
    guint mce_watch_id;
 | 
					    guint mce_watch_id;
 | 
				
			||||||
 | 
					    guint ayatana_watch_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gboolean unity_valid;
 | 
				
			||||||
 | 
					    gboolean ayatana_valid;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum mce_proxy_signal {
 | 
					enum mce_proxy_signal {
 | 
				
			||||||
@@ -56,7 +62,9 @@ enum mce_proxy_signal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define MCE_SERVICE "com.canonical.Unity.Screen"
 | 
					#define MCE_SERVICE "com.canonical.Unity.Screen"
 | 
				
			||||||
#define MCE_REQUEST_PATH "/com/canonical/Unity/Screen"
 | 
					#define MCE_REQUEST_PATH "/com/canonical/Unity/Screen"
 | 
				
			||||||
#define MCE_SIGNAL_PATH "/com/canonical/Unity/Screen"
 | 
					
 | 
				
			||||||
 | 
					#define AYATANA_SERVICE "org.ayatana.indicator.power"
 | 
				
			||||||
 | 
					#define AYATANA_REQUEST_PATH "/org/ayatana/indicator/power/Battery"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static guint mce_proxy_signals[SIGNAL_COUNT] = { 0 };
 | 
					static guint mce_proxy_signals[SIGNAL_COUNT] = { 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -107,11 +115,16 @@ mce_proxy_init_check(
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    MceProxyPriv* priv = self->priv;
 | 
					    MceProxyPriv* priv = self->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (self->signal && self->request && !priv->mce_watch_id) {
 | 
					    if ( self->unity_request && !priv->mce_watch_id) {
 | 
				
			||||||
        priv->mce_watch_id = g_bus_watch_name_on_connection(priv->bus,
 | 
					        priv->mce_watch_id = g_bus_watch_name_on_connection(priv->bus,
 | 
				
			||||||
            MCE_SERVICE, G_BUS_NAME_WATCHER_FLAGS_NONE,
 | 
					            MCE_SERVICE, G_BUS_NAME_WATCHER_FLAGS_NONE,
 | 
				
			||||||
            mce_name_appeared, mce_name_vanished, self, NULL);
 | 
					            mce_name_appeared, mce_name_vanished, self, NULL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (self->ayatana_request && !priv->ayatana_watch_id) {
 | 
				
			||||||
 | 
					        priv->ayatana_watch_id = g_bus_watch_name_on_connection(priv->session_bus,
 | 
				
			||||||
 | 
					            AYATANA_SERVICE, G_BUS_NAME_WATCHER_FLAGS_NONE,
 | 
				
			||||||
 | 
					            mce_name_appeared, mce_name_vanished, self, NULL);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static
 | 
					static
 | 
				
			||||||
@@ -124,9 +137,9 @@ mce_proxy_request_proxy_new_finished(
 | 
				
			|||||||
    MceProxy* self = MCE_PROXY(arg);
 | 
					    MceProxy* self = MCE_PROXY(arg);
 | 
				
			||||||
    GError* error = NULL;
 | 
					    GError* error = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GASSERT(!self->request);
 | 
					    GASSERT(!self->unity_request);
 | 
				
			||||||
    self->request = com_canonical_unity_screen_proxy_new_finish(result, &error);
 | 
					    self->unity_request = com_canonical_unity_screen_proxy_new_finish(result, &error);
 | 
				
			||||||
    if (self->request) {
 | 
					    if (self->unity_request) {
 | 
				
			||||||
        mce_proxy_init_check(self);
 | 
					        mce_proxy_init_check(self);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        GERR("Failed to initialize MCE request proxy: %s", GERRMSG(error));
 | 
					        GERR("Failed to initialize MCE request proxy: %s", GERRMSG(error));
 | 
				
			||||||
@@ -137,7 +150,7 @@ mce_proxy_request_proxy_new_finished(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static
 | 
					static
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
mce_proxy_signal_proxy_new_finished(
 | 
					mce_proxy_request_proxy_session_new_finished(
 | 
				
			||||||
    GObject* object,
 | 
					    GObject* object,
 | 
				
			||||||
    GAsyncResult* result,
 | 
					    GAsyncResult* result,
 | 
				
			||||||
    gpointer arg)
 | 
					    gpointer arg)
 | 
				
			||||||
@@ -145,12 +158,12 @@ mce_proxy_signal_proxy_new_finished(
 | 
				
			|||||||
    MceProxy* self = MCE_PROXY(arg);
 | 
					    MceProxy* self = MCE_PROXY(arg);
 | 
				
			||||||
    GError* error = NULL;
 | 
					    GError* error = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GASSERT(!self->signal);
 | 
					    GASSERT(!self->ayatana_request);
 | 
				
			||||||
    self->signal = com_canonical_unity_screen_proxy_new_finish(result, &error);
 | 
					    self->ayatana_request = org_ayatana_indicator_power_battery_proxy_new_finish(result, &error);
 | 
				
			||||||
    if (self->signal) {
 | 
					    if (self->ayatana_request) {
 | 
				
			||||||
        mce_proxy_init_check(self);
 | 
					        mce_proxy_init_check(self);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        GERR("Failed to initialize MCE signal proxy: %s", GERRMSG(error));
 | 
					        GERR("Failed to initialize MCE ayatana request proxy: %s", GERRMSG(error));
 | 
				
			||||||
        g_error_free(error);
 | 
					        g_error_free(error);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    mce_proxy_unref(self);
 | 
					    mce_proxy_unref(self);
 | 
				
			||||||
@@ -170,15 +183,10 @@ mce_proxy_bus_get_finished(
 | 
				
			|||||||
    priv->bus = g_bus_get_finish(result, &error);
 | 
					    priv->bus = g_bus_get_finish(result, &error);
 | 
				
			||||||
    if (priv->bus) {
 | 
					    if (priv->bus) {
 | 
				
			||||||
        com_canonical_unity_screen_proxy_new(priv->bus,
 | 
					        com_canonical_unity_screen_proxy_new(priv->bus,
 | 
				
			||||||
            G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
 | 
					            G_DBUS_PROXY_FLAGS_NONE,
 | 
				
			||||||
            MCE_SERVICE, MCE_REQUEST_PATH, NULL,
 | 
					            MCE_SERVICE, MCE_REQUEST_PATH, NULL,
 | 
				
			||||||
            mce_proxy_request_proxy_new_finished,
 | 
					            mce_proxy_request_proxy_new_finished,
 | 
				
			||||||
            mce_proxy_ref(self));
 | 
					            mce_proxy_ref(self));
 | 
				
			||||||
        com_canonical_unity_screen_proxy_new(priv->bus,
 | 
					 | 
				
			||||||
            G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
 | 
					 | 
				
			||||||
            MCE_SERVICE, MCE_SIGNAL_PATH, NULL,
 | 
					 | 
				
			||||||
            mce_proxy_signal_proxy_new_finished,
 | 
					 | 
				
			||||||
            mce_proxy_ref(self));
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        GERR("Failed to attach to system bus: %s", GERRMSG(error));
 | 
					        GERR("Failed to attach to system bus: %s", GERRMSG(error));
 | 
				
			||||||
        g_error_free(error);
 | 
					        g_error_free(error);
 | 
				
			||||||
@@ -186,6 +194,31 @@ mce_proxy_bus_get_finished(
 | 
				
			|||||||
    mce_proxy_unref(self);
 | 
					    mce_proxy_unref(self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					mce_proxy_session_bus_get_finished(
 | 
				
			||||||
 | 
					    GObject* object,
 | 
				
			||||||
 | 
					    GAsyncResult* result,
 | 
				
			||||||
 | 
					    gpointer arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    MceProxy* self = MCE_PROXY(arg);
 | 
				
			||||||
 | 
					    MceProxyPriv* priv = self->priv;
 | 
				
			||||||
 | 
					    GError* error = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv->session_bus = g_bus_get_finish(result, &error);
 | 
				
			||||||
 | 
					    if (priv->session_bus) {
 | 
				
			||||||
 | 
					        org_ayatana_indicator_power_battery_proxy_new(priv->session_bus,
 | 
				
			||||||
 | 
					            G_DBUS_PROXY_FLAGS_NONE,
 | 
				
			||||||
 | 
					            AYATANA_SERVICE, AYATANA_REQUEST_PATH, NULL,
 | 
				
			||||||
 | 
					            mce_proxy_request_proxy_session_new_finished,
 | 
				
			||||||
 | 
					            mce_proxy_ref(self));
 | 
				
			||||||
 | 
					    } else{
 | 
				
			||||||
 | 
					        GERR("Failed to attach to session bus: %s", GERRMSG(error));
 | 
				
			||||||
 | 
					        g_error_free(error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    mce_proxy_unref(self);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MceProxy*
 | 
					MceProxy*
 | 
				
			||||||
mce_proxy_new()
 | 
					mce_proxy_new()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -200,6 +233,8 @@ mce_proxy_new()
 | 
				
			|||||||
        mce_proxy_instance = g_object_new(MCE_PROXY_TYPE, NULL);
 | 
					        mce_proxy_instance = g_object_new(MCE_PROXY_TYPE, NULL);
 | 
				
			||||||
        g_bus_get(G_BUS_TYPE_SYSTEM, NULL, mce_proxy_bus_get_finished,
 | 
					        g_bus_get(G_BUS_TYPE_SYSTEM, NULL, mce_proxy_bus_get_finished,
 | 
				
			||||||
            mce_proxy_ref(mce_proxy_instance));
 | 
					            mce_proxy_ref(mce_proxy_instance));
 | 
				
			||||||
 | 
					        g_bus_get(G_BUS_TYPE_SESSION, NULL, mce_proxy_session_bus_get_finished,
 | 
				
			||||||
 | 
					            mce_proxy_ref(mce_proxy_instance));
 | 
				
			||||||
        g_object_add_weak_pointer(G_OBJECT(mce_proxy_instance),
 | 
					        g_object_add_weak_pointer(G_OBJECT(mce_proxy_instance),
 | 
				
			||||||
            (gpointer*)(&mce_proxy_instance));
 | 
					            (gpointer*)(&mce_proxy_instance));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -265,15 +300,21 @@ mce_proxy_finalize(
 | 
				
			|||||||
    if (priv->mce_watch_id) {
 | 
					    if (priv->mce_watch_id) {
 | 
				
			||||||
        g_bus_unwatch_name(priv->mce_watch_id);
 | 
					        g_bus_unwatch_name(priv->mce_watch_id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (self->signal) {
 | 
					    if (priv->ayatana_watch_id) {
 | 
				
			||||||
        g_object_unref(self->signal);
 | 
					        g_bus_unwatch_name(priv->ayatana_watch_id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (self->request) {
 | 
					    if (self->unity_request) {
 | 
				
			||||||
        g_object_unref(self->request);
 | 
					        g_object_unref(self->unity_request);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (self->ayatana_request) {
 | 
				
			||||||
 | 
					        g_object_unref(self->ayatana_request);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (priv->bus) {
 | 
					    if (priv->bus) {
 | 
				
			||||||
        g_object_unref(priv->bus);
 | 
					        g_object_unref(priv->bus);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (priv->session_bus) {
 | 
				
			||||||
 | 
					        g_object_unref(priv->session_bus);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    G_OBJECT_CLASS(PARENT_CLASS)->finalize(object);
 | 
					    G_OBJECT_CLASS(PARENT_CLASS)->finalize(object);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,13 +43,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef struct mce_proxy_priv MceProxyPriv;
 | 
					typedef struct mce_proxy_priv MceProxyPriv;
 | 
				
			||||||
struct _ComCanonicalUnityScreen;
 | 
					struct _ComCanonicalUnityScreen;
 | 
				
			||||||
 | 
					struct _OrgAyatanaIndicatorPowerBattery;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct mce_proxy {
 | 
					typedef struct mce_proxy {
 | 
				
			||||||
    GObject object;
 | 
					    GObject object;
 | 
				
			||||||
    MceProxyPriv* priv;
 | 
					    MceProxyPriv* priv;
 | 
				
			||||||
    gboolean valid;
 | 
					    gboolean valid;
 | 
				
			||||||
    struct _ComCanonicalUnityScreen* signal;
 | 
					    struct _ComCanonicalUnityScreen* unity_request;
 | 
				
			||||||
    struct _ComCanonicalUnityScreen* request;
 | 
					    struct _OrgAyatanaIndicatorPowerBattery* ayatana_request;
 | 
				
			||||||
} MceProxy;
 | 
					} MceProxy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef void
 | 
					typedef void
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user