From 8fbe04e6a954fb309f078fd66b3dc75f435337cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aurimas=20Ju=C5=A1ka?= Date: Sat, 21 Jun 2008 05:12:58 +0000 Subject: [PATCH] Merged from trunk revisions r25900:r25969. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-06-21 Aurimas Juška Merged from trunk revisions r25900:r25969. svn path=/branches/soc-2008-tagging/; revision=25971 --- ChangeLog | 313 ++++- INSTALL | 10 +- Makefile.am | 8 - NEWS | 23 +- app/actions/help-commands.c | 11 +- app/config/Makefile.am | 15 +- app/config/gimpguiconfig.c | 41 +- app/config/gimpguiconfig.h | 2 + app/config/gimprc-blurbs.h | 8 + app/core/gimp-gui.c | 10 +- app/core/gimp-gui.h | 2 + app/dialogs/preferences-dialog.c | 12 + app/gegl/gimpoperationcolorbalance.c | 20 +- app/gegl/gimpoperationcolorize.c | 20 +- app/gegl/gimpoperationcurves.c | 20 +- app/gegl/gimpoperationdesaturate.c | 20 +- app/gegl/gimpoperationhuesaturation.c | 20 +- app/gegl/gimpoperationlevels.c | 20 +- app/gegl/gimpoperationposterize.c | 20 +- app/gegl/gimpoperationthreshold.c | 20 +- app/gegl/gimpoperationtilesink.c | 5 +- app/gegl/gimpoperationtilesource.c | 4 +- app/gui/gui-vtable.c | 10 +- app/gui/gui.c | 2 +- app/paint/gimppaintoptions.c | 2 +- app/pdb/help-cmds.c | 2 +- app/plug-in/gimpplugin.c | 2 +- app/plug-in/gimppluginmanager-call.c | 3 +- app/plug-in/plug-in-menu-path.c | 1 + app/sanity.c | 4 +- app/tools/gimpeditselectiontool.h | 8 +- app/tools/gimpfreeselecttool.c | 335 +++-- app/tools/gimpimagemaptool-settings.c | 377 +----- app/tools/gimpimagemaptool-settings.h | 2 - app/tools/gimpimagemaptool.c | 19 +- app/tools/gimpimagemaptool.h | 4 +- app/tools/gimprectangletool.c | 7 +- app/tools/gimptextoptions.c | 12 +- app/widgets/Makefile.am | 2 + app/widgets/gimpdockable.c | 2 +- app/widgets/gimphelp.c | 140 ++- app/widgets/gimphelp.h | 9 +- app/widgets/gimpsettingsbox.c | 598 +++++++++ app/widgets/gimpsettingsbox.h | 70 ++ app/widgets/gimpthumbbox.c | 7 +- app/widgets/gimpuimanager.c | 8 +- app/widgets/gimpuimanager.h | 2 +- app/widgets/widgets-types.h | 1 + autogen.sh | 2 +- configure.in | 55 +- cursors/Makefile.am | 2 + desktop/gimp.desktop.in.in | 1 - devel-docs/ChangeLog | 9 + devel-docs/app/app-docs.sgml | 2 +- .../libgimpwidgets-sections.txt | 1 + devel-docs/libgimpwidgets/tmpl/gimpstock.sgml | 10 + docs/gimprc.5.in | 14 +- etc/gimprc | 13 +- libgimpwidgets/gimpstock.c | 8 +- libgimpwidgets/gimpstock.h | 1 + modules/controller_midi.c | 9 +- plug-ins/common/filter-pack.c | 14 +- plug-ins/common/sample-colorize.c | 4 +- plug-ins/help-browser/Makefile.am | 33 +- plug-ins/help-browser/dialog.c | 1087 ++++++----------- plug-ins/help-browser/dialog.h | 4 +- plug-ins/help-browser/gimpthrobber.c | 19 +- plug-ins/help-browser/help-browser.c | 144 ++- plug-ins/help-browser/queue.c | 291 ----- plug-ins/help-browser/queue.h | 56 - plug-ins/help/gimphelp.c | 28 +- plug-ins/help/gimphelplocale.c | 5 + plug-ins/help/help.c | 64 +- plug-ins/imagemap/imap_main.c | 8 +- po-plug-ins/ChangeLog | 8 + po-plug-ins/de.po | 457 +++---- po-plug-ins/ru.po | 110 +- po-plug-ins/sl.po | 0 po/ChangeLog | 8 + po/POTFILES.in | 1 + po/ru.po | 413 ++++--- themes/Default/images/Makefile.am | 8 +- .../Default/images/stock-user-manual-16.png | Bin 0 -> 928 bytes .../Default/images/stock-user-manual-24.png | Bin 0 -> 1458 bytes .../Default/images/stock-user-manual-32.png | Bin .../Default/images/stock-user-manual-64.png | Bin 0 -> 6065 bytes .../Default/images/stock-user-manual.svg | 0 tools/pdbgen/pdb/help.pdb | 2 +- 88 files changed, 2794 insertions(+), 2350 deletions(-) create mode 100644 app/widgets/gimpsettingsbox.c create mode 100644 app/widgets/gimpsettingsbox.h delete mode 100644 plug-ins/help-browser/queue.c delete mode 100644 plug-ins/help-browser/queue.h mode change 100755 => 100644 po-plug-ins/sl.po create mode 100644 themes/Default/images/stock-user-manual-16.png create mode 100644 themes/Default/images/stock-user-manual-24.png rename plug-ins/help-browser/wilber-reading.png => themes/Default/images/stock-user-manual-32.png (100%) create mode 100644 themes/Default/images/stock-user-manual-64.png rename plug-ins/help-browser/wilber-reading.svg => themes/Default/images/stock-user-manual.svg (100%) diff --git a/ChangeLog b/ChangeLog index c8ff8f54ae..20488a4796 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,53 @@ unique name for internal objects. +2008-06-20 Martin Nordholts + + 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 + + * 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 + + * app/tools/gimpfreeselecttool.c: Remove + n_saved_points_(lower|higher)_segment, we don't need them. + +2008-06-20 Martin Nordholts + + * app/tools/gimpfreeselecttool.c (gimp_free_select_tool_finalize): + Plug leak. + +2008-06-20 Michael Natterer + + 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 * 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 + + * 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 + + * configure.in: bumped version to 2.5.2. + +2008-06-15 Sven Neumann + + * Made 2.5.1 development release. + +2008-06-14 Sven Neumann + + * 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 + + * app/dialogs/preferences-dialog.c: added a preliminary user + interface to control the 'user-manual-online' property. + +2008-06-13 Martin Nordholts + + * app/tools/gimprectangletool.c (gimp_rectangle_tool_motion): + Correct the improved display of the rectangle ratio. + +2008-06-13 Sven Neumann + + * app/tools/gimptextoptions.c (gimp_text_options_class_init): + we need to define the 'highlight' property here as well. + +2008-06-13 Michael Natterer + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * app/plug-in/plug-in-menu-path.c (menu_path_mappings): also map + /File/Acquire to /File/New/Acquire. + +2008-06-12 Sven Neumann + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * configure.in: reverted last change (use of IT_PO_SUBDIR). + +2008-06-11 Sven Neumann + + * desktop/gimp.desktop.in.in: removed deprecated field "Encoding". + +2008-06-11 Sven Neumann + + * app/config/Makefile.am: make test-config link properly. + +2008-06-11 Sven Neumann + + * 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 + + * 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 + + * configure.in: removed redundant calls to AC_MSG_RESULT() from + inside PKG_CHECK_MODULES(). + +2008-06-11 Sven Neumann + + * cursors/Makefile.am (EXTRA_DIST): added missing modifier-select + XBM files. + +2008-06-11 Sven Neumann + + * 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 + + * configure.in: fixed check for webkit zoom API. + +2008-06-10 Sven Neumann + + * plug-ins/help-browser/queue.[ch]: removed, we don't need this + code any longer. + +2008-06-10 Sven Neumann + + * 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 + + * plug-ins/help/gimphelplocale.c: added some sanity checks. + +2008-06-10 Michael Natterer + + * 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 + + * plug-ins/help/help.c (load_help_idle): show progress while + loading the help index. + +2008-06-10 Sven Neumann + + * 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 + + * 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 + + * app/plug-in/gimpplugin.c + * app/plug-in/gimppluginmanager-call.c + * app/widgets/gimphelp.c: formatting. + +2008-06-09 Michael Natterer + + * 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 * 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 @@ -162,7 +471,7 @@ 2008-05-30 Martin Nordholts - 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 diff --git a/INSTALL b/INSTALL index cb8e228c97..6b59f5e87a 100644 --- a/INSTALL +++ b/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 diff --git a/Makefile.am b/Makefile.am index 452f3f9b25..027ca934a3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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@ diff --git a/NEWS b/NEWS index 19066a4da5..a0917b42f5 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ - ------------------------------ + ------------------------------ GNU Image Manipulation Program Development Branch ------------------------------ @@ -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 @@ -79,7 +96,7 @@ Plug-ins: - randomize: added previews - ripple: added a Phase Shift control - screenshot: optionally add the mouse cursor image on an extra layer - - uri: use GIO/GVfs where available + - uri: use GIO/GVfs where available - whirlpinch: allow a larger range for the whirl angle diff --git a/app/actions/help-commands.c b/app/actions/help-commands.c index 98ee2ba013..b1c9d24f96 100644 --- a/app/actions/help-commands.c +++ b/app/actions/help-commands.c @@ -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 diff --git a/app/config/Makefile.am b/app/config/Makefile.am index 5d6270087f..896ddef7fb 100644 --- a/app/config/Makefile.am +++ b/app/config/Makefile.am @@ -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) \ diff --git a/app/config/gimpguiconfig.c b/app/config/gimpguiconfig.c index e52a9e2587..a694aa6edb 100644 --- a/app/config/gimpguiconfig.c +++ b/app/config/gimpguiconfig.c @@ -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; diff --git a/app/config/gimpguiconfig.h b/app/config/gimpguiconfig.h index d9b4a8614e..6e53ed6d4f 100644 --- a/app/config/gimpguiconfig.h +++ b/app/config/gimpguiconfig.h @@ -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; diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h index c81c9fa7d1..1373f9f778 100644 --- a/app/config/gimprc-blurbs.h +++ b/app/config/gimprc-blurbs.h @@ -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. " \ diff --git a/app/core/gimp-gui.c b/app/core/gimp-gui.c index 96c947a6d2..d4a2a6c85a 100644 --- a/app/core/gimp-gui.c +++ b/app/core/gimp-gui.c @@ -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 * diff --git a/app/core/gimp-gui.h b/app/core/gimp-gui.h index 783186dfcd..8c3434af47 100644 --- a/app/core/gimp-gui.h +++ b/app/core/gimp-gui.h @@ -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); diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c index fb2e1606a4..f990d1fd40 100644 --- a/app/dialogs/preferences-dialog.c +++ b/app/dialogs/preferences-dialog.c @@ -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)); diff --git a/app/gegl/gimpoperationcolorbalance.c b/app/gegl/gimpoperationcolorbalance.c index ccd6fd4ac5..c2231cbce4 100644 --- a/app/gegl/gimpoperationcolorbalance.c +++ b/app/gegl/gimpoperationcolorbalance.c @@ -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); diff --git a/app/gegl/gimpoperationcolorize.c b/app/gegl/gimpoperationcolorize.c index 614bf1a2fd..9f8fee41f5 100644 --- a/app/gegl/gimpoperationcolorize.c +++ b/app/gegl/gimpoperationcolorize.c @@ -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); diff --git a/app/gegl/gimpoperationcurves.c b/app/gegl/gimpoperationcurves.c index 6793d35359..27338979fa 100644 --- a/app/gegl/gimpoperationcurves.c +++ b/app/gegl/gimpoperationcurves.c @@ -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); diff --git a/app/gegl/gimpoperationdesaturate.c b/app/gegl/gimpoperationdesaturate.c index 1d9c30c301..09d4e6e34c 100644 --- a/app/gegl/gimpoperationdesaturate.c +++ b/app/gegl/gimpoperationdesaturate.c @@ -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); diff --git a/app/gegl/gimpoperationhuesaturation.c b/app/gegl/gimpoperationhuesaturation.c index ff1366db25..377c7c08da 100644 --- a/app/gegl/gimpoperationhuesaturation.c +++ b/app/gegl/gimpoperationhuesaturation.c @@ -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); diff --git a/app/gegl/gimpoperationlevels.c b/app/gegl/gimpoperationlevels.c index 29cea1f8b5..e312d9b29f 100644 --- a/app/gegl/gimpoperationlevels.c +++ b/app/gegl/gimpoperationlevels.c @@ -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); diff --git a/app/gegl/gimpoperationposterize.c b/app/gegl/gimpoperationposterize.c index bf703a243d..cdc6702976 100644 --- a/app/gegl/gimpoperationposterize.c +++ b/app/gegl/gimpoperationposterize.c @@ -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); diff --git a/app/gegl/gimpoperationthreshold.c b/app/gegl/gimpoperationthreshold.c index cceb28de78..82ff67ca48 100644 --- a/app/gegl/gimpoperationthreshold.c +++ b/app/gegl/gimpoperationthreshold.c @@ -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); diff --git a/app/gegl/gimpoperationtilesink.c b/app/gegl/gimpoperationtilesink.c index 3f63f81992..5208d264b4 100644 --- a/app/gegl/gimpoperationtilesink.c +++ b/app/gegl/gimpoperationtilesink.c @@ -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; } diff --git a/app/gegl/gimpoperationtilesource.c b/app/gegl/gimpoperationtilesource.c index 266b3e6b3f..5e555d61ba 100644 --- a/app/gegl/gimpoperationtilesource.c +++ b/app/gegl/gimpoperationtilesource.c @@ -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); } diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c index 886a2ea159..848c39d70e 100644 --- a/app/gui/gui-vtable.c +++ b/app/gui/gui-vtable.c @@ -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 * diff --git a/app/gui/gui.c b/app/gui/gui.c index 322584e21f..c3315ef71b 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -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 diff --git a/app/paint/gimppaintoptions.c b/app/paint/gimppaintoptions.c index a2a895a24b..b5b9190786 100644 --- a/app/paint/gimppaintoptions.c +++ b/app/paint/gimppaintoptions.c @@ -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 diff --git a/app/pdb/help-cmds.c b/app/pdb/help-cmds.c index 7a10bccce1..4aa90be986 100644 --- a/app/pdb/help-cmds.c +++ b/app/pdb/help-cmds.c @@ -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); diff --git a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c index a600181e00..0cb5b9df6f 100644 --- a/app/plug-in/gimpplugin.c +++ b/app/plug-in/gimpplugin.c @@ -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); diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c index 1b39ad09a3..e2888ae9e3 100644 --- a/app/plug-in/gimppluginmanager-call.c +++ b/app/plug-in/gimppluginmanager-call.c @@ -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) { diff --git a/app/plug-in/plug-in-menu-path.c b/app/plug-in/plug-in-menu-path.c index 6a798a9018..8f021e6c0e 100644 --- a/app/plug-in/plug-in-menu-path.c +++ b/app/plug-in/plug-in-menu-path.c @@ -61,6 +61,7 @@ static const MenuPathMapping menu_path_mappings[] = { "/Xtns", NULL, "/Filters/Extensions" }, { "/Help", NULL, "/Help" }, + { "/File/Acquire", NULL, "/File/New/Acquire" }, { "/File/Acquire", NULL, "/File/New/Acquire" }, { NULL, NULL, NULL } }; diff --git a/app/sanity.c b/app/sanity.c index b89789049c..fa7034add1 100644 --- a/app/sanity.c +++ b/app/sanity.c @@ -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, diff --git a/app/tools/gimpeditselectiontool.h b/app/tools/gimpeditselectiontool.h index e58f533013..64e57be54b 100644 --- a/app/tools/gimpeditselectiontool.h +++ b/app/tools/gimpeditselectiontool.h @@ -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; diff --git a/app/tools/gimpfreeselecttool.c b/app/tools/gimpfreeselecttool.c index a3b3070be6..18640e9dd6 100644 --- a/app/tools/gimpfreeselecttool.c +++ b/app/tools/gimpfreeselecttool.c @@ -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) { diff --git a/app/tools/gimpimagemaptool-settings.c b/app/tools/gimpimagemaptool-settings.c index f8f670a1ce..a2d95d38c4 100644 --- a/app/tools/gimpimagemaptool-settings.c +++ b/app/tools/gimpimagemaptool-settings.c @@ -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) diff --git a/app/tools/gimpimagemaptool-settings.h b/app/tools/gimpimagemaptool-settings.h index 8ff9efcd11..2dca3f2af0 100644 --- a/app/tools/gimpimagemaptool-settings.h +++ b/app/tools/gimpimagemaptool-settings.h @@ -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); diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c index fb8f6e0504..250f266164 100644 --- a/app/tools/gimpimagemaptool.c +++ b/app/tools/gimpimagemaptool.c @@ -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; diff --git a/app/tools/gimpimagemaptool.h b/app/tools/gimpimagemaptool.h index d642cfd4e4..2378f4de75 100644 --- a/app/tools/gimpimagemaptool.h +++ b/app/tools/gimpimagemaptool.h @@ -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 */ diff --git a/app/tools/gimprectangletool.c b/app/tools/gimprectangletool.c index 244f2ba625..8ef4aa8c45 100644 --- a/app/tools/gimprectangletool.c +++ b/app/tools/gimprectangletool.c @@ -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); } } diff --git a/app/tools/gimptextoptions.c b/app/tools/gimptextoptions.c index cda0db7cd4..3a9b05a5da 100644 --- a/app/tools/gimptextoptions.c +++ b/app/tools/gimptextoptions.c @@ -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, diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index eacabd7986..7951c00a6a 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -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 \ diff --git a/app/widgets/gimpdockable.c b/app/widgets/gimpdockable.c index 7fc9e21513..95b932206e 100644 --- a/app/widgets/gimpdockable.c +++ b/app/widgets/gimpdockable.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; } diff --git a/app/widgets/gimphelp.c b/app/widgets/gimphelp.c index ba6a3f0781..c07ec46f3c 100644 --- a/app/widgets/gimphelp.c +++ b/app/widgets/gimphelp.c @@ -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); diff --git a/app/widgets/gimphelp.h b/app/widgets/gimphelp.h index 59635cc1c3..17c2aa28d4 100644 --- a/app/widgets/gimphelp.h +++ b/app/widgets/gimphelp.h @@ -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__ */ diff --git a/app/widgets/gimpsettingsbox.c b/app/widgets/gimpsettingsbox.c new file mode 100644 index 0000000000..682ff192ab --- /dev/null +++ b/app/widgets/gimpsettingsbox.c @@ -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 + * + * 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 + +#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); +} diff --git a/app/widgets/gimpsettingsbox.h b/app/widgets/gimpsettingsbox.h new file mode 100644 index 0000000000..a34c405d72 --- /dev/null +++ b/app/widgets/gimpsettingsbox.h @@ -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 + * + * 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__ */ diff --git a/app/widgets/gimpthumbbox.c b/app/widgets/gimpthumbbox.c index 294df3233c..07b9e34937 100644 --- a/app/widgets/gimpthumbbox.c +++ b/app/widgets/gimpthumbbox.c @@ -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); diff --git a/app/widgets/gimpuimanager.c b/app/widgets/gimpuimanager.c index 808285670e..082a359f48 100644 --- a/app/widgets/gimpuimanager.c +++ b/app/widgets/gimpuimanager.c @@ -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); diff --git a/app/widgets/gimpuimanager.h b/app/widgets/gimpuimanager.h index 1cd1225e85..a762a0d912 100644 --- a/app/widgets/gimpuimanager.h +++ b/app/widgets/gimpuimanager.h @@ -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); diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index 2294e20bd0..15881d2f6a 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -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; diff --git a/autogen.sh b/autogen.sh index 58c0b3a1fd..c4cdb56639 100755 --- a/autogen.sh +++ b/autogen.sh @@ -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 diff --git a/configure.in b/configure.in index 6b2c6dd4b2..3968466aa2 100644 --- a/configure.in +++ b/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 diff --git a/cursors/Makefile.am b/cursors/Makefile.am index 9034529463..609380f3df 100644 --- a/cursors/Makefile.am +++ b/cursors/Makefile.am @@ -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 \ diff --git a/desktop/gimp.desktop.in.in b/desktop/gimp.desktop.in.in index 9595ee42c8..776e4ee380 100644 --- a/desktop/gimp.desktop.in.in +++ b/desktop/gimp.desktop.in.in @@ -1,6 +1,5 @@ [Desktop Entry] Version=1.0 -Encoding=UTF-8 Type=Application _Name=GNU Image Manipulation Program _GenericName=Image Editor diff --git a/devel-docs/ChangeLog b/devel-docs/ChangeLog index f9ec528ba3..07248ed958 100644 --- a/devel-docs/ChangeLog +++ b/devel-docs/ChangeLog @@ -1,3 +1,12 @@ +2008-06-15 Michael Natterer + + * app/app-docs.sgml: GimpDBusService was in the wrong chapter. + +2008-06-12 Sven Neumann + + * libgimpwidgets/libgimpwidgets-sections.txt + * libgimpwidgets/tmpl/gimpstock.sgml: added new stock icon. + 2008-06-04 Michael Natterer * app/Makefile.am diff --git a/devel-docs/app/app-docs.sgml b/devel-docs/app/app-docs.sgml index 84e11615b2..5d00cf8c15 100644 --- a/devel-docs/app/app-docs.sgml +++ b/devel-docs/app/app-docs.sgml @@ -623,7 +623,6 @@ Misc. Widgets & Utilities - @@ -1003,6 +1002,7 @@ + diff --git a/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt b/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt index c829bdd980..b808129692 100644 --- a/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt +++ b/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt @@ -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 diff --git a/devel-docs/libgimpwidgets/tmpl/gimpstock.sgml b/devel-docs/libgimpwidgets/tmpl/gimpstock.sgml index 587375ce76..bcbf1b6c2d 100644 --- a/devel-docs/libgimpwidgets/tmpl/gimpstock.sgml +++ b/devel-docs/libgimpwidgets/tmpl/gimpstock.sgml @@ -1063,6 +1063,16 @@ RTL variant + + + + + + + + + + diff --git a/docs/gimprc.5.in b/docs/gimprc.5.in index 029f6578e6..a2f4a919e4 100644 --- a/docs/gimprc.5.in +++ b/docs/gimprc.5.in @@ -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) diff --git a/etc/gimprc b/etc/gimprc index e4915ae9b6..e281944c57 100644 --- a/etc/gimprc +++ b/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 diff --git a/libgimpwidgets/gimpstock.c b/libgimpwidgets/gimpstock.c index f5975b9ba3..2861385d0a 100644 --- a/libgimpwidgets/gimpstock.c +++ b/libgimpwidgets/gimpstock.c @@ -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 }, diff --git a/libgimpwidgets/gimpstock.h b/libgimpwidgets/gimpstock.h index c402e22989..e9c1b3a70a 100644 --- a/libgimpwidgets/gimpstock.h +++ b/libgimpwidgets/gimpstock.h @@ -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: */ diff --git a/modules/controller_midi.c b/modules/controller_midi.c index c89db5067d..1f449c1b75 100644 --- a/modules/controller_midi.c +++ b/modules/controller_midi.c @@ -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; diff --git a/plug-ins/common/filter-pack.c b/plug-ins/common/filter-pack.c index 9f92fe1be8..f12714a020 100644 --- a/plug-ins/common/filter-pack.c +++ b/plug-ins/common/filter-pack.c @@ -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); diff --git a/plug-ins/common/sample-colorize.c b/plug-ins/common/sample-colorize.c index d7498630f5..4dfee417ef 100644 --- a/plug-ins/common/sample-colorize.c +++ b/plug-ins/common/sample-colorize.c @@ -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); diff --git a/plug-ins/help-browser/Makefile.am b/plug-ins/help-browser/Makefile.am index 81f088aee6..14fbe027c0 100644 --- a/plug-ins/help-browser/Makefile.am +++ b/plug-ins/help-browser/Makefile.am @@ -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 diff --git a/plug-ins/help-browser/dialog.c b/plug-ins/help-browser/dialog.c index 80c42b878a..1a3b6d559a 100644 --- a/plug-ins/help-browser/dialog.c +++ b/plug-ins/help-browser/dialog.c @@ -2,7 +2,7 @@ * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * GIMP Help Browser - * Copyright (C) 1999-2005 Sven Neumann + * Copyright (C) 1999-2008 Sven Neumann * Michael Natterer * * dialog.c @@ -24,8 +24,10 @@ #include "config.h" +#include #include #include + #include #include #include @@ -34,9 +36,7 @@ #include -#undef GDK_PIXBUF_DISABLE_SINGLE_INCLUDES -#include -#define GDK_PIXBUF_DISABLE_SINGLE_INCLUDES +#include #include "libgimpwidgets/gimpwidgets.h" @@ -53,11 +53,8 @@ #include "gimpthrobberaction.h" #include "dialog.h" -#include "queue.h" #include "uri.h" -#include "logo-pixbuf.h" - #include "libgimp/stdplugins-intl.h" #ifndef _O_BINARY @@ -69,10 +66,11 @@ typedef struct { - gint width; - gint height; - gint paned_position; - gdouble zoom; + gint width; + gint height; + gint paned_position; + gboolean show_index; + gdouble zoom; } DialogData; enum @@ -83,99 +81,72 @@ enum /* local function prototypes */ -static GtkUIManager * ui_manager_new (GtkWidget *window); -static void browser_dialog_404 (HtmlDocument *doc, - const gchar *uri, - const gchar *message); +static GtkUIManager * ui_manager_new (GtkWidget *window); -static void back_callback (GtkAction *action, - gpointer data); -static void forward_callback (GtkAction *action, - gpointer data); -static void index_callback (GtkAction *action, - gpointer data); -static void zoom_in_callback (GtkAction *action, - gpointer data); -static void zoom_out_callback (GtkAction *action, - gpointer data); -static void close_callback (GtkAction *action, - gpointer data); -static void online_callback (GtkAction *action, - gpointer data); +static void back_callback (GtkAction *action, + gpointer data); +static void forward_callback (GtkAction *action, + gpointer data); +static void reload_callback (GtkAction *action, + gpointer data); +static void stop_callback (GtkAction *action, + gpointer data); +static void home_callback (GtkAction *action, + gpointer data); +static void copy_location_callback (GtkAction *action, + gpointer data); +static void show_index_callback (GtkAction *action, + gpointer data); +static void zoom_in_callback (GtkAction *action, + gpointer data); +static void zoom_out_callback (GtkAction *action, + gpointer data); +static void close_callback (GtkAction *action, + gpointer data); +static void website_callback (GtkAction *action, + gpointer data); -static void update_toolbar (void); +static void update_actions (void); -static void combo_changed (GtkWidget *widget, - gpointer data); +static void window_set_icons (GtkWidget *window); -static void drag_begin (GtkWidget *widget, - GdkDragContext *context, - gpointer data); -static void drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - gpointer data); +static void row_activated (GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column); +static void dialog_unmap (GtkWidget *window, + GtkWidget *paned); -static void row_activated (GtkTreeView *tree_view, - GtkTreePath *path, - GtkTreeViewColumn *column); -static void dialog_unmap (GtkWidget *window, - GtkWidget *paned); +static void view_realize (GtkWidget *widget); +static void view_unrealize (GtkWidget *widget); +static gboolean view_popup_menu (GtkWidget *widget, + GdkEventButton *event); +static gboolean view_button_press (GtkWidget *widget, + GdkEventButton *event); -static void view_realize (GtkWidget *widget); -static void view_unrealize (GtkWidget *widget); -static gboolean view_popup_menu (GtkWidget *widget, - GdkEventButton *event); -static gboolean view_button_press (GtkWidget *widget, - GdkEventButton *event); +static void title_changed (GtkWidget *view, + WebKitWebFrame *frame, + const gchar *title, + GtkWidget *window); +static void load_started (GtkWidget *view, + WebKitWebFrame *frame); +static void load_finished (GtkWidget *view, + WebKitWebFrame *frame); -static void title_changed (HtmlDocument *doc, - const gchar *new_title, - gpointer data); -static void link_clicked (HtmlDocument *doc, - const gchar *uri, - gpointer data); -static gboolean request_url (HtmlDocument *doc, - const gchar *uri, - HtmlStream *stream, - GError **error); -static gboolean io_handler (GIOChannel *io, - GIOCondition condition, - gpointer data); -static void load_remote_page (const gchar *uri); +static void select_index (const gchar *uri); -static void history_add (GtkComboBox *combo, - const gchar *uri, - const gchar *title); - -static gboolean has_case_prefix (const gchar *haystack, - const gchar *needle); - -static gchar * filename_from_uri (const gchar *uri); /* private variables */ -static const gchar *eek_png_tag = "

