Skip to content
Snippets Groups Projects
Commit 49d6f773 authored by Guido Gunther's avatar Guido Gunther :zzz: Committed by Gogs
Browse files

Merge branch 'master' of guido.gunther/phosh into master

parents 97444428 b96089e2
No related branches found
No related tags found
No related merge requests found
#!/bin/sh
set -e
EXEC="${exec:-$EXEC}"
ABS_BUILDDIR='@ABS_BUILDDIR@'
# gnome-session wants org.gnome.Mutter.DisplayConfig
......@@ -16,4 +17,4 @@ gnome-session --session=gnome-dummy --disable-acceleration-check &
export GSETTINGS_SCHEMA_DIR="${ABS_BUILDDIR}/data"
export G_MESSAGES_DEBUG=all
exec "${ABS_BUILDDIR}/src/phosh" $@
${EXEC} "${ABS_BUILDDIR}/src/phosh" $@
......@@ -125,9 +125,14 @@ keypad_number_notified_cb (PhoshLockscreen *self)
priv = phosh_lockscreen_get_instance_private (self);
number = hdy_dialer_get_number (HDY_DIALER (priv->dialer_keypad));
/* grab a ref, a listener to "lockscreen-unlock" might decrease the refcount */
g_object_ref (self);
if (strlen (number) == strlen (TEST_PIN)) {
if (!g_strcmp0 (number, TEST_PIN)) {
/* FIXME: compare to real PIN */
/* FIXME: handle real PIN
* https://code.puri.sm/Librem5/phosh/issues/25
*/
g_signal_emit(self, signals[LOCKSCREEN_UNLOCK], 0);
} else {
gtk_label_set_label (GTK_LABEL (priv->lbl_unlock_status), _("Wrong PIN"));
......@@ -135,6 +140,7 @@ keypad_number_notified_cb (PhoshLockscreen *self)
}
}
priv->last_input = g_get_monotonic_time ();
g_object_unref (self);
}
......
......@@ -162,10 +162,13 @@ lockscreen_unlock_cb (PhoshShell *self, PhoshLockscreen *window)
{
PhoshShellPrivate *priv = phosh_shell_get_instance_private (self);
g_return_if_fail (window);
g_return_if_fail (PHOSH_IS_LOCKSCREEN (window));
g_return_if_fail (window == PHOSH_LOCKSCREEN (priv->lockscreen->window));
g_signal_handler_disconnect (window, priv->unlock_handler_id);
gtk_widget_destroy (GTK_WIDGET (window));
priv->unlock_handler_id = 0;
gtk_widget_destroy (GTK_WIDGET (priv->lockscreen->window));
priv->lockscreen->window = NULL;
zwlr_layer_surface_v1_destroy(priv->lockscreen->layer_surface);
g_free (priv->lockscreen);
priv->lockscreen = NULL;
......@@ -742,11 +745,11 @@ phosh_shell_class_init (PhoshShellClass *klass)
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
props[PHOSH_SHELL_PROP_LOCKED] =
g_param_spec_string ("locked",
"Locked",
"Whether the screen is locked",
"",
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
g_param_spec_boolean ("locked",
"Locked",
"Whether the screen is locked",
FALSE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, PHOSH_SHELL_PROP_LAST_PROP, props);
}
......
......@@ -62,6 +62,11 @@ typedef struct
PhoshWWanMMOrgFreedesktopModemManager1Modem *proxy;
PhoshWWanMMObjectManagerClient *manager;
/** Signals we connect to */
gulong manager_object_added_signal_id;
gulong manager_object_removed_signal_id;
gulong proxy_props_signal_id;
gchar *object_path;
guint signal_quality;
const char *access_tec;
......@@ -90,6 +95,7 @@ phosh_wwan_mm_update_signal_quality (PhoshWWanMM *self)
GVariant *v;
g_return_if_fail (self);
g_return_if_fail (priv->proxy);
v = phosh_wwan_mm_org_freedesktop_modem_manager1_modem_get_signal_quality (priv->proxy);
if (v) {
g_variant_get(v, "(ub)", &priv->signal_quality, NULL);
......@@ -136,6 +142,7 @@ phosh_wwan_mm_update_access_tec (PhoshWWanMM *self)
guint access_tec;
g_return_if_fail (self);
g_return_if_fail (priv->proxy);
access_tec = phosh_wwan_mm_org_freedesktop_modem_manager1_modem_get_access_technologies (
priv->proxy);
priv->access_tec = user_friendly_access_tec (access_tec);
......@@ -152,6 +159,7 @@ phosh_wwan_mm_update_lock_status (PhoshWWanMM *self)
gint state;
g_return_if_fail (self);
g_return_if_fail (priv->proxy);
/* Whether any kind of PIN is required */
unlock_required = phosh_wwan_mm_org_freedesktop_modem_manager1_modem_get_unlock_required (
priv->proxy);
......@@ -172,6 +180,7 @@ phosh_wwan_mm_update_sim_status (PhoshWWanMM *self)
const gchar *sim;
g_return_if_fail (self);
g_return_if_fail (priv->proxy);
sim = phosh_wwan_mm_org_freedesktop_modem_manager1_modem_get_sim (priv->proxy);
g_debug ("SIM path %s", sim);
priv->sim = !!(sim != NULL && strcmp (sim, "/"));
......@@ -252,7 +261,13 @@ destroy_modem (PhoshWWanMM *self)
{
PhoshWWanMMPrivate *priv = phosh_wwan_mm_get_instance_private (self);
g_clear_object (&priv->proxy);
if (priv->proxy) {
g_signal_handler_disconnect (priv->proxy,
priv->proxy_props_signal_id);
priv->proxy_props_signal_id = 0;
g_clear_object (&priv->proxy);
}
g_clear_pointer (&priv->object_path, g_free);
priv->signal_quality = 0;
......@@ -294,10 +309,10 @@ init_modem (PhoshWWanMM *self, const gchar *object_path)
g_return_if_fail (priv->object_path);
}
g_signal_connect (priv->proxy,
"g-properties-changed",
G_CALLBACK (dbus_props_changed_cb),
self);
priv->proxy_props_signal_id = g_signal_connect (priv->proxy,
"g-properties-changed",
G_CALLBACK (dbus_props_changed_cb),
self);
phosh_wwan_mm_update_signal_quality (self);
phosh_wwan_mm_update_access_tec (self);
phosh_wwan_mm_update_lock_status (self);
......@@ -360,11 +375,13 @@ phosh_wwan_mm_constructed (GObject *object)
return;
}
g_signal_connect_swapped (priv->manager,
"object-added",
G_CALLBACK (object_added_cb),
self);
priv->manager_object_added_signal_id =
g_signal_connect_swapped (priv->manager,
"object-added",
G_CALLBACK (object_added_cb),
self);
priv->manager_object_removed_signal_id =
g_signal_connect_swapped (priv->manager,
"object-removed",
G_CALLBACK (object_removed_cb),
......@@ -380,16 +397,25 @@ phosh_wwan_mm_constructed (GObject *object)
static void
phosh_wwan_mm_finalize (GObject *object)
phosh_wwan_mm_dispose (GObject *object)
{
PhoshWWanMM *self = PHOSH_WWAN_MM (object);
PhoshWWanMMPrivate *priv = phosh_wwan_mm_get_instance_private (self);
GObjectClass *parent_class = G_OBJECT_CLASS (phosh_wwan_mm_parent_class);
if (parent_class->finalize != NULL)
parent_class->finalize (object);
destroy_modem (self);
if (priv->manager) {
g_signal_handler_disconnect (priv->manager,
priv->manager_object_added_signal_id);
priv->manager_object_added_signal_id = 0;
g_signal_handler_disconnect (priv->manager,
priv->manager_object_removed_signal_id);
priv->manager_object_removed_signal_id = 0;
g_clear_object (&priv->manager);
}
g_clear_pointer (&priv->object_path, g_free);
parent_class->dispose (object);
}
......@@ -399,7 +425,7 @@ phosh_wwan_mm_class_init (PhoshWWanMMClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = phosh_wwan_mm_constructed;
object_class->finalize = phosh_wwan_mm_finalize;
object_class->dispose = phosh_wwan_mm_dispose;
object_class->set_property = phosh_wwan_mm_set_property;
object_class->get_property = phosh_wwan_mm_get_property;
......
......@@ -14,12 +14,21 @@
#include "wwan/phosh-wwan-mm.h"
#define WWAN_INFO_DEFAULT_ICON_SIZE 24
#define WWAN_INFO_WWAN_NUM_SIGNALS 4
/**
* SECTION:phosh-wwan-info
* @short_description: A widget to display the wwan status
* @Title: PhoshWWanInfo
*/
typedef struct
{
PhoshWWanMM *wwan;
GtkStyleContext *style_context;
gint size;
guint wwan_signal_ids[WWAN_INFO_WWAN_NUM_SIGNALS];
} PhoshWWanInfoPrivate;
......@@ -154,8 +163,7 @@ update_icon_data(PhoshWWanInfo *self, PhoshWWanMM *wwan, gpointer unused)
g_autofree gchar *icon_name = NULL;
const char *access_tec;
g_debug ("Updating modem icon");
g_debug ("Updating wwan icon");
g_return_if_fail (PHOSH_IS_WWAN_INFO (self));
priv = phosh_wwan_info_get_instance_private (self);
......@@ -200,42 +208,44 @@ phosh_wwan_info_constructed (GObject *object)
{
PhoshWWanInfo *self = PHOSH_WWAN_INFO (object);
PhoshWWanInfoPrivate *priv = phosh_wwan_info_get_instance_private (self);
GStrv signals = (char *[]) {"notify::signal-quality",
"notify::access-tec",
"notify::locked",
"notify::sim",
NULL,
};
G_OBJECT_CLASS (phosh_wwan_info_parent_class)->constructed (object);
priv->style_context = gtk_widget_get_style_context (GTK_WIDGET (self));
priv->wwan = phosh_wwan_mm_new();
g_signal_connect_swapped (priv->wwan,
"notify::signal-quality",
G_CALLBACK (update_icon_data),
self);
g_signal_connect_swapped (priv->wwan,
"notify::access-tec",
G_CALLBACK (update_icon_data),
self);
g_signal_connect_swapped (priv->wwan,
"notify::locked",
G_CALLBACK (update_icon_data),
self);
g_signal_connect_swapped (priv->wwan,
"notify::sim",
G_CALLBACK (update_icon_data),
self);
g_assert (WWAN_INFO_WWAN_NUM_SIGNALS == g_strv_length(signals));
for (int i; i < WWAN_INFO_WWAN_NUM_SIGNALS; i++) {
priv->wwan_signal_ids[i] = g_signal_connect_swapped (priv->wwan,
signals[i],
G_CALLBACK (update_icon_data),
self);
}
update_icon_data (self, NULL, NULL);
}
static void
phosh_wwan_info_finalize (GObject *object)
phosh_wwan_info_dispose (GObject *object)
{
PhoshWWanInfoPrivate *priv = phosh_wwan_info_get_instance_private (PHOSH_WWAN_INFO(object));
GObjectClass *parent_class = G_OBJECT_CLASS (phosh_wwan_info_parent_class);
g_object_unref (priv->wwan);
if (priv->wwan) {
for (int i=0; i < WWAN_INFO_WWAN_NUM_SIGNALS; i++) {
g_signal_handler_disconnect (priv->wwan, priv->wwan_signal_ids[i]);
priv->wwan_signal_ids[i] = 0;
}
g_clear_object (&priv->wwan);
}
if (parent_class->finalize != NULL)
parent_class->finalize (object);
G_OBJECT_CLASS (phosh_wwan_info_parent_class)->dispose (object);
}
......@@ -245,7 +255,7 @@ phosh_wwan_info_class_init (PhoshWWanInfoClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = phosh_wwan_info_constructed;
object_class->finalize = phosh_wwan_info_finalize;
object_class->dispose = phosh_wwan_info_dispose;
}
......
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