app/widgets/Makefile.am app/widgets/widgets-types.h new widget swallowing
2004-02-27 Michael Natterer <mitch@gimp.org> * app/widgets/Makefile.am * app/widgets/widgets-types.h * app/widgets/gimpfiledialog.[ch]: new widget swallowing most of file-dialog-utils.[ch]'s functionality. * app/widgets/widgets-types.h: added "gpointer callback_data" to GimpItemFactorySetupFunc so the setup_funcs can create items in the same context as the item factory's default items. * app/widgets/gimpmenufactory.c (gimp_menu_factory_menu_new): pass "callback_data" to setup_func(). * app/gui/file-open-menu.[ch] * app/gui/file-save-menu.[ch]: use the passed callback_data when creating the menus and attach the file_proc to the menu items using g_object_set_data(). * app/gui/file-commands.[ch]: merged separate file type callbacks for open and save dialogs into one callback which simply calls gimp_file_dialog_set_file_proc(). * app/gui/file-dialog-utils.[ch]: removed file_dialog_new() and file_dialog_set_proc(). * app/gui/file-open-dialog.[ch] * app/gui/file-save-dialog.[ch]: use the new widget and removed global variables except the dialog pointer itself. * app/gui/image-menu.[ch] * app/gui/tool-options-menu.[ch] * app/gui/toolbox-menu.[ch]: changed accordingly.
This commit is contained in:

committed by
Michael Natterer

