Skip to content

Commit

Permalink
Selectively show certain widgets depending on the window layout and r…
Browse files Browse the repository at this point in the history
…efactor adaptive view functions
  • Loading branch information
Rosalie Tolentino committed Sep 12, 2017
1 parent 58f8edc commit f53034f
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 80 deletions.
46 changes: 23 additions & 23 deletions gui/definitions.go
Original file line number Diff line number Diff line change
Expand Up @@ -3966,7 +3966,7 @@ YWJlbDEiLz4KICAgIDwvd2lkZ2V0cz4KICA8L29iamVjdD4KPC9pbnRlcmZhY2U+Cg==

"/definitions/UnverifiedWarning.xml": {
local: "definitions/UnverifiedWarning.xml",
size: 1707,
size: 1718,
modtime: 1489449600,
compressed: `
PGludGVyZmFjZT4KICA8b2JqZWN0IGNsYXNzPSJHdGtJbmZvQmFyIiBpZD0iaW5mb2JhciI+CiAgICA8
Expand All @@ -3976,28 +3976,28 @@ c2lnbmFsIG5hbWU9InJlc3BvbnNlIiBoYW5kbGVyPSJjbG9zZV92ZXJpZmljYXRpb24iLz4KICAgIDxj
aGlsZCBpbnRlcm5hbC1jaGlsZD0iY29udGVudF9hcmVhIj4KICAgICAgPG9iamVjdCBjbGFzcz0iR3Rr
Qm94IiBpZD0iYm94Ij4KICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPkdUS19PUklF
TlRBVElPTl9WRVJUSUNBTDwvcHJvcGVydHk+CiAgICAgICAgICA8Y2hpbGQ+CiAgICAgICAgICAgIDxv
YmplY3QgY2xhc3M9Ikd0a0JveCI+CiAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9yaWVudGF0
aW9uIj5HVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDwvcHJvcGVydHk+CiAgICAgICAgICAgICAgPGNo
aWxkPgogICAgICAgICAgICAgICAgPG9iamVjdCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJhbGVydF9pbWFn
ZSIvPgogICAgICAgICAgICAgIDwvY2hpbGQ+CiAgICAgICAgICAgICAgPGNoaWxkPgogICAgICAgICAg
ICAgICAgPG9iamVjdCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJtZXNzYWdlIj4KICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9IndyYXAiPnRydWU8L3Byb3BlcnR5PgogICAgICAgICAgICAgICAgPC9v
YmplY3Q+CiAgICAgICAgICAgICAgPC9jaGlsZD4KICAgICAgICAgICAgPC9vYmplY3Q+CiAgICAgICAg
ICA8L2NoaWxkPgogICAgICAgICAgPGNoaWxkPgogICAgICAgICAgICA8b2JqZWN0ICBjbGFzcz0gIkd0
a0J1dHRvbiIgaWQ9ImJ1dHRvbl92ZXJpZnlfdmVydGljYWwiPgogICAgICAgICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlZhbGlkYXRlIHNlY3VyZSBjaGFubmVsPC9w
cm9wZXJ0eT4KICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuLWRlZmF1bHQiPnRydWU8L3By
b3BlcnR5PgogICAgICAgICAgICA8L29iamVjdD4KICAgICAgICAgIDwvY2hpbGQ+CiAgICAgICAgICA8
Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KICAgICAgICAgICAgPG9iamVjdCBjbGFz
cz0iR3RrQnV0dG9uQm94Ij4KICAgICAgICAgICAgICA8Y2hpbGQ+CiAgICAgICAgICAgICAgICA8b2Jq
ZWN0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b25fdmVyaWZ5X2hvcml6b250YWwiPgogICAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5WYWxpZGF0
ZSBzZWN1cmUgY2hhbm5lbDwvcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJjYW4tZGVmYXVsdCI+dHJ1ZTwvcHJvcGVydHk+CiAgICAgICAgICAgICAgICA8L29iamVjdD4KICAg
ICAgICAgICAgICA8L2NoaWxkPgogICAgICAgICAgICA8L29iamVjdD4KICAgICAgICAgIDwvY2hpbGQ+
CiAgICAgIDwvb2JqZWN0PgogICAgICA8cGFja2luZz4KICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFj
ay10eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgogICAgICA8L3BhY2tpbmc+CiAgICA8L2NoaWxk
PgogIDwvb2JqZWN0Pgo8L2ludGVyZmFjZT4K
YmplY3QgY2xhc3M9Ikd0a0JveCIgaWQ9ImFsZXJ0Ij4KICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt
ZT0ib3JpZW50YXRpb24iPkdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMPC9wcm9wZXJ0eT4KICAgICAg
ICAgICAgICA8Y2hpbGQ+CiAgICAgICAgICAgICAgICA8b2JqZWN0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9
ImFsZXJ0X2ltYWdlIi8+CiAgICAgICAgICAgICAgPC9jaGlsZD4KICAgICAgICAgICAgICA8Y2hpbGQ+
CiAgICAgICAgICAgICAgICA8b2JqZWN0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9Im1lc3NhZ2UiPgogICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0id3JhcCI+dHJ1ZTwvcHJvcGVydHk+CiAgICAgICAg
ICAgICAgICA8L29iamVjdD4KICAgICAgICAgICAgICA8L2NoaWxkPgogICAgICAgICAgICA8L29iamVj
dD4KICAgICAgICAgIDwvY2hpbGQ+CiAgICAgICAgICA8Y2hpbGQ+CiAgICAgICAgICAgIDxvYmplY3Qg
IGNsYXNzPSAiR3RrQnV0dG9uIiBpZD0iYnV0dG9uX3ZlcmlmeV92ZXJ0aWNhbCI+CiAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+VmFsaWRhdGUgc2VjdXJl
IGNoYW5uZWw8L3Byb3BlcnR5PgogICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW4tZGVmYXVs
dCI+dHJ1ZTwvcHJvcGVydHk+CiAgICAgICAgICAgIDwvb2JqZWN0PgogICAgICAgICAgPC9jaGlsZD4K
ICAgICAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iYWN0aW9uX2FyZWEiPgogICAgICAgICAgICA8
b2JqZWN0IGNsYXNzPSJHdGtCdXR0b25Cb3giPgogICAgICAgICAgICAgIDxjaGlsZD4KICAgICAgICAg
ICAgICAgIDxvYmplY3QgY2xhc3M9Ikd0a0J1dHRvbiIgaWQ9ImJ1dHRvbl92ZXJpZnlfaG9yaXpvbnRh
bCI+CiAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5
ZXMiPlZhbGlkYXRlIHNlY3VyZSBjaGFubmVsPC9wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgPHBy
b3BlcnR5IG5hbWU9ImNhbi1kZWZhdWx0Ij50cnVlPC9wcm9wZXJ0eT4KICAgICAgICAgICAgICAgIDwv
b2JqZWN0PgogICAgICAgICAgICAgIDwvY2hpbGQ+CiAgICAgICAgICAgIDwvb2JqZWN0PgogICAgICAg
ICAgPC9jaGlsZD4KICAgICAgPC9vYmplY3Q+CiAgICAgIDxwYWNraW5nPgogICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJwYWNrLXR5cGUiPkdUS19QQUNLX0VORDwvcHJvcGVydHk+CiAgICAgIDwvcGFja2luZz4K
ICAgIDwvY2hpbGQ+CiAgPC9vYmplY3Q+CjwvaW50ZXJmYWNlPgo=
`,
},

