[geary/geary-0.13] Merge branch 'wip/validator-fixes' into 'master'
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/geary-0.13] Merge branch 'wip/validator-fixes' into 'master'
- Date: Wed, 6 Mar 2019 09:05:21 +0000 (UTC)
commit 39e8b297c7aa7e646924072cdff68351308e718c
Author: Michael Gratton <mike vee net>
Date: Wed Mar 6 08:11:32 2019 +0000
Merge branch 'wip/validator-fixes' into 'master'
Validator polish and fixes
Closes #294
See merge request GNOME/geary!163
(cherry picked from commit 833f1d5c5f8780027c46b48d501306e3a85cb521)
b86c28a3 Replace Validator's in-progress icon with Gtk.Entry's progres meter
7dc07bda Fix NetworkAddressValidator not updating port number
src/client/components/components-validator.vala | 90 ++++++++++++++++++-------
1 file changed, 66 insertions(+), 24 deletions(-)
---
diff --git a/src/client/components/components-validator.vala b/src/client/components/components-validator.vala
index 0c7e4247..199751cd 100644
--- a/src/client/components/components-validator.vala
+++ b/src/client/components/components-validator.vala
@@ -104,6 +104,9 @@ public class Components.Validator : GLib.Object {
private Geary.TimeoutManager ui_update_timer;
+ private Geary.TimeoutManager pulse_timer;
+ bool did_pulse = false;
+
/** Fired when the validation state changes. */
public signal void state_changed(Trigger reason, Validity prev_state);
@@ -125,6 +128,11 @@ public class Components.Validator : GLib.Object {
2, on_update_ui
);
+ this.pulse_timer = new Geary.TimeoutManager.milliseconds(
+ 200, on_pulse
+ );
+ this.pulse_timer.repetition = FOREVER;
+
this.indeterminate_state = {
target.get_icon_name(ICON_POS),
target.get_icon_tooltip_text(ICON_POS)
@@ -133,7 +141,10 @@ public class Components.Validator : GLib.Object {
target.get_icon_name(ICON_POS),
target.get_icon_tooltip_text(ICON_POS)
};
- this.in_progress_state = { "process-working-symbolic", null};
+ this.in_progress_state = {
+ target.get_icon_name(ICON_POS),
+ null
+ };
this.empty_state = { "dialog-warning-symbolic", null };
this.invalid_state = { "dialog-error-symbolic", null };
@@ -148,6 +159,7 @@ public class Components.Validator : GLib.Object {
this.target.changed.disconnect(on_changed);
this.target.activate.disconnect(on_activate);
this.ui_update_timer.reset();
+ this.pulse_timer.reset();
}
/**
@@ -233,6 +245,8 @@ public class Components.Validator : GLib.Object {
focus_lost();
break;
}
+ } else if (!this.pulse_timer.is_running) {
+ this.pulse_timer.start();
}
}
@@ -257,6 +271,7 @@ public class Components.Validator : GLib.Object {
style.remove_class(Gtk.STYLE_CLASS_WARNING);
UiState ui = { null, null };
+ bool in_progress = false;
switch (state) {
case Validity.INDETERMINATE:
ui = this.indeterminate_state;
@@ -267,6 +282,7 @@ public class Components.Validator : GLib.Object {
break;
case Validity.IN_PROGRESS:
+ in_progress = true;
ui = this.in_progress_state;
break;
@@ -281,6 +297,22 @@ public class Components.Validator : GLib.Object {
break;
}
+ if (in_progress) {
+ if (!this.pulse_timer.is_running) {
+ this.pulse_timer.start();
+ }
+ } else {
+ this.pulse_timer.reset();
+ // If a pulse hasn't been performed (and hence the
+ // progress bar is not visible), setting the fraction here
+ // to reset it will actually cause the progress bar to
+ // become visible. So only reset if needed.
+ if (this.did_pulse) {
+ this.target.progress_fraction = 0.0;
+ this.did_pulse = false;
+ }
+ }
+
this.target.set_icon_from_icon_name(ICON_POS, ui.icon_name);
this.target.set_icon_tooltip_text(
ICON_POS,
@@ -303,6 +335,11 @@ public class Components.Validator : GLib.Object {
update_ui(this.state);
}
+ private void on_pulse() {
+ this.target.progress_pulse();
+ this.did_pulse = true;
+ }
+
private void on_changed() {
this.target_changed = true;
validate_entry(Trigger.CHANGED);
@@ -416,30 +453,35 @@ public class Components.NetworkAddressValidator : Validator {
debug("Error parsing host name \"%s\": %s", value, err.message);
}
- // Only re-validate if previously invalid or the host has
- // changed
- if (address != null && (
- this.validated_address == null ||
- this.validated_address.hostname != address.hostname)) {
- this.cancellable = new GLib.Cancellable();
- this.resolver.lookup_by_name_async.begin(
- address.hostname, this.cancellable,
- (obj, res) => {
- try {
- this.resolver.lookup_by_name_async.end(res);
- this.validated_address = address;
- update_state(Validator.Validity.VALID, reason);
- } catch (GLib.IOError.CANCELLED err) {
- this.validated_address = null;
- } catch (GLib.Error err) {
- this.validated_address = null;
- update_state(Validator.Validity.INVALID, reason);
+ if (address != null) {
+ // Re-validate if previously invalid or the host has
+ // changed
+ if (this.validated_address == null ||
+ this.validated_address.hostname != address.hostname) {
+ this.cancellable = new GLib.Cancellable();
+ this.resolver.lookup_by_name_async.begin(
+ address.hostname, this.cancellable,
+ (obj, res) => {
+ try {
+ this.resolver.lookup_by_name_async.end(res);
+ this.validated_address = address;
+ update_state(Validator.Validity.VALID, reason);
+ } catch (GLib.IOError.CANCELLED err) {
+ this.validated_address = null;
+ } catch (GLib.Error err) {
+ this.validated_address = null;
+ update_state(Validator.Validity.INVALID, reason);
+ }
+ this.cancellable = null;
}
- this.cancellable = null;
- }
- );
-
- ret = Validator.Validity.IN_PROGRESS;
+ );
+ ret = Validator.Validity.IN_PROGRESS;
+ } else {
+ // Update the validated address in case the port
+ // number is being edited and has changed
+ this.validated_address = address;
+ ret = Validator.Validity.VALID;
+ }
}
return ret;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]