parent
2c936cc923
commit
527aa849cb
34
ChangeLog
34
ChangeLog
@ -1,3 +1,37 @@
|
||||
2004-02-27 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/widgets/Makefile.am
|
||||
* app/widgets/widgets-types.h
|
||||
* app/widgets/gimpfiledialog.[ch]: new widget swallowing most
|
||||
of file-dialog-utils.[ch]'s functionality.
|
||||
|
||||
* app/widgets/widgets-types.h: added "gpointer callback_data" to
|
||||
GimpItemFactorySetupFunc so the setup_funcs can create items in
|
||||
the same context as the item factory's default items.
|
||||
|
||||
* app/widgets/gimpmenufactory.c (gimp_menu_factory_menu_new):
|
||||
pass "callback_data" to setup_func().
|
||||
|
||||
* app/gui/file-open-menu.[ch]
|
||||
* app/gui/file-save-menu.[ch]: use the passed callback_data
|
||||
when creating the menus and attach the file_proc to the
|
||||
menu items using g_object_set_data().
|
||||
|
||||
* app/gui/file-commands.[ch]: merged separate file type callbacks
|
||||
for open and save dialogs into one callback which simply
|
||||
calls gimp_file_dialog_set_file_proc().
|
||||
|
||||
* app/gui/file-dialog-utils.[ch]: removed file_dialog_new()
|
||||
and file_dialog_set_proc().
|
||||
|
||||
* app/gui/file-open-dialog.[ch]
|
||||
* app/gui/file-save-dialog.[ch]: use the new widget and removed
|
||||
global variables except the dialog pointer itself.
|
||||
|
||||
* app/gui/image-menu.[ch]
|
||||
* app/gui/tool-options-menu.[ch]
|
||||
* app/gui/toolbox-menu.[ch]: changed accordingly.
|
||||
|
||||
2004-02-26 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* INSTALL: improved help on missing libraries at run-time.
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "widgets/gimpdock.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
|
||||
#include "display/gimpdisplay.h"
|
||||
#include "display/gimpdisplay-foreach.h"
|
||||
@ -124,19 +125,13 @@ file_new_cmd_callback (GtkWidget *widget,
|
||||
}
|
||||
|
||||
void
|
||||
file_open_by_extension_cmd_callback (GtkWidget *widget,
|
||||
file_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_open_dialog_set_type (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
file_open_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_open_dialog_set_type ((PlugInProcDef *) data);
|
||||
gimp_file_dialog_set_file_proc (GIMP_FILE_DIALOG (data),
|
||||
g_object_get_data (G_OBJECT (widget),
|
||||
"file-proc"));
|
||||
}
|
||||
|
||||
void
|
||||
@ -200,22 +195,6 @@ file_last_opened_cmd_callback (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
file_save_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_save_dialog_set_type (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
file_save_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_save_dialog_set_type ((PlugInProcDef *) data);
|
||||
}
|
||||
|
||||
void
|
||||
file_save_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
|
@ -24,12 +24,10 @@ void file_new_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_open_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_open_type_cmd_callback (GtkWidget *widget,
|
||||
void file_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_open_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
@ -37,12 +35,6 @@ void file_last_opened_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_save_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_save_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_save_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "plug-in/plug-in-proc.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimpitemfactory.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
|
||||
@ -40,87 +41,6 @@
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
GtkWidget *
|
||||
file_dialog_new (Gimp *gimp,
|
||||
GimpDialogFactory *dialog_factory,
|
||||
const gchar *dialog_identifier,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *help_id)
|
||||
{
|
||||
GtkWidget *filesel;
|
||||
GtkFileSelection *fs;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (dialog_factory), NULL);
|
||||
g_return_val_if_fail (dialog_identifier != NULL, NULL);
|
||||
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
|
||||
g_return_val_if_fail (menu_identifier != NULL, NULL);
|
||||
g_return_val_if_fail (title != NULL, NULL);
|
||||
g_return_val_if_fail (role != NULL, NULL);
|
||||
g_return_val_if_fail (help_id != NULL, NULL);
|
||||
|
||||
filesel = gtk_file_selection_new (title);
|
||||
|
||||
fs = GTK_FILE_SELECTION (filesel);
|
||||
|
||||
g_object_set_data (G_OBJECT (filesel), "gimp", gimp);
|
||||
|
||||
gtk_window_set_role (GTK_WINDOW (filesel), role);
|
||||
|
||||
gimp_help_connect (filesel, gimp_standard_help_func, help_id, NULL);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (filesel), 6);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fs->button_area), 4);
|
||||
|
||||
g_signal_connect (filesel, "delete_event",
|
||||
G_CALLBACK (gtk_true),
|
||||
NULL);
|
||||
|
||||
/* The file type menu */
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *option_menu;
|
||||
GtkWidget *label;
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 4);
|
||||
gtk_box_pack_end (GTK_BOX (fs->main_vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
item_factory = gimp_menu_factory_menu_new (menu_factory,
|
||||
menu_identifier,
|
||||
GTK_TYPE_MENU,
|
||||
gimp,
|
||||
FALSE);
|
||||
|
||||
g_object_set_data (G_OBJECT (filesel), "gimp-item-factory", item_factory);
|
||||
|
||||
option_menu = gtk_option_menu_new ();
|
||||
gtk_box_pack_end (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0);
|
||||
gtk_widget_show (option_menu);
|
||||
|
||||
g_object_weak_ref (G_OBJECT (option_menu),
|
||||
(GWeakNotify) g_object_unref,
|
||||
item_factory);
|
||||
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu),
|
||||
GTK_ITEM_FACTORY (item_factory)->widget);
|
||||
|
||||
label = gtk_label_new_with_mnemonic (_("Determine File _Type:"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), option_menu);
|
||||
}
|
||||
|
||||
gimp_dialog_factory_add_foreign (dialog_factory, dialog_identifier, filesel);
|
||||
|
||||
return filesel;
|
||||
}
|
||||
|
||||
void
|
||||
file_dialog_show (GtkWidget *filesel,
|
||||
GtkWidget *parent)
|
||||
@ -151,33 +71,3 @@ file_dialog_hide (GtkWidget *filesel)
|
||||
gimp_item_factories_set_sensitive ("<Image>", "/File/Save as...", TRUE);
|
||||
gimp_item_factories_set_sensitive ("<Image>", "/File/Save a Copy...", TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
file_dialog_update_name (PlugInProcDef *proc,
|
||||
GtkFileSelection *filesel)
|
||||
{
|
||||
if (proc->extensions_list)
|
||||
{
|
||||
const gchar *text;
|
||||
gchar *last_dot;
|
||||
GString *s;
|
||||
|
||||
text = gtk_entry_get_text (GTK_ENTRY (filesel->selection_entry));
|
||||
last_dot = strrchr (text, '.');
|
||||
|
||||
if (last_dot == text || !text[0])
|
||||
return;
|
||||
|
||||
s = g_string_new (text);
|
||||
|
||||
if (last_dot)
|
||||
g_string_truncate (s, last_dot-text);
|
||||
|
||||
g_string_append (s, ".");
|
||||
g_string_append (s, (gchar *) proc->extensions_list->data);
|
||||
|
||||
gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), s->str);
|
||||
|
||||
g_string_free (s, TRUE);
|
||||
}
|
||||
}
|
||||
|
@ -20,21 +20,9 @@
|
||||
#define __FILE_DIALOG_UTILS_H__
|
||||
|
||||
|
||||
GtkWidget * file_dialog_new (Gimp *gimp,
|
||||
GimpDialogFactory *dialog_factory,
|
||||
const gchar *dialog_identifier,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *help_id);
|
||||
|
||||
void file_dialog_show (GtkWidget *filesel,
|
||||
GtkWidget *parent);
|
||||
void file_dialog_hide (GtkWidget *filesel);
|
||||
|
||||
void file_dialog_update_name (PlugInProcDef *proc,
|
||||
GtkFileSelection *filesel);
|
||||
|
||||
|
||||
#endif /* __FILE_DIALOG_UTILS_H__ */
|
||||
|
@ -38,6 +38,8 @@
|
||||
#include "file/file-open.h"
|
||||
#include "file/file-utils.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
#include "widgets/gimpthumbbox.h"
|
||||
@ -67,19 +69,10 @@ static void file_open_dialog_open_image (GtkWidget *open_dialog,
|
||||
|
||||
static GtkWidget *fileload = NULL;
|
||||
static GtkWidget *thumb_box = NULL;
|
||||
static PlugInProcDef *load_file_proc = NULL;
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
file_open_dialog_set_type (PlugInProcDef *proc)
|
||||
{
|
||||
/* Don't call file_dialog_update_name() here, see bug #112273. */
|
||||
|
||||
load_file_proc = proc;
|
||||
}
|
||||
|
||||
void
|
||||
file_open_dialog_show (Gimp *gimp,
|
||||
GimpImage *gimage,
|
||||
@ -146,13 +139,16 @@ file_open_dialog_create (Gimp *gimp,
|
||||
GtkWidget *open_dialog;
|
||||
GtkFileSelection *fs;
|
||||
|
||||
open_dialog = file_dialog_new (gimp,
|
||||
global_dialog_factory,
|
||||
"gimp-file-open-dialog",
|
||||
open_dialog = gimp_file_dialog_new (gimp,
|
||||
menu_factory, "<Load>",
|
||||
_("Open Image"), "gimp-file-open",
|
||||
GTK_STOCK_OPEN,
|
||||
GIMP_HELP_FILE_OPEN);
|
||||
|
||||
gimp_dialog_factory_add_foreign (global_dialog_factory,
|
||||
"gimp-file-open-dialog",
|
||||
open_dialog);
|
||||
|
||||
g_signal_connect (open_dialog, "response",
|
||||
G_CALLBACK (file_open_response_callback),
|
||||
gimp);
|
||||
@ -202,8 +198,8 @@ static void
|
||||
file_open_selchanged_callback (GtkTreeSelection *sel,
|
||||
GtkWidget *open_dialog)
|
||||
{
|
||||
GtkFileSelection *fs;
|
||||
Gimp *gimp;
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (open_dialog);
|
||||
GtkFileSelection *fs = GTK_FILE_SELECTION (open_dialog);
|
||||
const gchar *fullfname;
|
||||
gboolean selected = FALSE;
|
||||
|
||||
@ -211,17 +207,14 @@ file_open_selchanged_callback (GtkTreeSelection *sel,
|
||||
selchanged_foreach,
|
||||
&selected);
|
||||
|
||||
fs = GTK_FILE_SELECTION (open_dialog);
|
||||
|
||||
gimp = GIMP (g_object_get_data (G_OBJECT (open_dialog), "gimp"));
|
||||
|
||||
if (selected)
|
||||
{
|
||||
gchar *uri;
|
||||
|
||||
fullfname = gtk_file_selection_get_filename (fs);
|
||||
|
||||
uri = file_utils_filename_to_uri (gimp->load_procs, fullfname, NULL);
|
||||
uri = file_utils_filename_to_uri (dialog->gimp->load_procs,
|
||||
fullfname, NULL);
|
||||
gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), uri);
|
||||
g_free (uri);
|
||||
}
|
||||
@ -310,7 +303,7 @@ file_open_response_callback (GtkWidget *open_dialog,
|
||||
gimp,
|
||||
uri,
|
||||
entered_filename,
|
||||
load_file_proc);
|
||||
GIMP_FILE_DIALOG (open_dialog)->file_proc);
|
||||
|
||||
g_free (uri);
|
||||
|
||||
@ -328,7 +321,7 @@ file_open_response_callback (GtkWidget *open_dialog,
|
||||
gimp,
|
||||
uri,
|
||||
uri,
|
||||
load_file_proc);
|
||||
GIMP_FILE_DIALOG (open_dialog)->file_proc);
|
||||
|
||||
g_free (uri);
|
||||
}
|
||||
|
@ -20,8 +20,6 @@
|
||||
#define __FILE_OPEN_DIALOG_H__
|
||||
|
||||
|
||||
void file_open_dialog_set_type (PlugInProcDef *proc);
|
||||
|
||||
void file_open_dialog_show (Gimp *gimp,
|
||||
GimpImage *gimage,
|
||||
const gchar *uri,
|
||||
|
@ -36,6 +36,8 @@
|
||||
#include "file/file-save.h"
|
||||
#include "file/file-utils.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpitemfactory.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
@ -71,29 +73,14 @@ static void file_save_dialog_save_image (GtkWidget *save_dialog,
|
||||
|
||||
static GtkWidget *filesave = NULL;
|
||||
|
||||
static PlugInProcDef *save_file_proc = NULL;
|
||||
static GimpImage *the_gimage = NULL;
|
||||
static gboolean set_uri_and_proc = TRUE;
|
||||
static gboolean set_image_clean = TRUE;
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
file_save_dialog_set_type (PlugInProcDef *proc)
|
||||
{
|
||||
if (proc)
|
||||
file_dialog_update_name (proc, GTK_FILE_SELECTION (filesave));
|
||||
|
||||
save_file_proc = proc;
|
||||
}
|
||||
|
||||
void
|
||||
file_save_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent)
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
gchar *filename;
|
||||
|
||||
g_return_if_fail (GIMP_IS_IMAGE (gimage));
|
||||
@ -102,13 +89,13 @@ file_save_dialog_show (GimpImage *gimage,
|
||||
if (! gimp_image_active_drawable (gimage))
|
||||
return;
|
||||
|
||||
the_gimage = gimage;
|
||||
set_uri_and_proc = TRUE;
|
||||
set_image_clean = TRUE;
|
||||
|
||||
if (! filesave)
|
||||
filesave = file_save_dialog_create (gimage->gimp, menu_factory);
|
||||
|
||||
GIMP_FILE_DIALOG (filesave)->gimage = gimage;
|
||||
GIMP_FILE_DIALOG (filesave)->set_uri_and_proc = TRUE;
|
||||
GIMP_FILE_DIALOG (filesave)->set_image_clean = TRUE;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
|
||||
|
||||
if (GTK_WIDGET_VISIBLE (filesave))
|
||||
@ -128,9 +115,7 @@ file_save_dialog_show (GimpImage *gimage,
|
||||
|
||||
g_free (filename);
|
||||
|
||||
item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory");
|
||||
|
||||
gimp_item_factory_update (item_factory,
|
||||
gimp_item_factory_update (GIMP_FILE_DIALOG (filesave)->item_factory,
|
||||
gimp_image_active_drawable (gimage));
|
||||
|
||||
file_dialog_show (filesave, parent);
|
||||
@ -141,7 +126,6 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent)
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
const gchar *uri;
|
||||
gchar *filename = NULL;
|
||||
|
||||
@ -151,10 +135,6 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
if (! gimp_image_active_drawable (gimage))
|
||||
return;
|
||||
|
||||
the_gimage = gimage;
|
||||
set_uri_and_proc = FALSE;
|
||||
set_image_clean = FALSE;
|
||||
|
||||
uri = gimp_object_get_name (GIMP_OBJECT (gimage));
|
||||
|
||||
if (uri)
|
||||
@ -163,6 +143,10 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
if (! filesave)
|
||||
filesave = file_save_dialog_create (gimage->gimp, menu_factory);
|
||||
|
||||
GIMP_FILE_DIALOG (filesave)->gimage = gimage;
|
||||
GIMP_FILE_DIALOG (filesave)->set_uri_and_proc = FALSE;
|
||||
GIMP_FILE_DIALOG (filesave)->set_image_clean = FALSE;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
|
||||
|
||||
if (GTK_WIDGET_VISIBLE (filesave))
|
||||
@ -180,9 +164,7 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
|
||||
g_free (filename);
|
||||
|
||||
item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory");
|
||||
|
||||
gimp_item_factory_update (item_factory,
|
||||
gimp_item_factory_update (GIMP_FILE_DIALOG (filesave)->item_factory,
|
||||
gimp_image_active_drawable (gimage));
|
||||
|
||||
file_dialog_show (filesave, parent);
|
||||
@ -197,13 +179,16 @@ file_save_dialog_create (Gimp *gimp,
|
||||
{
|
||||
GtkWidget *save_dialog;
|
||||
|
||||
save_dialog = file_dialog_new (gimp,
|
||||
global_dialog_factory,
|
||||
"gimp-file-save-dialog",
|
||||
save_dialog = gimp_file_dialog_new (gimp,
|
||||
menu_factory, "<Save>",
|
||||
_("Save Image"), "gimp-file-save",
|
||||
GTK_STOCK_SAVE,
|
||||
GIMP_HELP_FILE_SAVE);
|
||||
|
||||
gimp_dialog_factory_add_foreign (global_dialog_factory,
|
||||
"gimp-file-save-dialog",
|
||||
save_dialog);
|
||||
|
||||
g_signal_connect (save_dialog, "response",
|
||||
G_CALLBACK (file_save_response_callback),
|
||||
gimp);
|
||||
@ -258,17 +243,19 @@ file_save_response_callback (GtkWidget *save_dialog,
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE);
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (save_dialog);
|
||||
|
||||
gtk_widget_set_sensitive (save_dialog, FALSE);
|
||||
|
||||
file_save_dialog_save_image (save_dialog,
|
||||
the_gimage,
|
||||
dialog->gimage,
|
||||
uri,
|
||||
raw_filename,
|
||||
save_file_proc,
|
||||
set_uri_and_proc,
|
||||
set_image_clean);
|
||||
dialog->file_proc,
|
||||
dialog->set_uri_and_proc,
|
||||
dialog->set_image_clean);
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE);
|
||||
gtk_widget_set_sensitive (save_dialog, TRUE);
|
||||
}
|
||||
|
||||
g_free (uri);
|
||||
@ -336,13 +323,15 @@ file_save_overwrite_callback (GtkWidget *widget,
|
||||
|
||||
if (overwrite)
|
||||
{
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (overwrite_data->save_dialog);
|
||||
|
||||
file_save_dialog_save_image (overwrite_data->save_dialog,
|
||||
the_gimage,
|
||||
dialog->gimage,
|
||||
overwrite_data->uri,
|
||||
overwrite_data->raw_filename,
|
||||
save_file_proc,
|
||||
set_uri_and_proc,
|
||||
set_image_clean);
|
||||
dialog->file_proc,
|
||||
dialog->set_uri_and_proc,
|
||||
dialog->set_image_clean);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (overwrite_data->save_dialog, TRUE);
|
||||
|
@ -20,8 +20,6 @@
|
||||
#define __FILE_SAVE_DIALOG_H__
|
||||
|
||||
|
||||
void file_save_dialog_set_type (PlugInProcDef *proc);
|
||||
|
||||
void file_save_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent);
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "widgets/gimpdock.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
|
||||
#include "display/gimpdisplay.h"
|
||||
#include "display/gimpdisplay-foreach.h"
|
||||
@ -124,19 +125,13 @@ file_new_cmd_callback (GtkWidget *widget,
|
||||
}
|
||||
|
||||
void
|
||||
file_open_by_extension_cmd_callback (GtkWidget *widget,
|
||||
file_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_open_dialog_set_type (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
file_open_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_open_dialog_set_type ((PlugInProcDef *) data);
|
||||
gimp_file_dialog_set_file_proc (GIMP_FILE_DIALOG (data),
|
||||
g_object_get_data (G_OBJECT (widget),
|
||||
"file-proc"));
|
||||
}
|
||||
|
||||
void
|
||||
@ -200,22 +195,6 @@ file_last_opened_cmd_callback (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
file_save_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_save_dialog_set_type (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
file_save_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action)
|
||||
{
|
||||
file_save_dialog_set_type ((PlugInProcDef *) data);
|
||||
}
|
||||
|
||||
void
|
||||
file_save_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
|
@ -24,12 +24,10 @@ void file_new_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_open_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_open_type_cmd_callback (GtkWidget *widget,
|
||||
void file_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_open_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
@ -37,12 +35,6 @@ void file_last_opened_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
||||
void file_save_by_extension_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_save_type_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
void file_save_cmd_callback (GtkWidget *widget,
|
||||
gpointer data,
|
||||
guint action);
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "plug-in/plug-in-proc.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimpitemfactory.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
|
||||
@ -40,87 +41,6 @@
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
GtkWidget *
|
||||
file_dialog_new (Gimp *gimp,
|
||||
GimpDialogFactory *dialog_factory,
|
||||
const gchar *dialog_identifier,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *help_id)
|
||||
{
|
||||
GtkWidget *filesel;
|
||||
GtkFileSelection *fs;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (dialog_factory), NULL);
|
||||
g_return_val_if_fail (dialog_identifier != NULL, NULL);
|
||||
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
|
||||
g_return_val_if_fail (menu_identifier != NULL, NULL);
|
||||
g_return_val_if_fail (title != NULL, NULL);
|
||||
g_return_val_if_fail (role != NULL, NULL);
|
||||
g_return_val_if_fail (help_id != NULL, NULL);
|
||||
|
||||
filesel = gtk_file_selection_new (title);
|
||||
|
||||
fs = GTK_FILE_SELECTION (filesel);
|
||||
|
||||
g_object_set_data (G_OBJECT (filesel), "gimp", gimp);
|
||||
|
||||
gtk_window_set_role (GTK_WINDOW (filesel), role);
|
||||
|
||||
gimp_help_connect (filesel, gimp_standard_help_func, help_id, NULL);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (filesel), 6);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fs->button_area), 4);
|
||||
|
||||
g_signal_connect (filesel, "delete_event",
|
||||
G_CALLBACK (gtk_true),
|
||||
NULL);
|
||||
|
||||
/* The file type menu */
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *option_menu;
|
||||
GtkWidget *label;
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 4);
|
||||
gtk_box_pack_end (GTK_BOX (fs->main_vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
item_factory = gimp_menu_factory_menu_new (menu_factory,
|
||||
menu_identifier,
|
||||
GTK_TYPE_MENU,
|
||||
gimp,
|
||||
FALSE);
|
||||
|
||||
g_object_set_data (G_OBJECT (filesel), "gimp-item-factory", item_factory);
|
||||
|
||||
option_menu = gtk_option_menu_new ();
|
||||
gtk_box_pack_end (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0);
|
||||
gtk_widget_show (option_menu);
|
||||
|
||||
g_object_weak_ref (G_OBJECT (option_menu),
|
||||
(GWeakNotify) g_object_unref,
|
||||
item_factory);
|
||||
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu),
|
||||
GTK_ITEM_FACTORY (item_factory)->widget);
|
||||
|
||||
label = gtk_label_new_with_mnemonic (_("Determine File _Type:"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), option_menu);
|
||||
}
|
||||
|
||||
gimp_dialog_factory_add_foreign (dialog_factory, dialog_identifier, filesel);
|
||||
|
||||
return filesel;
|
||||
}
|
||||
|
||||
void
|
||||
file_dialog_show (GtkWidget *filesel,
|
||||
GtkWidget *parent)
|
||||
@ -151,33 +71,3 @@ file_dialog_hide (GtkWidget *filesel)
|
||||
gimp_item_factories_set_sensitive ("<Image>", "/File/Save as...", TRUE);
|
||||
gimp_item_factories_set_sensitive ("<Image>", "/File/Save a Copy...", TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
file_dialog_update_name (PlugInProcDef *proc,
|
||||
GtkFileSelection *filesel)
|
||||
{
|
||||
if (proc->extensions_list)
|
||||
{
|
||||
const gchar *text;
|
||||
gchar *last_dot;
|
||||
GString *s;
|
||||
|
||||
text = gtk_entry_get_text (GTK_ENTRY (filesel->selection_entry));
|
||||
last_dot = strrchr (text, '.');
|
||||
|
||||
if (last_dot == text || !text[0])
|
||||
return;
|
||||
|
||||
s = g_string_new (text);
|
||||
|
||||
if (last_dot)
|
||||
g_string_truncate (s, last_dot-text);
|
||||
|
||||
g_string_append (s, ".");
|
||||
g_string_append (s, (gchar *) proc->extensions_list->data);
|
||||
|
||||
gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), s->str);
|
||||
|
||||
g_string_free (s, TRUE);
|
||||
}
|
||||
}
|
||||
|
@ -20,21 +20,9 @@
|
||||
#define __FILE_DIALOG_UTILS_H__
|
||||
|
||||
|
||||
GtkWidget * file_dialog_new (Gimp *gimp,
|
||||
GimpDialogFactory *dialog_factory,
|
||||
const gchar *dialog_identifier,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *help_id);
|
||||
|
||||
void file_dialog_show (GtkWidget *filesel,
|
||||
GtkWidget *parent);
|
||||
void file_dialog_hide (GtkWidget *filesel);
|
||||
|
||||
void file_dialog_update_name (PlugInProcDef *proc,
|
||||
GtkFileSelection *filesel);
|
||||
|
||||
|
||||
#endif /* __FILE_DIALOG_UTILS_H__ */
|
||||
|
@ -38,6 +38,8 @@
|
||||
#include "file/file-open.h"
|
||||
#include "file/file-utils.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
#include "widgets/gimpthumbbox.h"
|
||||
@ -67,19 +69,10 @@ static void file_open_dialog_open_image (GtkWidget *open_dialog,
|
||||
|
||||
static GtkWidget *fileload = NULL;
|
||||
static GtkWidget *thumb_box = NULL;
|
||||
static PlugInProcDef *load_file_proc = NULL;
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
file_open_dialog_set_type (PlugInProcDef *proc)
|
||||
{
|
||||
/* Don't call file_dialog_update_name() here, see bug #112273. */
|
||||
|
||||
load_file_proc = proc;
|
||||
}
|
||||
|
||||
void
|
||||
file_open_dialog_show (Gimp *gimp,
|
||||
GimpImage *gimage,
|
||||
@ -146,13 +139,16 @@ file_open_dialog_create (Gimp *gimp,
|
||||
GtkWidget *open_dialog;
|
||||
GtkFileSelection *fs;
|
||||
|
||||
open_dialog = file_dialog_new (gimp,
|
||||
global_dialog_factory,
|
||||
"gimp-file-open-dialog",
|
||||
open_dialog = gimp_file_dialog_new (gimp,
|
||||
menu_factory, "<Load>",
|
||||
_("Open Image"), "gimp-file-open",
|
||||
GTK_STOCK_OPEN,
|
||||
GIMP_HELP_FILE_OPEN);
|
||||
|
||||
gimp_dialog_factory_add_foreign (global_dialog_factory,
|
||||
"gimp-file-open-dialog",
|
||||
open_dialog);
|
||||
|
||||
g_signal_connect (open_dialog, "response",
|
||||
G_CALLBACK (file_open_response_callback),
|
||||
gimp);
|
||||
@ -202,8 +198,8 @@ static void
|
||||
file_open_selchanged_callback (GtkTreeSelection *sel,
|
||||
GtkWidget *open_dialog)
|
||||
{
|
||||
GtkFileSelection *fs;
|
||||
Gimp *gimp;
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (open_dialog);
|
||||
GtkFileSelection *fs = GTK_FILE_SELECTION (open_dialog);
|
||||
const gchar *fullfname;
|
||||
gboolean selected = FALSE;
|
||||
|
||||
@ -211,17 +207,14 @@ file_open_selchanged_callback (GtkTreeSelection *sel,
|
||||
selchanged_foreach,
|
||||
&selected);
|
||||
|
||||
fs = GTK_FILE_SELECTION (open_dialog);
|
||||
|
||||
gimp = GIMP (g_object_get_data (G_OBJECT (open_dialog), "gimp"));
|
||||
|
||||
if (selected)
|
||||
{
|
||||
gchar *uri;
|
||||
|
||||
fullfname = gtk_file_selection_get_filename (fs);
|
||||
|
||||
uri = file_utils_filename_to_uri (gimp->load_procs, fullfname, NULL);
|
||||
uri = file_utils_filename_to_uri (dialog->gimp->load_procs,
|
||||
fullfname, NULL);
|
||||
gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), uri);
|
||||
g_free (uri);
|
||||
}
|
||||
@ -310,7 +303,7 @@ file_open_response_callback (GtkWidget *open_dialog,
|
||||
gimp,
|
||||
uri,
|
||||
entered_filename,
|
||||
load_file_proc);
|
||||
GIMP_FILE_DIALOG (open_dialog)->file_proc);
|
||||
|
||||
g_free (uri);
|
||||
|
||||
@ -328,7 +321,7 @@ file_open_response_callback (GtkWidget *open_dialog,
|
||||
gimp,
|
||||
uri,
|
||||
uri,
|
||||
load_file_proc);
|
||||
GIMP_FILE_DIALOG (open_dialog)->file_proc);
|
||||
|
||||
g_free (uri);
|
||||
}
|
||||
|
@ -20,8 +20,6 @@
|
||||
#define __FILE_OPEN_DIALOG_H__
|
||||
|
||||
|
||||
void file_open_dialog_set_type (PlugInProcDef *proc);
|
||||
|
||||
void file_open_dialog_show (Gimp *gimp,
|
||||
GimpImage *gimage,
|
||||
const gchar *uri,
|
||||
|
@ -44,7 +44,7 @@
|
||||
GimpItemFactoryEntry file_open_menu_entries[] =
|
||||
{
|
||||
{ { N_("/Automatic"), NULL,
|
||||
file_open_by_extension_cmd_callback, 0 },
|
||||
file_type_cmd_callback, 0 },
|
||||
NULL,
|
||||
GIMP_HELP_FILE_OPEN_BY_EXTENSION, NULL },
|
||||
|
||||
@ -55,21 +55,21 @@ gint n_file_open_menu_entries = G_N_ELEMENTS (file_open_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
file_open_menu_setup (GimpItemFactory *factory)
|
||||
file_open_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = factory->gimp->load_procs; list; list = g_slist_next (list))
|
||||
{
|
||||
PlugInProcDef *file_proc;
|
||||
GimpItemFactoryEntry entry;
|
||||
PlugInProcDef *file_proc = list->data;
|
||||
const gchar *locale_domain = NULL;
|
||||
const gchar *item_type = NULL;
|
||||
const gchar *stock_id = NULL;
|
||||
gchar *help_id;
|
||||
GimpItemFactoryEntry entry;
|
||||
gboolean is_xcf;
|
||||
|
||||
file_proc = (PlugInProcDef *) list->data;
|
||||
GtkWidget *menu_item;
|
||||
|
||||
if (! file_proc->menu_path)
|
||||
continue;
|
||||
@ -97,7 +97,7 @@ file_open_menu_setup (GimpItemFactory *factory)
|
||||
|
||||
entry.entry.path = strstr (file_proc->menu_path, "/");
|
||||
entry.entry.accelerator = NULL;
|
||||
entry.entry.callback = file_open_type_cmd_callback;
|
||||
entry.entry.callback = file_type_cmd_callback;
|
||||
entry.entry.callback_action = 0;
|
||||
entry.entry.item_type = (gchar *) item_type;
|
||||
entry.entry.extra_data = stock_id;
|
||||
@ -108,16 +108,16 @@ file_open_menu_setup (GimpItemFactory *factory)
|
||||
gimp_item_factory_create_item (factory,
|
||||
&entry,
|
||||
locale_domain,
|
||||
file_proc, 2, FALSE);
|
||||
|
||||
if (is_xcf)
|
||||
{
|
||||
GtkWidget *menu_item;
|
||||
callback_data, 2, FALSE);
|
||||
|
||||
menu_item = gtk_item_factory_get_widget (GTK_ITEM_FACTORY (factory),
|
||||
entry.entry.path);
|
||||
|
||||
if (menu_item)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (menu_item), "file-proc", file_proc);
|
||||
|
||||
if (is_xcf)
|
||||
gtk_menu_reorder_child (GTK_MENU (menu_item->parent),
|
||||
menu_item, 1);
|
||||
}
|
||||
|
@ -24,7 +24,8 @@ extern GimpItemFactoryEntry file_open_menu_entries[];
|
||||
extern gint n_file_open_menu_entries;
|
||||
|
||||
|
||||
void file_open_menu_setup (GimpItemFactory *factory);
|
||||
void file_open_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
|
||||
|
||||
#endif /* __FILE_OPEN_MENU_H__ */
|
||||
|
@ -36,6 +36,8 @@
|
||||
#include "file/file-save.h"
|
||||
#include "file/file-utils.h"
|
||||
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
#include "widgets/gimpfiledialog.h"
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpitemfactory.h"
|
||||
#include "widgets/gimpmenufactory.h"
|
||||
@ -71,29 +73,14 @@ static void file_save_dialog_save_image (GtkWidget *save_dialog,
|
||||
|
||||
static GtkWidget *filesave = NULL;
|
||||
|
||||
static PlugInProcDef *save_file_proc = NULL;
|
||||
static GimpImage *the_gimage = NULL;
|
||||
static gboolean set_uri_and_proc = TRUE;
|
||||
static gboolean set_image_clean = TRUE;
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
file_save_dialog_set_type (PlugInProcDef *proc)
|
||||
{
|
||||
if (proc)
|
||||
file_dialog_update_name (proc, GTK_FILE_SELECTION (filesave));
|
||||
|
||||
save_file_proc = proc;
|
||||
}
|
||||
|
||||
void
|
||||
file_save_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent)
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
gchar *filename;
|
||||
|
||||
g_return_if_fail (GIMP_IS_IMAGE (gimage));
|
||||
@ -102,13 +89,13 @@ file_save_dialog_show (GimpImage *gimage,
|
||||
if (! gimp_image_active_drawable (gimage))
|
||||
return;
|
||||
|
||||
the_gimage = gimage;
|
||||
set_uri_and_proc = TRUE;
|
||||
set_image_clean = TRUE;
|
||||
|
||||
if (! filesave)
|
||||
filesave = file_save_dialog_create (gimage->gimp, menu_factory);
|
||||
|
||||
GIMP_FILE_DIALOG (filesave)->gimage = gimage;
|
||||
GIMP_FILE_DIALOG (filesave)->set_uri_and_proc = TRUE;
|
||||
GIMP_FILE_DIALOG (filesave)->set_image_clean = TRUE;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
|
||||
|
||||
if (GTK_WIDGET_VISIBLE (filesave))
|
||||
@ -128,9 +115,7 @@ file_save_dialog_show (GimpImage *gimage,
|
||||
|
||||
g_free (filename);
|
||||
|
||||
item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory");
|
||||
|
||||
gimp_item_factory_update (item_factory,
|
||||
gimp_item_factory_update (GIMP_FILE_DIALOG (filesave)->item_factory,
|
||||
gimp_image_active_drawable (gimage));
|
||||
|
||||
file_dialog_show (filesave, parent);
|
||||
@ -141,7 +126,6 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent)
|
||||
{
|
||||
GimpItemFactory *item_factory;
|
||||
const gchar *uri;
|
||||
gchar *filename = NULL;
|
||||
|
||||
@ -151,10 +135,6 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
if (! gimp_image_active_drawable (gimage))
|
||||
return;
|
||||
|
||||
the_gimage = gimage;
|
||||
set_uri_and_proc = FALSE;
|
||||
set_image_clean = FALSE;
|
||||
|
||||
uri = gimp_object_get_name (GIMP_OBJECT (gimage));
|
||||
|
||||
if (uri)
|
||||
@ -163,6 +143,10 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
if (! filesave)
|
||||
filesave = file_save_dialog_create (gimage->gimp, menu_factory);
|
||||
|
||||
GIMP_FILE_DIALOG (filesave)->gimage = gimage;
|
||||
GIMP_FILE_DIALOG (filesave)->set_uri_and_proc = FALSE;
|
||||
GIMP_FILE_DIALOG (filesave)->set_image_clean = FALSE;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
|
||||
|
||||
if (GTK_WIDGET_VISIBLE (filesave))
|
||||
@ -180,9 +164,7 @@ file_save_a_copy_dialog_show (GimpImage *gimage,
|
||||
|
||||
g_free (filename);
|
||||
|
||||
item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory");
|
||||
|
||||
gimp_item_factory_update (item_factory,
|
||||
gimp_item_factory_update (GIMP_FILE_DIALOG (filesave)->item_factory,
|
||||
gimp_image_active_drawable (gimage));
|
||||
|
||||
file_dialog_show (filesave, parent);
|
||||
@ -197,13 +179,16 @@ file_save_dialog_create (Gimp *gimp,
|
||||
{
|
||||
GtkWidget *save_dialog;
|
||||
|
||||
save_dialog = file_dialog_new (gimp,
|
||||
global_dialog_factory,
|
||||
"gimp-file-save-dialog",
|
||||
save_dialog = gimp_file_dialog_new (gimp,
|
||||
menu_factory, "<Save>",
|
||||
_("Save Image"), "gimp-file-save",
|
||||
GTK_STOCK_SAVE,
|
||||
GIMP_HELP_FILE_SAVE);
|
||||
|
||||
gimp_dialog_factory_add_foreign (global_dialog_factory,
|
||||
"gimp-file-save-dialog",
|
||||
save_dialog);
|
||||
|
||||
g_signal_connect (save_dialog, "response",
|
||||
G_CALLBACK (file_save_response_callback),
|
||||
gimp);
|
||||
@ -258,17 +243,19 @@ file_save_response_callback (GtkWidget *save_dialog,
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE);
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (save_dialog);
|
||||
|
||||
gtk_widget_set_sensitive (save_dialog, FALSE);
|
||||
|
||||
file_save_dialog_save_image (save_dialog,
|
||||
the_gimage,
|
||||
dialog->gimage,
|
||||
uri,
|
||||
raw_filename,
|
||||
save_file_proc,
|
||||
set_uri_and_proc,
|
||||
set_image_clean);
|
||||
dialog->file_proc,
|
||||
dialog->set_uri_and_proc,
|
||||
dialog->set_image_clean);
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE);
|
||||
gtk_widget_set_sensitive (save_dialog, TRUE);
|
||||
}
|
||||
|
||||
g_free (uri);
|
||||
@ -336,13 +323,15 @@ file_save_overwrite_callback (GtkWidget *widget,
|
||||
|
||||
if (overwrite)
|
||||
{
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (overwrite_data->save_dialog);
|
||||
|
||||
file_save_dialog_save_image (overwrite_data->save_dialog,
|
||||
the_gimage,
|
||||
dialog->gimage,
|
||||
overwrite_data->uri,
|
||||
overwrite_data->raw_filename,
|
||||
save_file_proc,
|
||||
set_uri_and_proc,
|
||||
set_image_clean);
|
||||
dialog->file_proc,
|
||||
dialog->set_uri_and_proc,
|
||||
dialog->set_image_clean);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (overwrite_data->save_dialog, TRUE);
|
||||
|
@ -20,8 +20,6 @@
|
||||
#define __FILE_SAVE_DIALOG_H__
|
||||
|
||||
|
||||
void file_save_dialog_set_type (PlugInProcDef *proc);
|
||||
|
||||
void file_save_dialog_show (GimpImage *gimage,
|
||||
GimpMenuFactory *menu_factory,
|
||||
GtkWidget *parent);
|
||||
|
@ -45,7 +45,7 @@
|
||||
GimpItemFactoryEntry file_save_menu_entries[] =
|
||||
{
|
||||
{ { N_("/By Extension"), NULL,
|
||||
file_save_by_extension_cmd_callback, 0 },
|
||||
file_type_cmd_callback, 0 },
|
||||
NULL,
|
||||
GIMP_HELP_FILE_SAVE_BY_EXTENSION, NULL },
|
||||
|
||||
@ -56,21 +56,21 @@ gint n_file_save_menu_entries = G_N_ELEMENTS (file_save_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
file_save_menu_setup (GimpItemFactory *factory)
|
||||
file_save_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = factory->gimp->save_procs; list; list = g_slist_next (list))
|
||||
{
|
||||
PlugInProcDef *file_proc;
|
||||
GimpItemFactoryEntry entry;
|
||||
PlugInProcDef *file_proc = list->data;
|
||||
const gchar *locale_domain = NULL;
|
||||
const gchar *item_type = NULL;
|
||||
const gchar *stock_id = NULL;
|
||||
gchar *help_id;
|
||||
GimpItemFactoryEntry entry;
|
||||
gboolean is_xcf;
|
||||
|
||||
file_proc = (PlugInProcDef *) list->data;
|
||||
GtkWidget *menu_item;
|
||||
|
||||
if (! file_proc->menu_path)
|
||||
continue;
|
||||
@ -98,7 +98,7 @@ file_save_menu_setup (GimpItemFactory *factory)
|
||||
|
||||
entry.entry.path = strstr (file_proc->menu_path, "/");
|
||||
entry.entry.accelerator = NULL;
|
||||
entry.entry.callback = file_save_type_cmd_callback;
|
||||
entry.entry.callback = file_type_cmd_callback;
|
||||
entry.entry.callback_action = 0;
|
||||
entry.entry.item_type = (gchar *) item_type;
|
||||
entry.entry.extra_data = stock_id;
|
||||
@ -109,16 +109,16 @@ file_save_menu_setup (GimpItemFactory *factory)
|
||||
gimp_item_factory_create_item (factory,
|
||||
&entry,
|
||||
locale_domain,
|
||||
file_proc, 2, FALSE);
|
||||
|
||||
if (is_xcf)
|
||||
{
|
||||
GtkWidget *menu_item;
|
||||
callback_data, 2, FALSE);
|
||||
|
||||
menu_item = gtk_item_factory_get_widget (GTK_ITEM_FACTORY (factory),
|
||||
entry.entry.path);
|
||||
|
||||
if (menu_item)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (menu_item), "file-proc", file_proc);
|
||||
|
||||
if (is_xcf)
|
||||
gtk_menu_reorder_child (GTK_MENU (menu_item->parent),
|
||||
menu_item, 1);
|
||||
}
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry file_save_menu_entries[];
|
||||
extern gint n_file_save_menu_entries;
|
||||
|
||||
|
||||
void file_save_menu_setup (GimpItemFactory *factory);
|
||||
void file_save_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void file_save_menu_update (GtkItemFactory *item_factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __FILE_SAVE_MENU_H__ */
|
||||
|
@ -1130,7 +1130,8 @@ gint n_image_menu_entries = G_N_ELEMENTS (image_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
image_menu_setup (GimpItemFactory *factory)
|
||||
image_menu_setup (GimpItemFactory *factory,
|
||||
gpointer setup_data)
|
||||
{
|
||||
if (GTK_IS_MENU_BAR (GTK_ITEM_FACTORY (factory)->widget))
|
||||
{
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry image_menu_entries[];
|
||||
extern gint n_image_menu_entries;
|
||||
|
||||
|
||||
void image_menu_setup (GimpItemFactory *factory);
|
||||
void image_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void image_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __IMAGE_MENU_H__ */
|
||||
|
@ -104,7 +104,8 @@ gint n_tool_options_menu_entries = G_N_ELEMENTS (tool_options_menu_entries);
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
tool_options_menu_setup (GimpItemFactory *factory)
|
||||
tool_options_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
gimp_item_factory_set_sensitive (GTK_ITEM_FACTORY (factory),
|
||||
"/Restore Options from/(None)", FALSE);
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry tool_options_menu_entries[];
|
||||
extern gint n_tool_options_menu_entries;
|
||||
|
||||
|
||||
void tool_options_menu_setup (GimpItemFactory *factory);
|
||||
void tool_options_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void tool_options_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __TOOL_OPTIONS_MENU_H__ */
|
||||
|
@ -285,7 +285,8 @@ gint n_toolbox_menu_entries = G_N_ELEMENTS (toolbox_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
toolbox_menu_setup (GimpItemFactory *factory)
|
||||
toolbox_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
static gchar *reorder_subsubmenus[] = { "/Xtns" };
|
||||
|
||||
|
@ -24,7 +24,8 @@ extern GimpItemFactoryEntry toolbox_menu_entries[];
|
||||
extern gint n_toolbox_menu_entries;
|
||||
|
||||
|
||||
void toolbox_menu_setup (GimpItemFactory *factory);
|
||||
void toolbox_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
|
||||
|
||||
#endif /* __TOOLBOX_MENU_H__ */
|
||||
|
@ -44,7 +44,7 @@
|
||||
GimpItemFactoryEntry file_open_menu_entries[] =
|
||||
{
|
||||
{ { N_("/Automatic"), NULL,
|
||||
file_open_by_extension_cmd_callback, 0 },
|
||||
file_type_cmd_callback, 0 },
|
||||
NULL,
|
||||
GIMP_HELP_FILE_OPEN_BY_EXTENSION, NULL },
|
||||
|
||||
@ -55,21 +55,21 @@ gint n_file_open_menu_entries = G_N_ELEMENTS (file_open_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
file_open_menu_setup (GimpItemFactory *factory)
|
||||
file_open_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = factory->gimp->load_procs; list; list = g_slist_next (list))
|
||||
{
|
||||
PlugInProcDef *file_proc;
|
||||
GimpItemFactoryEntry entry;
|
||||
PlugInProcDef *file_proc = list->data;
|
||||
const gchar *locale_domain = NULL;
|
||||
const gchar *item_type = NULL;
|
||||
const gchar *stock_id = NULL;
|
||||
gchar *help_id;
|
||||
GimpItemFactoryEntry entry;
|
||||
gboolean is_xcf;
|
||||
|
||||
file_proc = (PlugInProcDef *) list->data;
|
||||
GtkWidget *menu_item;
|
||||
|
||||
if (! file_proc->menu_path)
|
||||
continue;
|
||||
@ -97,7 +97,7 @@ file_open_menu_setup (GimpItemFactory *factory)
|
||||
|
||||
entry.entry.path = strstr (file_proc->menu_path, "/");
|
||||
entry.entry.accelerator = NULL;
|
||||
entry.entry.callback = file_open_type_cmd_callback;
|
||||
entry.entry.callback = file_type_cmd_callback;
|
||||
entry.entry.callback_action = 0;
|
||||
entry.entry.item_type = (gchar *) item_type;
|
||||
entry.entry.extra_data = stock_id;
|
||||
@ -108,16 +108,16 @@ file_open_menu_setup (GimpItemFactory *factory)
|
||||
gimp_item_factory_create_item (factory,
|
||||
&entry,
|
||||
locale_domain,
|
||||
file_proc, 2, FALSE);
|
||||
|
||||
if (is_xcf)
|
||||
{
|
||||
GtkWidget *menu_item;
|
||||
callback_data, 2, FALSE);
|
||||
|
||||
menu_item = gtk_item_factory_get_widget (GTK_ITEM_FACTORY (factory),
|
||||
entry.entry.path);
|
||||
|
||||
if (menu_item)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (menu_item), "file-proc", file_proc);
|
||||
|
||||
if (is_xcf)
|
||||
gtk_menu_reorder_child (GTK_MENU (menu_item->parent),
|
||||
menu_item, 1);
|
||||
}
|
||||
|
@ -24,7 +24,8 @@ extern GimpItemFactoryEntry file_open_menu_entries[];
|
||||
extern gint n_file_open_menu_entries;
|
||||
|
||||
|
||||
void file_open_menu_setup (GimpItemFactory *factory);
|
||||
void file_open_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
|
||||
|
||||
#endif /* __FILE_OPEN_MENU_H__ */
|
||||
|
@ -45,7 +45,7 @@
|
||||
GimpItemFactoryEntry file_save_menu_entries[] =
|
||||
{
|
||||
{ { N_("/By Extension"), NULL,
|
||||
file_save_by_extension_cmd_callback, 0 },
|
||||
file_type_cmd_callback, 0 },
|
||||
NULL,
|
||||
GIMP_HELP_FILE_SAVE_BY_EXTENSION, NULL },
|
||||
|
||||
@ -56,21 +56,21 @@ gint n_file_save_menu_entries = G_N_ELEMENTS (file_save_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
file_save_menu_setup (GimpItemFactory *factory)
|
||||
file_save_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = factory->gimp->save_procs; list; list = g_slist_next (list))
|
||||
{
|
||||
PlugInProcDef *file_proc;
|
||||
GimpItemFactoryEntry entry;
|
||||
PlugInProcDef *file_proc = list->data;
|
||||
const gchar *locale_domain = NULL;
|
||||
const gchar *item_type = NULL;
|
||||
const gchar *stock_id = NULL;
|
||||
gchar *help_id;
|
||||
GimpItemFactoryEntry entry;
|
||||
gboolean is_xcf;
|
||||
|
||||
file_proc = (PlugInProcDef *) list->data;
|
||||
GtkWidget *menu_item;
|
||||
|
||||
if (! file_proc->menu_path)
|
||||
continue;
|
||||
@ -98,7 +98,7 @@ file_save_menu_setup (GimpItemFactory *factory)
|
||||
|
||||
entry.entry.path = strstr (file_proc->menu_path, "/");
|
||||
entry.entry.accelerator = NULL;
|
||||
entry.entry.callback = file_save_type_cmd_callback;
|
||||
entry.entry.callback = file_type_cmd_callback;
|
||||
entry.entry.callback_action = 0;
|
||||
entry.entry.item_type = (gchar *) item_type;
|
||||
entry.entry.extra_data = stock_id;
|
||||
@ -109,16 +109,16 @@ file_save_menu_setup (GimpItemFactory *factory)
|
||||
gimp_item_factory_create_item (factory,
|
||||
&entry,
|
||||
locale_domain,
|
||||
file_proc, 2, FALSE);
|
||||
|
||||
if (is_xcf)
|
||||
{
|
||||
GtkWidget *menu_item;
|
||||
callback_data, 2, FALSE);
|
||||
|
||||
menu_item = gtk_item_factory_get_widget (GTK_ITEM_FACTORY (factory),
|
||||
entry.entry.path);
|
||||
|
||||
if (menu_item)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (menu_item), "file-proc", file_proc);
|
||||
|
||||
if (is_xcf)
|
||||
gtk_menu_reorder_child (GTK_MENU (menu_item->parent),
|
||||
menu_item, 1);
|
||||
}
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry file_save_menu_entries[];
|
||||
extern gint n_file_save_menu_entries;
|
||||
|
||||
|
||||
void file_save_menu_setup (GimpItemFactory *factory);
|
||||
void file_save_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void file_save_menu_update (GtkItemFactory *item_factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __FILE_SAVE_MENU_H__ */
|
||||
|
@ -1130,7 +1130,8 @@ gint n_image_menu_entries = G_N_ELEMENTS (image_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
image_menu_setup (GimpItemFactory *factory)
|
||||
image_menu_setup (GimpItemFactory *factory,
|
||||
gpointer setup_data)
|
||||
{
|
||||
if (GTK_IS_MENU_BAR (GTK_ITEM_FACTORY (factory)->widget))
|
||||
{
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry image_menu_entries[];
|
||||
extern gint n_image_menu_entries;
|
||||
|
||||
|
||||
void image_menu_setup (GimpItemFactory *factory);
|
||||
void image_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void image_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __IMAGE_MENU_H__ */
|
||||
|
@ -104,7 +104,8 @@ gint n_tool_options_menu_entries = G_N_ELEMENTS (tool_options_menu_entries);
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
tool_options_menu_setup (GimpItemFactory *factory)
|
||||
tool_options_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
gimp_item_factory_set_sensitive (GTK_ITEM_FACTORY (factory),
|
||||
"/Restore Options from/(None)", FALSE);
|
||||
|
@ -24,9 +24,10 @@ extern GimpItemFactoryEntry tool_options_menu_entries[];
|
||||
extern gint n_tool_options_menu_entries;
|
||||
|
||||
|
||||
void tool_options_menu_setup (GimpItemFactory *factory);
|
||||
void tool_options_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
void tool_options_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
|
||||
#endif /* __TOOL_OPTIONS_MENU_H__ */
|
||||
|
@ -285,7 +285,8 @@ gint n_toolbox_menu_entries = G_N_ELEMENTS (toolbox_menu_entries);
|
||||
|
||||
|
||||
void
|
||||
toolbox_menu_setup (GimpItemFactory *factory)
|
||||
toolbox_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data)
|
||||
{
|
||||
static gchar *reorder_subsubmenus[] = { "/Xtns" };
|
||||
|
||||
|
@ -24,7 +24,8 @@ extern GimpItemFactoryEntry toolbox_menu_entries[];
|
||||
extern gint n_toolbox_menu_entries;
|
||||
|
||||
|
||||
void toolbox_menu_setup (GimpItemFactory *factory);
|
||||
void toolbox_menu_setup (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
|
||||
|
||||
#endif /* __TOOLBOX_MENU_H__ */
|
||||
|
@ -99,6 +99,8 @@ libappwidgets_a_sources = \
|
||||
gimpenummenu.h \
|
||||
gimperrorconsole.c \
|
||||
gimperrorconsole.h \
|
||||
gimpfiledialog.c \
|
||||
gimpfiledialog.h \
|
||||
gimpfontview.c \
|
||||
gimpfontview.h \
|
||||
gimpgradienteditor.c \
|
||||
|
224
app/widgets/gimpfiledialog.c
Normal file
224
app/widgets/gimpfiledialog.c
Normal file
@ -0,0 +1,224 @@
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* gimpfiledialog.c
|
||||
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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 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 "config.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "libgimpwidgets/gimpwidgets.h"
|
||||
|
||||
#include "widgets-types.h"
|
||||
|
||||
#include "core/gimp.h"
|
||||
#include "core/gimpimage.h"
|
||||
|
||||
#include "plug-in/plug-in-proc.h"
|
||||
|
||||
#include "gimpfiledialog.h"
|
||||
#include "gimpmenufactory.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
static void gimp_file_dialog_class_init (GimpFileDialogClass *klass);
|
||||
static void gimp_file_dialog_init (GimpFileDialog *dialog);
|
||||
|
||||
static void gimp_file_dialog_destroy (GtkObject *object);
|
||||
|
||||
static gboolean gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event);
|
||||
|
||||
|
||||
static GtkFileSelectionClass *parent_class = NULL;
|
||||
|
||||
|
||||
GType
|
||||
gimp_file_dialog_get_type (void)
|
||||
{
|
||||
static GType dialog_type = 0;
|
||||
|
||||
if (! dialog_type)
|
||||
{
|
||||
static const GTypeInfo dialog_info =
|
||||
{
|
||||
sizeof (GimpFileDialogClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) gimp_file_dialog_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GimpFileDialog),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) gimp_file_dialog_init,
|
||||
};
|
||||
|
||||
dialog_type = g_type_register_static (GTK_TYPE_FILE_SELECTION,
|
||||
"GimpFileDialog",
|
||||
&dialog_info, 0);
|
||||
}
|
||||
|
||||
return dialog_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_file_dialog_class_init (GimpFileDialogClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
object_class->destroy = gimp_file_dialog_destroy;
|
||||
|
||||
widget_class->delete_event = gimp_file_dialog_delete_event;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_file_dialog_init (GimpFileDialog *dialog)
|
||||
{
|
||||
GtkFileSelection *fs = GTK_FILE_SELECTION (dialog);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fs), 6);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fs->button_area), 4);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_file_dialog_destroy (GtkObject *object)
|
||||
{
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (object);
|
||||
|
||||
if (dialog->item_factory)
|
||||
{
|
||||
g_object_unref (dialog->item_factory);
|
||||
dialog->item_factory = NULL;
|
||||
}
|
||||
|
||||
GTK_OBJECT_CLASS (parent_class)->destroy (object);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
GtkWidget *
|
||||
gimp_file_dialog_new (Gimp *gimp,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *stock_id,
|
||||
const gchar *help_id)
|
||||
{
|
||||
GimpFileDialog *dialog;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *option_menu;
|
||||
GtkWidget *label;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
|
||||
g_return_val_if_fail (menu_identifier != NULL, NULL);
|
||||
g_return_val_if_fail (title != NULL, NULL);
|
||||
g_return_val_if_fail (role != NULL, NULL);
|
||||
g_return_val_if_fail (stock_id != NULL, NULL);
|
||||
g_return_val_if_fail (help_id != NULL, NULL);
|
||||
|
||||
dialog = g_object_new (GIMP_TYPE_FILE_DIALOG,
|
||||
"title", title,
|
||||
NULL);
|
||||
|
||||
gtk_window_set_role (GTK_WINDOW (dialog), role);
|
||||
|
||||
gimp_help_connect (GTK_WIDGET (dialog), gimp_standard_help_func,
|
||||
help_id, NULL);
|
||||
|
||||
dialog->gimp = gimp;
|
||||
dialog->item_factory = gimp_menu_factory_menu_new (menu_factory,
|
||||
menu_identifier,
|
||||
GTK_TYPE_MENU,
|
||||
dialog,
|
||||
FALSE);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 4);
|
||||
gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (dialog)->main_vbox), hbox,
|
||||
FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
option_menu = gtk_option_menu_new ();
|
||||
gtk_box_pack_end (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0);
|
||||
gtk_widget_show (option_menu);
|
||||
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu),
|
||||
GTK_ITEM_FACTORY (dialog->item_factory)->widget);
|
||||
|
||||
label = gtk_label_new_with_mnemonic (_("Determine File _Type:"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), option_menu);
|
||||
|
||||
return GTK_WIDGET (dialog);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_file_dialog_set_file_proc (GimpFileDialog *dialog,
|
||||
PlugInProcDef *file_proc)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
|
||||
|
||||
if (file_proc == dialog->file_proc)
|
||||
return;
|
||||
|
||||
dialog->file_proc = file_proc;
|
||||
|
||||
if (file_proc && file_proc->extensions_list && dialog->gimage)
|
||||
{
|
||||
GtkFileSelection *fs = GTK_FILE_SELECTION (dialog);
|
||||
const gchar *text;
|
||||
gchar *last_dot;
|
||||
GString *s;
|
||||
|
||||
text = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry));
|
||||
last_dot = strrchr (text, '.');
|
||||
|
||||
if (last_dot == text || !text[0])
|
||||
return;
|
||||
|
||||
s = g_string_new (text);
|
||||
|
||||
if (last_dot)
|
||||
g_string_truncate (s, last_dot-text);
|
||||
|
||||
g_string_append (s, ".");
|
||||
g_string_append (s, (gchar *) file_proc->extensions_list->data);
|
||||
|
||||
gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), s->str);
|
||||
|
||||
g_string_free (s, TRUE);
|
||||
}
|
||||
}
|
75
app/widgets/gimpfiledialog.h
Normal file
75
app/widgets/gimpfiledialog.h
Normal file
@ -0,0 +1,75 @@
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* gimpfiledialog.h
|
||||
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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 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.
|
||||
*/
|
||||
|
||||
#ifndef __GIMP_FILE_DIALOG_H__
|
||||
#define __GIMP_FILE_DIALOG_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define GIMP_TYPE_FILE_DIALOG (gimp_file_dialog_get_type ())
|
||||
#define GIMP_FILE_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_FILE_DIALOG, GimpFileDialog))
|
||||
#define GIMP_FILE_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_FILE_DIALOG, GimpFileDialogClass))
|
||||
#define GIMP_IS_FILE_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_FILE_DIALOG))
|
||||
#define GIMP_IS_FILE_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_FILE_DIALOG))
|
||||
#define GIMP_FILE_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_FILE_DIALOG, GimpFileDialogClass))
|
||||
|
||||
|
||||
typedef struct _GimpFileDialogClass GimpFileDialogClass;
|
||||
|
||||
struct _GimpFileDialog
|
||||
{
|
||||
GtkFileSelection parent_instance;
|
||||
|
||||
Gimp *gimp;
|
||||
GimpItemFactory *item_factory;
|
||||
PlugInProcDef *file_proc;
|
||||
|
||||
GimpImage *gimage;
|
||||
gboolean set_uri_and_proc;
|
||||
gboolean set_image_clean;
|
||||
|
||||
GtkWidget *thumb_box;
|
||||
};
|
||||
|
||||
struct _GimpFileDialogClass
|
||||
{
|
||||
GtkFileSelectionClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType gimp_file_dialog_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GtkWidget * gimp_file_dialog_new (Gimp *gimp,
|
||||
GimpMenuFactory *menu_factory,
|
||||
const gchar *menu_identifier,
|
||||
const gchar *title,
|
||||
const gchar *role,
|
||||
const gchar *stock_id,
|
||||
const gchar *help_id);
|
||||
|
||||
void gimp_file_dialog_set_file_proc (GimpFileDialog *dialog,
|
||||
PlugInProcDef *file_proc);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GIMP_FILE_DIALOG_H__ */
|
@ -198,7 +198,7 @@ gimp_menu_factory_menu_new (GimpMenuFactory *factory,
|
||||
create_tearoff);
|
||||
|
||||
if (entry->setup_func)
|
||||
entry->setup_func (item_factory);
|
||||
entry->setup_func (item_factory, callback_data);
|
||||
|
||||
return item_factory;
|
||||
}
|
||||
|
@ -106,6 +106,7 @@ typedef struct _GimpDockedInterface GimpDockedInterface;
|
||||
typedef struct _GimpContainerPopup GimpContainerPopup;
|
||||
typedef struct _GimpViewableButton GimpViewableButton;
|
||||
typedef struct _GimpViewableDialog GimpViewableDialog;
|
||||
typedef struct _GimpFileDialog GimpFileDialog;
|
||||
|
||||
typedef struct _GimpHistogramView GimpHistogramView;
|
||||
typedef struct _GimpHistogramBox GimpHistogramBox;
|
||||
@ -130,9 +131,10 @@ typedef struct _GimpSessionInfoAux GimpSessionInfoAux;
|
||||
|
||||
/* function types */
|
||||
|
||||
typedef void (* GimpItemFactorySetupFunc) (GimpItemFactory *factory);
|
||||
typedef void (* GimpItemFactorySetupFunc) (GimpItemFactory *factory,
|
||||
gpointer callback_data);
|
||||
typedef void (* GimpItemFactoryUpdateFunc) (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
gpointer update_data);
|
||||
|
||||
typedef void (* GimpMenuPositionFunc) (GtkMenu *menu,
|
||||
gint *x,
|
||||
|
Reference in New Issue
Block a user