summaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authorGlynn Foster <gman@src.gnome.org>2003-01-03 13:26:04 +0000
committerGlynn Foster <gman@src.gnome.org>2003-01-03 13:26:04 +0000
commit48c1564ac5ef431e9111606e40488d04a96f3059 (patch)
tree85ae5d577ecfd41f8692fedc15d50bfe9cbd5b15 /src/util.c
Initial revision
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c
new file mode 100644
index 0000000..b9116ac
--- /dev/null
+++ b/src/util.c
@@ -0,0 +1,158 @@
+/*
+ * util.c
+ *
+ * Copyright (C) 2002 Sun Microsystems, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Havoc Pennington <hp@redhat.com>
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include "config.h"
+#include "util.h"
+
+GladeXML*
+zenity_util_load_glade_file (const gchar *widget_root)
+{
+ GladeXML *xml = NULL;
+
+ if (g_file_test (ZENITY_GLADE_FILE_RELATIVEPATH,
+ G_FILE_TEST_EXISTS)) {
+ /* Try current dir, for debugging */
+ xml = glade_xml_new (ZENITY_GLADE_FILE_RELATIVEPATH, widget_root, GETTEXT_PACKAGE);
+ }
+
+ if (xml == NULL)
+ xml = glade_xml_new (ZENITY_GLADE_FILE_FULLPATH, widget_root, GETTEXT_PACKAGE);
+
+ if (xml == NULL) {
+ g_warning ("Could not load glade file : %s", ZENITY_GLADE_FILE_FULLPATH);
+ return NULL;
+ }
+
+ return xml;
+}
+
+gboolean
+zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename)
+{
+ GtkTextIter iter, end;
+ FILE* f;
+ gchar buf[2048];
+ gint remaining = 0;
+
+ if (filename == NULL)
+ return FALSE;
+
+ f = fopen (filename, "r");
+
+ if (f == NULL) {
+ g_warning ("Cannot open file '%s': %s", filename, g_strerror (errno));
+ return FALSE;
+ }
+
+ gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
+
+ while (!feof (f)) {
+ gint count;
+ const char *leftover;
+ int to_read = 2047 - remaining;
+
+ count = fread (buf + remaining, 1, to_read, f);
+ buf[count + remaining] = '\0';
+
+ g_utf8_validate (buf, count + remaining, &leftover);
+
+ g_assert (g_utf8_validate (buf, leftover - buf, NULL));
+ gtk_text_buffer_insert (buffer, &iter, buf, leftover - buf);
+
+ remaining = (buf + remaining + count) - leftover;
+ g_memmove (buf, leftover, remaining);
+
+ if (remaining > 6 || count < to_read)
+ break;
+ }
+
+ if (remaining) {
+ g_warning ("Invalid UTF-8 data encountered reading file '%s'", filename);
+ return FALSE;
+ }
+
+ /* We had a newline in the buffer to begin with. (The buffer always contains
+ * a newline, so we delete to the end of the buffer to clean up.
+ */
+ gtk_text_buffer_get_end_iter (buffer, &end);
+ gtk_text_buffer_delete (buffer, &iter, &end);
+
+ gtk_text_buffer_set_modified (buffer, FALSE);
+
+ return TRUE;
+}
+
+static GList *
+zenity_util_list_from_char_array (const char **s)
+{
+ GList *list = NULL;
+ gint i;
+
+ for (i = 0; s[i]; i++) {
+ GdkPixbuf *pixbuf;
+
+ pixbuf = gdk_pixbuf_new_from_file (s[i], NULL);
+ if (pixbuf)
+ list = g_list_prepend (list, pixbuf);
+ }
+
+ return list;
+}
+
+static void
+zenity_util_free_list (GList *list)
+{
+ g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ g_list_free (list);
+}
+
+void
+zenity_util_set_window_icon (GtkWidget *widget, const gchar *filename)
+{
+ const gchar *filenames[2] = { NULL};
+ GList *list;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_WINDOW (widget));
+
+ if (filename == NULL)
+ return;
+
+ filenames[0] = filename;
+ list = zenity_util_list_from_char_array (filenames);
+ gtk_window_set_icon_list (GTK_WINDOW (widget), list);
+ zenity_util_free_list (list);
+}
+
+void
+zenity_util_set_window_icon_from_stock (GtkWidget *widget, const gchar *stock_id)
+{
+ GdkPixbuf *pixbuf;
+
+ pixbuf = gtk_widget_render_icon (widget, stock_id, (GtkIconSize) -1, NULL);
+ gtk_window_set_icon (GTK_WINDOW (widget), pixbuf);
+ g_object_unref (pixbuf);
+}