Skip to content
Snippets Groups Projects
Commit 377291c1 authored by Guido Gunther's avatar Guido Gunther :zzz:
Browse files

Merge branch 'battery' into 'master'

Display battery level on lockscreen and top panel

Closes #11

See merge request !53
parents a3959676 cdefb7a3
No related branches found
No related tags found
1 merge request!53Display battery level on lockscreen and top panel
......@@ -7,6 +7,7 @@ Build-Depends:
libgnome-desktop-3-dev,
libgtk-3-dev,
libhandy-0.0-dev (>= 0.0~git20180429),
libupower-glib-dev,
libwayland-dev,
meson,
# to run the tests
......
/*
* Copyright (C) 2018 Purism SPC
* SPDX-License-Identifier: GPL-3.0+
* Author: Guido Günther <agx@sigxcpu.org>
*/
/* Battery Info widget */
#define G_LOG_DOMAIN "phosh-batteryinfo"
#include "config.h"
#include "batteryinfo.h"
#include "upower.h"
#define BATTERY_INFO_DEFAULT_ICON_SIZE GTK_ICON_SIZE_LARGE_TOOLBAR
/**
* SECTION:phosh-battery-info
* @short_description: A widget to display the battery status
* @Title: PhoshBatteryInfo
*/
typedef struct {
UpClient *upower;
UpDevice *device;
GtkImage *icon;
gint size;
guint update_icon_id;
} PhoshBatteryInfoPrivate;
typedef struct _PhoshBatteryInfo {
GtkImage parent;
} PhoshBatteryInfo;
G_DEFINE_TYPE_WITH_PRIVATE (PhoshBatteryInfo, phosh_battery_info, GTK_TYPE_IMAGE)
static void
update_icon (PhoshBatteryInfo *self, gpointer unused)
{
PhoshBatteryInfoPrivate *priv;
const gchar *icon_name;
g_debug ("Updating battery icon");
g_return_if_fail (PHOSH_IS_BATTERY_INFO (self));
priv = phosh_battery_info_get_instance_private (self);
g_object_get (priv->device, "icon-name", &icon_name, NULL);
if (icon_name)
gtk_image_set_from_icon_name (GTK_IMAGE (self), icon_name, priv->size);
}
static void
setup_display_device (PhoshBatteryInfo *self)
{
GError *err = NULL;
PhoshBatteryInfoPrivate *priv = phosh_battery_info_get_instance_private (self);
priv->upower = up_client_new_full (NULL, &err);
if (priv->upower == NULL) {
g_warning ("Failed to connect to upowerd: %s", err->message);
g_clear_error (&err);
}
/* TODO: this is a oversimplified sync call */
priv->device = up_client_get_display_device (priv->upower);
if (priv->device == NULL) {
g_warning ("Failed to get upowerd display device");
}
priv->update_icon_id = g_signal_connect_swapped (priv->device,
"notify::icon-name",
G_CALLBACK (update_icon),
self);
}
static void
phosh_battery_info_constructed (GObject *object)
{
PhoshBatteryInfo *self = PHOSH_BATTERY_INFO (object);
G_OBJECT_CLASS (phosh_battery_info_parent_class)->constructed (object);
setup_display_device (self);
update_icon (self, NULL);
}
static void
phosh_battery_info_dispose (GObject *object)
{
PhoshBatteryInfoPrivate *priv = phosh_battery_info_get_instance_private (PHOSH_BATTERY_INFO(object));
if (priv->device) {
g_signal_handler_disconnect (priv->device, priv->update_icon_id);
priv->update_icon_id = 0;
g_clear_object (&priv->device);
}
if (priv->upower)
g_clear_object (&priv->upower);
G_OBJECT_CLASS (phosh_battery_info_parent_class)->dispose (object);
}
static void
phosh_battery_info_class_init (PhoshBatteryInfoClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = phosh_battery_info_constructed;
object_class->dispose = phosh_battery_info_dispose;
}
static void
phosh_battery_info_init (PhoshBatteryInfo *self)
{
PhoshBatteryInfoPrivate *priv = phosh_battery_info_get_instance_private (self);
/* TODO: make scalable? */
priv->size = BATTERY_INFO_DEFAULT_ICON_SIZE;
}
GtkWidget *
phosh_battery_info_new (void)
{
return g_object_new (PHOSH_TYPE_BATTERY_INFO, NULL);
}
/*
* Copyright (C) 2018 Purism SPC
*
* SPDX-License-Identifier: GPL-3.0+
*/
#pragma once
#include <gtk/gtk.h>
G_BEGIN_DECLS
#define PHOSH_TYPE_BATTERY_INFO (phosh_battery_info_get_type())
G_DECLARE_FINAL_TYPE (PhoshBatteryInfo, phosh_battery_info, PHOSH, BATTERY_INFO, GtkImage)
GtkWidget * phosh_battery_info_new (void);
G_END_DECLS
......@@ -9,6 +9,7 @@
#include "config.h"
#include "lockscreen.h"
#include "wwaninfo.h"
#include "batteryinfo.h"
#include <string.h>
#include <glib/gi18n.h>
......@@ -51,6 +52,7 @@ typedef struct PhoshLockscreen {
GtkWidget *lbl_keypad;
GtkWidget *lbl_unlock_status;
GtkWidget *wwaninfo;
GtkWidget *batteryinfo;
guint idle_timer;
gint64 last_input;
......@@ -302,6 +304,8 @@ phosh_lockscreen_class_init (PhoshLockscreenClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, lbl_clock);
PHOSH_TYPE_WWAN_INFO; /* make sure the type is known */
gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, wwaninfo);
PHOSH_TYPE_BATTERY_INFO; /* make sure the type is known */
gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, batteryinfo);
}
......
subdir('wwan')
#subdir('battery')
wayland_protos = dependency('wayland-protocols', version: '>=1.12')
wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir')
......@@ -35,6 +36,8 @@ endforeach
phosh_sources = [
'background.c',
'background.h',
'batteryinfo.c',
'batteryinfo.h',
'favorites.c',
'favorites.h',
'layersurface.c',
......@@ -62,6 +65,7 @@ phosh_deps = [
dependency('gtk+-wayland-3.0'),
dependency('wayland-client'),
dependency('libhandy-0.0'),
dependency('upower-glib'),
cc.find_library('m', required: false),
cc.find_library('rt', required: false),
]
......
......@@ -14,6 +14,7 @@
#include "panel.h"
#include "wwaninfo.h"
#include "batteryinfo.h"
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-wall-clock.h>
......@@ -31,6 +32,7 @@ typedef struct {
GtkWidget *btn_favorites;
GtkWidget *btn_settings;
GtkWidget *wwaninfo;
GtkWidget *batteryinfo;
gint height;
GnomeWallClock *wall_clock;
......@@ -174,6 +176,8 @@ phosh_panel_class_init (PhoshPanelClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, PhoshPanel, btn_settings);
PHOSH_TYPE_WWAN_INFO; /* make sure the type is known */
gtk_widget_class_bind_template_child_private (widget_class, PhoshPanel, wwaninfo);
PHOSH_TYPE_BATTERY_INFO; /* make sure the type is known */
gtk_widget_class_bind_template_child_private (widget_class, PhoshPanel, batteryinfo);
}
......
......@@ -109,15 +109,17 @@
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="homogeneous">True</property>
<child>
<object class="PhoshWWanInfo" id="wwaninfo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="pixel_size">64</property>
<property name="use_fallback">True</property>
<property name="margin-right">4</property>
</object>
<packing>
<property name="expand">False</property>
......@@ -125,6 +127,23 @@
<property name="position">0</property>
</packing>
</child>
<child>
<object class="PhoshBatteryInfo" id="batteryinfo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="pixel_size">24</property>
<property name="use_fallback">True</property>
<property name="margin-left">4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
......@@ -145,8 +164,8 @@
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">end</property>
<property name="count">3</property>
<property name="duration">1500</property>
<property name="count">3</property>
<property name="duration">1500</property>
</object>
<packing>
<property name="expand">True</property>
......@@ -159,9 +178,9 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">end</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="label" translatable="yes">Slide up to unlock</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
......
......@@ -37,6 +37,7 @@
<object class="PhoshWWanInfo" id="wwaninfo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin-left">8</property>
</object>
<packing>
<property name="expand">False</property>
......@@ -44,6 +45,18 @@
<property name="position">1</property>
</packing>
</child>
<child>
<object class="PhoshBatteryInfo" id="batteryinfo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin-left">8</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_settings">
<property name="label">00:00</property>
......@@ -59,7 +72,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
</object>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment