Annotation of generator/glade/support.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * DO NOT EDIT THIS FILE - it is generated by Glade.
        !             3:  */
        !             4: 
        !             5: #ifdef HAVE_CONFIG_H
        !             6: #  include <config.h>
        !             7: #endif
        !             8: 
        !             9: #include <sys/types.h>
        !            10: #include <sys/stat.h>
        !            11: #include <unistd.h>
        !            12: #include <string.h>
        !            13: 
        !            14: #include <gtk/gtk.h>
        !            15: 
        !            16: #include "support.h"
        !            17: 
        !            18: /* This is an internally used function to check if a pixmap file exists. */
        !            19: static gchar* check_file_exists        (const gchar     *directory,
        !            20:                                         const gchar     *filename);
        !            21: 
        !            22: /* This is an internally used function to create pixmaps. */
        !            23: static GtkWidget* create_dummy_pixmap  (GtkWidget       *widget);
        !            24: 
        !            25: GtkWidget*
        !            26: lookup_widget                          (GtkWidget       *widget,
        !            27:                                         const gchar     *widget_name)
        !            28: {
        !            29:   GtkWidget *parent, *found_widget;
        !            30: 
        !            31:   for (;;)
        !            32:     {
        !            33:       if (GTK_IS_MENU (widget))
        !            34:         parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
        !            35:       else
        !            36:         parent = widget->parent;
        !            37:       if (parent == NULL)
        !            38:         break;
        !            39:       widget = parent;
        !            40:     }
        !            41: 
        !            42:   found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
        !            43:                                                    widget_name);
        !            44:   if (!found_widget)
        !            45:     g_warning ("Widget not found: %s", widget_name);
        !            46:   return found_widget;
        !            47: }
        !            48: 
        !            49: /* This is a dummy pixmap we use when a pixmap can't be found. */
        !            50: static char *dummy_pixmap_xpm[] = {
        !            51: /* columns rows colors chars-per-pixel */
        !            52: "1 1 1 1",
        !            53: "  c None",
        !            54: /* pixels */
        !            55: " "
        !            56: };
        !            57: 
        !            58: /* This is an internally used function to create pixmaps. */
        !            59: static GtkWidget*
        !            60: create_dummy_pixmap                    (GtkWidget       *widget)
        !            61: {
        !            62:   GdkColormap *colormap;
        !            63:   GdkPixmap *gdkpixmap;
        !            64:   GdkBitmap *mask;
        !            65:   GtkWidget *pixmap;
        !            66: 
        !            67:   colormap = gtk_widget_get_colormap (widget);
        !            68:   gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask,
        !            69:                                                      NULL, dummy_pixmap_xpm);
        !            70:   if (gdkpixmap == NULL)
        !            71:     g_error ("Couldn't create replacement pixmap.");
        !            72:   pixmap = gtk_pixmap_new (gdkpixmap, mask);
        !            73:   gdk_pixmap_unref (gdkpixmap);
        !            74:   gdk_bitmap_unref (mask);
        !            75:   return pixmap;
        !            76: }
        !            77: 
        !            78: static GList *pixmaps_directories = NULL;
        !            79: 
        !            80: /* Use this function to set the directory containing installed pixmaps. */
        !            81: void
        !            82: add_pixmap_directory                   (const gchar     *directory)
        !            83: {
        !            84:   pixmaps_directories = g_list_prepend (pixmaps_directories,
        !            85:                                         g_strdup (directory));
        !            86: }
        !            87: 
        !            88: /* This is an internally used function to create pixmaps. */
        !            89: GtkWidget*
        !            90: create_pixmap                          (GtkWidget       *widget,
        !            91:                                         const gchar     *filename)
        !            92: {
        !            93:   gchar *found_filename = NULL;
        !            94:   GdkColormap *colormap;
        !            95:   GdkPixmap *gdkpixmap;
        !            96:   GdkBitmap *mask;
        !            97:   GtkWidget *pixmap;
        !            98:   GList *elem;
        !            99: 
        !           100:   if (!filename || !filename[0])
        !           101:       return create_dummy_pixmap (widget);
        !           102: 
        !           103:   /* We first try any pixmaps directories set by the application. */
        !           104:   elem = pixmaps_directories;
        !           105:   while (elem)
        !           106:     {
        !           107:       found_filename = check_file_exists ((gchar*)elem->data, filename);
        !           108:       if (found_filename)
        !           109:         break;
        !           110:       elem = elem->next;
        !           111:     }
        !           112: 
        !           113:   /* If we haven't found the pixmap, try the source directory. */
        !           114:   if (!found_filename)
        !           115:     {
        !           116:       found_filename = check_file_exists ("pixmaps", filename);
        !           117:     }
        !           118: 
        !           119:   if (!found_filename)
        !           120:     {
        !           121:       g_warning ("Couldn't find pixmap file: %s", filename);
        !           122:       return create_dummy_pixmap (widget);
        !           123:     }
        !           124: 
        !           125:   colormap = gtk_widget_get_colormap (widget);
        !           126:   gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
        !           127:                                                    NULL, found_filename);
        !           128:   if (gdkpixmap == NULL)
        !           129:     {
        !           130:       g_warning ("Error loading pixmap file: %s", found_filename);
        !           131:       g_free (found_filename);
        !           132:       return create_dummy_pixmap (widget);
        !           133:     }
        !           134:   g_free (found_filename);
        !           135:   pixmap = gtk_pixmap_new (gdkpixmap, mask);
        !           136:   gdk_pixmap_unref (gdkpixmap);
        !           137:   gdk_bitmap_unref (mask);
        !           138:   return pixmap;
        !           139: }
        !           140: 
        !           141: /* This is an internally used function to check if a pixmap file exists. */
        !           142: gchar*
        !           143: check_file_exists                      (const gchar     *directory,
        !           144:                                         const gchar     *filename)
        !           145: {
        !           146:   gchar *full_filename;
        !           147:   struct stat s;
        !           148:   gint status;
        !           149: 
        !           150:   full_filename = (gchar*) g_malloc (strlen (directory) + 1
        !           151:                                      + strlen (filename) + 1);
        !           152:   strcpy (full_filename, directory);
        !           153:   strcat (full_filename, G_DIR_SEPARATOR_S);
        !           154:   strcat (full_filename, filename);
        !           155: 
        !           156:   status = stat (full_filename, &s);
        !           157:   if (status == 0 && S_ISREG (s.st_mode))
        !           158:     return full_filename;
        !           159:   g_free (full_filename);
        !           160:   return NULL;
        !           161: }
        !           162: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.