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
313
ChangeLog
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
@ -65,10 +66,11 @@ TESTS = test-config
|
|||
test_config_DEPENDENCIES = $(gimpconfig_libs)
|
||||
|
||||
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)xcf_init \
|
||||
-u $(SYMPREFIX)internal_procs_init \
|
||||
-u $(SYMPREFIX)gimp_coords_mix \
|
||||
-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) \
|
||||
|
|
|
@ -34,15 +34,18 @@
|
|||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
#define DEFAULT_GIMP_HELP_BROWSER GIMP_HELP_BROWSER_GIMP
|
||||
#define DEFAULT_THEME "Default"
|
||||
#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"
|
||||
# define DEFAULT_WEB_BROWSER "not used on Windows"
|
||||
#elif HAVE_CARBON
|
||||
# define DEFAULT_WEB_BROWSER "open %s"
|
||||
# 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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. " \
|
||||
|
|
|
@ -190,14 +190,16 @@ gimp_show_message (Gimp *gimp,
|
|||
}
|
||||
|
||||
void
|
||||
gimp_help (Gimp *gimp,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_id)
|
||||
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 *
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
#include "gimpoperationcolorbalance.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_color_balance_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_color_balance_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationColorBalance, gimp_operation_color_balance,
|
||||
|
@ -113,11 +113,11 @@ gimp_operation_color_balance_map (gfloat value,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_color_balance_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_color_balance_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpColorBalanceConfig *config = GIMP_COLOR_BALANCE_CONFIG (point->config);
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
#include "gimpoperationcolorize.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_colorize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_colorize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationColorize, gimp_operation_colorize,
|
||||
|
@ -76,11 +76,11 @@ gimp_operation_colorize_init (GimpOperationColorize *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_colorize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_colorize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpColorizeConfig *config = GIMP_COLORIZE_CONFIG (point->config);
|
||||
|
|
|
@ -35,11 +35,11 @@
|
|||
#include "gimpoperationcurves.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_curves_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_curves_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationCurves, gimp_operation_curves,
|
||||
|
@ -80,11 +80,11 @@ gimp_operation_curves_init (GimpOperationCurves *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_curves_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_curves_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (point->config);
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
#include "gimpdesaturateconfig.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_desaturate_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_desaturate_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationDesaturate, gimp_operation_desaturate,
|
||||
|
@ -76,11 +76,11 @@ gimp_operation_desaturate_init (GimpOperationDesaturate *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_desaturate_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_desaturate_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpDesaturateConfig *config = GIMP_DESATURATE_CONFIG (point->config);
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
#include "gimpoperationhuesaturation.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_hue_saturation_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_hue_saturation_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationHueSaturation, gimp_operation_hue_saturation,
|
||||
|
@ -125,11 +125,11 @@ map_lightness (GimpHueSaturationConfig *config,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_hue_saturation_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_hue_saturation_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpHueSaturationConfig *config = GIMP_HUE_SATURATION_CONFIG (point->config);
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
#include "gimpoperationlevels.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_levels_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_levels_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationLevels, gimp_operation_levels,
|
||||
|
@ -108,11 +108,11 @@ gimp_operation_levels_map (gdouble value,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_levels_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_levels_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (point->config);
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
#include "gimpposterizeconfig.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_posterize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_posterize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationPosterize, gimp_operation_posterize,
|
||||
|
@ -77,11 +77,11 @@ gimp_operation_posterize_init (GimpOperationPosterize *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_posterize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_posterize_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpPosterizeConfig *config = GIMP_POSTERIZE_CONFIG (point->config);
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
#include "gimpthresholdconfig.h"
|
||||
|
||||
|
||||
static gboolean gimp_operation_threshold_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi);
|
||||
static gboolean gimp_operation_threshold_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOperationThreshold, gimp_operation_threshold,
|
||||
|
@ -76,11 +76,11 @@ gimp_operation_threshold_init (GimpOperationThreshold *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_operation_threshold_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
GeglRectangle *roi)
|
||||
gimp_operation_threshold_process (GeglOperation *operation,
|
||||
void *in_buf,
|
||||
void *out_buf,
|
||||
glong samples,
|
||||
const GeglRectangle *roi)
|
||||
{
|
||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
||||
GimpThresholdConfig *config = GIMP_THRESHOLD_CONFIG (point->config);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ gimp_operation_tile_source_class_init (GimpOperationTileSourceClass *klass)
|
|||
operation_class->description = "GIMP TileManager source";
|
||||
operation_class->prepare = gimp_operation_tile_source_prepare;
|
||||
operation_class->get_bounding_box = gimp_operation_tile_source_get_bounding_box;
|
||||
operation_class->get_cached_region = NULL; /* the default source is
|
||||
operation_class->get_cached_region = NULL; /* the default source is
|
||||
expanding to agressivly
|
||||
make use of available caching,
|
||||
this behavior is at least a
|
||||
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
@ -213,11 +214,12 @@ gui_unset_busy (Gimp *gimp)
|
|||
}
|
||||
|
||||
static void
|
||||
gui_help (Gimp *gimp,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_id)
|
||||
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 *
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -459,7 +459,7 @@ gimp_plug_in_close (GimpPlugIn *plug_in,
|
|||
}
|
||||
|
||||
/* Wait for the process to exit. This will happen
|
||||
* immediately if it was just killed.
|
||||
* immediately if it was just killed.
|
||||
*/
|
||||
waitpid (plug_in->pid, &status, 0);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
@ -128,46 +128,51 @@ typedef struct _Private
|
|||
} Private;
|
||||
|
||||
|
||||
static void gimp_free_select_tool_finalize (GObject *object);
|
||||
static void gimp_free_select_tool_control (GimpTool *tool,
|
||||
GimpToolAction action,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_oper_update (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
gboolean proximity,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_cursor_update (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_button_press (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_button_release (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonReleaseType release_type,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_motion (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static gboolean gimp_free_select_tool_key_press (GimpTool *tool,
|
||||
GdkEventKey *kevent,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_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);
|
||||
static void gimp_free_select_tool_finalize (GObject *object);
|
||||
static void gimp_free_select_tool_control (GimpTool *tool,
|
||||
GimpToolAction action,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_oper_update (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
gboolean proximity,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_cursor_update (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_button_press (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_button_release (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonReleaseType release_type,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_motion (GimpTool *tool,
|
||||
GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static gboolean gimp_free_select_tool_key_press (GimpTool *tool,
|
||||
GdkEventKey *kevent,
|
||||
GimpDisplay *display);
|
||||
static void gimp_free_select_tool_modifier_key (GimpTool *tool,
|
||||
GdkModifierType key,
|
||||
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);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpFreeSelectTool, gimp_free_select_tool,
|
||||
|
@ -203,20 +208,21 @@ gimp_free_select_tool_class_init (GimpFreeSelectToolClass *klass)
|
|||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpDrawToolClass *draw_tool_class = GIMP_DRAW_TOOL_CLASS (klass);
|
||||
|
||||
object_class->finalize = gimp_free_select_tool_finalize;
|
||||
object_class->finalize = gimp_free_select_tool_finalize;
|
||||
|
||||
tool_class->control = gimp_free_select_tool_control;
|
||||
tool_class->oper_update = gimp_free_select_tool_oper_update;
|
||||
tool_class->cursor_update = gimp_free_select_tool_cursor_update;
|
||||
tool_class->button_press = gimp_free_select_tool_button_press;
|
||||
tool_class->button_release = gimp_free_select_tool_button_release;
|
||||
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->control = gimp_free_select_tool_control;
|
||||
tool_class->oper_update = gimp_free_select_tool_oper_update;
|
||||
tool_class->cursor_update = gimp_free_select_tool_cursor_update;
|
||||
tool_class->button_press = gimp_free_select_tool_button_press;
|
||||
tool_class->button_release = gimp_free_select_tool_button_release;
|
||||
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;
|
||||
draw_tool_class->draw = gimp_free_select_tool_draw;
|
||||
|
||||
klass->select = gimp_free_select_tool_real_select;
|
||||
klass->select = gimp_free_select_tool_real_select;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (Private));
|
||||
}
|
||||
|
@ -232,31 +238,31 @@ gimp_free_select_tool_init (GimpFreeSelectTool *fst)
|
|||
gimp_tool_control_set_tool_cursor (tool->control,
|
||||
GIMP_TOOL_CURSOR_FREE_SELECT);
|
||||
|
||||
priv->grabbed_segment_index = INVALID_INDEX;
|
||||
priv->grabbed_segment_index = INVALID_INDEX;
|
||||
|
||||
priv->button1_down = FALSE;
|
||||
priv->button1_down = FALSE;
|
||||
|
||||
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->saved_points_lower_segment = NULL;
|
||||
priv->saved_points_higher_segment = NULL;
|
||||
priv->max_n_saved_points_lower_segment = 0;
|
||||
priv->max_n_saved_points_higher_segment = 0;
|
||||
|
||||
priv->polygon_modified = FALSE;
|
||||
priv->polygon_modified = FALSE;
|
||||
|
||||
priv->show_pending_point = FALSE;
|
||||
priv->show_pending_point = FALSE;
|
||||
|
||||
priv->points = NULL;
|
||||
priv->n_points = 0;
|
||||
priv->max_n_points = 0;
|
||||
priv->points = NULL;
|
||||
priv->n_points = 0;
|
||||
priv->max_n_points = 0;
|
||||
|
||||
priv->segment_indices = NULL;
|
||||
priv->n_segment_indices = 0;
|
||||
priv->max_n_segment_indices = 0;
|
||||
priv->segment_indices = NULL;
|
||||
priv->n_segment_indices = 0;
|
||||
priv->max_n_segment_indices = 0;
|
||||
|
||||
priv->constrain_angle = FALSE;
|
||||
priv->supress_handles = FALSE;
|
||||
priv->constrain_angle = FALSE;
|
||||
priv->supress_handles = FALSE;
|
||||
|
||||
priv->last_click_time = NO_CLICK_TIME_AVAILABLE;
|
||||
priv->last_click_time = NO_CLICK_TIME_AVAILABLE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -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)
|
||||
{
|
||||
priv->saved_points_lower_segment = g_new0 (GimpVector2, 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,33 +1388,12 @@ 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,
|
||||
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,
|
||||
gimp_free_select_tool_update_motion (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)
|
||||
{
|
||||
|
|
|
@ -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,67 +49,23 @@
|
|||
|
||||
/* 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 void gimp_image_map_tool_import_activate (GtkWidget *widget,
|
||||
GimpImageMapTool *tool);
|
||||
static void gimp_image_map_tool_export_activate (GtkWidget *widget,
|
||||
GimpImageMapTool *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 void gimp_image_map_tool_settings_dialog (GimpImageMapTool *im_tool,
|
||||
const gchar *title,
|
||||
gboolean save);
|
||||
|
||||
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,
|
||||
GimpImageMapTool *tool);
|
||||
|
||||
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,
|
||||
const gchar *filename);
|
||||
static gboolean gimp_image_map_tool_settings_import (GimpImageMapTool *tool,
|
||||
const gchar *filename);
|
||||
static gboolean gimp_image_map_tool_settings_export (GimpImageMapTool *tool,
|
||||
const gchar *filename);
|
||||
|
||||
|
||||
/* 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,108 +92,36 @@ 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),
|
||||
image_map_tool);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label),
|
||||
GIMP_SETTINGS_BOX (image_map_tool->settings_box)->combo);
|
||||
|
||||
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, "import",
|
||||
G_CALLBACK (gimp_image_map_tool_import_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));
|
||||
g_signal_connect (image_map_tool->settings_box, "export",
|
||||
G_CALLBACK (gimp_image_map_tool_export_activate),
|
||||
image_map_tool);
|
||||
|
||||
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,
|
||||
GError **error)
|
||||
gimp_image_map_tool_real_settings_import (GimpImageMapTool *tool,
|
||||
const gchar *filename,
|
||||
GError **error)
|
||||
{
|
||||
gboolean success;
|
||||
|
||||
|
@ -259,9 +136,9 @@ gimp_image_map_tool_real_settings_import (GimpImageMapTool *tool,
|
|||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_map_tool_real_settings_export (GimpImageMapTool *tool,
|
||||
const gchar *filename,
|
||||
GError **error)
|
||||
gimp_image_map_tool_real_settings_export (GimpImageMapTool *tool,
|
||||
const gchar *filename,
|
||||
GError **error)
|
||||
{
|
||||
GimpImageMapToolClass *klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool);
|
||||
gchar *header;
|
||||
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -243,11 +243,10 @@ gimp_image_map_tool_finalize (GObject *object)
|
|||
if (image_map_tool->shell)
|
||||
{
|
||||
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->shell = NULL;
|
||||
image_map_tool->main_vbox = 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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
@ -55,41 +56,50 @@ typedef struct _GimpIdleHelp GimpIdleHelp;
|
|||
|
||||
struct _GimpIdleHelp
|
||||
{
|
||||
Gimp *gimp;
|
||||
gchar *help_domain;
|
||||
gchar *help_locales;
|
||||
gchar *help_id;
|
||||
Gimp *gimp;
|
||||
GimpProgress *progress;
|
||||
gchar *help_domain;
|
||||
gchar *help_locales;
|
||||
gchar *help_id;
|
||||
};
|
||||
|
||||
|
||||
/* local function prototypes */
|
||||
|
||||
static gint gimp_idle_help (GimpIdleHelp *idle_help);
|
||||
static gint gimp_idle_help (GimpIdleHelp *idle_help);
|
||||
|
||||
static gboolean gimp_help_browser (Gimp *gimp);
|
||||
static void gimp_help_browser_error (Gimp *gimp,
|
||||
const gchar *title,
|
||||
const gchar *primary,
|
||||
const gchar *text);
|
||||
static gboolean gimp_help_browser (Gimp *gimp);
|
||||
static void gimp_help_browser_error (Gimp *gimp,
|
||||
const gchar *title,
|
||||
const gchar *primary,
|
||||
const gchar *text);
|
||||
|
||||
static void gimp_help_call (Gimp *gimp,
|
||||
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 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 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,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_id)
|
||||
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);
|
||||
|
||||
|
@ -97,12 +107,13 @@ gimp_help_show (Gimp *gimp,
|
|||
{
|
||||
GimpIdleHelp *idle_help = g_slice_new0 (GimpIdleHelp);
|
||||
|
||||
idle_help->gimp = gimp;
|
||||
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);
|
||||
|
@ -280,11 +290,12 @@ gimp_help_browser_error (Gimp *gimp,
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_help_call (Gimp *gimp,
|
||||
const gchar *procedure_name,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_locales,
|
||||
const gchar *help_id)
|
||||
gimp_help_call (Gimp *gimp,
|
||||
GimpProgress *progress,
|
||||
const gchar *procedure_name,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_locales,
|
||||
const gchar *help_id)
|
||||
{
|
||||
GimpProcedure *procedure;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -25,11 +25,12 @@
|
|||
|
||||
/* 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,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_id);
|
||||
void gimp_help_show (Gimp *gimp,
|
||||
GimpProgress *progress,
|
||||
const gchar *help_domain,
|
||||
const gchar *help_id);
|
||||
|
||||
|
||||
#endif /* __GIMP_HELP_H__ */
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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__ */
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
55
configure.in
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Encoding=UTF-8
|
||||
Type=Application
|
||||
_Name=GNU Image Manipulation Program
|
||||
_GenericName=Image Editor
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -623,7 +623,6 @@
|
|||
|
||||
<chapter id="app-display-utils">
|
||||
<title>Misc. Widgets & 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" />
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
13
etc/gimprc
|
@ -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
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -169,8 +170,9 @@ gimp_throbber_init (GimpThrobber *button)
|
|||
static void
|
||||
gimp_throbber_construct_contents (GtkToolItem *tool_item)
|
||||
{
|
||||
GimpThrobber *button = GIMP_THROBBER (tool_item);
|
||||
GtkWidget *image;
|
||||
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);
|
||||
|
|
|
@ -46,19 +46,25 @@
|
|||
|
||||
/* forward declarations */
|
||||
|
||||
static void query (void);
|
||||
static void run (const gchar *name,
|
||||
gint nparams,
|
||||
const GimpParam *param,
|
||||
gint *nreturn_vals,
|
||||
GimpParam **return_vals);
|
||||
static void query (void);
|
||||
static void run (const gchar *name,
|
||||
gint nparams,
|
||||
const GimpParam *param,
|
||||
gint *nreturn_vals,
|
||||
GimpParam **return_vals);
|
||||
|
||||
static void temp_proc_install (void);
|
||||
static void temp_proc_run (const gchar *name,
|
||||
gint nparams,
|
||||
const GimpParam *param,
|
||||
gint *nreturn_vals,
|
||||
GimpParam **return_vals);
|
||||
static void temp_proc_install (void);
|
||||
static void temp_proc_run (const gchar *name,
|
||||
gint nparams,
|
||||
const GimpParam *param,
|
||||
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 */
|
||||
|
@ -110,7 +116,7 @@ run (const gchar *name,
|
|||
GimpParam **return_vals)
|
||||
{
|
||||
GimpRunMode run_mode = param[0].data.d_int32;
|
||||
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
|
||||
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
|
||||
|
||||
static GimpParam values[1];
|
||||
|
||||
|
@ -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)
|
||||
if (! help_browser_show_help (help_domain, help_locales, help_id))
|
||||
{
|
||||
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)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
g_list_foreach (locales, (GFunc) g_free, NULL);
|
||||
g_list_free (locales);
|
||||
gtk_main_quit ();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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_ */
|
|
@ -55,9 +55,7 @@ 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;
|
||||
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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
GList *locales;
|
||||
gchar *full_uri;
|
||||
gboolean fatal_error;
|
||||
GimpHelpProgress *progress = NULL;
|
||||
GList *locales;
|
||||
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);
|
||||
locales = gimp_help_parse_locales (idle_help->help_locales);
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
After Width: | Height: | Size: 928 B |
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
@ -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
|
||||
);
|
||||
|
|