Expand Down
2 changes: 1 addition & 1 deletion gui/definitions/UnverifiedWarning.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<object class="GtkBox" id="box">
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="alert">
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
<object class="GtkImage" id="alert_image"/>
Expand Down
123 changes: 67 additions & 56 deletions gui/verifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ type verifier struct {
peerRequestsSMP *peerRequestsSMPNotification
unverifiedWarning *unverifiedWarning
verificationSuccess *verificationSuccessNotification
shouldResize bool
}

type notifier struct {
Expand All @@ -50,7 +49,6 @@ func newVerifier(u *gtkUI, conv *conversationPane) *verifier {
peerJid: conv.mapCurrentPeer("", func(p *rosters.Peer) string {
return p.Jid
}),
shouldResize: false,
}
v.buildPinWindow()
v.buildAnswerSMPDialog()
Expand Down Expand Up @@ -104,14 +102,13 @@ func (v *verifier) buildPinWindow() {
}

func (v *verifier) showUnverifiedWarning() {
v.shouldResize = true
v.unverifiedWarning.show()
v.chooseBestLayout()
v.unverifiedWarning.show(v.chooseBestLayout)
}

type unverifiedWarning struct {
b *builder
box gtki.Box
alertBox gtki.Box
infobar gtki.InfoBar
msg gtki.Label
verifyButtonVert gtki.Button
Expand All @@ -120,20 +117,46 @@ type unverifiedWarning struct {
peerIsVerified func() bool
}

func (u *unverifiedWarning) show() {
func (u *unverifiedWarning) show(showBestLayout func()) {
if !u.peerIsVerified() {
u.infobar.ShowAll()
u.infobar.Show()
u.box.Show()
u.alertBox.Show()
u.msg.Show()
u.alertImage.ShowAll()
showBestLayout()
} else {
log.Println("We have a peer and a trusted fingerprint already, so no reason to show the unverified warning")
}
}

func (u *unverifiedWarning) showVerticalView() {
u.box.SetOrientation(gtki.VerticalOrientation)
u.verifyButtonVert.Show()
u.verifyButtonHoriz.Hide()
addStyle(u.alertImage, "alert-icon", `.alert-icon {
margin-left: 1em;
margin-right: 0.5em;
}`)
}

func (u *unverifiedWarning) showHorizontalView() {
u.box.SetOrientation(gtki.HorizontalOrientation)
u.verifyButtonVert.Hide()
u.verifyButtonHoriz.Show()
addStyle(u.alertImage, "alert-icon", `.alert-icon {
margin-left: 3em;
margin-right: 0.5em;
}`)
}

func (v *verifier) buildUnverifiedWarning(peerIsVerified func() bool) {
v.unverifiedWarning = &unverifiedWarning{b: newBuilder("UnverifiedWarning")}
v.unverifiedWarning.peerIsVerified = peerIsVerified
v.unverifiedWarning.b.getItems(
"infobar", &v.unverifiedWarning.infobar,
"box", &v.unverifiedWarning.box,
"alert", &v.unverifiedWarning.alertBox,
"message", &v.unverifiedWarning.msg,
"button_verify_vertical", &v.unverifiedWarning.verifyButtonVert,
"button_verify_horizontal", &v.unverifiedWarning.verifyButtonHoriz,
Expand All @@ -148,6 +171,7 @@ func (v *verifier) buildUnverifiedWarning(peerIsVerified func() bool) {
v.unverifiedWarning.msg.SetText(i18n.Local("Make sure no one else is reading your messages"))
v.unverifiedWarning.verifyButtonVert.Connect("clicked", v.showPINDialog)
v.unverifiedWarning.verifyButtonHoriz.Connect("clicked", v.showPINDialog)
v.unverifiedWarning.verifyButtonHoriz.Hide()
v.notifier.notify(v.unverifiedWarning.infobar)
}

Expand Down Expand Up @@ -292,6 +316,33 @@ type peerRequestsSMPNotification struct {
cancelButtonHoriz gtki.Button
}

func (p *peerRequestsSMPNotification) show(showBestLayout func()) {
p.infobar.Show()
p.box.Show()
p.msg.Show()
showBestLayout()
}

func (p *peerRequestsSMPNotification) showVerticalView() {
p.box.SetOrientation(gtki.VerticalOrientation)
p.vertActionButtons.ShowAll()
p.verifyButtonHoriz.Hide()
p.cancelButtonHoriz.Hide()
addStyle(p.cancelButtonVert, "cancelButton", `.cancelButton {
margin-left: 0.5em;
}`)
}

func (p *peerRequestsSMPNotification) showHorizontalView() {
p.box.SetOrientation(gtki.HorizontalOrientation)
p.vertActionButtons.Hide()
p.verifyButtonHoriz.Show()
p.cancelButtonHoriz.Show()
addStyle(p.cancelButtonHoriz, "cancelButton", `.cancelButton {
margin-left: 0.5em;
}`)
}

func (v *verifier) buildPeerRequestsSMPNotification() {
v.peerRequestsSMP = &peerRequestsSMPNotification{b: newBuilder("PeerRequestsSMP")}
v.peerRequestsSMP.b.getItems(
Expand All @@ -314,21 +365,20 @@ func (v *verifier) buildPeerRequestsSMPNotification() {
v.session.AbortSMP(v.peerJid, v.currentResource)
v.showUnverifiedWarning()
})

v.peerRequestsSMP.cancelButtonHoriz.Hide()
v.peerRequestsSMP.msg.SetText(i18n.Localf("%s is waiting for you to finish verifying the security of this channel...", v.peerName))
v.notifier.notify(v.peerRequestsSMP.infobar)
}

func (v *verifier) displayRequestForSecret(question string) {
v.shouldResize = true
v.hideUnverifiedWarning()
v.peerRequestsSMP.verifyButtonVert.Connect("clicked", func() {
v.showAnswerSMPDialog(question)
})
v.peerRequestsSMP.verifyButtonHoriz.Connect("clicked", func() {
v.showAnswerSMPDialog(question)
})
v.peerRequestsSMP.infobar.ShowAll()
v.peerRequestsSMP.show(v.chooseBestLayout)
}

type verificationSuccessNotification struct {
Expand Down Expand Up @@ -392,54 +442,15 @@ func (v *verifier) hideUnverifiedWarning() {
v.unverifiedWarning.infobar.Hide()
}

func (v *verifier) defaultLayoutForNotifications() {
v.peerRequestsSMP.box.SetOrientation(gtki.VerticalOrientation)
v.peerRequestsSMP.vertActionButtons.Show()
v.peerRequestsSMP.verifyButtonHoriz.Hide()
v.peerRequestsSMP.cancelButtonHoriz.Hide()
addStyle(v.peerRequestsSMP.cancelButtonVert, "cancelButton", `.cancelButton {
margin-left: 0.5em;
}`)

v.unverifiedWarning.box.SetOrientation(gtki.VerticalOrientation)
v.unverifiedWarning.verifyButtonVert.Show()
v.unverifiedWarning.verifyButtonHoriz.Hide()
addStyle(v.unverifiedWarning.alertImage, "alert-icon", `.alert-icon {
margin-left: 1em;
margin-right: 0.5em;
}`)
}

func (v *verifier) layoutForNotificationsInWiderWindow() {
v.peerRequestsSMP.box.SetOrientation(gtki.HorizontalOrientation)
v.peerRequestsSMP.vertActionButtons.Hide()
v.peerRequestsSMP.verifyButtonHoriz.Show()
v.peerRequestsSMP.cancelButtonHoriz.Show()
addStyle(v.peerRequestsSMP.cancelButtonHoriz, "cancelButton", `.cancelButton {
margin-left: 0.5em;
}`)

v.unverifiedWarning.box.SetOrientation(gtki.HorizontalOrientation)
v.unverifiedWarning.verifyButtonVert.Hide()
v.unverifiedWarning.verifyButtonHoriz.Show()
addStyle(v.unverifiedWarning.alertImage, "alert-icon", `.alert-icon {
margin-left: 3em;
margin-right: 0.5em;
}`)
}

var bestTransitionWidth = 600
var bestHorizontalTransitionWidth = 800

func (v *verifier) chooseBestLayout() {
w, l := v.parentWindow.GetSize()
if w > bestTransitionWidth {
v.layoutForNotificationsInWiderWindow()
currentWidth, _ := v.parentWindow.GetSize()
if currentWidth > bestHorizontalTransitionWidth {
v.peerRequestsSMP.showHorizontalView()
v.unverifiedWarning.showHorizontalView()
} else {
if v.shouldResize {
// TODO: 400 is a magic number. Assign it to a variable
v.parentWindow.Resize(400, l)
v.shouldResize = false
}
v.defaultLayoutForNotifications()
v.peerRequestsSMP.showVerticalView()
v.unverifiedWarning.showVerticalView()
}
}

0 comments on commit f53034f

Please sign in to comment.