Commit b6ffd5f6 authored by Tristan Van Berkom's avatar Tristan Van Berkom

Marked some properties to be "themed-icon"

	* plugins/gtk+/gtk+.xml.in: Marked some properties to be "themed-icon"

	* gladeui/glade-xml-utils.h, gladeui/glade-property-class.[ch], 
	gladeui/glade-editor-property.c: Added a tag to mark string properties
	that are "themed-icon", use the themed icon chooser for those properties.

	* gladeui/glade-name-icon-chooser.[ch], gladeui/icon-naming-spec.c: Added
	  themed icon chooser (bug 359640).


svn path=/trunk/; revision=1552
parent d46816c4
2007-08-14 Tristan Van Berkom <tvb@gnome.org>
* plugins/gtk+/gtk+.xml.in: Marked some properties to be "themed-icon"
* gladeui/glade-xml-utils.h, gladeui/glade-property-class.[ch],
gladeui/glade-editor-property.c: Added a tag to mark string properties
that are "themed-icon", use the themed icon chooser for those properties.
2007-08-14 Vincent Geddes <vgeddes@gnome.org>
* plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Made toolbar-style
optional & save always (plus it responds well in the UI) (bug 382785).
* gladeui/glade-name-icon-chooser.[ch], gladeui/icon-naming-spec.c: Added
themed icon chooser (bug 359640).
2007-08-14 Tristan Van Berkom <tvb@gnome.org>
* gladeui/glade-widget.c: When building objects based on template params,
......
......@@ -13,7 +13,7 @@ lib_LTLIBRARIES = libgladeui-1.la
BUILT_SOURCES = glade-marshallers.c glade-marshallers.h
EXTRA_DIST = glade-marshallers.list gladeui.rc.in
EXTRA_DIST = glade-marshallers.list gladeui.rc.in icon-naming-spec.c
# The glade-3 core library
libgladeui_1_la_SOURCES = \
......@@ -31,6 +31,8 @@ libgladeui_1_la_SOURCES = \
glade-palette-expander.c \
glade-design-layout.c \
glade-design-view.c \
glade-named-icon-chooser-dialog.c \
glade-named-icon-chooser-dialog.h \
glade-cursor.c \
glade-catalog.c \
glade-property.c \
......
......@@ -47,6 +47,7 @@
#include "glade-project.h"
#include "glade-builtins.h"
#include "glade-marshallers.h"
#include "glade-named-icon-chooser-dialog.h"
enum {
PROP_0,
......@@ -1300,6 +1301,214 @@ glade_eprop_color_create_input (GladeEditorProperty *eprop)
return hbox;
}
/*******************************************************************************
GladeEditorPropertyNamedIconClass
*******************************************************************************/
typedef struct {
GladeEditorProperty parent_instance;
GtkWidget *entry;
gchar *current_context;
} GladeEPropNamedIcon;
GLADE_MAKE_EPROP (GladeEPropNamedIcon, glade_eprop_named_icon)
#define GLADE_TYPE_EPROP_NAMED_ICON (glade_eprop_named_icon_get_type())
#define GLADE_EPROP_NAMED_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_NAMED_ICON, GladeEPropNamedIcon))
#define GLADE_EPROP_NAMED_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_NAMED_ICON, GladeEPropNamedIconClass))
#define GLADE_IS_EPROP_NAMED_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_NAMED_ICON))
#define GLADE_IS_EPROP_NAMED_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_NAMED_ICON))
#define GLADE_EPROP_NAMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_EPROP_NAMED_ICON, GladeEPropNamedIconClass))
static void
glade_eprop_named_icon_finalize (GObject *object)
{
/* Chain up */
G_OBJECT_CLASS (editor_property_class)->finalize (object);
}
static void
glade_eprop_named_icon_load (GladeEditorProperty *eprop,
GladeProperty *property)
{
GladeEPropNamedIcon *eprop_named_icon = GLADE_EPROP_NAMED_ICON (eprop);
/* Chain up first */
editor_property_class->load (eprop, property);
if (property == NULL)
return;
GtkEntry *entry = GTK_ENTRY (eprop_named_icon->entry);
const gchar *text = g_value_get_string (property->value);
gtk_entry_set_text (entry, text ? text : "");
}
static void
glade_eprop_named_icon_changed_common (GladeEditorProperty *eprop,
const gchar *text,
gboolean use_command)
{
GValue *val;
gchar *prop_text;
val = g_new0 (GValue, 1);
g_value_init (val, G_TYPE_STRING);
glade_property_get (eprop->property, &prop_text);
/* Here we try not to modify the project state by not
* modifying a null value for an unchanged property.
*/
if (prop_text == NULL &&
text && text[0] == '\0')
g_value_set_string (val, NULL);
else if (text == NULL &&
prop_text && prop_text == '\0')
g_value_set_string (val, "");
else
g_value_set_string (val, text);
glade_editor_property_commit (eprop, val);
g_value_unset (val);
g_free (val);
}
static void
glade_eprop_named_icon_changed (GtkWidget *entry,
GladeEditorProperty *eprop)
{
gchar *text;
if (eprop->loading)
return;
text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
glade_eprop_named_icon_changed_common (eprop, text, eprop->use_command);
g_free (text);
}
static gboolean
glade_eprop_named_icon_focus_out (GtkWidget *entry,
GdkEventFocus *event,
GladeEditorProperty *eprop)
{
glade_eprop_named_icon_changed (entry, eprop);
return FALSE;
}
static void
glade_eprop_named_icon_activate (GtkEntry *entry,
GladeEPropNamedIcon *eprop)
{
glade_eprop_named_icon_changed (GTK_WIDGET (entry), GLADE_EDITOR_PROPERTY (eprop));
}
static void
chooser_response (GladeNamedIconChooserDialog *dialog,
gint response_id,
GladeEPropNamedIcon *eprop)
{
gchar *icon_name;
switch (response_id) {
case GTK_RESPONSE_OK:
g_free (eprop->current_context);
eprop->current_context = glade_named_icon_chooser_dialog_get_context (dialog);
icon_name = glade_named_icon_chooser_dialog_get_icon_name (dialog);
gtk_entry_set_text (GTK_ENTRY (eprop->entry), icon_name);
gtk_widget_destroy (GTK_WIDGET (dialog));
g_free (icon_name);
glade_eprop_named_icon_changed (eprop->entry, GLADE_EDITOR_PROPERTY (eprop));
break;
case GTK_RESPONSE_CANCEL:
gtk_widget_destroy (GTK_WIDGET (dialog));
break;
case GTK_RESPONSE_HELP:
break;
case GTK_RESPONSE_DELETE_EVENT:
gtk_widget_destroy (GTK_WIDGET (dialog));
}
}
static void
glade_eprop_named_icon_show_chooser_dialog (GtkWidget *button,
GladeEditorProperty *eprop)
{
GtkWidget *dialog;
dialog = glade_named_icon_chooser_dialog_new ("Select Named Icon",
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (eprop))),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
glade_named_icon_chooser_dialog_set_context (GLADE_NAMED_ICON_CHOOSER_DIALOG (dialog), GLADE_EPROP_NAMED_ICON (eprop)->current_context);
glade_named_icon_chooser_dialog_set_icon_name (GLADE_NAMED_ICON_CHOOSER_DIALOG (dialog),
gtk_entry_get_text (GTK_ENTRY (GLADE_EPROP_NAMED_ICON (eprop)->entry)));
g_signal_connect (dialog, "response",
G_CALLBACK (chooser_response),
eprop);
gtk_widget_show (dialog);
}
static GtkWidget *
glade_eprop_named_icon_create_input (GladeEditorProperty *eprop)
{
GladeEPropNamedIcon *eprop_named_icon = GLADE_EPROP_NAMED_ICON (eprop);
GtkWidget *hbox;
hbox = gtk_hbox_new (FALSE, 0);
eprop_named_icon->entry = gtk_entry_new ();
gtk_widget_show (eprop_named_icon->entry);
eprop_named_icon->current_context = NULL;
gtk_box_pack_start (GTK_BOX (hbox), eprop_named_icon->entry, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (eprop_named_icon->entry), "activate",
G_CALLBACK (glade_eprop_named_icon_activate),
eprop);
g_signal_connect (G_OBJECT (eprop_named_icon->entry), "focus-out-event",
G_CALLBACK (glade_eprop_named_icon_focus_out),
eprop);
GtkWidget *button = gtk_button_new_with_label ("\342\200\246");
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
g_signal_connect (button, "clicked",
G_CALLBACK (glade_eprop_named_icon_show_chooser_dialog),
eprop);
return hbox;
}
/*******************************************************************************
GladeEditorPropertyTextClass
*******************************************************************************/
......@@ -3749,7 +3958,12 @@ glade_editor_property_new (GladePropertyClass *klass,
g_type_name (klass->pspec->value_type));
/* special case for resource specs which are hand specified in the catalog. */
if (klass->resource) type = GLADE_TYPE_EPROP_RESOURCE;
if (klass->resource)
type = GLADE_TYPE_EPROP_RESOURCE;
/* special case for string specs that denote themed application icons. */
if (klass->themed_icon)
type = GLADE_TYPE_EPROP_NAMED_ICON;
/* Create and return the correct type of GladeEditorProperty */
eprop = g_object_new (type,
......
This diff is collapsed.
/*
* glade-named-icon-chooser-dialog.h - Named icon chooser dialog
*
* Copyright (C) 2007 Vincent Geddes
*
* Author: Vincent Geddes <vgeddes@gnome.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANNAMED_ICON_CHOOSERILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __GLADE_NAMED_ICON_CHOOSER_DIALOG_H__
#define __GLADE_NAMED_ICON_CHOOSER_DIALOG_H__
#include <gtk/gtkdialog.h>
G_BEGIN_DECLS
#define GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG (glade_named_icon_chooser_dialog_get_type ())
#define GLADE_NAMED_ICON_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG, GladeNamedIconChooserDialog))
#define GLADE_IS_NAMED_ICON_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG))
#define GLADE_NAMED_ICON_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG, GladeNamedIconChooserDialogClass))
#define GLADE_IS_NAMED_ICON_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG))
#define GLADE_NAMED_ICON_CHOOSER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_NAMED_ICON_CHOOSER_DIALOG, GladeNamedIconChooserDialogClass))
typedef struct _GladeNamedIconChooserDialog GladeNamedIconChooserDialog;
typedef struct _GladeNamedIconChooserDialogPrivate GladeNamedIconChooserDialogPrivate;
typedef struct _GladeNamedIconChooserDialogClass GladeNamedIconChooserDialogClass;
struct _GladeNamedIconChooserDialog
{
GtkDialog parent_instance;
GladeNamedIconChooserDialogPrivate *priv;
};
struct _GladeNamedIconChooserDialogClass
{
GtkDialogClass parent_class;
void (* icon_activated) (GladeNamedIconChooserDialog *dialog);
void (* selection_changed) (GladeNamedIconChooserDialog *dialog);
};
GType glade_named_icon_chooser_dialog_get_type (void) G_GNUC_CONST;
GtkWidget *glade_named_icon_chooser_dialog_new (const gchar *title,
GtkWindow *parent,
const gchar *first_button_text,
...) G_GNUC_NULL_TERMINATED;
gchar *glade_named_icon_chooser_dialog_get_icon_name (GladeNamedIconChooserDialog *chooser);
void glade_named_icon_chooser_dialog_set_icon_name (GladeNamedIconChooserDialog *chooser,
const gchar *icon_name);
gboolean glade_named_icon_chooser_dialog_set_context (GladeNamedIconChooserDialog *chooser,
const gchar *context);
gchar *glade_named_icon_chooser_dialog_get_context (GladeNamedIconChooserDialog *chooser);
G_END_DECLS
#endif /* __GLADE_NAMED_ICON_CHOOSER_DIALOG_H__ */
......@@ -181,6 +181,7 @@ glade_property_class_new (gpointer handle)
property_class->save_always = FALSE;
property_class->ignore = FALSE;
property_class->resource = FALSE;
property_class->themed_icon = FALSE;
property_class->translatable = FALSE;
property_class->type = GPC_NORMAL;
property_class->virt = TRUE;
......@@ -1715,14 +1716,15 @@ glade_property_class_update_from_node (GladeXmlNode *node,
klass->translatable);
/* common, optional, etc */
klass->common = glade_xml_get_property_boolean (node, GLADE_TAG_COMMON, klass->common);
klass->optional = glade_xml_get_property_boolean (node, GLADE_TAG_OPTIONAL, klass->optional);
klass->query = glade_xml_get_property_boolean (node, GLADE_TAG_QUERY, klass->query);
klass->save = glade_xml_get_property_boolean (node, GLADE_TAG_SAVE, klass->save);
klass->visible = glade_xml_get_property_boolean (node, GLADE_TAG_VISIBLE, klass->visible);
klass->ignore = glade_xml_get_property_boolean (node, GLADE_TAG_IGNORE, klass->ignore);
klass->resource = glade_xml_get_property_boolean (node, GLADE_TAG_RESOURCE, klass->resource);
klass->weight = glade_xml_get_property_double (node, GLADE_TAG_WEIGHT, klass->weight);
klass->common = glade_xml_get_property_boolean (node, GLADE_TAG_COMMON, klass->common);
klass->optional = glade_xml_get_property_boolean (node, GLADE_TAG_OPTIONAL, klass->optional);
klass->query = glade_xml_get_property_boolean (node, GLADE_TAG_QUERY, klass->query);
klass->save = glade_xml_get_property_boolean (node, GLADE_TAG_SAVE, klass->save);
klass->visible = glade_xml_get_property_boolean (node, GLADE_TAG_VISIBLE, klass->visible);
klass->ignore = glade_xml_get_property_boolean (node, GLADE_TAG_IGNORE, klass->ignore);
klass->resource = glade_xml_get_property_boolean (node, GLADE_TAG_RESOURCE, klass->resource);
klass->themed_icon = glade_xml_get_property_boolean (node, GLADE_TAG_THEMED_ICON, klass->themed_icon);
klass->weight = glade_xml_get_property_double (node, GLADE_TAG_WEIGHT, klass->weight);
klass->transfer_on_paste = glade_xml_get_property_boolean (node, GLADE_TAG_TRANSFER_ON_PASTE, klass->transfer_on_paste);
klass->save_always = glade_xml_get_property_boolean (node, GLADE_TAG_SAVE_ALWAYS, klass->save_always);
......
......@@ -144,6 +144,12 @@ struct _GladePropertyClass
* popup is used and the resource is copied to the project
* directory).
*/
gboolean themed_icon; /* Some GParamSpecString properties reffer to icon names
* in the icon theme... these need to be specified in the
* property class definition if proper editing tools are to
* be used.
*/
gboolean transfer_on_paste; /* If this is a packing prop,
* wether we should transfer it on paste.
......
......@@ -98,6 +98,7 @@ typedef struct _GladeXmlDoc GladeXmlDoc;
#define GLADE_TAG_IGNORE "ignore"
#define GLADE_TAG_VISIBLE_LINES "visible-lines"
#define GLADE_TAG_RESOURCE "resource"
#define GLADE_TAG_THEMED_ICON "themed-icon"
#define GLADE_TAG_INIT_FUNCTION "init-function"
#define GLADE_TAG_ATK_ACTION "atk-action"
#define GLADE_TAG_ATK_PROPERTY "atk-property"
......
/*
* icon-naming-spec.c - freedesktop.org icon naming specification
*
* Copyright (C) 2007 Vincent Geddes
*
* Authors: Vincent Geddes <vgeddes@gnome.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*
* Icon Naming Specification: http://standards.freedesktop.org/icon-naming-spec
*
*/
#include <glib/gi18n-lib.h>
/* Standard Contexts */
static const struct {
const char *name;
const char *title;
} standard_contexts[] = {
{ "Actions", N_("Actions") },
{ "Applications", N_("Applications") },
{ "Categories", N_("Categories") },
{ "Devices", N_("Devices") },
{ "Emblems", N_("Emblems") },
{ "Emotes", N_("Emotes") },
{ "International", N_("International") },
{ "MimeTypes", N_("MIME Types") },
{ "Places", N_("Places") },
{ "Status", N_("Status") },
};
/* Standard Icon Names */
static const char* const standard_icon_names[] =
{
/* Action Icons */
"address-book-new",
"application-exit",
"appointment-new",
"contact-new",
"dialog-cancel",
"dialog-close",
"dialog-ok",
"document-new",
"document-open",
"document-open-recent",
"document-page-setup",
"document-print",
"document-print-preview",
"document-properties",
"document-revert",
"document-save",
"document-save-as",
"edit-copy",
"edit-cut",
"edit-delete",
"edit-find",
"edit-find-replace",
"edit-paste",
"edit-redo",
"edit-select-all",
"edit-undo",
"folder-new",
"format-indent-less",
"format-indent-more",
"format-justify-center",
"format-justify-fill",
"format-justify-left",
"format-justify-right",
"format-text-direction-ltr",
"format-text-direction-rtl",
"format-text-bold",
"format-text-italic",
"format-text-underline",
"format-text-strikethrough",
"go-bottom",
"go-down",
"go-first",
"go-home",
"go-jump",
"go-last",
"go-next",
"go-previous",
"go-top",
"go-up",
"help-about",
"help-contents",
"help-faq",
"insert-image",
"insert-link",
"insert-object",
"insert-text",
"list-add",
"list-remove",
"mail-forward",
"mail-mark-important",
"mail-mark-junk",
"mail-mark-notjunk",
"mail-mark-read",
"mail-mark-unread",
"mail-message-new",
"mail-reply-all",
"mail-reply-sender",
"mail-send",
"mail-send-receive",
"media-eject",
"media-playback-pause",
"media-playback-start",
"media-playback-stop",
"media-record",
"media-seek-backward",
"media-seek-forward",
"media-skip-backward",
"media-skip-forward",
"object-flip-horizontal",
"object-flip-vertical",
"object-rotate-left",
"object-rotate-right",
"system-lock-screen",
"system-log-out",
"system-run",
"system-search",
"tools-check-spelling",
"view-fullscreen",
"view-refresh",
"view-restore",
"view-sort-ascending",
"view-sort-descending",
"window-close",
"window-new",
"zoom-best-fit",
"zoom-in",
"zoom-original",
"zoom-out",
/* Application Icons */
"accessories-calculator",
"accessories-character-map",
"accessories-dictionary",
"accessories-text-editor",
"help-browser",
"multimedia-volume-control",
"preferences-desktop-accessibility",
"preferences-desktop-font",
"preferences-desktop-keyboard",
"preferences-desktop-locale",
"preferences-desktop-multimedia",
"preferences-desktop-screensaver",
"preferences-desktop-theme",
"preferences-desktop-wallpaper",
"system-file-manager",
"system-software-update",
"utilities-system-monitor",
"utilities-terminal",
/* Category Icons */
"applications-accessories",
"applications-development",
"applications-engineering",
"applications-games",
"applications-graphics",
"applications-internet",
"applications-multimedia",
"applications-office",
"applications-other",
"applications-science",
"applications-system",
"applications-utilities",
"preferences-desktop",
"preferences-desktop-peripherals",
"preferences-desktop-personal",
"preferences-other",
"preferences-system",
"preferences-system-network",
"system-help",
/* Device Icons */
"audio-card",
"audio-input-microphone",
"battery",
"camera-photo",
"camera-video",
"computer",
"drive-harddisk",
"drive-optical",
"drive-removable-media",
"input-gaming",
"input-keyboard",
"input-mouse",
"media-flash",
"media-floppy",
"media-optical",
"media-tape",
"modem",
"multimedia-player",
"network-wired",
"network-wireless",
"printer",
"video-display",
/* Emblem Icons */
"emblem-default",
"emblem-documents",
"emblem-downloads",
"emblem-favorite",
"emblem-important",
"emblem-mail",
"emblem-photos",
"emblem-readonly",
"emblem-shared",
"emblem-symbolic-link",
"emblem-synchronized",
"emblem-system",
"emblem-unreadable",
/* Emotion Icons */
"face-angel",
"face-crying",
"face-devil-grin",
"face-devil-sad",
"face-glasses",
"face-kiss",
"face-monkey",
"face-plain",
"face-sad",
"face-smile",
"face-smile-big",
"face-smirk",
"face-surprise",
"face-wink",
/* International Icons */
"flag-aa",
/* MIME Type Icons */
"application-x-executable",
"audio-x-generic",
"font-x-generic",
"image-x-generic",
"package-x-generic",
"text-html",
"text-x-generic",
"text-x-generic-template",
"text-x-script",
"video-x-generic",
"x-office-address-book",
"x-office-calendar",
"x-office-document",
"x-office-presentation",
"x-office-spreadsheet",
/* Place Icons */
"folder",
"folder-remote",
"network-server",
"network-workgroup",
"start-here",
"user-desktop",
"user-home",
"user-trash",
/* Status Icons */
"appointment-missed",
"appointment-soon",
"audio-volume-high",
"audio-volume-low",
"audio-volume-medium",
"audio-volume-muted",
"battery-caution",
"battery-low",
"dialog-error",
"dialog-information",
"dialog-password",
"dialog-question",
"dialog-warning",
"folder-drag-accept",
"folder-open",
"folder-visiting",
"image-loading",
"image-missing",
"mail-attachment",
"mail-unread",
"mail-read",
"mail-replied",
"mail-signed",
"mail-signed-verified",
"media-playlist-repeat",
"media-playlist-shuffle",
"network-error",
"network-idle",
"network-offline",
"network-receive",
"network-transmit",
"network-transmit-receive",
"printer-error",
"printer-printing",
"security-high",
"security-medium",
"security-low",
"software-update-available",
"software-update-urgent",
"sync-error",
"sync-synchronizing",
"task-due",
"task-passed-due",
"user-away",
"user-idle",
"user-offline",
"user-online",
"user-trash-full",
"weather-clear",
"weather-clear-night",
"weather-few-clouds",
"weather-few-clouds-night",
"weather-fog",
"weather-overcast",
"weather-severe-alert",
"weather-showers",
"weather-showers-scattered",
"weather-snow",
"weather-storm",
};