Commit c7bf7cbc authored by Bob Ham's avatar Bob Ham

Hook up Recent Calls list to database

Closes use-cases#113
Closes use-cases#115
parent 8862b03a
Pipeline #25390 failed with stages
in 1 minute and 21 seconds
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="16"
id="svg7384"
version="1.1"
width="16">
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title
id="title9167">Gnome Symbolic Icon Theme</title>
<defs
id="defs7386">
<linearGradient
id="linearGradient7212"
osb:paint="solid">
<stop
id="stop7214"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
</defs>
<path
class="error"
id="path14066"
d="M 2 4 L 2 10 L 3 10 C 3.5522848 10 4 9.5522848 4 9 L 4 7.4140625 L 9 12.414062 L 13.697266 7.7167969 A 1 1 0 0 0 14 7 L 14 6 L 13 6 A 1 1 0 0 0 12.292969 6.2929688 L 9 9.5859375 L 5.4160156 6 L 7 6 C 7.5522848 6 8 5.5522848 8 5 L 8 4 L 2 4 z "
style="opacity:1;vector-effect:none;fill:#ed333b;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="16"
id="svg7384"
version="1.1"
width="16">
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title
id="title9167">Gnome Symbolic Icon Theme</title>
<defs
id="defs7386">
<linearGradient
id="linearGradient7212"
osb:paint="solid">
<stop
id="stop7214"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
</defs>
<path
id="path819"
d="M 9,13 V 12 C 9,11.44772 8.552285,11 8,11 H 6.414062 l 6.289063,-6.2910203 c 1.027617,-0.93764 -0.463493,-2.43908 -1.408203,-1.41796 L 5,9.5937497 v -1.59375 c -0.0011,-0.55152 -0.448476,-0.99805 -1,-0.99805 v -0.00195 H 3 V 13 Z"
style="opacity:1;vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="16"
id="svg7384"
version="1.1"
width="16">
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title
id="title9167">Gnome Symbolic Icon Theme</title>
<defs
id="defs7386">
<linearGradient
id="linearGradient7212"
osb:paint="solid">
<stop
id="stop7214"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
</defs>
<path
class="error"
style="opacity:1;vector-effect:none;fill:#ed333b;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 14,12 V 6 H 13 C 12.447715,6 12,6.4477152 12,7 V 8.5859375 L 7,3.585938 2.302734,8.2832031 A 1,1 0 0 0 2,9 v 1 H 3 A 1,1 0 0 0 3.707031,9.707031 L 7,6.4140625 10.583984,10 H 9 c -0.5522848,0 -1,0.447715 -1,1 v 1 z"
id="path949" />
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="16"
id="svg7384"
version="1.1"
width="16">
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title
id="title9167">Gnome Symbolic Icon Theme</title>
<defs
id="defs7386">
<linearGradient
id="linearGradient7212"
osb:paint="solid">
<stop
id="stop7214"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
</defs>
<path
style="opacity:1;vector-effect:none;fill:#2ec27e;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 7.000377,3.00001 v 1 c 0,0.55228 0.447715,1 1,1 h 1.585938 l -6.289063,6.29102 c -1.027617,0.93764 0.463493,2.43908 1.408203,1.41796 l 6.294922,-6.30273 v 1.59375 c 0.0011,0.55152 0.448476,0.99805 1,0.99805 v 0.00195 h 1 v -6 z"
id="path14090" />
</svg>
/* calls-application.c
*
* Copyright (C) 2018 Purism SPC
* Copyright (C) 2018, 2019 Purism SPC
* Copyright (C) 2018 Mohammed Sadiq <sadiq@sadiqpk.org>
*
* This file is part of Calls.
......@@ -126,11 +126,16 @@ static const GActionEntry actions[] =
static void
startup (GApplication *application)
{
GtkIconTheme *icon_theme;
G_APPLICATION_CLASS (calls_application_parent_class)->startup (application);
g_set_prgname (APP_ID);
g_set_application_name (_("Calls"));
icon_theme = gtk_icon_theme_get_default ();
gtk_icon_theme_add_resource_path (icon_theme, "/sm/puri/calls/");
g_action_map_add_action_entries (G_ACTION_MAP (application),
actions,
G_N_ELEMENTS (actions),
......@@ -253,7 +258,9 @@ activate (GApplication *application)
* But we assume that the application is closed by closing the
* window. In that case, GTK+ frees the resources right.
*/
window = GTK_WINDOW (calls_main_window_new (gtk_app, self->provider));
window = GTK_WINDOW
(calls_main_window_new (gtk_app, self->provider,
G_LIST_MODEL (self->record_store)));
calls_call_window_new (gtk_app, self->provider);
}
......@@ -282,6 +289,7 @@ dispose (GObject *object)
{
CallsApplication *self = (CallsApplication *)object;
g_clear_object (&self->record_store);
g_clear_object (&self->ringer);
g_clear_object (&self->provider);
......
This diff is collapsed.
/*
* Copyright (C) 2018, 2019 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_RECORD_ROW_H__
#define CALLS_CALL_RECORD_ROW_H__
#include "calls-call-record.h"
#include "calls-new-call-box.h"
#include <gtk/gtk.h>
G_BEGIN_DECLS
#define CALLS_TYPE_CALL_RECORD_ROW (calls_call_record_row_get_type ())
G_DECLARE_FINAL_TYPE (CallsCallRecordRow, calls_call_record_row,
CALLS, CALL_RECORD_ROW, GtkBox);
CallsCallRecordRow *calls_call_record_row_new (CallsCallRecord *record,
CallsNewCallBox *new_call);
CallsCallRecord * calls_call_record_row_get_record (CallsCallRecordRow *self);
G_END_DECLS
#endif /* CALLS_CALL_RECORD_ROW_H__ */
/*
* Copyright (C) 2018 Purism SPC
* Copyright (C) 2018, 2019 Purism SPC
*
* This file is part of Calls.
*
......@@ -23,9 +23,8 @@
*/
#include "calls-history-box.h"
#include "calls-origin.h"
#include "calls-call-holder.h"
#include "calls-call-selector-item.h"
#include "calls-call-record.h"
#include "calls-call-record-row.h"
#include "util.h"
#include <glib/gi18n.h>
......@@ -39,25 +38,194 @@ struct _CallsHistoryBox
{
GtkStack parent_instance;
GtkListStore *history_store;
GtkListBox *history;
GListModel *model;
gulong model_changed_handler_id;
CallsNewCallBox *new_call;
};
G_DEFINE_TYPE (CallsHistoryBox, calls_history_box, GTK_TYPE_STACK)
G_DEFINE_TYPE (CallsHistoryBox, calls_history_box, GTK_TYPE_STACK);
enum {
PROP_0,
PROP_MODEL,
PROP_NEW_CALL,
PROP_LAST_PROP,
};
static GParamSpec *props[PROP_LAST_PROP];
static void
calls_history_box_init (CallsHistoryBox *self)
update (CallsHistoryBox *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
gchar *child_name;
if (g_list_model_get_n_items (self->model) == 0)
{
child_name = "empty";
}
else
{
child_name = "history";
/* Transition should only ever be from empty to non-empty */
if (self->model_changed_handler_id != 0)
{
calls_clear_signal (self->model,
&self->model_changed_handler_id);
}
}
gtk_stack_set_visible_child_name (GTK_STACK (self), child_name);
}
static void
header_cb (GtkListBoxRow *row,
GtkListBoxRow *before,
CallsHistoryBox *self)
{
if (!before)
{
return;
}
if (!gtk_list_box_row_get_header (row))
{
GtkWidget *header =
gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
gtk_list_box_row_set_header (row, header);
}
}
static GtkWidget *
create_row_cb (CallsCallRecord *record,
CallsHistoryBox *self)
{
return GTK_WIDGET (calls_call_record_row_new (record, self->new_call));
}
static void
set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
CallsHistoryBox *self = CALLS_HISTORY_BOX (object);
switch (property_id)
{
case PROP_MODEL:
g_set_object (&self->model,
G_LIST_MODEL (g_value_get_object (value)));
break;
case PROP_NEW_CALL:
g_set_object (&self->new_call,
CALLS_NEW_CALL_BOX (g_value_get_object (value)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
constructed (GObject *object)
{
GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT);
CallsHistoryBox *self = CALLS_HISTORY_BOX (object);
g_assert (self->model != NULL);
self->model_changed_handler_id =
g_signal_connect_swapped
(self->model, "items-changed", G_CALLBACK (update), self);
g_assert (self->model_changed_handler_id != 0);
gtk_list_box_set_header_func (self->history,
(GtkListBoxUpdateHeaderFunc)header_cb,
self,
NULL);
gtk_list_box_bind_model (self->history,
self->model,
(GtkListBoxCreateWidgetFunc)create_row_cb,
self,
NULL);
update (self);
parent_class->constructed (object);
}
static void
dispose (GObject *object)
{
GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT);
CallsHistoryBox *self = CALLS_HISTORY_BOX (object);
g_clear_object (&self->new_call);
g_clear_object (&self->model);
parent_class->dispose (object);
}
static void
calls_history_box_class_init (CallsHistoryBoxClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->set_property = set_property;
object_class->constructed = constructed;
object_class->dispose = dispose;
props[PROP_MODEL] =
g_param_spec_object ("model",
_("model"),
_("The data store containing call records"),
G_TYPE_LIST_MODEL,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
props[PROP_NEW_CALL] =
g_param_spec_object ("new-call",
_("New call"),
_("The UI box for making calls"),
CALLS_TYPE_NEW_CALL_BOX,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
gtk_widget_class_set_template_from_resource (widget_class, "/sm/puri/calls/ui/history-box.ui");
gtk_widget_class_bind_template_child (widget_class, CallsHistoryBox, history_store);
gtk_widget_class_bind_template_child (widget_class, CallsHistoryBox, history);
}
static void
calls_history_box_init (CallsHistoryBox *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
}
CallsHistoryBox *
calls_history_box_new (GListModel *model,
CallsNewCallBox *new_call)
{
return g_object_new (CALLS_TYPE_HISTORY_BOX,
"model", model,
"new-call", new_call,
NULL);
}
......@@ -25,6 +25,8 @@
#ifndef CALLS_HISTORY_BOX_H__
#define CALLS_HISTORY_BOX_H__
#include "calls-new-call-box.h"
#include <gtk/gtk.h>
#define HANDY_USE_UNSTABLE_API
......@@ -34,7 +36,10 @@ G_BEGIN_DECLS
#define CALLS_TYPE_HISTORY_BOX (calls_history_box_get_type ())
G_DECLARE_FINAL_TYPE (CallsHistoryBox, calls_history_box, CALLS, HISTORY_BOX, GtkStack)
G_DECLARE_FINAL_TYPE (CallsHistoryBox, calls_history_box, CALLS, HISTORY_BOX, GtkStack);
CallsHistoryBox * calls_history_box_new (GListModel *model,
CallsNewCallBox *new_call);
G_END_DECLS
......
......@@ -27,6 +27,7 @@
#include "calls-call-holder.h"
#include "calls-call-selector-item.h"
#include "calls-new-call-box.h"
#include "calls-history-box.h"
#include "calls-enumerate.h"
#include "config.h"
#include "util.h"
......@@ -43,6 +44,7 @@ struct _CallsMainWindow
GtkApplicationWindow parent_instance;
CallsProvider *provider;
GListModel *record_store;
GtkRevealer *info_revealer;
guint info_timeout;
......@@ -55,6 +57,8 @@ struct _CallsMainWindow
HdyViewSwitcher *narrow_switcher;
HdyViewSwitcherBar *switcher_bar;
GtkStack *main_stack;
CallsNewCallBox *new_call;
};
G_DEFINE_TYPE (CallsMainWindow, calls_main_window, GTK_TYPE_APPLICATION_WINDOW);
......@@ -62,6 +66,7 @@ G_DEFINE_TYPE (CallsMainWindow, calls_main_window, GTK_TYPE_APPLICATION_WINDOW);
enum {
PROP_0,
PROP_PROVIDER,
PROP_RECORD_STORE,
PROP_LAST_PROP,
};
static GParamSpec *props[PROP_LAST_PROP];
......@@ -194,7 +199,13 @@ set_property (GObject *object,
switch (property_id) {
case PROP_PROVIDER:
g_set_object (&self->provider, CALLS_PROVIDER (g_value_get_object (value)));
g_set_object (&self->provider,
CALLS_PROVIDER (g_value_get_object (value)));
break;
case PROP_RECORD_STORE:
g_set_object (&self->record_store,
G_LIST_MODEL (g_value_get_object (value)));
break;
default:
......@@ -236,24 +247,39 @@ set_up_provider (CallsMainWindow *self)
static void
constructed (GObject *object)
{
GObjectClass *parent_class = g_type_class_peek (GTK_TYPE_APPLICATION_WINDOW);
GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT);
CallsMainWindow *self = CALLS_MAIN_WINDOW (object);
GSimpleActionGroup *simple_action_group;
CallsNewCallBox *new_call_box;
GtkContainer *main_stack = GTK_CONTAINER (self->main_stack);
GtkWidget *widget;
CallsHistoryBox *history;
set_up_provider (self);
/* Add new call box */
new_call_box = calls_new_call_box_new (self->provider);
gtk_stack_add_titled (self->main_stack, GTK_WIDGET (new_call_box),
// Add new call box
self->new_call = calls_new_call_box_new (self->provider);
widget = GTK_WIDGET (self->new_call);
gtk_stack_add_titled (self->main_stack, widget,
"dial-pad", _("Dial Pad"));
gtk_container_child_set (GTK_CONTAINER (self->main_stack),
GTK_WIDGET (new_call_box),
gtk_container_child_set (main_stack, widget,
"icon-name", "input-dialpad-symbolic",
NULL);
gtk_stack_set_visible_child_name (self->main_stack, "dial-pad");
/* Add actions */
// Add call records
history = calls_history_box_new (self->record_store,
self->new_call);
widget = GTK_WIDGET (history);
gtk_stack_add_titled (self->main_stack, widget,
"recent", _("Recent"));
gtk_container_child_set
(main_stack, widget,
"icon-name", "document-open-recent-symbolic",
"position", 0,
NULL);
gtk_widget_set_visible (widget, TRUE);
gtk_stack_set_visible_child_name (self->main_stack, "recent");
// Add actions
simple_action_group = g_simple_action_group_new ();
g_action_map_add_action_entries (G_ACTION_MAP (simple_action_group),
window_entries,
......@@ -279,13 +305,15 @@ constructed (GObject *object)
}
static void
dispose (GObject *object)
{
GObjectClass *parent_class = g_type_class_peek (GTK_TYPE_APPLICATION_WINDOW);
GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT);
CallsMainWindow *self = CALLS_MAIN_WINDOW (object);
stop_info_timeout (self);
g_clear_object (&self->record_store);
g_clear_object (&self->provider);
parent_class->dispose (object);
......@@ -327,6 +355,13 @@ calls_main_window_class_init (CallsMainWindowClass *klass)
CALLS_TYPE_PROVIDER,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
props[PROP_RECORD_STORE] =
g_param_spec_object ("record-store",
_("Record store"),
_("The store of call records"),
G_TYPE_LIST_MODEL,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
......@@ -354,13 +389,17 @@ calls_main_window_init (CallsMainWindow *self)
CallsMainWindow *
calls_main_window_new (GtkApplication *application, CallsProvider *provider)
calls_main_window_new (GtkApplication *application,
CallsProvider *provider,
GListModel *record_store)
{
g_return_val_if_fail (GTK_IS_APPLICATION (application), NULL);
g_return_val_if_fail (CALLS_IS_PROVIDER (provider), NULL);
g_return_val_if_fail (G_IS_LIST_MODEL (record_store), NULL);
return g_object_new (CALLS_TYPE_MAIN_WINDOW,
"application", application,
"provider", provider,
"record-store", record_store,
NULL);
}
......@@ -35,8 +35,9 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (CallsMainWindow, calls_main_window, CALLS, MAIN_WINDOW, GtkApplicationWindow);
CallsMainWindow *calls_main_window_new (GtkApplication *application,
CallsProvider *provider);
CallsMainWindow *calls_main_window_new (GtkApplication *application,
CallsProvider *provider,
GListModel *record_store);
G_END_DECLS
......
......@@ -79,30 +79,11 @@ dial_pad_deleted_cb (CallsNewCallBox *self,
static void
dial_clicked_cb (CallsNewCallBox *self,
const gchar *unused,
GtkButton *button)
dial_clicked_cb (CallsNewCallBox *self)
{
GtkTreeIter iter;
gboolean ok;
CallsOrigin *origin;
const gchar *number;
ok = gtk_combo_box_get_active_iter (self->origin_box, &iter);
if (!ok)
{
g_debug ("Can't submit call with no origin");
return;
}
gtk_tree_model_get (GTK_TREE_MODEL (self->origin_store), &iter,
ORIGIN_STORE_COLUMN_ORIGIN, &origin,
-1);
g_assert (CALLS_IS_ORIGIN (origin));
number = gtk_entry_get_text (GTK_ENTRY (self->number_entry));
calls_origin_dial (origin, number);
calls_new_call_box_dial
(self,
gtk_entry_get_text (GTK_ENTRY (self->number_entry)));
}
......@@ -311,3 +292,29 @@ calls_new_call_box_new (CallsProvider *provider)
"provider", provider,
NULL);
}
void
calls_new_call_box_dial (CallsNewCallBox *self,
const gchar *target)
{
GtkTreeIter iter;
gboolean ok;
CallsOrigin *origin;
g_return_if_fail (CALLS_IS_NEW_CALL_BOX (self));
g_return_if_fail (target != NULL);
ok = gtk_combo_box_get_active_iter (self->origin_box, &iter);
if (!ok)
{
g_debug ("Can't submit call with no origin");
return;
}
gtk_tree_model_get (GTK_TREE_MODEL (self->origin_store), &iter,
ORIGIN_STORE_COLUMN_ORIGIN, &origin,
-1);
g_assert (CALLS_IS_ORIGIN (origin));
calls_origin_dial (origin, target);
}
......@@ -35,7 +35,9 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (CallsNewCallBox, calls_new_call_box, CALLS, NEW_CALL_BOX, GtkBox);
CallsNewCallBox * calls_new_call_box_new (CallsProvider *provider);
CallsNewCallBox * calls_new_call_box_new (CallsProvider *provider);
void calls_new_call_box_dial (CallsNewCallBox *self,
const gchar *target);
G_END_DECLS
......
......@@ -79,7 +79,7 @@ struct _CallsRecordStore
GomRepository *repository;
};
G_DEFINE_TYPE (CallsRecordStore, calls_record_store, G_TYPE_OBJECT);
G_DEFINE_TYPE (CallsRecordStore, calls_record_store, G_TYPE_LIST_STORE);
enum {
......@@ -90,6 +90,133 @@ enum {