summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2001-11-23 21:46:44 +0000
committerOwen Taylor <otaylor@src.gnome.org>2001-11-23 21:46:44 +0000
commit2936c8e9423cc28555dbe56877a315d16b7f7d8f (patch)
tree986279438d9adf88cbd8c88b0ae067ad0bc06107 /demos
parent393c47573ea197e2026133ec79eae7a02880b0d7 (diff)
downloadgtk+-2936c8e9423cc28555dbe56877a315d16b7f7d8f.tar.gz
Version 1.3.11 Require GLib-1.3.11, Pango-0.22, ATK-0.7. Restore toGTK_1_3_11
Thu Nov 22 15:01:03 2001 Owen Taylor <otaylor@redhat.com> * Version 1.3.11 * configure.in (ATK_REQUIRED_VERSION): Require GLib-1.3.11, Pango-0.22, ATK-0.7. * tests/prop-editor.c (property_widget): Restore to working as well as it did before. * gtk/gtklistitem.h: Mark deprecated since it is an integral part of GtkList. * demos/gtk-demo/demo-common.h: New header file, for a common functions not important to the meat of the demos. * demos/gtk-demo/main.c (demo_ifind_file): Add a utility function to search for a file used by the demo. * demos/*.c: Use demo_find_file.
Diffstat (limited to 'demos')
-rw-r--r--demos/gtk-demo/Makefile.am1
-rw-r--r--demos/gtk-demo/appwindow.c19
-rw-r--r--demos/gtk-demo/demo-common.h11
-rw-r--r--demos/gtk-demo/images.c104
-rw-r--r--demos/gtk-demo/main.c120
-rw-r--r--demos/gtk-demo/pixbufs.c51
-rw-r--r--demos/gtk-demo/textview.c24
7 files changed, 198 insertions, 132 deletions
diff --git a/demos/gtk-demo/Makefile.am b/demos/gtk-demo/Makefile.am
index cd92264c28..3b6918f435 100644
--- a/demos/gtk-demo/Makefile.am
+++ b/demos/gtk-demo/Makefile.am
@@ -58,6 +58,7 @@ demos.h: $(demos) geninclude.pl
gtk_demo_SOURCES = \
$(demos) \
+ demo-common.h \
main.c \
demos.h
diff --git a/demos/gtk-demo/appwindow.c b/demos/gtk-demo/appwindow.c
index 7869037f45..f6ca60b467 100644
--- a/demos/gtk-demo/appwindow.c
+++ b/demos/gtk-demo/appwindow.c
@@ -4,6 +4,7 @@
*/
#include <gtk/gtk.h>
+#include "demo-common.h"
static GtkWidget *window = NULL;
@@ -95,6 +96,7 @@ register_stock_icons (void)
{
GdkPixbuf *pixbuf;
GtkIconFactory *factory;
+ char *filename;
static GtkStockItem items[] = {
{ "demo-gtk-logo",
@@ -111,12 +113,17 @@ register_stock_icons (void)
factory = gtk_icon_factory_new ();
gtk_icon_factory_add_default (factory);
- /* Try current directory */
- pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif", NULL);
-
- /* Try install directory */
- if (pixbuf == NULL)
- pixbuf = gdk_pixbuf_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif", NULL);
+ /* demo_find_file() looks in the the current directory first,
+ * so you can run gtk-demo without installing GTK, then looks
+ * in the location where the file is installed.
+ */
+ pixbuf = NULL;
+ filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
+ if (filename)
+ {
+ pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+ g_free (filename);
+ }
/* Register icon to accompany stock item */
if (pixbuf != NULL)
diff --git a/demos/gtk-demo/demo-common.h b/demos/gtk-demo/demo-common.h
new file mode 100644
index 0000000000..636fc4d408
--- /dev/null
+++ b/demos/gtk-demo/demo-common.h
@@ -0,0 +1,11 @@
+#ifndef __DEMO_COMMON_H__
+#define __DEMO_COMMON_H__
+
+G_BEGIN_DECLS
+
+gchar *demo_find_file (const gchar *base,
+ GError **err);
+
+G_END_DECLS
+
+#endif /* __DEMO_COMMON_H__ */
diff --git a/demos/gtk-demo/images.c b/demos/gtk-demo/images.c
index 154e14beda..4719f484ed 100644
--- a/demos/gtk-demo/images.c
+++ b/demos/gtk-demo/images.c
@@ -15,6 +15,7 @@
#include <gtk/gtk.h>
#include <stdio.h>
#include <errno.h>
+#include "demo-common.h"
static GtkWidget *window = NULL;
static GdkPixbufLoader *pixbuf_loader = NULL;
@@ -177,14 +178,29 @@ progressive_timeout (gpointer data)
}
else
{
- const gchar *filename;
+ gchar *filename;
+ gchar *error_message = NULL;
+ GError *error = NULL;
- if (g_file_test ("./alphatest.png", G_FILE_TEST_EXISTS))
- filename = "./alphatest.png";
+ /* demo_find_file() looks in the the current directory first,
+ * so you can run gtk-demo without installing GTK, then looks
+ * in the location where the file is installed.
+ */
+ filename = demo_find_file ("alphatest.png", &error);
+ if (error)
+ {
+ error_message = g_strdup (error->message);
+ g_error_free (error);
+ }
else
- filename = DEMOCODEDIR"/alphatest.png";
-
- image_stream = fopen (filename, "r");
+ {
+ image_stream = fopen (filename, "r");
+ g_free (filename);
+
+ if (!image_stream)
+ error_message = g_strdup_printf ("Unable to open image file 'alphatest.png': %s",
+ g_strerror (errno));
+ }
if (image_stream == NULL)
{
@@ -194,8 +210,8 @@ progressive_timeout (gpointer data)
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
- "Unable to open image file 'alphatest.png': %s",
- g_strerror (errno));
+ "%s", error_message);
+ g_free (error_message);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
@@ -272,6 +288,9 @@ do_images (void)
GtkWidget *image;
GtkWidget *label;
GtkWidget *align;
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+ char *filename;
if (!window)
{
@@ -303,10 +322,19 @@ do_images (void)
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
- /* We look for the image in the current directory first,
- * so you can run gtk-demo without installing GTK
+ /* demo_find_file() looks in the the current directory first,
+ * so you can run gtk-demo without installing GTK, then looks
+ * in the location where the file is installed.
*/
- if (g_file_test ("./gtk-logo-rgb.gif", G_FILE_TEST_EXISTS))
+ pixbuf = NULL;
+ filename = demo_find_file ("gtk-logo-rgb.gif", &error);
+ if (filename)
+ {
+ pixbuf = gdk_pixbuf_new_from_file (filename, &error);
+ g_free (filename);
+ }
+
+ if (error)
{
/* This code shows off error handling. You can just use
* gtk_image_new_from_file() instead if you don't want to report
@@ -314,39 +342,23 @@ do_images (void)
* gtk_image_new_from_file(), a "missing image" icon will
* be displayed instead.
*/
- GdkPixbuf *pixbuf;
- GError *error = NULL;
+ GtkWidget *dialog;
- pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif",
- &error);
- if (error)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Unable to open image file 'gtk-logo-rgb.gif': %s",
- error->message);
- g_error_free (error);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_widget_show (dialog);
- }
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Unable to open image file 'gtk-logo-rgb.gif': %s",
+ error->message);
+ g_error_free (error);
- image = gtk_image_new_from_pixbuf (pixbuf);
- }
- else
- {
- /* This is the simpler code, with no error handling.
- * Here we're loading the installed gtk-logo-rgb.gif instead
- * of the one in the current directory.
- */
- image = gtk_image_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif");
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_widget_show (dialog);
}
+
+ image = gtk_image_new_from_pixbuf (pixbuf);
gtk_container_add (GTK_CONTAINER (frame), image);
@@ -367,13 +379,9 @@ do_images (void)
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
- /* We look for the image in the current directory first,
- * so you can run gtk-demo without installing GTK
- */
- if (g_file_test ("./floppybuddy.gif", G_FILE_TEST_EXISTS))
- image = gtk_image_new_from_file ("./floppybuddy.gif");
- else
- image = gtk_image_new_from_file (DEMOCODEDIR"/floppybuddy.gif");
+ filename = demo_find_file ("floppybuddy.gif", NULL);
+ image = gtk_image_new_from_file (filename);
+ g_free (filename);
gtk_container_add (GTK_CONTAINER (frame), image);
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index cfb90630a4..a48256df88 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -13,6 +13,7 @@ static GtkTextBuffer *source_buffer;
static gchar *current_file = NULL;
+
enum {
TITLE_COLUMN,
FILENAME_COLUMN,
@@ -28,6 +29,39 @@ struct _CallbackData
GtkTreePath *path;
};
+/**
+ * demo_find_file:
+ * @base: base filename
+ * @err: location to store error, or %NULL.
+ *
+ * Looks for @base first in the current directory, then in the
+ * location GTK+ where it will be installed on make install,
+ * returns the first file found.
+ *
+ * Return value: the filename, if found or %NULL
+ **/
+gchar *
+demo_find_file (const char *base,
+ GError **err)
+{
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ if (g_file_test (base, G_FILE_TEST_EXISTS))
+ return g_strdup (base);
+ else
+ {
+ char *filename = g_build_filename (DEMOCODEDIR, base, NULL);
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS))
+ {
+ g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
+ "Cannot find demo data file \"%s\"", base);
+ g_free (filename);
+ return NULL;
+ }
+ return filename;
+ }
+}
+
static void
window_closed_cb (GtkWidget *window, gpointer data)
{
@@ -364,6 +398,8 @@ load_file (const gchar *filename)
{
FILE *file;
GtkTextIter start, end;
+ char *full_filename;
+ GError *err = NULL;
GString *buffer = g_string_new (NULL);
int state = 0;
gboolean in_para = 0;
@@ -383,25 +419,23 @@ load_file (const gchar *filename)
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
gtk_text_buffer_delete (source_buffer, &start, &end);
- file = fopen (filename, "r");
+ full_filename = demo_find_file (filename, &err);
+ if (!full_filename)
+ {
+ g_warning ("%s", err->message);
+ g_error_free (err);
+ return;
+ }
+
+ file = fopen (full_filename, "r");
if (!file)
- {
- char *installed = g_strconcat (DEMOCODEDIR,
- G_DIR_SEPARATOR_S,
- filename,
- NULL);
+ g_warning ("Cannot open %s: %s\n", full_filename, g_strerror (errno));
- file = fopen (installed, "r");
+ g_free (full_filename);
- g_free (installed);
- }
-
if (!file)
- {
- g_warning ("Cannot open %s: %s\n", filename, g_strerror (errno));
- return;
- }
+ return;
gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0);
while (read_line (file, buffer))
@@ -701,38 +735,36 @@ static void
setup_default_icon (void)
{
GdkPixbuf *pixbuf;
-
- /* Try in current directory, in case we haven't yet been installed
- * (would be wrong in a real app)
- */
- pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif", NULL);
+ char *filename;
+ GError *err;
+
+ err = NULL;
- if (pixbuf == NULL)
+ pixbuf = NULL;
+ filename = demo_find_file ("gtk-logo-rgb.gif", &err);
+ if (filename)
{
- GError *err;
-
- err = NULL;
- pixbuf = gdk_pixbuf_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif",
- &err);
-
- /* Ignoring this error (passing NULL instead of &err above)
- * would probably be reasonable for most apps. We're just
- * showing off.
- */
- if (err)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failed to read icon file "DEMOCODEDIR"/gtk-logo-rgb.gif: %s",
- err->message);
- g_error_free (err);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
- }
+ pixbuf = gdk_pixbuf_new_from_file (filename, &err);
+ g_free (filename);
+ }
+
+ /* Ignoring this error (passing NULL instead of &err above)
+ * would probably be reasonable for most apps. We're just
+ * showing off.
+ */
+ if (err)
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (NULL, 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failed to read icon file: %s",
+ err->message);
+ g_error_free (err);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
}
if (pixbuf)
diff --git a/demos/gtk-demo/pixbufs.c b/demos/gtk-demo/pixbufs.c
index cd487a999c..eef2747d05 100644
--- a/demos/gtk-demo/pixbufs.c
+++ b/demos/gtk-demo/pixbufs.c
@@ -17,12 +17,13 @@
#include <gtk/gtk.h>
#include <math.h>
+#include "demo-common.h"
+
#define FRAME_DELAY 50
-#define RELATIVE_BACKGROUND_NAME "background.jpg"
-#define INSTALLED_BACKGROUND_NAME DEMOCODEDIR"/background.jpg"
+#define BACKGROUND_NAME "background.jpg"
-static const char *relative_image_names[] = {
+static const char *image_names[] = {
"apple-red.png",
"gnome-applets.png",
"gnome-calendar.png",
@@ -33,18 +34,7 @@ static const char *relative_image_names[] = {
"gnu-keys.png"
};
-static const char *installed_image_names[] = {
- DEMOCODEDIR"/apple-red.png",
- DEMOCODEDIR"/gnome-applets.png",
- DEMOCODEDIR"/gnome-calendar.png",
- DEMOCODEDIR"/gnome-foot.png",
- DEMOCODEDIR"/gnome-gmush.png",
- DEMOCODEDIR"/gnome-gimp.png",
- DEMOCODEDIR"/gnome-gsame.png",
- DEMOCODEDIR"/gnu-keys.png"
-};
-
-#define N_IMAGES G_N_ELEMENTS (relative_image_names)
+#define N_IMAGES G_N_ELEMENTS (image_names)
/* demo window */
static GtkWidget *window = NULL;
@@ -67,30 +57,37 @@ static gboolean
load_pixbufs (GError **error)
{
gint i;
- const gchar **image_names;
+ char *filename;
if (background)
return TRUE; /* already loaded earlier */
- background = gdk_pixbuf_new_from_file (RELATIVE_BACKGROUND_NAME, NULL);
-
- if (!background)
- background = gdk_pixbuf_new_from_file (INSTALLED_BACKGROUND_NAME, error);
+ /* demo_find_file() looks in the the current directory first,
+ * so you can run gtk-demo without installing GTK, then looks
+ * in the location where the file is installed.
+ */
+ filename = demo_find_file (BACKGROUND_NAME, error);
+ if (!filename)
+ return FALSE; /* note that "error" was filled in and returned */
+ background = gdk_pixbuf_new_from_file (filename, error);
+ g_free (filename);
+
if (!background)
- return FALSE; /* note that "error" was filled in and returned */
+ return FALSE; /* Note that "error" was filled with a GError */
back_width = gdk_pixbuf_get_width (background);
back_height = gdk_pixbuf_get_height (background);
- if (g_file_test (relative_image_names[0], G_FILE_TEST_EXISTS))
- image_names = relative_image_names;
- else
- image_names = installed_image_names;
-
for (i = 0; i < N_IMAGES; i++)
{
- images[i] = gdk_pixbuf_new_from_file (image_names[i], error);
+ filename = demo_find_file (image_names[i], error);
+ if (!filename)
+ return FALSE; /* Note that "error" was filled with a GError */
+
+ images[i] = gdk_pixbuf_new_from_file (filename, error);
+ g_free (filename);
+
if (!images[i])
return FALSE; /* Note that "error" was filled with a GError */
}
diff --git a/demos/gtk-demo/textview.c b/demos/gtk-demo/textview.c
index ced9c80525..23c2c914bd 100644
--- a/demos/gtk-demo/textview.c
+++ b/demos/gtk-demo/textview.c
@@ -10,6 +10,8 @@
#include <gtk/gtk.h>
#include <stdlib.h> /* for exit() */
+#include "demo-common.h"
+
static void easter_egg_callback (GtkWidget *button, gpointer data);
#define gray50_width 2
@@ -151,10 +153,19 @@ insert_text (GtkTextBuffer *buffer)
GdkPixbuf *pixbuf;
GdkPixbuf *scaled;
GtkTextChildAnchor *anchor;
+ char *filename;
- pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif", NULL);
- if (pixbuf == NULL)
- gdk_pixbuf_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif", NULL);
+ /* demo_find_file() looks in the the current directory first,
+ * so you can run gtk-demo without installing GTK, then looks
+ * in the location where the file is installed.
+ */
+ pixbuf = NULL;
+ filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
+ if (filename)
+ {
+ pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+ g_free (filename);
+ }
if (pixbuf == NULL)
{
@@ -412,10 +423,9 @@ attach_widgets (GtkTextView *text_view)
}
else if (i == 3)
{
- if (g_file_test ("./floppybuddy.gif", G_FILE_TEST_EXISTS))
- widget = gtk_image_new_from_file ("./floppybuddy.gif");
- else
- widget = gtk_image_new_from_file (DEMOCODEDIR"/floppybuddy.gif");
+ gchar *filename = demo_find_file ("floppybuddy.gif", NULL);
+ widget = gtk_image_new_from_file (filename);
+ g_free (filename);
}
else if (i == 4)
{