diff options
Diffstat (limited to 'e-util/e-emoticon.c')
-rw-r--r-- | e-util/e-emoticon.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/e-util/e-emoticon.c b/e-util/e-emoticon.c new file mode 100644 index 0000000000..c543e52417 --- /dev/null +++ b/e-util/e-emoticon.c @@ -0,0 +1,118 @@ +/* + * e-emoticon.c + * + * Copyright (C) 2008 Novell, Inc. + * Copyright (C) 2012 Dan Vrátil <dvratil@redhat.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "e-emoticon.h" + +#include <gtk/gtk.h> + +static EEmoticon * +emoticon_copy (EEmoticon *emoticon) +{ + EEmoticon *copy; + + copy = g_slice_new (EEmoticon); + copy->label = g_strdup (emoticon->label); + copy->icon_name = g_strdup (emoticon->icon_name); + copy->text_face = g_strdup (emoticon->text_face); + + return copy; +} + +static void +emoticon_free (EEmoticon *emoticon) +{ + g_free (emoticon->label); + g_free (emoticon->icon_name); + g_free (emoticon->text_face); + g_slice_free (EEmoticon, emoticon); +} + +GType +e_emoticon_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) + type = g_boxed_type_register_static ( + "EEmoticon", + (GBoxedCopyFunc) emoticon_copy, + (GBoxedFreeFunc) emoticon_free); + + return type; +} + +gboolean +e_emoticon_equal (EEmoticon *emoticon_a, + EEmoticon *emoticon_b) +{ + if (((emoticon_a == NULL) && (emoticon_b != NULL)) || + ((emoticon_a != NULL) && (emoticon_b == NULL))) + return FALSE; + + if (emoticon_a == emoticon_b) + return TRUE; + + if (g_strcmp0 (emoticon_a->label, emoticon_b->label) != 0) + return FALSE; + + if (g_strcmp0 (emoticon_a->icon_name, emoticon_b->icon_name) != 0) + return FALSE; + + if (g_strcmp0 (emoticon_a->text_face, emoticon_b->text_face) != 0) + return FALSE; + + return TRUE; +} + +EEmoticon * +e_emoticon_copy (EEmoticon *emoticon) +{ + return g_boxed_copy (E_TYPE_EMOTICON, emoticon); +} + +void +e_emoticon_free (EEmoticon *emoticon) +{ + g_boxed_free (E_TYPE_EMOTICON, emoticon); +} + +gchar * +e_emoticon_get_uri (EEmoticon *emoticon) +{ + GtkIconInfo *icon_info; + GtkIconTheme *icon_theme; + const gchar *filename; + gchar *uri = NULL; + + icon_theme = gtk_icon_theme_get_default (); + icon_info = gtk_icon_theme_lookup_icon ( + icon_theme, emoticon->icon_name, 16, 0); + g_return_val_if_fail (icon_info != NULL, NULL); + + filename = gtk_icon_info_get_filename (icon_info); + if (filename != NULL) { + uri = g_filename_to_uri (filename, NULL, NULL); + } + gtk_icon_info_free (icon_info); + g_return_val_if_fail (uri != NULL, NULL); + + return uri; +} |