From df74a805949094c93958abaf00f749ede86e65e9 Mon Sep 17 00:00:00 2001 From: Bob Ham Date: Thu, 22 Aug 2019 16:01:10 +0100 Subject: [PATCH] calls-new-call-box: Allow entering of "+" symbol Use the "number" property of the dial pad for the dialed number which takes care of cycling buttons. While we're at it, also make the clear button external to the number entry box, enlarging it and turning it into a backspace button. Closes #12 --- src/calls-new-call-box.c | 66 ++++++++++++++++++++++++++++++++-------- src/ui/new-call-box.ui | 51 +++++++++++++++++++++++++------ 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/src/calls-new-call-box.c b/src/calls-new-call-box.c index 15e4ca1..58d2dd6 100644 --- a/src/calls-new-call-box.c +++ b/src/calls-new-call-box.c @@ -36,7 +36,9 @@ struct _CallsNewCallBox GtkListStore *origin_store; GtkComboBox *origin_box; - GtkSearchEntry *number_entry; + GtkEntry *number_entry; + GtkButton *backspace; + HdyDialer *dial_pad; GtkButton *dial; GtkLabel *status; @@ -84,22 +86,40 @@ get_origin (CallsNewCallBox *self) static void -dial_pad_symbol_clicked_cb (CallsNewCallBox *self, - gchar symbol, - HdyDialer *dialer) +backspace_clicked_cb (CallsNewCallBox *self) { - calls_entry_append (GTK_ENTRY (self->number_entry), symbol); + const gchar *old; + size_t len; + gchar *new; + + old = hdy_dialer_get_number (self->dial_pad); + g_assert (old != NULL); + + len = strlen (old); + if (len == 0) + { + return; + } + + new = g_strndup (old, strlen (old) - 1); + hdy_dialer_set_number (self->dial_pad, new); + g_free (new); } static void -dial_pad_deleted_cb (CallsNewCallBox *self, - HdyDialer *dialer) +dial_pad_notify_number_cb (CallsNewCallBox *self, + GParamSpec *pspec, + GObject *gobject) { - GtkEntryBuffer *buf = gtk_entry_get_buffer (GTK_ENTRY (self->number_entry)); - guint len = gtk_entry_buffer_get_length (buf); + const gchar *number; - gtk_entry_buffer_delete_text (buf, len - 1, 1); + g_assert (strcmp(g_param_spec_get_name (pspec), "number") == 0); + + number = hdy_dialer_get_number (self->dial_pad); + gtk_entry_set_text (self->number_entry, number); + gtk_widget_set_visible (GTK_WIDGET (self->backspace), + strlen (number) > 0); } @@ -308,10 +328,27 @@ calls_new_call_box_init (CallsNewCallBox *self) } +static void +constructed (GObject *object) +{ + GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT); + CallsNewCallBox *self = CALLS_NEW_CALL_BOX (object); + PangoAttrList *attrs; + + // Increase the size of the number entry text + attrs = pango_attr_list_new (); + pango_attr_list_insert (attrs, pango_attr_scale_new (1.2)); + gtk_entry_set_attributes (self->number_entry, attrs); + pango_attr_list_unref (attrs); + + parent_class->constructed (object); +} + + static void dispose (GObject *object) { - GObjectClass *parent_class = g_type_class_peek (GTK_TYPE_BOX); + GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT); CallsNewCallBox *self = CALLS_NEW_CALL_BOX (object); clear_dial_queue (self); @@ -332,6 +369,7 @@ calls_new_call_box_class_init (CallsNewCallBoxClass *klass) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = set_property; + object_class->constructed = constructed; object_class->dispose = dispose; @@ -349,11 +387,13 @@ calls_new_call_box_class_init (CallsNewCallBoxClass *klass) gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, origin_store); gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, origin_box); gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, number_entry); + gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, backspace); + gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, dial_pad); gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, dial); gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, status); gtk_widget_class_bind_template_callback (widget_class, dial_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, dial_pad_deleted_cb); - gtk_widget_class_bind_template_callback (widget_class, dial_pad_symbol_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, dial_pad_notify_number_cb); + gtk_widget_class_bind_template_callback (widget_class, backspace_clicked_cb); } diff --git a/src/ui/new-call-box.ui b/src/ui/new-call-box.ui index 2072446..4ea8686 100644 --- a/src/ui/new-call-box.ui +++ b/src/ui/new-call-box.ui @@ -42,15 +42,47 @@ - - True - False - edit-find-symbolic - False - phone - no-emoji|inhibit-osk + True - simple + False + horizontal + + + False + phone + no-emoji|inhibit-osk + True + False + + + True + True + + + + + True + True + none + False + + + + + Backspace through number + + + + + True + edit-clear-symbolic + 2 + + + + False @@ -69,8 +101,7 @@ False 300 False - - + False