[gnome-builder/wip/gtk4-port: 1252/1774] plugins/vcsui: wire up validation to css classes




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]