summaryrefslogtreecommitdiff
path: root/capplets/file-types/file-types-icon-entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'capplets/file-types/file-types-icon-entry.c')
-rw-r--r--capplets/file-types/file-types-icon-entry.c618
1 files changed, 0 insertions, 618 deletions
diff --git a/capplets/file-types/file-types-icon-entry.c b/capplets/file-types/file-types-icon-entry.c
deleted file mode 100644
index 88aef59d7..000000000
--- a/capplets/file-types/file-types-icon-entry.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/* NautilusMimeIconEntry widget - Combo box with "Browse" button for files and
- * A pick button which can display a list of icons
- * in a current directory, the browse button displays
- * same dialog as pixmap-entry
- *
- * Copyright (C) 1998 The Free Software Foundation
- *
- * Author: George Lebl <jirka@5z.com>
- * icon selection based on original dentry-edit code which was:
- * Written by: Havoc Pennington, based on code by John Ellis.
- */
-#include <config.h>
-
-#include "file-types-icon-entry.h"
-
-#include <gdk_imlib.h>
-#include <gnome.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkdnd.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkfilesel.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkpixmap.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-
-
-static void nautilus_mime_type_icon_entry_class_init (GnomeIconEntryClass *class);
-static void nautilus_mime_type_icon_entry_init (NautilusMimeIconEntry *ientry);
-
-static GtkVBoxClass *parent_class;
-
-static GtkTargetEntry drop_types[] = { { "text/uri-list", 0, 0 } };
-
-GType
-nautilus_mime_type_icon_entry_get_type (void)
-{
- static GType icon_entry_type = 0;
-
- if (!icon_entry_type) {
- GtkTypeInfo icon_entry_info = {
- "NautilusMimeIconEntry",
- sizeof (NautilusMimeIconEntry),
- sizeof (GnomeIconEntryClass),
- (GtkClassInitFunc) nautilus_mime_type_icon_entry_class_init,
- (GtkObjectInitFunc) nautilus_mime_type_icon_entry_init,
- NULL,
- NULL
- };
-
- icon_entry_type = gtk_type_unique (gtk_vbox_get_type (),
- &icon_entry_info);
- }
-
- return icon_entry_type;
-}
-
-static void
-nautilus_mime_type_icon_entry_class_init (GnomeIconEntryClass *class)
-{
- parent_class = gtk_type_class (gtk_hbox_get_type ());
-}
-
-static void
-entry_changed(GtkWidget *widget, NautilusMimeIconEntry *ientry)
-{
- gchar *t;
- GtkWidget *child;
- int w,h;
-
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- t = gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(ientry->fentry),
- FALSE);
-
- child = GTK_BIN(ientry->frame)->child;
-
- if(GNOME_IS_PIXMAP (child)) {
- gnome_pixmap_load_file (GNOME_PIXMAP(child), t);
- } else {
- if (child != NULL) {
- gtk_widget_destroy (child);
- }
-
- child = gnome_pixmap_new_from_file (t);
- gtk_widget_show (child);
- gtk_container_add (GTK_CONTAINER(ientry->frame), child);
-
- if(!GTK_WIDGET_NO_WINDOW(child)) {
- gtk_drag_source_set (child,
- GDK_BUTTON1_MASK|GDK_BUTTON3_MASK,
- drop_types, 1,
- GDK_ACTION_COPY);
- }
- }
-
- /*gtk_drag_source_set (ientry->frame,
- GDK_BUTTON1_MASK|GDK_BUTTON3_MASK,
- drop_types, 1,
- GDK_ACTION_COPY);
- */
-}
-
-static void
-entry_activated(GtkWidget *widget, NautilusMimeIconEntry *ientry)
-{
- struct stat buf;
- GnomeIconSelection * gis;
- gchar *filename;
- GtkButton *OK_button;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GTK_IS_ENTRY (widget));
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- filename = gtk_entry_get_text (GTK_ENTRY (widget));
-
- if (!filename)
- return;
-
- stat (filename, &buf);
- if (S_ISDIR (buf.st_mode)) {
- gis = gtk_object_get_user_data(GTK_OBJECT(ientry));
- gnome_icon_selection_clear (gis, TRUE);
- gnome_icon_selection_add_directory (gis, filename);
-/* if (gis->file_list) */
- gnome_icon_selection_show_icons(gis);
- } else {
- /* FIXME: This is a hack to act exactly like we've clicked the
- * OK button. This should be structured more cleanly.
- */
- OK_button = GTK_BUTTON (GNOME_DIALOG (ientry->pick_dialog)->buttons->data);
- gtk_button_clicked (OK_button);
- }
-}
-
-static void
-setup_preview(GtkWidget *widget)
-{
- gchar *p;
- GList *l;
- GtkWidget *pp = NULL;
- int w,h;
- GtkWidget *frame;
- GtkFileSelection *fs;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
- frame = gtk_object_get_data(GTK_OBJECT(widget),"frame");
- fs = gtk_object_get_data(GTK_OBJECT(frame),"fs");
-
- if((l = gtk_container_children(GTK_CONTAINER(frame))) != NULL) {
- pp = l->data;
- g_list_free(l);
- }
-
- if(pp)
- gtk_widget_destroy(pp);
-
- p = gtk_file_selection_get_filename(fs);
- if(!p || !g_file_test (p,G_FILE_TEST_IS_SYMLINK|G_FILE_TEST_IS_REGULAR))
- return;
-
- pp = gnome_pixmap_new_from_file (p);
- gtk_widget_show(pp);
- gtk_container_add(GTK_CONTAINER(frame),pp);
-}
-
-static void
-ientry_destroy(NautilusMimeIconEntry *ientry)
-{
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- if(ientry->fentry)
- gtk_widget_unref (ientry->fentry);
- if(ientry->pick_dialog)
- gtk_widget_destroy(ientry->pick_dialog);
- g_free(ientry->pick_dialog_dir);
-}
-
-
-static void
-browse_clicked (GnomeFileEntry *fentry, NautilusMimeIconEntry *ientry)
-{
- GtkWidget *w;
- GtkWidget *hbox;
-
- GtkFileSelection *fs;
-
- g_return_if_fail (fentry != NULL);
- g_return_if_fail (GNOME_IS_FILE_ENTRY (fentry));
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- if(!fentry->fsw)
- return;
- fs = GTK_FILE_SELECTION(fentry->fsw);
-
- hbox = fs->file_list;
- do {
- hbox = hbox->parent;
- if(!hbox) {
- g_warning(_("Can't find an hbox, using a normal file "
- "selection"));
- return;
- }
- } while(!GTK_IS_HBOX(hbox));
-
- w = gtk_frame_new(_("Preview"));
- gtk_widget_show(w);
- gtk_box_pack_end(GTK_BOX(hbox),w,FALSE,FALSE,0);
- gtk_widget_set_usize(w,110,110);
- gtk_object_set_data(GTK_OBJECT(w),"fs",fs);
-
- gtk_object_set_data(GTK_OBJECT(fs->file_list),"frame",w);
- gtk_signal_connect(GTK_OBJECT(fs->file_list),"select_row",
- GTK_SIGNAL_FUNC(setup_preview),NULL);
- gtk_object_set_data(GTK_OBJECT(fs->selection_entry),"frame",w);
- gtk_signal_connect_while_alive(GTK_OBJECT(fs->selection_entry),
- "changed",
- GTK_SIGNAL_FUNC(setup_preview),NULL,
- GTK_OBJECT(fs));
-}
-
-static void
-cancel_pressed (GtkButton * button, NautilusMimeIconEntry * icon_entry)
-{
- GnomeIconSelection * gis;
-
- g_return_if_fail (icon_entry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (icon_entry));
-
- gis = gtk_object_get_user_data(GTK_OBJECT(icon_entry));
- gnome_icon_selection_stop_loading(gis);
-}
-
-
-void
-nautilus_mime_type_show_icon_selection (NautilusMimeIconEntry *icon_entry)
-{
- GnomeFileEntry *fe;
- gchar *p;
- gchar *curfile, *filename;
- GtkWidget *tl;
-
- g_return_if_fail (icon_entry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (icon_entry));
-
- fe = GNOME_FILE_ENTRY (icon_entry->fentry);
- p = gnome_file_entry_get_full_path (fe, FALSE);
- curfile = nautilus_mime_type_icon_entry_get_full_filename (icon_entry);
-
- /* Are we part of a modal window? If so, we need to be modal too. */
- tl = gtk_widget_get_toplevel (GTK_WIDGET (icon_entry->frame));
-
- if (!p) {
- if (fe->default_path) {
- p = g_strdup (fe->default_path);
- } else {
- /* get around the g_free/free issue */
- gchar *cwd = g_get_current_dir ();
- p = g_strdup (cwd);
- g_free (cwd);
- }
- gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (icon_entry->fentry))),
- p);
- }
-
- /* figure out the directory */
- if (!g_file_test (p, G_FILE_TEST_IS_DIR)) {
- gchar *d;
- d = g_path_get_dirname (p);
- g_free (p);
- p = d;
- if (!g_file_test (p, G_FILE_TEST_IS_DIR)) {
- g_free (p);
- if (fe->default_path) {
- p = g_strdup (fe->default_path);
- } else {
- /*get around the g_free/free issue*/
- gchar *cwd = g_get_current_dir ();
- p = g_strdup (cwd);
- free(cwd);
- }
- gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (icon_entry->fentry))),
- p);
- g_return_if_fail (g_file_test (p,G_FILE_TEST_IS_DIR));
- }
- }
-
-
- if (icon_entry->pick_dialog == NULL || icon_entry->pick_dialog_dir == NULL ||
- strcmp(p, icon_entry->pick_dialog_dir) != 0) {
- GtkWidget *iconsel;
-
- if (icon_entry->pick_dialog) {
- gtk_container_remove (GTK_CONTAINER (icon_entry->fentry->parent), icon_entry->fentry);
- gtk_widget_destroy (icon_entry->pick_dialog);
- }
-
- g_free(icon_entry->pick_dialog_dir);
- icon_entry->pick_dialog_dir = NULL;
-
- icon_entry->pick_dialog_dir = p;
- icon_entry->pick_dialog =
- gnome_dialog_new("",
- GNOME_STOCK_BUTTON_OK,
- GNOME_STOCK_BUTTON_CANCEL,
- NULL);
- if (GTK_WINDOW (tl)->modal) {
- gtk_window_set_modal (GTK_WINDOW (icon_entry->pick_dialog), TRUE);
- gnome_dialog_set_parent (GNOME_DIALOG (icon_entry->pick_dialog), GTK_WINDOW (tl));
- }
- gnome_dialog_close_hides(GNOME_DIALOG(icon_entry->pick_dialog), TRUE);
- gnome_dialog_set_close (GNOME_DIALOG(icon_entry->pick_dialog), TRUE);
-
- gtk_window_set_policy(GTK_WINDOW(icon_entry->pick_dialog),
- TRUE, TRUE, TRUE);
-
- iconsel = gnome_icon_selection_new();
-
- gtk_object_set_user_data(GTK_OBJECT(icon_entry), iconsel);
-
- gnome_icon_selection_add_directory (GNOME_ICON_SELECTION(iconsel), icon_entry->pick_dialog_dir);
-
- gtk_window_set_title (GTK_WINDOW (icon_entry->pick_dialog), _("Select an icon"));
-
- gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (icon_entry->pick_dialog)->vbox),
- icon_entry->fentry, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(icon_entry->pick_dialog)->vbox),
- iconsel, TRUE, TRUE, 0);
-
- gtk_widget_show_all(icon_entry->pick_dialog);
-
- gnome_icon_selection_show_icons(GNOME_ICON_SELECTION(iconsel));
-
- if(curfile)
- filename = g_path_get_basename(curfile);
-
- if(filename)
- gnome_icon_selection_select_icon(GNOME_ICON_SELECTION(iconsel),
- filename);
-
- /* FIXME:
- * OK button is handled by caller, Cancel button is handled here.
- * This could be cleaned up further.
- */
- gnome_dialog_button_connect(GNOME_DIALOG(icon_entry->pick_dialog),
- 1, /* Cancel button */
- GTK_SIGNAL_FUNC(cancel_pressed),
- icon_entry);
-
- } else {
- GnomeIconSelection *gis =
- gtk_object_get_user_data(GTK_OBJECT(icon_entry));
- if(!GTK_WIDGET_VISIBLE(icon_entry->pick_dialog))
- gtk_widget_show(icon_entry->pick_dialog);
- if(gis) {
- gnome_icon_selection_show_icons(gis);
- }
- }
-}
-
-gchar *
-nautilus_mime_type_icon_entry_get_relative_filename (NautilusMimeIconEntry *ientry)
-{
- char *filename;
- char *result;
- char **path_parts;
-
- result = NULL;
- filename = nautilus_mime_type_icon_entry_get_full_filename (NAUTILUS_MIME_ICON_ENTRY (ientry));
- if (filename != NULL) {
- path_parts = g_strsplit (filename, "/share/pixmaps/", 0);
- g_free (filename);
-
- if (path_parts[1] != NULL) {
- result = g_strdup (path_parts[1]);
- }
-
- g_strfreev (path_parts);
- }
-
- return result;
-}
-
-static void
-nautilus_mime_type_icon_entry_init (NautilusMimeIconEntry *ientry)
-{
- GtkWidget *w;
- gchar *p;
-
- gtk_box_set_spacing (GTK_BOX (ientry), 4);
-
- gtk_signal_connect(GTK_OBJECT(ientry),"destroy",
- GTK_SIGNAL_FUNC(ientry_destroy), NULL);
-
- ientry->pick_dialog = NULL;
- ientry->pick_dialog_dir = NULL;
-
- w = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
- gtk_widget_show(w);
- gtk_box_pack_start (GTK_BOX (ientry), w, TRUE, TRUE, 0);
- ientry->frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (ientry->frame), GTK_SHADOW_IN);
- gtk_drag_dest_set (GTK_WIDGET (ientry->frame),
- GTK_DEST_DEFAULT_MOTION |
- GTK_DEST_DEFAULT_HIGHLIGHT |
- GTK_DEST_DEFAULT_DROP,
- drop_types, 1, GDK_ACTION_COPY);
-
- /*60x60 is just larger then default 48x48, though icon sizes
- are supposed to be selectable I guess*/
- gtk_widget_set_usize (ientry->frame,60,60);
- gtk_container_add (GTK_CONTAINER (w), ientry->frame);
- gtk_widget_show (ientry->frame);
-
- ientry->fentry = gnome_file_entry_new (NULL,NULL);
- gnome_file_entry_set_modal (GNOME_FILE_ENTRY (ientry->fentry), TRUE);
- gtk_widget_ref (ientry->fentry);
- gtk_signal_connect_after(GTK_OBJECT(ientry->fentry),"browse_clicked",
- GTK_SIGNAL_FUNC(browse_clicked),
- ientry);
-
- gtk_widget_show (ientry->fentry);
-
- p = gnome_pixmap_file (".");
- gnome_file_entry_set_default_path (GNOME_FILE_ENTRY(ientry->fentry), p);
- g_free (p);
-
- w = gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(ientry->fentry));
-/* gtk_signal_connect_while_alive(GTK_OBJECT(w), "changed",
- GTK_SIGNAL_FUNC(entry_changed),
- ientry, GTK_OBJECT(ientry));*/
- gtk_signal_connect_while_alive(GTK_OBJECT(w), "activate",
- GTK_SIGNAL_FUNC(entry_activated),
- ientry, GTK_OBJECT(ientry));
-
-
- /*just in case there is a default that is an image*/
- entry_changed(w,ientry);
-}
-
-/**
- * nautilus_mime_type_icon_entry_new:
- * @history_id: the id given to #gnome_entry_new
- * @browse_dialog_title: title of the browse dialog and icon selection dialog
- *
- * Description: Creates a new icon entry widget
- *
- * Returns: Returns the new object
- **/
-GtkWidget *
-nautilus_mime_type_icon_entry_new (const gchar *history_id, const gchar *browse_dialog_title)
-{
- NautilusMimeIconEntry *ientry;
- GtkWidget *gentry;
-
- ientry = gtk_type_new (nautilus_mime_type_icon_entry_get_type ());
-
- /* Keep in sync with gnome_entry_new() - or better yet,
- add a _construct() method once we are in development
- branch.
- */
-
- gentry = gnome_file_entry_gnome_entry(GNOME_FILE_ENTRY(ientry->fentry));
-
- gnome_entry_set_history_id (GNOME_ENTRY (gentry), history_id);
- /* gnome_entry_load_history (GNOME_ENTRY (gentry)); */
- gnome_file_entry_set_title (GNOME_FILE_ENTRY(ientry->fentry),
- browse_dialog_title);
-
- return GTK_WIDGET (ientry);
-}
-
-/**
- * nautilus_mime_type_icon_entry_gnome_file_entry:
- * @ientry: the NautilusMimeIconEntry to work with
- *
- * Description: Get the GnomeFileEntry widget that's part of the entry
- *
- * Returns: Returns GnomeFileEntry widget
- **/
-GtkWidget *
-nautilus_mime_type_icon_entry_gnome_file_entry (NautilusMimeIconEntry *ientry)
-{
- g_return_val_if_fail (ientry != NULL, NULL);
- g_return_val_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry), NULL);
-
- return ientry->fentry;
-}
-
-/**
- * nautilus_mime_type_icon_entry_gnome_entry:
- * @ientry: the NautilusMimeIconEntry to work with
- *
- * Description: Get the GnomeEntry widget that's part of the entry
- *
- * Returns: Returns GnomeEntry widget
- **/
-GtkWidget *
-nautilus_mime_type_icon_entry_gnome_entry (NautilusMimeIconEntry *ientry)
-{
- g_return_val_if_fail (ientry != NULL, NULL);
- g_return_val_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry), NULL);
-
- return gnome_file_entry_gnome_entry(GNOME_FILE_ENTRY(ientry->fentry));
-}
-
-/**
- * nautilus_mime_type_icon_entry_gtk_entry:
- * @ientry: the NautilusMimeIconEntry to work with
- *
- * Description: Get the GtkEntry widget that's part of the entry
- *
- * Returns: Returns GtkEntry widget
- **/
-GtkWidget *
-nautilus_mime_type_icon_entry_gtk_entry (NautilusMimeIconEntry *ientry)
-{
- g_return_val_if_fail (ientry != NULL, NULL);
- g_return_val_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry), NULL);
-
- return gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (ientry->fentry));
-}
-
-/**
- * nautilus_mime_type_icon_entry_set_pixmap_subdir:
- * @ientry: the NautilusMimeIconEntry to work with
- * @subdir: subdirectory
- *
- * Description: Sets the subdirectory below gnome's default
- * pixmap directory to use as the default path for the file
- * entry.
- *
- * Returns:
- **/
-void
-nautilus_mime_type_icon_entry_set_pixmap_subdir(NautilusMimeIconEntry *ientry, const gchar *subdir)
-{
- gchar *p;
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- if(!subdir)
- subdir = ".";
-
- p = gnome_pixmap_file (subdir);
- gnome_file_entry_set_default_path(GNOME_FILE_ENTRY(ientry->fentry),p);
- g_free(p);
-}
-
-/**
- * nautilus_mime_type_icon_entry_set_icon:
- * @ientry: the NautilusMimeIconEntry to work with
- * @filename: a filename
- *
- * Description: Sets the icon of NautilusMimeIconEntry to be the one pointed to by
- * @filename (in the current subdirectory).
- *
- * Returns:
- **/
-void
-nautilus_mime_type_icon_entry_set_icon (NautilusMimeIconEntry *ientry, const gchar *filename)
-{
- g_return_if_fail (ientry != NULL);
- g_return_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry));
-
- if(!filename) {
- filename = "";
- }
-
- gtk_entry_set_text (GTK_ENTRY (nautilus_mime_type_icon_entry_gtk_entry (ientry)), filename);
- entry_changed (NULL, ientry);
-}
-
-/**
- * nautilus_mime_type_icon_entry_get_full_filename:
- * @ientry: the NautilusMimeIconEntry to work with
- *
- * Description: Gets the file name of the image if it was possible
- * to load it into the preview. That is, it will only return a filename
- * if the image exists and it was possible to load it as an image.
- *
- * Returns: a newly allocated string with the path or %NULL if it
- * couldn't load the file
- **/
-gchar *
-nautilus_mime_type_icon_entry_get_full_filename (NautilusMimeIconEntry *ientry)
-{
- GtkWidget *child;
-
- g_return_val_if_fail (ientry != NULL,NULL);
- g_return_val_if_fail (NAUTILUS_MIME_IS_ICON_ENTRY (ientry),NULL);
-
- child = GTK_BIN(ientry->frame)->child;
-
- /* this happens if it doesn't exist or isn't an image */
- if (!GNOME_IS_PIXMAP (child)) {
- return NULL;
- }
-
- return gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(ientry->fentry),
- TRUE);
-}