Merged from trunk revisions r25900:r25969.

2008-06-21  Aurimas Juška   <aurisj@svn.gnome.org>

	Merged from trunk revisions r25900:r25969.

svn path=/branches/soc-2008-tagging/; revision=25971
This commit is contained in:
Aurimas Juška 2008-06-21 05:12:58 +00:00 committed by Aurimas Juška
parent ab0a63f8d4
commit 8fbe04e6a9
88 changed files with 2794 additions and 2350 deletions

313
ChangeLog
View File

@ -18,6 +18,53 @@
unique name for internal objects.
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
Make angle constraints with the Free Select Tool by using Ctrl
work also when moving vertices, not only when creating new ones.
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_active_modifier_key): Implement.
(gimp_free_select_tool_update_motion): Put motion logic here so we
can apply it from both _motion and _active_modifier_key.
(gimp_free_select_tool_modifier_key): Ignore key presses from
another display.
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Don't alloc/free
saved_points_(lower|higher)_segment on each move, instead realloc
on demand and free on tool destruction, just as we do e.g. for
points.
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Remove
n_saved_points_(lower|higher)_segment, we don't need them.
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c (gimp_free_select_tool_finalize):
Plug leak.
2008-06-20 Michael Natterer <mitch@gimp.org>
Latest GTK+ trunk deprecations showed some uglyness in gimp:
* app/tools/gimpeditselectiontool.h: we were still using GTK_CHECK
macros here, use proper G_TYPE type checking instead.
* app/widgets/gimpuimanager.c
* app/widgets/gimpdockable.c: s/GtkDestroyNotify/GDestroyNotify/.
* plug-ins/help-browser/gimpthrobber.c: s/GtkType/GType/.
* plug-ins/common/filter-pack.c
* plug-ins/common/sample-colorize.c
* plug-ins/imagemap/imap_main.c: s/GtkSignalFunc/GCallback/.
2008-06-17 Aurimas Juška <aurisj@svn.gnome.org>
* app/core/Makefile.am
@ -28,6 +75,268 @@
* app/core/gimptagcache.h: added GimpTagCache which currently doesn't
have any real functionality.
2008-06-15 Michael Natterer <mitch@gimp.org>
* configure.in: in the check for xfixes, add "true" as
action-if-not-found so it doesn't bail out when xfixes is not
found.
There seems to be something fishy with the PKG_CHECK_MODULES()
macro since adding a simple comma should also count as empty 4th
argument.
2008-06-15 Sven Neumann <sven@gimp.org>
* configure.in: bumped version to 2.5.2.
2008-06-15 Sven Neumann <sven@gimp.org>
* Made 2.5.1 development release.
2008-06-14 Sven Neumann <sven@gimp.org>
* INSTALL
* configure.in (gegl_required_version)
* app/sanity.c (GEGL_REQUIRED_MICRO): depend on the newest
released GEGL, version 0.0.18.
2008-06-13 Sven Neumann <sven@gimp.org>
* app/dialogs/preferences-dialog.c: added a preliminary user
interface to control the 'user-manual-online' property.
2008-06-13 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimprectangletool.c (gimp_rectangle_tool_motion):
Correct the improved display of the rectangle ratio.
2008-06-13 Sven Neumann <sven@gimp.org>
* app/tools/gimptextoptions.c (gimp_text_options_class_init):
we need to define the 'highlight' property here as well.
2008-06-13 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpsettingsbox.[ch]: new widget containing the
combo and menu button for the image map tool settings plus most of
their logic. Has "import" and "export" signals that might go away
if I figure a way to nicely abstract that. Contains some minor
bugfixes and cosmetic improvements compared to the old code.
* app/tools/gimpimagemaptool.[ch]
* app/tools/gimpimagemaptool-settings.[ch]: changed accordingly,
mostly removal of lots of code that is now in the widget.
2008-06-13 Sven Neumann <sven@gimp.org>
* configure.in (babl_required_version)
* app/sanity.c (BABL_REQUIRED_MICRO): depend on the newest
released babl, version 0.0.22.
2008-06-13 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/dialog.c: added a toggle action to
show/hide the index sidebar, bound to Ctrl-I.
2008-06-12 Sven Neumann <sven@gimp.org>
Added basic support for using the online user manual:
* app/widgets/gimphelp.c
* plug-ins/help/gimphelp.c: moved some help logic to the core. The
default help domain is now constructed in the core and passed to
the help plug-ins just like the plug-in help domains.
* app/config/Makefile.am
* app/config/gimprc-blurbs.h
* app/config/gimpguiconfig.[ch]: added gimprc properties to
specify the location of the online user manual and to decide if it
should be used instead of a locally installed copy.
2008-06-12 Sven Neumann <sven@gimp.org>
* app/tools/gimprectangletool.c (gimp_rectangle_tool_motion):
try to make the display of the aspect ratio somewhat more obvious.
2008-06-12 Michael Natterer <mitch@gimp.org>
* app/plug-in/plug-in-menu-path.c (menu_path_mappings): also map
<Toolbox>/File/Acquire to <Image>/File/New/Acquire.
2008-06-12 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/Makefile.am
* plug-ins/help-browser/wilber-reading.svg
* plug-ins/help-browser/wilber-reading.png: removed here...
* themes/Default/images/Makefile.am
* themes/Default/images/stock-user-manual.svg
* themes/Default/images/stock-user-manual-16.png
* themes/Default/images/stock-user-manual-24.png
* themes/Default/images/stock-user-manual-32.png
* themes/Default/images/stock-user-manual-64.png
* libgimpwidgets/gimpstock.[ch]: ... and added as stock icon.
* plug-ins/help-browser/dialog.c
* plug-ins/help-browser/gimpthrobber.c: changed accordingly.
Set the toolbar style to GTK_TOOLBAR_ICONS.
2008-06-12 Michael Natterer <mitch@gimp.org>
* modules/controller_midi.c: applied patch from S. Fielding which
passes the right MIDI channel from the ALSA event to midi_event().
Fixes bug #537960.
2008-06-12 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/dialog.c: use GTK_STOCK_HOME for the
button that navigates to the index page.
* plug-ins/help-browser/gimpthrobber.c
(gimp_throbber_construct_contents): deal better with toolbar style
GTK_TOOLBAR_ICONS.
2008-06-12 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/dialog.c: removed the title
combo-box. Instead display the title in the window title. Added
"copy-location" action to the right-click menu as a replacement
for the drag source that was also removed.
2008-06-11 Sven Neumann <sven@gimp.org>
* plug-ins/help/help.c (load_help_idle): don't show progress for
local help lookups, they are fast enough.
* plug-ins/help-browser/help-browser.c: added the same progress
code here. Might want to move it to the dialog window later.
2008-06-11 Sven Neumann <sven@gimp.org>
* configure.in: reverted last change (use of IT_PO_SUBDIR).
2008-06-11 Sven Neumann <sven@gimp.org>
* desktop/gimp.desktop.in.in: removed deprecated field "Encoding".
2008-06-11 Sven Neumann <sven@gimp.org>
* app/config/Makefile.am: make test-config link properly.
2008-06-11 Sven Neumann <sven@gimp.org>
* configure.in: use IT_PO_SUBDIR() to define the extra po
directories. Removed extra AC_CONFIG_COMMANDS that became
obsolete by this change.
2008-06-11 Sven Neumann <sven@gimp.org>
* autogen.sh: bumped INTLTOOL_REQUIRED_VERSION to 0.35.5. We
actually need 0.40.0 on the system where the tarball is rolled,
however 0.35.5 should be good enough for almost everyone.
* configure.in: use IT_PROG_INTLTOOL with minimum version instead
of the deprecated AC_PROG_INTLTOOL.
* Makefile.am (EXTRA_DIST): removed intltool-foo.in files as
intltool 0.40.0 does not install these any longer. Removed them
from DISTCLEANFILES as well.
2008-06-11 Sven Neumann <sven@gimp.org>
* configure.in: removed redundant calls to AC_MSG_RESULT() from
inside PKG_CHECK_MODULES().
2008-06-11 Sven Neumann <sven@gimp.org>
* cursors/Makefile.am (EXTRA_DIST): added missing modifier-select
XBM files.
2008-06-11 Sven Neumann <sven@gimp.org>
* app/gegl/gimpoperationcolorbalance.c
* app/gegl/gimpoperationcolorize.c
* app/gegl/gimpoperationcurves.c
* app/gegl/gimpoperationdesaturate.c
* app/gegl/gimpoperationhuesaturation.c
* app/gegl/gimpoperationlevels.c
* app/gegl/gimpoperationposterize.c
* app/gegl/gimpoperationthreshold.c
* app/gegl/gimpoperationtilesink.c
* app/gegl/gimpoperationtilesource.c: added const to GeglRectangle*
argument.
2008-06-11 Sven Neumann <sven@gimp.org>
* configure.in: fixed check for webkit zoom API.
2008-06-10 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/queue.[ch]: removed, we don't need this
code any longer.
2008-06-10 Sven Neumann <sven@gimp.org>
* configure.in: removed check for gtkhtml2 and added a check for
wekbit instead.
* INSTALL: document the changed dependency.
* plug-ins/help-browser/Makefile.am
* plug-ins/help-browser/dialog.[ch]: ported the help-browser to
webkit. Offers the same functionality as before and some more.
* plug-ins/help-browser/help-browser.c: some cleanup.
2008-06-10 Sven Neumann <sven@gimp.org>
* plug-ins/help/gimphelplocale.c: added some sanity checks.
2008-06-10 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpthumbbox.c (gimp_thumb_box_new): don't set a
width request on the info label. It broke horizontal label
positioning and didn't serve any purpose I can remember.
2008-06-10 Sven Neumann <sven@gimp.org>
* plug-ins/help/help.c (load_help_idle): show progress while
loading the help index.
2008-06-10 Sven Neumann <sven@gimp.org>
* app/config/gimpguiconfig.c (DEFAULT_WEB_BROWSER): reverted
change for bug #522483. 'xdg-open' doesn't do the right thing for
file: URIs.
2008-06-10 Sven Neumann <sven@gimp.org>
* app/core/gimp-gui.[ch]
* app/widgets/gimphelp.[ch]
* app/gui/gui-vtable.c
* app/gui/gui.c: added a GimpProgress parameter to gimp_help().
* app/actions/help-commands.c
* app/widgets/gimpuimanager.c
* tools/pdbgen/pdb/help.pdb: changed accordingly.
* app/pdb/help-cmds.c: regenerated.
2008-06-10 Sven Neumann <sven@gimp.org>
* app/plug-in/gimpplugin.c
* app/plug-in/gimppluginmanager-call.c
* app/widgets/gimphelp.c: formatting.
2008-06-09 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintoptions.c: set DEFAULT_VELOCITY_SIZE to FALSE
so the paint tools behave as before and the brush outline is
meaningful at least in the default setup.
>>>>>>> .merge-right.r25970
2008-06-05 Sven Neumann <sven@gimp.org>
* app/actions/dialogs-actions.c (dialogs_dockable_actions): added
@ -50,7 +359,7 @@
* app/gegl/gimpoperationdesaturate.h
* app/tools/gimprectangletool.c
* app/widgets/gimpradioaction.h
* app/widgets/gimptoggleaction.h: various fixes tpo make gtk-doc
* app/widgets/gimptoggleaction.h: various fixes to make gtk-doc
happy.
2008-06-04 Sven Neumann <sven@gimp.org>
@ -162,7 +471,7 @@
2008-05-30 Martin Nordholts <martinn@svn.gnome.org>
Made moving the selection mask in the varoius ways automatically
Made moving the selection mask in the various ways automatically
commit any pending rectangle/ellipse selection. Fixes bug #349340.
* app/tools/gimprectangleselecttool.c

10
INSTALL
View File

@ -28,8 +28,8 @@ header files installed.
1. You need to have installed a recent version of pkg-config available
from http://www.freedesktop.org/software/pkgconfig/.
2. You need to have GEGL version 0.0.17 or newer and babl version
0.0.21 or newer. You can get it from http://gegl.org/ or check
2. You need to have GEGL version 0.0.18 or newer and babl version
0.0.22 or newer. You can get it from http://gegl.org/ or check
it out from the subversion repository:
http://svn.gnome.org/svn/babl/trunk
@ -56,7 +56,7 @@ header files installed.
7. You may want to install other third party libraries or programs
that are needed for some of the available plugins. We recommend
to check that the following libraries are installed: libpng,
libjpeg, libpoppler, libtiff, gtkhtml-2, libmng, librsvg, libwmf.
libjpeg, libpoppler, libtiff, webkit, libmng, librsvg, libwmf.
8. The Python extension requires Python development headers to be
present. You will also need PyGTK and the respective development
@ -150,8 +150,8 @@ These are:
use --without-mng to disable it expliticely. The same switch exists
for aalib, use --without-aa if you run into problems.
--without-gtkhtml2. If for some reason you don't want to build the
helpbrowser plug-in, you can use --without-gtkhtml2 to disable
--without-webkit. If for some reason you don't want to build the
helpbrowser plug-in, you can use --without-webkit to disable
it explicitly.
--without-svg. If for some reason you want to build GIMP without

View File

@ -70,20 +70,12 @@ EXTRA_DIST = \
config.h.win32 \
gimp-zip.in \
gimpdefs.msc \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
makefile.msc \
mkinstalldirs
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
DISTCLEANFILES = \
intltool-extract \
intltool-merge \
intltool-update
gimpinstall-@GIMP_TOOL_VERSION@:
$(LN_S) $(srcdir)/install-sh $(srcdir)/gimpinstall-@GIMP_TOOL_VERSION@

19
NEWS
View File

@ -15,13 +15,30 @@ Changes in GIMP 2.5.1
- improved Alpha to Logo filters
- better cursor feedback in the Intelligent Scissors tool
- rotate JPEG thumbnails according to the EXIF orientation
- tweaked behavior of the new Polygon Selection tool
- improved event smoothing for paint tools
- prepared PSP plug-in to deal with newer versions of the file format
- allow plug-ins to work in parallel on different layers of the same image
- pass through GEGL command-line options
- added 22 new variations to the Flame plugin
- only show operations from relevant categories in the GEGL tool
- allow to enter the zoom ratio in the status bar
- don't keep the file-chooser dialogs around
- ported scan-convert code to Cairo, removing libart dependency
- allow the paint velocity to affect brush size, opacity and the like
- allow for random variations of the brush size, opacity and the like
- renamed Dialogs menu to Windows
- keep a list of recently closed docks in the Windows menu
- allow to go from Brightness-Contrast to Levels to Curves
- improved the handling of color tool settings
- merged the new Polygon Selection tool with the Freehand Select tool
- allow to lock dockables
- made Desaturate into a tool with preview in the image window
- ported translation contexts to msgctxt
- added GimpRuler widgets, an improved version of GtkRuler
- moving the selection mask now commits a pending rectangle selection
- added keyboard shortcut for resetting the brush scale (Backslash)
- ported the Help Browser plug-in to WebKit
- allow to use the online user manual
- added new translation (Icelandic)
- bug fixes and code cleanup

View File

@ -24,6 +24,10 @@
#include "actions-types.h"
#include "core/gimpprogress.h"
#include "widgets/gimphelp.h"
#include "actions.h"
#include "help-commands.h"
@ -32,7 +36,12 @@ void
help_help_cmd_callback (GtkAction *action,
gpointer data)
{
gimp_standard_help_func (NULL, NULL);
Gimp *gimp;
GimpDisplay *display;
return_if_no_gimp (gimp, data);
return_if_no_display (display, data);
gimp_help_show (gimp, GIMP_PROGRESS (display), NULL, NULL);
}
void

View File

@ -40,7 +40,8 @@ libappconfig_a_SOURCES = \
gimpxmlparser.h
AM_CPPFLAGS = \
-DG_LOG_DOMAIN=\"Gimp-Config\"
-DG_LOG_DOMAIN=\"Gimp-Config\" \
-DGIMP_APP_VERSION_STRING=\"$(GIMP_APP_VERSION)\"
INCLUDES = \
-I$(top_builddir) \
@ -68,7 +69,8 @@ test_config_LDFLAGS = \
-u $(SYMPREFIX)xcf_init \
-u $(SYMPREFIX)internal_procs_init \
-u $(SYMPREFIX)gimp_coords_mix \
-u $(SYMPREFIX)gimp_plug_in_manager_restore
-u $(SYMPREFIX)gimp_plug_in_manager_restore \
-u $(SYMPREFIX)gimp_image_map_config_get_type
test_config_LDADD = \
../widgets/widgets-enums.o \
@ -83,8 +85,8 @@ test_config_LDADD = \
../vectors/libappvectors.a \
../paint/libapppaint.a \
../text/libapptext.a \
libappconfig.a \
../gegl/libappgegl.a \
libappconfig.a \
../paint-funcs/libapppaint-funcs.a \
../composite/libappcomposite.a \
../base/libappbase.a \
@ -95,6 +97,7 @@ test_config_LDADD = \
$(libgimpmath) \
$(libgimpconfig) \
$(libgimpbase) \
$(CAIRO_LIBS) \
$(PANGOFT2_LIBS) \
$(GDK_PIXBUF_LIBS) \
$(LIBART_LIBS) \

