[gimp] libgimpwidgets: support saving profile in GimpColorProfileChooserDialog
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimpwidgets: support saving profile in GimpColorProfileChooserDialog
- Date: Fri, 6 May 2016 23:38:10 +0000 (UTC)
commit 6c64cb0f166deb05e196ff36d965eed9b75b68e4
Author: Michael Natterer <mitch gimp org>
Date: Sat May 7 01:36:23 2016 +0200
libgimpwidgets: support saving profile in GimpColorProfileChooserDialog
Add the right action buttons, enable overwrite confirmation, and add
user-writable folders to the shortcuts pane. Also use the right API on
OS X instead of hardcoding /Library and ~/Library.
libgimpwidgets/Makefile.am | 14 ++-
libgimpwidgets/gimpcolorprofilechooserdialog.c | 109 ++++++++++++++++++++----
2 files changed, 102 insertions(+), 21 deletions(-)
---
diff --git a/libgimpwidgets/Makefile.am b/libgimpwidgets/Makefile.am
index f15900f..4411382 100644
--- a/libgimpwidgets/Makefile.am
+++ b/libgimpwidgets/Makefile.am
@@ -6,14 +6,16 @@ libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).
if PLATFORM_WIN32
no_undefined = -no-undefined
-endif
-
-if PLATFORM_WIN32
libgdi32 = -lgdi32
else
libm = -lm
endif
+if PLATFORM_OSX
+xobjective_c = "-xobjective-c"
+framework_cocoa = -framework Cocoa
+endif
+
if OS_WIN32
gimpwidgets_def = gimpwidgets.def
libgimpwidgets_export_symbols = -export-symbols $(srcdir)/gimpwidgets.def
@@ -56,7 +58,8 @@ AM_CPPFLAGS = \
$(GEGL_CFLAGS) \
$(GTK_CFLAGS) \
$(LCMS_CFLAGS) \
- -I$(includedir)
+ -I$(includedir) \
+ $(xobjective_c)
lib_LTLIBRARIES = libgimpwidgets- GIMP_API_VERSION@.la
@@ -264,7 +267,8 @@ libgimpwidgetsinclude_HEADERS = \
libgimpwidgets_ GIMP_API_VERSION@_la_LDFLAGS = \
-version-info $(LT_VERSION_INFO) \
$(no_undefined) \
- $(libgimpwidgets_export_symbols)
+ $(libgimpwidgets_export_symbols) \
+ $(framework_cocoa)
EXTRA_libgimpwidgets_ GIMP_API_VERSION@_la_DEPENDENCIES = $(gimpwidgets_def)
diff --git a/libgimpwidgets/gimpcolorprofilechooserdialog.c b/libgimpwidgets/gimpcolorprofilechooserdialog.c
index 09c5511..c1b4546 100644
--- a/libgimpwidgets/gimpcolorprofilechooserdialog.c
+++ b/libgimpwidgets/gimpcolorprofilechooserdialog.c
@@ -23,6 +23,10 @@
#include <string.h>
+#ifdef PLATFORM_OSX
+#include <AppKit/AppKit.h>
+#endif
+
#include <gegl.h>
#include <gtk/gtk.h>
@@ -86,20 +90,6 @@ gimp_color_profile_chooser_dialog_constructed (GObject *object)
gtk_window_set_role (GTK_WINDOW (dialog), "gimp-profile-chooser-dialog");
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
- GTK_RESPONSE_ACCEPT,
- GTK_RESPONSE_CANCEL,
- -1);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
-
- gimp_color_profile_chooser_dialog_add_shortcut (dialog);
-
filter = gtk_file_filter_new ();
gtk_file_filter_set_name (filter, _("All files (*.*)"));
gtk_file_filter_add_pattern (filter, "*");
@@ -155,6 +145,34 @@ gimp_color_profile_chooser_dialog_new (const gchar *title,
if (parent)
gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+ if (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) ==
+ GTK_FILE_CHOOSER_ACTION_SAVE)
+ {
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog),
+ TRUE);
+ }
+ else
+ {
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ }
+
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+ GTK_RESPONSE_ACCEPT,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+
+ gimp_color_profile_chooser_dialog_add_shortcut (GIMP_COLOR_PROFILE_CHOOSER_DIALOG (dialog));
+
return dialog;
}
@@ -171,6 +189,9 @@ add_shortcut (GimpColorProfileChooserDialog *dialog,
static void
gimp_color_profile_chooser_dialog_add_shortcut (GimpColorProfileChooserDialog *dialog)
{
+ gboolean save = (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) ==
+ GTK_FILE_CHOOSER_ACTION_SAVE);
+
#ifdef G_OS_WIN32
{
const gchar *prefix = g_getenv ("SystemRoot");
@@ -187,11 +208,67 @@ gimp_color_profile_chooser_dialog_add_shortcut (GimpColorProfileChooserDialog *d
}
#elif defined(PLATFORM_OSX)
{
- add_shortcut (dialog, "/Library/ColorSync/Profiles");
+ NSAutoreleasePool *pool;
+ NSArray *path;
+ NSString *library_dir;
+ gchar *folder;
+ gboolean folder_set = FALSE;
+
+ pool = [[NSAutoreleasePool alloc] init];
+
+ if (save)
+ {
+ path = NSSearchPathForDirectoriesInDomains (NSLibraryDirectory,
+ NSUserDomainMask, YES);
+ library_dir = [path objectAtIndex:0];
+
+ folder = g_build_filename ([library_dir UTF8String],
+ "ColorSync", "Profiles", NULL);
+
+ foldet_set = add_shortcut (dialog, folder);
+ g_free (folder);
+ }
+
+ if (! folder_set)
+ {
+ path = NSSearchPathForDirectoriesInDomains (NSLibraryDirectory,
+ NSSystemDomainMask, YES);
+ library_dir = [path objectAtIndex:0];
+
+ folder = g_build_filename ([library_dir UTF8String],
+ "ColorSync", "Profiles", NULL);
+
+ add_shortcut (dialog, folder);
+ g_free (folder);
+ }
+
+ [pool drain];
}
#else
{
- add_shortcut (dialog, "/usr/share/color/icc");
+ gboolean folder_set = FALSE;
+
+ if (save)
+ {
+ gchar *folder = g_build_filename (g_get_user_data_dir (),
+ "color", "icc", NULL);
+
+ folder_set = add_shortcut (dialog, folder);
+
+ if (! folder_set)
+ {
+ g_free (folder);
+ folder = g_build_filename (g_get_home_dir (),
+ ".color", "icc", NULL);
+
+ folder_set = add_shortcut (dialog, folder);
+ }
+
+ g_free (folder);
+ }
+
+ if (! folder_set)
+ add_shortcut (dialog, "/usr/share/color/icc");
}
#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]