Eeek!

"; +static GHashTable *uri_hash_table = NULL; -static Queue *queue = NULL; -static gchar *current_uri = NULL; -static GHashTable *uri_hash_table = NULL; - -static GtkWidget *html = NULL; -static GtkWidget *tree_view = NULL; -static GtkUIManager *ui_manager = NULL; -static GtkWidget *button_prev = NULL; -static GtkWidget *button_next = NULL; -static GdkCursor *busy_cursor = NULL; - -static const GtkTargetEntry help_dnd_target_table[] = -{ - { "text/uri-list", 0, 0 }, - { "_NETSCAPE_URL", 0, 0 } -}; +static GtkWidget *view = NULL; +static GtkWidget *sidebar = NULL; +static GtkWidget *tree_view = NULL; +static GtkUIManager *ui_manager = NULL; +static GtkWidget *button_prev = NULL; +static GtkWidget *button_next = NULL; +static GdkCursor *busy_cursor = NULL; /* public functions */ @@ -183,41 +154,24 @@ static const GtkTargetEntry help_dnd_target_table[] = void browser_dialog_open (void) { - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *toolbar; - GtkWidget *paned; - GtkWidget *hbox; - GtkWidget *scroll; - GtkWidget *drag_source; - GtkWidget *image; - GtkWidget *combo; - GtkWidget *button; - GtkToolItem *item; - GtkAction *action; - GtkListStore *history; - GtkCellRenderer *cell; - GdkPixbuf *pixbuf; - gchar *eek_png_path; - DialogData data = { 720, 560, 240, 1.0 }; + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *toolbar; + GtkWidget *paned; + GtkWidget *scrolled; + GtkWidget *button; + GtkToolItem *item; + GtkAction *action; + DialogData data = { 720, 560, 240, TRUE, 1.0 }; gimp_ui_init ("helpbrowser", TRUE); gimp_get_data (GIMP_HELP_BROWSER_DIALOG_DATA, &data); - eek_png_path = g_build_filename (gimp_data_directory (), - "themes", "Default", "images", - "stock-wilber-eek-64.png", NULL); - - if (g_file_test (eek_png_path, G_FILE_TEST_EXISTS)) - eek_png_tag = g_strdup_printf ("", eek_png_path); - - g_free (eek_png_path); - /* the dialog window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), _("GIMP Help Browser")); - gtk_window_set_role (GTK_WINDOW (window), "helpbrowser"); + gtk_window_set_role (GTK_WINDOW (window), "help-browser"); gtk_window_set_default_size (GTK_WINDOW (window), data.width, data.height); @@ -225,9 +179,7 @@ browser_dialog_open (void) G_CALLBACK (gtk_main_quit), NULL); - pixbuf = gdk_pixbuf_new_from_inline (-1, logo_data, FALSE, NULL); - gtk_window_set_icon (GTK_WINDOW (window), pixbuf); - g_object_unref (pixbuf); + window_set_icons (window); vbox = gtk_vbox_new (FALSE, 2); gtk_container_add (GTK_CONTAINER (window), vbox); @@ -236,6 +188,7 @@ browser_dialog_open (void) ui_manager = ui_manager_new (window); toolbar = gtk_ui_manager_get_widget (ui_manager, "/help-browser-toolbar"); + gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); gtk_widget_show (toolbar); @@ -266,25 +219,27 @@ browser_dialog_open (void) gtk_tool_item_set_expand (item, TRUE); button = gtk_ui_manager_get_widget (ui_manager, - "/help-browser-toolbar/online"); - gimp_throbber_set_image (GIMP_THROBBER (button), - gtk_image_new_from_pixbuf (pixbuf)); + "/help-browser-toolbar/website"); /* the horizontal paned */ paned = gtk_hpaned_new (); gtk_box_pack_start (GTK_BOX (vbox), paned, TRUE, TRUE, 0); gtk_widget_show (paned); - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_paned_add1 (GTK_PANED (paned), scroll); + gtk_paned_add1 (GTK_PANED (paned), scrolled); gtk_paned_set_position (GTK_PANED (paned), data.paned_position); - gtk_widget_show (scroll); + + sidebar = scrolled; + + if (data.show_index) + gtk_widget_show (sidebar); tree_view = gtk_tree_view_new (); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); - gtk_container_add (GTK_CONTAINER (scroll), tree_view); + gtk_container_add (GTK_CONTAINER (scrolled), tree_view); gtk_widget_show (tree_view); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), -1, @@ -297,229 +252,90 @@ browser_dialog_open (void) G_CALLBACK (row_activated), NULL); - vbox = gtk_vbox_new (FALSE, 2); - gtk_paned_add2 (GTK_PANED (paned), vbox); - gtk_widget_show (vbox); - - hbox = gtk_hbox_new (FALSE, 2); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - /* the drag source */ - drag_source = gtk_event_box_new (); - gtk_box_pack_start (GTK_BOX (hbox), drag_source, FALSE, FALSE, 4); - gtk_widget_show (drag_source); - - gimp_help_set_help_data (drag_source, - _("Drag and drop this icon to a web browser"), - NULL); - - gtk_drag_source_set (GTK_WIDGET (drag_source), - GDK_BUTTON1_MASK, - help_dnd_target_table, - G_N_ELEMENTS (help_dnd_target_table), - GDK_ACTION_COPY); - - g_signal_connect (drag_source, "drag-begin", - G_CALLBACK (drag_begin), - NULL); - g_signal_connect (drag_source, "drag-data-get", - G_CALLBACK (drag_data_get), - NULL); - - image = gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_BUTTON); - gtk_container_add (GTK_CONTAINER (drag_source), image); - gtk_widget_show (image); - - /* the title combo */ - history = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); - combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (history)); - g_object_unref (history); - - cell = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, - "text", HISTORY_TITLE, - NULL); - - gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); - gtk_widget_show (combo); - - g_signal_connect (combo, "changed", - G_CALLBACK (combo_changed), - NULL); - /* HTML view */ - html = html_view_new (); - queue = queue_new (); - - gtk_widget_set_size_request (html, 300, 200); - - scroll = - gtk_scrolled_window_new (gtk_layout_get_hadjustment (GTK_LAYOUT (html)), - gtk_layout_get_vadjustment (GTK_LAYOUT (html))); - - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); - gtk_widget_show (scroll); - gtk_container_add (GTK_CONTAINER (scroll), html); - gtk_widget_show (html); + gtk_widget_set_size_request (scrolled, 300, 200); + gtk_paned_add2 (GTK_PANED (paned), scrolled); + gtk_widget_show (scrolled); - g_signal_connect (html, "realize", + view = webkit_web_view_new (); + webkit_web_view_set_maintains_back_forward_list (WEBKIT_WEB_VIEW (view), + TRUE); + gtk_container_add (GTK_CONTAINER (scrolled), view); + gtk_widget_show (view); + + g_signal_connect (view, "realize", G_CALLBACK (view_realize), NULL); - g_signal_connect (html, "unrealize", + g_signal_connect (view, "unrealize", G_CALLBACK (view_unrealize), NULL); - g_signal_connect (html, "popup-menu", + g_signal_connect (view, "popup-menu", G_CALLBACK (view_popup_menu), NULL); - g_signal_connect (html, "button-press-event", + g_signal_connect (view, "button-press-event", G_CALLBACK (view_button_press), NULL); - html_view_set_magnification (HTML_VIEW (html), data.zoom); - html_view_set_document (HTML_VIEW (html), html_document_new ()); +#if HAVE_WEBKIT_ZOOM_API + webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (view), data.zoom); +#endif - g_signal_connect (HTML_VIEW (html)->document, "title-changed", + g_signal_connect (view, "title-changed", G_CALLBACK (title_changed), - combo); - g_signal_connect (HTML_VIEW (html)->document, "link-clicked", - G_CALLBACK (link_clicked), + window); + + g_signal_connect (view, "load-started", + G_CALLBACK (load_started), NULL); - g_signal_connect (HTML_VIEW (html)->document, "request-url", - G_CALLBACK (request_url), + g_signal_connect (view, "load-finished", + G_CALLBACK (load_finished), NULL); - gtk_widget_grab_focus (html); + gtk_widget_grab_focus (view); g_signal_connect (window, "unmap", G_CALLBACK (dialog_unmap), paned); -} -static gboolean -idle_jump_to_anchor (const gchar *anchor) -{ - if (html && anchor) - html_view_jump_to_anchor (HTML_VIEW (html), anchor); - - return FALSE; -} - -static gboolean -idle_scroll_to_pos (gpointer data) -{ - gint offset = GPOINTER_TO_INT (data); - - if (html) - { - GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html)); - - gtk_adjustment_set_value (adj, - (gdouble) offset / (1 << 16) * adj->upper); - } - - return FALSE; + update_actions (); } void -browser_dialog_load (const gchar *uri, - gboolean add_to_queue) +browser_dialog_load (const gchar *uri) { - HtmlDocument *doc = HTML_VIEW (html)->document; - GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html)); - gchar *abs; - gchar *new_uri; - gchar *anchor; - gchar *tmp; - g_return_if_fail (uri != NULL); - if (! current_uri) - { - gchar *slash; + webkit_web_view_open (WEBKIT_WEB_VIEW (view), uri); - current_uri = g_strdup (uri); + select_index (uri); - slash = strrchr (current_uri, '/'); + gtk_window_present (GTK_WINDOW (gtk_widget_get_toplevel (view))); +} - if (slash) - *slash = '\0'; - } +static void +window_set_icons (GtkWidget *window) +{ + const GtkIconSize sizes[] = { GTK_ICON_SIZE_MENU, + GTK_ICON_SIZE_BUTTON, + GTK_ICON_SIZE_DND, + GTK_ICON_SIZE_DIALOG }; + GList *list = NULL; + gint i; - abs = uri_to_abs (uri, current_uri); - if (! abs) - return; + for (i = 0; i < G_N_ELEMENTS (sizes); i++) + list = g_list_prepend (list, + gtk_widget_render_icon (window, + GIMP_STOCK_USER_MANUAL, + sizes[i], NULL)); - anchor = strchr (uri, '#'); - if (anchor && anchor[0] && anchor[1]) - { - new_uri = g_strconcat (abs, anchor, NULL); - anchor += 1; - } - else - { - new_uri = g_strdup (abs); - anchor = NULL; - } - - if (uri_hash_table) - browser_dialog_goto_index (new_uri); - - if (! has_case_prefix (abs, "file:/")) - { - load_remote_page (uri); - return; - } - - tmp = uri_to_abs (current_uri, current_uri); - if (!tmp || strcmp (tmp, abs)) - { - GError *error = NULL; - - html_document_clear (doc); - html_document_open_stream (doc, "text/html"); - gtk_adjustment_set_value (adj, 0.0); - - if (anchor) - g_idle_add_full (G_PRIORITY_LOW, - (GSourceFunc) idle_jump_to_anchor, - g_strdup (anchor), (GDestroyNotify) g_free); - - if (request_url (doc, abs, doc->current_stream, &error)) - { - if (html->window) - gdk_window_set_cursor (html->window, busy_cursor); - } - else - { - browser_dialog_404 (doc, abs, error->message); - g_error_free (error); - } - } - else - { - if (anchor) - html_view_jump_to_anchor (HTML_VIEW (html), anchor); - else - gtk_adjustment_set_value (adj, 0.0); - } - - g_free (tmp); - - g_free (current_uri); - current_uri = new_uri; - - if (add_to_queue) - queue_add (queue, new_uri); - - update_toolbar (); - - gtk_window_present (GTK_WINDOW (gtk_widget_get_toplevel (html))); + gtk_window_set_icon_list (GTK_WINDOW (window), list); + g_list_foreach (list, (GFunc) g_object_unref, NULL); + g_list_free (list); } static void @@ -657,25 +473,25 @@ browser_dialog_make_index (GimpHelpDomain *domain, add_child (store, domain, locale, NULL, item); } - gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), - GTK_TREE_MODEL (store)); + gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (store)); g_object_unref (store); } -void -browser_dialog_goto_index (const gchar *ref) +static void +select_index (const gchar *uri) { - GtkTreeIter *iter = g_hash_table_lookup (uri_hash_table, ref); + GtkTreeSelection *selection; + GtkTreeIter *iter; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); + + iter = g_hash_table_lookup (uri_hash_table, uri); if (iter) { - GtkTreeSelection *selection; - GtkTreeModel *model; - GtkTreePath *path; - GtkTreePath *scroll_path; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)); + GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)); + GtkTreePath *path; + GtkTreePath *scroll_path; path = gtk_tree_model_get_path (model, iter); scroll_path = gtk_tree_path_copy (path); @@ -690,6 +506,10 @@ browser_dialog_goto_index (const gchar *ref) gtk_tree_selection_select_iter (selection, iter); } + else + { + gtk_tree_selection_unselect_all (selection); + } } @@ -711,9 +531,25 @@ ui_manager_new (GtkWidget *window) G_CALLBACK (forward_callback) }, { - "index", GTK_STOCK_INDEX, + "reload", GTK_STOCK_REFRESH, + N_("_Reload"), "R", N_("Reload current page"), + G_CALLBACK (reload_callback) + }, + { + "stop", GTK_STOCK_CANCEL, + N_("_Stop"), "Escape", N_("Stop loading this page"), + G_CALLBACK (stop_callback) + }, + { + "home", GTK_STOCK_HOME, NULL, "Home", N_("Go to the index page"), - G_CALLBACK (index_callback) + G_CALLBACK (home_callback) + }, + { + "copy-location", GTK_STOCK_COPY, + N_("C_opy location"), "", + N_("Copy the location of this page to the clipboard"), + G_CALLBACK (copy_location_callback) }, { "zoom-in", GTK_STOCK_ZOOM_IN, @@ -737,20 +573,36 @@ ui_manager_new (GtkWidget *window) } }; + static const GtkToggleActionEntry toggle_actions[] = + { + { + "show-index", NULL, + N_("S_how Index"), "I", + N_("Toggle the visibility of the sidebar"), + G_CALLBACK (show_index_callback), FALSE + } + }; + GtkUIManager *ui_manager = gtk_ui_manager_new (); GtkActionGroup *group = gtk_action_group_new ("Actions"); GtkAction *action; GError *error = NULL; gtk_action_group_set_translation_domain (group, NULL); - gtk_action_group_add_actions (group, actions, G_N_ELEMENTS (actions), NULL); + gtk_action_group_add_actions (group, + actions, G_N_ELEMENTS (actions), + NULL); + gtk_action_group_add_toggle_actions (group, + toggle_actions, + G_N_ELEMENTS (toggle_actions), + NULL); - action = gimp_throbber_action_new ("online", + action = gimp_throbber_action_new ("website", "docs.gimp.org", _("Visit the GIMP documentation website"), - GIMP_STOCK_WILBER); + GIMP_STOCK_USER_MANUAL); g_signal_connect_closure (action, "activate", - g_cclosure_new (G_CALLBACK (online_callback), + g_cclosure_new (G_CALLBACK (website_callback), NULL, NULL), FALSE); gtk_action_group_add_action (group, action); @@ -766,9 +618,11 @@ ui_manager_new (GtkWidget *window) gtk_ui_manager_add_ui_from_string (ui_manager, "" " " - " " + " " + " " + " " " " - " " + " " " " " " " " @@ -786,10 +640,17 @@ ui_manager_new (GtkWidget *window) " " " " " " - " " + " " + " " + " " + " " + " " + " " +#ifdef HAVE_WEBKIT_ZOOM_API " " " " " " +#endif " " " " " " @@ -805,133 +666,155 @@ ui_manager_new (GtkWidget *window) return ui_manager; } -static void -browser_dialog_404 (HtmlDocument *doc, - const gchar *uri, - const gchar *message) -{ - gchar *msg = g_strdup_printf - ("" - "" - "%s" - "" - "
" - "
%s
" - "

