messenger-gtk

Gtk+3 graphical user interfaces for GNUnet Messenger
Log | Files | Refs | Submodules | README | LICENSE

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:
Mresources/ui/new_contact.ui | 70+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Msrc/ui/new_contact.c | 20++++++++++++++++++++
Msrc/ui/new_contact.h | 2++
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;