main-window: Use AdwDialog for USSD
We grab the focus hence making the text entry easy to identify and by following the content size we get a reasonable width. Closes: https://gitlab.gnome.org/GNOME/calls/-/issues/681 Signed-off-by: Guido Günther <agx@sigxcpu.org> Part-of: <https://gitlab.gnome.org/GNOME/calls/-/merge_requests/761>
This commit is contained in:
@@ -58,7 +58,7 @@ struct _CallsMainWindow {
|
|||||||
CallsAccountOverview *account_overview;
|
CallsAccountOverview *account_overview;
|
||||||
CallsNewCallBox *new_call;
|
CallsNewCallBox *new_call;
|
||||||
|
|
||||||
GtkWindow *ussd_dialog;
|
AdwDialog *ussd_dialog;
|
||||||
GtkStack *ussd_stack;
|
GtkStack *ussd_stack;
|
||||||
GtkSpinner *ussd_spinner;
|
GtkSpinner *ussd_spinner;
|
||||||
GtkBox *ussd_content;
|
GtkBox *ussd_content;
|
||||||
@@ -150,6 +150,8 @@ window_update_ussd_state (CallsMainWindow *self,
|
|||||||
state == CALLS_USSD_STATE_USER_RESPONSE);
|
state == CALLS_USSD_STATE_USER_RESPONSE);
|
||||||
gtk_widget_set_visible (GTK_WIDGET (self->ussd_entry),
|
gtk_widget_set_visible (GTK_WIDGET (self->ussd_entry),
|
||||||
state == CALLS_USSD_STATE_USER_RESPONSE);
|
state == CALLS_USSD_STATE_USER_RESPONSE);
|
||||||
|
if (state == CALLS_USSD_STATE_USER_RESPONSE)
|
||||||
|
gtk_widget_grab_focus (GTK_WIDGET (self->ussd_entry));
|
||||||
|
|
||||||
if (state == CALLS_USSD_STATE_USER_RESPONSE ||
|
if (state == CALLS_USSD_STATE_USER_RESPONSE ||
|
||||||
state == CALLS_USSD_STATE_ACTIVE)
|
state == CALLS_USSD_STATE_ACTIVE)
|
||||||
@@ -173,25 +175,33 @@ window_ussd_added_cb (CallsMainWindow *self,
|
|||||||
g_object_set_data_full (G_OBJECT (self->ussd_dialog), "ussd",
|
g_object_set_data_full (G_OBJECT (self->ussd_dialog), "ussd",
|
||||||
g_object_ref (ussd), g_object_unref);
|
g_object_ref (ussd), g_object_unref);
|
||||||
window_update_ussd_state (self, ussd);
|
window_update_ussd_state (self, ussd);
|
||||||
gtk_window_set_title (self->ussd_dialog, _("USSD"));
|
|
||||||
gtk_window_present (self->ussd_dialog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_ussd_cancel_clicked_cb (CallsMainWindow *self)
|
ussd_dialog_closed_cb (CallsMainWindow *self)
|
||||||
{
|
{
|
||||||
CallsUssd *ussd;
|
CallsUssd *ussd;
|
||||||
|
|
||||||
g_assert (CALLS_IS_MAIN_WINDOW (self));
|
g_assert (CALLS_IS_MAIN_WINDOW (self));
|
||||||
|
|
||||||
ussd = g_object_get_data (G_OBJECT (self->ussd_dialog), "ussd");
|
ussd = g_object_get_data (G_OBJECT (self->ussd_dialog), "ussd");
|
||||||
|
|
||||||
if (ussd)
|
if (ussd)
|
||||||
calls_ussd_cancel_async (ussd, NULL, NULL, NULL);
|
calls_ussd_cancel_async (ussd, NULL, NULL, NULL);
|
||||||
|
|
||||||
gtk_window_close (self->ussd_dialog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
window_ussd_cancel_clicked_cb (CallsMainWindow *self)
|
||||||
|
{
|
||||||
|
g_assert (CALLS_IS_MAIN_WINDOW (self));
|
||||||
|
|
||||||
|
ussd_dialog_closed_cb (self);
|
||||||
|
|
||||||
|
adw_dialog_close (self->ussd_dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_ussd_entry_changed_cb (CallsMainWindow *self,
|
window_ussd_entry_changed_cb (CallsMainWindow *self,
|
||||||
GtkEntry *entry)
|
GtkEntry *entry)
|
||||||
@@ -222,7 +232,7 @@ window_ussd_respond_cb (GObject *object,
|
|||||||
response = calls_ussd_respond_finish (ussd, result, &error);
|
response = calls_ussd_respond_finish (ussd, result, &error);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
gtk_window_close (self->ussd_dialog);
|
adw_dialog_close (self->ussd_dialog);
|
||||||
g_warning ("USSD Error: %s", error->message);
|
g_warning ("USSD Error: %s", error->message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -267,7 +277,7 @@ main_window_ussd_send_cb (GObject *object,
|
|||||||
ussd = g_task_get_task_data (G_TASK (result));
|
ussd = g_task_get_task_data (G_TASK (result));
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
gtk_window_close (self->ussd_dialog);
|
adw_dialog_close (self->ussd_dialog);
|
||||||
g_warning ("USSD Error: %s", error->message);
|
g_warning ("USSD Error: %s", error->message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -348,7 +358,6 @@ constructed (GObject *object)
|
|||||||
G_CALLBACK (window_update_ussd_state),
|
G_CALLBACK (window_update_ussd_state),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
gtk_window_set_transient_for (self->ussd_dialog, GTK_WINDOW (self));
|
|
||||||
|
|
||||||
// Add call records
|
// Add call records
|
||||||
history = calls_history_box_new (self->record_store);
|
history = calls_history_box_new (self->record_store);
|
||||||
@@ -460,6 +469,12 @@ static void
|
|||||||
calls_main_window_init (CallsMainWindow *self)
|
calls_main_window_init (CallsMainWindow *self)
|
||||||
{
|
{
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
|
||||||
|
g_signal_connect_object (self->ussd_dialog,
|
||||||
|
"closed",
|
||||||
|
G_CALLBACK (ussd_dialog_closed_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -490,7 +505,7 @@ calls_main_window_dial (CallsMainWindow *self,
|
|||||||
calls_new_call_box_send_ussd_async (self->new_call, target, NULL,
|
calls_new_call_box_send_ussd_async (self->new_call, target, NULL,
|
||||||
main_window_ussd_send_cb, self);
|
main_window_ussd_send_cb, self);
|
||||||
|
|
||||||
gtk_window_present (self->ussd_dialog);
|
adw_dialog_present (self->ussd_dialog, GTK_WIDGET (self));
|
||||||
} else {
|
} else {
|
||||||
calls_new_call_box_dial (self->new_call, target);
|
calls_new_call_box_dial (self->new_call, target);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,13 +60,14 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</template>
|
</template>
|
||||||
<object class="GtkWindow" id="ussd_dialog">
|
|
||||||
<property name="modal">True</property>
|
<object class="AdwDialog" id="ussd_dialog">
|
||||||
<property name="default-width">240</property>
|
|
||||||
<property name="default-height">200</property>
|
|
||||||
<property name="hide-on-close">True</property>
|
|
||||||
<property name="default-widget">ussd_entry</property>
|
<property name="default-widget">ussd_entry</property>
|
||||||
<child type="titlebar">
|
<property name="title" translatable="yes">USSD</property>
|
||||||
|
<property name="follows-content-size">True</property>
|
||||||
|
<property name="child">
|
||||||
|
<object class="AdwToolbarView">
|
||||||
|
<child type="top">
|
||||||
<object class="AdwHeaderBar">
|
<object class="AdwHeaderBar">
|
||||||
<property name="show-start-title-buttons">False</property>
|
<property name="show-start-title-buttons">False</property>
|
||||||
<property name="show-end-title-buttons">False</property>
|
<property name="show-end-title-buttons">False</property>
|
||||||
@@ -84,7 +85,7 @@
|
|||||||
<property name="focus-on-click">False</property>
|
<property name="focus-on-click">False</property>
|
||||||
<property name="use-underline">True</property>
|
<property name="use-underline">True</property>
|
||||||
<property name="label" translatable="yes">_Close</property>
|
<property name="label" translatable="yes">_Close</property>
|
||||||
<signal name="clicked" handler="gtk_window_close" object="ussd_dialog" swapped="yes"/>
|
<signal name="clicked" handler="gtk_widget_hide" object="ussd_dialog" swapped="yes"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child type="end">
|
<child type="end">
|
||||||
@@ -101,16 +102,18 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<property name="content">
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="hexpand">True</property>
|
|
||||||
<property name="vexpand">True</property>
|
|
||||||
<property name="margin-start">12</property>
|
<property name="margin-start">12</property>
|
||||||
<property name="margin-end">12</property>
|
<property name="margin-end">12</property>
|
||||||
<property name="margin-top">12</property>
|
<property name="margin-top">12</property>
|
||||||
<property name="margin-bottom">12</property>
|
<property name="margin-bottom">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkStack" id="ussd_stack">
|
<object class="GtkStack" id="ussd_stack">
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="ussd_content">
|
<object class="GtkBox" id="ussd_content">
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
@@ -139,8 +142,11 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<menu id="app-menu">
|
<menu id="app-menu">
|
||||||
<section>
|
<section>
|
||||||
<item>
|
<item>
|
||||||
|
|||||||
Reference in New Issue
Block a user