[gnome-builder/wip/gtk4-port: 1252/1774] plugins/vcsui: wire up validation to css classes
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port: 1252/1774] plugins/vcsui: wire up validation to css classes
- Date: Mon, 11 Jul 2022 22:31:40 +0000 (UTC)
commit 9c8c3fd28caf77d5ae1ba8ee3aea89c23093e2f9
Author: Christian Hergert <chergert redhat com>
Date: Tue May 31 22:00:26 2022 -0700
plugins/vcsui: wire up validation to css classes
src/plugins/vcsui/gbp-vcsui-clone-page.c | 33 +++++++++++++++++++++++++++++++
src/plugins/vcsui/gbp-vcsui-clone-page.ui | 4 ++++
2 files changed, 37 insertions(+)
---
diff --git a/src/plugins/vcsui/gbp-vcsui-clone-page.c b/src/plugins/vcsui/gbp-vcsui-clone-page.c
index 15ba3feb2..90edda1e1 100644
--- a/src/plugins/vcsui/gbp-vcsui-clone-page.c
+++ b/src/plugins/vcsui/gbp-vcsui-clone-page.c
@@ -44,6 +44,7 @@ struct _GbpVcsuiClonePage
GtkWidget *main;
GtkStack *stack;
VteTerminal *terminal;
+ AdwEntryRow *uri_row;
IdeVcsCloneRequest *request;
};
@@ -206,6 +207,36 @@ branch_name_changed_cb (GbpVcsuiClonePage *self,
gtk_widget_set_visible (GTK_WIDGET (self->branch_label), !empty);
}
+static void
+request_notify_cb (GbpVcsuiClonePage *self,
+ GParamSpec *pspec,
+ IdeVcsCloneRequest *request)
+{
+ IdeVcsCloneRequestValidation flags = 0;
+
+ g_assert (GBP_IS_VCSUI_CLONE_PAGE (self));
+ g_assert (IDE_IS_VCS_CLONE_REQUEST (request));
+
+ flags = ide_vcs_clone_request_validate (request);
+
+ if (flags & IDE_VCS_CLONE_REQUEST_INVAL_URI)
+ gtk_widget_add_css_class (GTK_WIDGET (self->uri_row), "error");
+ else
+ gtk_widget_remove_css_class (GTK_WIDGET (self->uri_row), "error");
+
+ if (flags & IDE_VCS_CLONE_REQUEST_INVAL_DIRECTORY)
+ gtk_widget_add_css_class (GTK_WIDGET (self->location_row), "error");
+ else
+ gtk_widget_remove_css_class (GTK_WIDGET (self->location_row), "error");
+
+ if (flags & IDE_VCS_CLONE_REQUEST_INVAL_EMAIL)
+ gtk_widget_add_css_class (GTK_WIDGET (self->author_email_row), "error");
+ else
+ gtk_widget_remove_css_class (GTK_WIDGET (self->author_email_row), "error");
+
+ gtk_widget_action_set_enabled (GTK_WIDGET (self), "clone-page.clone", flags == 0);
+}
+
static void
gbp_vcsui_clone_page_root (GtkWidget *widget)
{
@@ -253,11 +284,13 @@ gbp_vcsui_clone_page_class_init (GbpVcsuiClonePageClass *klass)
gtk_widget_class_bind_template_child (widget_class, GbpVcsuiClonePage, request);
gtk_widget_class_bind_template_child (widget_class, GbpVcsuiClonePage, stack);
gtk_widget_class_bind_template_child (widget_class, GbpVcsuiClonePage, terminal);
+ gtk_widget_class_bind_template_child (widget_class, GbpVcsuiClonePage, uri_row);
gtk_widget_class_bind_template_callback (widget_class, location_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, branch_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, branch_name_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, branch_popover_show_cb);
+ gtk_widget_class_bind_template_callback (widget_class, request_notify_cb);
gtk_widget_class_install_action (widget_class, "clone-page.select-folder", NULL, select_folder_action);
gtk_widget_class_install_action (widget_class, "clone-page.clone", NULL, clone_action);
diff --git a/src/plugins/vcsui/gbp-vcsui-clone-page.ui b/src/plugins/vcsui/gbp-vcsui-clone-page.ui
index 1d3481276..f9e509b01 100644
--- a/src/plugins/vcsui/gbp-vcsui-clone-page.ui
+++ b/src/plugins/vcsui/gbp-vcsui-clone-page.ui
@@ -278,5 +278,9 @@
-->
<property name="module-name">git</property>
<signal name="notify::branch-name" handler="branch_name_changed_cb" swapped="true"
object="GbpVcsuiClonePage"/>
+ <!-- All the following queue validation requests -->
+ <signal name="notify::author-email" handler="request_notify_cb" swapped="true"
object="GbpVcsuiClonePage"/>
+ <signal name="notify::directory" handler="request_notify_cb" swapped="true" object="GbpVcsuiClonePage"/>
+ <signal name="notify::uri" handler="request_notify_cb" swapped="true" object="GbpVcsuiClonePage"/>
</object>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]