diff --git a/src/calls-encryption-indicator.c b/src/calls-encryption-indicator.c new file mode 100644 index 0000000..63aca8a --- /dev/null +++ b/src/calls-encryption-indicator.c @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2018 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY 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 Calls. If not, see . + * + * Author: Adrien Plazas + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "calls-encryption-indicator.h" + +#include + +struct _CallsEncryptionIndicator +{ + GtkStack parent_instance; + + GtkBox *is_not_encrypted; + GtkBox *is_encrypted; +}; + +G_DEFINE_TYPE (CallsEncryptionIndicator, calls_encryption_indicator, GTK_TYPE_STACK); + +enum { + PROP_0, + PROP_ENCRYPTED, + PROP_LAST_PROP, +}; +static GParamSpec *props[PROP_LAST_PROP]; + + +void +calls_encryption_indicator_set_encrypted (CallsEncryptionIndicator *self, + gboolean encrypted) +{ + g_return_if_fail (CALLS_IS_ENCRYPTION_INDICATOR (self)); + + encrypted = !!encrypted; + + gtk_stack_set_visible_child ( + GTK_STACK (self), + GTK_WIDGET (encrypted ? self->is_encrypted : self->is_not_encrypted)); +} + + +gboolean +calls_encryption_indicator_get_encrypted (CallsEncryptionIndicator *self) +{ + g_return_val_if_fail (CALLS_IS_ENCRYPTION_INDICATOR (self), FALSE); + + return gtk_stack_get_visible_child (GTK_STACK (self)) == GTK_WIDGET (self->is_encrypted); +} + + +static void +calls_encryption_indicator_init (CallsEncryptionIndicator *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); +} + + +static void +set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + CallsEncryptionIndicator *self = CALLS_ENCRYPTION_INDICATOR (object); + + switch (property_id) { + case PROP_ENCRYPTED: + calls_encryption_indicator_set_encrypted (self, g_value_get_boolean (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + CallsEncryptionIndicator *self = CALLS_ENCRYPTION_INDICATOR (object); + + switch (property_id) { + case PROP_ENCRYPTED: + g_value_set_boolean (value, calls_encryption_indicator_get_encrypted (self)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +calls_encryption_indicator_class_init (CallsEncryptionIndicatorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->set_property = set_property; + object_class->get_property = get_property; + + props[PROP_ENCRYPTED] = + g_param_spec_boolean ("encrypted", + _("Encrypted"), + _("The party participating in the call"), + FALSE, + G_PARAM_READWRITE); + + g_object_class_install_properties (object_class, PROP_LAST_PROP, props); + gtk_widget_class_set_template_from_resource (widget_class, "/sm/puri/calls/ui/encryption-indicator.ui"); + gtk_widget_class_bind_template_child (widget_class, CallsEncryptionIndicator, is_not_encrypted); + gtk_widget_class_bind_template_child (widget_class, CallsEncryptionIndicator, is_encrypted); +} + diff --git a/src/calls-encryption-indicator.h b/src/calls-encryption-indicator.h new file mode 100644 index 0000000..2e891fa --- /dev/null +++ b/src/calls-encryption-indicator.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2018 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY 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 Calls. If not, see . + * + * Author: Adrien Plazas + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#ifndef CALLS_ENCRYPTION_INDICATOR_H__ +#define CALLS_ENCRYPTION_INDICATOR_H__ + +#include + +G_BEGIN_DECLS + +#define CALLS_TYPE_ENCRYPTION_INDICATOR (calls_encryption_indicator_get_type ()) + +G_DECLARE_FINAL_TYPE (CallsEncryptionIndicator, calls_encryption_indicator, CALLS, ENCRYPTION_INDICATOR, GtkStack); + + +void calls_encryption_indicator_set_encrypted (CallsEncryptionIndicator *self, + gboolean encrypted); +gboolean calls_encryption_indicator_get_encrypted (CallsEncryptionIndicator *self); + + +G_END_DECLS + +#endif /* CALLS_ENCRYPTION_INDICATOR_H__ */ + diff --git a/src/calls.gresources.xml b/src/calls.gresources.xml index 6912186..cbaa257 100644 --- a/src/calls.gresources.xml +++ b/src/calls.gresources.xml @@ -4,5 +4,6 @@ main-window.ui call-display.ui call-selector-item.ui + encryption-indicator.ui diff --git a/src/meson.build b/src/meson.build index 204f8fe..7d987ef 100644 --- a/src/meson.build +++ b/src/meson.build @@ -40,6 +40,7 @@ calls_sources = ['calls-message-source.c', 'calls-message-source.h', 'calls-call-holder.c', 'calls-call-holder.h', 'calls-call-display.c', 'calls-call-display.h', 'calls-call-selector-item.c', 'calls-call-selector-item.h', + 'calls-encryption-indicator.c', 'calls-encryption-indicator.h', 'calls-main-window.c', 'calls-main-window.h', 'util.c', 'util.h', ] diff --git a/src/ui/encryption-indicator.ui b/src/ui/encryption-indicator.ui new file mode 100644 index 0000000..32adc20 --- /dev/null +++ b/src/ui/encryption-indicator.ui @@ -0,0 +1,52 @@ + + + + + +