%s

" - "%s" - "

%s

" - "
" - "" - "", - _("Document not found"), - eek_png_tag, - _("The requested URL could not be loaded:"), - uri, - message); - - html_document_write_stream (doc, msg, strlen (msg)); - - g_free (msg); -} - static void back_callback (GtkAction *action, gpointer data) { - gdouble pos; - const gchar *uri = queue_prev (queue, GPOINTER_TO_INT (data), &pos); - - if (uri) - { - browser_dialog_load (uri, FALSE); - - g_idle_add ((GSourceFunc) idle_scroll_to_pos, - GINT_TO_POINTER ((gint) (pos * (1 << 16)))); - - queue_move_prev (queue, GPOINTER_TO_INT (data)); - } - - update_toolbar (); + webkit_web_view_go_back (WEBKIT_WEB_VIEW (view)); } static void forward_callback (GtkAction *action, gpointer data) { - gdouble pos; - const gchar *uri = queue_next (queue, GPOINTER_TO_INT (data), &pos); - - if (uri) - { - browser_dialog_load (uri, FALSE); - - g_idle_add ((GSourceFunc) idle_scroll_to_pos, - GINT_TO_POINTER ((gint) (pos * (1 << 16)))); - - queue_move_next (queue, GPOINTER_TO_INT (data)); - } - - update_toolbar (); + webkit_web_view_go_forward (WEBKIT_WEB_VIEW (view)); } static void -index_callback (GtkAction *action, - gpointer data) +reload_callback (GtkAction *action, + gpointer data) { - browser_dialog_load ("index.html", TRUE); + webkit_web_view_reload (WEBKIT_WEB_VIEW (view)); +} + +static void +stop_callback (GtkAction *action, + gpointer data) +{ + webkit_web_view_stop_loading (WEBKIT_WEB_VIEW (view)); +} + +static void +home_callback (GtkAction *action, + gpointer data) +{ + GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)); + GimpHelpDomain *domain = g_object_get_data (G_OBJECT (model), "domain"); + GimpHelpLocale *locale = g_object_get_data (G_OBJECT (model), "locale"); + + if (domain && locale) + { + gchar *uri = g_strconcat (domain->help_uri, "/", + locale->locale_id, "/", + gimp_help_locale_map (locale, + GIMP_HELP_DEFAULT_ID), + NULL); + browser_dialog_load (uri); + g_free (uri); + } +} + +static void +copy_location_callback (GtkAction *action, + gpointer data) +{ + WebKitWebFrame *frame; + const gchar *uri; + + frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view)); + uri = webkit_web_frame_get_uri (frame); + + if (uri) + { + GtkClipboard *clipboard; + + clipboard = gtk_clipboard_get_for_display (gtk_widget_get_display (view), + GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_text (clipboard, uri, -1); + } +} + +static void +show_index_callback (GtkAction *action, + gpointer data) +{ + if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) + { + gtk_widget_show (sidebar); + } + else + { + gtk_widget_hide (sidebar); + } } static void zoom_in_callback (GtkAction *action, gpointer data) { - html_view_zoom_in (HTML_VIEW (html)); +#ifdef HAVE_WEBKIT_ZOOM_API + webkit_web_view_zoom_in (WEBKIT_WEB_VIEW (view)); +#endif } static void zoom_out_callback (GtkAction *action, gpointer data) { - html_view_zoom_out (HTML_VIEW (html)); +#ifdef HAVE_WEBKIT_ZOOM_API + webkit_web_view_zoom_out (WEBKIT_WEB_VIEW (view)); +#endif } static void -online_callback (GtkAction *action, - gpointer data) +website_callback (GtkAction *action, + gpointer data) { - load_remote_page ("http://docs.gimp.org/"); + browser_dialog_load ("http://docs.gimp.org/"); } static void close_callback (GtkAction *action, gpointer data) { - gtk_widget_destroy (gtk_widget_get_toplevel (html)); + gtk_widget_destroy (gtk_widget_get_toplevel (view)); } +static void +menu_callback (GtkWidget *menu, + WebKitWebHistoryItem *item) +{ + browser_dialog_load (webkit_web_history_item_get_uri (item)); +} + +/* this function unrefs the items and frees the list */ static GtkWidget * -build_menu (GList *list, - GCallback callback) +build_menu (GList *list) { GtkWidget *menu; - gint i; if (! list) return NULL; menu = gtk_menu_new (); - for (i = 0; list && i < 15; list = g_list_next (list), i++) + do { - GtkWidget *menu_item = gtk_menu_item_new_with_label (list->data); + WebKitWebHistoryItem *item = list->data; + GtkWidget *menu_item; + + menu_item = gtk_menu_item_new_with_label (webkit_web_history_item_get_title (item)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); gtk_widget_show (menu_item); - g_signal_connect (menu_item, "activate", - G_CALLBACK (callback), - GINT_TO_POINTER (i)); + g_signal_connect_object (menu_item, "activate", + G_CALLBACK (menu_callback), + item, 0); + + g_object_unref (item); } + while ((list = g_list_next (list))); g_list_free (list); @@ -939,87 +822,69 @@ build_menu (GList *list, } static void -update_toolbar (void) +update_actions (void) { - GtkAction *action; + GtkAction *action; + WebKitWebBackForwardList *back_forward_list; + WebKitWebFrame *frame; + + back_forward_list = + webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (view)); /* update the back button and its menu */ action = gtk_ui_manager_get_action (ui_manager, "/ui/help-browser-popup/back"); - gtk_action_set_sensitive (action, queue_has_prev (queue)); + gtk_action_set_sensitive (action, + webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (view))); - gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev), - build_menu (queue_list_prev (queue), - G_CALLBACK (back_callback))); + if (back_forward_list) + { + GList *list; + + list = webkit_web_back_forward_list_get_back_list_with_limit (back_forward_list, + 12); + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev), + build_menu (list)); + } + else + { + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev), NULL); + } /* update the forward button and its menu */ action = gtk_ui_manager_get_action (ui_manager, "/ui/help-browser-popup/forward"); - gtk_action_set_sensitive (action, queue_has_next (queue)); + gtk_action_set_sensitive (action, + webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (view))); - gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next), - build_menu (queue_list_next (queue), - G_CALLBACK (forward_callback))); -} - -static void -combo_changed (GtkWidget *widget, - gpointer data) -{ - GtkComboBox *combo = GTK_COMBO_BOX (widget); - GtkTreeIter iter; - - if (gtk_combo_box_get_active_iter (combo, &iter)) + if (back_forward_list) { - GValue value = { 0, }; + GList *list; - gtk_tree_model_get_value (gtk_combo_box_get_model (combo), - &iter, HISTORY_URI, &value); - - browser_dialog_load (g_value_get_string (&value), TRUE); - - g_value_unset (&value); + list = webkit_web_back_forward_list_get_forward_list_with_limit (back_forward_list, + 12); + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next), + build_menu (list)); } -} - -static void -drag_begin (GtkWidget *widget, - GdkDragContext *context, - gpointer data) -{ - gtk_drag_set_icon_stock (context, GIMP_STOCK_WEB, -8, -8); -} - -static void -drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - gpointer data) -{ - if (! current_uri) - return; - - if (selection_data->target == - gdk_atom_intern_static_string ("text/uri-list")) + else { - gchar *uris[2]; - - uris[0] = current_uri; - uris[1] = NULL; - - gtk_selection_data_set_uris (selection_data, uris); - } - else if (selection_data->target == - gdk_atom_intern_static_string ("_NETSCAPE_URL")) - { - gtk_selection_data_set (selection_data, - selection_data->target, - 8, (guchar *) current_uri, strlen (current_uri)); + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next), NULL); } + + /* update the copy-location action */ + action = gtk_ui_manager_get_action (ui_manager, + "/ui/help-browser-popup/copy-location"); + + frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view)); + gtk_action_set_sensitive (action, webkit_web_frame_get_uri (frame) != NULL); + + /* update the show-index action */ + action = gtk_ui_manager_get_action (ui_manager, + "/ui/help-browser-popup/show-index"); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), + GTK_WIDGET_VISIBLE (sidebar)); } static void @@ -1048,7 +913,7 @@ row_activated (GtkTreeView *tree_view, item->ref, NULL); - browser_dialog_load (uri, TRUE); + browser_dialog_load (uri); g_free (uri); } @@ -1057,13 +922,19 @@ static void dialog_unmap (GtkWidget *window, GtkWidget *paned) { - DialogData data; + DialogData data; gtk_window_get_size (GTK_WINDOW (window), &data.width, &data.height); data.paned_position = gtk_paned_get_position (GTK_PANED (paned)); + data.show_index = GTK_WIDGET_VISIBLE (sidebar); - data.zoom = html ? html_view_get_magnification (HTML_VIEW (html)) : 1.0; +#ifdef HAVE_WEBKIT_ZOOM_API + data.zoom = (view ? + webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (view)) : 1.0); +#else + data.zoom = 1.0; +#endif gimp_set_data (GIMP_HELP_BROWSER_DIALOG_DATA, &data, sizeof (data)); @@ -1116,255 +987,39 @@ view_button_press (GtkWidget *widget, } static void -title_changed (HtmlDocument *doc, - const gchar *new_title, - gpointer data) +title_changed (GtkWidget *view, + WebKitWebFrame *frame, + const gchar *title, + GtkWidget *window) { - gchar *title = NULL; + gchar *full_title; - if (new_title) - { - gchar *c; + full_title = g_strdup_printf ("%s - %s", + title ? title : _("Untitled"), + _("GIMP Help Browser")); - title = g_strdup (new_title); + gtk_window_set_title (GTK_WINDOW (window), full_title); + g_free (full_title); - for (c = title; *c; c++) - { - if (*c == '\n' || *c == '\r') - *c = ' '; - } - - title = g_strstrip (title); - if (! strlen (title)) - { - g_free (title); - title = NULL; - } - } - - history_add (GTK_COMBO_BOX (data), - current_uri, title ? title : _("Untitled")); - - if (title) - queue_set_title (queue, title); - - g_free (title); + update_actions (); } static void -link_clicked (HtmlDocument *doc, - const gchar *uri, - gpointer data) +load_started (GtkWidget *view, + WebKitWebFrame *frame) { - GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html)); - - if (adj->upper > 0.0) - queue_set_scroll_offset (queue, adj->value / adj->upper); - - browser_dialog_load (uri, TRUE); -} - -static gboolean -request_url (HtmlDocument *doc, - const gchar *uri, - HtmlStream *stream, - GError **error) -{ - gchar *abs; - gchar *filename; - - g_return_val_if_fail (uri != NULL, TRUE); - g_return_val_if_fail (stream != NULL, TRUE); - - abs = uri_to_abs (uri, current_uri); - if (! abs) - return TRUE; - - filename = filename_from_uri (abs); - g_free (abs); - - if (filename) - { - gint fd = g_open (filename, O_RDONLY | _O_BINARY, 0); - - if (fd != -1) - { - GIOChannel *io = g_io_channel_unix_new (fd); - - g_io_channel_set_close_on_unref (io, TRUE); - g_io_channel_set_encoding (io, NULL, NULL); - - g_io_add_watch (io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, - io_handler, stream); - } - - g_free (filename); - - if (fd == -1) - { - g_set_error (error, - G_FILE_ERROR, g_file_error_from_errno (errno), - g_strerror (errno)); - return FALSE; - } - } - - return TRUE; -} - -static gboolean -io_handler (GIOChannel *io, - GIOCondition condition, - gpointer data) -{ - HtmlStream *stream = data; - gchar buffer[8192]; - gsize bytes; - - if (condition & G_IO_IN) - { - if (g_io_channel_read_chars (io, buffer, sizeof (buffer), - &bytes, NULL) != G_IO_STATUS_ERROR - && bytes > 0) - { - html_stream_write (stream, buffer, bytes); - } - else - { - goto error; - } - - if (condition & G_IO_HUP) - { - while (g_io_channel_read_chars (io, buffer, sizeof (buffer), - &bytes, NULL) != G_IO_STATUS_ERROR - && bytes > 0) - { - html_stream_write (stream, buffer, bytes); - } - } - } - - if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) - { - error: - html_stream_close (stream); - g_io_channel_unref (io); - - if (html->window) - gdk_window_set_cursor (html->window, NULL); - - return FALSE; - } - - return TRUE; + GtkAction *action = gtk_ui_manager_get_action (ui_manager, + "/ui/help-browser-popup/stop"); + gtk_action_set_sensitive (action, TRUE); } static void -load_remote_page (const gchar *uri) +load_finished (GtkWidget *view, + WebKitWebFrame *frame) { - GimpParam *return_vals; - gint nreturn_vals; + GtkAction *action = gtk_ui_manager_get_action (ui_manager, + "/ui/help-browser-popup/stop"); + gtk_action_set_sensitive (action, FALSE); - /* try to call the user specified web browser */ - return_vals = gimp_run_procedure ("plug-in-web-browser", - &nreturn_vals, - GIMP_PDB_STRING, uri, - GIMP_PDB_END); - gimp_destroy_params (return_vals, nreturn_vals); -} - -static void -history_add (GtkComboBox *combo, - const gchar *uri, - const gchar *title) -{ - GtkTreeModel *model = gtk_combo_box_get_model (combo); - GtkTreeIter iter; - gboolean iter_valid; - GValue value = { 0, }; - - for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); - iter_valid; - iter_valid = gtk_tree_model_iter_next (model, &iter)) - { - gtk_tree_model_get_value (model, &iter, HISTORY_URI, &value); - - if (strcmp (g_value_get_string (&value), uri) == 0) - { - gtk_list_store_move_after (GTK_LIST_STORE (model), &iter, NULL); - g_value_unset (&value); - break; - } - - g_value_unset (&value); - } - - if (! iter_valid) - { - gtk_list_store_prepend (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - HISTORY_TITLE, title, - HISTORY_URI, uri, - -1); - } - - g_signal_handlers_block_by_func (combo, combo_changed, NULL); - gtk_combo_box_set_active_iter (combo, &iter); - g_signal_handlers_unblock_by_func (combo, combo_changed, NULL); -} - -/* Taken from glib/gconvert.c: - * Test of haystack has the needle prefix, comparing case - * insensitive. haystack may be UTF-8, but needle must - * contain only ascii. - */ -static gboolean -has_case_prefix (const gchar *haystack, const gchar *needle) -{ - const gchar *h = haystack; - const gchar *n = needle; - - while (*n && *h && g_ascii_tolower (*n) == g_ascii_tolower (*h)) - { - n++; - h++; - } - - return (*n == '\0'); -} - -static gchar * -filename_from_uri (const gchar *uri) -{ - gchar *filename; - gchar *hostname; - - g_return_val_if_fail (uri != NULL, NULL); - - filename = g_filename_from_uri (uri, &hostname, NULL); - - if (!filename) - return NULL; - - if (hostname) - { - /* we have a file: URI with a hostname */ -#ifdef G_OS_WIN32 - /* on Win32, create a valid UNC path and use it as the filename */ - - gchar *tmp = g_build_filename ("//", hostname, filename, NULL); - - g_free (filename); - filename = tmp; -#else - /* otherwise return NULL, caller should use URI then */ - g_free (filename); - filename = NULL; -#endif - - g_free (hostname); - } - - return filename; + update_actions (); } diff --git a/plug-ins/help-browser/dialog.h b/plug-ins/help-browser/dialog.h index 5a48d0b812..071d0929c2 100644 --- a/plug-ins/help-browser/dialog.h +++ b/plug-ins/help-browser/dialog.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__ */ diff --git a/plug-ins/help-browser/gimpthrobber.c b/plug-ins/help-browser/gimpthrobber.c index 5d488bec23..7d2f69e379 100644 --- a/plug-ins/help-browser/gimpthrobber.c +++ b/plug-ins/help-browser/gimpthrobber.c @@ -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); diff --git a/plug-ins/help-browser/help-browser.c b/plug-ins/help-browser/help-browser.c index 87af9398ec..f4cda8f441 100644 --- a/plug-ins/help-browser/help-browser.c +++ b/plug-ins/help-browser/help-browser.c @@ -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); +} diff --git a/plug-ins/help-browser/queue.c b/plug-ins/help-browser/queue.c deleted file mode 100644 index 47de72b63b..0000000000 --- a/plug-ins/help-browser/queue.c +++ /dev/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 - * Michael Natterer - * - * 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 - -#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); -} diff --git a/plug-ins/help-browser/queue.h b/plug-ins/help-browser/queue.h deleted file mode 100644 index 1036a0d19d..0000000000 --- a/plug-ins/help-browser/queue.h +++ /dev/null @@ -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 - * Michael Natterer - * - * 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_ */ diff --git a/plug-ins/help/gimphelp.c b/plug-ins/help/gimphelp.c index ce9fdbced3..5be2542b0b 100644 --- a/plug-ins/help/gimphelp.c +++ b/plug-ins/help/gimphelp.c @@ -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; diff --git a/plug-ins/help/gimphelplocale.c b/plug-ins/help/gimphelplocale.c index 08cb739a2c..a25f5ba898 100644 --- a/plug-ins/help/gimphelplocale.c +++ b/plug-ins/help/gimphelplocale.c @@ -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, diff --git a/plug-ins/help/help.c b/plug-ins/help/help.c index 7ea097c144..87a9ffee71 100644 --- a/plug-ins/help/help.c +++ b/plug-ins/help/help.c @@ -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); +} diff --git a/plug-ins/imagemap/imap_main.c b/plug-ins/imagemap/imap_main.c index 03ef969f96..3a22b7265e 100644 --- a/plug-ins/imagemap/imap_main.c +++ b/plug-ins/imagemap/imap_main.c @@ -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); diff --git a/po-plug-ins/ChangeLog b/po-plug-ins/ChangeLog index d7569e8d65..754192e43d 100644 --- a/po-plug-ins/ChangeLog +++ b/po-plug-ins/ChangeLog @@ -1,3 +1,11 @@ +2008-06-11 Alexandre Prokoudine + + * ru.po: updated and improved Russian translation. + +2008-06-11 Sven Neumann + + * de.po: updated German translation. + 2008-06-06 Sven Neumann * POTFILES.skip: fixed the insanity using a new feature in diff --git a/po-plug-ins/de.po b/po-plug-ins/de.po index 5a83962b5a..339d98b56b 100644 --- a/po-plug-ins/de.po +++ b/po-plug-ins/de.po @@ -19,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: gimp trunk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-05-10 12:56+0200\n" -"PO-Revision-Date: 2008-05-10 13:02+0200\n" -"Last-Translator: Hendrik Brandt \n" +"POT-Creation-Date: 2008-06-11 08:26+0200\n" +"PO-Revision-Date: 2008-06-11 08:42+0200\n" +"Last-Translator: Sven Neumann \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -47,23 +47,23 @@ msgstr "Fehlerhafte Palette" #: ../plug-ins/common/mng.c:1067 ../plug-ins/common/pat.c:317 #: ../plug-ins/common/pcx.c:344 ../plug-ins/common/pix.c:329 #: ../plug-ins/common/png.c:703 ../plug-ins/common/pnm.c:480 -#: ../plug-ins/common/poppler.c:527 ../plug-ins/common/postscript.c:1023 +#: ../plug-ins/common/poppler.c:529 ../plug-ins/common/postscript.c:1023 #: ../plug-ins/common/postscript.c:3031 ../plug-ins/common/psp.c:1747 #: ../plug-ins/common/raw.c:243 ../plug-ins/common/raw.c:645 #: ../plug-ins/common/sphere-designer.c:2002 ../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/tiff-load.c:288 +#: ../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 #: ../plug-ins/faxg3/faxg3.c:219 ../plug-ins/fits/fits.c:345 #: ../plug-ins/flame/flame.c:411 ../plug-ins/fli/fli-gimp.c:429 #: ../plug-ins/fli/fli-gimp.c:464 #: ../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:195 -#: ../plug-ins/ico/ico-load.c:651 ../plug-ins/ico/ico-load.c:728 -#: ../plug-ins/jpeg/jpeg-load.c:111 ../plug-ins/jpeg/jpeg-load.c:828 -#: ../plug-ins/lighting/lighting-ui.c:1354 ../plug-ins/psd/psd-load.c:125 -#: ../plug-ins/psd/psd-thumb-load.c:78 +#: ../plug-ins/gfig/gfig.c:434 ../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 +#: ../plug-ins/jpeg/jpeg-load.c:828 ../plug-ins/lighting/lighting-ui.c:1354 +#: ../plug-ins/psd/psd-load.c:125 ../plug-ins/psd/psd-thumb-load.c:78 #: ../plug-ins/uri/uri-backend-gnomevfs.c:271 #: ../plug-ins/uri/uri-backend-libcurl.c:186 ../plug-ins/xjt/xjt.c:2545 #: ../plug-ins/xjt/xjt.c:2553 @@ -80,9 +80,9 @@ msgstr "Datei »%s« konnte nicht zum Lesen geöffnet werden: %s" #: ../plug-ins/common/gif-load.c:314 ../plug-ins/common/gih.c:654 #: ../plug-ins/common/pat.c:322 ../plug-ins/common/pcx.c:349 #: ../plug-ins/common/pix.c:334 ../plug-ins/common/png.c:710 -#: ../plug-ins/common/pnm.c:485 ../plug-ins/common/poppler.c:572 +#: ../plug-ins/common/pnm.c:485 ../plug-ins/common/poppler.c:574 #: ../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/sunras.c:470 ../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 ../plug-ins/common/xpm.c:343 #: ../plug-ins/common/xwd.c:506 ../plug-ins/faxg3/faxg3.c:204 @@ -139,7 +139,7 @@ msgstr "Nicht unterstützte oder ungültige Bildhöhe: %d" #: ../plug-ins/common/pcx.c:399 ../plug-ins/common/pix.c:368 #: ../plug-ins/common/png.c:831 ../plug-ins/common/pnm.c:571 #: ../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/sunras.c:956 ../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 ../plug-ins/faxg3/faxg3.c:464 #: ../plug-ins/fits/fits.c:511 ../plug-ins/gfig/gfig-dialog.c:1284 @@ -176,16 +176,16 @@ msgstr "Alpha-Kanal wird ignoriert." #: ../plug-ins/common/mng.c:904 ../plug-ins/common/pat.c:447 #: ../plug-ins/common/pcx.c:645 ../plug-ins/common/pix.c:508 #: ../plug-ins/common/png.c:1245 ../plug-ins/common/pnm.c:958 -#: ../plug-ins/common/postscript.c:1196 ../plug-ins/common/psd-save.c:1557 +#: ../plug-ins/common/postscript.c:1196 ../plug-ins/common/psd-save.c:1559 #: ../plug-ins/common/raw.c:528 ../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/tiff-save.c:671 +#: ../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 #: ../plug-ins/fits/fits.c:457 ../plug-ins/flame/flame.c:442 #: ../plug-ins/fli/fli-gimp.c:715 #: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1546 #: ../plug-ins/gfig/gfig.c:794 ../plug-ins/ico/ico-save.c:1020 -#: ../plug-ins/ifs-compose/ifs-compose.c:2376 ../plug-ins/jpeg/jpeg-save.c:325 +#: ../plug-ins/ifs-compose/ifs-compose.c:2376 ../plug-ins/jpeg/jpeg-save.c:320 #: ../plug-ins/lighting/lighting-ui.c:1211 #: ../plug-ins/uri/uri-backend-gnomevfs.c:282 ../plug-ins/xjt/xjt.c:1280 #: ../plug-ins/xjt/xjt.c:1714 @@ -201,12 +201,12 @@ msgstr "Datei »%s« konnte nicht zum Schreiben geöffnet werden: %s" #: ../plug-ins/common/pat.c:452 ../plug-ins/common/pcx.c:607 #: ../plug-ins/common/pix.c:513 ../plug-ins/common/png.c:1252 #: ../plug-ins/common/pnm.c:963 ../plug-ins/common/postscript.c:1201 -#: ../plug-ins/common/psd-save.c:1562 ../plug-ins/common/sunras.c:549 -#: ../plug-ins/common/tga.c:1138 ../plug-ins/common/tiff-save.c:681 +#: ../plug-ins/common/psd-save.c:1564 ../plug-ins/common/sunras.c:549 +#: ../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 #: ../plug-ins/common/xwd.c:603 ../plug-ins/fits/fits.c:462 #: ../plug-ins/fli/fli-gimp.c:684 ../plug-ins/ico/ico-save.c:1015 -#: ../plug-ins/jpeg/jpeg-save.c:283 ../plug-ins/sgi/sgi.c:537 +#: ../plug-ins/jpeg/jpeg-save.c:278 ../plug-ins/sgi/sgi.c:537 #: ../plug-ins/xjt/xjt.c:1697 #, c-format msgid "Saving '%s'" @@ -220,7 +220,7 @@ msgstr "Als BMP speichern" msgid "_Run-Length Encoded" msgstr "_RL-kodiert" -#: ../plug-ins/bmp/bmp-write.c:826 ../plug-ins/jpeg/jpeg-save.c:892 +#: ../plug-ins/bmp/bmp-write.c:826 ../plug-ins/jpeg/jpeg-save.c:890 msgid "_Advanced Options" msgstr "_Erweiterte Optionen" @@ -556,7 +556,7 @@ msgid "Left edge" msgstr "Linker Rand" #: ../plug-ins/common/align-layers.c:440 ../plug-ins/common/align-layers.c:470 -#: ../plug-ins/gradient-flare/gradient-flare.c:2667 +#: ../plug-ins/gradient-flare/gradient-flare.c:2712 msgid "Center" msgstr "Mitte" @@ -853,7 +853,7 @@ msgstr "Selektiver Gaußscher Weichzeichner" #: ../plug-ins/common/blur-gauss.c:445 ../plug-ins/common/cartoon.c:229 #: ../plug-ins/common/edge-dog.c:251 ../plug-ins/common/edge-neon.c:225 #: ../plug-ins/common/photocopy.c:241 ../plug-ins/common/softglow.c:221 -#: ../plug-ins/gradient-flare/gradient-flare.c:965 ../plug-ins/sgi/sgi.c:520 +#: ../plug-ins/gradient-flare/gradient-flare.c:964 ../plug-ins/sgi/sgi.c:520 #: ../plug-ins/xjt/xjt.c:1688 msgid "Cannot operate on indexed color images." msgstr "Es kann nicht mit Bildern im indizierten Farbmodus gearbeitet werden." @@ -951,7 +951,7 @@ msgstr "Unschärfezentrum" #: ../plug-ins/common/blur-motion.c:1094 ../plug-ins/common/lens-flare.c:772 #: ../plug-ins/common/nova.c:463 ../plug-ins/common/tile-paper.c:282 #: ../plug-ins/flame/flame.c:1250 -#: ../plug-ins/gradient-flare/gradient-flare.c:2679 +#: ../plug-ins/gradient-flare/gradient-flare.c:2724 #: ../plug-ins/lighting/lighting-ui.c:477 msgid "_X:" msgstr "_X:" @@ -959,7 +959,7 @@ msgstr "_X:" #: ../plug-ins/common/blur-motion.c:1099 ../plug-ins/common/lens-flare.c:777 #: ../plug-ins/common/nova.c:468 ../plug-ins/common/tile-paper.c:291 #: ../plug-ins/flame/flame.c:1264 -#: ../plug-ins/gradient-flare/gradient-flare.c:2683 +#: ../plug-ins/gradient-flare/gradient-flare.c:2728 #: ../plug-ins/lighting/lighting-ui.c:492 msgid "_Y:" msgstr "_Y:" @@ -2864,7 +2864,7 @@ msgstr "Re_kursiv" #: ../plug-ins/common/despeckle.c:493 ../plug-ins/common/edge-neon.c:730 #: ../plug-ins/common/nl-filter.c:1088 ../plug-ins/common/nova.c:366 #: ../plug-ins/common/unsharp-mask.c:680 ../plug-ins/common/whirl-pinch.c:588 -#: ../plug-ins/gradient-flare/gradient-flare.c:2712 +#: ../plug-ins/gradient-flare/gradient-flare.c:2757 #: ../plug-ins/imagemap/imap_circle.c:278 msgid "_Radius:" msgstr "_Radius:" @@ -3257,7 +3257,7 @@ msgid "Composing images" msgstr "Bilder werden kombiniert" #: ../plug-ins/common/film.c:425 ../plug-ins/common/guillotine.c:185 -#: ../plug-ins/help-browser/dialog.c:1144 +#: ../plug-ins/help-browser/dialog.c:1038 msgid "Untitled" msgstr "Unbenannt" @@ -3593,7 +3593,7 @@ msgstr "Ungültige UTF-8-Zeichenkette in der Pinseldatei »%s«" #: ../plug-ins/common/gbr.c:425 ../plug-ins/common/gih.c:499 #: ../plug-ins/common/gih.c:1158 -#: ../plug-ins/gradient-flare/gradient-flare.c:3017 +#: ../plug-ins/gradient-flare/gradient-flare.c:3062 msgid "Unnamed" msgstr "Unbenannt" @@ -4249,7 +4249,7 @@ msgid "Thresho_ld:" msgstr "Sc_hwellwert:" #: ../plug-ins/common/iwarp.c:1214 ../plug-ins/common/sinus.c:771 -#: ../plug-ins/gradient-flare/gradient-flare.c:2821 +#: ../plug-ins/gradient-flare/gradient-flare.c:2866 msgid "_Settings" msgstr "_Einstellungen" @@ -4923,7 +4923,7 @@ msgstr "Z_ellgröße:" #. screen settings #: ../plug-ins/common/newsprint.c:1298 -#: ../plug-ins/gradient-flare/gradient-flare.c:555 +#: ../plug-ins/gradient-flare/gradient-flare.c:554 msgid "Screen" msgstr "Schirm" @@ -5512,11 +5512,11 @@ msgstr "Farb_werte aus Transparenz speichern" msgid "Co_mpression level:" msgstr "_Kompressionsgrad:" -#: ../plug-ins/common/png.c:1897 ../plug-ins/jpeg/jpeg-save.c:1164 +#: ../plug-ins/common/png.c:1897 ../plug-ins/jpeg/jpeg-save.c:1169 msgid "_Load Defaults" msgstr "Standardwerte _laden" -#: ../plug-ins/common/png.c:1905 ../plug-ins/jpeg/jpeg-save.c:1173 +#: ../plug-ins/common/png.c:1905 msgid "S_ave Defaults" msgstr "Standardwerte _speichern" @@ -5657,42 +5657,42 @@ msgstr "" "Wenn angeklickt, wird das Bild kreisförmig auf ein Rechteck abgebildet. " "Andernfalls wird das Bild auf einen Kreis abgebildet." -#: ../plug-ins/common/poppler.c:285 +#: ../plug-ins/common/poppler.c:287 msgid "Portable Document Format" msgstr "Portable-Document-Format" -#: ../plug-ins/common/poppler.c:606 +#: ../plug-ins/common/poppler.c:608 #, c-format msgid "%s-%s" msgstr "%s-%s" -#: ../plug-ins/common/poppler.c:608 ../plug-ins/common/postscript.c:1111 +#: ../plug-ins/common/poppler.c:610 ../plug-ins/common/postscript.c:1111 #, c-format msgid "%s-pages" msgstr "%s-Seiten" -#: ../plug-ins/common/poppler.c:794 +#: ../plug-ins/common/poppler.c:796 msgid "Import from PDF" msgstr "Aus PDF importieren" -#: ../plug-ins/common/poppler.c:799 ../plug-ins/common/postscript.c:3083 +#: ../plug-ins/common/poppler.c:801 ../plug-ins/common/postscript.c:3083 #: ../plug-ins/common/tiff-load.c:451 msgid "_Import" msgstr "_Importieren" -#: ../plug-ins/common/poppler.c:865 +#: ../plug-ins/common/poppler.c:867 msgid "_Width (pixels):" msgstr "_Breite (Pixel):" -#: ../plug-ins/common/poppler.c:866 +#: ../plug-ins/common/poppler.c:868 msgid "_Height (pixels):" msgstr "_Höhe (Pixel):" -#: ../plug-ins/common/poppler.c:868 +#: ../plug-ins/common/poppler.c:870 msgid "_Resolution:" msgstr "A_uflösung:" -#: ../plug-ins/common/poppler.c:1142 +#: ../plug-ins/common/poppler.c:1144 #, c-format msgid "pixels/%s" msgstr "Pixel/%s" @@ -5913,7 +5913,7 @@ msgid "Error: Can't convert GIMP base imagetype to PSD mode" msgstr "" "Fehler: Der GIMP-Basisbildtyp kann nicht in den PSD-Modus umgewandelt werden" -#: ../plug-ins/common/psd-save.c:1533 +#: ../plug-ins/common/psd-save.c:1535 #, c-format msgid "" "Unable to save '%s'. The PSD file format does not support images that are " @@ -5922,7 +5922,7 @@ msgstr "" "»%s« konnte nicht gespeichert werden. Das PSD-Dateiformat unterstützt keine " "Bilder die höher oder breiter als 30.000 Pixel sind." -#: ../plug-ins/common/psd-save.c:1545 +#: ../plug-ins/common/psd-save.c:1547 #, c-format msgid "" "Unable to save '%s'. The PSD file format does not support images with " @@ -6056,36 +6056,36 @@ msgstr "Planar (RRR,GGG,BBB)" msgid "Indexed Palette Type" msgstr "Indizierter Palettentyp" -#: ../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 "Entfernt die durch Kamerablitzlichter verursachten roten Augen" -#: ../plug-ins/common/red-eye-removal.c:117 +#: ../plug-ins/common/red-eye-removal.c:116 msgid "_Red Eye Removal..." msgstr "_Rote Augen entfernen …" -#: ../plug-ins/common/red-eye-removal.c:144 +#: ../plug-ins/common/red-eye-removal.c:142 msgid "Red Eye Removal" msgstr "Rote Augen entfernen" -#: ../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 #: ../plug-ins/map-object/map-object-ui.c:585 msgid "_Threshold:" msgstr "_Schwellwert:" -#: ../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 "Schwellwert für die Rötung, die entfernt wird." -#: ../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 "" "Das Ergebnis kann möglicherweise verbessert werden, wenn Sie die Augen per " "Hand auswählen." -#: ../plug-ins/common/red-eye-removal.c:316 +#: ../plug-ins/common/red-eye-removal.c:301 msgid "Removing red eye" msgstr "Rote Augen werden entfernt" @@ -7031,33 +7031,40 @@ msgstr "" msgid "Merge imported paths" msgstr "Importierte Pfade zusammenfügen" -#: ../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-Bild" -#: ../plug-ins/common/tga.c:434 +#: ../plug-ins/common/tga.c:439 #, c-format msgid "Cannot read footer from '%s'" msgstr "Das Dateiende von »%s« konnte nicht gelesen werden" -#: ../plug-ins/common/tga.c:450 +#: ../plug-ins/common/tga.c:455 #, c-format msgid "Cannot read extension from '%s'" msgstr "Die Erweiterung von »%s« konnte nicht gelesen werden" -#: ../plug-ins/common/tga.c:1323 +#: ../plug-ins/common/tga.c:1336 msgid "Save as TGA" msgstr "Als TGA speichern" #. rle -#: ../plug-ins/common/tga.c:1346 +#: ../plug-ins/common/tga.c:1359 msgid "_RLE compression" msgstr "_RLE-Kompression" -#. origin -#: ../plug-ins/common/tga.c:1356 -msgid "Or_igin at bottom left" -msgstr "Ur_sprung unten links" +#: ../plug-ins/common/tga.c:1373 +msgid "Or_igin:" +msgstr "Or_iginal:" + +#: ../plug-ins/common/tga.c:1377 +msgid "Bottom left" +msgstr "Unten links" + +#: ../plug-ins/common/tga.c:1378 +msgid "Top left" +msgstr "Open links" #: ../plug-ins/common/threshold-alpha.c:85 msgid "Make transparency all-or-nothing" @@ -7933,7 +7940,7 @@ msgstr "Wellen" #: ../plug-ins/common/web-browser.c:141 msgid "" "Web browser not specified.\n" -"Please specify a web browser using the Preferences Dialog." +"Please specify a web browser using the Preferences dialog." msgstr "" "Kein Internet-Browser angegeben.\n" "Bitte legen Sie in den Einstellungen einen Internet-Browser fest." @@ -7941,16 +7948,19 @@ msgstr "" #: ../plug-ins/common/web-browser.c:161 #, c-format msgid "" -"Could not parse specified web browser command:\n" +"Could not parse the web browser command specified in the Preferences " +"dialog:\n" +"\n" "%s" msgstr "" "Der angegebene Internet-Browser-Befehl konnte nicht analysiert werden:\n" "%s" -#: ../plug-ins/common/web-browser.c:174 +#: ../plug-ins/common/web-browser.c:175 #, c-format msgid "" -"Could not execute specified web browser:\n" +"Could not execute the web browser specified in the Preferences dialog:\n" +"\n" "%s" msgstr "" "Der eingestellte Internet-Browser konnte nicht gestartet werden:\n" @@ -8492,7 +8502,7 @@ msgstr "GFLI-1.3-Animation speichern" #: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:547 #: ../plug-ins/gfig/gfig-dialog.c:274 ../plug-ins/gimpressionist/utils.c:143 -#: ../plug-ins/gradient-flare/gradient-flare.c:883 +#: ../plug-ins/gradient-flare/gradient-flare.c:882 #, c-format msgid "" "No %s in gimprc:\n" @@ -8779,7 +8789,7 @@ msgid "Rendering fractal" msgstr "Fraktal wird berechnet" #: ../plug-ins/fractal-explorer/fractal-explorer.c:758 -#: ../plug-ins/gradient-flare/gradient-flare.c:3154 +#: ../plug-ins/gradient-flare/gradient-flare.c:3199 #, c-format msgid "Are you sure you want to delete \"%s\" from the list and from disk?" msgstr "Wollen Sie »%s« wirklich aus der Liste und von der Festplatte löschen?" @@ -8894,7 +8904,8 @@ msgstr "Bild zeigen" #. "snap to grid" checkbutton at bottom of style frame #: ../plug-ins/gfig/gfig-dialog.c:493 -msgid "checkbutton|Snap to grid" +msgctxt "checkbutton" +msgid "Snap to grid" msgstr "Am Gitter ausrichten" #. "show grid" checkbutton at bottom of style frame @@ -9089,7 +9100,7 @@ msgid "Grid type:" msgstr "Rastertyp:" #: ../plug-ins/gfig/gfig-dialog.c:1459 -#: ../plug-ins/gradient-flare/gradient-flare.c:552 +#: ../plug-ins/gradient-flare/gradient-flare.c:551 msgid "Normal" msgstr "Normal" @@ -9265,7 +9276,7 @@ msgid "Adds random noise to the color" msgstr "Fügt der Farbe ein zufälliges Rauschen hinzu" #: ../plug-ins/gimpressionist/general.c:134 -#: ../plug-ins/gradient-flare/gradient-flare.c:3483 +#: ../plug-ins/gradient-flare/gradient-flare.c:3528 msgid "_General" msgstr "_Allgemein" @@ -9840,46 +9851,46 @@ msgstr "" "Voronoi-Modus: Nur der SMVektor, der einem Punkt am nächsten ist, hat " "Einfluss" -#: ../plug-ins/gradient-flare/gradient-flare.c:553 +#: ../plug-ins/gradient-flare/gradient-flare.c:552 msgid "Addition" msgstr "Addieren" -#: ../plug-ins/gradient-flare/gradient-flare.c:554 +#: ../plug-ins/gradient-flare/gradient-flare.c:553 msgid "Overlay" msgstr "Überlagern" -#: ../plug-ins/gradient-flare/gradient-flare.c:809 +#: ../plug-ins/gradient-flare/gradient-flare.c:808 msgid "Produce a lense flare effect using gradients" msgstr "Erstellt einen Linsenreflexeffekt unter Verwendung von Verläufen" -#: ../plug-ins/gradient-flare/gradient-flare.c:814 +#: ../plug-ins/gradient-flare/gradient-flare.c:813 msgid "_Gradient Flare..." msgstr "_Verlaufsaufhellung …" #. #. * Dialog Shell #. -#: ../plug-ins/gradient-flare/gradient-flare.c:953 -#: ../plug-ins/gradient-flare/gradient-flare.c:2311 +#: ../plug-ins/gradient-flare/gradient-flare.c:952 +#: ../plug-ins/gradient-flare/gradient-flare.c:2356 msgid "Gradient Flare" msgstr "Verlaufsaufhellung" -#: ../plug-ins/gradient-flare/gradient-flare.c:1264 +#: ../plug-ins/gradient-flare/gradient-flare.c:1263 #, c-format msgid "Failed to open GFlare file '%s': %s" msgstr "Fehler beim Öffnen der GFlare-Datei »%s«: %s" -#: ../plug-ins/gradient-flare/gradient-flare.c:1272 +#: ../plug-ins/gradient-flare/gradient-flare.c:1271 #, c-format msgid "'%s' is not a valid GFlare file." msgstr "»%s« ist keine gültige GFlare Datei." -#: ../plug-ins/gradient-flare/gradient-flare.c:1326 +#: ../plug-ins/gradient-flare/gradient-flare.c:1325 #, c-format msgid "invalid formatted GFlare file: %s\n" msgstr "Ungültiges Format in GFlare Datei: %s\n" -#: ../plug-ins/gradient-flare/gradient-flare.c:1451 +#: ../plug-ins/gradient-flare/gradient-flare.c:1450 #, c-format msgid "" "GFlare '%s' is not saved. If you add a new entry in '%s', like:\n" @@ -9892,21 +9903,21 @@ msgstr "" "und den Ordner »%s« erstellen, dann können Sie ihre eigenen GFlares in diesen " "Ordner speichern." -#: ../plug-ins/gradient-flare/gradient-flare.c:1484 +#: ../plug-ins/gradient-flare/gradient-flare.c:1483 #, c-format msgid "Failed to write GFlare file '%s': %s" msgstr "GFlare-Datei »%s« konnte nicht geschrieben werden: %s" -#: ../plug-ins/gradient-flare/gradient-flare.c:2368 +#: ../plug-ins/gradient-flare/gradient-flare.c:2413 msgid "A_uto update preview" msgstr "A_utomatische Vorschau" # TODO -#: ../plug-ins/gradient-flare/gradient-flare.c:2419 +#: ../plug-ins/gradient-flare/gradient-flare.c:2464 msgid "`Default' is created." msgstr "»Standard« wurde erstellt." -#: ../plug-ins/gradient-flare/gradient-flare.c:2420 +#: ../plug-ins/gradient-flare/gradient-flare.c:2465 msgid "Default" msgstr "Standard" @@ -9916,250 +9927,258 @@ msgstr "Standard" #. #. * Scales #. -#: ../plug-ins/gradient-flare/gradient-flare.c:2699 -#: ../plug-ins/gradient-flare/gradient-flare.c:3536 -#: ../plug-ins/gradient-flare/gradient-flare.c:3641 -#: ../plug-ins/gradient-flare/gradient-flare.c:3778 +#: ../plug-ins/gradient-flare/gradient-flare.c:2744 +#: ../plug-ins/gradient-flare/gradient-flare.c:3581 +#: ../plug-ins/gradient-flare/gradient-flare.c:3686 +#: ../plug-ins/gradient-flare/gradient-flare.c:3823 msgid "Parameters" msgstr "Parameter" -#: ../plug-ins/gradient-flare/gradient-flare.c:2725 +#: ../plug-ins/gradient-flare/gradient-flare.c:2770 msgid "Ro_tation:" msgstr "_Drehung:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2737 +#: ../plug-ins/gradient-flare/gradient-flare.c:2782 msgid "_Hue rotation:" msgstr "_Farbton-Rotation:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2749 +#: ../plug-ins/gradient-flare/gradient-flare.c:2794 msgid "Vector _angle:" msgstr "Vektor_winkel:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2761 +#: ../plug-ins/gradient-flare/gradient-flare.c:2806 msgid "Vector _length:" msgstr "Vektor_länge:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2782 +#: ../plug-ins/gradient-flare/gradient-flare.c:2827 msgid "A_daptive supersampling" msgstr "A_daptive Hochrechnung" -#: ../plug-ins/gradient-flare/gradient-flare.c:2801 +#: ../plug-ins/gradient-flare/gradient-flare.c:2846 msgid "_Max depth:" msgstr "_Maximale Tiefe:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2811 +#: ../plug-ins/gradient-flare/gradient-flare.c:2856 msgid "_Threshold" msgstr "_Schwellwert" -#: ../plug-ins/gradient-flare/gradient-flare.c:2949 +#: ../plug-ins/gradient-flare/gradient-flare.c:2994 msgid "S_elector" msgstr "_Auswahl" -#: ../plug-ins/gradient-flare/gradient-flare.c:3013 +#: ../plug-ins/gradient-flare/gradient-flare.c:3058 msgid "New Gradient Flare" msgstr "Neue Farbverlaufsaufhellung" -#: ../plug-ins/gradient-flare/gradient-flare.c:3016 +#: ../plug-ins/gradient-flare/gradient-flare.c:3061 msgid "Enter a name for the new GFlare" msgstr "Geben Sie einen Namen für das neue GFlare an" -#: ../plug-ins/gradient-flare/gradient-flare.c:3036 +#: ../plug-ins/gradient-flare/gradient-flare.c:3081 #, c-format msgid "The name '%s' is used already!" msgstr "Der Name »%s« wird bereits verwendet." -#: ../plug-ins/gradient-flare/gradient-flare.c:3092 +#: ../plug-ins/gradient-flare/gradient-flare.c:3137 msgid "Copy Gradient Flare" msgstr "Farbverlaufsaufhellung kopieren" -#: ../plug-ins/gradient-flare/gradient-flare.c:3095 +#: ../plug-ins/gradient-flare/gradient-flare.c:3140 msgid "Enter a name for the copied GFlare" msgstr "Geben Sie einen Namen für das kopierte GFlare an" -#: ../plug-ins/gradient-flare/gradient-flare.c:3117 +#: ../plug-ins/gradient-flare/gradient-flare.c:3162 #, c-format msgid "The name `%s' is used already!" msgstr "Der Name »%s« ist bereits in Verwendung." -#: ../plug-ins/gradient-flare/gradient-flare.c:3148 +#: ../plug-ins/gradient-flare/gradient-flare.c:3193 msgid "Cannot delete!! There must be at least one GFlare." msgstr "" "Es konnte nicht gelöscht werden, da es zumindest ein GFlare geben muss." -#: ../plug-ins/gradient-flare/gradient-flare.c:3158 +#: ../plug-ins/gradient-flare/gradient-flare.c:3203 msgid "Delete Gradient Flare" msgstr "Verlaufsaufhellung löschen" -#: ../plug-ins/gradient-flare/gradient-flare.c:3230 +#: ../plug-ins/gradient-flare/gradient-flare.c:3275 #, c-format msgid "not found %s in gflares_list" msgstr "%s konnte nicht in gflares_list gefunden werden" -#: ../plug-ins/gradient-flare/gradient-flare.c:3271 +#: ../plug-ins/gradient-flare/gradient-flare.c:3316 msgid "Gradient Flare Editor" msgstr "Editor für Verlaufsaufhellungen" -#: ../plug-ins/gradient-flare/gradient-flare.c:3275 +#: ../plug-ins/gradient-flare/gradient-flare.c:3320 msgid "Rescan Gradients" msgstr "Verläufe neu einlesen" #. Glow -#: ../plug-ins/gradient-flare/gradient-flare.c:3400 +#: ../plug-ins/gradient-flare/gradient-flare.c:3445 msgid "Glow Paint Options" msgstr "Zeichenoptionen für Glühen" -#: ../plug-ins/gradient-flare/gradient-flare.c:3411 -#: ../plug-ins/gradient-flare/gradient-flare.c:3439 -#: ../plug-ins/gradient-flare/gradient-flare.c:3467 +#: ../plug-ins/gradient-flare/gradient-flare.c:3456 +#: ../plug-ins/gradient-flare/gradient-flare.c:3484 +#: ../plug-ins/gradient-flare/gradient-flare.c:3512 msgid "Opacity:" msgstr "Deckkraft:" # TODO ?? -#: ../plug-ins/gradient-flare/gradient-flare.c:3424 -#: ../plug-ins/gradient-flare/gradient-flare.c:3452 -#: ../plug-ins/gradient-flare/gradient-flare.c:3480 +#: ../plug-ins/gradient-flare/gradient-flare.c:3469 +#: ../plug-ins/gradient-flare/gradient-flare.c:3497 +#: ../plug-ins/gradient-flare/gradient-flare.c:3525 msgid "Paint mode:" msgstr "Zeichenmodus:" #. Rays -#: ../plug-ins/gradient-flare/gradient-flare.c:3428 +#: ../plug-ins/gradient-flare/gradient-flare.c:3473 msgid "Rays Paint Options" msgstr "Zeichenoptionen für Strahlen" #. Rays -#: ../plug-ins/gradient-flare/gradient-flare.c:3456 +#: ../plug-ins/gradient-flare/gradient-flare.c:3501 msgid "Second Flares Paint Options" msgstr "Zeichenoptionen für zweites Flare" #. #. * Gradient Menus #. -#: ../plug-ins/gradient-flare/gradient-flare.c:3509 -#: ../plug-ins/gradient-flare/gradient-flare.c:3612 -#: ../plug-ins/gradient-flare/gradient-flare.c:3751 +#: ../plug-ins/gradient-flare/gradient-flare.c:3554 +#: ../plug-ins/gradient-flare/gradient-flare.c:3657 +#: ../plug-ins/gradient-flare/gradient-flare.c:3796 msgid "Gradients" msgstr "Farbverläufe" -#: ../plug-ins/gradient-flare/gradient-flare.c:3520 -#: ../plug-ins/gradient-flare/gradient-flare.c:3625 -#: ../plug-ins/gradient-flare/gradient-flare.c:3762 +#: ../plug-ins/gradient-flare/gradient-flare.c:3565 +#: ../plug-ins/gradient-flare/gradient-flare.c:3670 +#: ../plug-ins/gradient-flare/gradient-flare.c:3807 msgid "Radial gradient:" msgstr "Strahlenförmiger Farbverlauf:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3524 -#: ../plug-ins/gradient-flare/gradient-flare.c:3629 +#: ../plug-ins/gradient-flare/gradient-flare.c:3569 +#: ../plug-ins/gradient-flare/gradient-flare.c:3674 msgid "Angular gradient:" msgstr "Winkeliger Farbverlauf:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3528 -#: ../plug-ins/gradient-flare/gradient-flare.c:3633 +#: ../plug-ins/gradient-flare/gradient-flare.c:3573 +#: ../plug-ins/gradient-flare/gradient-flare.c:3678 msgid "Angular size gradient:" msgstr "Umfangs-Farbverlauf:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3548 -#: ../plug-ins/gradient-flare/gradient-flare.c:3653 -#: ../plug-ins/gradient-flare/gradient-flare.c:3790 +#: ../plug-ins/gradient-flare/gradient-flare.c:3593 +#: ../plug-ins/gradient-flare/gradient-flare.c:3698 +#: ../plug-ins/gradient-flare/gradient-flare.c:3835 msgid "Size (%):" msgstr "Größe (%):" -#: ../plug-ins/gradient-flare/gradient-flare.c:3560 -#: ../plug-ins/gradient-flare/gradient-flare.c:3665 -#: ../plug-ins/gradient-flare/gradient-flare.c:3802 +#: ../plug-ins/gradient-flare/gradient-flare.c:3605 +#: ../plug-ins/gradient-flare/gradient-flare.c:3710 +#: ../plug-ins/gradient-flare/gradient-flare.c:3847 msgid "Rotation:" msgstr "Rotation:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3572 -#: ../plug-ins/gradient-flare/gradient-flare.c:3678 -#: ../plug-ins/gradient-flare/gradient-flare.c:3815 +#: ../plug-ins/gradient-flare/gradient-flare.c:3617 +#: ../plug-ins/gradient-flare/gradient-flare.c:3723 +#: ../plug-ins/gradient-flare/gradient-flare.c:3860 msgid "Hue rotation:" msgstr "Farbton-Rotation:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3586 +#: ../plug-ins/gradient-flare/gradient-flare.c:3631 msgid "G_low" msgstr "G_lühen" -#: ../plug-ins/gradient-flare/gradient-flare.c:3690 +#: ../plug-ins/gradient-flare/gradient-flare.c:3735 msgid "# of Spikes:" msgstr "Strahlenanzahl:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3702 +#: ../plug-ins/gradient-flare/gradient-flare.c:3747 msgid "Spike thickness:" msgstr "Strahldicke:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3716 +#: ../plug-ins/gradient-flare/gradient-flare.c:3761 msgid "_Rays" msgstr "St_rahlen" -#: ../plug-ins/gradient-flare/gradient-flare.c:3766 +#: ../plug-ins/gradient-flare/gradient-flare.c:3811 msgid "Size factor gradient:" msgstr "Größenfaktor für Farbverläufe:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3770 +#: ../plug-ins/gradient-flare/gradient-flare.c:3815 msgid "Probability gradient:" msgstr "Wahrscheinlichkeitsverlauf:" #. #. * Shape Radio Button Frame #. -#: ../plug-ins/gradient-flare/gradient-flare.c:3832 +#: ../plug-ins/gradient-flare/gradient-flare.c:3877 msgid "Shape of Second Flares" msgstr "Form des zweiten Flare" -#: ../plug-ins/gradient-flare/gradient-flare.c:3840 +#: ../plug-ins/gradient-flare/gradient-flare.c:3885 #: ../plug-ins/imagemap/imap_menu.c:222 msgid "Circle" msgstr "Kreis" -#: ../plug-ins/gradient-flare/gradient-flare.c:3857 +#: ../plug-ins/gradient-flare/gradient-flare.c:3902 #: ../plug-ins/imagemap/imap_menu.c:224 msgid "Polygon" msgstr "Polygon" -#: ../plug-ins/gradient-flare/gradient-flare.c:3890 +#: ../plug-ins/gradient-flare/gradient-flare.c:3935 msgid "Random seed:" msgstr "Zufälliger Anfangswert:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3904 +#: ../plug-ins/gradient-flare/gradient-flare.c:3949 msgid "_Second Flares" msgstr "_Zweites Flare" -#: ../plug-ins/help-browser/dialog.c:217 +#: ../plug-ins/help-browser/dialog.c:197 msgid "GIMP Help Browser" msgstr "GIMP-Hilfe-Browser" -#: ../plug-ins/help-browser/dialog.c:312 +#: ../plug-ins/help-browser/dialog.c:292 msgid "Drag and drop this icon to a web browser" msgstr "Dieses Symbol auf ein Browser-Fenster ziehen und fallen lassen." -#: ../plug-ins/help-browser/dialog.c:703 +#: ../plug-ins/help-browser/dialog.c:576 msgid "Go back one page" msgstr "Eine Seite zurück gehen" -#: ../plug-ins/help-browser/dialog.c:708 +#: ../plug-ins/help-browser/dialog.c:581 msgid "Go forward one page" msgstr "Eine Seite weiter gehen" -#: ../plug-ins/help-browser/dialog.c:713 +#: ../plug-ins/help-browser/dialog.c:586 msgid "Go to the index page" msgstr "Zum Inhaltsverzeichnis" -#: ../plug-ins/help-browser/dialog.c:748 +#: ../plug-ins/help-browser/dialog.c:591 +msgid "Reload" +msgstr "Neu Laden" + +#: ../plug-ins/help-browser/dialog.c:591 +msgid "Reload current page" +msgstr "Diese Seite erneut laden" + +#: ../plug-ins/help-browser/dialog.c:596 +msgid "Stop" +msgstr "Stopp" + +#: ../plug-ins/help-browser/dialog.c:596 +msgid "Stop loading this page" +msgstr "Laden dieser Seite stoppen" + +#: ../plug-ins/help-browser/dialog.c:631 msgid "Visit the GIMP documentation website" msgstr "Besuchen Sie die GIMP-Dokumentations-Internet-Seite" -#: ../plug-ins/help-browser/dialog.c:824 -msgid "Document not found" -msgstr "Dokument nicht gefunden" +#: ../plug-ins/help/gimphelpdomain.c:180 +msgid "The GIMP user manual is not available." +msgstr "Das GIMP Benutzerhandbuch ist nicht vorhanden." -#: ../plug-ins/help-browser/dialog.c:826 -msgid "The requested URL could not be loaded:" -msgstr "Die angegebene Adresse konnte nicht geladen werden:" - -#: ../plug-ins/help/gimphelpdomain.c:173 -msgid "The GIMP help files are not found." -msgstr "Die GIMP-Hilfedateien wurden nicht gefunden." - -#: ../plug-ins/help/gimphelpdomain.c:174 +#: ../plug-ins/help/gimphelpdomain.c:181 msgid "" "Please install the additional help package or use the online user manual at " "http://docs.gimp.org/." @@ -10167,20 +10186,25 @@ msgstr "" "Bitte installieren Sie das separat erhältliche Hilfepaket oder verwenden Sie " "das Online-Benutzerhandbuch unter http://docs.gimp.org/de/." -#: ../plug-ins/help/gimphelpdomain.c:180 -msgid "There is a problem with the GIMP help files." -msgstr "Es gibt ein Problem mit den GIMP-Hilfedateien." +#: ../plug-ins/help/gimphelpdomain.c:190 +msgid "There is a problem with the GIMP user manual." +msgstr "Es gibt ein Problem mit dem GIMP Benutzerhandbuch" -#: ../plug-ins/help/gimphelpdomain.c:182 +#: ../plug-ins/help/gimphelpdomain.c:192 msgid "Please check your installation." msgstr "Bitte überprüfen Sie Ihre Installation." -#: ../plug-ins/help/gimphelpdomain.c:192 +#: ../plug-ins/help/gimphelpdomain.c:203 #, c-format msgid "Help ID '%s' unknown" msgstr "Hilfe-ID »%s« ist unbekannt" -#: ../plug-ins/help/gimphelplocale.c:218 +#: ../plug-ins/help/gimphelplocale.c:209 +#, c-format +msgid "Loading index from '%s'" +msgstr "Lade Index aus »%s«" + +#: ../plug-ins/help/gimphelplocale.c:266 #, c-format msgid "" "Parse error in '%s':\n" @@ -11184,72 +11208,71 @@ msgstr "JPEG-Vorschau" msgid "File size: %02.01f kB" msgstr "Dateigröße: %02.01f kB" -#: ../plug-ins/jpeg/jpeg-save.c:673 +#: ../plug-ins/jpeg/jpeg-save.c:671 msgid "Calculating file size..." msgstr "Dateigröße wird berechnet …" -#: ../plug-ins/jpeg/jpeg-save.c:764 ../plug-ins/jpeg/jpeg-save.c:868 +#: ../plug-ins/jpeg/jpeg-save.c:762 ../plug-ins/jpeg/jpeg-save.c:866 msgid "File size: unknown" msgstr "Dateigröße: unbekannt" -#: ../plug-ins/jpeg/jpeg-save.c:819 +#: ../plug-ins/jpeg/jpeg-save.c:817 msgid "Save as JPEG" msgstr "Als JPEG speichern" -#: ../plug-ins/jpeg/jpeg-save.c:854 +#: ../plug-ins/jpeg/jpeg-save.c:852 msgid "_Quality:" msgstr "_Qualität:" -#: ../plug-ins/jpeg/jpeg-save.c:858 +#: ../plug-ins/jpeg/jpeg-save.c:856 msgid "JPEG quality parameter" msgstr "JPEG-Qualitätseinstellungen" -#: ../plug-ins/jpeg/jpeg-save.c:877 +#: ../plug-ins/jpeg/jpeg-save.c:875 msgid "Enable preview to obtain the file size." msgstr "Vorschau aktivieren, um die Dateigröße zu ermitteln." -#: ../plug-ins/jpeg/jpeg-save.c:880 -msgid "Show _preview in image window" +#: ../plug-ins/jpeg/jpeg-save.c:878 +msgid "Sho_w preview in image window" msgstr "_Vorschau im Bildfenster anzeigen" -#: ../plug-ins/jpeg/jpeg-save.c:921 -msgid "_Smoothing:" +#: ../plug-ins/jpeg/jpeg-save.c:919 +msgid "S_moothing:" msgstr "_Glättung:" -#: ../plug-ins/jpeg/jpeg-save.c:934 +#: ../plug-ins/jpeg/jpeg-save.c:932 msgid "Frequency (rows):" msgstr "Frequenz (Zeilen):" -#: ../plug-ins/jpeg/jpeg-save.c:950 -msgid "Use restart markers" -msgstr "Startmarkierungen verwenden" +#: ../plug-ins/jpeg/jpeg-save.c:948 +msgid "Use _restart markers" +msgstr "Start_markierungen verwenden" -#: ../plug-ins/jpeg/jpeg-save.c:966 ../plug-ins/xjt/xjt.c:877 -msgid "Optimize" -msgstr "Optimieren" +#: ../plug-ins/jpeg/jpeg-save.c:964 +msgid "_Optimize" +msgstr "_Optimieren" -#: ../plug-ins/jpeg/jpeg-save.c:979 -msgid "Progressive" -msgstr "Progressiv" +#: ../plug-ins/jpeg/jpeg-save.c:978 +msgid "_Progressive" +msgstr "_Progressiv" #: ../plug-ins/jpeg/jpeg-save.c:994 -msgid "Save EXIF data" -msgstr "EXIF-Daten speichern" +msgid "Save _EXIF data" +msgstr "_EXIF-Daten speichern" #: ../plug-ins/jpeg/jpeg-save.c:1011 -msgid "Save thumbnail" -msgstr "Vorschau speichern" +msgid "Save _thumbnail" +msgstr "Vo_rschau speichern" -#. XMP metadata -#: ../plug-ins/jpeg/jpeg-save.c:1027 -msgid "Save XMP data" -msgstr "XMP-Daten speichern" +#: ../plug-ins/jpeg/jpeg-save.c:1028 +msgid "Save _XMP data" +msgstr "_XMP-Daten speichern" -#: ../plug-ins/jpeg/jpeg-save.c:1042 -msgid "Use quality settings from original image" -msgstr "Qualitätseinstellungen des Originalbildes verwenden" +#: ../plug-ins/jpeg/jpeg-save.c:1043 +msgid "_Use quality settings from original image" +msgstr "Q_ualitätseinstellungen des Originalbildes verwenden" -#: ../plug-ins/jpeg/jpeg-save.c:1048 +#: ../plug-ins/jpeg/jpeg-save.c:1049 msgid "" "If the original image was loaded from a JPEG file using non-standard quality " "settings (quantization tables), enable this option to get almost the same " @@ -11260,47 +11283,51 @@ msgstr "" "Option für etwa gleiche Qualität und Dateigröße." #. Subsampling -#: ../plug-ins/jpeg/jpeg-save.c:1072 -msgid "Subsampling:" -msgstr "Zwischenschritte:" +#: ../plug-ins/jpeg/jpeg-save.c:1073 +msgid "Su_bsampling:" +msgstr "_Zwischenschritte:" -#: ../plug-ins/jpeg/jpeg-save.c:1079 +#: ../plug-ins/jpeg/jpeg-save.c:1080 msgid "1x1,1x1,1x1 (best quality)" msgstr "1×1,1×1,1×1 (höchste Qualität)" -#: ../plug-ins/jpeg/jpeg-save.c:1080 +#: ../plug-ins/jpeg/jpeg-save.c:1081 msgid "2x1,1x1,1x1 (4:2:2)" msgstr "2×1,1×1,1×1 (4:2:2)" -#: ../plug-ins/jpeg/jpeg-save.c:1081 +#: ../plug-ins/jpeg/jpeg-save.c:1082 msgid "1x2,1x1,1x1" msgstr "1×2,1×1,1×1" -#: ../plug-ins/jpeg/jpeg-save.c:1082 +#: ../plug-ins/jpeg/jpeg-save.c:1083 msgid "2x2,1x1,1x1 (smallest file)" msgstr "2×2,1×1,1×1 (kleinste Dateigröße)" #. DCT method -#: ../plug-ins/jpeg/jpeg-save.c:1106 -msgid "DCT method:" -msgstr "DCT-Methode:" +#: ../plug-ins/jpeg/jpeg-save.c:1109 +msgid "_DCT method:" +msgstr "_DCT-Methode:" -#: ../plug-ins/jpeg/jpeg-save.c:1112 +#: ../plug-ins/jpeg/jpeg-save.c:1115 msgid "Fast Integer" msgstr "Schnelle Ganzzahlen" -#: ../plug-ins/jpeg/jpeg-save.c:1113 +#: ../plug-ins/jpeg/jpeg-save.c:1116 msgid "Integer" msgstr "Ganzzahlen" -#: ../plug-ins/jpeg/jpeg-save.c:1114 +#: ../plug-ins/jpeg/jpeg-save.c:1117 msgid "Floating-Point" msgstr "Fließkommazahlen" -#: ../plug-ins/jpeg/jpeg-save.c:1128 +#: ../plug-ins/jpeg/jpeg-save.c:1133 msgid "Comment" msgstr "Kommentar" +#: ../plug-ins/jpeg/jpeg-save.c:1178 +msgid "Sa_ve Defaults" +msgstr "Standardwerte _speichern" + #: ../plug-ins/jpeg/jpeg.c:137 ../plug-ins/jpeg/jpeg.c:175 msgid "JPEG image" msgstr "JPEG-Bild" @@ -12463,6 +12490,10 @@ msgstr "Warnung: nicht unterstützte Einheit %d in XJT gespeichert" msgid "Save as XJT" msgstr "Als XJT speichern" +#: ../plug-ins/xjt/xjt.c:877 +msgid "Optimize" +msgstr "Optimieren" + #: ../plug-ins/xjt/xjt.c:887 msgid "Clear transparent" msgstr "Transparenz leeren" diff --git a/po-plug-ins/ru.po b/po-plug-ins/ru.po index 4cf36c1a7a..896a5b8fd1 100644 --- a/po-plug-ins/ru.po +++ b/po-plug-ins/ru.po @@ -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 \n" "Language-Team: Russian \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:" diff --git a/po-plug-ins/sl.po b/po-plug-ins/sl.po old mode 100755 new mode 100644 diff --git a/po/ChangeLog b/po/ChangeLog index 08b81fad3a..59b4f90505 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,11 @@ +2008-06-14 Sven Neumann + + * POTFILES.in: added app/widgets/gimpsettingsbox.c. + +2008-06-11 Alexandre Prokoudine + + * ru.po: updated and improved Russian translation. + 2008-06-06 Sven Neumann * POTFILES.skip: fixed the insanity using a new feature in diff --git a/po/POTFILES.in b/po/POTFILES.in index 8518d8d7c2..8de7cc0144 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.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 diff --git a/po/ru.po b/po/ru.po index 27d1a73ca8..c202cbac26 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: gimp trunk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-02 21:41+0400\n" -"PO-Revision-Date: 2008-06-02 04:04+0300\n" +"POT-Creation-Date: 2008-06-11 21:23+0400\n" +"PO-Revision-Date: 2008-06-11 17:24+0300\n" "Last-Translator: Alexandre Prokoudine \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" @@ -212,7 +212,7 @@ msgstr "Вывод GIMP. Вы можете свернуть это окно, н msgid "Another GIMP instance is already running." msgstr "Уже запущена другая копия GIMP" -#: ../app/sanity.c:300 +#: ../app/sanity.c:342 #, c-format msgid "" "The configured filename encoding cannot be converted to UTF-8: %s\n" @@ -223,7 +223,7 @@ msgstr "" "\n" "Проверьте значение переменной окружения G_FILENAME_ENCODING." -#: ../app/sanity.c:319 +#: ../app/sanity.c:361 #, c-format msgid "" "The name of the directory holding the GIMP user configuration cannot be " @@ -251,8 +251,8 @@ msgstr "используя %s версии %s (собранной с верси msgid "%s version %s" msgstr "%s версии %s" -#: ../app/actions/actions.c:100 ../app/dialogs/dialogs.c:224 -#: ../app/widgets/gimpbrusheditor.c:90 +#: ../app/actions/actions.c:100 ../app/actions/dialogs-actions.c:123 +#: ../app/dialogs/dialogs.c:224 ../app/widgets/gimpbrusheditor.c:90 msgid "Brush Editor" msgstr "Редактор кистей" @@ -326,8 +326,8 @@ msgstr "Файл" msgid "Fonts" msgstr "Шрифты" -#: ../app/actions/actions.c:151 ../app/dialogs/dialogs.c:228 -#: ../app/widgets/gimpgradienteditor.c:276 +#: ../app/actions/actions.c:151 ../app/actions/dialogs-actions.c:141 +#: ../app/dialogs/dialogs.c:228 ../app/widgets/gimpgradienteditor.c:276 msgid "Gradient Editor" msgstr "Редактор градиентов" @@ -356,8 +356,8 @@ msgstr "Изображения" msgid "Layers" msgstr "Слои" -#: ../app/actions/actions.c:169 ../app/dialogs/dialogs.c:232 -#: ../app/widgets/gimppaletteeditor.c:155 +#: ../app/actions/actions.c:169 ../app/actions/dialogs-actions.c:153 +#: ../app/dialogs/dialogs.c:232 ../app/widgets/gimppaletteeditor.c:155 msgid "Palette Editor" msgstr "Редактор палитры образцов" @@ -977,123 +977,135 @@ msgstr "_Кисти" msgid "Open the brushes dialog" msgstr "Открыть диалог кистей" -#: ../app/actions/dialogs-actions.c:123 +#: ../app/actions/dialogs-actions.c:124 +msgid "Open the brush editor" +msgstr "Открыть редактор кистей" + +#: ../app/actions/dialogs-actions.c:129 msgid "P_atterns" msgstr "_Текстуры" -#: ../app/actions/dialogs-actions.c:124 +#: ../app/actions/dialogs-actions.c:130 msgid "Open the patterns dialog" msgstr "Открыть диалог текстур" -#: ../app/actions/dialogs-actions.c:129 +#: ../app/actions/dialogs-actions.c:135 msgid "_Gradients" msgstr "_Градиенты" -#: ../app/actions/dialogs-actions.c:130 +#: ../app/actions/dialogs-actions.c:136 msgid "Open the gradients dialog" msgstr "Открыть диалог градиентов" -#: ../app/actions/dialogs-actions.c:135 +#: ../app/actions/dialogs-actions.c:142 +msgid "Open the gradient editor" +msgstr "Открыть редактор градиентов" + +#: ../app/actions/dialogs-actions.c:147 msgid "Pal_ettes" msgstr "О_бразцы цветов" -#: ../app/actions/dialogs-actions.c:136 +#: ../app/actions/dialogs-actions.c:148 msgid "Open the palettes dialog" msgstr "Открыть диалог цветовых образцов" -#: ../app/actions/dialogs-actions.c:141 +#: ../app/actions/dialogs-actions.c:154 +msgid "Open the palette editor" +msgstr "Открыть редактор цветовых образцов" + +#: ../app/actions/dialogs-actions.c:159 msgid "_Fonts" msgstr "_Шрифты" -#: ../app/actions/dialogs-actions.c:142 +#: ../app/actions/dialogs-actions.c:160 msgid "Open the fonts dialog" msgstr "Открыть диалог шрифтов" -#: ../app/actions/dialogs-actions.c:147 +#: ../app/actions/dialogs-actions.c:165 msgid "B_uffers" msgstr "_Буферы" -#: ../app/actions/dialogs-actions.c:148 +#: ../app/actions/dialogs-actions.c:166 msgid "Open the named buffers dialog" msgstr "Открыть диалог именованных буферов обмена" -#: ../app/actions/dialogs-actions.c:153 +#: ../app/actions/dialogs-actions.c:171 msgid "_Images" msgstr "_Изображения" -#: ../app/actions/dialogs-actions.c:154 +#: ../app/actions/dialogs-actions.c:172 msgid "Open the images dialog" msgstr "Открыть диалог изображений" -#: ../app/actions/dialogs-actions.c:159 +#: ../app/actions/dialogs-actions.c:177 msgid "Document Histor_y" msgstr "Не_давние изображения" -#: ../app/actions/dialogs-actions.c:160 +#: ../app/actions/dialogs-actions.c:178 msgid "Open the document history dialog" msgstr "Открыть диалог со списком открывавшихся изображений" -#: ../app/actions/dialogs-actions.c:165 +#: ../app/actions/dialogs-actions.c:183 msgid "_Templates" msgstr "_Шаблоны" -#: ../app/actions/dialogs-actions.c:166 +#: ../app/actions/dialogs-actions.c:184 msgid "Open the image templates dialog" msgstr "Открыть диалог с шаблонами документов" -#: ../app/actions/dialogs-actions.c:171 +#: ../app/actions/dialogs-actions.c:189 msgid "T_ools" msgstr "_Инструменты" -#: ../app/actions/dialogs-actions.c:172 +#: ../app/actions/dialogs-actions.c:190 msgid "Open the tools dialog" msgstr "Открыть диалог выбора отображаемых инструментов" -#: ../app/actions/dialogs-actions.c:177 +#: ../app/actions/dialogs-actions.c:195 msgid "Error Co_nsole" msgstr "Конс_оль ошибок" -#: ../app/actions/dialogs-actions.c:178 +#: ../app/actions/dialogs-actions.c:196 msgid "Open the error console" msgstr "Открыть консоль ошибок" -#: ../app/actions/dialogs-actions.c:188 +#: ../app/actions/dialogs-actions.c:206 msgid "_Preferences" msgstr "_Параметры" -#: ../app/actions/dialogs-actions.c:189 +#: ../app/actions/dialogs-actions.c:207 msgid "Open the preferences dialog" msgstr "Открыть диалог параметров программы" -#: ../app/actions/dialogs-actions.c:194 +#: ../app/actions/dialogs-actions.c:212 msgid "_Keyboard Shortcuts" -msgstr "К_лавиатурные комбинации..." +msgstr "Комбинации к_лавиш" -#: ../app/actions/dialogs-actions.c:195 +#: ../app/actions/dialogs-actions.c:213 msgid "Open the keyboard shortcuts editor" msgstr "Открыть диалог настройки клавиатурных комбинаций" -#: ../app/actions/dialogs-actions.c:200 +#: ../app/actions/dialogs-actions.c:218 msgid "_Modules" -msgstr "_Модули..." +msgstr "_Модули" -#: ../app/actions/dialogs-actions.c:201 +#: ../app/actions/dialogs-actions.c:219 msgid "Open the module manager dialog" msgstr "Открыть диалог управления модулями" -#: ../app/actions/dialogs-actions.c:206 +#: ../app/actions/dialogs-actions.c:224 msgid "_Tip of the Day" msgstr "_Совет дня" -#: ../app/actions/dialogs-actions.c:207 +#: ../app/actions/dialogs-actions.c:225 msgid "Show the tip of the day" msgstr "Показывать совет дня" -#: ../app/actions/dialogs-actions.c:212 +#: ../app/actions/dialogs-actions.c:230 msgid "_About" msgstr "О прог_рамме" -#: ../app/actions/dialogs-actions.c:213 ../app/dialogs/about-dialog.c:114 +#: ../app/actions/dialogs-actions.c:231 ../app/dialogs/about-dialog.c:114 #: ../app/gui/gui.c:484 msgid "About GIMP" msgstr "О GIMP" @@ -2344,7 +2356,7 @@ msgstr "_Направляющие" msgid "I_nfo" msgstr "_Инфо" -#: ../app/actions/image-actions.c:61 ../app/tools/gimplevelstool.c:642 +#: ../app/actions/image-actions.c:61 ../app/tools/gimplevelstool.c:645 #: ../app/tools/gimpthresholdtool.c:264 msgid "_Auto" msgstr "_Авто" @@ -3594,7 +3606,7 @@ msgstr "Открыть текствый файл (UTF-8)" #: ../app/core/gimppalette-load.c:271 ../app/core/gimppalette-load.c:315 #: ../app/core/gimppalette-load.c:369 ../app/core/gimppalette-load.c:457 #: ../app/core/gimppalette-load.c:600 ../app/core/gimppattern-load.c:76 -#: ../app/tools/gimpcurvestool.c:589 ../app/tools/gimplevelstool.c:723 +#: ../app/tools/gimpcurvestool.c:593 ../app/tools/gimplevelstool.c:725 #: ../app/xcf/xcf.c:329 #, c-format msgid "Could not open '%s' for reading: %s" @@ -4003,7 +4015,7 @@ msgstr "Окно _навигации" #: ../app/actions/view-actions.c:106 msgid "Show an overview window for this image" -msgstr "Показать окно просмотра для изображения" +msgstr "Показать обзорное окно для этого изображения" #: ../app/actions/view-actions.c:111 msgid "Display _Filters..." @@ -4328,20 +4340,20 @@ msgid "Value" msgstr "Яркость" #: ../app/base/base-enums.c:56 ../app/core/core-enums.c:1197 -#: ../app/tools/gimpcolorbalancetool.c:293 -#: ../app/tools/gimphuesaturationtool.c:251 +#: ../app/tools/gimpcolorbalancetool.c:296 +#: ../app/tools/gimphuesaturationtool.c:252 msgid "Red" msgstr "Красный" #: ../app/base/base-enums.c:57 ../app/core/core-enums.c:1198 -#: ../app/tools/gimpcolorbalancetool.c:302 -#: ../app/tools/gimphuesaturationtool.c:253 +#: ../app/tools/gimpcolorbalancetool.c:305 +#: ../app/tools/gimphuesaturationtool.c:254 msgid "Green" msgstr "Зеленый" #: ../app/base/base-enums.c:58 ../app/core/core-enums.c:1199 -#: ../app/tools/gimpcolorbalancetool.c:311 -#: ../app/tools/gimphuesaturationtool.c:255 +#: ../app/tools/gimpcolorbalancetool.c:314 +#: ../app/tools/gimphuesaturationtool.c:256 msgid "Blue" msgstr "Синий" @@ -4471,8 +4483,8 @@ msgstr "Не удалось изменить размер файла подка #: ../app/config/gimpconfig-file.c:68 ../app/core/gimpbrushgenerated-save.c:63 #: ../app/core/gimpcurve-save.c:53 ../app/core/gimpgradient-save.c:51 #: ../app/core/gimpgradient-save.c:145 ../app/core/gimppalette-save.c:56 -#: ../app/gui/themes.c:239 ../app/tools/gimpcurvestool.c:616 -#: ../app/tools/gimplevelstool.c:750 ../app/vectors/gimpvectors-export.c:83 +#: ../app/gui/themes.c:239 ../app/tools/gimpcurvestool.c:620 +#: ../app/tools/gimplevelstool.c:752 ../app/vectors/gimpvectors-export.c:83 #: ../app/xcf/xcf.c:421 #, c-format msgid "Could not open '%s' for writing: %s" @@ -4507,9 +4519,9 @@ msgid "" "receives the focus. This is useful for window managers using \"click to focus" "\"." msgstr "" -"При включении этой опции изображение становится активным, когда его окно " -"получает фокус. Это полезно в работе с оконными менеджерами в которых для " -"придания фокуса окну по нему надо кликнуть мышкой." +"Если включено, изображение становится активным, когда его окно получает " +"фокус. Это полезно в работе с оконными менеджерами, в которых для придания " +"фокуса окну его нужно щелкнуть мышкой." #: ../app/config/gimprc-blurbs.h:23 msgid "" @@ -4529,7 +4541,7 @@ msgstr "Как обрабатывать встроенные цветовые с #: ../app/config/gimprc-blurbs.h:36 msgid "Ask for confirmation before closing an image without saving." -msgstr "Запрашивать подтверждение перед закрытим несохраненного изображения." +msgstr "Запрашивать подтверждение перед закрытием несохраненного изображения." #: ../app/config/gimprc-blurbs.h:39 msgid "Sets the pixel format to use for mouse pointers." @@ -4552,8 +4564,7 @@ msgid "" "When enabled, this will ensure that each pixel of an image gets mapped to a " "pixel on the screen." msgstr "" -"При включении этой функции каждый пиксел изображения будет соответствовать " -"пикселу на экране" +"Если включено, каждый пиксел изображения соответствует экранному пикселу." #: ../app/config/gimprc-blurbs.h:75 msgid "This is the distance in pixels where Guide and Grid snapping activates." @@ -4709,7 +4720,7 @@ msgid "" msgstr "" "Если включено, X-сервер определяет позицию мыши после каждого движения. Это " "означает, что рисование большими кистями будет более точным, но медленным. " -"Однако на некоторых Х-серверах включение этой опции обеспечивет более " +"Однако на некоторых Х-серверах включение этой опции обеспечивает более " "быструю работу." #: ../app/config/gimprc-blurbs.h:245 @@ -4718,15 +4729,15 @@ msgid "" "the layers and channels dialog are nice to have but they can slow things " "down when working with large images." msgstr "" -"Указывает, надо ли создавать предпросмотр слоев и каналов. Предпросмотр " -"слоев и каналов — приятная вещь, но эта функция может существенно замедлить " -"работу с большими изображениями." +"Указывает, надо ли создавать эскиз слоев и каналов. Эскиз слоев и каналов — " +"приятная вещь, но ее использование может существенно замедлить работу с " +"большими изображениями." #: ../app/config/gimprc-blurbs.h:250 msgid "" "Sets the preview size used for layers and channel previews in newly created " "dialogs." -msgstr "Устанавливает размер просмотра для слоев и каналов." +msgstr "Устанавливает размер эскиза слоев и каналов." #: ../app/config/gimprc-blurbs.h:254 msgid "" @@ -4770,8 +4781,8 @@ msgid "" "When enabled, all paint tools will show a preview of the current brush's " "outline." msgstr "" -"При включении этой опции все инструменты для рисования показывают очертания " -"текущей кисти." +"Если включено, все инструменты для рисования показывают очертания активной " +"кисти." #: ../app/config/gimprc-blurbs.h:286 msgid "" @@ -4779,87 +4790,87 @@ msgid "" "related help page. Without this button, the help page can still be reached " "by pressing F1." msgstr "" -"При включении этой опции во всех диалогах будет отображаться кнопка " -"«Справка», нажав на которую можно обратиться к системе помощи. Если эта опция " -"отключена, систему помощи можно вызвать кнопкой F1." +"Если включено, во всех диалогах отображается кнопка «Справка», по нажатию " +"которой вызывается система помощи. Если выключено, справочную систему можно " +"вызвать нажатием клавиши F1." #: ../app/config/gimprc-blurbs.h:291 msgid "" "When enabled, the mouse pointer will be shown over the image while using a " "paint tool." -msgstr "Если включить, то во время рисования виден курсор инструмента." +msgstr "Если включено, при рисовании виден курсор инструмента." #: ../app/config/gimprc-blurbs.h:295 msgid "" "When enabled, the menubar is visible by default. This can also be toggled " "with the \"View->Show Menubar\" command." msgstr "" -"При включении этой функции панель меню включена по умолчанию. Это так же " -"можно сделать командой «Вид→Показывать панель меню»." +"Если включено, панель меню по умолчанию отображается. Это также можно " +"сделать командой «Вид→ Показывать панель меню»." #: ../app/config/gimprc-blurbs.h:299 msgid "" "When enabled, the rulers are visible by default. This can also be toggled " "with the \"View->Show Rulers\" command." msgstr "" -"При включении этой функции линейки включены по умолчанию. Это так же можно " -"сделать командой «Вид→Показывать линейки»." +"Если включено, линейки по умолчанию отображаются. Это также можно сделать " +"командой «Вид→ Показывать линейки»." #: ../app/config/gimprc-blurbs.h:303 msgid "" "When enabled, the scrollbars are visible by default. This can also be " "toggled with the \"View->Show Scrollbars\" command." msgstr "" -"При включении этой функции полосы прокрутки включены по умолчанию. Это так " -"же можно сделать командой «Вид→Показывать полосы прокрутки»." +"Если включено, полосы прокрутки по умолчанию отображаются. Это также можно " +"сделать командой «Вид→ Показывать полосы прокрутки»." #: ../app/config/gimprc-blurbs.h:307 msgid "" "When enabled, the statusbar is visible by default. This can also be toggled " "with the \"View->Show Statusbar\" command." msgstr "" -"При включении этой функции строка состояния включена по умолчанию. Это так " -"же можно сделать командой «Вид→Показывать строку состояния»." +"Если включено, строка состояния по умолчанию отображается. Это также можно " +"сделать командой «Вид→ Показывать строку состояния»." #: ../app/config/gimprc-blurbs.h:311 msgid "" "When enabled, the selection is visible by default. This can also be toggled " "with the \"View->Show Selection\" command." msgstr "" -"При включении этой функции показ выделения области включен по умолчанию. Это " -"так же можно сделать командой «Вид→Показывать выделение»." +"Если включено, выделение области по умолчанию отображается. Это также можно " +"сделать командой «Вид→ Показывать выделение»." #: ../app/config/gimprc-blurbs.h:315 msgid "" "When enabled, the layer boundary is visible by default. This can also be " "toggled with the \"View->Show Layer Boundary\" command." msgstr "" -"При включении этой функции показ границы слоя включен по умолчанию. Это так " -"же можно сделать командой «Вид→Показывать границы слоя»." +"Если включено, граница слоя по умолчанию отображается. Это также можно " +"сделать командой «Вид→ Показывать границы слоя»." #: ../app/config/gimprc-blurbs.h:319 msgid "" "When enabled, the guides are visible by default. This can also be toggled " "with the \"View->Show Guides\" command." msgstr "" -"При включении этой функции направляющие включены по умолчанию. Это так же " -"можно сделать командой «Вид→Показывать направляющие»." +"Если включено, направляющие по умолчанию отображаются. Это также можно " +"сделать командой «Вид→ Показывать направляющие»." #: ../app/config/gimprc-blurbs.h:323 msgid "" "When enabled, the grid is visible by default. This can also be toggled with " "the \"View->Show Grid\" command." msgstr "" -"При включении этой функции сетка включена по умолчанию. Это так же можно " -"сделать командой «Вид→Показывать сетку»." +"Если включено, сетка по умолчанию отображается. Это также можно сделать " +"командой «Вид→ Показывать сетку»." #: ../app/config/gimprc-blurbs.h:327 msgid "" "When enabled, the sample points are visible by default. This can also be " "toggled with the \"View->Show Sample Points\" command." msgstr "" -"Если включено, то образцовые точки показываются по умолчанию. Это также " -"можно сделать командой «Вид→Показывать образцовые точки»." +"Если включено, образцовые точки по умолчанию отображаются. Это также можно " +"сделать командой «Вид→ Показывать образцовые точки»." #: ../app/config/gimprc-blurbs.h:331 msgid "Show a tooltip when the pointer hovers over an item." @@ -4894,24 +4905,24 @@ msgid "" "transient to the active image window. Most window managers will keep the " "dock windows above the image window then, but it may also have other effects." msgstr "" -"При включении этой опции все панели располагаются поверх окна изображения. В " -"некоторых оконных менеджерах могут проявиться и другие эффекты." +"Если включено, все панели располагаются поверх окна изображения. В некоторых " +"оконных менеджерах могут проявиться и другие эффекты." #: ../app/config/gimprc-blurbs.h:355 msgid "" "When enabled, you can change keyboard shortcuts for menu items by hitting a " "key combination while the menu item is highlighted." msgstr "" -"При включении этой опции клавиши быстрого доступа к подсвеченному пункту " +"Если включено, комбинации клавиш для быстрого доступа к подсвеченному пункту " "меню можно менять «на лету»." #: ../app/config/gimprc-blurbs.h:359 msgid "Save changed keyboard shortcuts when GIMP exits." -msgstr "Сохранить измененные клавиши быстрого доступа при выходе из GIMP." +msgstr "Сохранить измененные комбинации клавиши при выходе из GIMP." #: ../app/config/gimprc-blurbs.h:362 msgid "Restore saved keyboard shortcuts on each GIMP startup." -msgstr "Восстановить сохраненные клавиши быстрого доступа при запуске GIMP." +msgstr "Восстановить сохраненные комбинации клавиш при запуске GIMP." #: ../app/config/gimprc-blurbs.h:365 msgid "" @@ -5552,11 +5563,11 @@ msgstr "Ошибка" #: ../app/core/core-enums.c:1260 msgid "Ask what to do" -msgstr "Подтверждать действие" +msgstr "Спрашивать, что делать" #: ../app/core/core-enums.c:1261 msgid "Keep embedded profile" -msgstr "Сохранить встраиваемый профиль" +msgstr "Сохранять встроенный профиль" #: ../app/core/core-enums.c:1262 msgid "Convert to RGB workspace" @@ -5956,7 +5967,7 @@ msgid "Color Balance" msgstr "Цветовой баланс" #: ../app/core/gimpdrawable-colorize.c:73 -#: ../app/core/gimpdrawable-colorize.c:83 ../app/tools/gimpcolorizetool.c:89 +#: ../app/core/gimpdrawable-colorize.c:83 ../app/tools/gimpcolorizetool.c:90 msgid "Colorize" msgstr "Тонировать" @@ -7066,7 +7077,7 @@ msgstr "Вы действительно хотите это сделать?" #: ../app/dialogs/keyboard-shortcuts-dialog.c:50 msgid "Configure Keyboard Shortcuts" -msgstr "Настроить клавиши быстрого доступа" +msgstr "Настройка комбинаций клавиш" #: ../app/dialogs/keyboard-shortcuts-dialog.c:83 msgid "" @@ -7079,7 +7090,7 @@ msgstr "" #: ../app/dialogs/keyboard-shortcuts-dialog.c:91 #: ../app/dialogs/preferences-dialog.c:1644 msgid "_Save keyboard shortcuts on exit" -msgstr "_Сохранять быстрые клавиши при выходе" +msgstr "_Сохранять комбинации клавиш при выходе" #: ../app/dialogs/layer-add-mask-dialog.c:83 msgid "Add a Mask to the Layer" @@ -7301,16 +7312,15 @@ msgid "" "Your keyboard shortcuts will be reset to default values the next time you " "start GIMP." msgstr "" -"При следующем запуске GIMP будут использованы клавиши быстрого доступа по " -"умолчанию." +"При следующем запуске GIMP будут использованы типовые комбинации клавиш." #: ../app/dialogs/preferences-dialog.c:581 msgid "Remove all Keyboard Shortcuts" -msgstr "Удалить все клавиши быстрого доступа" +msgstr "Удалить все комбинации клавиш" #: ../app/dialogs/preferences-dialog.c:603 msgid "Do you really want to remove all keyboard shortcuts from all menus?" -msgstr "Действительно удалить все клавиши быстрого доступа из всех меню?" +msgstr "Действительно удалить все комбинации клавиш из всех меню?" #: ../app/dialogs/preferences-dialog.c:644 msgid "" @@ -7382,7 +7392,7 @@ msgstr "Установить свой цвет фона вокруг изобр #: ../app/dialogs/preferences-dialog.c:1410 msgid "Preferences" -msgstr "Настройки" +msgstr "Параметры" #: ../app/dialogs/preferences-dialog.c:1522 #: ../app/dialogs/preferences-dialog.c:2727 @@ -7433,7 +7443,7 @@ msgstr "Сохранение изображений" #: ../app/dialogs/preferences-dialog.c:1581 msgid "Confirm closing of unsa_ved images" -msgstr "Запрашивать подтверждение при закрытии несохраненных изображений." +msgstr "Требовать подтверждение при закрытии несохраненных _изображений" #: ../app/dialogs/preferences-dialog.c:1591 msgid "Keep record of used files in the Recent Documents list" @@ -7475,23 +7485,23 @@ msgstr "Показывать _мнемонические клавиши" #: ../app/dialogs/preferences-dialog.c:1633 msgid "_Use dynamic keyboard shortcuts" -msgstr "_Использовать динамические клавиатурные комбинации" +msgstr "_Использовать динамические комбинации клавиш" #: ../app/dialogs/preferences-dialog.c:1637 msgid "Configure _Keyboard Shortcuts..." -msgstr "Настроить _клавиши быстрого доступа..." +msgstr "Настроить _комбинации клавиш..." #: ../app/dialogs/preferences-dialog.c:1648 msgid "Save Keyboard Shortcuts _Now" -msgstr "Сохранить клавиши быстрого доступа сейчас" +msgstr "Сохранить комбинации клавиш _сейчас" #: ../app/dialogs/preferences-dialog.c:1655 msgid "_Reset Keyboard Shortcuts to Default Values" -msgstr "_Восстановить исходные клавиатурные комбинации" +msgstr "_Восстановить исходные комбинации клавиш" #: ../app/dialogs/preferences-dialog.c:1664 msgid "Remove _All Keyboard Shortcuts" -msgstr "Удалить все клавиши _быстрого доступа" +msgstr "Удалить все ком_бинации клавиш" #: ../app/dialogs/preferences-dialog.c:1676 #: ../app/dialogs/preferences-dialog.c:1715 @@ -7594,15 +7604,15 @@ msgstr "Внешний вид" #: ../app/dialogs/preferences-dialog.c:1929 msgid "Show _foreground & background color" -msgstr "Показать цвет _переднего плана и фона" +msgstr "Показывать цвет _переднего плана и фона" #: ../app/dialogs/preferences-dialog.c:1933 msgid "Show active _brush, pattern & gradient" -msgstr "Показать используемые _кисти, текстуры и градиенты" +msgstr "Показывать активные _кисти, текстуры и градиенты" #: ../app/dialogs/preferences-dialog.c:1937 msgid "Show active _image" -msgstr "Показать активное _изображение" +msgstr "Показывать активное _изображение" #: ../app/dialogs/preferences-dialog.c:1950 msgid "Default New Image" @@ -9322,15 +9332,15 @@ msgstr "Экспортировать параметры яркости-конт msgid "Brightness-Contrast does not operate on indexed layers." msgstr "Яркость-Контраст не действует на индексированные слои." -#: ../app/tools/gimpbrightnesscontrasttool.c:315 +#: ../app/tools/gimpbrightnesscontrasttool.c:320 msgid "_Brightness:" msgstr "_Яркость:" -#: ../app/tools/gimpbrightnesscontrasttool.c:330 +#: ../app/tools/gimpbrightnesscontrasttool.c:335 msgid "Con_trast:" msgstr "_Контраст:" -#: ../app/tools/gimpbrightnesscontrasttool.c:344 +#: ../app/tools/gimpbrightnesscontrasttool.c:349 msgid "Edit these Settings as Levels" msgstr "Изменить эти параметры как уровни" @@ -9467,78 +9477,78 @@ msgstr "Экспортировать параметры цветового ба msgid "Color Balance operates only on RGB color layers." msgstr "Цветовой баланс действует только на изображения в формате RGB." -#: ../app/tools/gimpcolorbalancetool.c:267 +#: ../app/tools/gimpcolorbalancetool.c:270 msgid "Select Range to Adjust" msgstr "Выберите изменяемую область" -#: ../app/tools/gimpcolorbalancetool.c:276 ../app/tools/gimplevelstool.c:168 +#: ../app/tools/gimpcolorbalancetool.c:279 ../app/tools/gimplevelstool.c:168 msgid "Adjust Color Levels" msgstr "Коррекция цветовых уровней" -#: ../app/tools/gimpcolorbalancetool.c:293 -#: ../app/tools/gimphuesaturationtool.c:254 +#: ../app/tools/gimpcolorbalancetool.c:296 +#: ../app/tools/gimphuesaturationtool.c:255 msgid "Cyan" msgstr "Голубой" -#: ../app/tools/gimpcolorbalancetool.c:302 -#: ../app/tools/gimphuesaturationtool.c:256 +#: ../app/tools/gimpcolorbalancetool.c:305 +#: ../app/tools/gimphuesaturationtool.c:257 msgid "Magenta" msgstr "Пурпурный" -#: ../app/tools/gimpcolorbalancetool.c:311 -#: ../app/tools/gimphuesaturationtool.c:252 +#: ../app/tools/gimpcolorbalancetool.c:314 +#: ../app/tools/gimphuesaturationtool.c:253 msgid "Yellow" msgstr "Желтый" -#: ../app/tools/gimpcolorbalancetool.c:322 +#: ../app/tools/gimpcolorbalancetool.c:325 msgid "R_eset Range" msgstr "_Восстановить область" -#: ../app/tools/gimpcolorbalancetool.c:331 +#: ../app/tools/gimpcolorbalancetool.c:334 msgid "Preserve _luminosity" msgstr "Сохранить _яркость" -#: ../app/tools/gimpcolorizetool.c:90 +#: ../app/tools/gimpcolorizetool.c:91 msgid "Colorize Tool: Colorize the image" msgstr "Тонирование: окрашивание изображения" -#: ../app/tools/gimpcolorizetool.c:91 +#: ../app/tools/gimpcolorizetool.c:92 msgid "Colori_ze..." msgstr "Тон_ировать..." -#: ../app/tools/gimpcolorizetool.c:108 +#: ../app/tools/gimpcolorizetool.c:109 msgid "Colorize the Image" msgstr "Тонирование изображения" -#: ../app/tools/gimpcolorizetool.c:110 +#: ../app/tools/gimpcolorizetool.c:111 msgid "Import Colorize Settings" msgstr "Импортировать параметры тонирования" -#: ../app/tools/gimpcolorizetool.c:111 +#: ../app/tools/gimpcolorizetool.c:112 msgid "Export Colorsize Settings" msgstr "Экспортировать параметры тонирования" -#: ../app/tools/gimpcolorizetool.c:155 +#: ../app/tools/gimpcolorizetool.c:156 #, c-format msgid "Colorize operates only on RGB color layers." msgstr "Тонирование действует только на цветные изображения в формате RGB." -#: ../app/tools/gimpcolorizetool.c:217 +#: ../app/tools/gimpcolorizetool.c:221 msgid "Select Color" msgstr "Выбрать цвет" -#: ../app/tools/gimpcolorizetool.c:235 -#: ../app/tools/gimphuesaturationtool.c:387 +#: ../app/tools/gimpcolorizetool.c:238 +#: ../app/tools/gimphuesaturationtool.c:388 msgid "_Hue:" msgstr "_Тон:" -#: ../app/tools/gimpcolorizetool.c:250 -#: ../app/tools/gimphuesaturationtool.c:425 +#: ../app/tools/gimpcolorizetool.c:253 +#: ../app/tools/gimphuesaturationtool.c:426 msgid "_Saturation:" msgstr "_Насыщенность:" -#: ../app/tools/gimpcolorizetool.c:265 -#: ../app/tools/gimphuesaturationtool.c:406 +#: ../app/tools/gimpcolorizetool.c:268 +#: ../app/tools/gimphuesaturationtool.c:407 msgid "_Lightness:" msgstr "_Освещенность:" @@ -9547,7 +9557,7 @@ msgid "Sample average" msgstr "Выборочное среднее" #: ../app/tools/gimpcoloroptions.c:171 -#: ../app/tools/gimprectangleselectoptions.c:167 +#: ../app/tools/gimprectangleselectoptions.c:176 #: ../app/tools/gimpselectionoptions.c:281 #: ../app/widgets/gimpbrusheditor.c:154 msgid "Radius:" @@ -9655,11 +9665,11 @@ msgstr "%s для размывания" msgid "Convolve Type (%s)" msgstr "Вид действия (%s)" -#: ../app/tools/gimpcropoptions.c:148 +#: ../app/tools/gimpcropoptions.c:161 msgid "Current layer only" msgstr "Только текущий слой" -#: ../app/tools/gimpcropoptions.c:154 +#: ../app/tools/gimpcropoptions.c:167 msgid "Allow growing" msgstr "Разрешить наращивание" @@ -9712,15 +9722,15 @@ msgstr "Нажмите, чтобы добавить контрольную то msgid "Click to add control points to all channels" msgstr "Нажмите, чтобы добавить контрольные точки ко всем каналам" -#: ../app/tools/gimpcurvestool.c:431 ../app/tools/gimplevelstool.c:368 +#: ../app/tools/gimpcurvestool.c:433 ../app/tools/gimplevelstool.c:372 msgid "Cha_nnel:" msgstr "_Канал:" -#: ../app/tools/gimpcurvestool.c:455 ../app/tools/gimplevelstool.c:390 +#: ../app/tools/gimpcurvestool.c:459 ../app/tools/gimplevelstool.c:396 msgid "R_eset Channel" msgstr "_Восстановить" -#: ../app/tools/gimpcurvestool.c:545 +#: ../app/tools/gimpcurvestool.c:549 msgid "Curve _type:" msgstr "Тип _кривой:" @@ -9741,7 +9751,7 @@ msgstr "Обесцвечивание" msgid "Desaturate does only operate on RGB layers." msgstr "Обесцвечивание работает действует со слоями в режиме RGB" -#: ../app/tools/gimpdesaturatetool.c:188 +#: ../app/tools/gimpdesaturatetool.c:191 msgid "Choose shade of gray based on:" msgstr "Основа оттенков серого:" @@ -10030,12 +10040,12 @@ msgstr "Опера_ция GEGL..." msgid "GEGL operations do not operate on indexed layers." msgstr "Операции GEGL не применимы к индексированным слоям." -#: ../app/tools/gimpgegltool.c:301 +#: ../app/tools/gimpgegltool.c:305 msgid "_Operation:" msgstr "_Операция:" #. The options vbox -#: ../app/tools/gimpgegltool.c:346 +#: ../app/tools/gimpgegltool.c:352 msgid "Operation Settings" msgstr "Параметры" @@ -10089,51 +10099,51 @@ msgstr "Экспортировать параметры тона-насыщен msgid "Hue-Saturation operates only on RGB color layers." msgstr "Тон-Насыщенность действует только в слоях RGB." -#: ../app/tools/gimphuesaturationtool.c:250 +#: ../app/tools/gimphuesaturationtool.c:251 msgid "M_aster" msgstr "_Все сразу" -#: ../app/tools/gimphuesaturationtool.c:250 +#: ../app/tools/gimphuesaturationtool.c:251 msgid "Adjust all colors" msgstr "Изменять все цвета" -#: ../app/tools/gimphuesaturationtool.c:251 +#: ../app/tools/gimphuesaturationtool.c:252 msgid "_R" msgstr "R" -#: ../app/tools/gimphuesaturationtool.c:252 +#: ../app/tools/gimphuesaturationtool.c:253 msgid "_Y" msgstr "Y" -#: ../app/tools/gimphuesaturationtool.c:253 +#: ../app/tools/gimphuesaturationtool.c:254 msgid "_G" msgstr "_G" -#: ../app/tools/gimphuesaturationtool.c:254 +#: ../app/tools/gimphuesaturationtool.c:255 msgid "_C" msgstr "_C" -#: ../app/tools/gimphuesaturationtool.c:255 +#: ../app/tools/gimphuesaturationtool.c:256 msgid "_B" msgstr "_B" -#: ../app/tools/gimphuesaturationtool.c:256 +#: ../app/tools/gimphuesaturationtool.c:257 msgid "_M" msgstr "_M" -#: ../app/tools/gimphuesaturationtool.c:259 +#: ../app/tools/gimphuesaturationtool.c:262 msgid "Select Primary Color to Adjust" msgstr "Выберите основной цвет для изменения" -#: ../app/tools/gimphuesaturationtool.c:350 +#: ../app/tools/gimphuesaturationtool.c:352 msgid "_Overlap:" msgstr "Пере_крытие:" -#: ../app/tools/gimphuesaturationtool.c:369 +#: ../app/tools/gimphuesaturationtool.c:371 msgid "Adjust Selected Color" msgstr "Изменение выбранного цвета" -#: ../app/tools/gimphuesaturationtool.c:446 +#: ../app/tools/gimphuesaturationtool.c:447 msgid "R_eset Color" msgstr "Восстановить _цвет" @@ -10141,35 +10151,35 @@ msgstr "Восстановить _цвет" msgid "Pre_sets:" msgstr "_Предустановки:" -#: ../app/tools/gimpimagemaptool-settings.c:153 +#: ../app/tools/gimpimagemaptool-settings.c:157 msgid "Pick a setting from the list" msgstr "Выберите параметр из списка" -#: ../app/tools/gimpimagemaptool-settings.c:182 +#: ../app/tools/gimpimagemaptool-settings.c:186 msgid "Add Settings to _Favorites" msgstr "_Добавить параметры в избранное" -#: ../app/tools/gimpimagemaptool-settings.c:188 +#: ../app/tools/gimpimagemaptool-settings.c:192 msgid "_Import Settings from File" msgstr "_Открыть параметры из файла" -#: ../app/tools/gimpimagemaptool-settings.c:194 +#: ../app/tools/gimpimagemaptool-settings.c:198 msgid "_Export Settings to File" msgstr "_Сохранить параметры в файл" -#: ../app/tools/gimpimagemaptool-settings.c:436 +#: ../app/tools/gimpimagemaptool-settings.c:440 msgid "Add Settings to Favorites" msgstr "Добавка параметров в избранное" -#: ../app/tools/gimpimagemaptool-settings.c:439 +#: ../app/tools/gimpimagemaptool-settings.c:443 msgid "Enter a name for the settings" msgstr "Дайте имя сохраняемым параметрам" -#: ../app/tools/gimpimagemaptool-settings.c:440 +#: ../app/tools/gimpimagemaptool-settings.c:444 msgid "Saved Settings" msgstr "Сохраненные параметры" -#: ../app/tools/gimpimagemaptool-settings.c:648 +#: ../app/tools/gimpimagemaptool-settings.c:652 #, c-format msgid "Settings saved to '%s'" msgstr "Настройки сохранены в '%s'" @@ -10184,7 +10194,7 @@ msgid "Adjustment" msgstr "Коррекция" #: ../app/tools/gimpinkoptions-gui.c:68 ../app/tools/gimpinkoptions-gui.c:93 -#: ../app/tools/gimprectangleoptions.c:983 ../app/tools/gimptextoptions.c:442 +#: ../app/tools/gimprectangleoptions.c:973 ../app/tools/gimptextoptions.c:442 msgid "Size:" msgstr "Размер:" @@ -10302,29 +10312,29 @@ msgid "Pick white point" msgstr "Выбор белой точки" #. Input levels frame -#: ../app/tools/gimplevelstool.c:405 +#: ../app/tools/gimplevelstool.c:411 msgid "Input Levels" msgstr "Уровни на входе" -#: ../app/tools/gimplevelstool.c:509 +#: ../app/tools/gimplevelstool.c:514 msgid "Gamma" msgstr "Гамма" #. Output levels frame -#: ../app/tools/gimplevelstool.c:551 +#: ../app/tools/gimplevelstool.c:556 msgid "Output Levels" msgstr "Уровни на выходе" #. all channels frame -#: ../app/tools/gimplevelstool.c:629 +#: ../app/tools/gimplevelstool.c:633 msgid "All Channels" msgstr "Все каналы" -#: ../app/tools/gimplevelstool.c:644 +#: ../app/tools/gimplevelstool.c:647 msgid "Adjust levels automatically" msgstr "Подобрать уровни автоматически" -#: ../app/tools/gimplevelstool.c:671 +#: ../app/tools/gimplevelstool.c:674 msgid "Edit these Settings as Curves" msgstr "Изменить эти параметры как кривые" @@ -10603,7 +10613,7 @@ msgstr "Постеризация (Уменьшение количества цв msgid "Posterize does not operate on indexed layers." msgstr "Инструмент постеризации не работает с индексированными слоями." -#: ../app/tools/gimpposterizetool.c:224 +#: ../app/tools/gimpposterizetool.c:226 msgid "Posterize _levels:" msgstr "_Уровни постеризации:" @@ -10612,36 +10622,36 @@ msgid "Use all visible layers when shrinking the selection" msgstr "Использовать все видимые слои при сокращении выделения" #. Current, as in what is currently in use. -#: ../app/tools/gimprectangleoptions.c:739 +#: ../app/tools/gimprectangleoptions.c:729 msgid "Current" msgstr "Активное" -#: ../app/tools/gimprectangleoptions.c:817 +#: ../app/tools/gimprectangleoptions.c:807 msgid "Expand from center" msgstr "Рисовать из центра" -#: ../app/tools/gimprectangleoptions.c:840 +#: ../app/tools/gimprectangleoptions.c:830 msgid "Fixed:" msgstr "Фикс.:" -#: ../app/tools/gimprectangleoptions.c:973 +#: ../app/tools/gimprectangleoptions.c:963 msgid "Position:" msgstr "Позиция:" -#: ../app/tools/gimprectangleoptions.c:991 +#: ../app/tools/gimprectangleoptions.c:981 msgid "Highlight" msgstr "Затемнить невыделенное" #. Auto Shrink -#: ../app/tools/gimprectangleoptions.c:1001 +#: ../app/tools/gimprectangleoptions.c:991 msgid "Auto Shrink" msgstr "Автосокращение выделения" -#: ../app/tools/gimprectangleoptions.c:1008 +#: ../app/tools/gimprectangleoptions.c:998 msgid "Shrink merged" msgstr "Во всех слоях" -#: ../app/tools/gimprectangleselectoptions.c:155 +#: ../app/tools/gimprectangleselectoptions.c:164 msgid "Rounded corners" msgstr "Закруглённые углы" @@ -11267,7 +11277,7 @@ msgstr "Действие" #: ../app/widgets/gimpactionview.c:341 msgid "Shortcut" -msgstr "Клавиши быстрого доступа" +msgstr "Комбинация" #: ../app/widgets/gimpactionview.c:365 msgid "Name" @@ -11275,7 +11285,7 @@ msgstr "Название" #: ../app/widgets/gimpactionview.c:497 ../app/widgets/gimpactionview.c:701 msgid "Changing shortcut failed." -msgstr "Не удалось изменить клавиши быстрого доступа." +msgstr "Не удалось изменить комбинацию клавиш." #: ../app/widgets/gimpactionview.c:539 msgid "Conflicting Shortcuts" @@ -11932,28 +11942,28 @@ msgstr "Цвет _фона:" msgid "Spacing" msgstr "Ячейки" -#: ../app/widgets/gimphelp.c:189 +#: ../app/widgets/gimphelp.c:196 msgid "Help browser not found" msgstr "Программа просмотра справки отсутствует" -#: ../app/widgets/gimphelp.c:190 +#: ../app/widgets/gimphelp.c:197 msgid "Could not find GIMP help browser." msgstr "Не удалось найти программу просмотра справки GIMP" -#: ../app/widgets/gimphelp.c:191 +#: ../app/widgets/gimphelp.c:198 msgid "" "The GIMP help browser plug-in appears to be missing from your installation." msgstr "В Вашей установке GIMP отсутствует просмотрщик справочной системы." -#: ../app/widgets/gimphelp.c:232 +#: ../app/widgets/gimphelp.c:239 msgid "Help browser doesn't start" msgstr "Программа просмотра справки не запускается" -#: ../app/widgets/gimphelp.c:233 +#: ../app/widgets/gimphelp.c:240 msgid "Could not start the GIMP help browser plug-in." msgstr "Не удалось запустить программу просмотра справки GIMP" -#: ../app/widgets/gimphelp.c:259 +#: ../app/widgets/gimphelp.c:266 msgid "Use _web browser instead" msgstr "Использовать внешний просмотрщик" @@ -12091,8 +12101,8 @@ msgstr "Авто" msgid "" "When enabled the dialog automatically follows the image you are working on." msgstr "" -"При включении этой функции содержимое диалога меняется в соответствии с тем, " -"какое изображение активно в данный момент." +"Если включено, содержимое диалога меняется в соответствии с тем, какое " +"изображение активно в данный момент." #: ../app/widgets/gimpmessagebox.c:437 #, c-format @@ -12237,16 +12247,16 @@ msgstr "" msgid "Pr_eview" msgstr "_Предпросмотр" -#: ../app/widgets/gimpthumbbox.c:402 ../app/widgets/gimpthumbbox.c:467 +#: ../app/widgets/gimpthumbbox.c:402 ../app/widgets/gimpthumbbox.c:466 msgid "No selection" msgstr "Нет выделения" -#: ../app/widgets/gimpthumbbox.c:595 ../app/widgets/gimpthumbbox.c:616 +#: ../app/widgets/gimpthumbbox.c:594 ../app/widgets/gimpthumbbox.c:615 #, c-format msgid "Thumbnail %d of %d" msgstr "Миниатюра %d из %d" -#: ../app/widgets/gimpthumbbox.c:729 ../app/widgets/gimpthumbbox.c:739 +#: ../app/widgets/gimpthumbbox.c:728 ../app/widgets/gimpthumbbox.c:738 msgid "Creating preview..." msgstr "Создание пред. просмотра..." @@ -12447,12 +12457,12 @@ msgid "Web browser" msgstr "Внешний просмотрщик" #: ../app/widgets/widgets-enums.c:229 -msgid "Linear" -msgstr "Линейное" +msgid "Linear histogram" +msgstr "Линейная гистограмма" #: ../app/widgets/widgets-enums.c:230 -msgid "Logarithmic" -msgstr "Логарифмическое" +msgid "Logarithmic histogram" +msgstr "Логарифмическая гистограмма" #: ../app/widgets/widgets-enums.c:263 msgid "Icon" @@ -12594,6 +12604,9 @@ msgstr "Убедитесь, что панель инструментов вид msgid "Couldn't start '%s': %s" msgstr "Невозможно запустить '%s': %s" +#~ msgid "Linear" +#~ msgstr "Линейное" + #~ msgctxt "command" #~ msgid "Rectangle Select" #~ msgstr "Прямоугольное выделение" diff --git a/themes/Default/images/Makefile.am b/themes/Default/images/Makefile.am index 3c41ad35fe..d954ef36e6 100644 --- a/themes/Default/images/Makefile.am +++ b/themes/Default/images/Makefile.am @@ -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 diff --git a/themes/Default/images/stock-user-manual-16.png b/themes/Default/images/stock-user-manual-16.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7ce025c92a6d567adc1f0175782e138b407646 GIT binary patch literal 928 zcmV;R17G}!P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00*c500*c6xg49#00007bV*G`2iOJ- z3p61NIdZZ900SUNL_t(I%Waa+Yg|z6_q^~BGvjfJlcixt&_{p%vG6&bKyk7pvT3;x_+G!jlkp1s!t=*pJ9+-m zrkR_0H#l*^UY@bFM@@VQZM z{`X(wdadf2UL>O^!oyy$>;m`+z?(!wrBbOpJ$)v>wtlO8=+F!9v12D_r_~&o7@xrS z_!L^r`(9(Cf-W1lt^+8x&iKSDR~~HNJ9+8S<>e2~o%^IXF*$H!_2$Tp>lLxGvW#3V zgD<|kfCKxV!Djt7?%ll&Z7e{9osPaqUtPS=8$0}>lgsuu-hc1I?$ZZHM|N8+kZR%V zTdxCJL-rQ{B5bTx(AsH2sRYV6$*p?pV^=Aq$}5%h*yza6>^B!F@5GVuCJ~&wi?^BcWQt4gfXUPtwrqiQI-{w`*#4alrj*m=aRLIKuUy#5baI} z)!N_i4>q2k`+=ZiN3xxthI1*4vf|CTo=X|_?~-py;_|E z&;`(QjWLFZ&=t}GETmN|rKE6Qh*)(IMP0xGN+~cie9wykv;bHD?Arf8BzyvZfP36* z?$B<#gTcW81ilZe4c2PwFvfs{U;u_673fA$)J&(-`Gi~oGbATqW>{meQQLrJizG?l z2nWmzB7pbgD`vm`_T|OJr607`)(QtcCnTi=kwCUTi!clkh9UC#Jc1wqGn~EYy8zU+ zpMUvmv%dM#yQgzUeAd)%cMt?V+U*Eh8ze~rV+@p1Fvj>qME_r4WUVBOH+tLZlqWc_@VV$67nL*Wh167@EJ{Q**%p0000(^b8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11uscNK~zYIwU%3K99J2~f8UweoppBB>s@agJ1Epm<50zvAeF>U zB3>FHQXzp5H1r*iDpf+X5lA2*fuOt=P{4_>*%q8CxKUGHvmVE4fsI(?xnv6 zyKG+YlF7L+ioU6KInXCWcyX7_lPNFx+P*^80c5uT2|t~F^4Q6f-~V49efIdkW9c^U z>VbXPBaRpWth-A9_fYTtQeki5$6x*W*PfWZGyAhgA3Yi$>iy)mKe#zPbMxj+-&M}w zg9p01{iM#7Ha8&Q8^GKbKtz&24-kCe@h{~+{m3KP!GV(!$I<8B{@cY@3SIl;%oiUQ zr5s-R{co9_zD~JZqFSvX0*KiAouK`0!!r%;)IsJ;?a@ zzto9=LG~89NTu4?+ttPG$p~u=j-$|8p&Rb83Sekx$Qd0SexM29IL=qT`^+<4zj*%n z?6Fgy@0z(gd;0wO^Bg}u$k^ChSS;txeUGze&vNV54Jwr~BGM|Qgu1p>V9^DbnwmHe zM!he+`Ip!BrabTGTI)NnzW#a;qmt`eW!iIjckJRA&z}1ZF(^^Q>F6O#G%7|&rM8>Up#Z>%axhpe0vnt zQ9yTh51qb)ax`sOpN?!h3D4uszpt~rSfo}9K|mXWkp#6`=}%LW?>9vD{rU1%xxnV; z){$#hudOO;PyAu%<@etIV50EQ!Gnp8jvSts!gXDuC?twPf*>G@0vy>z|Qmy?OP^~2Y^tqozj-wKe<8XXt_;P#y$-{}6EB-(GzM(DFQA#0# z09a!&#$aje)mk%Oyvy?3ZEh7;ste0oV^=Qy;|ZYFa*;8*EJ991h;ZeBwTVn{W0bYb zpsU@sdt7FWL2HfHhW2cRmE{%ISJ#-lwNzSKSs%JSe&t840DZX0mPAZWL~+HQ~bg7jmZl@2-I6PZ3u13#u$t- z)ZBEkH9@^fwj)crZ4b#rl8#&!KjWjdA(QbjMq`Y@aa3{o#^fJ?O`y6B@L`gTwPmpl zZmVv}gIXgK^%{jjC$5_y2&%Yog3ZkZ!Z0F^W6G5Z#u$`Hyxm-Hm${cBtxJuB3sq@L z!TR14*jQU{=AUh9Y=e=8dv<7G%FQI!oVIlHeIl;0 z5roXn&f>Z**^Vqq1Z@qA^Gno%0AtL~zW4lK6pg8+QVo7*j0ub}gyQ)v4dR-%){;yn zsn=r`<`?E5vaS6$5znTI~Co zhLB3(r+s>Qdf4BypZ1JTE|*6{u-k*)7XXMxE{wc0a$)3$K@hHJal!^gRU3sNp6AiF zXAj02s?{3RS_N$k#knHZS}fN2NIzN{SZl3_M8NX3YwulNUS9syQ%|3I)@!)PSy^4d zT1y<0!J0eDuGQedT_Pl3(>{cNnE|3KZ+XFOH*(|-|+4Q>s%zqR4KgM&Sj=9=RP5=M^ M07*qoM6N<$g32V+G5`Po literal 0 HcmV?d00001 diff --git a/plug-ins/help-browser/wilber-reading.png b/themes/Default/images/stock-user-manual-32.png similarity index 100% rename from plug-ins/help-browser/wilber-reading.png rename to themes/Default/images/stock-user-manual-32.png diff --git a/themes/Default/images/stock-user-manual-64.png b/themes/Default/images/stock-user-manual-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc5ae3204960d4a89d86f4f74a5b44cbe4cc88c GIT binary patch literal 6065 zcmV;i7f$GjP)~r=pJMWq9uF8k*nVs2PfRKo_KIEQLr@E_Zs_Xvi-dp$H?h(cq z{(qv8(J=`;0W=&wu>YS~zvu=10_b;vTLDH!$M(rz@M8W+X=HRP3jB`3t2FK15CBF- z$6^~X?T-M!+>z2u8G9W-oA%T{S0>G9+=)J@J3fKdDEp$NsNoZtr>=psXgy4hy zUCmtH+eX=QNi8h`CXfJOU;_bgguo1J>gL+rTO@EB@V`bz#~L^2c>s)zj@>viI`+4~ zcViK&W6#!Z+1Ht%R4R~KT11571R#X~Xx=DK&=EoyB?X)Nx)4Hg;K<1j00%}!$3A@c z!2W}m>Omu;V-E1E0)88~%2Lwr>ujd4Dv{JU=A2p zKKtoUe>yobI;McVz&_xe0`?hbipOj{(9=RkOOp};3WZ?TJ>N$Pffiy#0z?G}q8law zN=k%sa3Tqm9i=4>H+1zYV+{Fx;X^+;bmT)0A}F+2`D-`LQw@ZOvEeayD)`wc?c zwym3+n@OcozwGp+?N@a`* z^c@k@qGo{x3Ha#^17Q2ML8)S`#9}da?c7aoPY+Hc#@yUA$BrGPp&`!n^z>Cv|Mn%UV|UfBPTSP-78a3c1Mj%$9SjUyMkEqNDMbK)p{uKtTW-FYSC78RbI(6V z%z@?kDKhCS#bOcHb1~XfcU)9GQLfDpnGLj1B2;q5%*>{Cg0yz_)?l2Ob4}1e_5mufKt9 zJ4{TRV`yk64?OT01_uX02-@0O85rnCYagwBJkMixc9tVYUg1k$dWgMOU(4;c-@%b1 zN7%h<7tx4AqP=H@(HaKBo8WR42m%pUf1~lWFh^@Na|=zxLpN{K8dWXliP}^IVjY96frR_r32n0Pes4e*XU3-{Fx* z9;Lgxi$rUJ_O^C>-^cTOr1V%=Smeqp_X2S3wb!zJ#}4ke;|^}U^)?=V{4v_v+R0`! z_2OF_`Z+UNMPYjB|r#qJ@Ch4Z@->@_3OXRXFu}*pZa(I zma(xhwhs;Qfe-$QxPIS0B9Z78;Cn}o9C^Ex!U!R8U6)d+#P`4dRNb6SEv+;q68!Lo zPY3sn4fuW_?yg(r;K7&b#=rYr?_y~8mDrBM0}p(brluy8g8Cht$-4!jOSPLpbHnH0(-lAdgaccA!4y; z4XT27-gFcH^XuQhQj+FG3)j4DOdZ(&eB_ZY{|`p5y_zkXH{&=CH{5U?_uuzhT(NT( zmSy94F6pI3uG+H`faT>htt~A97{1R-hYs-@AOAQXz3ZdAe)1$=`}*I63=51gEG{nL zdoI53U&Qk3NeW5Ht^V%J1pyGjp}D)Yy-hfg$eRAv);285BA3gO&*f-nY+%dQE94u; zU*oaI9_PN_x`$XS%I&wmpCA0-X^tOxnP@ytF`q+g!>-*s5g3+JDayS)Xsxj#%JT;fB4r??#u!qI3-tAE!u4E=`80+=%?&}JrmnvUE|ii8A;=Y7fD-Vc^{sDz z^EVqB;+p`Xk=UQaqsqSKnwzG>hZ-S7v0N<0Up(*=?)uQbtS$)P+2>yfoD2lHd=Aeo zlW1un-q64gp86p--gE;yhqf_1yq&-P>#y*{6HoH&v(NGNTi(T*zuV!Q#Rkxonnu?zx*{u}mg4yTY7VsVeMNi&+85 zwjH!FWQ(2#eth`A{*t=(+N=Mry}hkRDRrkd`jbjpzdJQGv2}8C=9#{}zQX4|_qq2* zqp{1ndwa#ixhZxI4Pgv?>pM^Kk54^?TQ1|4OSt7Sxm*?{BvL6Bl1Y>jG&Lv4=CUYd zF*LND>u-2F9UYx0B`Bq*DQD-Akp?ok0`XW3r4(&#tz3EKZVnxKnaPQ>q*F^Inwz=z z-n(h<>>!((WqDyX@EIx?7!xuZ)~vcW5Q#+bwP9wl0Px5?zj61E#1|g?{EU>cbL$m@ z&m|Ix8wJ9TMWf2LtfVpKzU!`g$MvmkZTH^%-dokw>@2qJ(9qaGCYwY1K5n^8u~?v3 z$WzD#QJ0dEGpEMs-_*gcefUlyu_lxg4NfKP;g+(LGD);{1HF_Ejh&kj(x$hki;ng- zY}*QUesPI>p@8f8EH0)f6?4p-K8okLRfkDy6BdoGYYXcTfySl;OX)ll$vnXIhY#$3 z-ZI8yjWOLP-x$BKv#ayqz(D_SzF3Gy9H%qU)cn}fPd~N)&O85wnmji_bE1W**;z7~ zG(t*@F?g;^xm3a}yLg_9_B@C)WGWlZ~(vpGL^x} zx#TsuZ0^jCq3xF{ujGb@hYkZH6O$8M zv2}a&TYvYr{N{b1B;q*aa(Rlb3mCMo@jREN#zw9f+)Q8JCi?pa=J&Y@}R9W2YjvTRh4f3N!YuIq;0o?CT%g0`U6T30t>^6V*| z`tCRJ^=beDJvZ8L86ku4QYpz|Y7wPW zc(0Hus0E_B%f9x|zQ*@`eC?xszk2QaeyAb=b@cY}j(2~6*N-3J%*o?xq+nqw&Fd%6 zkuMba;g1e6yyJ5A3~#AZ16|pD+hI9dq*&I<_x(S7_0YlUgVv}(EeHU~Ss-Mp={n?!2|hxR{%F)%TeOrco9u~qfxvn&hSc1WcQ6kRO~`TT!&UDpBpaQb3Z1z^?D zQ3FWHjyt_i{}-ATPa#v&G@kr1!Vk{y1$!&Y(e7~k`Yc{7)dw!;8xzFzd-rVP@_}xQ zF^ulr!L$2cp&=fvGOwgXBo?PoC^NNK&|3Q^P9A^ldjv0Se83Yzl+UXIwGS-W4G~)@ zHZ?{m&n@AxvOA)f!MEEkn#l^SKDH`nd!;C)aNQMWCorgzq3r|gx}pn&sQ#w2vxPmw zTY~JbHb^On#^aPrE@$R)TKhVAc6|J|we}@}-BV$0Nn=cAy)(3yN>)6Ekcem_GM)gb zs(msHP2URhwa=_vUv}9*U0*JnXF0V@JYr*@&I2^su;ubzv^FTqA{vWRb_3=;U*{&z zp81`0YAHpK0}!>fWsJ$L*8SBWl&qKq27C`J8)^a~Q9i!_RZf$O1)(ywyQdr5iPW`c zb6HBI5@pw|cZRB7pdcEJAuWqy$z^grZ_2Lk%}k#Ay~X+DB=vz}#Wjqt2L?cAXD1yU9eBQ1*Ha3mZ70-{H6m)fU zVvJ^KDRseJZ%#DP-PMKdM5x3I>urow7Lve5C}m>^j9xlhV0Njb%bu2neEykpr^g>H zH;!ZDIDyv~ zi^Z^Q8>%5}@ay$#gyTfOD16_roGX&fmB|!5?Q0`_-0)?eJ@+Xa4iUx>l~0X z;iMNl25Y6lN9K(0wg}6qlK@ATs@FZeJtPtdeC;zeIaLK|;>=m{g#yL|);rPM%*^z3 zH402ErVt1Q2KuUPu2=n(tqy>E!JWutveTaDEo4%umll$9uNh-%ceYdmKyg*c0fpN6 zF6araQiBq{2a)(H0LsBcmLiczAOK4$E*lu2SS$tx%yp~d%jGf)iwjjos~{|;=(1d$7s~MnV+`UQOp{Y+U;hNPBx5EiDNuNsx%+Fgr7c zU(L@O+S@x=kqF3SS2VNU2u3qNlF*%Ht!1w;?wU6YAJtK&$P5RnD(r zcJ&-TYv1{d+oe_k38(`v{>1xl4}In1xm@nC+Roa=)*uM5Z7eZ($&X>LY zIRP*P2?7o9$d?~|Whff@ihIy#w~nq+}U1wdRH5F{(vk!r%=@o#+dfB*F0 zOJ6j`xK)E?jL=5pjpwd$hi$L00*0-^$j{K--NW$EaOm(*eT@w;Gdo9DXE&`aEi5iA z1>MG=lw{YgoeT}_VEojYFKI#hiWSLy%VdQBcm#fQ0f+((|M-8t_u}&M@*nSe=S}xn zmK6sm8%k)eQLGAxY;VP~=W}@y%`K!-DW<2VD3?k&jzJLjX*ecX&&#U_}M|8US(x!9;QY3ojmj;#=SO^K!YI2FUxu4J1I-hr~4i z%*@Wx*x10}mOzhBr>W9;UT*=rQJ*IC~aj3@1(;zwnBEUHLZd(%66+5vqVtAjlDgXiCR67Gd7fA8OJ}O- ziSw;^LtJ4K8r6y_xk!+g0YJOr1R{h6imRIET=`-P7C8}F}9o*Lk zLhGgKYiWhoayjrpB-KAXzO^tgq$(#N2$d6|L?8urO;OKG2&&1tmjQhN?BRsr3IjdDjAIeuuNcZB%r@>T9#3xvouH r`89nWYv0t=7IT5RD*kUd8v^`4mbDZ(25ODP00000NkvXXu0mjfR~D}h literal 0 HcmV?d00001 diff --git a/plug-ins/help-browser/wilber-reading.svg b/themes/Default/images/stock-user-manual.svg similarity index 100% rename from plug-ins/help-browser/wilber-reading.svg rename to themes/Default/images/stock-user-manual.svg diff --git a/tools/pdbgen/pdb/help.pdb b/tools/pdbgen/pdb/help.pdb index 88756f56cd..32153bacc5 100644 --- a/tools/pdbgen/pdb/help.pdb +++ b/tools/pdbgen/pdb/help.pdb @@ -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 );