1
////////////////////////////////////////////////////////////////////////////////
2
//3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
3
// 10 20 30 40 50 60 70 80
6
// Example of how to use libnotify correctly and at the same time comply to
7
// the new jaunty notification spec (read: visual guidelines)
10
// gmcs -pkg:notify-sharp icon-only.cs -out:icon-only.exe
13
// Copyright 2009 Canonical Ltd.
16
// Mirco "MacSlow" Mueller <mirco.mueller@canonical.com>
18
// This program is free software: you can redistribute it and/or modify it
19
// under the terms of the GNU General Public License version 3, as published
20
// by the Free Software Foundation.
22
// This program is distributed in the hope that it will be useful, but
23
// WITHOUT ANY WARRANTY; without even the implied warranties of
24
// MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
25
// PURPOSE. See the GNU General Public License for more details.
27
// You should have received a copy of the GNU General Public License along
28
// with this program. If not, see <http://www.gnu.org/licenses/>.
30
////////////////////////////////////////////////////////////////////////////////
53
static bool[] m_capabilities = {false, // actions
55
false, // body-hyperlinks
61
false, // image/svg+xml
62
false, // synchronous-hint
64
false, // icon-only-hint
65
false}; // truncation-hint
67
private static void InitCaps ()
70
if (Global.Capabilities == null)
73
if (Array.IndexOf (Global.Capabilities, "actions") > -1)
74
m_capabilities[(int) Capability.CAP_ACTIONS] = true;
76
if (Array.IndexOf (Global.Capabilities, "body") > -1)
77
m_capabilities[(int) Capability.CAP_BODY] = true;
79
if (Array.IndexOf (Global.Capabilities, "body-hyperlinks") > -1)
80
m_capabilities[(int) Capability.CAP_BODY_HYPERLINKS] = true;
82
if (Array.IndexOf (Global.Capabilities, "body-images") > -1)
83
m_capabilities[(int) Capability.CAP_BODY_IMAGES] = true;
85
if (Array.IndexOf (Global.Capabilities, "body-markup") > -1)
86
m_capabilities[(int) Capability.CAP_BODY_MARKUP] = true;
88
if (Array.IndexOf (Global.Capabilities, "icon-multi") > -1)
89
m_capabilities[(int) Capability.CAP_ICON_MULTI] = true;
91
if (Array.IndexOf (Global.Capabilities, "icon-static") > -1)
92
m_capabilities[(int) Capability.CAP_ICON_STATIC] = true;
94
if (Array.IndexOf (Global.Capabilities, "sound") > -1)
95
m_capabilities[(int) Capability.CAP_SOUND] = true;
97
if (Array.IndexOf (Global.Capabilities, "image/svg+xml") > -1)
98
m_capabilities[(int) Capability.CAP_IMAGE_SVG] = true;
100
if (Array.IndexOf (Global.Capabilities, "x-canonical-private-synchronous") > -1)
101
m_capabilities[(int) Capability.CAP_SYNCHRONOUS] = true;
103
if (Array.IndexOf (Global.Capabilities, "x-canonical-append") > -1)
104
m_capabilities[(int) Capability.CAP_APPEND] = true;
106
if (Array.IndexOf (Global.Capabilities, "x-canonical-private-icon-only") > -1)
107
m_capabilities[(int) Capability.CAP_LAYOUT_ICON_ONLY] = true;
109
if (Array.IndexOf (Global.Capabilities, "x-canonical-truncation") > -1)
110
m_capabilities[(int) Capability.CAP_TRUNCATION] = true;
113
private static void PrintCaps ()
115
Console.WriteLine ("Name: "
116
+ Global.ServerInformation.Name);
117
Console.WriteLine ("Vendor: "
118
+ Global.ServerInformation.Vendor);
119
Console.WriteLine ("Version: "
120
+ Global.ServerInformation.Version);
121
Console.WriteLine ("Spec. Version: "
122
+ Global.ServerInformation.SpecVersion);
124
Console.WriteLine ("Supported capabilities/hints:");
125
if (m_capabilities[(int) Capability.CAP_ACTIONS])
126
Console.WriteLine ("\tactions");
127
if (m_capabilities[(int) Capability.CAP_BODY])
128
Console.WriteLine ("\tbody");
129
if (m_capabilities[(int) Capability.CAP_BODY_HYPERLINKS])
130
Console.WriteLine ("\tbody-hyperlinks");
131
if (m_capabilities[(int) Capability.CAP_BODY_IMAGES])
132
Console.WriteLine ("\tbody-images");
133
if (m_capabilities[(int) Capability.CAP_BODY_MARKUP])
134
Console.WriteLine ("\tbody-markup");
135
if (m_capabilities[(int) Capability.CAP_ICON_MULTI])
136
Console.WriteLine ("\ticon-multi");
137
if (m_capabilities[(int) Capability.CAP_ICON_STATIC])
138
Console.WriteLine ("\ticon-static");
139
if (m_capabilities[(int) Capability.CAP_SOUND])
140
Console.WriteLine ("\tsound");
141
if (m_capabilities[(int) Capability.CAP_IMAGE_SVG])
142
Console.WriteLine ("\timage/svg+xml");
143
if (m_capabilities[(int) Capability.CAP_SYNCHRONOUS])
144
Console.WriteLine ("\tx-canonical-private-synchronous");
145
if (m_capabilities[(int) Capability.CAP_APPEND])
146
Console.WriteLine ("\tx-canonical-append");
147
if (m_capabilities[(int) Capability.CAP_LAYOUT_ICON_ONLY])
148
Console.WriteLine ("\tx-canonical-private-icon-only");
149
if (m_capabilities[(int) Capability.CAP_TRUNCATION])
150
Console.WriteLine ("\tx-canonical-truncation");
152
Console.WriteLine ("Notes:");
153
if (Global.ServerInformation.Name == "notify-osd")
155
Console.WriteLine ("\tx- and y-coordinates hints are ignored");
156
Console.WriteLine ("\texpire-timeout is ignored");
157
Console.WriteLine ("\tbody-markup is accepted but filtered");
160
Console.WriteLine ("\tnone");
163
public static void Main ()
165
// call this so we can savely use the m_capabilities array later
168
// show what's supported
171
// try the icon-sonly case
172
if (m_capabilities[(int) Capability.CAP_LAYOUT_ICON_ONLY])
174
Notification n = new Notification ("Eject", // for a11y-reasons supply something meaning full
175
"", // this needs to be empty!
176
"notification-device-eject");
177
n.AddHint ("x-canonical-private-icon-only", "");
181
Console.WriteLine ("The daemon does not support the x-canonical-private-icon-only hint!");