[polari/wip/raresv/nick-popover: 15/15] userDetails: Indicate when status notifications are enabled
- From: Rares Visalom <raresvisalom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/raresv/nick-popover: 15/15] userDetails: Indicate when status notifications are enabled
- Date: Sat, 1 Oct 2016 19:21:01 +0000 (UTC)
commit d7df9862ea4ef1f350851d408d426edc63b0b704
Author: raresv <rares visalom gmail com>
Date: Thu Aug 18 20:58:10 2016 +0300
userDetails: Indicate when status notifications are enabled
We are about to add an image button to the popover to enable the
previously added status notifications. However by itself its
purpose won't be entirely clear, so show a brief description when
the feature is enabled.
https://bugzilla.gnome.org/show_bug.cgi?id=760853
data/org.gnome.Polari.data.gresource.xml | 1 +
data/resources/polari-user-notify-symbolic.svg | 18 +++++++
data/resources/user-details.ui | 40 +++++++++++++++
data/resources/user-popover.ui | 63 +++++++++++++++++++-----
src/userList.js | 28 ++++++++++-
5 files changed, 136 insertions(+), 14 deletions(-)
---
diff --git a/data/org.gnome.Polari.data.gresource.xml b/data/org.gnome.Polari.data.gresource.xml
index 1c4d3fc..b21bb85 100644
--- a/data/org.gnome.Polari.data.gresource.xml
+++ b/data/org.gnome.Polari.data.gresource.xml
@@ -5,6 +5,7 @@
<file alias="data/networks.json">resources/networks.json</file>
<file alias="gtk/help-overlay.ui" preprocess="xml-stripblanks">resources/help-overlay.ui</file>
<file alias="gtk/menus.ui" preprocess="xml-stripblanks">resources/menus.ui</file>
+ <file alias="icons/polari-user-notify-symbolic.svg"
preprocess="xml-stripblanks">resources/polari-user-notify-symbolic.svg</file>
<file alias="ui/connection-details.ui"
preprocess="xml-stripblanks">resources/connection-details.ui</file>
<file alias="ui/connection-properties.ui"
preprocess="xml-stripblanks">resources/connection-properties.ui</file>
<file alias="ui/entry-area.ui" preprocess="xml-stripblanks">resources/entry-area.ui</file>
diff --git a/data/resources/polari-user-notify-symbolic.svg b/data/resources/polari-user-notify-symbolic.svg
new file mode 100644
index 0000000..c28a4d4
--- /dev/null
+++ b/data/resources/polari-user-notify-symbolic.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg10865" viewBox="0 0
15.999999 15.999999" height="4.5155554mm" width="4.5155554mm" inkscape:version="0.91 r13725"
sodipodi:docname="polari-user-notify-symbolic.svg">
+ <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10"
gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2"
inkscape:window-width="1920" inkscape:window-height="1080" id="namedview10" showgrid="false"
inkscape:zoom="29.500001" inkscape:cx="1.6963679" inkscape:cy="10.950363" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="svg10865"/>
+ <defs id="defs10867"/>
+ <metadata id="metadata10870">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="g35541" transform="translate(-346.1907,-963.1781)">
+ <path inkscape:connector-curvature="0" style="fill:#bebebe;fill-opacity:1;stroke:none" d="m
354.25319,964.67814 c -1.65686,0 -3,1.34315 -3,3 0,1.27269 -0.0169,4.99999 -3.5625,7 l 13,0 c
-3.45455,-2.00001 -3.4375,-5.72731 -3.4375,-7 0,-1.65685 -1.34314,-3 -3,-3 z" id="path5705-7"/>
+ <path inkscape:connector-curvature="0" style="fill:#bebebe;fill-opacity:1;stroke:none" id="path5707-8"
d="m 356.24405,975.6781 a 2.0000288,2.0000186 0 0 1 -1.00002,1.73207 2.0000288,2.0000186 0 0 1 -2.00003,0
2.0000288,2.0000186 0 0 1 -1.00001,-1.73207 l 2.00003,0 z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/data/resources/user-details.ui b/data/resources/user-details.ui
index a9349ec..003768b 100644
--- a/data/resources/user-details.ui
+++ b/data/resources/user-details.ui
@@ -127,6 +127,46 @@
<property name="left-attach">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">polari-user-notify-symbolic</property>
+ <property name="visible" bind-source="notificationLabel"
+ bind-property="visible" bind-flags="sync-create"/>
+ <property name="opacity" bind-source="notificationLabel"
+ bind-property="opacity" bind-flags="sync-create"/>
+ <property name="no-show-all">True</property>
+ <property name="halign">start</property>
+ <property name="margin-left">0</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ <packing>
+ <property name="width">1</property>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="notificationLabel">
+ <property name="ellipsize">end</property>
+ <property name="halign">start</property>
+ <property name="margin-start">20</property>
+ <property name="hexpand">True</property>
+ <property name="no-show-all">True</property>
+ <property name="visible">True</property>
+ <property name="use-markup">True</property>
+ <property name="label" translatable="yes">Will notify if user appears online.</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ <packing>
+ <property name="width">2</property>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </packing>
+ </child>
</object>
</child>
<child>
diff --git a/data/resources/user-popover.ui b/data/resources/user-popover.ui
index adc2d76..e080ab1 100644
--- a/data/resources/user-popover.ui
+++ b/data/resources/user-popover.ui
@@ -8,25 +8,62 @@
<property name="orientation">vertical</property>
<property name="visible">True</property>
<child>
- <object class="GtkLabel" id="nickLabel">
- <property name="halign">start</property>
- <property name="margin-top">0</property>
- <property name="ellipsize">end</property>
- <property name="max-width-chars">17</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="statusLabel">
- <property name="halign">start</property>
- <property name="margin-bottom">0</property>
- <property name="use-markup">True</property>
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
<property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="margin">9</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <child>
+ <object class="GtkLabel" id="nickLabel">
+ <property name="halign">start</property>
+ <property name="margin-top">0</property>
+ <property name="ellipsize">end</property>
+ <property name="max-width-chars">17</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="statusLabel">
+ <property name="halign">start</property>
+ <property name="margin-bottom">0</property>
+ <property name="use-markup">True</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="notifyButton">
+ <property name="hexpand">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <property name="visible" bind-source="notifyButton"
+ bind-property="sensitive"
+ bind-flags="sync-create"/>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">polari-user-notify-symbolic</property>
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
<child>
<object class="Gjs_UserDetails" id="userDetails">
<property name="visible">True</property>
+ <property name="notifications-enabled" bind-source="notifyButton"
+ bind-property="active"
+ bind-flags="sync-create"/>
<!-- trigger details update on visibility changes -->
<property name="expanded" bind-source="Gjs_UserPopover"
bind-property="visible"
diff --git a/src/userList.js b/src/userList.js
index 2326142..ef9b98e 100644
--- a/src/userList.js
+++ b/src/userList.js
@@ -112,12 +112,18 @@ const UserDetails = new Lang.Class({
'detailsGrid',
'fullnameLabel',
'lastLabel',
+ 'notificationLabel',
'messageButton'],
Properties: { 'expanded': GObject.ParamSpec.boolean('expanded',
'expanded',
'expanded',
READWRITE,
- false)},
+ false),
+ 'notifications-enabled': GObject.ParamSpec.boolean('notifications-enabled',
+ 'notifications-enabled',
+ 'notifications-enabled',
+ READWRITE,
+ false)},
_init: function(params = {}) {
let user = params.user;
@@ -137,6 +143,21 @@ const UserDetails = new Lang.Class({
this._detailsGrid.hide();
},
+ get notifications_enabled() {
+ return this._notificationsEnabled;
+ },
+
+ set notifications_enabled(value) {
+ if (this._notificationsEnabled == value)
+ return;
+
+ this._notificationsEnabled = value;
+
+ this.notify('notifications-enabled');
+
+ this._notificationLabel.opacity = value ? 1. : 0.;
+ },
+
set user(user) {
if (this._user == user)
return;
@@ -155,6 +176,7 @@ const UserDetails = new Lang.Class({
this._expand();
this._updateButtonVisibility();
+ this._notificationLabel.visible = this._user == null;
this._lastLabel.visible = this._user != null;
},
@@ -308,6 +330,7 @@ const UserPopover = new Lang.Class({
Template: 'resource:///org/gnome/Polari/ui/user-popover.ui',
InternalChildren: ['nickLabel',
'statusLabel',
+ 'notifyButton',
'userDetails'],
_init: function(params) {
@@ -345,6 +368,9 @@ const UserPopover = new Lang.Class({
this._nickLabel.label = this._nickname;
this._userDetails.nickname = nickname;
+ let actionName = this._userTracker.getNotifyActionName(this._nickname);
+ this._notifyButton.action_name = actionName;
+
this._setBasenick(Polari.util_get_basenick(nickname));
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]