20
20
#include <stdlib.h>
21
21
#include <cairo-dock.h>
23
#include "powermanager-draw.h"
23
#include "powermanager-struct.h"
24
24
#include "powermanager-config.h"
25
#include "powermanager-dbus.h"
25
#include "powermanager-common.h"
26
#include "powermanager-upower.h"
26
27
#include "powermanager-menu-functions.h"
27
#include "powermanager-struct.h"
28
#include "powermanager-draw.h"
28
29
#include "powermanager-init.h"
31
32
CD_APPLET_DEFINITION (N_("PowerManager"),
33
34
CAIRO_DOCK_CATEGORY_APPLET_SYSTEM,
34
N_("A power manager for laptop batteries. Works with ACPI and DBus."),
35
"Necropotame (Adrien Pilleboue)")
35
N_("This applet displays the current state of your <b>laptop battery</b>: charge, time remaining, etc\n"
36
"<b>Click</b> on the icon to have useful inforamtion,\n"
37
"<b>Right-click</b> on the icon to hibernate or suspend the system."),
38
"Necropotame (Adrien Pilleboue) and Fabounet")
37
41
static void _set_data_renderer (CairoDockModuleInstance *myApplet, gboolean bReload)
51
55
memset (&attr, 0, sizeof (CairoGraphAttribute));
52
56
pRenderAttr = CAIRO_DATA_RENDERER_ATTRIBUTE (&attr);
53
57
pRenderAttr->cModelName = "graph";
54
pRenderAttr->iMemorySize = (myIcon->fWidth > 1 ? myIcon->fWidth : 32); // fWidht peut etre <= 1 en mode desklet au chargement.
58
pRenderAttr->iMemorySize = (myIcon->fWidth > 1 ? myIcon->fWidth : 32); // fWidth peut etre <= 1 en mode desklet au chargement.
55
59
attr.iType = myConfig.iGraphType;
57
61
attr.fHighColor = myConfig.fHigholor;
82
86
CD_APPLET_INIT_BEGIN
86
89
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
87
90
CD_APPLET_ALLOW_NO_CLICKABLE_DESKLET;
90
// on ne charge pas toutes les surfaces, ce qui economise de la memoire, et du temps au chargement, car ce n'est pas necessaire. En effet, on ne redessine que si il y'a changement. Or la batterie se vide lentement, et la recharge n'est pas non plus fulgurante, donc au total on redesine reellement l'icone 1 fois toutes les 5 minutes peut-etre, ce qui ne justifie pas de pre-charger les surfaces.
92
if (cd_powermanager_find_battery())
94
myData.dbus_enable = dbus_connect_to_bus (); // pour le changement d'etat.
97
// Initialisation du rendu.
98
_set_data_renderer (myApplet, FALSE);
100
if (myConfig.cEmblemIconName == NULL)
101
myData.pEmblem = CD_APPLET_MAKE_EMBLEM (MY_APPLET_SHARE_DATA_DIR"/charge.svg");
103
myData.pEmblem = CD_APPLET_MAKE_EMBLEM (myConfig.cEmblemIconName);
104
cairo_dock_set_emblem_position (myData.pEmblem, CAIRO_DOCK_EMBLEM_MIDDLE);
106
if (myConfig.iDisplayType == CD_POWERMANAGER_GAUGE || myConfig.iDisplayType == CD_POWERMANAGER_GRAPH)
109
CD_APPLET_RENDER_NEW_DATA_ON_MY_ICON (&x);
112
// initialisation des parametres pour le 1er redessin.
113
myData.prev_battery_present = TRUE;
114
myData.previous_battery_charge = -1;
115
myData.previous_battery_time = -1;
116
myData.alerted = TRUE;
117
myData.bCritical = TRUE;
119
myData.checkLoop = g_timeout_add_seconds (myConfig.iCheckInterval, (GSourceFunc) update_stats, (gpointer) NULL);
93
_set_data_renderer (myApplet, FALSE);
94
if (myConfig.cEmblemIconName == NULL)
95
myData.pEmblem = CD_APPLET_MAKE_EMBLEM (MY_APPLET_SHARE_DATA_DIR"/charge.svg");
123
CD_APPLET_SET_LOCAL_IMAGE_ON_MY_ICON ("sector.svg");
97
myData.pEmblem = CD_APPLET_MAKE_EMBLEM (myConfig.cEmblemIconName);
98
cairo_dock_set_emblem_position (myData.pEmblem, CAIRO_DOCK_EMBLEM_MIDDLE);
100
cd_powermanager_start ();
126
102
CD_APPLET_REGISTER_FOR_CLICK_EVENT;
127
103
CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
132
108
CD_APPLET_UNREGISTER_FOR_CLICK_EVENT;
133
109
CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT;
135
dbus_disconnect_from_bus ();
137
if(myData.checkLoop != 0)
111
cairo_dock_discard_task (myData.pTask);
113
if (myData.pUPowerClient != NULL)
115
g_object_unref (myData.pUPowerClient);
118
if (myData.checkLoop != 0)
139
120
g_source_remove (myData.checkLoop);
140
myData.checkLoop = 0;
143
122
CD_APPLET_STOP_END
162
141
_set_data_renderer (myApplet, TRUE);
164
if(myData.checkLoop != 0) // la frequence peut avoir change.
165
g_source_remove (myData.checkLoop);
166
myData.checkLoop = g_timeout_add_seconds (myConfig.iCheckInterval, (GSourceFunc) update_stats, (gpointer) NULL);
143
cd_powermanager_change_loop_frequency (myConfig.iCheckInterval);
175
152
//\_______________ On redessine notre icone.
176
if (myData.cBatteryStateFilePath)
153
if (myData.cBatteryStateFilePath || myData.pUPowerClient != NULL)
178
155
if (myConfig.iDisplayType == CD_POWERMANAGER_GAUGE || myConfig.iDisplayType == CD_POWERMANAGER_GRAPH) // On recharge la jauge.
180
double fPercent = (double) myData.battery_charge / 100.;
157
double fPercent = (double) myData.iPercentage / 100.;
181
158
CD_APPLET_RENDER_NEW_DATA_ON_MY_ICON (&fPercent);
183
160
//Embleme sur notre icône
184
//CD_APPLET_DRAW_EMBLEM ((myData.on_battery ? CAIRO_DOCK_EMBLEM_BLANK : CAIRO_DOCK_EMBLEM_CHARGE), CAIRO_DOCK_EMBLEM_MIDDLE);
185
if (! myData.on_battery)
161
//CD_APPLET_DRAW_EMBLEM ((myData.bOnBattery ? CAIRO_DOCK_EMBLEM_BLANK : CAIRO_DOCK_EMBLEM_CHARGE), CAIRO_DOCK_EMBLEM_MIDDLE);
162
if (! myData.bOnBattery)
186
163
CD_APPLET_DRAW_EMBLEM_ON_MY_ICON (myData.pEmblem);
188
165
else if (myConfig.iDisplayType == CD_POWERMANAGER_ICONS)
189
cd_powermanager_draw_icon_with_effect (myData.on_battery);
166
cd_powermanager_draw_icon_with_effect (myData.bOnBattery);
191
if (!myData.on_battery && myData.battery_charge < 100)
192
myData.alerted = FALSE; //We will alert when battery charge reach 100%
193
if (myData.on_battery)
168
if (!myData.bOnBattery && myData.iPercentage < 100)
169
myData.bAlerted = FALSE; //We will alert when battery charge reach 100%
170
if (myData.bOnBattery)
195
if (myData.battery_charge > myConfig.lowBatteryValue)
196
myData.alerted = FALSE; //We will alert when battery charge is under myConfig.lowBatteryValue
172
if (myData.iPercentage > myConfig.lowBatteryValue)
173
myData.bAlerted = FALSE; //We will alert when battery charge is under myConfig.lowBatteryValue
198
if (myData.battery_charge > 4)
175
if (myData.iPercentage > 4)
199
176
myData.bCritical = FALSE; //We will alert when battery charge is critical (under 4%)
202
myData.previous_battery_charge = -1;
203
myData.previous_battery_time = -1;
179
myData.iPrevPercentage = -1;
180
myData.iPrevTime = -1;