View File

@ -34,15 +34,18 @@
#include "gimp-intl.h"
#define DEFAULT_GIMP_HELP_BROWSER GIMP_HELP_BROWSER_GIMP
#define DEFAULT_HELP_BROWSER GIMP_HELP_BROWSER_GIMP
#define DEFAULT_THEME "Default"
#define DEFAULT_USER_MANUAL_ONLINE_URI \
"http://docs.gimp.org/" GIMP_APP_VERSION_STRING
#ifdef G_OS_WIN32
# define DEFAULT_WEB_BROWSER "not used on Windows"
#elif HAVE_CARBON
# define DEFAULT_WEB_BROWSER "open %s"
#else
# define DEFAULT_WEB_BROWSER "xdg-open %s"
# define DEFAULT_WEB_BROWSER "firefox %s"
#endif
@ -74,6 +77,8 @@ enum
PROP_HELP_LOCALES,
PROP_HELP_BROWSER,
PROP_WEB_BROWSER,
PROP_USER_MANUAL_ONLINE,
PROP_USER_MANUAL_ONLINE_URI,
PROP_TOOLBOX_WINDOW_HINT,
PROP_DOCK_WINDOW_HINT,
PROP_TRANSIENT_DOCKS,
@ -217,13 +222,23 @@ gimp_gui_config_class_init (GimpGuiConfigClass *klass)
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_HELP_BROWSER,
"help-browser", HELP_BROWSER_BLURB,
GIMP_TYPE_HELP_BROWSER_TYPE,
DEFAULT_GIMP_HELP_BROWSER,
DEFAULT_HELP_BROWSER,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_WEB_BROWSER,
"web-browser", WEB_BROWSER_BLURB,
GIMP_CONFIG_PATH_FILE,
DEFAULT_WEB_BROWSER,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USER_MANUAL_ONLINE,
"user-manual-online",
USER_MANUAL_ONLINE_BLURB,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_STRING (object_class, PROP_USER_MANUAL_ONLINE_URI,
"user-manual-online-uri",
USER_MANUAL_ONLINE_URI_BLURB,
DEFAULT_USER_MANUAL_ONLINE_URI,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_TOOLBOX_WINDOW_HINT,
"toolbox-window-hint",
TOOLBOX_WINDOW_HINT_BLURB,
@ -263,6 +278,7 @@ gimp_gui_config_finalize (GObject *object)
g_free (gui_config->theme);
g_free (gui_config->help_locales);
g_free (gui_config->web_browser);
g_free (gui_config->user_manual_online_uri);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@ -356,6 +372,13 @@ gimp_gui_config_set_property (GObject *object,
g_free (gui_config->web_browser);
gui_config->web_browser = g_value_dup_string (value);
break;
case PROP_USER_MANUAL_ONLINE:
gui_config->user_manual_online = g_value_get_boolean (value);
break;
case PROP_USER_MANUAL_ONLINE_URI:
g_free (gui_config->user_manual_online_uri);
gui_config->user_manual_online_uri = g_value_dup_string (value);
break;
case PROP_TOOLBOX_WINDOW_HINT:
gui_config->toolbox_window_hint = g_value_get_enum (value);
break;
@ -460,6 +483,12 @@ gimp_gui_config_get_property (GObject *object,
case PROP_WEB_BROWSER:
g_value_set_string (value, gui_config->web_browser);
break;
case PROP_USER_MANUAL_ONLINE:
g_value_set_boolean (value, gui_config->user_manual_online);
break;
case PROP_USER_MANUAL_ONLINE_URI:
g_value_set_string (value, gui_config->user_manual_online_uri);
break;
case PROP_TOOLBOX_WINDOW_HINT:
g_value_set_enum (value, gui_config->toolbox_window_hint);
break;

View File

@ -65,6 +65,8 @@ struct _GimpGuiConfig
gchar *help_locales;
GimpHelpBrowserType help_browser;
gchar *web_browser;
gboolean user_manual_online;
gchar *user_manual_online_uri;
GimpWindowHint toolbox_window_hint;
GimpWindowHint dock_window_hint;
gboolean transient_docks;

View File

@ -419,6 +419,14 @@ N_("Sets the size of the previews in the Undo History.")
#define USE_HELP_BLURB \
N_("When enabled, pressing F1 will open the help browser.")
#define USER_MANUAL_ONLINE_BLURB \
N_("When enabled, the online user manual will be used by the help system. " \
"Otherwise the locally installed copy is used.")
#define USER_MANUAL_ONLINE_URI_BLURB \
"The location of the online user manual. This is used if " \
"'user-manual-online' is enabled."
#define WEB_BROWSER_BLURB \
N_("Sets the external web browser to be used. This can be an absolute " \
"path or the name of an executable to search for in the user's PATH. " \

View File

@ -191,13 +191,15 @@ gimp_show_message (Gimp *gimp,
void
gimp_help (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress));
if (gimp->gui.help)
gimp->gui.help (gimp, help_domain, help_id);
gimp->gui.help (gimp, progress, help_domain, help_id);
}
const gchar *

View File

@ -38,6 +38,7 @@ struct _GimpGui
const gchar *domain,
const gchar *message);
void (* help) (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id);
@ -126,6 +127,7 @@ void gimp_show_message (Gimp *gimp,
const gchar *domain,
const gchar *message);
void gimp_help (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id);

View File

@ -1797,6 +1797,18 @@ prefs_dialog_new (Gimp *gimp,
_("Show help _buttons"),
GTK_BOX (vbox2));
{
GtkWidget *combo;
table = prefs_table_new (1, GTK_CONTAINER (vbox2));
combo = prefs_boolean_combo_box_add (object, "user-manual-online",
_("Use the online version"),
_("Use a locally installed copy"),
_("User manual:"),
GTK_TABLE (table), 0, size_group);
gimp_help_set_help_data (combo, NULL, NULL);
}
/* Help Browser */
vbox2 = prefs_frame_new (_("Help Browser"), GTK_CONTAINER (vbox), FALSE);
table = prefs_table_new (1, GTK_CONTAINER (vbox2));

View File

@ -36,7 +36,7 @@ static gboolean gimp_operation_color_balance_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationColorBalance, gimp_operation_color_balance,
@ -117,7 +117,7 @@ gimp_operation_color_balance_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpColorBalanceConfig *config = GIMP_COLOR_BALANCE_CONFIG (point->config);

View File

@ -35,7 +35,7 @@ static gboolean gimp_operation_colorize_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationColorize, gimp_operation_colorize,
@ -80,7 +80,7 @@ gimp_operation_colorize_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpColorizeConfig *config = GIMP_COLORIZE_CONFIG (point->config);

View File

@ -39,7 +39,7 @@ static gboolean gimp_operation_curves_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationCurves, gimp_operation_curves,
@ -84,7 +84,7 @@ gimp_operation_curves_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (point->config);

View File

@ -35,7 +35,7 @@ static gboolean gimp_operation_desaturate_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationDesaturate, gimp_operation_desaturate,
@ -80,7 +80,7 @@ gimp_operation_desaturate_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpDesaturateConfig *config = GIMP_DESATURATE_CONFIG (point->config);

View File

@ -36,7 +36,7 @@ static gboolean gimp_operation_hue_saturation_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationHueSaturation, gimp_operation_hue_saturation,
@ -129,7 +129,7 @@ gimp_operation_hue_saturation_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpHueSaturationConfig *config = GIMP_HUE_SATURATION_CONFIG (point->config);

View File

@ -36,7 +36,7 @@ static gboolean gimp_operation_levels_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationLevels, gimp_operation_levels,
@ -112,7 +112,7 @@ gimp_operation_levels_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (point->config);

View File

@ -36,7 +36,7 @@ static gboolean gimp_operation_posterize_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationPosterize, gimp_operation_posterize,
@ -81,7 +81,7 @@ gimp_operation_posterize_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpPosterizeConfig *config = GIMP_POSTERIZE_CONFIG (point->config);

View File

@ -35,7 +35,7 @@ static gboolean gimp_operation_threshold_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi);
const GeglRectangle *roi);
G_DEFINE_TYPE (GimpOperationThreshold, gimp_operation_threshold,
@ -80,7 +80,7 @@ gimp_operation_threshold_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
glong samples,
GeglRectangle *roi)
const GeglRectangle *roi)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpThresholdConfig *config = GIMP_THRESHOLD_CONFIG (point->config);

View File

@ -218,14 +218,13 @@ gimp_operation_tile_sink_process (GeglOperation *operation,
pr;
pr = pixel_regions_process (pr))
{
GeglRectangle rect = { destPR.x, destPR.y, destPR.w, destPR.h };
const GeglRectangle rect = { destPR.x, destPR.y, destPR.w, destPR.h };
gegl_buffer_get (input,
1.0, &rect, format, destPR.data, destPR.rowstride);
}
g_signal_emit (operation, tile_sink_signals[DATA_WRITTEN], 0,
result);
g_signal_emit (operation, tile_sink_signals[DATA_WRITTEN], 0, result);
return TRUE;
}

View File

@ -238,7 +238,7 @@ gimp_operation_tile_source_process (GeglOperation *operation,
pr;
pr = pixel_regions_process (pr))
{
GeglRectangle rect = { srcPR.x, srcPR.y, srcPR.w, srcPR.h };
const GeglRectangle rect = { srcPR.x, srcPR.y, srcPR.w, srcPR.h };
gegl_buffer_set (output, &rect, format, srcPR.data, srcPR.rowstride);
}

View File

@ -86,6 +86,7 @@ static void gui_threads_leave (Gimp *gimp);
static void gui_set_busy (Gimp *gimp);
static void gui_unset_busy (Gimp *gimp);
static void gui_help (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id);
static const gchar * gui_get_program_class (Gimp *gimp);
@ -214,10 +215,11 @@ gui_unset_busy (Gimp *gimp)
static void
gui_help (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id)
{
gimp_help_show (gimp, help_domain, help_id);
gimp_help_show (gimp, progress, help_domain, help_id);
}
static const gchar *

View File

@ -296,7 +296,7 @@ gui_help_func (const gchar *help_id,
{
g_return_if_fail (GIMP_IS_GIMP (the_gui_gimp));
gimp_help (the_gui_gimp, NULL, help_id);
gimp_help (the_gui_gimp, NULL, NULL, help_id);
}
static gboolean

View File

@ -51,7 +51,7 @@
#define DEFAULT_VELOCITY_OPACITY FALSE
#define DEFAULT_VELOCITY_HARDNESS FALSE
#define DEFAULT_VELOCITY_RATE FALSE
#define DEFAULT_VELOCITY_SIZE TRUE
#define DEFAULT_VELOCITY_SIZE FALSE
#define DEFAULT_VELOCITY_INVERSE_SIZE FALSE
#define DEFAULT_VELOCITY_COLOR FALSE
#define DEFAULT_VELOCITY_PRESCALE 1.0

View File

@ -60,7 +60,7 @@ help_invoker (GimpProcedure *procedure,
manager->current_plug_in->prog,
NULL);
gimp_help (gimp, help_domain, help_id);
gimp_help (gimp, progress, help_domain, help_id);
}
return gimp_procedure_get_return_values (procedure, success);

View File

