mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-07 12:25:31 +00:00
remove CallsCallHolder and CallsCallData
Both classes are containers for other data and we can pass the data directly without an additional code.
This commit is contained in:
parent
1bfcdd545a
commit
1c8eb87e7f
15 changed files with 129 additions and 672 deletions
|
@ -3,9 +3,7 @@ data/sm.puri.Calls-daemon.desktop.in
|
||||||
src/calls-application.c
|
src/calls-application.c
|
||||||
src/calls-best-match.c
|
src/calls-best-match.c
|
||||||
src/calls-call.c
|
src/calls-call.c
|
||||||
src/calls-call-data.c
|
|
||||||
src/calls-call-display.c
|
src/calls-call-display.c
|
||||||
src/calls-call-holder.c
|
|
||||||
src/calls-call-record.c
|
src/calls-call-record.c
|
||||||
src/calls-call-record-row.c
|
src/calls-call-record-row.c
|
||||||
src/calls-call-selector-item.c
|
src/calls-call-selector-item.c
|
||||||
|
|
18
po/en_GB.po
18
po/en_GB.po
|
@ -89,19 +89,7 @@ msgstr "State"
|
||||||
msgid "The current state of the call"
|
msgid "The current state of the call"
|
||||||
msgstr "The current state of the call"
|
msgstr "The current state of the call"
|
||||||
|
|
||||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
#: src/calls-encryption-indicator.c:129
|
||||||
msgid "Call"
|
|
||||||
msgstr "Call"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:137
|
|
||||||
msgid "The call"
|
|
||||||
msgstr "The call"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:143
|
|
||||||
msgid "Party"
|
|
||||||
msgstr "Party"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:144 src/calls-encryption-indicator.c:129
|
|
||||||
msgid "The party participating in the call"
|
msgid "The party participating in the call"
|
||||||
msgstr "The party participating in the call"
|
msgstr "The party participating in the call"
|
||||||
|
|
||||||
|
@ -117,10 +105,6 @@ msgstr "Call data"
|
||||||
msgid "Data for the call this display will be associated with"
|
msgid "Data for the call this display will be associated with"
|
||||||
msgstr "Data for the call this display will be associated with"
|
msgstr "Data for the call this display will be associated with"
|
||||||
|
|
||||||
#: src/calls-call-holder.c:158
|
|
||||||
msgid "The call to hold"
|
|
||||||
msgstr "The call to hold"
|
|
||||||
|
|
||||||
#: src/calls-call-record.c:189
|
#: src/calls-call-record.c:189
|
||||||
msgid "ID"
|
msgid "ID"
|
||||||
msgstr "ID"
|
msgstr "ID"
|
||||||
|
|
18
po/fa.po
18
po/fa.po
|
@ -86,19 +86,7 @@ msgstr "وضعیت"
|
||||||
msgid "The current state of the call"
|
msgid "The current state of the call"
|
||||||
msgstr "وضعیت فعلی تماس"
|
msgstr "وضعیت فعلی تماس"
|
||||||
|
|
||||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
#: src/calls-encryption-indicator.c:129
|
||||||
msgid "Call"
|
|
||||||
msgstr "تماس"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:137
|
|
||||||
msgid "The call"
|
|
||||||
msgstr "تماس"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:143
|
|
||||||
msgid "Party"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:144 src/calls-encryption-indicator.c:129
|
|
||||||
msgid "The party participating in the call"
|
msgid "The party participating in the call"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -114,10 +102,6 @@ msgstr "دادههای تماس"
|
||||||
msgid "Data for the call this display will be associated with"
|
msgid "Data for the call this display will be associated with"
|
||||||
msgstr "دادهها برای تماسی که این نمایشگر به آن مرتبط است"
|
msgstr "دادهها برای تماسی که این نمایشگر به آن مرتبط است"
|
||||||
|
|
||||||
#: src/calls-call-holder.c:158
|
|
||||||
msgid "The call to hold"
|
|
||||||
msgstr "تماس برای انتظار"
|
|
||||||
|
|
||||||
#: src/calls-call-record.c:189
|
#: src/calls-call-record.c:189
|
||||||
msgid "ID"
|
msgid "ID"
|
||||||
msgstr "شناسه"
|
msgstr "شناسه"
|
||||||
|
|
18
po/it.po
18
po/it.po
|
@ -90,19 +90,7 @@ msgstr "Stato"
|
||||||
msgid "The current state of the call"
|
msgid "The current state of the call"
|
||||||
msgstr "Lo stato corrente della chiamata"
|
msgstr "Lo stato corrente della chiamata"
|
||||||
|
|
||||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
#: src/calls-encryption-indicator.c:129
|
||||||
msgid "Call"
|
|
||||||
msgstr "Chiamata"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:137
|
|
||||||
msgid "The call"
|
|
||||||
msgstr "La chiamata"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:143
|
|
||||||
msgid "Party"
|
|
||||||
msgstr "Party"
|
|
||||||
|
|
||||||
#: src/calls-call-data.c:144 src/calls-encryption-indicator.c:129
|
|
||||||
msgid "The party participating in the call"
|
msgid "The party participating in the call"
|
||||||
msgstr "La parte che partecipa alla chiamata"
|
msgstr "La parte che partecipa alla chiamata"
|
||||||
|
|
||||||
|
@ -118,10 +106,6 @@ msgstr "Dati di chiamata"
|
||||||
msgid "Data for the call this display will be associated with"
|
msgid "Data for the call this display will be associated with"
|
||||||
msgstr "Dati per la chiamata a cui verrà associato questo display"
|
msgstr "Dati per la chiamata a cui verrà associato questo display"
|
||||||
|
|
||||||
#: src/calls-call-holder.c:158
|
|
||||||
msgid "The call to hold"
|
|
||||||
msgstr "La chiamata da mettere in attesa"
|
|
||||||
|
|
||||||
#: src/calls-call-record.c:189
|
#: src/calls-call-record.c:189
|
||||||
msgid "ID"
|
msgid "ID"
|
||||||
msgstr "ID"
|
msgstr "ID"
|
||||||
|
|
|
@ -1,199 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Bob Ham <bob.ham@puri.sm>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "calls-call-data.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SECTION:calls-call-data
|
|
||||||
* @short_description: An object to hold both a #CallsCall object and
|
|
||||||
* the #CallsParty participating in the call. These data are passed
|
|
||||||
* to both #CallsCallDisplay and #CallsCallSelectorItem so we create a
|
|
||||||
* convenient object to keep them together.
|
|
||||||
* @Title: CallsCallData
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct _CallsCallData
|
|
||||||
{
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
CallsCall *call;
|
|
||||||
CallsParty *party;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (CallsCallData, calls_call_data, G_TYPE_OBJECT);
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_0,
|
|
||||||
PROP_CALL,
|
|
||||||
PROP_PARTY,
|
|
||||||
PROP_LAST_PROP,
|
|
||||||
};
|
|
||||||
static GParamSpec *props[PROP_LAST_PROP];
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
calls_call_data_init (CallsCallData *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
CallsCallData *self = CALLS_CALL_DATA (object);
|
|
||||||
|
|
||||||
switch (property_id) {
|
|
||||||
case PROP_CALL:
|
|
||||||
g_set_object (&self->call, CALLS_CALL (g_value_get_object (value)));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_PARTY:
|
|
||||||
g_set_object (&self->party, CALLS_PARTY (g_value_get_object (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)
|
|
||||||
{
|
|
||||||
CallsCallData *self = CALLS_CALL_DATA (object);
|
|
||||||
|
|
||||||
switch (property_id) {
|
|
||||||
case PROP_CALL:
|
|
||||||
g_value_set_object (value, self->call);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_PARTY:
|
|
||||||
g_value_set_object (value, self->party);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
dispose (GObject *object)
|
|
||||||
{
|
|
||||||
CallsCallData *self = CALLS_CALL_DATA (object);
|
|
||||||
|
|
||||||
g_clear_object (&self->call);
|
|
||||||
g_clear_object (&self->party);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (calls_call_data_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
calls_call_data_class_init (CallsCallDataClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->set_property = set_property;
|
|
||||||
object_class->get_property = get_property;
|
|
||||||
object_class->dispose = dispose;
|
|
||||||
|
|
||||||
props[PROP_CALL] =
|
|
||||||
g_param_spec_object ("call",
|
|
||||||
"Call",
|
|
||||||
"The call",
|
|
||||||
CALLS_TYPE_CALL,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
|
|
||||||
|
|
||||||
props[PROP_PARTY] =
|
|
||||||
g_param_spec_object ("party",
|
|
||||||
"Party",
|
|
||||||
"The party participating in the call",
|
|
||||||
CALLS_TYPE_PARTY,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
|
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calls_call_data_new:
|
|
||||||
*
|
|
||||||
* Create a new #CallsCallData object.
|
|
||||||
*
|
|
||||||
* Returns: the newly created #CallsCallData
|
|
||||||
*/
|
|
||||||
CallsCallData *
|
|
||||||
calls_call_data_new (CallsCall *call,
|
|
||||||
CallsParty *party)
|
|
||||||
{
|
|
||||||
return g_object_new (CALLS_TYPE_CALL_DATA,
|
|
||||||
"call", call,
|
|
||||||
"party", party,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calls_call_data_get_call:
|
|
||||||
* @self: a #CallsCallData
|
|
||||||
*
|
|
||||||
* Get the #CallsCall stored in the object.
|
|
||||||
*
|
|
||||||
* Returns: the #CallsCall
|
|
||||||
*/
|
|
||||||
CallsCall *
|
|
||||||
calls_call_data_get_call (CallsCallData *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_DATA (self), NULL);
|
|
||||||
return self->call;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calls_call_data_get_party:
|
|
||||||
* @self: a #CallsCallData
|
|
||||||
*
|
|
||||||
* Get the #CallsParty stored in the object.
|
|
||||||
*
|
|
||||||
* Returns: the #CallsParty
|
|
||||||
*/
|
|
||||||
CallsParty *
|
|
||||||
calls_call_data_get_party (CallsCallData *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_DATA (self), NULL);
|
|
||||||
return self->party;
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Bob Ham <bob.ham@puri.sm>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CALLS_CALL_DATA_H__
|
|
||||||
#define CALLS_CALL_DATA_H__
|
|
||||||
|
|
||||||
#include "calls-call.h"
|
|
||||||
#include "calls-party.h"
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define CALLS_TYPE_CALL_DATA (calls_call_data_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (CallsCallData, calls_call_data, CALLS, CALL_DATA, GObject);
|
|
||||||
|
|
||||||
CallsCallData *calls_call_data_new (CallsCall *call,
|
|
||||||
CallsParty *party);
|
|
||||||
CallsCall *calls_call_data_get_call (CallsCallData *data);
|
|
||||||
CallsParty *calls_call_data_get_party (CallsCallData *data);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* CALLS_CALL_DATA_H__ */
|
|
|
@ -23,8 +23,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "calls-manager.h"
|
||||||
#include "calls-call-display.h"
|
#include "calls-call-display.h"
|
||||||
#include "calls-call-data.h"
|
#include "calls-party.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
@ -62,7 +63,7 @@ G_DEFINE_TYPE (CallsCallDisplay, calls_call_display, GTK_TYPE_OVERLAY);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_CALL_DATA,
|
PROP_CALL,
|
||||||
PROP_LAST_PROP,
|
PROP_LAST_PROP,
|
||||||
};
|
};
|
||||||
static GParamSpec *props[PROP_LAST_PROP];
|
static GParamSpec *props[PROP_LAST_PROP];
|
||||||
|
@ -303,32 +304,22 @@ call_state_changed_cb (CallsCallDisplay *self,
|
||||||
|
|
||||||
|
|
||||||
CallsCallDisplay *
|
CallsCallDisplay *
|
||||||
calls_call_display_new (CallsCallData *data)
|
calls_call_display_new (CallsCall *call)
|
||||||
{
|
{
|
||||||
return g_object_new (CALLS_TYPE_CALL_DISPLAY,
|
return g_object_new (CALLS_TYPE_CALL_DISPLAY,
|
||||||
"call-data", data,
|
"call", call,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// FIXME: this should direclty use CallsBestMatch since the matching contact could change over time
|
||||||
static void
|
static void
|
||||||
set_call (CallsCallDisplay *self, CallsCall *call)
|
set_party (CallsCallDisplay *self)
|
||||||
{
|
|
||||||
g_signal_connect_object (call, "state-changed",
|
|
||||||
G_CALLBACK (call_state_changed_cb),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
self->call = call;
|
|
||||||
g_object_ref (G_OBJECT (call));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_party (CallsCallDisplay *self, CallsParty *party)
|
|
||||||
{
|
{
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
const gchar *name, *number;
|
const gchar *name, *number;
|
||||||
|
g_autoptr (CallsParty) party = calls_party_new (calls_manager_get_contact_name (self->call),
|
||||||
|
calls_call_get_number (self->call));
|
||||||
image = calls_party_create_image (party);
|
image = calls_party_create_image (party);
|
||||||
gtk_box_pack_end (self->party_box, image, TRUE, TRUE, 0);
|
gtk_box_pack_end (self->party_box, image, TRUE, TRUE, 0);
|
||||||
gtk_image_set_pixel_size (GTK_IMAGE (image), 100);
|
gtk_image_set_pixel_size (GTK_IMAGE (image), 100);
|
||||||
|
@ -343,13 +334,37 @@ set_party (CallsCallDisplay *self, CallsParty *party)
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_call_data (CallsCallDisplay *self, CallsCallData *data)
|
set_call (CallsCallDisplay *self, CallsCall *call)
|
||||||
{
|
{
|
||||||
set_call (self, calls_call_data_get_call (data));
|
g_signal_connect_object (call, "state-changed",
|
||||||
set_party (self, calls_call_data_get_party (data));
|
G_CALLBACK (call_state_changed_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
|
||||||
|
g_set_object (&self->call, call);
|
||||||
|
set_party (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
CallsCallDisplay *self = CALLS_CALL_DISPLAY (object);
|
||||||
|
|
||||||
|
switch (property_id) {
|
||||||
|
case PROP_CALL:
|
||||||
|
g_value_set_object (value, calls_call_display_get_call (self));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_property (GObject *object,
|
set_property (GObject *object,
|
||||||
guint property_id,
|
guint property_id,
|
||||||
|
@ -359,8 +374,8 @@ set_property (GObject *object,
|
||||||
CallsCallDisplay *self = CALLS_CALL_DISPLAY (object);
|
CallsCallDisplay *self = CALLS_CALL_DISPLAY (object);
|
||||||
|
|
||||||
switch (property_id) {
|
switch (property_id) {
|
||||||
case PROP_CALL_DATA:
|
case PROP_CALL:
|
||||||
set_call_data (self, CALLS_CALL_DATA (g_value_get_object (value)));
|
set_call (self, CALLS_CALL (g_value_get_object (value)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -456,16 +471,17 @@ calls_call_display_class_init (CallsCallDisplayClass *klass)
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
|
|
||||||
object_class->constructed = constructed;
|
object_class->constructed = constructed;
|
||||||
|
object_class->get_property = get_property;
|
||||||
object_class->set_property = set_property;
|
object_class->set_property = set_property;
|
||||||
object_class->dispose = dispose;
|
object_class->dispose = dispose;
|
||||||
object_class->finalize = finalize;
|
object_class->finalize = finalize;
|
||||||
|
|
||||||
props[PROP_CALL_DATA] =
|
props[PROP_CALL] =
|
||||||
g_param_spec_object ("call-data",
|
g_param_spec_object ("call",
|
||||||
"Call data",
|
"Call",
|
||||||
"Data for the call this display will be associated with",
|
"The CallsCall which this display rapresents",
|
||||||
CALLS_TYPE_CALL_DATA,
|
CALLS_TYPE_CALL,
|
||||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
||||||
|
|
||||||
|
@ -494,3 +510,11 @@ calls_call_display_class_init (CallsCallDisplayClass *klass)
|
||||||
gtk_widget_class_bind_template_callback (widget_class, block_delete_cb);
|
gtk_widget_class_bind_template_callback (widget_class, block_delete_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, insert_text_cb);
|
gtk_widget_class_bind_template_callback (widget_class, insert_text_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CallsCall *
|
||||||
|
calls_call_display_get_call (CallsCallDisplay *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CALLS_IS_CALL_DISPLAY (self), NULL);
|
||||||
|
|
||||||
|
return self->call;
|
||||||
|
}
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
#ifndef CALLS_CALL_DISPLAY_H__
|
#ifndef CALLS_CALL_DISPLAY_H__
|
||||||
#define CALLS_CALL_DISPLAY_H__
|
#define CALLS_CALL_DISPLAY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include "calls-call.h"
|
||||||
|
|
||||||
#include "calls-call-data.h"
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
@ -35,7 +35,8 @@ G_BEGIN_DECLS
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (CallsCallDisplay, calls_call_display, CALLS, CALL_DISPLAY, GtkOverlay);
|
G_DECLARE_FINAL_TYPE (CallsCallDisplay, calls_call_display, CALLS, CALL_DISPLAY, GtkOverlay);
|
||||||
|
|
||||||
CallsCallDisplay *calls_call_display_new (CallsCallData *data);
|
CallsCallDisplay *calls_call_display_new (CallsCall *call);
|
||||||
|
CallsCall *calls_call_display_get_call (CallsCallDisplay *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1,164 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Bob Ham <bob.ham@puri.sm>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "calls-call-holder.h"
|
|
||||||
#include "calls-manager.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SECTION:calls-call-holder
|
|
||||||
* @short_description: An object to hold both a #CallsCall object and
|
|
||||||
* data about it and widgets
|
|
||||||
* @Title: CallsCallHolder
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct _CallsCallHolder
|
|
||||||
{
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
CallsCallData *data;
|
|
||||||
CallsCallDisplay *display;
|
|
||||||
CallsCallSelectorItem *selector_item;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (CallsCallHolder, calls_call_holder, G_TYPE_OBJECT);
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_0,
|
|
||||||
PROP_CALL,
|
|
||||||
PROP_LAST_PROP,
|
|
||||||
};
|
|
||||||
static GParamSpec *props[PROP_LAST_PROP];
|
|
||||||
|
|
||||||
|
|
||||||
CallsCallHolder *
|
|
||||||
calls_call_holder_new (CallsCall *call)
|
|
||||||
{
|
|
||||||
return g_object_new (CALLS_TYPE_CALL_HOLDER,
|
|
||||||
"call", call,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CallsCallData *
|
|
||||||
calls_call_holder_get_data (CallsCallHolder *holder)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_HOLDER (holder), NULL);
|
|
||||||
return holder->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CallsCallDisplay *
|
|
||||||
calls_call_holder_get_display (CallsCallHolder *holder)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_HOLDER (holder), NULL);
|
|
||||||
return holder->display;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CallsCallSelectorItem *
|
|
||||||
calls_call_holder_get_selector_item (CallsCallHolder *holder)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_HOLDER (holder), NULL);
|
|
||||||
return holder->selector_item;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_call (CallsCallHolder *self, CallsCall *call)
|
|
||||||
{
|
|
||||||
CallsParty *party = calls_party_new (calls_manager_get_contact_name (call),
|
|
||||||
calls_call_get_number (call));
|
|
||||||
|
|
||||||
self->data = calls_call_data_new (call, party);
|
|
||||||
g_object_unref (party);
|
|
||||||
|
|
||||||
self->display = calls_call_display_new (self->data);
|
|
||||||
g_object_ref_sink (self->display);
|
|
||||||
|
|
||||||
self->selector_item =
|
|
||||||
calls_call_selector_item_new (self);
|
|
||||||
g_object_ref_sink (self->selector_item);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
CallsCallHolder *self = CALLS_CALL_HOLDER (object);
|
|
||||||
|
|
||||||
switch (property_id) {
|
|
||||||
case PROP_CALL:
|
|
||||||
set_call (self, CALLS_CALL (g_value_get_object (value)));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
calls_call_holder_init (CallsCallHolder *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
dispose (GObject *object)
|
|
||||||
{
|
|
||||||
CallsCallHolder *self = CALLS_CALL_HOLDER (object);
|
|
||||||
|
|
||||||
g_clear_object (&self->selector_item);
|
|
||||||
g_clear_object (&self->display);
|
|
||||||
g_clear_object (&self->data);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (calls_call_holder_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
calls_call_holder_class_init (CallsCallHolderClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->set_property = set_property;
|
|
||||||
object_class->dispose = dispose;
|
|
||||||
|
|
||||||
props[PROP_CALL] =
|
|
||||||
g_param_spec_object ("call",
|
|
||||||
"Call",
|
|
||||||
"The call to hold",
|
|
||||||
CALLS_TYPE_CALL,
|
|
||||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Bob Ham <bob.ham@puri.sm>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CALLS_CALL_HOLDER_H__
|
|
||||||
#define CALLS_CALL_HOLDER_H__
|
|
||||||
|
|
||||||
#include "calls-call-data.h"
|
|
||||||
#include "calls-call-display.h"
|
|
||||||
#include "calls-call-selector-item.h"
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define CALLS_TYPE_CALL_HOLDER (calls_call_holder_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (CallsCallHolder, calls_call_holder, CALLS, CALL_HOLDER, GObject);
|
|
||||||
|
|
||||||
CallsCallHolder *calls_call_holder_new (CallsCall *call);
|
|
||||||
CallsCallData *calls_call_holder_get_data (CallsCallHolder *holder);
|
|
||||||
CallsCallDisplay *calls_call_holder_get_display (CallsCallHolder *holder);
|
|
||||||
CallsCallSelectorItem *calls_call_holder_get_selector_item (CallsCallHolder *holder);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* CALLS_CALL_HOLDER_H__ */
|
|
|
@ -22,8 +22,10 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "calls-manager.h"
|
||||||
#include "calls-call-selector-item.h"
|
#include "calls-call-selector-item.h"
|
||||||
#include "calls-call-holder.h"
|
#include "calls-call-display.h"
|
||||||
|
#include "calls-party.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
@ -46,7 +48,7 @@ G_DEFINE_TYPE (CallsCallSelectorItem, calls_call_selector_item, GTK_TYPE_EVENT_B
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_HOLDER,
|
PROP_DISPLAY,
|
||||||
PROP_LAST_PROP,
|
PROP_LAST_PROP,
|
||||||
};
|
};
|
||||||
static GParamSpec *props[PROP_LAST_PROP];
|
static GParamSpec *props[PROP_LAST_PROP];
|
||||||
|
@ -64,12 +66,12 @@ call_state_changed_cb (CallsCallSelectorItem *self,
|
||||||
|
|
||||||
|
|
||||||
CallsCallSelectorItem *
|
CallsCallSelectorItem *
|
||||||
calls_call_selector_item_new (CallsCallHolder *holder)
|
calls_call_selector_item_new (CallsCallDisplay *display)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (CALLS_IS_CALL_HOLDER (holder), NULL);
|
g_return_val_if_fail (CALLS_IS_CALL_DISPLAY (display), NULL);
|
||||||
|
|
||||||
return g_object_new (CALLS_TYPE_CALL_SELECTOR_ITEM,
|
return g_object_new (CALLS_TYPE_CALL_SELECTOR_ITEM,
|
||||||
"holder", holder,
|
"display", display,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,21 +83,14 @@ calls_call_selector_item_get_display (CallsCallSelectorItem *item)
|
||||||
return item->display;
|
return item->display;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: this should direclty use CallsBestMatch since the matching contact could change over time
|
||||||
static void
|
static void
|
||||||
set_call (CallsCallSelectorItem *self, CallsCall *call)
|
set_party (CallsCallSelectorItem *self)
|
||||||
{
|
|
||||||
g_signal_connect_object (call, "state-changed",
|
|
||||||
G_CALLBACK (call_state_changed_cb),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_party (CallsCallSelectorItem *self, CallsParty *party)
|
|
||||||
{
|
{
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
|
CallsCall *call = calls_call_display_get_call (self->display);
|
||||||
|
g_autoptr (CallsParty) party = calls_party_new (calls_manager_get_contact_name (call),
|
||||||
|
calls_call_get_number (call));
|
||||||
|
|
||||||
image = calls_party_create_image (party);
|
image = calls_party_create_image (party);
|
||||||
gtk_box_pack_start (self->main_box, image, TRUE, TRUE, 0);
|
gtk_box_pack_start (self->main_box, image, TRUE, TRUE, 0);
|
||||||
|
@ -106,16 +101,23 @@ set_party (CallsCallSelectorItem *self, CallsParty *party)
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_call_holder (CallsCallSelectorItem *self, CallsCallHolder *holder)
|
set_call_display (CallsCallSelectorItem *self, CallsCallDisplay *display)
|
||||||
{
|
{
|
||||||
CallsCallData *data = calls_call_holder_get_data (holder);
|
CallsCall *call = NULL;
|
||||||
CallsCall *call = calls_call_data_get_call (data);
|
|
||||||
|
g_return_if_fail (CALLS_IS_CALL_SELECTOR_ITEM (self));
|
||||||
|
g_return_if_fail (CALLS_IS_CALL_DISPLAY (display));
|
||||||
|
|
||||||
|
call = calls_call_display_get_call (display);
|
||||||
|
g_signal_connect_object (call, "state-changed",
|
||||||
|
G_CALLBACK (call_state_changed_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
|
||||||
set_call (self, call);
|
|
||||||
set_party (self, calls_call_data_get_party (data));
|
|
||||||
call_state_changed_cb (self, calls_call_get_state (call));
|
call_state_changed_cb (self, calls_call_get_state (call));
|
||||||
|
|
||||||
g_set_object (&self->display, calls_call_holder_get_display (holder));
|
g_set_object (&self->display, display);
|
||||||
|
set_party (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,9 +130,9 @@ set_property (GObject *object,
|
||||||
CallsCallSelectorItem *self = CALLS_CALL_SELECTOR_ITEM (object);
|
CallsCallSelectorItem *self = CALLS_CALL_SELECTOR_ITEM (object);
|
||||||
|
|
||||||
switch (property_id) {
|
switch (property_id) {
|
||||||
case PROP_HOLDER:
|
case PROP_DISPLAY:
|
||||||
set_call_holder
|
set_call_display
|
||||||
(self, CALLS_CALL_HOLDER (g_value_get_object (value)));
|
(self, CALLS_CALL_DISPLAY (g_value_get_object (value)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -167,11 +169,11 @@ calls_call_selector_item_class_init (CallsCallSelectorItemClass *klass)
|
||||||
object_class->set_property = set_property;
|
object_class->set_property = set_property;
|
||||||
object_class->dispose = dispose;
|
object_class->dispose = dispose;
|
||||||
|
|
||||||
props[PROP_HOLDER] =
|
props[PROP_DISPLAY] =
|
||||||
g_param_spec_object ("holder",
|
g_param_spec_object ("display",
|
||||||
"Call holder",
|
"Call display",
|
||||||
"The holder for this call",
|
"The display for this call",
|
||||||
CALLS_TYPE_CALL_HOLDER,
|
CALLS_TYPE_CALL_DISPLAY,
|
||||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
|
||||||
|
|
|
@ -38,7 +38,7 @@ G_BEGIN_DECLS
|
||||||
G_DECLARE_FINAL_TYPE (CallsCallSelectorItem, calls_call_selector_item,
|
G_DECLARE_FINAL_TYPE (CallsCallSelectorItem, calls_call_selector_item,
|
||||||
CALLS, CALL_SELECTOR_ITEM, GtkEventBox);
|
CALLS, CALL_SELECTOR_ITEM, GtkEventBox);
|
||||||
|
|
||||||
CallsCallSelectorItem *calls_call_selector_item_new (CallsCallHolder *holder);
|
CallsCallSelectorItem *calls_call_selector_item_new (CallsCallDisplay *display);
|
||||||
CallsCallDisplay * calls_call_selector_item_get_display (CallsCallSelectorItem *item);
|
CallsCallDisplay * calls_call_selector_item_get_display (CallsCallSelectorItem *item);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
|
|
||||||
#include "calls-call-window.h"
|
#include "calls-call-window.h"
|
||||||
#include "calls-origin.h"
|
#include "calls-origin.h"
|
||||||
#include "calls-call-holder.h"
|
|
||||||
#include "calls-call-selector-item.h"
|
#include "calls-call-selector-item.h"
|
||||||
#include "calls-new-call-box.h"
|
#include "calls-new-call-box.h"
|
||||||
#include "calls-in-app-notification.h"
|
#include "calls-in-app-notification.h"
|
||||||
|
@ -48,7 +47,7 @@ struct _CallsCallWindow
|
||||||
{
|
{
|
||||||
GtkApplicationWindow parent_instance;
|
GtkApplicationWindow parent_instance;
|
||||||
|
|
||||||
GListStore *call_holders;
|
GListStore *calls;
|
||||||
|
|
||||||
CallsInAppNotification *in_app_notification;
|
CallsInAppNotification *in_app_notification;
|
||||||
|
|
||||||
|
@ -192,7 +191,7 @@ session_inhibit (CallsCallWindow *self, gboolean inhibit)
|
||||||
static void
|
static void
|
||||||
update_visibility (CallsCallWindow *self)
|
update_visibility (CallsCallWindow *self)
|
||||||
{
|
{
|
||||||
guint calls = g_list_model_get_n_items (G_LIST_MODEL (self->call_holders));
|
guint calls = g_list_model_get_n_items (G_LIST_MODEL (self->calls));
|
||||||
|
|
||||||
#ifdef CALLS_WAYLAND
|
#ifdef CALLS_WAYLAND
|
||||||
update_layer_surface (self, calls);
|
update_layer_surface (self, calls);
|
||||||
|
@ -215,12 +214,9 @@ update_visibility (CallsCallWindow *self)
|
||||||
|
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
call_holders_create_widget_cb (CallsCallHolder *holder,
|
calls_create_widget_cb (CallsCallSelectorItem *item,
|
||||||
CallsCallWindow *self)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
CallsCallSelectorItem *item =
|
|
||||||
calls_call_holder_get_selector_item (holder);
|
|
||||||
g_object_ref (G_OBJECT (item));
|
|
||||||
return GTK_WIDGET (item);
|
return GTK_WIDGET (item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,63 +233,6 @@ new_call_submitted_cb (CallsCallWindow *self,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef gboolean (*FindCallHolderFunc) (CallsCallHolder *holder,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
find_call_holder_by_call (CallsCallHolder *holder,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
CallsCallData *data = calls_call_holder_get_data (holder);
|
|
||||||
|
|
||||||
return calls_call_data_get_call (data) == user_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Search through the list of call holders, returning the total
|
|
||||||
number of items in the list, the position of the holder within the
|
|
||||||
list and a pointer to the holder itself. */
|
|
||||||
static gboolean
|
|
||||||
find_call_holder (CallsCallWindow *self,
|
|
||||||
guint *n_itemsp,
|
|
||||||
guint *positionp,
|
|
||||||
CallsCallHolder **holderp,
|
|
||||||
FindCallHolderFunc predicate,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GListModel * const model = G_LIST_MODEL (self->call_holders);
|
|
||||||
const guint n_items = g_list_model_get_n_items (model);
|
|
||||||
guint position = 0;
|
|
||||||
CallsCallHolder *holder;
|
|
||||||
|
|
||||||
for (position = 0; position < n_items; ++position)
|
|
||||||
{
|
|
||||||
holder = CALLS_CALL_HOLDER (g_list_model_get_item (model, position));
|
|
||||||
g_object_unref (G_OBJECT (holder));
|
|
||||||
|
|
||||||
if (predicate (holder, user_data))
|
|
||||||
{
|
|
||||||
#define out(var) \
|
|
||||||
if (var##p) \
|
|
||||||
{ \
|
|
||||||
*var##p = var ; \
|
|
||||||
}
|
|
||||||
|
|
||||||
out (n_items);
|
|
||||||
out (position);
|
|
||||||
out (holder);
|
|
||||||
|
|
||||||
#undef out
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_focus (CallsCallWindow *self,
|
set_focus (CallsCallWindow *self,
|
||||||
CallsCallDisplay *display)
|
CallsCallDisplay *display)
|
||||||
|
@ -331,56 +270,54 @@ void
|
||||||
add_call (CallsCallWindow *self,
|
add_call (CallsCallWindow *self,
|
||||||
CallsCall *call)
|
CallsCall *call)
|
||||||
{
|
{
|
||||||
CallsCallHolder *holder;
|
|
||||||
CallsCallDisplay *display;
|
CallsCallDisplay *display;
|
||||||
|
CallsCallSelectorItem *item;
|
||||||
|
|
||||||
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
||||||
g_return_if_fail (CALLS_IS_CALL (call));
|
g_return_if_fail (CALLS_IS_CALL (call));
|
||||||
|
|
||||||
holder = calls_call_holder_new (call);
|
display = calls_call_display_new (call);
|
||||||
|
item = calls_call_selector_item_new (display);
|
||||||
display = calls_call_holder_get_display (holder);
|
|
||||||
gtk_stack_add_named (self->call_stack, GTK_WIDGET (display),
|
gtk_stack_add_named (self->call_stack, GTK_WIDGET (display),
|
||||||
calls_call_get_number (call));
|
calls_call_get_number (call));
|
||||||
|
|
||||||
g_list_store_append (self->call_holders, holder);
|
g_list_store_append (self->calls, item);
|
||||||
g_object_unref (holder);
|
|
||||||
|
|
||||||
update_visibility (self);
|
update_visibility (self);
|
||||||
set_focus (self, display);
|
set_focus (self, display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
remove_call_holder (CallsCallWindow *self,
|
|
||||||
guint n_items,
|
|
||||||
guint position,
|
|
||||||
CallsCallHolder *holder)
|
|
||||||
{
|
|
||||||
gtk_container_remove (GTK_CONTAINER (self->call_stack),
|
|
||||||
GTK_WIDGET (calls_call_holder_get_display (holder)));
|
|
||||||
g_list_store_remove (self->call_holders, position);
|
|
||||||
|
|
||||||
update_visibility (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
remove_call (CallsCallWindow *self,
|
remove_call (CallsCallWindow *self,
|
||||||
CallsCall *call,
|
CallsCall *call,
|
||||||
const gchar *reason)
|
const gchar *reason)
|
||||||
{
|
{
|
||||||
guint n_items, position;
|
g_autoptr (CallsCallSelectorItem) item = NULL;
|
||||||
CallsCallHolder *holder;
|
gint position;
|
||||||
gboolean found;
|
|
||||||
|
|
||||||
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
||||||
g_return_if_fail (CALLS_IS_CALL (call));
|
g_return_if_fail (CALLS_IS_CALL (call));
|
||||||
|
|
||||||
found = find_call_holder (self, &n_items, &position, &holder,
|
position = 0;
|
||||||
find_call_holder_by_call, call);
|
item = g_list_model_get_item (G_LIST_MODEL (self->calls), position);
|
||||||
g_return_if_fail (found);
|
while (item != NULL) {
|
||||||
|
CallsCallDisplay *display = calls_call_selector_item_get_display (item);
|
||||||
|
|
||||||
remove_call_holder (self, n_items, position, holder);
|
if (calls_call_display_get_call (display) == call) {
|
||||||
|
g_list_store_remove (self->calls, position);
|
||||||
|
gtk_container_remove (GTK_CONTAINER (self->call_stack),
|
||||||
|
GTK_WIDGET (display));
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (item);
|
||||||
|
position++;
|
||||||
|
item = g_list_model_get_item (G_LIST_MODEL (self->calls), position);
|
||||||
|
}
|
||||||
|
|
||||||
|
update_visibility (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -396,7 +333,7 @@ remove_calls (CallsCallWindow *self)
|
||||||
GTK_WIDGET (child->data));
|
GTK_WIDGET (child->data));
|
||||||
g_list_free (children);
|
g_list_free (children);
|
||||||
|
|
||||||
g_list_store_remove_all (self->call_holders);
|
g_list_store_remove_all (self->calls);
|
||||||
|
|
||||||
update_visibility (self);
|
update_visibility (self);
|
||||||
}
|
}
|
||||||
|
@ -564,8 +501,8 @@ constructed (GObject *object)
|
||||||
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
||||||
|
|
||||||
gtk_flow_box_bind_model (self->call_selector,
|
gtk_flow_box_bind_model (self->call_selector,
|
||||||
G_LIST_MODEL (self->call_holders),
|
G_LIST_MODEL (self->calls),
|
||||||
(GtkFlowBoxCreateWidgetFunc) call_holders_create_widget_cb,
|
(GtkFlowBoxCreateWidgetFunc) calls_create_widget_cb,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
|
||||||
update_visibility (self);
|
update_visibility (self);
|
||||||
|
@ -581,7 +518,7 @@ calls_call_window_init (CallsCallWindow *self)
|
||||||
GList *c;
|
GList *c;
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
|
||||||
self->call_holders = g_list_store_new (CALLS_TYPE_CALL_HOLDER);
|
self->calls = g_list_store_new (CALLS_TYPE_CALL_SELECTOR_ITEM);
|
||||||
|
|
||||||
// Show errors in in-app-notification
|
// Show errors in in-app-notification
|
||||||
g_signal_connect_swapped (calls_manager_get_default (),
|
g_signal_connect_swapped (calls_manager_get_default (),
|
||||||
|
@ -611,12 +548,12 @@ dispose (GObject *object)
|
||||||
{
|
{
|
||||||
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
||||||
|
|
||||||
if (self->call_holders)
|
if (self->calls)
|
||||||
{
|
{
|
||||||
remove_calls (self);
|
remove_calls (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_clear_object (&self->call_holders);
|
g_clear_object (&self->calls);
|
||||||
|
|
||||||
G_OBJECT_CLASS (calls_call_window_parent_class)->dispose (object);
|
G_OBJECT_CLASS (calls_call_window_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include "calls-main-window.h"
|
#include "calls-main-window.h"
|
||||||
#include "calls-origin.h"
|
#include "calls-origin.h"
|
||||||
#include "calls-ussd.h"
|
#include "calls-ussd.h"
|
||||||
#include "calls-call-holder.h"
|
|
||||||
#include "calls-call-selector-item.h"
|
#include "calls-call-selector-item.h"
|
||||||
#include "calls-new-call-box.h"
|
#include "calls-new-call-box.h"
|
||||||
#include "calls-history-box.h"
|
#include "calls-history-box.h"
|
||||||
|
|
|
@ -71,8 +71,6 @@ calls_sources = files(['calls-message-source.c', 'calls-message-source.h',
|
||||||
'calls-origin.c', 'calls-origin.h',
|
'calls-origin.c', 'calls-origin.h',
|
||||||
'calls-provider.c', 'calls-provider.h',
|
'calls-provider.c', 'calls-provider.h',
|
||||||
'calls-party.c', 'calls-party.h',
|
'calls-party.c', 'calls-party.h',
|
||||||
'calls-call-data.c', 'calls-call-data.h',
|
|
||||||
'calls-call-holder.c', 'calls-call-holder.h',
|
|
||||||
'calls-call-display.c', 'calls-call-display.h',
|
'calls-call-display.c', 'calls-call-display.h',
|
||||||
'calls-call-selector-item.c', 'calls-call-selector-item.h',
|
'calls-call-selector-item.c', 'calls-call-selector-item.h',
|
||||||
'calls-call-window.c', 'calls-call-window.h',
|
'calls-call-window.c', 'calls-call-window.h',
|
||||||
|
|
Loading…
Reference in a new issue