commit bcc9ca752b08c93eff354a7dca4b11d3644651ff
parent 7c6e78f6eb92194d8f36085a43cdf24a2ed75f9d
Author: Jacki <jacki@thejackimonster.de>
Date: Fri, 19 Jan 2024 18:40:00 +0100
Cleanup transitions of new contact dialog
Signed-off-by: Jacki <jacki@thejackimonster.de>
Diffstat:
3 files changed, 91 insertions(+), 1 deletion(-)
diff --git a/resources/ui/new_contact.ui b/resources/ui/new_contact.ui
@@ -123,6 +123,33 @@ Author: Tobias Frisch
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
+ <object class="GtkBox" id="loading_box">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkSpinner">
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="active">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">loading_page</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkBox" id="fail_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -159,6 +186,47 @@ Author: Tobias Frisch
</object>
<packing>
<property name="name">page_fail</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="no_camera_box">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="pixel-size">64</property>
+ <property name="icon-name">camera-photo-symbolic</property>
+ <property name="icon_size">3</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">No camera found!</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">page_none</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -173,7 +241,7 @@ Author: Tobias Frisch
</object>
<packing>
<property name="name">page_drawing</property>
- <property name="position">1</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/src/ui/new_contact.c b/src/ui/new_contact.c
@@ -106,6 +106,8 @@ handle_camera_combo_box_change(GtkComboBox *widget,
if (!handle->pipeline)
return;
+ gtk_stack_set_visible_child(handle->preview_stack, handle->loading_box);
+
gst_element_set_state(handle->pipeline, GST_STATE_NULL);
gst_element_set_state(handle->pipeline, GST_STATE_PLAYING);
}
@@ -117,8 +119,14 @@ _disable_video_processing(UI_NEW_CONTACT_Handle *handle,
GNUNET_assert(handle);
if (handle->preview_stack)
+ goto skip_stack;
+
+ if (handle->camera_count)
gtk_stack_set_visible_child(handle->preview_stack, handle->fail_box);
+ else
+ gtk_stack_set_visible_child(handle->preview_stack, handle->no_camera_box);
+skip_stack:
if ((!(handle->pipeline)) || (!drop_pipeline))
return;
@@ -408,6 +416,8 @@ ui_new_contact_dialog_init(MESSENGER_Application *app,
{
GNUNET_assert((app) && (handle));
+ handle->camera_count = 0;
+
_setup_gst_pipeline(handle);
if (app->portal)
@@ -458,14 +468,24 @@ ui_new_contact_dialog_init(MESSENGER_Application *app,
gtk_builder_get_object(handle->builder, "preview_stack")
);
+ handle->loading_box = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "loading_box")
+ );
+
handle->fail_box = GTK_WIDGET(
gtk_builder_get_object(handle->builder, "fail_box")
);
+ handle->no_camera_box = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "no_camera_box")
+ );
+
handle->video_box = GTK_WIDGET(
gtk_builder_get_object(handle->builder, "video_box")
);
+ gtk_stack_set_visible_child(handle->preview_stack, handle->loading_box);
+
GtkWidget *widget;
if (handle->sink)
g_object_get(handle->sink, "widget", &widget, NULL);
diff --git a/src/ui/new_contact.h b/src/ui/new_contact.h
@@ -49,7 +49,9 @@ typedef struct UI_NEW_CONTACT_Handle
GtkListStore *camera_list_store;
GtkStack *preview_stack;
+ GtkWidget *loading_box;
GtkWidget *fail_box;
+ GtkWidget *no_camera_box;
GtkWidget *video_box;
GtkEntry *id_entry;