@ -153,8 +153,7 @@ gimp_plug_in_manager_call_run (GimpPlugInManager *manager,
g_return_val_if_fail (args != NULL, NULL);
g_return_val_if_fail (display == NULL || GIMP_IS_OBJECT (display), NULL);
plug_in = gimp_plug_in_new (manager, context, progress,
procedure, NULL);
plug_in = gimp_plug_in_new (manager, context, progress, procedure, NULL);
if (plug_in)
{

View File

@ -61,6 +61,7 @@ static const MenuPathMapping menu_path_mappings[] =
{ "<Toolbox>/Xtns", NULL, "<Image>/Filters/Extensions" },
{ "<Toolbox>/Help", NULL, "<Image>/Help" },
{ "<Toolbox>/File/Acquire", NULL, "<Image>/File/New/Acquire" },
{ "<Image>/File/Acquire", NULL, "<Image>/File/New/Acquire" },
{ NULL, NULL, NULL }
};

View File

@ -260,7 +260,7 @@ sanity_check_babl (void)
#define BABL_REQUIRED_MAJOR 0
#define BABL_REQUIRED_MINOR 0
#define BABL_REQUIRED_MICRO 21
#define BABL_REQUIRED_MICRO 22
babl_get_version (&babl_major_version,
&babl_minor_version,
@ -298,7 +298,7 @@ sanity_check_gegl (void)
#define GEGL_REQUIRED_MAJOR 0
#define GEGL_REQUIRED_MINOR 0
#define GEGL_REQUIRED_MICRO 17
#define GEGL_REQUIRED_MICRO 18
gegl_get_version (&gegl_major_version,
&gegl_minor_version,

View File

@ -24,10 +24,10 @@
#define GIMP_TYPE_EDIT_SELECTION_TOOL (gimp_edit_selection_tool_get_type ())
#define GIMP_EDIT_SELECTION_TOOL(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_EDIT_SELECTION_TOOL, GimpEditSelectionTool))
#define GIMP_EDIT_SELECTION_TOOL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_EDIT_SELECTION_TOOL, GimpEditSelectionToolClass))
#define GIMP_IS_EDIT_SELECTION_TOOL(obj) (GTK_CHECK_TYPE ((obj), GIMP_TYPE_EDIT_SELECTION_TOOL))
#define GIMP_IS_EDIT_SELECTION_TOOL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_EDIT_SELECTION_TOOL))
#define GIMP_EDIT_SELECTION_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_EDIT_SELECTION_TOOL, GimpEditSelectionTool))
#define GIMP_EDIT_SELECTION_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_EDIT_SELECTION_TOOL, GimpEditSelectionToolClass))
#define GIMP_IS_EDIT_SELECTION_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_EDIT_SELECTION_TOOL))
#define GIMP_IS_EDIT_SELECTION_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_EDIT_SELECTION_TOOL))
typedef struct _GimpEditSelectionTool GimpEditSelectionTool;

View File

@ -72,8 +72,8 @@ typedef struct _Private
*/
GimpVector2 *saved_points_lower_segment;
GimpVector2 *saved_points_higher_segment;
gint n_saved_points_lower_segment;
gint n_saved_points_higher_segment;
gint max_n_saved_points_lower_segment;
gint max_n_saved_points_higher_segment;
/* Keeps track wether or not a modification of the polygon has been
* made between _button_press and _button_release
@ -116,7 +116,7 @@ typedef struct _Private
*/
gboolean supress_handles;
/* Last _oper_update coords */
/* Last _oper_update or _motion coords */
GimpVector2 last_coords;
/* A double-click commits the selection, keep track of last
@ -165,6 +165,11 @@ static void gimp_free_select_tool_modifier_key (GimpTool *too
gboolean press,
GdkModifierType state,
GimpDisplay *display);
static void gimp_free_select_tool_active_modifier_key (GimpTool *tool,
GdkModifierType key,
gboolean press,
GdkModifierType state,
GimpDisplay *display);
static void gimp_free_select_tool_draw (GimpDrawTool *draw_tool);
static void gimp_free_select_tool_real_select (GimpFreeSelectTool *fst,
GimpDisplay *display);
@ -213,6 +218,7 @@ gimp_free_select_tool_class_init (GimpFreeSelectToolClass *klass)
tool_class->motion = gimp_free_select_tool_motion;
tool_class->key_press = gimp_free_select_tool_key_press;
tool_class->modifier_key = gimp_free_select_tool_modifier_key;
tool_class->active_modifier_key = gimp_free_select_tool_active_modifier_key;
draw_tool_class->draw = gimp_free_select_tool_draw;
@ -238,8 +244,8 @@ gimp_free_select_tool_init (GimpFreeSelectTool *fst)
priv->saved_points_lower_segment = NULL;
priv->saved_points_higher_segment = NULL;
priv->n_saved_points_lower_segment = 0;
priv->n_saved_points_higher_segment = 0;
priv->max_n_saved_points_lower_segment = 0;
priv->max_n_saved_points_higher_segment = 0;
priv->polygon_modified = FALSE;
@ -266,10 +272,9 @@ gimp_free_select_tool_finalize (GObject *object)
Private *priv = GET_PRIVATE (fst);
g_free (priv->points);
priv->points = NULL;
priv->n_points = 0;
priv->max_n_points = 0;
g_free (priv->segment_indices);
g_free (priv->saved_points_lower_segment);
g_free (priv->saved_points_higher_segment);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@ -289,6 +294,18 @@ gimp_free_select_tool_get_segment (GimpFreeSelectTool *fst,
1;
}
static void
gimp_free_select_tool_get_segment_point (GimpFreeSelectTool *fst,
gdouble *start_point_x,
gdouble *start_point_y,
gint segment_index)
{
Private *priv = GET_PRIVATE (fst);
*start_point_x = priv->points[priv->segment_indices[segment_index]].x;
*start_point_y = priv->points[priv->segment_indices[segment_index]].y;
}
static void
gimp_free_select_tool_get_last_point (GimpFreeSelectTool *fst,
gdouble *start_point_x,
@ -296,20 +313,10 @@ gimp_free_select_tool_get_last_point (GimpFreeSelectTool *fst,
{
Private *priv = GET_PRIVATE (fst);
*start_point_x = priv->points[priv->segment_indices[priv->n_segment_indices - 1]].x;
*start_point_y = priv->points[priv->segment_indices[priv->n_segment_indices - 1]].y;
}
static void
gimp_free_select_tool_cleanup_after_move (GimpFreeSelectTool *fst)
{
Private *priv = GET_PRIVATE (fst);
g_free (priv->saved_points_lower_segment);
priv->saved_points_lower_segment = NULL;
g_free (priv->saved_points_higher_segment);
priv->saved_points_higher_segment = NULL;
gimp_free_select_tool_get_segment_point (fst,
start_point_x,
start_point_y,
priv->n_segment_indices - 1);
}
static void
@ -932,7 +939,13 @@ gimp_free_select_tool_prepare_for_move (GimpFreeSelectTool *fst)
priv->grabbed_segment_index - 1,
priv->grabbed_segment_index);
priv->saved_points_lower_segment = g_new0 (GimpVector2, n_points);
if (n_points > priv->max_n_saved_points_lower_segment)
{
priv->max_n_saved_points_lower_segment = n_points;
priv->saved_points_lower_segment = g_realloc (priv->saved_points_lower_segment,
sizeof (GimpVector2) * n_points);
}
memcpy (priv->saved_points_lower_segment,
source,
@ -947,7 +960,13 @@ gimp_free_select_tool_prepare_for_move (GimpFreeSelectTool *fst)
priv->grabbed_segment_index,
priv->grabbed_segment_index + 1);
priv->saved_points_higher_segment = g_new0 (GimpVector2, n_points);
if (n_points > priv->max_n_saved_points_higher_segment)
{
priv->max_n_saved_points_higher_segment = n_points;
priv->saved_points_higher_segment = g_realloc (priv->saved_points_higher_segment,
sizeof (GimpVector2) * n_points);
}
memcpy (priv->saved_points_higher_segment,
source,
@ -958,7 +977,13 @@ gimp_free_select_tool_prepare_for_move (GimpFreeSelectTool *fst)
if (priv->grabbed_segment_index == 0 &&
priv->n_segment_indices == 1)
{
if (priv->max_n_saved_points_lower_segment == 0)
{
priv->max_n_saved_points_lower_segment = 1;
priv->saved_points_lower_segment = g_new0 (GimpVector2, 1);
}
*priv->saved_points_lower_segment = priv->points[0];
}
}
@ -993,6 +1018,61 @@ gimp_free_select_tool_delegate_button_press (GimpFreeSelectTool *fst,
return button_press_delegated;
}
static void
gimp_free_select_tool_update_motion (GimpFreeSelectTool *fst,
gdouble new_x,
gdouble new_y)
{
Private *priv = GET_PRIVATE (fst);
if (gimp_free_select_tool_is_point_grabbed (fst))
{
priv->polygon_modified = TRUE;
if (priv->constrain_angle &&
priv->grabbed_segment_index > 0 &&
priv->n_points > 0 )
{
gdouble start_point_x;
gdouble start_point_y;
gimp_free_select_tool_get_segment_point (fst,
&start_point_x,
&start_point_y,
priv->grabbed_segment_index - 1);
gimp_tool_motion_constrain (start_point_x,
start_point_y,
&new_x,
&new_y,
GIMP_TOOL_CONSTRAIN_15_DEGREES);
}
gimp_free_select_tool_move_segment_vertex_to (fst,
priv->grabbed_segment_index,
new_x,
new_y);
/* We also must update the pending point if we are moving the
* first point
*/
if (priv->grabbed_segment_index == 0)
{
priv->pending_point.x = new_x;
priv->pending_point.y = new_y;
}
}
else
{
/* Don't show the pending point while we are adding points */
priv->show_pending_point = FALSE;
gimp_free_select_tool_add_point (fst,
new_x,
new_y);
}
}
static void
gimp_free_select_tool_status_update (GimpFreeSelectTool *fst,
GimpDisplay *display,
@ -1276,11 +1356,6 @@ gimp_free_select_tool_button_release (GimpTool *tool,
gimp_free_select_tool_handle_normal_release (fst,
coords,
display);
if (priv->polygon_modified)
{
gimp_free_select_tool_cleanup_after_move (fst);
}
break;
case GIMP_BUTTON_RELEASE_CANCEL:
@ -1313,34 +1388,13 @@ gimp_free_select_tool_motion (GimpTool *tool,
gimp_draw_tool_pause (draw_tool);
if (gimp_free_select_tool_is_point_grabbed (fst))
{
priv->polygon_modified = TRUE;
priv->last_coords.x = coords->x;
priv->last_coords.y = coords->y;
gimp_free_select_tool_move_segment_vertex_to (fst,
priv->grabbed_segment_index,
gimp_free_select_tool_update_motion (fst,
coords->x,
coords->y);
/* We also must update the pending point if we are moving the
* first point
*/
if (priv->grabbed_segment_index == 0)
{
priv->pending_point.x = coords->x;
priv->pending_point.y = coords->y;
}
}
else
{
/* Don't show the pending point while we are adding points */
priv->show_pending_point = FALSE;
gimp_free_select_tool_add_point (fst,
coords->x,
coords->y);
}
gimp_draw_tool_resume (draw_tool);
}
@ -1384,6 +1438,9 @@ gimp_free_select_tool_modifier_key (GimpTool *tool,
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
Private *priv = GET_PRIVATE (tool);
if (tool->display != display)
return;
gimp_draw_tool_pause (draw_tool);
priv->constrain_angle = state & GDK_CONTROL_MASK ? TRUE : FALSE;
@ -1399,6 +1456,42 @@ gimp_free_select_tool_modifier_key (GimpTool *tool,
display);
}
static void
gimp_free_select_tool_active_modifier_key (GimpTool *tool,
GdkModifierType key,
gboolean press,
GdkModifierType state,
GimpDisplay *display)
{
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
Private *priv = GET_PRIVATE (tool);
if (tool->display != display)
return;
gimp_draw_tool_pause (draw_tool);
priv->constrain_angle = state & GDK_CONTROL_MASK ? TRUE : FALSE;
/* If we didn't came here due to a mouse release, immediately update
* the position of the thing we move.
*/
if (state & GDK_BUTTON1_MASK)
{
gimp_free_select_tool_update_motion (GIMP_FREE_SELECT_TOOL (tool),
priv->last_coords.x,
priv->last_coords.y);
}
gimp_draw_tool_resume (draw_tool);
GIMP_TOOL_CLASS (parent_class)->active_modifier_key (tool,
key,
press,
state,
display);
}
static void
gimp_free_select_tool_draw (GimpDrawTool *draw_tool)
{

View File

@ -38,9 +38,7 @@
#include "core/gimplist.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimpcontainercombobox.h"
#include "widgets/gimpcontainerview.h"
#include "widgets/gimpwidgets-utils.h"
#include "widgets/gimpsettingsbox.h"
#include "gimpimagemapoptions.h"
#include "gimpimagemaptool.h"
@ -51,23 +49,6 @@
/* local function prototypes */
static void gimp_image_map_tool_recent_deserialize (GimpImageMapTool *im_tool);
static void gimp_image_map_tool_recent_serialize (GimpImageMapTool *im_tool);
static gboolean
gimp_image_map_tool_row_separator_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data);
static void gimp_image_map_tool_recent_selected (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data,
GimpImageMapTool *tool);
static gboolean gimp_image_map_tool_menu_press (GtkWidget *widget,
GdkEventButton *bevent,
GimpImageMapTool *tool);
static void gimp_image_map_tool_favorite_activate (GtkWidget *widget,
GimpImageMapTool *tool);
static void gimp_image_map_tool_import_activate (GtkWidget *widget,
GimpImageMapTool *tool);
static void gimp_image_map_tool_export_activate (GtkWidget *widget,
@ -77,9 +58,6 @@ static void gimp_image_map_tool_settings_dialog (GimpImageMapTool *im_tool,
const gchar *title,
gboolean save);
static void gimp_image_map_tool_favorite_callback (GtkWidget *query_box,
const gchar *string,
gpointer data);
static gboolean gimp_image_map_tool_settings_import (GimpImageMapTool *tool,
const gchar *filename);
static gboolean gimp_image_map_tool_settings_export (GimpImageMapTool *tool,
@ -88,30 +66,6 @@ static gboolean gimp_image_map_tool_settings_export(GimpImageMapTool *tool,
/* public functions */
static GtkWidget *
gimp_image_map_tool_menu_item_add (GimpImageMapTool *image_map_tool,
const gchar *stock_id,
const gchar *label,
GCallback callback)
{
GtkWidget *item;
GtkWidget *image;
item = gtk_image_menu_item_new_with_mnemonic (label);
image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
gtk_menu_shell_append (GTK_MENU_SHELL (image_map_tool->favorites_menu),
item);
gtk_widget_show (item);
g_signal_connect (item, "activate",
callback,
image_map_tool);
return item;
}
gboolean
gimp_image_map_tool_add_settings_gui (GimpImageMapTool *image_map_tool)
{
@ -119,17 +73,12 @@ gimp_image_map_tool_add_settings_gui (GimpImageMapTool *image_map_tool)
GimpToolInfo *tool_info;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *combo;
GtkWidget *button;
GtkWidget *arrow;
gchar *filename;
klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (image_map_tool);
tool_info = GIMP_TOOL (image_map_tool)->tool_info;
if (gimp_container_num_children (klass->recent_settings) == 0)
gimp_image_map_tool_recent_deserialize (image_map_tool);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (image_map_tool->main_vbox), hbox,
FALSE, FALSE, 0);
@ -143,104 +92,32 @@ gimp_image_map_tool_add_settings_gui (GimpImageMapTool *image_map_tool)
gtk_size_group_add_widget (image_map_tool->label_group, label);
g_object_unref (image_map_tool->label_group);
combo = gimp_container_combo_box_new (klass->recent_settings,
GIMP_CONTEXT (tool_info->tool_options),
16, 0);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
gimp_image_map_tool_row_separator_func,
NULL, NULL);
gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
gtk_widget_show (combo);
filename = gimp_tool_info_build_options_filename (tool_info, ".settings");
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
image_map_tool->settings_box = gimp_settings_box_new (tool_info->gimp,
image_map_tool->config,
klass->recent_settings,
filename);
gtk_box_pack_start (GTK_BOX (hbox), image_map_tool->settings_box,
TRUE, TRUE, 0);
gtk_widget_show (image_map_tool->settings_box);
gimp_help_set_help_data (combo, _("Pick a setting from the list"),
NULL);
g_free (filename);
g_signal_connect_after (combo, "select-item",
G_CALLBACK (gimp_image_map_tool_recent_selected),
gtk_label_set_mnemonic_widget (GTK_LABEL (label),
GIMP_SETTINGS_BOX (image_map_tool->settings_box)->combo);
g_signal_connect (image_map_tool->settings_box, "import",
G_CALLBACK (gimp_image_map_tool_import_activate),
image_map_tool);
button = gtk_button_new ();
GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
arrow = gtk_image_new_from_stock (GIMP_STOCK_MENU_LEFT, GTK_ICON_SIZE_MENU);
gtk_container_add (GTK_CONTAINER (button), arrow);
gtk_widget_show (arrow);
g_signal_connect (button, "button-press-event",
G_CALLBACK (gimp_image_map_tool_menu_press),
g_signal_connect (image_map_tool->settings_box, "export",
G_CALLBACK (gimp_image_map_tool_export_activate),
image_map_tool);
/* Favorites menu */
image_map_tool->favorites_menu = gtk_menu_new ();
gtk_menu_attach_to_widget (GTK_MENU (image_map_tool->favorites_menu),
button, NULL);
gimp_image_map_tool_menu_item_add (image_map_tool,
GTK_STOCK_ADD,
_("Add Settings to _Favorites"),
G_CALLBACK (gimp_image_map_tool_favorite_activate));
image_map_tool->import_item =
gimp_image_map_tool_menu_item_add (image_map_tool,
GTK_STOCK_OPEN,
_("_Import Settings from File"),
G_CALLBACK (gimp_image_map_tool_import_activate));
image_map_tool->export_item =
gimp_image_map_tool_menu_item_add (image_map_tool,
GTK_STOCK_SAVE,
_("_Export Settings to File"),
G_CALLBACK (gimp_image_map_tool_export_activate));
return TRUE;
}
void
gimp_image_map_tool_add_recent_settings (GimpImageMapTool *image_map_tool)
{
GimpContainer *recent;
GimpConfig *current;
GimpConfig *config = NULL;
GList *list;
recent = GIMP_IMAGE_MAP_TOOL_GET_CLASS (image_map_tool)->recent_settings;
current = GIMP_CONFIG (image_map_tool->config);
for (list = GIMP_LIST (recent)->list; list; list = g_list_next (list))
{
config = list->data;
if (GIMP_IMAGE_MAP_CONFIG (config)->time > 0 &&
gimp_config_is_equal_to (config, current))
{
g_object_set (current,
"time", (guint) time (NULL),
NULL);
break;
}
}
if (! list)
{
config = gimp_config_duplicate (current);
g_object_set (config,
"time", (guint) time (NULL),
NULL);
gimp_container_insert (recent, GIMP_OBJECT (config), 0);
g_object_unref (config);
}
gimp_image_map_tool_recent_serialize (image_map_tool);
}
gboolean
gimp_image_map_tool_real_settings_import (GimpImageMapTool *tool,
const gchar *filename,
@ -288,165 +165,6 @@ gimp_image_map_tool_real_settings_export (GimpImageMapTool *tool,
/* private functions */
static void
gimp_image_map_tool_separator_add (GimpContainer *container)
{
GimpObject *sep = g_object_new (GIMP_TYPE_IMAGE_MAP_CONFIG, NULL);
gimp_container_add (container, sep);
g_object_unref (sep);
g_object_set_data (G_OBJECT (container), "separator", sep);
}
static void
gimp_image_map_tool_separator_remove (GimpContainer *container)
{
GimpObject *sep = g_object_get_data (G_OBJECT (container), "separator");
gimp_container_remove (container, sep);
g_object_set_data (G_OBJECT (container), "separator", NULL);
}
static void
gimp_image_map_tool_recent_deserialize (GimpImageMapTool *im_tool)
{
GimpImageMapToolClass *klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool);
GimpToolInfo *tool_info = GIMP_TOOL (im_tool)->tool_info;
gchar *filename;
GError *error = NULL;
filename = gimp_tool_info_build_options_filename (tool_info,
".settings");
if (tool_info->gimp->be_verbose)
g_print ("Parsing '%s'\n", gimp_filename_to_utf8 (filename));
if (! gimp_config_deserialize_file (GIMP_CONFIG (klass->recent_settings),
filename,
NULL, &error))
{
if (error->code != GIMP_CONFIG_ERROR_OPEN_ENOENT)
gimp_message (tool_info->gimp, NULL, GIMP_MESSAGE_ERROR,
"%s", error->message);
g_clear_error (&error);
}
g_free (filename);
gimp_image_map_tool_separator_add (klass->recent_settings);
}
static void
gimp_image_map_tool_recent_serialize (GimpImageMapTool *im_tool)
{
GimpImageMapToolClass *klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool);
GimpToolInfo *tool_info = GIMP_TOOL (im_tool)->tool_info;
gchar *filename;
GError *error = NULL;
gimp_image_map_tool_separator_remove (klass->recent_settings);
filename = gimp_tool_info_build_options_filename (tool_info,
".settings");
if (tool_info->gimp->be_verbose)
g_print ("Writing '%s'\n", gimp_filename_to_utf8 (filename));
if (! gimp_config_serialize_to_file (GIMP_CONFIG (klass->recent_settings),
filename,
"tool settings",
"end of tool settings",
NULL, &error))
{
gimp_message (tool_info->gimp, NULL, GIMP_MESSAGE_ERROR,
"%s", error->message);
g_clear_error (&error);
}
g_free (filename);
gimp_image_map_tool_separator_add (klass->recent_settings);
}
static gboolean
gimp_image_map_tool_row_separator_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
gchar *name = NULL;
#ifdef __GNUC__
#warning FIXME: dont use magic model column
#endif
gtk_tree_model_get (model, iter,
1, &name,
-1);
g_free (name);
return name == NULL;
}
static void
gimp_image_map_tool_recent_selected (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data,
GimpImageMapTool *tool)
{
if (object)
{
gimp_config_copy (GIMP_CONFIG (object),
GIMP_CONFIG (tool->config), 0);
gimp_container_view_select_item (view, NULL);
}
}
static void
gimp_image_map_tool_menu_position (GtkMenu *menu,
gint *x,
gint *y,
gboolean *push_in,
gpointer user_data)
{
gimp_button_menu_position (user_data, menu, GTK_POS_LEFT, x, y);
}
static gboolean
gimp_image_map_tool_menu_press (GtkWidget *widget,
GdkEventButton *bevent,
GimpImageMapTool *tool)
{
if (bevent->type == GDK_BUTTON_PRESS)
{
gtk_menu_popup (GTK_MENU (tool->favorites_menu),
NULL, NULL,
gimp_image_map_tool_menu_position, widget,
bevent->button, bevent->time);
}
return TRUE;
}
static void
gimp_image_map_tool_favorite_activate (GtkWidget *widget,
GimpImageMapTool *tool)
{
GtkWidget *dialog;
dialog = gimp_query_string_box (_("Add Settings to Favorites"),
tool->shell,
gimp_standard_help_func, NULL,
_("Enter a name for the settings"),
_("Saved Settings"),
G_OBJECT (tool->shell), "hide",
gimp_image_map_tool_favorite_callback, tool);
gtk_widget_show (dialog);
}
static void
gimp_image_map_tool_import_activate (GtkWidget *widget,
GimpImageMapTool *tool)
@ -489,9 +207,9 @@ settings_dialog_response (GtkWidget *dialog,
}
if (save)
gtk_widget_set_sensitive (tool->import_item, TRUE);
gtk_widget_set_sensitive (GIMP_SETTINGS_BOX (tool->settings_box)->import_item, TRUE);
else
gtk_widget_set_sensitive (tool->export_item, TRUE);
gtk_widget_set_sensitive (GIMP_SETTINGS_BOX (tool->settings_box)->export_item, TRUE);
gtk_widget_destroy (dialog);
}
@ -517,9 +235,9 @@ gimp_image_map_tool_settings_dialog (GimpImageMapTool *tool,
}
if (save)
gtk_widget_set_sensitive (tool->import_item, FALSE);
gtk_widget_set_sensitive (GIMP_SETTINGS_BOX (tool->settings_box)->import_item, FALSE);
else
gtk_widget_set_sensitive (tool->export_item, FALSE);
gtk_widget_set_sensitive (GIMP_SETTINGS_BOX (tool->settings_box)->export_item, FALSE);
tool->settings_dialog =
gtk_file_chooser_dialog_new (title, GTK_WINDOW (tool->shell),
@ -582,23 +300,6 @@ gimp_image_map_tool_settings_dialog (GimpImageMapTool *tool,
gtk_widget_show (tool->settings_dialog);
}
static void
gimp_image_map_tool_favorite_callback (GtkWidget *query_box,
const gchar *string,
gpointer data)
{
GimpImageMapTool *tool = GIMP_IMAGE_MAP_TOOL (data);
GimpConfig *config;
config = gimp_config_duplicate (GIMP_CONFIG (tool->config));
gimp_object_set_name (GIMP_OBJECT (config), string);
gimp_container_add (GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->recent_settings,
GIMP_OBJECT (config));
g_object_unref (config);
gimp_image_map_tool_recent_serialize (tool);
}
static gboolean
gimp_image_map_tool_settings_import (GimpImageMapTool *tool,
const gchar *filename)

View File

@ -24,8 +24,6 @@
gboolean gimp_image_map_tool_add_settings_gui (GimpImageMapTool *image_map_tool);
void gimp_image_map_tool_add_recent_settings (GimpImageMapTool *image_map_tool);
gboolean gimp_image_map_tool_real_settings_import (GimpImageMapTool *tool,
const gchar *filename,
GError **error);

View File

@ -42,6 +42,7 @@
#include "core/gimptoolinfo.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpsettingsbox.h"
#include "widgets/gimptooldialog.h"
#include "widgets/gimpwidgets-utils.h"
@ -171,7 +172,7 @@ gimp_image_map_tool_class_init (GimpImageMapToolClass *klass)
static void
gimp_image_map_tool_base_init (GimpImageMapToolClass *klass)
{
klass->recent_settings = gimp_list_new (GIMP_TYPE_VIEWABLE, TRUE);
klass->recent_settings = gimp_list_new (GIMP_TYPE_IMAGE_MAP_CONFIG, TRUE);
gimp_list_set_sort_func (GIMP_LIST (klass->recent_settings),
(GCompareFunc) gimp_image_map_config_compare);
}
@ -196,9 +197,8 @@ gimp_image_map_tool_init (GimpImageMapTool *image_map_tool)
image_map_tool->shell = NULL;
image_map_tool->main_vbox = NULL;
image_map_tool->favorites_menu = NULL;
image_map_tool->import_item = NULL;
image_map_tool->export_item = NULL;
image_map_tool->settings_box = NULL;
image_map_tool->label_group = NULL;
image_map_tool->settings_dialog = NULL;
}
@ -245,9 +245,8 @@ gimp_image_map_tool_finalize (GObject *object)
gtk_widget_destroy (image_map_tool->shell);
image_map_tool->shell = NULL;
image_map_tool->main_vbox = NULL;
image_map_tool->favorites_menu = NULL;
image_map_tool->import_item = NULL;
image_map_tool->export_item = NULL;
image_map_tool->settings_box = NULL;
image_map_tool->label_group = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
@ -549,7 +548,7 @@ gimp_image_map_tool_response (GtkWidget *widget,
gimp_image_flush (tool->display->image);
if (image_map_tool->config)
gimp_image_map_tool_add_recent_settings (image_map_tool);
gimp_settings_box_add_current (GIMP_SETTINGS_BOX (image_map_tool->settings_box));
}
tool->display = NULL;

View File

@ -51,9 +51,7 @@ struct _GimpImageMapTool
/* dialog */
GtkWidget *shell;
GtkWidget *main_vbox;
GtkWidget *favorites_menu;
GtkWidget *import_item;
GtkWidget *export_item;
GtkWidget *settings_box;
GtkSizeGroup *label_group;
/* settings file dialog */

View File

@ -1077,12 +1077,11 @@ gimp_rectangle_tool_motion (GimpTool *tool,
{
gchar *aspect_text;
aspect_text = g_strdup_printf (" %.2f",
w / (gdouble) h);
aspect_text = g_strdup_printf (" (%.2f:1)", w / (gdouble) h);
gimp_tool_push_status_coords (tool, display,
_("Rectangle: "), w, " × ", h, aspect_text);
_("Rectangle: "),
w, " × ", h, aspect_text);
g_free (aspect_text);
}
}

View File

@ -91,7 +91,8 @@ static void gimp_text_options_notify_text_color (GimpText *text,
GimpContext *context);
G_DEFINE_TYPE_WITH_CODE (GimpTextOptions, gimp_text_options, GIMP_TYPE_TOOL_OPTIONS,
G_DEFINE_TYPE_WITH_CODE (GimpTextOptions, gimp_text_options,
GIMP_TYPE_TOOL_OPTIONS,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_RECTANGLE_OPTIONS,
NULL))
@ -104,6 +105,15 @@ gimp_text_options_class_init (GimpTextOptionsClass *klass)
object_class->set_property = gimp_text_options_set_property;
object_class->get_property = gimp_text_options_get_property;
/* The 'highlight' property is defined here because we want different
* default values for the Crop, Text and the Rectangle Select tools.
*/
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class,
GIMP_RECTANGLE_OPTIONS_PROP_HIGHLIGHT,
"highlight", NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_UNIT (object_class, PROP_UNIT,
"font-size-unit", NULL,
TRUE, FALSE, GIMP_UNIT_PIXEL,

View File

@ -255,6 +255,8 @@ libappwidgets_a_sources = \
gimpsessioninfo-dock.h \
gimpsessioninfo-dockable.c \
gimpsessioninfo-dockable.h \
gimpsettingsbox.c \
gimpsettingsbox.h \
gimpsizebox.c \
gimpsizebox.h \
gimpstringaction.c \

View File

@ -1245,7 +1245,7 @@ gimp_dockable_show_menu (GimpDockable *dockable)
gimp_ui_manager_ui_popup (dockbook_ui_manager, "/dockable-popup",
GTK_WIDGET (dockable),
gimp_dockable_menu_position, dockable,
(GtkDestroyNotify) gimp_dockable_menu_end, dockable);
(GDestroyNotify) gimp_dockable_menu_end, dockable);
return TRUE;
}

View File

@ -34,8 +34,9 @@
#include "config/gimpguiconfig.h"
#include "core/gimp.h"
#include "core/gimp-utils.h"
#include "core/gimpparamspecs.h"
#include "core/gimpprogress.h"
#include "core/gimp-utils.h"
#include "pdb/gimppdb.h"
#include "pdb/gimpprocedure.h"
@ -56,6 +57,7 @@ typedef struct _GimpIdleHelp GimpIdleHelp;
struct _GimpIdleHelp
{
Gimp *gimp;
GimpProgress *progress;
gchar *help_domain;
gchar *help_locales;
gchar *help_id;
@ -73,23 +75,31 @@ static void gimp_help_browser_error (Gimp *gimp,
const gchar *text);
static void gimp_help_call (Gimp *gimp,
GimpProgress *progress,
const gchar *procedure_name,
const gchar *help_domain,
const gchar *help_locales,
const gchar *help_id);
static gchar * gimp_help_get_locales (GimpGuiConfig *config);
static gint gimp_help_get_help_domains (Gimp *gimp,
gchar ***domain_names,
gchar ***domain_uris);
static gchar * gimp_help_get_default_domain_uri (Gimp *gimp);
static gchar * gimp_help_get_locales (Gimp *gimp);
/* public functions */
void
gimp_help_show (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id)
{
GimpGuiConfig *config;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress));
config = GIMP_GUI_CONFIG (gimp->config);
@ -98,11 +108,12 @@ gimp_help_show (Gimp *gimp,
GimpIdleHelp *idle_help = g_slice_new0 (GimpIdleHelp);
idle_help->gimp = gimp;
idle_help->progress = progress;
if (help_domain && strlen (help_domain))
idle_help->help_domain = g_strdup (help_domain);
idle_help->help_locales = gimp_help_get_locales (config);
idle_help->help_locales = gimp_help_get_locales (gimp);
if (help_id && strlen (help_id))
idle_help->help_id = g_strdup (help_id);
@ -143,6 +154,7 @@ gimp_idle_help (GimpIdleHelp *idle_help)
if (procedure_name)
gimp_help_call (idle_help->gimp,
idle_help->progress,
procedure_name,
idle_help->help_domain,
idle_help->help_locales,
@ -195,9 +207,7 @@ gimp_help_browser (Gimp *gimp)
return FALSE;
}
n_domains = gimp_plug_in_manager_get_help_domains (gimp->plug_in_manager,
&help_domains,
&help_uris);
n_domains = gimp_help_get_help_domains (gimp, &help_domains, &help_uris);
args = gimp_procedure_get_arguments (procedure);
gimp_value_array_truncate (args, 5);
@ -281,6 +291,7 @@ gimp_help_browser_error (Gimp *gimp,
static void
gimp_help_call (Gimp *gimp,
GimpProgress *progress,
const gchar *procedure_name,
const gchar *help_domain,
const gchar *help_locales,
@ -303,7 +314,7 @@ gimp_help_call (Gimp *gimp,
return_vals =
gimp_pdb_execute_procedure_by_name (gimp->pdb,
gimp_get_user_context (gimp),
NULL, &error,
progress, &error,
procedure_name,
G_TYPE_STRING, help_domain,
G_TYPE_STRING, help_locales,
@ -339,9 +350,7 @@ gimp_help_call (Gimp *gimp,
/* FIXME: error msg */
return;
n_domains = gimp_plug_in_manager_get_help_domains (gimp->plug_in_manager,
&help_domains,
&help_uris);
n_domains = gimp_help_get_help_domains (gimp, &help_domains, &help_uris);
args = gimp_procedure_get_arguments (procedure);
gimp_value_array_truncate (args, 4);
@ -352,8 +361,8 @@ gimp_help_call (Gimp *gimp,
gimp_value_take_stringarray (&args->values[3], help_uris, n_domains);
gimp_procedure_execute_async (procedure, gimp,
gimp_get_user_context (gimp),
NULL, args, NULL, &error);
gimp_get_user_context (gimp), progress,
args, NULL, &error);
g_value_array_free (args);
@ -382,7 +391,7 @@ gimp_help_call (Gimp *gimp,
return_vals =
gimp_pdb_execute_procedure_by_name (gimp->pdb,
gimp_get_user_context (gimp),
NULL, &error,
progress, &error,
"extension-gimp-help-temp",
G_TYPE_STRING, procedure_name,
G_TYPE_STRING, help_domain,
@ -401,9 +410,62 @@ gimp_help_call (Gimp *gimp,
}
}
static gchar *
gimp_help_get_locales (GimpGuiConfig *config)
static gint
gimp_help_get_help_domains (Gimp *gimp,
gchar ***domain_names,
gchar ***domain_uris)
{
gchar **plug_in_domains = NULL;
gchar **plug_in_uris = NULL;
gint i, n_domains;
n_domains = gimp_plug_in_manager_get_help_domains (gimp->plug_in_manager,
&plug_in_domains,
&plug_in_uris);
*domain_names = g_new0 (gchar *, n_domains + 1);
*domain_uris = g_new0 (gchar *, n_domains + 1);
*domain_names[0] = g_strdup ("http://www.gimp.org/help");
*domain_uris[0] = gimp_help_get_default_domain_uri (gimp);
for (i = 0; i < n_domains; i++)
{
*domain_names[i + 1] = plug_in_domains[i];
*domain_uris[i + 1] = plug_in_uris[i];
}
g_free (plug_in_domains);
g_free (plug_in_uris);
return n_domains + 1;
}
static gchar *
gimp_help_get_default_domain_uri (Gimp *gimp)
{
GimpGuiConfig *config = GIMP_GUI_CONFIG (gimp->config);
gchar *dir;
gchar *uri;
if (g_getenv ("GIMP2_HELP_URI"))
return g_strdup (g_getenv ("GIMP2_HELP_URI"));
if (config->user_manual_online)
return g_strdup (config->user_manual_online_uri);
dir = g_build_filename (gimp_data_directory (), "help", NULL);
uri = g_filename_to_uri (dir, NULL, NULL);
g_free (dir);
return uri;
}
static gchar *
gimp_help_get_locales (Gimp *gimp)
{
GimpGuiConfig *config = GIMP_GUI_CONFIG (gimp->config);
if (config->help_locales && strlen (config->help_locales))
return g_strdup (config->help_locales);

View File

@ -25,9 +25,10 @@
/* the main help function
*
* there should be no need to use it in the common case
* there should be no need to use it directly
*/
void gimp_help_show (Gimp *gimp,
GimpProgress *progress,
const gchar *help_domain,
const gchar *help_id);

View File

@ -0,0 +1,598 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpsettingsbox.c
* Copyright (C) 2008 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 <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "widgets-types.h"
#include "core/gimp.h"
#include "core/gimplist.h"
#include "gimpcontainercombobox.h"
#include "gimpcontainerview.h"
#include "gimpsettingsbox.h"
#include "gimpwidgets-utils.h"
#include "gimp-intl.h"
enum
{
IMPORT,
EXPORT,
LAST_SIGNAL
};
enum
{
PROP_0,
PROP_GIMP,
PROP_CONFIG,
PROP_CONTAINER,
PROP_FILENAME
};
static GObject * gimp_settings_box_constructor (GType type,
guint n_params,
GObjectConstructParam *params);
static void gimp_settings_box_finalize (GObject *object);
static void gimp_settings_box_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_settings_box_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_settings_box_deserialize (GimpSettingsBox *box);
static void gimp_settings_box_serialize (GimpSettingsBox *box);
static GtkWidget *
gimp_settings_box_menu_item_add (GimpSettingsBox *box,
const gchar *stock_id,
const gchar *label,
GCallback callback);
static gboolean
gimp_settings_box_row_separator_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data);
static void gimp_settings_box_setting_selected (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data,
GimpSettingsBox *box);
static gboolean gimp_settings_box_menu_press (GtkWidget *widget,
GdkEventButton *bevent,
GimpSettingsBox *box);
static void gimp_settings_box_favorite_activate (GtkWidget *widget,
GimpSettingsBox *box);
static void gimp_settings_box_import_activate (GtkWidget *widget,
GimpSettingsBox *box);
static void gimp_settings_box_export_activate (GtkWidget *widget,
GimpSettingsBox *box);
static void gimp_settings_box_favorite_callback (GtkWidget *query_box,
const gchar *string,
gpointer data);
G_DEFINE_TYPE (GimpSettingsBox, gimp_settings_box, GTK_TYPE_HBOX)
#define parent_class gimp_settings_box_parent_class
static guint settings_box_signals[LAST_SIGNAL] = { 0 };
static void
gimp_settings_box_class_init (GimpSettingsBoxClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
settings_box_signals[IMPORT] =
g_signal_new ("import",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpSettingsBoxClass, import),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
settings_box_signals[EXPORT] =
g_signal_new ("export",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpSettingsBoxClass, export),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
object_class->constructor = gimp_settings_box_constructor;
object_class->finalize = gimp_settings_box_finalize;
object_class->set_property = gimp_settings_box_set_property;
object_class->get_property = gimp_settings_box_get_property;
g_object_class_install_property (object_class, PROP_GIMP,
g_param_spec_object ("gimp",
NULL, NULL,
GIMP_TYPE_GIMP,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_CONFIG,
g_param_spec_object ("config",
NULL, NULL,
GIMP_TYPE_CONFIG,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_CONTAINER,
g_param_spec_object ("container",
NULL, NULL,
GIMP_TYPE_CONTAINER,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_FILENAME,
g_param_spec_string ("filename",
NULL, NULL,
NULL,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
}
static void
gimp_settings_box_init (GimpSettingsBox *box)
{
gtk_box_set_spacing (GTK_BOX (box), 6);
}
static GObject *
gimp_settings_box_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GObject *object;
GimpSettingsBox *box;
GtkWidget *button;
GtkWidget *arrow;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
box = GIMP_SETTINGS_BOX (object);
g_assert (GIMP_IS_GIMP (box->gimp));
g_assert (GIMP_IS_CONFIG (box->config));
g_assert (GIMP_IS_CONTAINER (box->container));
g_assert (box->filename != NULL);
if (gimp_container_num_children (box->container) == 0)
gimp_settings_box_deserialize (box);
box->combo = gimp_container_combo_box_new (box->container,
gimp_get_user_context (box->gimp),
16, 0);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (box->combo),
gimp_settings_box_row_separator_func,
NULL, NULL);
gtk_box_pack_start (GTK_BOX (box), box->combo, TRUE, TRUE, 0);
gtk_widget_show (box->combo);
gimp_help_set_help_data (box->combo, _("Pick a setting from the list"),
NULL);
g_signal_connect_after (box->combo, "select-item",
G_CALLBACK (gimp_settings_box_setting_selected),
box);
button = gtk_button_new ();
GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
gtk_widget_show (button);
arrow = gtk_image_new_from_stock (GIMP_STOCK_MENU_LEFT, GTK_ICON_SIZE_MENU);
gtk_container_add (GTK_CONTAINER (button), arrow);
gtk_widget_show (arrow);
g_signal_connect (button, "button-press-event",
G_CALLBACK (gimp_settings_box_menu_press),
box);
/* Favorites menu */
box->menu = gtk_menu_new ();
gtk_menu_attach_to_widget (GTK_MENU (box->menu), button, NULL);
gimp_settings_box_menu_item_add (box,
GTK_STOCK_ADD,
_("Add Settings to _Favorites..."),
G_CALLBACK (gimp_settings_box_favorite_activate));
box->import_item =
gimp_settings_box_menu_item_add (box,
GTK_STOCK_OPEN,
_("_Import Settings from File..."),
G_CALLBACK (gimp_settings_box_import_activate));
box->export_item =
gimp_settings_box_menu_item_add (box,
GTK_STOCK_SAVE,
_("_Export Settings to File..."),
G_CALLBACK (gimp_settings_box_export_activate));
return object;
}
static void
gimp_settings_box_finalize (GObject *object)
{
GimpSettingsBox *box = GIMP_SETTINGS_BOX (object);
if (box->config)
{
g_object_unref (box->config);
box->config = NULL;
}
if (box->container)
{
g_object_unref (box->container);
box->container = NULL;
}
if (box->filename)
{
g_free (box->filename);
box->filename = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_settings_box_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GimpSettingsBox *box = GIMP_SETTINGS_BOX (object);
switch (property_id)
{
case PROP_GIMP:
box->gimp = g_value_get_object (value); /* don't dup */
break;
case PROP_CONFIG:
box->config = g_value_dup_object (value);
break;
case PROP_CONTAINER:
box->container = g_value_dup_object (value);
break;
case PROP_FILENAME:
box->filename = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gimp_settings_box_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GimpSettingsBox *box = GIMP_SETTINGS_BOX (object);
switch (property_id)
{
case PROP_GIMP:
g_value_set_object (value, box->gimp);
break;
case PROP_CONFIG:
g_value_set_object (value, box->config);
break;
case PROP_CONTAINER:
g_value_set_object (value, box->container);
break;
case PROP_FILENAME:
g_value_set_string (value, box->filename);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gimp_settings_box_separator_add (GimpContainer *container)
{
GimpObject *sep = g_object_new (container->children_type, NULL);
gimp_container_add (container, sep);
g_object_unref (sep);
g_object_set_data (G_OBJECT (container), "separator", sep);
}
static void
gimp_settings_box_separator_remove (GimpContainer *container)
{
GimpObject *sep = g_object_get_data (G_OBJECT (container), "separator");
gimp_container_remove (container, sep);
g_object_set_data (G_OBJECT (container), "separator", NULL);
}
static void
gimp_settings_box_deserialize (GimpSettingsBox *box)
{
GError *error = NULL;
if (box->gimp->be_verbose)
g_print ("Parsing '%s'\n", gimp_filename_to_utf8 (box->filename));
if (! gimp_config_deserialize_file (GIMP_CONFIG (box->container),
box->filename,
NULL, &error))
{
if (error->code != GIMP_CONFIG_ERROR_OPEN_ENOENT)
gimp_message (box->gimp, NULL, GIMP_MESSAGE_ERROR,
"%s", error->message);
g_clear_error (&error);
}
gimp_settings_box_separator_add (box->container);
}
static void
gimp_settings_box_serialize (GimpSettingsBox *box)
{
GError *error = NULL;
gimp_settings_box_separator_remove (box->container);
if (box->gimp->be_verbose)
g_print ("Writing '%s'\n", gimp_filename_to_utf8 (box->filename));
if (! gimp_config_serialize_to_file (GIMP_CONFIG (box->container),
box->filename,
"settings",
"end of settings",
NULL, &error))
{
gimp_message (box->gimp, NULL, GIMP_MESSAGE_ERROR,
"%s", error->message);
g_clear_error (&error);
}
gimp_settings_box_separator_add (box->container);
}
static GtkWidget *
gimp_settings_box_menu_item_add (GimpSettingsBox *box,
const gchar *stock_id,
const gchar *label,
GCallback callback)
{
GtkWidget *item;
GtkWidget *image;
item = gtk_image_menu_item_new_with_mnemonic (label);
image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
gtk_menu_shell_append (GTK_MENU_SHELL (box->menu), item);
gtk_widget_show (item);
g_signal_connect (item, "activate",
callback,
box);
return item;
}
static gboolean
gimp_settings_box_row_separator_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
gchar *name = NULL;
#ifdef __GNUC__
#warning FIXME: dont use magic model column
#endif
gtk_tree_model_get (model, iter,
1, &name,
-1);
g_free (name);
return name == NULL;
}
static void
gimp_settings_box_setting_selected (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data,
GimpSettingsBox *box)
{
if (object)
{
gimp_config_copy (GIMP_CONFIG (object),
GIMP_CONFIG (box->config), 0);
gimp_container_view_select_item (view, NULL);
}
}
static void
gimp_settings_box_menu_position (GtkMenu *menu,
gint *x,
gint *y,
gboolean *push_in,
gpointer user_data)
{
gimp_button_menu_position (user_data, menu, GTK_POS_LEFT, x, y);
}
static gboolean
gimp_settings_box_menu_press (GtkWidget *widget,
GdkEventButton *bevent,
GimpSettingsBox *box)
{
if (bevent->type == GDK_BUTTON_PRESS)
{
gtk_menu_popup (GTK_MENU (box->menu),
NULL, NULL,
gimp_settings_box_menu_position, widget,
bevent->button, bevent->time);
}
return TRUE;
}
static void
gimp_settings_box_favorite_activate (GtkWidget *widget,
GimpSettingsBox *box)
{
GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
GtkWidget *dialog;
dialog = gimp_query_string_box (_("Add Settings to Favorites"),
toplevel,
gimp_standard_help_func, NULL,
_("Enter a name for the settings"),
_("Saved Settings"),
G_OBJECT (toplevel), "hide",
gimp_settings_box_favorite_callback, box);
gtk_widget_show (dialog);
}
static void
gimp_settings_box_import_activate (GtkWidget *widget,
GimpSettingsBox *box)
{
g_signal_emit (box, settings_box_signals[IMPORT], 0);
}
static void
gimp_settings_box_export_activate (GtkWidget *widget,
GimpSettingsBox *box)
{
g_signal_emit (box, settings_box_signals[EXPORT], 0);
}
static void
gimp_settings_box_favorite_callback (GtkWidget *query_box,
const gchar *string,
gpointer data)
{
GimpSettingsBox *box = GIMP_SETTINGS_BOX (data);
GimpConfig *config;
config = gimp_config_duplicate (GIMP_CONFIG (box->config));
gimp_object_set_name (GIMP_OBJECT (config), string);
gimp_container_add (box->container, GIMP_OBJECT (config));
g_object_unref (config);
gimp_settings_box_serialize (box);
}
/* public functions */
GtkWidget *
gimp_settings_box_new (Gimp *gimp,
GObject *config,
GimpContainer *container,
const gchar *filename)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (GIMP_IS_CONFIG (config), NULL);
g_return_val_if_fail (GIMP_IS_CONTAINER (container), NULL);
g_return_val_if_fail (filename != NULL, NULL);
return g_object_new (GIMP_TYPE_SETTINGS_BOX,
"gimp", gimp,
"config", config,
"container", container,
"filename", filename,
NULL);
}
void
gimp_settings_box_add_current (GimpSettingsBox *box)
{
GimpConfig *config = NULL;
GList *list;
g_return_if_fail (GIMP_IS_SETTINGS_BOX (box));
for (list = GIMP_LIST (box->container)->list; list; list = g_list_next (list))
{
guint t;
config = list->data;
g_object_get (config,
"time", &t,
NULL);
if (t > 0 && gimp_config_is_equal_to (config, GIMP_CONFIG (box->config)))
{
g_object_set (config,
"time", (guint) time (NULL),
NULL);
break;
}
}
if (! list)
{
config = gimp_config_duplicate (GIMP_CONFIG (box->config));
g_object_set (config,
"time", (guint) time (NULL),
NULL);
gimp_container_insert (box->container, GIMP_OBJECT (config), 0);
g_object_unref (config);
}
gimp_settings_box_serialize (box);
}

View File

@ -0,0 +1,70 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpsettingsbox.h
* Copyright (C) 2008 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_SETTINGS_BOX_H__
#define __GIMP_SETTINGS_BOX_H__
#define GIMP_TYPE_SETTINGS_BOX (gimp_settings_box_get_type ())
#define GIMP_SETTINGS_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_SETTINGS_BOX, GimpSettingsBox))
#define GIMP_SETTINGS_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_SETTINGS_BOX, GimpSettingsBoxClass))
#define GIMP_IS_SETTINGS_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_SETTINGS_BOX))
#define GIMP_IS_SETTINGS_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_SETTINGS_BOX))
#define GIMP_SETTINGS_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_SETTINGS_BOX, GimpSettingsBoxClass))
typedef struct _GimpSettingsBoxClass GimpSettingsBoxClass;
struct _GimpSettingsBox
{
GtkHBox parent_instance;
GtkWidget *combo;
GtkWidget *menu;
GtkWidget *import_item;
GtkWidget *export_item;
Gimp *gimp;
GObject *config;
GimpContainer *container;
gchar *filename;
};
struct _GimpSettingsBoxClass
{
GtkHBoxClass parent_class;
void (* import) (GimpSettingsBox *box);
void (* export) (GimpSettingsBox *box);
};
GType gimp_settings_box_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_settings_box_new (Gimp *gimp,
GObject *config,
GimpContainer *container,
const gchar *filename);
void gimp_settings_box_add_current (GimpSettingsBox *box);
#endif /* __GIMP_SETTINGS_BOX_H__ */

View File

@ -429,13 +429,12 @@ gimp_thumb_box_new (GimpContext *context)
gtk_widget_size_request (box->progress, &progress_requisition);
gtk_widget_set_size_request (box->info,
progress_requisition.width,
info_requisition.height);
-1, info_requisition.height);
gtk_widget_set_size_request (box->filename,
progress_requisition.width, -1);
gtk_widget_set_size_request (box->progress, -1,
progress_requisition.height);
gtk_widget_set_size_request (box->progress,
-1, progress_requisition.height);
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (box->progress), "");
return GTK_WIDGET (box);

View File

@ -569,7 +569,7 @@ gimp_ui_manager_ui_popup (GimpUIManager *manager,
GtkWidget *parent,
GimpMenuPositionFunc position_func,
gpointer position_data,
GtkDestroyNotify popdown_func,
GDestroyNotify popdown_func,
gpointer popdown_data)
{
GtkWidget *widget;
@ -937,9 +937,7 @@ gimp_ui_manager_item_key_press (GtkWidget *widget,
while (! help_id)
{
GtkWidget *menu_item;
menu_item = GTK_MENU_SHELL (widget)->active_menu_item;
GtkWidget *menu_item = GTK_MENU_SHELL (widget)->active_menu_item;
/* first, get the help page from the item...
*/
@ -1021,7 +1019,7 @@ gimp_ui_manager_item_key_press (GtkWidget *widget,
help_string = g_strdup (help_id);
}
gimp_help (manager->gimp, help_domain, help_string);
gimp_help (manager->gimp, NULL, help_domain, help_string);
g_free (help_domain);
g_free (help_string);

View File

@ -97,7 +97,7 @@ void gimp_ui_manager_ui_popup (GimpUIManager *manager,
GtkWidget *parent,
GimpMenuPositionFunc position_func,
gpointer position_data,
GtkDestroyNotify popdown_func,
GDestroyNotify popdown_func,
gpointer popdown_data);

View File

@ -175,6 +175,7 @@ typedef struct _GimpLanguageEntry GimpLanguageEntry;
typedef struct _GimpMessageBox GimpMessageBox;
typedef struct _GimpProgressBox GimpProgressBox;
typedef struct _GimpScaleButton GimpScaleButton;
typedef struct _GimpSettingsBox GimpSettingsBox;
typedef struct _GimpSizeBox GimpSizeBox;
typedef struct _GimpStrokeEditor GimpStrokeEditor;
typedef struct _GimpTemplateEditor GimpTemplateEditor;

View File

@ -18,7 +18,7 @@ LIBTOOLIZE=${LIBTOOLIZE-libtoolize}
AUTOCONF_REQUIRED_VERSION=2.54
AUTOMAKE_REQUIRED_VERSION=1.9.6
GLIB_REQUIRED_VERSION=2.16.0
INTLTOOL_REQUIRED_VERSION=0.31
INTLTOOL_REQUIRED_VERSION=0.35.5
LIBTOOL_REQUIRED_VERSION=1.5

View File

@ -8,7 +8,7 @@ AC_PREREQ(2.54)
m4_define([gimp_major_version], [2])
m4_define([gimp_minor_version], [5])
m4_define([gimp_micro_version], [1])
m4_define([gimp_micro_version], [2])
m4_define([gimp_real_version],
[gimp_major_version.gimp_minor_version.gimp_micro_version])
m4_define([gimp_version], [gimp_real_version])
@ -40,8 +40,8 @@ m4_define([gimp_stable],
m4_define([gimp_full_name], [GNU Image Manipulation Program])
# required versions of other packages
m4_define([babl_required_version], [0.0.21])
m4_define([gegl_required_version], [0.0.17])
m4_define([babl_required_version], [0.0.22])
m4_define([gegl_required_version], [0.0.18])
m4_define([glib_required_version], [2.16.1])
m4_define([gtk_required_version], [2.12.1])
m4_define([gdk_pixbuf_required_version], [gtk_required_version])
@ -49,7 +49,7 @@ m4_define([pangoft2_required_version], [1.18.0])
m4_define([fontconfig_required_version], [2.2.0])
m4_define([cairo_required_version], [1.4.10])
m4_define([gtkdoc_required_version], [1.0])
m4_define([gtkhtml2_required_version], [2.0.0])
m4_define([webkit_required_version], [0.1])
m4_define([alsa_required_version], [1.0.0])
m4_define([rsvg_required_version], [2.14.0])
m4_define([wmf_required_version], [0.2.8])
@ -406,7 +406,7 @@ fi
# language code to ALL_LINGUAS.
ALL_LINGUAS="ar bg ca ca@valencia cs da de dz el en_CA en_GB eo es et eu fa fi fr ga gl gu he hu hr id is it ja km ko lt mk ms nb ne nl nn oc pa pl pt pt_BR ro ru rw sk sl sr sr@Latn sv tr tt uk vi xh yi zh_CN zh_TW"
AC_PROG_INTLTOOL
IT_PROG_INTLTOOL(0.35.5)
AM_GLIB_GNU_GETTEXT
@ -939,7 +939,7 @@ if test "$gdk_target" = x11; then
AC_DEFINE(HAVE_XFIXES, 1,
[Define to 1 to if the XFIXES X extension is available])
LIBSCREENSHOT="$LIBSCREENSHOT $XFIXES_LIBS",
AC_MSG_RESULT([no]))
true)
else
enable_gimp_remote="no (building for $gdk_target)"
@ -1144,8 +1144,7 @@ if test "x$with_libexif" != xno && test -z "$LIBEXIF" && test -n "$LIBJPEG"; the
have_libexif=yes
PKG_CHECK_MODULES(EXIF, libexif >= exif_required_version,
AC_DEFINE(HAVE_EXIF, 1, [Define to 1 if libexif is available]),
have_libexif="no (libexif not found or too old)"
AC_MSG_RESULT([$have_libexif]))
have_libexif="no (libexif not found or too old)")
fi
AC_SUBST(EXIF_CFLAGS)
@ -1202,23 +1201,31 @@ AC_SUBST(XPM)
AC_SUBST(LIBXPM)
####################
# Check for gtkhtml2
####################
##################
# Check for webkit
##################
AC_ARG_WITH(gtkhtml2, [ --without-gtkhtml2 build without gtkhtml2 support])
AC_ARG_WITH(webkit, [ --without-webkit don't build the help-browser plug-in])
have_gtkhtml2=no
if test "x$with_gtkhtml2" != xno; then
PKG_CHECK_MODULES(GTKHTML2, libgtkhtml-2.0 >= gtkhtml2_required_version,
have_gtkhtml2=yes,
AC_MSG_RESULT([no])
have_gtkhtml2="no (GtkHtml2 not found)")
have_webkit=no
if test "x$with_webkit" != xno; then
PKG_CHECK_MODULES(WEBKIT, webkit-1.0 >= webkit_required_version,
have_webkit=yes,
have_webkit="no (WebKit not found)")
else
have_gtkhtml2="no (GtkHtml2 support disabled)"
have_webkit="no (WebKit support disabled)"
fi
AM_CONDITIONAL(BUILD_HELP_BROWSER, test "x$have_gtkhtml2" = xyes)
if test "x$have_webkit" = xyes; then
gimp_save_LIBS=$LIBS
LIBS="$LIBS $WEBKIT_LIBS"
AC_CHECK_LIB(webkit-1.0, webkit_web_view_set_zoom_level,
[AC_DEFINE(HAVE_WEBKIT_ZOOM_API, 1,
[Define to 1 if webkit has zoom API])])
LIBS=$gimp_save_LIBS
fi
AM_CONDITIONAL(BUILD_HELP_BROWSER, test "x$have_webkit" = xyes)
###################
@ -1233,7 +1240,6 @@ if test "x$with_librsvg" != xno; then
PKG_CHECK_MODULES(SVG, librsvg-2.0 >= rsvg_required_version,
SVG='svg$(EXEEXT)'
LIBSVG=$SVG_LIBS,
AC_MSG_RESULT([no])
have_librsvg="no (librsvg not found)")
else
have_librsvg="no (librsvg support disabled)"
@ -1274,7 +1280,6 @@ if test "x$with_poppler" != xno; then
LIBPOPPLER=$POPPLER_LIBS
AC_DEFINE(HAVE_POPPLER, 1, [Define to 1 if libpoppler is available])
have_poppler=yes,
AC_MSG_RESULT([no])
have_poppler="Using PostScript plug-in (libpoppler not found)")
else
have_poppler="Using PostScript plug-in (libpoppler support disabled)"
@ -1323,7 +1328,6 @@ fi
PKG_CHECK_MODULES(URI_GNOME_VFS, $gnome_vfs_modules,
have_gnomevfs=yes,
AC_MSG_RESULT([no])
have_gnomevfs="no (gnome-vfs-2.0 not found)")
fi
@ -1341,7 +1345,6 @@ if test "x$with_libcurl" != xno; then
PKG_CHECK_MODULES(URI_LIBCURL, $libcurl_modules,
have_libcurl=yes,
AC_MSG_RESULT([no])
have_libcurl="no (libcurl not found)")
fi
@ -1513,7 +1516,6 @@ if test "x$with_dbus" != xno; then
PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1 >= dbus_glib_required_version,
have_dbus_glib=yes,
AC_MSG_RESULT([no])
have_dbus_glib=no)
fi
@ -1549,7 +1551,6 @@ if test "x$have_linux_input" = xyes && test "x$have_dbus_glib" = xyes &&
test "x$with_hal" != xno; then
PKG_CHECK_MODULES(HAL, hal >= libhal_required_version,
have_libhal=yes,
AC_MSG_RESULT([no])
have_libhal="no (libhal not found)"
)
fi
@ -2095,7 +2096,7 @@ Optional Features:
Optional Plug-Ins:
Ascii Art: $have_libaa
Help Browser: $have_gtkhtml2
Help Browser: $have_webkit
LCMS: $have_lcms
JPEG: $jpeg_ok
MNG: $have_libmng

View File

@ -131,6 +131,8 @@ EXTRA_DIST = \
xbm/modifier-pattern-mask.xbm \
xbm/modifier-join.xbm \
xbm/modifier-join-mask.xbm \
xbm/modifier-select.xbm \
xbm/modifier-select-mask.xbm \
\
xbm/tool-rect-select.xbm \
xbm/tool-rect-select-mask.xbm \

View File

@ -1,6 +1,5 @@
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Type=Application
_Name=GNU Image Manipulation Program
_GenericName=Image Editor

View File

@ -1,3 +1,12 @@
2008-06-15 Michael Natterer <mitch@gimp.org>
* app/app-docs.sgml: GimpDBusService was in the wrong chapter.
2008-06-12 Sven Neumann <sven@gimp.org>
* libgimpwidgets/libgimpwidgets-sections.txt
* libgimpwidgets/tmpl/gimpstock.sgml: added new stock icon.
2008-06-04 Michael Natterer <mitch@gimp.org>
* app/Makefile.am

View File

@ -623,7 +623,6 @@
<chapter id="app-display-utils">
<title>Misc. Widgets &amp; Utilities</title>
<xi:include href="xml/gimpdbusservice.xml" />
<xi:include href="xml/gimpnavigationeditor.xml" />
<xi:include href="xml/gimpstatusbar.xml" />
</chapter>
@ -1003,6 +1002,7 @@
<xi:include href="xml/gimpcairo-wilber.xml" />
<xi:include href="xml/gimpclipboard.xml" />
<xi:include href="xml/gimpcursor.xml" />
<xi:include href="xml/gimpdbusservice.xml" />
<xi:include href="xml/gimpdnd.xml" />
<xi:include href="xml/gimpdnd-xds.xml" />
<xi:include href="xml/gimppixbuf.xml" />

View File

@ -853,6 +853,7 @@ GIMP_STOCK_INFO
GIMP_STOCK_QUESTION
GIMP_STOCK_WARNING
GIMP_STOCK_GEGL
GIMP_STOCK_USER_MANUAL
GIMP_STOCK_WILBER
GIMP_STOCK_WILBER_EEK
GIMP_STOCK_ZOOM_FOLLOW_WINDOW

View File

@ -1063,6 +1063,16 @@ RTL variant
<!-- ##### MACRO GIMP_STOCK_USER_MANUAL ##### -->
<para xml:base="../gimpstock.xml">
<inlinegraphic fileref="stock-user-manual-64.png" format="png"></inlinegraphic>
<inlinegraphic fileref="stock-user-manual-32.png" format="png"></inlinegraphic>
<inlinegraphic fileref="stock-user-manual-24.png" format="png"></inlinegraphic>
<inlinegraphic fileref="stock-user-manual-16.png" format="png"></inlinegraphic>
</para>
<!-- ##### MACRO GIMP_STOCK_WILBER ##### -->
<para xml:base="../gimpstock.xml">
<inlinegraphic fileref="stock-wilber-64.png" format="png"></inlinegraphic>

View File

@ -782,13 +782,25 @@ Sets the browser used by the help system. Possible values are gimp and
web-browser.
.TP
(web-browser "xdg-open %s")
(web-browser "firefox %s")
Sets the external web browser to be used. This can be an absolute path or the
name of an executable to search for in the user's PATH. If the command
contains '%s' it will be replaced with the URL, else the URL will be appended
to the command with a space separating the two. This is a single filename.
.TP
(user-manual-online no)
When enabled, the online user manual will be used by the help system.
Otherwise the locally installed copy is used. Possible values are yes and no.
.TP
(user-manual-online-uri "http://docs.gimp.org/2.5")
The location of the online user manual. This is used if 'user-manual-online'
is enabled. This is a string value.
.TP
(toolbox-window-hint utility)

View File

@ -620,7 +620,18 @@
# appended to the command with a space separating the two. This is a single
# filename.
#
# (web-browser "xdg-open %s")
# (web-browser "firefox %s")
# When enabled, the online user manual will be used by the help system.
# Otherwise the locally installed copy is used. Possible values are yes and
# no.
#
# (user-manual-online no)
# The location of the online user manual. This is used if
# 'user-manual-online' is enabled. This is a string value.
#
# (user-manual-online-uri "http://docs.gimp.org/2.5")
# The window type hint that is set on the toolbox. This may affect how your
# window manager decorates and handles the toolbox window. Possible values

View File

@ -274,6 +274,7 @@ static const GtkStockItem gimp_stock_items[] =
{ GIMP_STOCK_ERROR, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_INFO, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_QUESTION, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_USER_MANUAL, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_WARNING, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_WILBER, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_WILBER_EEK, NULL, 0, 0, LIBGIMP_DOMAIN },
@ -639,6 +640,7 @@ gimp_stock_menu_pixbufs[] =
{ GIMP_STOCK_WARNING, stock_warning_16 },
{ GIMP_STOCK_WILBER, stock_wilber_16 },
{ GIMP_TOILET_PAPER, stock_toilet_paper_16 },
{ GIMP_STOCK_USER_MANUAL, stock_user_manual_16 },
{ GIMP_STOCK_WEB, stock_web_16 },
{ GIMP_STOCK_VIDEO, stock_video_16 },
{ GIMP_STOCK_GEGL, stock_gegl_16 },
@ -668,11 +670,12 @@ gimp_stock_dnd_pixbufs[] =
{ GIMP_STOCK_CHANNEL_GRAY, stock_channel_gray_32 },
{ GIMP_STOCK_CHANNEL_INDEXED, stock_channel_indexed_32 },
{ GIMP_STOCK_CHANNEL_ALPHA, stock_channel_alpha_32 },
{ GIMP_STOCK_FLOATING_SELECTION, stock_floating_selection_32 },
{ GIMP_STOCK_LAYER_MASK, stock_layer_mask_32 },
{ GIMP_STOCK_IMAGE, stock_image_32 },
{ GIMP_STOCK_LAYER, stock_layer_32 },
{ GIMP_STOCK_TEXT_LAYER, stock_text_layer_32 },
{ GIMP_STOCK_FLOATING_SELECTION, stock_floating_selection_32 }
{ GIMP_STOCK_USER_MANUAL, stock_user_manual_32 }
};
static const struct
@ -689,15 +692,16 @@ gimp_stock_dialog_pixbufs[] =
{ GIMP_STOCK_CHANNEL_GRAY, stock_channel_gray_48 },
{ GIMP_STOCK_CHANNEL_INDEXED, stock_channel_indexed_48 },
{ GIMP_STOCK_CHANNEL_ALPHA, stock_channel_alpha_48 },
{ GIMP_STOCK_FLOATING_SELECTION, stock_floating_selection_48 },
{ GIMP_STOCK_LAYER_MASK, stock_layer_mask_48 },
{ GIMP_STOCK_IMAGE, stock_image_48 },
{ GIMP_STOCK_LAYER, stock_layer_48 },
{ GIMP_STOCK_TEXT_LAYER, stock_text_layer_48 },
{ GIMP_STOCK_FLOATING_SELECTION, stock_floating_selection_48 },
{ GIMP_STOCK_ERROR, stock_error_64 },
{ GIMP_STOCK_INFO, stock_info_64 },
{ GIMP_STOCK_QUESTION, stock_question_64 },
{ GIMP_STOCK_USER_MANUAL, stock_user_manual_64 },
{ GIMP_STOCK_WARNING, stock_warning_64 },
{ GIMP_STOCK_WILBER, stock_wilber_64 },
{ GIMP_STOCK_WILBER_EEK, stock_wilber_eek_64 },

View File

@ -263,6 +263,7 @@ G_BEGIN_DECLS
#define GIMP_STOCK_WILBER_EEK "gimp-wilber-eek"
#define GIMP_STOCK_FRAME "gimp-frame"
#define GIMP_STOCK_TEXTURE "gimp-texture"
#define GIMP_STOCK_USER_MANUAL "gimp-user-manual"
/* missing icons: */

View File

@ -841,17 +841,20 @@ midi_alsa_dispatch (GSource *source,
switch (event->type)
{
case SND_SEQ_EVENT_NOTEON:
midi_event (midi, midi->channel, event->data.note.note,
midi_event (midi, event->data.note.channel,
event->data.note.note,
(gdouble) event->data.note.velocity / 127.0);
break;
case SND_SEQ_EVENT_NOTEOFF:
midi_event (midi, midi->channel, event->data.note.note + 128,
midi_event (midi, event->data.note.channel,
event->data.note.note + 128,
(gdouble) event->data.note.velocity / 127.0);
break;
case SND_SEQ_EVENT_CONTROLLER:
midi_event (midi, midi->channel, event->data.control.param + 256,
midi_event (midi, event->data.control.channel,
event->data.control.param + 256,
(gdouble) event->data.control.value / 127.0);
break;

View File

@ -204,7 +204,7 @@ static void fp_create_table_entry (GtkWidget **box,
static void fp_frames_checkbutton_in_box (GtkWidget *vbox,
const gchar *label,
GtkSignalFunc func,
GCallback func,
GtkWidget *frame,
gboolean clicked);
@ -698,19 +698,19 @@ fp_create_control (void)
gtk_widget_show (box);
fp_frames_checkbutton_in_box (box, _("_Hue"),
GTK_SIGNAL_FUNC (fp_show_hide_frame),
G_CALLBACK (fp_show_hide_frame),
fp_frames.palette,
fpvals.visible_frames & HUE);
fp_frames_checkbutton_in_box (box, _("_Saturation"),
GTK_SIGNAL_FUNC (fp_show_hide_frame),
G_CALLBACK (fp_show_hide_frame),
fp_frames.satur,
fpvals.visible_frames & SATURATION);
fp_frames_checkbutton_in_box (box, _("_Value"),
GTK_SIGNAL_FUNC (fp_show_hide_frame),
G_CALLBACK (fp_show_hide_frame),
fp_frames.lnd,
fpvals.visible_frames & VALUE);
fp_frames_checkbutton_in_box (box, _("A_dvanced"),
GTK_SIGNAL_FUNC (fp_show_hide_frame),
G_CALLBACK (fp_show_hide_frame),
AW.window,
FALSE);
gtk_widget_show (frame);
@ -897,7 +897,7 @@ fp_create_preview (GtkWidget **preview,
static void
fp_frames_checkbutton_in_box (GtkWidget *vbox,
const gchar *label,
GtkSignalFunc function,
GCallback function,
GtkWidget *frame,
gboolean clicked)
{
@ -909,7 +909,7 @@ fp_frames_checkbutton_in_box (GtkWidget *vbox,
gtk_widget_show (button);
g_signal_connect (button, "clicked",
G_CALLBACK (function),
function,
frame);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), clicked);

View File

@ -1428,7 +1428,7 @@ smp_dialog (void)
gtk_widget_show (check_button);
g_signal_connect (check_button, "toggled",
(GtkSignalFunc)smp_toggle_callback ,
G_CALLBACK (smp_toggle_callback),
&g_di.sample_show_selection);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
g_di.sample_show_selection);
@ -1439,7 +1439,7 @@ smp_dialog (void)
gtk_widget_show (check_button);
g_signal_connect (check_button, "toggled",
(GtkSignalFunc)smp_toggle_callback ,
G_CALLBACK (smp_toggle_callback),
&g_di.sample_show_color);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
g_di.sample_show_color);

View File

@ -1,13 +1,14 @@
## Process this file with automake to produce Makefile.in
libgimphelp = $(top_builddir)/plug-ins/help/libgimphelp.a
libgimpui = $(top_builddir)/libgimp/libgimpui-$(GIMP_API_VERSION).la
libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSION).la
libgimp = $(top_builddir)/libgimp/libgimp-$(GIMP_API_VERSION).la
libgimpcolor = $(top_builddir)/libgimpcolor/libgimpcolor-$(GIMP_API_VERSION).la
libgimpbase = $(top_builddir)/libgimpbase/libgimpbase-$(GIMP_API_VERSION).la
libgimpcolor = $(top_builddir)/libgimpcolor/libgimpcolor-$(GIMP_API_VERSION).la
libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
libgimpmath = $(top_builddir)/libgimpmath/libgimpmath-$(GIMP_API_VERSION).la
libgimpui = $(top_builddir)/libgimp/libgimpui-$(GIMP_API_VERSION).la
libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSION).la
libgimphelp = $(top_builddir)/plug-ins/help/libgimphelp.a
if OS_WIN32
mwindows = -mwindows
@ -21,7 +22,7 @@ libexec_PROGRAMS = help-browser
INCLUDES = \
-I$(top_srcdir) \
$(GTKHTML2_CFLAGS) \
$(WEBKIT_CFLAGS) \
-I$(includedir)
LDADD = \
@ -33,12 +34,12 @@ LDADD = \
$(libgimpcolor) \
$(libgimpmath) \
$(libgimpbase) \
$(GTKHTML2_LIBS) \
$(WEBKIT_LIBS) \
$(GIO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
help_browser_sources = \
help_browser_SOURCES = \
gimpthrobber.c \
gimpthrobber.h \
gimpthrobberaction.c \
@ -46,21 +47,5 @@ help_browser_sources = \
help-browser.c \
dialog.c \
dialog.h \
queue.c \
queue.h \
uri.c \
uri.h
help_browser_built_sources = logo-pixbuf.h
dialog.c: $(help_browser_built_sources)
help_browser_SOURCES = \
$(help_browser_built_sources) $(help_browser_sources)
$(srcdir)/logo-pixbuf.h: wilber-reading.png
$(GDK_PIXBUF_CSOURCE) --raw --name=logo_data $< > $(@F)
EXTRA_DIST = wilber-reading.png
CLEANFILES = logo-pixbuf.h

File diff suppressed because it is too large Load Diff

View File

@ -27,12 +27,10 @@
void browser_dialog_open (void);
void browser_dialog_load (const gchar *ref,
gboolean add_to_queue);
void browser_dialog_load (const gchar *uri);
void browser_dialog_make_index (GimpHelpDomain *domain,
GimpHelpLocale *locale);
void browser_dialog_goto_index (const gchar *ref);
#endif /* ! __DIALOG_H__ */

View File

@ -80,7 +80,7 @@ struct _GimpThrobberPrivate
GType
gimp_throbber_get_type (void)
{
static GtkType type = 0;
static GType type = 0;
if (!type)
{
@ -101,6 +101,7 @@ gimp_throbber_get_type (void)
"GimpThrobber",
&type_info, 0);
}
return type;
}
@ -171,6 +172,7 @@ gimp_throbber_construct_contents (GtkToolItem *tool_item)
{
GimpThrobber *button = GIMP_THROBBER (tool_item);
GtkWidget *image;
GtkToolbarStyle style;
if (button->priv->image && button->priv->image->parent)
gtk_container_remove (GTK_CONTAINER (button->priv->image->parent),
@ -179,11 +181,18 @@ gimp_throbber_construct_contents (GtkToolItem *tool_item)
if (gtk_bin_get_child (GTK_BIN (button->priv->button)))
gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button->priv->button)));
if (gtk_tool_item_get_toolbar_style (tool_item) == GTK_TOOLBAR_TEXT)
style = gtk_tool_item_get_toolbar_style (tool_item);
if (style == GTK_TOOLBAR_TEXT)
{
image = gtk_image_new_from_stock (button->priv->stock_id,
GTK_ICON_SIZE_MENU);
}
else if (style == GTK_TOOLBAR_ICONS)
{
image = gtk_image_new_from_stock (button->priv->stock_id,
GTK_ICON_SIZE_LARGE_TOOLBAR);
}
else if (button->priv->image)
{
image = button->priv->image;
@ -191,7 +200,7 @@ gimp_throbber_construct_contents (GtkToolItem *tool_item)
else
{
image = gtk_image_new_from_stock (button->priv->stock_id,
GTK_ICON_SIZE_BUTTON);
GTK_ICON_SIZE_DND);
}
gtk_container_add (GTK_CONTAINER (button->priv->button), image);

View File

@ -60,6 +60,12 @@ static void temp_proc_run (const gchar *name,
gint *nreturn_vals,
GimpParam **return_vals);
static gboolean help_browser_show_help (const gchar *help_domain,
const gchar *help_locales,
const gchar *help_id);
static GimpHelpProgress * help_browser_progress_new (void);
/* local variables */
@ -209,7 +215,6 @@ temp_proc_run (const gchar *name,
/* make sure all the arguments are there */
if (nparams == 3)
{
GimpHelpDomain *domain;
const gchar *help_domain = GIMP_HELP_DEFAULT_DOMAIN;
const gchar *help_locales = NULL;
const gchar *help_id = GIMP_HELP_DEFAULT_ID;
@ -223,36 +228,95 @@ temp_proc_run (const gchar *name,
if (param[2].data.d_string && strlen (param[2].data.d_string))
help_id = param[2].data.d_string;
domain = gimp_help_lookup_domain (help_domain);
if (domain)
{
GList *locales = gimp_help_parse_locales (help_locales);
GimpHelpLocale *locale;
gchar *full_uri;
gboolean fatal_error;
full_uri = gimp_help_domain_map (domain, locales, help_id, NULL,
&locale, &fatal_error);
if (full_uri)
{
browser_dialog_load (full_uri, TRUE);
browser_dialog_make_index (domain, locale);
browser_dialog_goto_index (full_uri);
g_free (full_uri);
}
else if (fatal_error)
if (! help_browser_show_help (help_domain, help_locales, help_id))
{
gtk_main_quit ();
}
g_list_foreach (locales, (GFunc) g_free, NULL);
g_list_free (locales);
}
}
values[0].type = GIMP_PDB_STATUS;
values[0].data.d_status = status;
}
static gboolean
help_browser_show_help (const gchar *help_domain,
const gchar *help_locales,
const gchar *help_id)
{
GimpHelpDomain *domain;
gboolean success = TRUE;
domain = gimp_help_lookup_domain (help_domain);
if (domain)
{
GimpHelpProgress *progress = NULL;
GimpHelpLocale *locale;
GList *locales;
gchar *uri;
gboolean fatal_error;
locales = gimp_help_parse_locales (help_locales);
if (! g_str_has_prefix (domain->help_uri, "file:"))
progress = help_browser_progress_new ();
uri = gimp_help_domain_map (domain, locales, help_id,
progress, &locale, &fatal_error);
if (progress)
gimp_help_progress_free (progress);
g_list_foreach (locales, (GFunc) g_free, NULL);
g_list_free (locales);
if (uri)
{
browser_dialog_make_index (domain, locale);
browser_dialog_load (uri);
g_free (uri);
}
else if (fatal_error)
{
success = FALSE;
}
}
return success;
}
static void
help_browser_progress_start (const gchar *message,
gboolean cancelable,
gpointer user_data)
{
gimp_progress_init (message);
}
static void
help_browser_progress_update (gdouble value,
gpointer user_data)
{
gimp_progress_update (value);
}
static void
help_browser_progress_end (gpointer user_data)
{
gimp_progress_end ();
}
static GimpHelpProgress *
help_browser_progress_new (void)
{
static const GimpHelpProgressVTable vtable =
{
help_browser_progress_start,
help_browser_progress_end,
help_browser_progress_update
};
return gimp_help_progress_new (&vtable, NULL);
}

View File

@ -1,291 +0,0 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* The GIMP Help Browser
* Copyright (C) 1999-2005 Sven Neumann <sven@gimp.org>
* Michael Natterer <mitch@gimp.org>
*
* queue.c - a history queue
*
* 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 <glib.h>
#include "queue.h"
struct _Queue
{
GList *queue;
GList *current;
};
typedef struct
{
gchar *uri;
gchar *title;
gdouble pos;
} Item;
static Item *
item_new (const gchar *uri)
{
Item *item = g_slice_new0 (Item);
item->uri = g_strdup (uri);
return item;
}
static void
item_free (Item *item)
{
g_free (item->uri);
g_free (item->title);
g_slice_free (Item, item);
}
Queue *
queue_new (void)
{
return g_slice_new0 (Queue);
}
void
queue_free (Queue *h)
{
g_return_if_fail (h != NULL);
/* needs to free data in list as well! */
if (h->queue)
{
g_list_foreach (h->queue, (GFunc) g_free, NULL);
g_list_free (h->queue);
}
g_slice_free (Queue, h);
}
void
queue_move_prev (Queue *h,
gint skip)
{
if (!h || !h->queue || (h->current == g_list_first (h->queue)))
return;
h->current = g_list_previous (h->current);
while (h->current && skip--)
h->current = g_list_previous (h->current);
}
void
queue_move_next (Queue *h,
gint skip)
{
if (!h || !h->queue || (h->current == g_list_last (h->queue)))
return;
h->current = g_list_next (h->current);
while (h->current && skip--)
h->current = g_list_next (h->current);
}
const gchar *
queue_prev (Queue *h,
gint skip,
gdouble *pos)
{
GList *p;
Item *item;
if (!h || !h->queue || (h->current == g_list_first (h->queue)))
return NULL;
p = g_list_previous (h->current);
while (p && skip--)
p = g_list_previous (p);
if (!p)
return NULL;
item = p->data;
if (pos)
*pos = item->pos;
return (const gchar *) item->uri;
}
const gchar *
queue_next (Queue *h,
gint skip,
gdouble *pos)
{
GList *p;
Item *item;
if (!h || !h->queue || (h->current == g_list_last(h->queue)))
return NULL;
p = g_list_next (h->current);
while (p && skip--)
p = g_list_next (p);
if (!p)
return NULL;
item = p->data;
if (pos)
*pos = item->pos;
return (const gchar *) item->uri;
}
void
queue_add (Queue *h,
const gchar *uri)
{
GList *trash = NULL;
g_return_if_fail (h != NULL);
g_return_if_fail (uri != NULL);
if (h->current)
{
trash = h->current->next;
h->current->next = NULL;
}
h->queue = g_list_append (h->queue, item_new (uri));
h->current = g_list_last (h->queue);
if (trash)
{
g_list_foreach (trash, (GFunc) item_free, NULL);
g_list_free (trash);
}
}
void
queue_set_title (Queue *h,
const gchar *title)
{
Item *item;
g_return_if_fail (h != NULL);
g_return_if_fail (title != NULL);
if (! h->current || ! h->current->data)
return;
item = h->current->data;
if (item->title)
g_free (item->title);
item->title = g_strdup (title);
}
void
queue_set_scroll_offset (Queue *h,
gdouble pos)
{
Item *item;
g_return_if_fail (h != NULL);
if (! h->current || ! h->current->data)
return;
item = h->current->data;
item->pos = pos;
}
gboolean
queue_has_next (Queue *h)
{
if (!h || !h->queue || (h->current == g_list_last (h->queue)))
return FALSE;
return (g_list_next (h->current) != NULL);
}
gboolean
queue_has_prev (Queue *h)
{
if (!h || !h->queue || (h->current == g_list_first (h->queue)))
return FALSE;
return (g_list_previous (h->current) != NULL);
}
GList *
queue_list_next (Queue *h)
{
GList *result = NULL;
if (queue_has_next (h))
{
GList *list;
for (list = g_list_next (h->current);
list;
list = g_list_next (list))
{
Item *item = list->data;
result = g_list_prepend (result,
item->title ? item->title : item->uri);
}
}
return g_list_reverse (result);
}
GList *
queue_list_prev (Queue *h)
{
GList *result = NULL;
if (queue_has_prev (h))
{
GList *list;
for (list = g_list_previous (h->current);
list;
list = g_list_previous (list))
{
Item *item = list->data;
result = g_list_prepend (result,
item->title ? item->title : item->uri);
}
}
return g_list_reverse (result);
}

View File

@ -1,56 +0,0 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* The GIMP Help Browser
* Copyright (C) 1999 Sven Neumann <sven@gimp.org>
* Michael Natterer <mitch@gimp.org>
*
* queue.h - a history queue
*
* 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_HELP_QUEUE_H_
#define _GIMP_HELP_QUEUE_H_
typedef struct _Queue Queue;
Queue * queue_new (void);
void queue_free (Queue *queue);
void queue_add (Queue *queue,
const gchar *uri);
void queue_set_title (Queue *queue,
const gchar *title);
void queue_set_scroll_offset (Queue *queue,
gdouble pos);
const gchar * queue_prev (Queue *queue,
gint skip,
gdouble *pos);
const gchar * queue_next (Queue *queue,
gint skip,
gdouble *pos);
void queue_move_prev (Queue *queue,
gint skip);
void queue_move_next (Queue *queue,
gint skip);
gboolean queue_has_next (Queue *queue);
gboolean queue_has_prev (Queue *queue);
GList * queue_list_prev (Queue *queue);
GList * queue_list_next (Queue *queue);
#endif /* _GIMP_HELP_QUEUE_H_ */

View File

@ -55,8 +55,6 @@ gimp_help_init (gint num_domain_names,
gint num_domain_uris,
gchar **domain_uris)
{
const gchar *default_env_domain_uri;
gchar *default_domain_uri;
gint i;
if (num_domain_names != num_domain_uris)
@ -66,31 +64,9 @@ gimp_help_init (gint num_domain_names,
return FALSE;
}
/* set default values */
default_env_domain_uri = g_getenv (GIMP_HELP_ENV_URI);
if (default_env_domain_uri)
{
default_domain_uri = g_strdup (default_env_domain_uri);
}
else
{
gchar *help_root = g_build_filename (gimp_data_directory (),
GIMP_HELP_PREFIX,
NULL);
default_domain_uri = g_filename_to_uri (help_root, NULL, NULL);
g_free (help_root);
}
gimp_help_register_domain (GIMP_HELP_DEFAULT_DOMAIN, default_domain_uri);
for (i = 0; i < num_domain_names; i++)
gimp_help_register_domain (domain_names[i], domain_uris[i]);
g_free (default_domain_uri);
return TRUE;
}
@ -160,7 +136,7 @@ gimp_help_parse_locales (const gchar *help_locales)
if (*s)
locales = g_list_append (locales, g_strdup (s));
/* if the list doesn't contain the default domain yet, append it */
/* if the list doesn't contain the default locale yet, append it */
for (list = locales; list; list = list->next)
if (strcmp ((const gchar *) list->data, GIMP_HELP_DEFAULT_LOCALE) == 0)
break;

View File

@ -64,6 +64,8 @@ gimp_help_locale_new (const gchar *locale_id)
void
gimp_help_locale_free (GimpHelpLocale *locale)
{
g_return_if_fail (locale != NULL);
if (locale->help_id_mapping)
g_hash_table_destroy (locale->help_id_mapping);
@ -79,6 +81,9 @@ const gchar *
gimp_help_locale_map (GimpHelpLocale *locale,
const gchar *help_id)
{
g_return_val_if_fail (locale != NULL, NULL);
g_return_val_if_fail (help_id != NULL, NULL);
if (locale->help_id_mapping)
{
GimpHelpItem *item = g_hash_table_lookup (locale->help_id_mapping,

View File

@ -71,6 +71,8 @@ static void load_help (const gchar *procedure,
const gchar *help_id);
static gboolean load_help_idle (gpointer data);
static GimpHelpProgress * load_help_progress_new (void);
/* local variables */
@ -263,35 +265,43 @@ load_help_idle (gpointer data)
if (domain)
{
GimpHelpProgress *progress = NULL;
GList *locales;
gchar *full_uri;
gchar *uri;
gboolean fatal_error;
locales = gimp_help_parse_locales (idle_help->help_locales);
full_uri = gimp_help_domain_map (domain, locales, idle_help->help_id,
NULL, NULL, &fatal_error);
if (! g_str_has_prefix (domain->help_uri, "file:"))
progress = load_help_progress_new ();
uri = gimp_help_domain_map (domain, locales, idle_help->help_id,
progress, NULL, &fatal_error);
if (progress)
gimp_help_progress_free (progress);
g_list_foreach (locales, (GFunc) g_free, NULL);
g_list_free (locales);
if (full_uri)
if (uri)
{
GimpParam *return_vals;
gint n_return_vals;
#ifdef GIMP_HELP_DEBUG
g_printerr ("help: calling '%s' for '%s'\n",
idle_help->procedure, full_uri);
idle_help->procedure, uri);
#endif
return_vals = gimp_run_procedure (idle_help->procedure,
&n_return_vals,
GIMP_PDB_STRING, full_uri,
GIMP_PDB_STRING, uri,
GIMP_PDB_END);
gimp_destroy_params (return_vals, n_return_vals);
g_free (full_uri);
g_free (uri);
}
else if (fatal_error)
{
@ -308,3 +318,37 @@ load_help_idle (gpointer data)
return FALSE;
}
static void
load_help_progress_start (const gchar *message,
gboolean cancelable,
gpointer user_data)
{
gimp_progress_init (message);
}
static void
load_help_progress_update (gdouble value,
gpointer user_data)
{
gimp_progress_update (value);
}
static void
load_help_progress_end (gpointer user_data)
{
gimp_progress_end ();
}
static GimpHelpProgress *
load_help_progress_new (void)
{
static const GimpHelpProgressVTable vtable =
{
load_help_progress_start,
load_help_progress_end,
load_help_progress_update
};
return gimp_help_progress_new (&vtable, NULL);
}

View File

@ -1309,10 +1309,10 @@ dialog(GimpDrawable *drawable)
gtk_box_pack_start(GTK_BOX(hbox), tools, FALSE, FALSE, 0);
_preview = make_preview(drawable);
add_preview_motion_event(_preview, (GtkSignalFunc) preview_move);
add_enter_notify_event(_preview, (GtkSignalFunc) preview_enter);
add_leave_notify_event(_preview, (GtkSignalFunc) preview_leave);
add_preview_button_press_event(_preview, (GtkSignalFunc) button_press);
add_preview_motion_event(_preview, G_CALLBACK (preview_move));
add_enter_notify_event(_preview, G_CALLBACK (preview_enter));
add_leave_notify_event(_preview, G_CALLBACK (preview_leave));
add_preview_button_press_event(_preview, G_CALLBACK (button_press));
gtk_container_add(GTK_CONTAINER(hbox), _preview->window);
object_list_add_geometry_cb(_shapes, geometry_changed, NULL);

View File

@ -1,3 +1,11 @@
2008-06-11 Alexandre Prokoudine <alexandre.prokoudine@gmail.com>
* ru.po: updated and improved Russian translation.
2008-06-11 Sven Neumann <sven@gimp.org>
* de.po: updated German translation.
2008-06-06 Sven Neumann <sven@gimp.org>
* POTFILES.skip: fixed the insanity using a new feature in

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gimp-plug-ins trunk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-06-02 21:41+0400\n"
"PO-Revision-Date: 2008-06-02 21:45+0300\n"
"POT-Creation-Date: 2008-06-11 20:14+0400\n"
"PO-Revision-Date: 2008-06-11 21:22+0300\n"
"Last-Translator: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"MIME-Version: 1.0\n"
@ -57,7 +57,7 @@ msgstr "Неправильная цветовая карта"
#: ../plug-ins/common/sunras.c:378
#: ../plug-ins/common/svg.c:321
#: ../plug-ins/common/svg.c:702
#: ../plug-ins/common/tga.c:423
#: ../plug-ins/common/tga.c:428
#: ../plug-ins/common/tiff-load.c:288
#: ../plug-ins/common/xbm.c:720
#: ../plug-ins/common/xwd.c:420
@ -69,8 +69,8 @@ msgstr "Неправильная цветовая карта"
#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1863
#: ../plug-ins/fractal-explorer/fractal-explorer.c:931
#: ../plug-ins/gfig/gfig.c:434
#: ../plug-ins/help/gimphelplocale.c:217
#: ../plug-ins/help/gimphelplocale.c:233
#: ../plug-ins/help/gimphelplocale.c:222
#: ../plug-ins/help/gimphelplocale.c:238
#: ../plug-ins/ico/ico-load.c:651
#: ../plug-ins/ico/ico-load.c:728
#: ../plug-ins/jpeg/jpeg-load.c:111
@ -105,7 +105,7 @@ msgstr "Не удалось открыть '%s' для записи: %s"
#: ../plug-ins/common/postscript.c:1029
#: ../plug-ins/common/raw.c:650
#: ../plug-ins/common/sunras.c:470
#: ../plug-ins/common/tga.c:428
#: ../plug-ins/common/tga.c:433
#: ../plug-ins/common/tiff-load.c:570
#: ../plug-ins/common/wmf.c:992
#: ../plug-ins/common/xbm.c:725
@ -188,7 +188,7 @@ msgstr "Неподдерживаемая высота изображения: %d
#: ../plug-ins/common/raw.c:691
#: ../plug-ins/common/smooth-palette.c:257
#: ../plug-ins/common/sunras.c:956
#: ../plug-ins/common/tga.c:1029
#: ../plug-ins/common/tga.c:1034
#: ../plug-ins/common/tiff-load.c:963
#: ../plug-ins/common/tile.c:267
#: ../plug-ins/common/xbm.c:880
@ -249,7 +249,7 @@ msgstr "Альфа-канал будет проигнорирован."
#: ../plug-ins/common/raw.c:555
#: ../plug-ins/common/sphere-designer.c:2112
#: ../plug-ins/common/sunras.c:544
#: ../plug-ins/common/tga.c:1133
#: ../plug-ins/common/tga.c:1138
#: ../plug-ins/common/tiff-save.c:671
#: ../plug-ins/common/xbm.c:1016
#: ../plug-ins/common/xwd.c:598
@ -285,7 +285,7 @@ msgstr "Не удалось открыть '%s' для записи: %s"
#: ../plug-ins/common/postscript.c:1201
#: ../plug-ins/common/psd-save.c:1564
#: ../plug-ins/common/sunras.c:549
#: ../plug-ins/common/tga.c:1138
#: ../plug-ins/common/tga.c:1143
#: ../plug-ins/common/tiff-save.c:681
#: ../plug-ins/common/xbm.c:1021
#: ../plug-ins/common/xpm.c:623
@ -3445,7 +3445,7 @@ msgstr "Сборка изображений"
#: ../plug-ins/common/film.c:425
#: ../plug-ins/common/guillotine.c:185
#: ../plug-ins/help-browser/dialog.c:1146
#: ../plug-ins/help-browser/dialog.c:1038
msgid "Untitled"
msgstr "Безымянное"
@ -6228,19 +6228,19 @@ msgstr "Planar (RRR,GGG,BBB)"
msgid "Indexed Palette Type"
msgstr "Тип индексированной палитры"
#: ../plug-ins/common/red-eye-removal.c:106
#: ../plug-ins/common/red-eye-removal.c:105
msgid "Remove the red eye effect caused by camera flashes"
msgstr "Убрать эффект красных глаз, создаваемый фотовспышкой"
#: ../plug-ins/common/red-eye-removal.c:117
#: ../plug-ins/common/red-eye-removal.c:116
msgid "_Red Eye Removal..."
msgstr "Удалить эффект _красных глаз..."
#: ../plug-ins/common/red-eye-removal.c:144
#: ../plug-ins/common/red-eye-removal.c:142
msgid "Red Eye Removal"
msgstr "Удаление эффекта красных глаз"
#: ../plug-ins/common/red-eye-removal.c:172
#: ../plug-ins/common/red-eye-removal.c:170
#: ../plug-ins/common/unsharp-mask.c:706
#: ../plug-ins/common/wind.c:1006
#: ../plug-ins/imagemap/imap_preferences.c:441
@ -6248,15 +6248,15 @@ msgstr "Удаление эффекта красных глаз"
msgid "_Threshold:"
msgstr "_Порог:"
#: ../plug-ins/common/red-eye-removal.c:178
#: ../plug-ins/common/red-eye-removal.c:176
msgid "Threshold for the red eye color to remove."
msgstr "Порог удаляемого цвета красных глаз"
#: ../plug-ins/common/red-eye-removal.c:183
#: ../plug-ins/common/red-eye-removal.c:181
msgid "Manually selecting the eyes may improve the results."
msgstr "Выделение области глаз может улучшить результат"
#: ../plug-ins/common/red-eye-removal.c:316
#: ../plug-ins/common/red-eye-removal.c:301
msgid "Removing red eye"
msgstr "Удалить эффект красных глаз"
@ -7211,34 +7211,41 @@ msgstr "Импортировать элементы контура из SVG, т
msgid "Merge imported paths"
msgstr "Объединить импортированные контуры"
#: ../plug-ins/common/tga.c:238
#: ../plug-ins/common/tga.c:257
#: ../plug-ins/common/tga.c:243
#: ../plug-ins/common/tga.c:262
msgid "TarGA image"
msgstr "TarGA image"
#: ../plug-ins/common/tga.c:434
#: ../plug-ins/common/tga.c:439
#, c-format
msgid "Cannot read footer from '%s'"
msgstr "Невозможно прочесть сноску из \"%s\""
#: ../plug-ins/common/tga.c:450
#: ../plug-ins/common/tga.c:455
#, c-format
msgid "Cannot read extension from '%s'"
msgstr "Невозможно прочесть расширение из %s"
#: ../plug-ins/common/tga.c:1323
#: ../plug-ins/common/tga.c:1336
msgid "Save as TGA"
msgstr "Сохранить как TGA"
#. rle
#: ../plug-ins/common/tga.c:1346
#: ../plug-ins/common/tga.c:1359
msgid "_RLE compression"
msgstr "RLE сжатие"
#. origin
#: ../plug-ins/common/tga.c:1356
msgid "Or_igin at bottom left"
msgstr "Начало внизу слева"
#: ../plug-ins/common/tga.c:1373
msgid "Or_igin:"
msgstr "_Начало координат:"
#: ../plug-ins/common/tga.c:1377
msgid "Bottom left"
msgstr "Снизу слева"
#: ../plug-ins/common/tga.c:1378
msgid "Top left"
msgstr "Вверху слева"
#: ../plug-ins/common/threshold-alpha.c:85
msgid "Make transparency all-or-nothing"
@ -8104,13 +8111,14 @@ msgstr ""
"Необходимо указать его в диалоге настройки программы."
#: ../plug-ins/common/web-browser.c:161
#, fuzzy, c-format
#, c-format
msgid ""
"Could not parse the web browser command specified in the Preferences dialog:\n"
"\n"
"%s"
msgstr ""
"Невозможно разобрать команду указанного просмотрщика:\n"
"\n"
"%s"
#: ../plug-ins/common/web-browser.c:175
@ -10241,38 +10249,46 @@ msgstr "Случайное зерно:"
msgid "_Second Flares"
msgstr "Вторичные вспышки"
#: ../plug-ins/help-browser/dialog.c:219
#: ../plug-ins/help-browser/dialog.c:197
msgid "GIMP Help Browser"
msgstr "Просмотрщик справки GIMP"
#: ../plug-ins/help-browser/dialog.c:314
#: ../plug-ins/help-browser/dialog.c:292
msgid "Drag and drop this icon to a web browser"
msgstr "Перетащите эту иконку в веб-браузер"
#: ../plug-ins/help-browser/dialog.c:705
#: ../plug-ins/help-browser/dialog.c:576
msgid "Go back one page"
msgstr "Назад на одну страницу"
#: ../plug-ins/help-browser/dialog.c:710
#: ../plug-ins/help-browser/dialog.c:581
msgid "Go forward one page"
msgstr "Вперед на одну страницу"
#: ../plug-ins/help-browser/dialog.c:715
#: ../plug-ins/help-browser/dialog.c:586
msgid "Go to the index page"
msgstr "К содержанию"
#: ../plug-ins/help-browser/dialog.c:750
#: ../plug-ins/help-browser/dialog.c:591
msgid "Reload"
msgstr "Обновить"
#: ../plug-ins/help-browser/dialog.c:591
msgid "Reload current page"
msgstr "Повторно загрузить эту страницу"
#: ../plug-ins/help-browser/dialog.c:596
msgid "Stop"
msgstr "Остановить"
#: ../plug-ins/help-browser/dialog.c:596
msgid "Stop loading this page"
msgstr "Остановить загрузку этой страницы"
#: ../plug-ins/help-browser/dialog.c:631
msgid "Visit the GIMP documentation website"
msgstr "Посетите сайт документации GIMP"
#: ../plug-ins/help-browser/dialog.c:826
msgid "Document not found"
msgstr "Документ не найден"
#: ../plug-ins/help-browser/dialog.c:828
msgid "The requested URL could not be loaded:"
msgstr "Невозможно открыть запрашиваемый URL:"
#: ../plug-ins/help/gimphelpdomain.c:180
msgid "The GIMP user manual is not available."
msgstr "Руководство по GIMP недоступно"
@ -10294,12 +10310,12 @@ msgstr "Пожалуйста, проверьте вашу установку."
msgid "Help ID '%s' unknown"
msgstr "Неизвестный ID в системе помощи - '%s'"
#: ../plug-ins/help/gimphelplocale.c:204
#: ../plug-ins/help/gimphelplocale.c:209
#, c-format
msgid "Loading index from '%s'"
msgstr "Загружается содержание из '%s'"
#: ../plug-ins/help/gimphelplocale.c:261
#: ../plug-ins/help/gimphelplocale.c:266
#, c-format
msgid ""
"Parse error in '%s':\n"
@ -12603,6 +12619,12 @@ msgstr "Ошибка: невозможно прочитать файл свой
msgid "Error: XJT property file '%s' is empty."
msgstr "Ошибка: файл свойств XJT '%s' пуст"
#~ msgid "Or_igin at bottom left"
#~ msgstr "Начало внизу слева"
#~ msgid "Document not found"
#~ msgstr "Документ не найден"
#~ msgid "The requested URL could not be loaded:"
#~ msgstr "Невозможно открыть запрашиваемый URL:"
#~ msgid "checkbutton|Snap to grid"
#~ msgstr "Прилипать к сетке"
#~ msgid "_Smoothing:"

0
po-plug-ins/sl.po Executable file → Normal file
View File

View File

@ -1,3 +1,11 @@
2008-06-14 Sven Neumann <sven@gimp.org>
* POTFILES.in: added app/widgets/gimpsettingsbox.c.
2008-06-11 Alexandre Prokoudine <alexandre.prokoudine@gmail.com>
* ru.po: updated and improved Russian translation.
2008-06-06 Sven Neumann <sven@gimp.org>
* POTFILES.skip: fixed the insanity using a new feature in

View File

@ -420,6 +420,7 @@ app/widgets/gimpprogressdialog.c
app/widgets/gimppropwidgets.c
app/widgets/gimpselectiondata.c
app/widgets/gimpselectioneditor.c
app/widgets/gimpsettingsbox.c
app/widgets/gimpsizebox.c
app/widgets/gimpstrokeeditor.c
app/widgets/gimptemplateeditor.c

413
po/ru.po

File diff suppressed because it is too large Load Diff

View File

@ -117,6 +117,7 @@ STOCK_MENU_IMAGES = \
stock-tools-16.png \
stock-transparency-16.png \
stock-undo-history-16.png \
stock-user-manual-16.png \
stock-video-16.png \
stock-warning-16.png \
stock-wilber-16.png \
@ -207,11 +208,12 @@ STOCK_BUTTON_IMAGES = \
stock-tool-options-24.png \
stock-tools-24.png \
stock-transparency-24.png \
stock-undo-history-24.png \
stock-user-manual-24.png \
stock-vcenter-24.png \
stock-vchain-24.png \
stock-vchain-broken-24.png \
stock-video-24.png \
stock-undo-history-24.png \
stock-warning-24.png \
stock-web-24.png \
stock-wilber-22.png
@ -228,7 +230,8 @@ STOCK_DND_IMAGES = \
stock-image-32.png \
stock-layer-32.png \
stock-layer-mask-32.png \
stock-text-layer-32.png
stock-text-layer-32.png \
stock-user-manual-32.png
STOCK_DIALOG_IMAGES = \
stock-channel-48.png \
@ -248,6 +251,7 @@ STOCK_DIALOG_IMAGES = \
stock-question-64.png \
stock-text-layer-48.png \
stock-texture-64.png \
stock-user-manual-64.png \
stock-warning-64.png \
stock-wilber-64.png \
stock-wilber-eek-64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -49,7 +49,7 @@ HELP
manager->current_plug_in->prog,
NULL);
gimp_help (gimp, help_domain, help_id);
gimp_help (gimp, progress, help_domain, help_id);
}
CODE
);