mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-06 03: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-best-match.c
|
||||
src/calls-call.c
|
||||
src/calls-call-data.c
|
||||
src/calls-call-display.c
|
||||
src/calls-call-holder.c
|
||||
src/calls-call-record.c
|
||||
src/calls-call-record-row.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"
|
||||
msgstr "The current state of the call"
|
||||
|
||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
||||
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
|
||||
#: src/calls-encryption-indicator.c:129
|
||||
msgid "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"
|
||||
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
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
|
18
po/fa.po
18
po/fa.po
|
@ -86,19 +86,7 @@ msgstr "وضعیت"
|
|||
msgid "The current state of the call"
|
||||
msgstr "وضعیت فعلی تماس"
|
||||
|
||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
||||
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
|
||||
#: src/calls-encryption-indicator.c:129
|
||||
msgid "The party participating in the call"
|
||||
msgstr ""
|
||||
|
||||
|
@ -114,10 +102,6 @@ msgstr "دادههای تماس"
|
|||
msgid "Data for the call this display will be associated with"
|
||||
msgstr "دادهها برای تماسی که این نمایشگر به آن مرتبط است"
|
||||
|
||||
#: src/calls-call-holder.c:158
|
||||
msgid "The call to hold"
|
||||
msgstr "تماس برای انتظار"
|
||||
|
||||
#: src/calls-call-record.c:189
|
||||
msgid "ID"
|
||||
msgstr "شناسه"
|
||||
|
|
18
po/it.po
18
po/it.po
|
@ -90,19 +90,7 @@ msgstr "Stato"
|
|||
msgid "The current state of the call"
|
||||
msgstr "Lo stato corrente della chiamata"
|
||||
|
||||
#: src/calls-call-data.c:136 src/calls-call-holder.c:157
|
||||
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
|
||||
#: src/calls-encryption-indicator.c:129
|
||||
msgid "The party participating in the call"
|
||||
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"
|
||||
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
|
||||
msgid "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 "calls-manager.h"
|
||||
#include "calls-call-display.h"
|
||||
#include "calls-call-data.h"
|
||||
#include "calls-party.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
|
@ -62,7 +63,7 @@ G_DEFINE_TYPE (CallsCallDisplay, calls_call_display, GTK_TYPE_OVERLAY);
|
|||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_CALL_DATA,
|
||||
PROP_CALL,
|
||||
PROP_LAST_PROP,
|
||||
};
|
||||
static GParamSpec *props[PROP_LAST_PROP];
|
||||
|
@ -303,32 +304,22 @@ call_state_changed_cb (CallsCallDisplay *self,
|
|||
|
||||
|
||||
CallsCallDisplay *
|
||||
calls_call_display_new (CallsCallData *data)
|
||||
calls_call_display_new (CallsCall *call)
|
||||
{
|
||||
return g_object_new (CALLS_TYPE_CALL_DISPLAY,
|
||||
"call-data", data,
|
||||
"call", call,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
||||
// FIXME: this should direclty use CallsBestMatch since the matching contact could change over time
|
||||
static void
|
||||
set_call (CallsCallDisplay *self, CallsCall *call)
|
||||
{
|
||||
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)
|
||||
set_party (CallsCallDisplay *self)
|
||||
{
|
||||
GtkWidget *image;
|
||||
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);
|
||||
gtk_box_pack_end (self->party_box, image, TRUE, TRUE, 0);
|
||||
gtk_image_set_pixel_size (GTK_IMAGE (image), 100);
|
||||
|
@ -343,13 +334,37 @@ set_party (CallsCallDisplay *self, CallsParty *party)
|
|||
|
||||
|
||||
static void
|
||||
set_call_data (CallsCallDisplay *self, CallsCallData *data)
|
||||
set_call (CallsCallDisplay *self, CallsCall *call)
|
||||
{
|
||||
set_call (self, calls_call_data_get_call (data));
|
||||
set_party (self, calls_call_data_get_party (data));
|
||||
g_signal_connect_object (call, "state-changed",
|
||||
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
|
||||
set_property (GObject *object,
|
||||
guint property_id,
|
||||
|
@ -359,8 +374,8 @@ set_property (GObject *object,
|
|||
CallsCallDisplay *self = CALLS_CALL_DISPLAY (object);
|
||||
|
||||
switch (property_id) {
|
||||
case PROP_CALL_DATA:
|
||||
set_call_data (self, CALLS_CALL_DATA (g_value_get_object (value)));
|
||||
case PROP_CALL:
|
||||
set_call (self, CALLS_CALL (g_value_get_object (value)));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -456,16 +471,17 @@ calls_call_display_class_init (CallsCallDisplayClass *klass)
|
|||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
object_class->constructed = constructed;
|
||||
object_class->get_property = get_property;
|
||||
object_class->set_property = set_property;
|
||||
object_class->dispose = dispose;
|
||||
object_class->finalize = finalize;
|
||||
|
||||
props[PROP_CALL_DATA] =
|
||||
g_param_spec_object ("call-data",
|
||||
"Call data",
|
||||
"Data for the call this display will be associated with",
|
||||
CALLS_TYPE_CALL_DATA,
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
||||
props[PROP_CALL] =
|
||||
g_param_spec_object ("call",
|
||||
"Call",
|
||||
"The CallsCall which this display rapresents",
|
||||
CALLS_TYPE_CALL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
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, 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__
|
||||
#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
|
||||
|
||||
|
@ -35,7 +35,8 @@ G_BEGIN_DECLS
|
|||
|
||||
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
|
||||
|
||||
|
|
|
@ -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-holder.h"
|
||||
#include "calls-call-display.h"
|
||||
#include "calls-party.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
|
@ -46,7 +48,7 @@ G_DEFINE_TYPE (CallsCallSelectorItem, calls_call_selector_item, GTK_TYPE_EVENT_B
|
|||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_HOLDER,
|
||||
PROP_DISPLAY,
|
||||
PROP_LAST_PROP,
|
||||
};
|
||||
static GParamSpec *props[PROP_LAST_PROP];
|
||||
|
@ -64,12 +66,12 @@ call_state_changed_cb (CallsCallSelectorItem *self,
|
|||
|
||||
|
||||
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,
|
||||
"holder", holder,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
@ -81,21 +83,14 @@ calls_call_selector_item_get_display (CallsCallSelectorItem *item)
|
|||
return item->display;
|
||||
}
|
||||
|
||||
|
||||
// FIXME: this should direclty use CallsBestMatch since the matching contact could change over time
|
||||
static void
|
||||
set_call (CallsCallSelectorItem *self, CallsCall *call)
|
||||
{
|
||||
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)
|
||||
set_party (CallsCallSelectorItem *self)
|
||||
{
|
||||
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);
|
||||
gtk_box_pack_start (self->main_box, image, TRUE, TRUE, 0);
|
||||
|
@ -106,16 +101,23 @@ set_party (CallsCallSelectorItem *self, CallsParty *party)
|
|||
|
||||
|
||||
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 = calls_call_data_get_call (data);
|
||||
CallsCall *call = NULL;
|
||||
|
||||
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));
|
||||
|
||||
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);
|
||||
|
||||
switch (property_id) {
|
||||
case PROP_HOLDER:
|
||||
set_call_holder
|
||||
(self, CALLS_CALL_HOLDER (g_value_get_object (value)));
|
||||
case PROP_DISPLAY:
|
||||
set_call_display
|
||||
(self, CALLS_CALL_DISPLAY (g_value_get_object (value)));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -167,11 +169,11 @@ calls_call_selector_item_class_init (CallsCallSelectorItemClass *klass)
|
|||
object_class->set_property = set_property;
|
||||
object_class->dispose = dispose;
|
||||
|
||||
props[PROP_HOLDER] =
|
||||
g_param_spec_object ("holder",
|
||||
"Call holder",
|
||||
"The holder for this call",
|
||||
CALLS_TYPE_CALL_HOLDER,
|
||||
props[PROP_DISPLAY] =
|
||||
g_param_spec_object ("display",
|
||||
"Call display",
|
||||
"The display for this call",
|
||||
CALLS_TYPE_CALL_DISPLAY,
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
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,
|
||||
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);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "calls-call-window.h"
|
||||
#include "calls-origin.h"
|
||||
#include "calls-call-holder.h"
|
||||
#include "calls-call-selector-item.h"
|
||||
#include "calls-new-call-box.h"
|
||||
#include "calls-in-app-notification.h"
|
||||
|
@ -48,7 +47,7 @@ struct _CallsCallWindow
|
|||
{
|
||||
GtkApplicationWindow parent_instance;
|
||||
|
||||
GListStore *call_holders;
|
||||
GListStore *calls;
|
||||
|
||||
CallsInAppNotification *in_app_notification;
|
||||
|
||||
|
@ -192,7 +191,7 @@ session_inhibit (CallsCallWindow *self, gboolean inhibit)
|
|||
static void
|
||||
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
|
||||
update_layer_surface (self, calls);
|
||||
|
@ -215,12 +214,9 @@ update_visibility (CallsCallWindow *self)
|
|||
|
||||
|
||||
static GtkWidget *
|
||||
call_holders_create_widget_cb (CallsCallHolder *holder,
|
||||
CallsCallWindow *self)
|
||||
calls_create_widget_cb (CallsCallSelectorItem *item,
|
||||
gpointer user_data)
|
||||
{
|
||||
CallsCallSelectorItem *item =
|
||||
calls_call_holder_get_selector_item (holder);
|
||||
g_object_ref (G_OBJECT (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
|
||||
set_focus (CallsCallWindow *self,
|
||||
CallsCallDisplay *display)
|
||||
|
@ -331,56 +270,54 @@ void
|
|||
add_call (CallsCallWindow *self,
|
||||
CallsCall *call)
|
||||
{
|
||||
CallsCallHolder *holder;
|
||||
CallsCallDisplay *display;
|
||||
CallsCallSelectorItem *item;
|
||||
|
||||
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
||||
g_return_if_fail (CALLS_IS_CALL (call));
|
||||
|
||||
holder = calls_call_holder_new (call);
|
||||
|
||||
display = calls_call_holder_get_display (holder);
|
||||
display = calls_call_display_new (call);
|
||||
item = calls_call_selector_item_new (display);
|
||||
gtk_stack_add_named (self->call_stack, GTK_WIDGET (display),
|
||||
calls_call_get_number (call));
|
||||
|
||||
g_list_store_append (self->call_holders, holder);
|
||||
g_object_unref (holder);
|
||||
g_list_store_append (self->calls, item);
|
||||
|
||||
update_visibility (self);
|
||||
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
|
||||
remove_call (CallsCallWindow *self,
|
||||
CallsCall *call,
|
||||
const gchar *reason)
|
||||
{
|
||||
guint n_items, position;
|
||||
CallsCallHolder *holder;
|
||||
gboolean found;
|
||||
g_autoptr (CallsCallSelectorItem) item = NULL;
|
||||
gint position;
|
||||
|
||||
g_return_if_fail (CALLS_IS_CALL_WINDOW (self));
|
||||
g_return_if_fail (CALLS_IS_CALL (call));
|
||||
|
||||
found = find_call_holder (self, &n_items, &position, &holder,
|
||||
find_call_holder_by_call, call);
|
||||
g_return_if_fail (found);
|
||||
position = 0;
|
||||
item = g_list_model_get_item (G_LIST_MODEL (self->calls), position);
|
||||
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));
|
||||
g_list_free (children);
|
||||
|
||||
g_list_store_remove_all (self->call_holders);
|
||||
g_list_store_remove_all (self->calls);
|
||||
|
||||
update_visibility (self);
|
||||
}
|
||||
|
@ -564,8 +501,8 @@ constructed (GObject *object)
|
|||
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
||||
|
||||
gtk_flow_box_bind_model (self->call_selector,
|
||||
G_LIST_MODEL (self->call_holders),
|
||||
(GtkFlowBoxCreateWidgetFunc) call_holders_create_widget_cb,
|
||||
G_LIST_MODEL (self->calls),
|
||||
(GtkFlowBoxCreateWidgetFunc) calls_create_widget_cb,
|
||||
NULL, NULL);
|
||||
|
||||
update_visibility (self);
|
||||
|
@ -581,7 +518,7 @@ calls_call_window_init (CallsCallWindow *self)
|
|||
GList *c;
|
||||
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
|
||||
g_signal_connect_swapped (calls_manager_get_default (),
|
||||
|
@ -611,12 +548,12 @@ dispose (GObject *object)
|
|||
{
|
||||
CallsCallWindow *self = CALLS_CALL_WINDOW (object);
|
||||
|
||||
if (self->call_holders)
|
||||
if (self->calls)
|
||||
{
|
||||
remove_calls (self);
|
||||
}
|
||||
|
||||
g_clear_object (&self->call_holders);
|
||||
g_clear_object (&self->calls);
|
||||
|
||||
G_OBJECT_CLASS (calls_call_window_parent_class)->dispose (object);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include "calls-main-window.h"
|
||||
#include "calls-origin.h"
|
||||
#include "calls-ussd.h"
|
||||
#include "calls-call-holder.h"
|
||||
#include "calls-call-selector-item.h"
|
||||
#include "calls-new-call-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-provider.c', 'calls-provider.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-selector-item.c', 'calls-call-selector-item.h',
|
||||
'calls-call-window.c', 'calls-call-window.h',
|
||||
|
|
Loading…
Reference in a new issue