Skip to content

Instantly share code, notes, and snippets.

@ssrihari
Created September 15, 2012 12:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ssrihari/3727630 to your computer and use it in GitHub Desktop.
Save ssrihari/3727630 to your computer and use it in GitHub Desktop.
Diff tito upstream/master
diff --git a/README b/README
index 29f1af1..0c68004 100644
--- a/README
+++ b/README
@@ -1,97 +1,136 @@
- ------------------------------
- GNU Image Manipulation Program
- 2.8 Stable Branch
- ------------------------------
-
-GIMP 2.8 replaces earlier GIMP 2.x versions. It is advised that you
-uninstall them before installing GIMP 2.8. If you want to keep your
-older GIMP 2.x installation in parallel to GIMP 2.8, you have to
-choose a separate prefix which is not in your default library search
-path. Otherwise your prevoius GIMP installation will start to use the
-new libraries. You have been warned.
-
-If you think you found a bug in this version, please make sure that it
-hasn't been reported earlier and that it is not just new stuff that is
-still being worked on and obviously not quite finished yet.
-
-If you want to hack on GIMP, please read the file HACKING. For
-detailed installation instructions, see the file INSTALL.
-
-
-1. Web Resources
-================
-
-GIMP's home page is at:
-
- http://www.gimp.org/
-
-Please be sure to visit this site for information, documentation,
-tutorials, news, etc. All things GIMP-ish are available from there.
-
-The automated plug-in registry is located at:
-
- http://registry.gimp.org/
-
-There you can get the latest versions of plug-ins, using a convenient
-forms-based interface.
-
-The latest version of GIMP can be found at:
-
- http://www.gimp.org/downloads/
-
-
-2. Mailing Lists
-================
-
-We have several mailing lists dedicated to GIMP user and development
-discussion. There is more info at
-
- http://www.gimp.org/mail_lists.html
-
-Links to several archives of the mailing lists are included in that page.
-
-Gimp-user-list is a mailing list dedicated to user problems, hints and
-tips, discussion of cool effects, etc. Gimp-developer-list is oriented
-to GIMP core and plug-in developers. Most people will only want to be
-subscribed to gimp-user-list. If you want to help develop GIMP, the
-gimp-developer mailing list is a good starting point.
-
-
-3. IRC
-======
-
-And finally, for the real junkies, there is an IRC channel devoted to
-GIMP. On GIMPNet (a private free software oriented network) there is
-#gimp. Many of the developers hang out there. Some of the GIMPNet
-servers are:
-
- irc.gimp.org:6667
- irc.us.gimp.org:6667
- irc.eu.gimp.org:6667
-
-
-4. Customizing
-==============
-
-The look of GIMP's interface can be customized like any other GTK app
-by editing the ~/.gtkrc-2.0 file or by using "themes" (ready-made
-customizations). For downloadable themes and further details, see
-http://art.gnome.org/themes/gtk2 . Additionally, GIMP reads the file
-~/.gimp-2.8/gtkrc so you can have settings that only apply to GIMP.
-
-Included is a set of keybindings similar to those in Adobe Photoshop.
-You can find them in the ps-menurc file. To use them, copy this file
-to ~/.gimp-2.8/menurc. You can also manually change the keybindings to
-any of your choice by editing ~/.gimp-2.8/menurc.
-
-
-Have fun,
-
- Spencer Kimball
- Peter Mattis
- Federico Mena
- Manish Singh
- Sven Neumann
- Michael Natterer
- Dave Neary
- Martin Nordholts
+Tito
+====
+
+With small (but awesome) additions, this is still The GIMP.
+
+See the [demo](http://youtu.be/G0PuH1LFWhA?hd=1) for an insight into the usage.
+
+
+Tito is a text input tool developed for the GIMP as a first attempt
+to add an
+ `intent driven interface` that helps to get at the menus faster.
+
+If,
+ - You forgot where something appears in the menu,
+ - or find it cumbersome to traverse through the menu everytime,
+ - or forgot a shortcut,
+ - or choose what you want from a bunch of smiliar actions,
+ then Tito should help you.
+
+`Press [Shift+?] to activate Tito`
+
+### See the following sections for more information:
+ - [Algorithm](#i-algorithm)
+ - [UI/UX](#ii-ui-ux)
+ - [Ideas](#iii-ideas-not-yet-implemented)
+ - [Pitfalls](#iv-pitfalls)
+
+
+## [I] Algorithm
+
+### Data
+##### *What is searched?*
+ 1.User-readable texts of Menuitems, Tools, Dockable-dialogs and Plugins:
+ Labels(as they appear in the menus)
+ Tooltips(small descriptions) of all actions
+ 2. User history [Previously applied actions through Tito]
+ 3. Avoides search in main-menus, popups and context-actions
+
+### Mechanism
+ 1.Labels first
+ 2.If keyword is two characters,
+ then match them with first letters of first and second word in the labels.
+ [Ex: 'gb' will list 'Gaussian Blur...']
+ 3.Tooltips
+ When keyword is longer than two characters
+ [Tooltips need to be searched because they might contain vital keywords
+ that might be absent in the labels. Ex: 'adjust' will list 'Canvas Size...']
+ 4.User history
+ If keyword matches with previously applied actions, it is listed first.
+ [Also, the list of previously used actions appears when the down-arrow key is pressed]
+
+### Adaptiveness
+ Frequently used actions appear higher in the results list.
+ This is great when dealing with frequently used menuitems that don't have shortcuts.
+ Over a period of time, this would largely reduce the number of keystrokes.
+
+
+## [II] UI / UX
+
+### Keyword entry
+ Occupies minimal space, does not hinder with work-area
+ Has the look and feel of a search-bar with editable text area
+ Preferences:
+ Position
+ -Right top [Default, and most used location for a search bar]
+ -Middle [For those who can't take their eyes off the canvas]
+ -User specific [Adjust by giving coordinates]
+ [The coordinates are in percentages that are limited by the current width]
+ Width
+ Adjustable from 20% to 60% of screen width_hbox
+
+### Results list
+ A navigable dropdown-list of runnable actions
+ Each result shows:
+ - The icon corresponding to the action
+ - The Label as in the menus
+ - A corresponding shortcut if available
+ - A short description (tooltip) if available
+ A result, after selection, can be 'applied' by
+ -Hitting return
+ -Double click
+ Preferences:
+ Height [Show more/less results]
+
+### Toggle actions
+ Actions like 'Show Grid' or "Single-Window Mode" are displayed with
+ appropriate icons that indicate their state
+
+### Autohide
+ A preference that would help toggle the visibility of Tito.
+ If not set, then Tito would remain over GIMP
+ and the user would press [Shift+?] to switch to Tito
+
+### Show inert actions
+ If set, then the actions that are currently unavailable
+ would be shown, but 'greyed-out'. If not set, they would not be shown.
+
+### Quick apply
+ Hitting return while in the keyword area runs the first result.
+
+
+
+## [III] Ideas (not yet implemented)
+
+### Thesaurus
+ Map the dictionary of image editing with the GIMP terminology.
+ So, 'scale', 'resize', 'shrink', 'expand' could transform to a single meaning.
+
+### Wider search
+ Search through the user help/documentation.
+ Search based on menu hierarchy.
+
+### Highlight keywords in result
+
+### Command system
+ An epic addition to the GIMP interface that would allow entering commands
+ or a sequence of commands to perform complex manipulations.
+
+
+
+## [IV] Pitfalls
+
+### Menu Path
+ Tried and failed in attaining the menu-path, ui-path that corresponds to an action.
+ There is apparently no Gtk mechanism to do this.
+ The only way to do this would be to parse the entire menu ui XML,
+ which would increase the complexity enormously and put limitations on performance.
+
+### Autocomplete
+ To reduce the number of keystrokes to search and apply, we tried different mechanisms
+ of 'auto-complete' and settled with the very basics.
+
+### Advanced search
+ We tried using a search engine to parse through XML databases that contained
+ organized information. We indexed the text and used APIs to invoke the search engine.
+ This turned out to be an overkill.
\ No newline at end of file
diff --git a/app/actions/dialogs-actions.c b/app/actions/dialogs-actions.c
index 535b87f..e814a0a 100644
--- a/app/actions/dialogs-actions.c
+++ b/app/actions/dialogs-actions.c
@@ -264,7 +264,13 @@ static const GimpStringActionEntry dialogs_toplevel_actions[] =
NC_("dialogs-action", "_About"), NULL,
NC_("dialogs-action", "About GIMP"),
"gimp-about-dialog",
- GIMP_HELP_ABOUT_DIALOG }
+ GIMP_HELP_ABOUT_DIALOG },
+
+ { "dialogs-tito", GTK_STOCK_FIND,
+ NC_("dialogs-action", "_Tito"), NULL, //label
+ NC_("dialogs-action", "Menu search and more..."),//tooltip
+ "gimp-tito-dialog",
+ GIMP_HELP_TITO_DIALOG }
};
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index 27aabcc..83df4fc 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -85,6 +85,7 @@ static void image_resize_callback (GtkWidget *dialog,
gint offset_x,
gint offset_y,
GimpItemSet layer_set,
+ gboolean resize_text_layers,
gpointer data);
static void image_resize_options_free (ImageResizeOptions *options);
@@ -586,6 +587,7 @@ image_resize_callback (GtkWidget *dialog,
gint offset_x,
gint offset_y,
GimpItemSet layer_set,
+ gboolean resize_text_layers,
gpointer data)
{
ImageResizeOptions *options = data;
@@ -612,6 +614,7 @@ image_resize_callback (GtkWidget *dialog,
context,
width, height, offset_x, offset_y,
layer_set,
+ resize_text_layers,
progress);
if (progress)
diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c
index 3b59012..f61a0b9 100644
--- a/app/actions/layers-commands.c
+++ b/app/actions/layers-commands.c
@@ -130,6 +130,7 @@ static void layers_resize_layer_callback (GtkWidget *dialog,
gint offset_x,
gint offset_y,
GimpItemSet unused,
+ gboolean unused2,
gpointer data);
static gint layers_mode_index (GimpLayerModeEffects layer_mode);
@@ -1172,6 +1173,7 @@ layers_resize_layer_callback (GtkWidget *dialog,
gint offset_x,
gint offset_y,
GimpItemSet unused,
+ gboolean unused2,
gpointer data)
{
GimpContext *context = GIMP_CONTEXT (data);
diff --git a/app/core/core-enums.c b/app/core/core-enums.c
index 5f206a3..3dfbaac 100644
--- a/app/core/core-enums.c
+++ b/app/core/core-enums.c
@@ -1226,6 +1226,7 @@ gimp_dirty_mask_get_type (void)
{ GIMP_DIRTY_DRAWABLE, "GIMP_DIRTY_DRAWABLE", "drawable" },
{ GIMP_DIRTY_VECTORS, "GIMP_DIRTY_VECTORS", "vectors" },
{ GIMP_DIRTY_SELECTION, "GIMP_DIRTY_SELECTION", "selection" },
+ { GIMP_DIRTY_ACTIVE_DRAWABLE, "GIMP_DIRTY_ACTIVE_DRAWABLE", "active-drawable" },
{ GIMP_DIRTY_ALL, "GIMP_DIRTY_ALL", "all" },
{ 0, NULL, NULL }
};
@@ -1242,6 +1243,7 @@ gimp_dirty_mask_get_type (void)
{ GIMP_DIRTY_DRAWABLE, "GIMP_DIRTY_DRAWABLE", NULL },
{ GIMP_DIRTY_VECTORS, "GIMP_DIRTY_VECTORS", NULL },
{ GIMP_DIRTY_SELECTION, "GIMP_DIRTY_SELECTION", NULL },
+ { GIMP_DIRTY_ACTIVE_DRAWABLE, "GIMP_DIRTY_ACTIVE_DRAWABLE", NULL },
{ GIMP_DIRTY_ALL, "GIMP_DIRTY_ALL", NULL },
{ 0, NULL, NULL }
};
diff --git a/app/core/core-enums.h b/app/core/core-enums.h
index 00fcb9b..a7e6f6a 100644
--- a/app/core/core-enums.h
+++ b/app/core/core-enums.h
@@ -571,6 +571,7 @@ typedef enum /*< pdb-skip >*/
GIMP_DIRTY_DRAWABLE = 1 << 6,
GIMP_DIRTY_VECTORS = 1 << 7,
GIMP_DIRTY_SELECTION = 1 << 8,
+ GIMP_DIRTY_ACTIVE_DRAWABLE = 1 << 9,
GIMP_DIRTY_ALL = 0xffff
} GimpDirtyMask;
diff --git a/app/core/gimp-modules.c b/app/core/gimp-modules.c
index 0d4764b..215f23d 100644
--- a/app/core/gimp-modules.c
+++ b/app/core/gimp-modules.c
@@ -73,6 +73,9 @@ gimp_modules_load (Gimp *gimp)
if (gimp->no_interface)
return;
+ /* FIXME, gimp->be_verbose is not yet initialized in init() */
+ gimp->module_db->verbose = gimp->be_verbose;
+
filename = gimp_personal_rc_file ("modulerc");
if (gimp->be_verbose)
diff --git a/app/core/gimpcurve-map.c b/app/core/gimpcurve-map.c
index 81a1c9d..b7cfce3 100644
--- a/app/core/gimpcurve-map.c
+++ b/app/core/gimpcurve-map.c
@@ -29,6 +29,17 @@
#include "gimpcurve-map.h"
+#if defined (HAVE_FINITE)
+#define FINITE(x) finite(x)
+#elif defined (HAVE_ISFINITE)
+#define FINITE(x) isfinite(x)
+#elif defined (G_OS_WIN32)
+#define FINITE(x) _finite(x)
+#else
+#error "no FINITE() implementation available?!"
+#endif
+
+
enum
{
CURVE_NONE = 0,
@@ -204,18 +215,17 @@ gimp_curve_map_value_inline (GimpCurve *curve,
{
if (curve->identity)
{
- return value;
- }
+ if (FINITE (value))
+ return CLAMP (value, 0.0, 1.0);
- if (value < 0.0)
- {
- return curve->samples[0];
- }
- else if (value >= 1.0)
- {
- return curve->samples[curve->n_samples - 1];
+ return 0.0;
}
- else /* interpolate the curve */
+
+ /* check for known values first, so broken values like NaN
+ * delivered by broken drivers don't run into the interpolation
+ * code
+ */
+ if (value > 0.0 && value < 1.0) /* interpolate the curve */
{
gdouble f;
gint index;
@@ -231,4 +241,12 @@ gimp_curve_map_value_inline (GimpCurve *curve,
return (1.0 - f) * curve->samples[index] + f * curve->samples[index + 1];
}
+ else if (value >= 1.0)
+ {
+ return curve->samples[curve->n_samples - 1];
+ }
+ else
+ {
+ return curve->samples[0];
+ }
}
diff --git a/app/core/gimpimage-resize.c b/app/core/gimpimage-resize.c
index 2ed9df7..3a3c231 100644
--- a/app/core/gimpimage-resize.c
+++ b/app/core/gimpimage-resize.c
@@ -39,6 +39,8 @@
#include "gimpprogress.h"
#include "gimpsamplepoint.h"
+#include "text/gimptextlayer.h"
+
#include "gimp-intl.h"
@@ -53,7 +55,7 @@ gimp_image_resize (GimpImage *image,
{
gimp_image_resize_with_layers (image, context,
new_width, new_height, offset_x, offset_y,
- GIMP_ITEM_SET_NONE,
+ GIMP_ITEM_SET_NONE, TRUE,
progress);
}
@@ -65,6 +67,7 @@ gimp_image_resize_with_layers (GimpImage *image,
gint offset_x,
gint offset_y,
GimpItemSet layer_set,
+ gboolean resize_text_layers,
GimpProgress *progress)
{
GList *list;
@@ -171,6 +174,9 @@ gimp_image_resize_with_layers (GimpImage *image,
if (gimp_viewable_get_children (GIMP_VIEWABLE (item)))
continue;
+ if (! resize_text_layers && gimp_item_is_text_layer (item))
+ continue;
+
gimp_item_get_offset (item, &old_offset_x, &old_offset_y);
gimp_item_resize (item, context,
diff --git a/app/core/gimpimage-resize.h b/app/core/gimpimage-resize.h
index 8912b86..7edd646 100644
--- a/app/core/gimpimage-resize.h
+++ b/app/core/gimpimage-resize.h
@@ -34,6 +34,7 @@ void gimp_image_resize_with_layers (GimpImage *image,
gint offset_x,
gint offset_y,
GimpItemSet layer_set,
+ gboolean resize_text_layers,
GimpProgress *progress);
void gimp_image_resize_to_layers (GimpImage *image,
diff --git a/app/dialogs/Makefile.am b/app/dialogs/Makefile.am
index c6ae168..c1715ac 100644
--- a/app/dialogs/Makefile.am
+++ b/app/dialogs/Makefile.am
@@ -82,6 +82,8 @@ libappdialogs_a_sources = \
tips-dialog.h \
tips-parser.c \
tips-parser.h \
+ tito-dialog.c \
+ tito-dialog.h \
user-install-dialog.c \
user-install-dialog.h \
vectors-export-dialog.c \
diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c
index ff16c5f..f29a502 100644
--- a/app/dialogs/dialogs-constructors.c
+++ b/app/dialogs/dialogs-constructors.c
@@ -78,7 +78,7 @@
#include "preferences-dialog.h"
#include "quit-dialog.h"
#include "tips-dialog.h"
-
+#include "tito-dialog.h"
#include "gimp-intl.h"
@@ -195,6 +195,15 @@ dialogs_about_get (GimpDialogFactory *factory,
}
GtkWidget *
+dialogs_tito_get (GimpDialogFactory *factory,
+ GimpContext *context,
+ GimpUIManager *ui_manager,
+ gint view_size)
+{
+ return tito_dialog_create ();
+}
+
+GtkWidget *
dialogs_error_get (GimpDialogFactory *factory,
GimpContext *context,
GimpUIManager *ui_manager,
diff --git a/app/dialogs/dialogs-constructors.h b/app/dialogs/dialogs-constructors.h
index f868728..aa81b44 100644
--- a/app/dialogs/dialogs-constructors.h
+++ b/app/dialogs/dialogs-constructors.h
@@ -69,6 +69,10 @@ GtkWidget * dialogs_about_get (GimpDialogFactory *factory,
GimpContext *context,
GimpUIManager *ui_manager,
gint view_size);
+GtkWidget * dialogs_tito_get (GimpDialogFactory *factory,
+ GimpContext *context,
+ GimpUIManager *ui_manager,
+ gint view_size);
GtkWidget * dialogs_error_get (GimpDialogFactory *factory,
GimpContext *context,
GimpUIManager *ui_manager,
diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c
index d570b24..2249b80 100644
--- a/app/dialogs/dialogs.c
+++ b/app/dialogs/dialogs.c
@@ -277,6 +277,8 @@ static const GimpDialogFactoryEntry entries[] =
dialogs_tips_get, TRUE, FALSE, FALSE),
TOPLEVEL ("gimp-about-dialog",
dialogs_about_get, TRUE, FALSE, FALSE),
+ TOPLEVEL ("gimp-tito-dialog",
+ dialogs_tito_get, TRUE, FALSE, FALSE),
TOPLEVEL ("gimp-error-dialog",
dialogs_error_get, TRUE, FALSE, FALSE),
TOPLEVEL ("gimp-close-all-dialog",
diff --git a/app/dialogs/resize-dialog.c b/app/dialogs/resize-dialog.c
index 6e92a73..b11b4de 100644
--- a/app/dialogs/resize-dialog.c
+++ b/app/dialogs/resize-dialog.c
@@ -53,6 +53,7 @@ typedef struct
GtkWidget *offset;
GtkWidget *area;
GimpItemSet layer_set;
+ gboolean resize_text_layers;
GimpResizeCallback callback;
gpointer user_data;
} ResizeDialog;
@@ -158,13 +159,14 @@ resize_dialog_new (GimpViewable *viewable,
g_object_weak_ref (G_OBJECT (dialog),
(GWeakNotify) resize_dialog_free, private);
- private->viewable = viewable;
- private->old_width = width;
- private->old_height = height;
- private->old_unit = unit;
- private->layer_set = GIMP_ITEM_SET_NONE;
- private->callback = callback;
- private->user_data = user_data;
+ private->viewable = viewable;
+ private->old_width = width;
+ private->old_height = height;
+ private->old_unit = unit;
+ private->layer_set = GIMP_ITEM_SET_NONE;
+ private->resize_text_layers = FALSE;
+ private->callback = callback;
+ private->user_data = user_data;
gimp_image_get_resolution (image, &xres, &yres);
@@ -288,8 +290,12 @@ resize_dialog_new (GimpViewable *viewable,
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_container_add (GTK_CONTAINER (frame), hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
label = gtk_label_new_with_mnemonic (_("Resize _layers:"));
@@ -306,6 +312,16 @@ resize_dialog_new (GimpViewable *viewable,
private->layer_set,
G_CALLBACK (gimp_int_combo_box_get_active),
&private->layer_set);
+
+ button = gtk_check_button_new_with_mnemonic (_("Resize _text layers"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
+ private->resize_text_layers);
+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+ gtk_widget_show (button);
+
+ g_signal_connect (button, "toggled",
+ G_CALLBACK (gimp_toggle_button_update),
+ &private->resize_text_layers);
}
return dialog;
@@ -342,6 +358,7 @@ resize_dialog_response (GtkWidget *dialog,
gimp_size_entry_get_refval (entry, 0),
gimp_size_entry_get_refval (entry, 1),
private->layer_set,
+ private->resize_text_layers,
private->user_data);
break;
diff --git a/app/dialogs/resize-dialog.h b/app/dialogs/resize-dialog.h
index 2f15576..be44564 100644
--- a/app/dialogs/resize-dialog.h
+++ b/app/dialogs/resize-dialog.h
@@ -27,6 +27,7 @@ typedef void (* GimpResizeCallback) (GtkWidget *dialog,
gint offset_x,
gint offset_y,
GimpItemSet layer_set,
+ gboolean resize_text_layers,
gpointer user_data);
diff --git a/app/dialogs/tito-dialog.c b/app/dialogs/tito-dialog.c
new file mode 100644
index 0000000..b1329bf
--- /dev/null
+++ b/app/dialogs/tito-dialog.c
@@ -0,0 +1,1139 @@
+ /* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 2012 Srihari Sriraman, Suhas V, Vidyashree K, Zeeshan Ali Ansari
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include "libgimpbase/gimpbase.h"
+#include "dialogs-types.h"
+#include "widgets/gimpuimanager.h"
+#include "widgets/gimpaction.h"
+#include "tito-dialog.h"
+#include "gimp-intl.h"
+
+#define MAX_HISTORY_ACTIONS 20
+
+gboolean tito_run_result_action (void);
+static GtkWidget* tito_setup_results_list (void);
+static gboolean tito_search_dialog (void);
+static gboolean tito_is_action_match (GtkAction *action,
+ const gchar* keyword);
+static void tito_add_to_results_list (const gchar *label,
+ const gchar *tooltip,
+ GtkAction* action);
+static void tito_search_history_and_actions (const gchar *keyword);
+
+static void tito_update_history (GtkAction *action);
+static void tito_read_history (void);
+static void tito_fill_history (void);
+static void tito_clear_history (void);
+
+static void tito_preferences_dialog (void);
+static void tito_set_default_preferences (void);
+static void tito_update_preferences (void);
+static void tito_write_preferences (void);
+static void tito_read_preferences (void);
+static void tito_set_prefereces_ui_values (void);
+
+gboolean tito_initializer (void);
+void tito_finalizer (void);
+static void tito_context_menu (void);
+
+static GtkWidget *tito_dialog;
+static GtkWidget *list;
+static GtkWidget *list_view;
+static GtkWidget *keyword_entry;
+static GtkWidget *preferences_button;
+
+GimpUIManager *manager;
+static gchar *history_file_path;
+static gchar *preference_file_path;
+static gint cur_no_of_his_actions;
+static gint default_height = 1;
+static gboolean first_time = TRUE;
+static gint tmp_x, tmp_y;
+static gint par_x, par_y;
+static gint par_height, par_width;
+static GtkCellRenderer *cell_renderer;
+
+
+enum RES_COL {
+ RESULT_ICON,
+ RESULT_DATA,
+ RESULT_ACTION,
+ IS_SENSITIVE,
+ N_COL
+};
+
+static struct HISTORY {
+ GtkAction *history_action;
+ int count;
+}history[MAX_HISTORY_ACTIONS];
+
+static struct HISTORY_ACTION_NAME{
+ char *action_name;
+ int no;
+}name[MAX_HISTORY_ACTIONS];
+
+static struct PREFERENCES {
+ int POSITION;
+ float POSITION_X;
+ float POSITION_Y;
+ int NO_OF_RESULTS;
+ float WIDTH;
+ gboolean AUTO_HIDE;
+ gboolean SHOW_INSENSITIVE;
+ gdouble OPACITY;
+}PREF;
+
+static struct TITO_PREF_UI{
+ GtkWidget *specify_radio;
+ GtkWidget *pos_x_hbox;
+ GtkWidget *pos_y_hbox;
+ GtkWidget *right_top_radio;
+ GtkWidget *middle_radio;
+ GtkWidget *pos_x_spin_button;
+ GtkWidget *pos_y_spin_button;
+ GtkWidget *no_of_results_spin_button;
+ GtkWidget *width_spin_button;
+ GtkWidget *opacity_spin_button;
+ GtkWidget *autohide_check_button;
+ GtkWidget *show_insensitive_check_button;
+}PREF_UI;
+
+GtkWidget *
+tito_dialog_create (void)
+{
+ if(!tito_initializer())
+ g_message("Tito tito_initializer failed");
+ tito_search_dialog();
+ return tito_dialog;
+}
+
+static void
+modify_position_spins (void)
+{
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PREF_UI.specify_radio)))
+ {
+ gtk_widget_set_sensitive(PREF_UI.pos_x_hbox, TRUE);
+ gtk_widget_set_sensitive(PREF_UI.pos_y_hbox, TRUE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive(PREF_UI.pos_x_hbox, FALSE);
+ gtk_widget_set_sensitive(PREF_UI.pos_y_hbox, FALSE);
+ }
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(PREF_UI.pos_x_spin_button),
+ (gdouble)(PREF.POSITION_X/par_width*100));
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(PREF_UI.pos_y_spin_button),
+ (gdouble)(PREF.POSITION_Y/par_height*100));
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(PREF_UI.pos_x_spin_button),
+ (gdouble)0,
+ (gdouble)( 100-gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.width_spin_button))));
+}
+
+static void
+tito_clear_history_button_clicked ( GtkButton *button,
+ gpointer user_data)
+{
+ tito_clear_history();
+}
+
+static void
+restore_defaults_button_clicked ( GtkButton *button,
+ gpointer user_data)
+{
+ tito_set_default_preferences();
+ tito_set_prefereces_ui_values();
+}
+
+static void
+tito_set_prefereces_ui_values (void)
+{
+ if( PREF.POSITION == 0)
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(PREF_UI.right_top_radio), TRUE);
+ else if( PREF.POSITION == 1)
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(PREF_UI.middle_radio), TRUE);
+ else
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(PREF_UI.specify_radio), TRUE);
+
+ modify_position_spins();
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(PREF_UI.no_of_results_spin_button), (gdouble)PREF.NO_OF_RESULTS);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(PREF_UI.width_spin_button), (gdouble)PREF.WIDTH);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(PREF_UI.opacity_spin_button), (gdouble)PREF.OPACITY*100);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(PREF_UI.autohide_check_button), PREF.AUTO_HIDE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(PREF_UI.show_insensitive_check_button), PREF.SHOW_INSENSITIVE);
+
+}
+
+static gboolean
+on_focus_out (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer data)
+{
+ if(!gtk_widget_is_focus(preferences_button))
+ tito_finalizer();
+ return TRUE;
+}
+
+
+static void
+key_released( GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer func_data)
+{
+ const gchar *entry_text;
+ entry_text = gtk_editable_get_chars(GTK_EDITABLE(widget),0,-1);
+
+ switch (event->keyval)
+ {
+ case GDK_Escape:
+ {
+ tito_finalizer();
+ return;
+ }
+ case GDK_Return:
+ {
+ tito_run_result_action();
+ return;
+ }
+ }
+
+ if(strcmp(entry_text,"")!=0)
+ {
+ gtk_window_resize(GTK_WINDOW(tito_dialog),(PREF.WIDTH * par_width)/100,
+ (PREF.NO_OF_RESULTS*40+100));
+ gtk_list_store_clear (GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list))));
+ gtk_widget_show_all(list_view);
+ tito_search_history_and_actions(entry_text);
+ gtk_tree_selection_select_path ( gtk_tree_view_get_selection(GTK_TREE_VIEW(list)),
+ gtk_tree_path_new_from_string("0"));
+ }
+ else if(strcmp(entry_text,"")==0 && (event->keyval == GDK_Down) )
+ {
+ gtk_window_resize(GTK_WINDOW(tito_dialog),(PREF.WIDTH * par_width)/100,
+ (PREF.NO_OF_RESULTS*40+100));
+ gtk_list_store_clear (GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list))));
+ gtk_widget_show_all(list_view);
+ tito_search_history_and_actions(" ");
+ gtk_tree_selection_select_path ( gtk_tree_view_get_selection(GTK_TREE_VIEW(list)),
+ gtk_tree_path_new_from_string("0"));
+
+ }
+ else
+ {
+ gtk_widget_hide(list_view);
+ gtk_window_resize (GTK_WINDOW(tito_dialog),(PREF.WIDTH * par_width)/100,default_height);
+ }
+}
+
+static gboolean
+result_selected ( GtkWidget * widget,
+ GdkEventKey* pKey,
+ gpointer func_data)
+{
+ if (pKey->type == GDK_KEY_PRESS)
+ {
+ switch (pKey->keyval)
+ {
+ case GDK_Return:
+ {
+ tito_run_result_action();
+ break;
+ }
+ case GDK_Escape:
+ {
+ tito_finalizer();
+ return TRUE;
+ }
+ case GDK_Up:
+ {
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ {
+ path = gtk_tree_model_get_path(model,&iter);
+ if(strcmp(gtk_tree_path_to_string(path),"0")==0)
+ {
+ gtk_widget_grab_focus((GTK_WIDGET(keyword_entry)));
+ return TRUE;
+ }
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+
+static void
+row_activated ( GtkTreeView *treeview,
+ GtkTreePath *path,
+ GtkTreeViewColumn *col,
+ gpointer userdata)
+{
+ tito_run_result_action();
+}
+
+static gboolean
+tito_action_view_accel_find_func ( GtkAccelKey *key,
+ GClosure *closure,
+ gpointer data)
+{
+ return (GClosure *) data == closure;
+}
+
+static gchar*
+find_accel_label (GtkAction *action)
+{
+ guint accel_key = 0;
+ GdkModifierType accel_mask = 0;
+ GClosure *accel_closure = NULL;
+ gchar *accel_string;
+ GtkAccelGroup *accel_group;
+
+ accel_group = gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (manager));
+ accel_closure = gtk_action_get_accel_closure (action);
+
+ if(accel_closure)
+ {
+ GtkAccelKey *key;
+ key = gtk_accel_group_find (accel_group,
+ tito_action_view_accel_find_func,
+ accel_closure);
+ if (key &&
+ key->accel_key &&
+ key->accel_flags & GTK_ACCEL_VISIBLE)
+ {
+ accel_key = key->accel_key;
+ accel_mask = key->accel_mods;
+ }
+ }
+ accel_string = gtk_accelerator_get_label (accel_key, accel_mask);
+ if(strcmp(accel_string,""))
+ return accel_string;
+
+ return NULL;
+}
+
+
+static void
+tito_add_to_results_list( const gchar *label,
+ const gchar *tooltip,
+ GtkAction* action)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ gchar *markuptxt;
+ gchar *accel_string = find_accel_label (action);
+ const gchar *stock_id = gtk_action_get_stock_id (action);
+ char *data = g_new(char,1024);
+ char shortcut[1024] = "";
+
+ if(data==NULL)
+ return;
+ if(strchr(label, '@')!=NULL||strchr(label, '&')!=NULL)
+ return;
+
+ if(GTK_IS_TOGGLE_ACTION(action))
+ {
+ if(gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)))
+ stock_id = GTK_STOCK_OK;
+ else
+ stock_id = GTK_STOCK_NO;
+ }
+
+ if(accel_string==NULL)
+ strcpy(shortcut,"");
+ else if(strchr(accel_string,'<')!=NULL)
+ strcpy(shortcut,"");
+ else
+ {
+ strcpy(shortcut," | ");
+ strcat(shortcut,accel_string);
+ }
+
+ if(tooltip==NULL)
+ strcpy(data,"");
+ else if(strchr(tooltip, '<')!=NULL)
+ strcpy(data,"");
+ else
+ {
+ strcpy(data,"\n");
+ strcat(data,tooltip);
+ }
+
+ markuptxt = g_strdup_printf("%s<small>%s<span weight='light'>%s</span></small>",
+ label, shortcut, data);
+ store= GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ RESULT_ICON, stock_id,
+ RESULT_DATA, markuptxt,
+ RESULT_ACTION, action,
+ IS_SENSITIVE, gtk_action_get_sensitive(action),
+ -1);
+ g_free(data);
+}
+
+gboolean
+tito_run_result_action (void)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ {
+ GtkAction *action;
+ gtk_tree_model_get (model, &iter, RESULT_ACTION, &action, -1);
+ if(!gtk_action_get_sensitive(action))
+ return FALSE;
+
+ if(PREF.AUTO_HIDE)
+ gtk_widget_hide(tito_dialog);
+ gtk_action_activate(action);
+ tito_finalizer();
+ tito_update_history(action);
+ }
+ return TRUE;
+}
+
+
+void
+tito_search_history_and_actions (const gchar *keyword)
+{
+ GList *list;
+ int i = 0;
+ manager= gimp_ui_managers_from_name ("<Image>")->data;
+ if(strcmp(keyword,"")==0)
+ return;
+
+ //search in history
+ for(i=0;i<cur_no_of_his_actions;i++)
+ {
+ if(history[i].history_action!=NULL)
+ {
+ if(tito_is_action_match(history[i].history_action,keyword))
+ tito_add_to_results_list( gimp_strip_uline (gtk_action_get_label (history[i].history_action)),
+ gtk_action_get_tooltip (history[i].history_action),
+ history[i].history_action );
+ }
+ }
+
+ //for every action group
+ for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
+ list;
+ list = g_list_next (list))
+ {
+ GimpActionGroup *group = list->data;
+ GList *actions;
+ GList *list2;
+
+
+ //get and sort actions
+ actions = gtk_action_group_list_actions (GTK_ACTION_GROUP (group));
+ actions = g_list_sort (actions, (GCompareFunc) gimp_action_name_compare);
+
+ //for every action
+ for (list2 = actions; list2; list2 = g_list_next (list2))
+ {
+ GtkAction *action = list2->data;
+ const gchar *name;
+ gboolean is_redundant = FALSE;
+ name = gtk_action_get_name (action);
+
+
+ //exclude menus, popups, context and undo
+ if (strstr (name, "-menu") ||
+ strstr (name, "-popup") ||
+ strstr (name,"context") ||
+ strstr (name,"edit-undo") ||
+ name[0] == '<')
+ continue;
+
+ if( !gtk_action_get_sensitive(action) && !(PREF.SHOW_INSENSITIVE) )
+ continue;
+
+ for(i=0;i<cur_no_of_his_actions;i++)
+ {
+ if(history[i].history_action!=NULL)
+ {
+ if(strcmp(gtk_action_get_name(history[i].history_action),name)==0)
+ {
+ is_redundant = TRUE;
+ break;
+ }
+ }
+ }
+
+ if(is_redundant)
+ continue;
+
+ if(tito_is_action_match(action,keyword))
+ {
+ tito_add_to_results_list( gimp_strip_uline (gtk_action_get_label (action)),
+ gtk_action_get_tooltip (action),
+ action);
+ }
+ }
+ g_list_free (actions);
+ }
+}
+
+static void tito_fill_history (void)
+{
+ GList *list;
+ int i = 0;
+ manager= gimp_ui_managers_from_name ("<Image>")->data;
+
+ for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
+ list;
+ list = g_list_next (list))
+ {
+ GimpActionGroup *group = list->data;
+ GList *actions;
+ GList *list2;
+
+ //get and sort actions
+ actions = gtk_action_group_list_actions (GTK_ACTION_GROUP (group));
+ actions = g_list_sort (actions, (GCompareFunc) gimp_action_name_compare);
+
+ //for every action
+ for (list2 = actions; list2; list2 = g_list_next (list2))
+ {
+ GtkAction *action = list2->data;
+ const gchar *action_name;
+ action_name = gtk_action_get_name (action);
+
+ //exclude menus and popups
+ if ( strstr (action_name, "-menu") ||
+ strstr (action_name, "-popup") ||
+ strstr (action_name, "context") ||
+ action_name[0] == '<')
+ continue;
+
+ for(i=0;i<cur_no_of_his_actions;i++)
+ {
+ if(name[i].action_name!=NULL)
+ {
+ if(strcmp(name[i].action_name,action_name)==0)
+ {
+ history[i].history_action=action;
+ history[i].count=name[i].no;
+ }
+ }
+ }
+ }
+ }
+}
+
+static gboolean
+fuzzy_search ( gchar *string,
+ gchar *key)
+{
+ gchar *remaining_string = string;
+ if ( strlen(key) == 0 )
+ return TRUE;
+
+ if ( (remaining_string = strchr(string, key[0])) != NULL )
+ return fuzzy_search( remaining_string+1, key+1 );
+ else
+ return FALSE;
+}
+
+static gboolean
+tito_is_action_match ( GtkAction *action,
+ const gchar* keyword)
+{
+ gchar *label, *tooltip, *key;
+ int i;
+ gchar* space_pos;
+ label = g_new(gchar,1024);
+ key = g_new(gchar,1024);
+ tooltip = g_new(gchar,1024);
+
+ strcpy(label, gimp_strip_uline (gtk_action_get_label (action)));
+ strcpy(key,keyword);
+
+ for(i=0;i<strlen(label);i++)
+ label[i]=tolower(label[i]);
+ for(i=0;i<strlen(key);i++)
+ key[i]=tolower(key[i]);
+ if(strlen(key)==2)
+ {
+ space_pos=strchr(label,' ');
+ if(space_pos!=NULL)
+ {
+ space_pos++;
+ if(key[0]==label[0] && key[1]==*space_pos)
+ return TRUE;
+ }
+ }
+
+ if(strstr(label,key))
+ return TRUE;
+
+ if(fuzzy_search(label,key))
+ return TRUE;
+
+ if(strlen(key)>2 || strcmp(key," ")==0)
+ {
+ if(gtk_action_get_tooltip(action)!=NULL)
+ {
+ strcpy(tooltip,gtk_action_get_tooltip (action));
+ for(i=0;i<strlen(tooltip);i++)
+ tooltip[i]=tolower(tooltip[i]);
+
+ if(strstr(tooltip,key))
+ return TRUE;
+ }
+ }
+
+ g_free(label);
+ g_free(key);
+ g_free(tooltip);
+
+ return FALSE;
+}
+
+static void
+tito_read_history (void)
+{
+ int i;
+ FILE *fp;
+ cur_no_of_his_actions=0;
+
+ fp= fopen(history_file_path,"r");
+ if(fp==NULL)
+ return;
+
+ for(i=0;i<MAX_HISTORY_ACTIONS;i++)
+ {
+ if(fscanf(fp,"%s %d",name[i].action_name,&name[i].no) == EOF)
+ break;
+ cur_no_of_his_actions++;
+ }
+ fclose(fp);
+ tito_fill_history();
+}
+
+static int
+compare ( const void * a,
+ const void * b)
+{
+ struct HISTORY *p = (struct HISTORY *)a;
+ struct HISTORY *q = (struct HISTORY *)b;
+ return (q->count - p->count);
+}
+
+static void
+tito_update_history (GtkAction *action)
+{
+ int i;
+ FILE *fp;
+ gboolean is_present=FALSE;
+
+ fp= fopen(history_file_path,"w");
+ if(fp==NULL)
+ {
+ g_message("Unable to open history file to write");
+ return;
+ }
+
+ //check if already in history var
+ for(i=0;i<cur_no_of_his_actions;i++)
+ {
+ if(strcmp(gtk_action_get_name(action),gtk_action_get_name(history[i].history_action))==0)
+ {
+ history[i].count++;
+ is_present=TRUE;
+ break;
+ }
+ }
+
+ //assign action to history var
+ if(!is_present)
+ {
+ if(cur_no_of_his_actions==MAX_HISTORY_ACTIONS)
+ {
+ history[MAX_HISTORY_ACTIONS-1].history_action = action;
+ history[MAX_HISTORY_ACTIONS-1].count=1;
+ }
+ else
+ {
+ history[cur_no_of_his_actions].history_action = action;
+ history[cur_no_of_his_actions++].count=1;
+ }
+ }
+
+ //sort history according to count
+ qsort (history, cur_no_of_his_actions, sizeof(struct HISTORY), compare);
+
+ //write history vars to file
+ for(i=0;i<cur_no_of_his_actions;i++)
+ {
+ if(history[i].history_action != NULL)
+ fprintf(fp,"%s %d \n",gtk_action_get_name(history[i].history_action),
+ history[i].count);
+ }
+
+ fclose(fp);
+}
+
+static void
+tito_update_position (void)
+{
+ if(PREF.POSITION == 0)
+ {
+ PREF.POSITION_X = (1-PREF.WIDTH/100)*par_width+par_x;
+ PREF.POSITION_Y = 0.04*par_height+par_y;
+ }
+ else if(PREF.POSITION == 1)
+ {
+ PREF.POSITION_X = (par_width- PREF.WIDTH*par_width*.01)/2 + par_x;
+ PREF.POSITION_Y = 0.2*par_height + par_y;
+ }
+ else
+ {
+ PREF.POSITION_X = tmp_x*par_width/100 + par_x;
+ PREF.POSITION_Y = tmp_y*par_height/100 + par_y;
+ }
+ gtk_window_move (GTK_WINDOW(tito_dialog),PREF.POSITION_X,PREF.POSITION_Y);
+}
+
+void
+tito_finalizer(void)
+{
+ if(!PREF.AUTO_HIDE)
+ {
+ gtk_widget_hide(list_view);
+ gtk_window_resize (GTK_WINDOW(tito_dialog),PREF.WIDTH*par_width/100,default_height);
+ gtk_entry_set_text(GTK_ENTRY(keyword_entry),"");
+ gtk_widget_grab_focus(keyword_entry);
+ }
+ else
+ gtk_widget_destroy(tito_dialog);
+}
+
+static void
+initialize_storage (void)
+{
+ gchar *dir_filename = g_build_filename (gimp_directory (), "tito", NULL);
+
+ g_mkdir (dir_filename,
+ S_IRUSR | S_IWUSR | S_IXUSR |
+ S_IRGRP | S_IXGRP |
+ S_IROTH | S_IXOTH);
+
+ history_file_path= g_new(gchar, 1024);
+ strcpy(history_file_path, dir_filename);
+
+ preference_file_path= g_new(gchar,1024);
+ strcpy(preference_file_path, dir_filename);
+
+ strcat(history_file_path,"/history");
+ strcat(preference_file_path,"/preferences");
+
+ g_free (dir_filename);
+}
+
+gboolean
+tito_initializer(void)
+{
+ int i=0;
+ GdkWindow *par_window = gdk_screen_get_active_window(gdk_screen_get_default());
+ gdk_window_get_geometry (par_window, &par_x, &par_y, &par_width, &par_height, NULL);
+
+ if(first_time)
+ {
+ initialize_storage();
+
+ for(i=0;i<MAX_HISTORY_ACTIONS;i++)
+ {
+ name[i].action_name = g_new(char, 100);
+ strcpy(name[i].action_name,"");
+ name[i].no=0;
+ }
+ first_time=FALSE;
+ }
+ tito_read_preferences();
+ tito_read_history();
+ gtk_accel_map_change_entry ("<Actions>/dialogs/dialogs-tito",'?',GDK_SHIFT_MASK,FALSE);
+ return TRUE;
+}
+
+static void
+tito_clear_history (void)
+{
+ FILE *fp;
+ fp = fopen(history_file_path,"w");
+ if(fp == NULL)
+ {
+ g_message("file not created");
+ return;
+ }
+ fclose(fp);
+}
+
+static void
+tito_set_default_preferences (void)
+{
+ PREF.POSITION = 0;
+ PREF.WIDTH = 40;
+ PREF.POSITION_X = (1-0.4)*par_width+par_x;
+ PREF.POSITION_Y = 0.04*par_height+par_y;
+ PREF.NO_OF_RESULTS = 4;
+ PREF.AUTO_HIDE = TRUE;
+ PREF.SHOW_INSENSITIVE = TRUE;
+ PREF.OPACITY = 1;
+ tito_write_preferences();
+}
+
+static void
+tito_update_preferences (void)
+{
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PREF_UI.right_top_radio)))
+ PREF.POSITION = 0;
+ else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PREF_UI.middle_radio)))
+ PREF.POSITION = 1;
+ else
+ {
+ PREF.POSITION = 2;
+ tmp_x = (gfloat) gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.pos_x_spin_button));
+ tmp_y = (gfloat) gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.pos_y_spin_button));
+ }
+
+ PREF.NO_OF_RESULTS = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.no_of_results_spin_button));
+ PREF.WIDTH = (gfloat)gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.width_spin_button));
+ PREF.OPACITY = (gdouble)gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(PREF_UI.opacity_spin_button))/100;
+ PREF.AUTO_HIDE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PREF_UI.autohide_check_button));
+ PREF.SHOW_INSENSITIVE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PREF_UI.show_insensitive_check_button));
+
+ tito_update_position();
+ tito_write_preferences();
+ tito_finalizer();
+}
+
+static void
+tito_write_preferences (void)
+{
+ FILE *fp;
+ fp=fopen(preference_file_path,"w");
+ if(fp == NULL)
+ return;
+ fprintf(fp,"%d %f %f %d %f %d %d %lf", PREF.POSITION,PREF.POSITION_X, PREF.POSITION_Y,
+ PREF.NO_OF_RESULTS, PREF.WIDTH, PREF.AUTO_HIDE,PREF.SHOW_INSENSITIVE,PREF.OPACITY);
+ fclose(fp);
+}
+
+static void
+tito_read_preferences (void)
+{
+ FILE *fp;
+ fp=fopen(preference_file_path,"r");
+ if(fp == NULL)
+ {
+ tito_set_default_preferences();
+ return;
+ }
+ if(fscanf(fp,"%d %f %f %d %f %d %d %lf", &PREF.POSITION, &PREF.POSITION_X, &PREF.POSITION_Y,
+ &PREF.NO_OF_RESULTS, &PREF.WIDTH, &PREF.AUTO_HIDE, &PREF.SHOW_INSENSITIVE, &PREF.OPACITY) == 0)
+ tito_set_default_preferences();
+ fclose(fp);
+}
+
+static gboolean
+context_menu_invoked ( GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ tito_context_menu();
+ return TRUE;
+}
+
+static void
+context_menu_handler( GtkMenuItem* menuitem,
+ gpointer *data)
+{
+ if(strchr(gtk_menu_item_get_label(menuitem),'r')!=NULL)
+ tito_preferences_dialog();
+ else
+ gtk_widget_destroy(tito_dialog);
+}
+
+static void
+tito_context_menu (void)
+{
+ GtkWidget *preferences_menuitem;
+ GtkWidget *close_menuitem;
+ GtkWidget *context_menu;
+
+ context_menu = gtk_menu_new();
+ preferences_menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES,NULL);
+ close_menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE,NULL);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL(context_menu), preferences_menuitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL(context_menu), close_menuitem);
+
+ gtk_widget_show(context_menu);
+ gtk_widget_show(preferences_menuitem);
+ gtk_widget_show(close_menuitem);
+
+ g_signal_connect (preferences_menuitem, "activate", G_CALLBACK (context_menu_handler), NULL);
+ g_signal_connect (close_menuitem, "activate", G_CALLBACK (context_menu_handler), NULL);
+
+ gtk_menu_popup( GTK_MENU(context_menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
+}
+
+static void
+tito_preferences_dialog (void)
+{
+ GtkWidget *pref_dialog;
+ GtkWidget *top_hbox;
+
+ GtkWidget *position_frame;
+ GtkWidget *position_vbox;
+ GtkWidget *pos_x_label;
+ GtkWidget *pos_y_label;
+ GtkWidget *specify_alignment_x;
+ GtkWidget *specify_alignment_y;
+
+ GtkWidget *display_frame;
+ GtkWidget *display_vbox;
+ GtkWidget *no_of_results_hbox;
+ GtkWidget *width_hbox;
+ GtkWidget *opacity_hbox;
+ GtkWidget *no_of_results_label;
+ GtkWidget *width_label;
+ GtkWidget *opacity_label;
+
+ GtkWidget *bottom_hbox;
+ GtkWidget *tito_clear_history_button;
+ GtkWidget *restore_defaults_button;
+
+ pref_dialog = gtk_dialog_new_with_buttons ( "Tito preferences",
+ NULL,
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ NULL);
+
+ gtk_window_set_position (GTK_WINDOW(pref_dialog), GTK_WIN_POS_CENTER_ALWAYS);
+ top_hbox = gtk_hbox_new (FALSE,10);
+ gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(pref_dialog))), top_hbox, FALSE, FALSE, 2);
+
+ //Position preferences
+ position_frame = gtk_frame_new("Postion");
+ position_vbox = gtk_vbox_new(TRUE,2);
+
+ gtk_frame_set_shadow_type (GTK_FRAME(position_frame), GTK_SHADOW_ETCHED_IN);
+
+ PREF_UI.right_top_radio = gtk_radio_button_new_with_label(NULL,"Right-Top");
+ PREF_UI.middle_radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (PREF_UI.right_top_radio), "Middle");
+ PREF_UI.specify_radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (PREF_UI.right_top_radio), "Specify");
+ PREF_UI.pos_x_hbox = gtk_hbox_new(FALSE, 1);
+ PREF_UI.pos_y_hbox = gtk_hbox_new(FALSE, 1);
+ specify_alignment_x = gtk_alignment_new (1,0,0,0);
+ specify_alignment_y = gtk_alignment_new (1,0,0,0);
+ pos_x_label = gtk_label_new("x:");
+ pos_y_label = gtk_label_new("y:");
+ PREF_UI.pos_x_spin_button = gtk_spin_button_new_with_range (0, 100-PREF.WIDTH, 1);
+ PREF_UI.pos_y_spin_button = gtk_spin_button_new_with_range (0, 50, 1);
+
+ gtk_box_pack_start (GTK_BOX(top_hbox), position_frame, FALSE, FALSE, 2);
+ gtk_container_add (GTK_CONTAINER(position_frame), position_vbox);
+ gtk_box_pack_start (GTK_BOX (position_vbox), PREF_UI.right_top_radio, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (position_vbox), PREF_UI.middle_radio, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (position_vbox), PREF_UI.specify_radio, TRUE, TRUE, 2);
+
+ gtk_box_pack_start (GTK_BOX (position_vbox), specify_alignment_x, TRUE, TRUE, 1);
+ gtk_container_add (GTK_CONTAINER (specify_alignment_x), PREF_UI.pos_x_hbox);
+ gtk_box_pack_start (GTK_BOX (PREF_UI.pos_x_hbox),pos_x_label, TRUE, TRUE, 1);
+ gtk_box_pack_start (GTK_BOX (PREF_UI.pos_x_hbox),PREF_UI.pos_x_spin_button, TRUE, TRUE, 1);
+
+ gtk_box_pack_start (GTK_BOX (position_vbox), specify_alignment_y, TRUE, TRUE, 1);
+ gtk_container_add (GTK_CONTAINER (specify_alignment_y), PREF_UI.pos_y_hbox);
+ gtk_box_pack_start (GTK_BOX (PREF_UI.pos_y_hbox),pos_y_label, TRUE, TRUE, 1);
+ gtk_box_pack_start (GTK_BOX (PREF_UI.pos_y_hbox),PREF_UI.pos_y_spin_button, TRUE, TRUE, 1);
+
+ //Display preferences
+ display_frame = gtk_frame_new("Display");
+ display_vbox = gtk_vbox_new(TRUE,2);
+
+ gtk_frame_set_shadow_type (GTK_FRAME(display_frame), GTK_SHADOW_ETCHED_IN);
+
+ no_of_results_hbox = gtk_hbox_new(FALSE,2);
+ width_hbox = gtk_hbox_new(FALSE,2);
+ opacity_hbox = gtk_hbox_new(FALSE,2);
+ no_of_results_label = gtk_label_new("Results height:");
+ PREF_UI.no_of_results_spin_button = gtk_spin_button_new_with_range(2,10,1);
+ width_label = gtk_label_new("Tito Width:");
+ PREF_UI.width_spin_button = gtk_spin_button_new_with_range(20,60,1);
+ opacity_label = gtk_label_new("Tito Opacity:");
+ PREF_UI.opacity_spin_button = gtk_spin_button_new_with_range(40,100,10);
+ PREF_UI.autohide_check_button = gtk_check_button_new_with_label("Autohide");
+ PREF_UI.show_insensitive_check_button = gtk_check_button_new_with_label("Show inert actions");
+ tito_clear_history_button = gtk_button_new_with_label ("Clear history");
+ restore_defaults_button = gtk_button_new_with_label ("Restore defaults");
+
+ gtk_box_pack_start (GTK_BOX(top_hbox), display_frame, FALSE, FALSE, 2);
+ gtk_container_add (GTK_CONTAINER(display_frame), display_vbox);
+ gtk_box_pack_start (GTK_BOX (display_vbox), no_of_results_hbox, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (no_of_results_hbox), no_of_results_label, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (no_of_results_hbox), PREF_UI.no_of_results_spin_button, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (display_vbox), width_hbox, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (width_hbox), width_label, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (width_hbox), PREF_UI.width_spin_button, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (display_vbox), opacity_hbox, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (opacity_hbox), opacity_label, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (opacity_hbox), PREF_UI.opacity_spin_button, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (display_vbox), PREF_UI.autohide_check_button, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (display_vbox), PREF_UI.show_insensitive_check_button, TRUE, TRUE, 2);
+
+ //Clear and restore
+ bottom_hbox = gtk_hbox_new(TRUE,2);
+ gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(pref_dialog))), bottom_hbox, FALSE, FALSE, 2);
+ gtk_box_pack_start (GTK_BOX (bottom_hbox), tito_clear_history_button, TRUE, TRUE, 2);
+ gtk_box_pack_start (GTK_BOX (bottom_hbox), restore_defaults_button, TRUE, TRUE, 2);
+
+ tito_set_prefereces_ui_values();
+ gtk_widget_show_all (pref_dialog);
+
+ g_signal_connect (PREF_UI.right_top_radio, "toggled", G_CALLBACK (modify_position_spins), NULL);
+ g_signal_connect (PREF_UI.middle_radio, "toggled", G_CALLBACK (modify_position_spins), NULL);
+ g_signal_connect (PREF_UI.specify_radio, "toggled", G_CALLBACK (modify_position_spins), NULL);
+ g_signal_connect (tito_clear_history_button, "clicked", G_CALLBACK (tito_clear_history_button_clicked), NULL);
+ g_signal_connect (restore_defaults_button, "clicked", G_CALLBACK (restore_defaults_button_clicked), NULL);
+
+ if(gtk_dialog_run (GTK_DIALOG (pref_dialog)) == GTK_RESPONSE_ACCEPT)
+ tito_update_preferences();
+
+ gtk_widget_destroy (pref_dialog);
+}
+
+static GtkWidget*
+tito_setup_results_list(void)
+{
+ gint wid1=100;
+ GtkWidget *sc_win;
+ GtkListStore *store;
+ GtkCellRenderer *cell1;
+ GtkTreeViewColumn *column1, *column2;
+
+ sc_win= gtk_scrolled_window_new(NULL, NULL);
+ store=gtk_list_store_new(N_COL, G_TYPE_STRING, G_TYPE_STRING, GTK_TYPE_ACTION,G_TYPE_BOOLEAN);
+ list=gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(list),FALSE);
+
+ cell1 = gtk_cell_renderer_pixbuf_new ();
+ column1=gtk_tree_view_column_new_with_attributes(NULL,
+ cell1,
+ "stock_id", RESULT_ICON,
+ NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(list),column1);
+ gtk_tree_view_column_add_attribute(column1, cell1, "sensitive", IS_SENSITIVE);
+ gtk_tree_view_column_set_min_width(column1,22);
+
+ cell_renderer = gtk_cell_renderer_text_new();
+ column2=gtk_tree_view_column_new_with_attributes(NULL,
+ cell_renderer,
+ "markup", RESULT_DATA,
+ NULL);
+ gtk_tree_view_column_add_attribute(column2, cell_renderer, "sensitive", IS_SENSITIVE);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(list),column2);
+ gtk_tree_view_column_set_max_width(column2,wid1);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_container_add(GTK_CONTAINER(sc_win),list);
+ g_object_unref(G_OBJECT(store));
+ return sc_win;
+}
+
+static gboolean
+tito_search_dialog (void)
+{
+ GtkWidget *main_vbox, *main_hbox;
+ GtkWidget *preferences_image;
+
+ tito_dialog= gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+ gtk_window_set_decorated (GTK_WINDOW(tito_dialog),FALSE);
+ gtk_window_set_default_size (GTK_WINDOW(tito_dialog),(PREF.WIDTH/100)*par_width,default_height);
+ tito_update_position();
+ gtk_window_set_opacity (GTK_WINDOW(tito_dialog),PREF.OPACITY);
+ if(!PREF.AUTO_HIDE)
+ gtk_window_set_keep_above(GTK_WINDOW(tito_dialog),TRUE);
+
+ main_vbox = gtk_vbox_new (FALSE, 2);
+ gtk_container_add (GTK_CONTAINER (tito_dialog), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ main_hbox = gtk_hbox_new (FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(main_vbox),main_hbox,FALSE,TRUE,0);
+ gtk_widget_show (main_hbox);
+
+ keyword_entry = gtk_entry_new();
+ gtk_entry_set_has_frame(GTK_ENTRY(keyword_entry),FALSE);
+ gtk_entry_set_icon_from_stock(GTK_ENTRY(keyword_entry),GTK_ENTRY_ICON_PRIMARY,GTK_STOCK_FIND);
+ gtk_widget_show (keyword_entry);
+ gtk_box_pack_start(GTK_BOX(main_hbox),keyword_entry,TRUE,TRUE,0);
+
+ preferences_image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
+ preferences_button = gtk_button_new();
+ gtk_button_set_image (GTK_BUTTON(preferences_button),preferences_image);
+ gtk_widget_show (preferences_image);
+ gtk_widget_show (preferences_button);
+ gtk_box_pack_end(GTK_BOX(main_hbox),preferences_button,FALSE,TRUE,0);
+
+ list_view = tito_setup_results_list();
+ gtk_box_pack_start(GTK_BOX(main_vbox),list_view,TRUE,TRUE,0);
+
+
+ gtk_widget_set_events(tito_dialog, GDK_KEY_RELEASE_MASK);
+ gtk_widget_set_events(tito_dialog, GDK_KEY_PRESS_MASK);
+ gtk_widget_set_events(tito_dialog, GDK_BUTTON_PRESS_MASK);
+ gtk_widget_set_events(preferences_button, GDK_BUTTON_PRESS_MASK);
+
+ g_signal_connect(list, "row-activated", (GCallback) row_activated, NULL);
+ g_signal_connect (keyword_entry, "key-release-event", G_CALLBACK (key_released), NULL);
+ g_signal_connect (list, "key_press_event", G_CALLBACK (result_selected), NULL);
+ g_signal_connect (preferences_button, "clicked", G_CALLBACK(context_menu_invoked),NULL);
+ g_signal_connect (tito_dialog, "focus-out-event", G_CALLBACK (on_focus_out), NULL);
+
+ gtk_widget_show (tito_dialog);
+ return TRUE;
+}
diff --git a/app/dialogs/tito-dialog.h b/app/dialogs/tito-dialog.h
new file mode 100644
index 0000000..8feba93
--- /dev/null
+++ b/app/dialogs/tito-dialog.h
@@ -0,0 +1,24 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 2012 Srihari Sriraman, Suhas Bharadwaj, Vidyashree K, Zeeshan Ali Ansari
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __TITO_DIALOG_H__
+#define __TITO_DIALOG_H__
+
+
+GtkWidget * tito_dialog_create (void);
+
+#endif /* __TITO_DIALOG_H__ */
diff --git a/app/display/gimpdisplayshell-dnd.c b/app/display/gimpdisplayshell-dnd.c
index cdb64e7..e401716 100644
--- a/app/display/gimpdisplayshell-dnd.c
+++ b/app/display/gimpdisplayshell-dnd.c
@@ -166,13 +166,13 @@ gimp_display_shell_dnd_position_item (GimpDisplayShell *shell,
{
gint item_width = gimp_item_get_width (item);
gint item_height = gimp_item_get_height (item);
+ gint off_x, off_y;
if (item_width >= gimp_image_get_width (image) &&
item_height >= gimp_image_get_height (image))
{
- gimp_item_set_offset (item,
- (gimp_image_get_width (image) - item_width) / 2,
- (gimp_image_get_height (image) - item_height) / 2);
+ off_x = (gimp_image_get_width (image) - item_width) / 2;
+ off_y = (gimp_image_get_height (image) - item_height) / 2;
}
else
{
@@ -181,10 +181,14 @@ gimp_display_shell_dnd_position_item (GimpDisplayShell *shell,
gimp_display_shell_untransform_viewport (shell, &x, &y, &width, &height);
- gimp_item_set_offset (item,
- x + (width - item_width) / 2,
- y + (height - item_height) / 2);
+ off_x = x + (width - item_width) / 2;
+ off_y = y + (height - item_height) / 2;
}
+
+ gimp_item_translate (item,
+ off_x - gimp_item_get_offset_x (item),
+ off_y - gimp_item_get_offset_y (item),
+ FALSE);
}
static void
diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c
index 6b8df80..d9d2176 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -1686,7 +1686,9 @@ gimp_display_shell_initialize_tool (GimpDisplayShell *shell,
}
else if ((active_tool->drawable !=
gimp_image_get_active_drawable (image)) &&
- ! gimp_tool_control_get_preserve (active_tool->control))
+ (! gimp_tool_control_get_preserve (active_tool->control) &&
+ (gimp_tool_control_get_dirty_mask (active_tool->control) &
+ GIMP_DIRTY_ACTIVE_DRAWABLE)))
{
/* create a new one, deleting the current */
gimp_context_tool_changed (gimp_get_user_context (gimp));
diff --git a/app/gui/gui.c b/app/gui/gui.c
index f3ad117..0bd62a8 100644
--- a/app/gui/gui.c
+++ b/app/gui/gui.c
@@ -492,6 +492,10 @@ gui_restore_after_callback (Gimp *gimp,
"/dummy-menubar/image-popup/Help/dialogs-about",
_("About GIMP"));
+ gui_add_to_app_menu (image_ui_manager, group,
+ "/dummy-menubar/image-popup/Help/dialogs-tito",
+ _("Menu search and more"));
+
/* the preferences group */
group = ige_mac_menu_add_app_menu_group ();
diff --git a/app/tools/gimpcagetool.c b/app/tools/gimpcagetool.c
index 28d4a40..3c31d5f 100644
--- a/app/tools/gimpcagetool.c
+++ b/app/tools/gimpcagetool.c
@@ -184,7 +184,8 @@ gimp_cage_tool_init (GimpCageTool *self)
GIMP_DIRTY_IMAGE |
GIMP_DIRTY_IMAGE_STRUCTURE |
GIMP_DIRTY_DRAWABLE |
- GIMP_DIRTY_SELECTION);
+ GIMP_DIRTY_SELECTION |
+ GIMP_DIRTY_ACTIVE_DRAWABLE);
gimp_tool_control_set_wants_click (tool->control, TRUE);
gimp_tool_control_set_tool_cursor (tool->control,
GIMP_TOOL_CURSOR_PERSPECTIVE);
diff --git a/app/tools/gimpforegroundselecttool.c b/app/tools/gimpforegroundselecttool.c
index 6085a56..73cf5cd 100644
--- a/app/tools/gimpforegroundselecttool.c
+++ b/app/tools/gimpforegroundselecttool.c
@@ -185,7 +185,9 @@ gimp_foreground_select_tool_init (GimpForegroundSelectTool *fg_select)
gimp_tool_control_set_scroll_lock (tool->control, FALSE);
gimp_tool_control_set_preserve (tool->control, FALSE);
- gimp_tool_control_set_dirty_mask (tool->control, GIMP_DIRTY_IMAGE_SIZE);
+ gimp_tool_control_set_dirty_mask (tool->control,
+ GIMP_DIRTY_IMAGE_SIZE |
+ GIMP_DIRTY_ACTIVE_DRAWABLE);
gimp_tool_control_set_precision (tool->control,
GIMP_CURSOR_PRECISION_PIXEL_CENTER);
gimp_tool_control_set_tool_cursor (tool->control,
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index cf31208..766e349 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -211,7 +211,8 @@ gimp_image_map_tool_init (GimpImageMapTool *image_map_tool)
GIMP_DIRTY_IMAGE |
GIMP_DIRTY_IMAGE_STRUCTURE |
GIMP_DIRTY_DRAWABLE |
- GIMP_DIRTY_SELECTION);
+ GIMP_DIRTY_SELECTION |
+ GIMP_DIRTY_ACTIVE_DRAWABLE);
image_map_tool->drawable = NULL;
image_map_tool->operation = NULL;
diff --git a/app/tools/gimpiscissorstool.c b/app/tools/gimpiscissorstool.c
index bc9ebb8..bcf5338 100644
--- a/app/tools/gimpiscissorstool.c
+++ b/app/tools/gimpiscissorstool.c
@@ -340,7 +340,9 @@ gimp_iscissors_tool_init (GimpIscissorsTool *iscissors)
gimp_tool_control_set_scroll_lock (tool->control, TRUE);
gimp_tool_control_set_snap_to (tool->control, FALSE);
gimp_tool_control_set_preserve (tool->control, FALSE);
- gimp_tool_control_set_dirty_mask (tool->control, GIMP_DIRTY_IMAGE_SIZE);
+ gimp_tool_control_set_dirty_mask (tool->control,
+ GIMP_DIRTY_IMAGE_SIZE |
+ GIMP_DIRTY_ACTIVE_DRAWABLE);
gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_ISCISSORS);
iscissors->op = ISCISSORS_OP_NONE;
diff --git a/app/tools/gimprectangleselecttool.c b/app/tools/gimprectangleselecttool.c
index 446c7f9..1d3acb1 100644
--- a/app/tools/gimprectangleselecttool.c
+++ b/app/tools/gimprectangleselecttool.c
@@ -227,6 +227,7 @@ gimp_rectangle_select_tool_init (GimpRectangleSelectTool *rect_sel_tool)
GIMP_CURSOR_PRECISION_PIXEL_BORDER);
gimp_tool_control_set_tool_cursor (tool->control,
GIMP_TOOL_CURSOR_RECT_SELECT);
+ gimp_tool_control_set_preserve (tool->control, FALSE);
gimp_tool_control_set_dirty_mask (tool->control,
GIMP_DIRTY_IMAGE_SIZE |
GIMP_DIRTY_SELECTION);
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index 4ea0b08..e532044 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -215,7 +215,8 @@ gimp_transform_tool_init (GimpTransformTool *tr_tool)
gimp_tool_control_set_dirty_mask (tool->control,
GIMP_DIRTY_IMAGE_SIZE |
GIMP_DIRTY_DRAWABLE |
- GIMP_DIRTY_SELECTION);
+ GIMP_DIRTY_SELECTION |
+ GIMP_DIRTY_ACTIVE_DRAWABLE);
gimp_tool_control_set_precision (tool->control,
GIMP_CURSOR_PRECISION_SUBPIXEL);
diff --git a/app/widgets/gimpactionview.c b/app/widgets/gimpactionview.c
index f64a11f..e2f7fda 100644
--- a/app/widgets/gimpactionview.c
+++ b/app/widgets/gimpactionview.c
@@ -67,6 +67,7 @@ static void gimp_action_view_accel_cleared (GtkCellRendererAccel *accel,
const char *path_string,
GimpActionView *view);
+static void tito_search(const gchar* sname, const gchar* slabel, const gchar* stooltip, GtkAction *action);
G_DEFINE_TYPE (GimpActionView, gimp_action_view, GTK_TYPE_TREE_VIEW)
@@ -249,6 +250,7 @@ gimp_action_view_new (GimpUIManager *manager,
GdkModifierType accel_mask = 0;
GClosure *accel_closure = NULL;
GtkTreeIter action_iter;
+ const gchar *tooltip = gtk_action_get_tooltip (action);
if (strstr (name, "-menu") ||
strstr (name, "-popup") ||
@@ -256,7 +258,9 @@ gimp_action_view_new (GimpUIManager *manager,
continue;
label = gimp_strip_uline (gtk_action_get_label (action));
-
+
+ tito_search(name,label,tooltip,action);
+
if (! (label && strlen (label)))
{
g_free (label);
@@ -691,6 +695,7 @@ gimp_action_view_conflict_confirm (GimpActionView *view,
_("Shortcut \"%s\" is already taken "
"by \"%s\" from the \"%s\" group."),
accel_string, label, group->label);
+
gimp_message_box_set_text (box,
_("Reassigning the shortcut will cause it "
"to be removed from \"%s\"."),
@@ -865,3 +870,16 @@ gimp_action_view_accel_cleared (GtkCellRendererAccel *accel,
_("Removing shortcut failed."));
}
}
+
+static void tito_search(const gchar* sname, const gchar* slabel, const gchar* stooltip, GtkAction *saction)
+{
+ const gchar* keyword="gauss";
+
+ if(strstr(sname,keyword))
+ {
+ g_message("%s %s",slabel,stooltip);
+ gtk_action_activate(saction);
+ }
+/* else if(strstr(stooltip,keyword))*/
+/* g_message("%s %s",slabel,stooltip);*/
+}
diff --git a/app/widgets/gimpdeviceinfo-coords.c b/app/widgets/gimpdeviceinfo-coords.c
index eb5ddbf..d974af2 100644
--- a/app/widgets/gimpdeviceinfo-coords.c
+++ b/app/widgets/gimpdeviceinfo-coords.c
@@ -112,7 +112,7 @@ gimp_device_info_get_device_coords (GimpDeviceInfo *info,
GdkWindow *window,
GimpCoords *coords)
{
- gdouble axes[GDK_AXIS_LAST];
+ gdouble axes[GDK_AXIS_LAST] = { 0, };
*coords = default_coords;
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index 332ec35..1cee40c 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -495,6 +495,7 @@
#define GIMP_HELP_DOCK_SHOW_BUTTON_BAR "gimp-dock-show-button-bar"
#define GIMP_HELP_ABOUT_DIALOG "gimp-about-dialog"
+#define GIMP_HELP_TITO_DIALOG "gimp-tito-dialog"
#define GIMP_HELP_COLOR_DIALOG "gimp-color-dialog"
#define GIMP_HELP_DEVICE_STATUS_DIALOG "gimp-device-status-dialog"
#define GIMP_HELP_DISPLAY_FILTER_DIALOG "gimp-display-filter-dialog"
diff --git a/menus/image-menu.xml.in b/menus/image-menu.xml.in
index 3910039..bd46da2 100644
--- a/menus/image-menu.xml.in
+++ b/menus/image-menu.xml.in
@@ -687,6 +687,7 @@
<menuitem action="help-context-help" />
<menuitem action="dialogs-tips" />
<menuitem action="dialogs-about" />
+ <menuitem action="dialogs-tito" />
<separator />
<placeholder name="Programming" />
<separator />
diff --git a/plug-ins/common/file-cel.c b/plug-ins/common/file-cel.c
index 6292d7a..f1aed6f 100644
--- a/plug-ins/common/file-cel.c
+++ b/plug-ins/common/file-cel.c
@@ -186,7 +186,10 @@ run (const gchar *name,
if (run_mode == GIMP_RUN_NONINTERACTIVE)
{
palette_file = param[3].data.d_string;
- data_length = strlen (palette_file) + 1;
+ if (palette_file)
+ data_length = strlen (palette_file) + 1;
+ else
+ data_length = 0;
}
else if (run_mode == GIMP_RUN_INTERACTIVE)
{
diff --git a/plug-ins/common/file-pdf-save.c b/plug-ins/common/file-pdf-save.c
index 6296845..a78ea79 100644
--- a/plug-ins/common/file-pdf-save.c
+++ b/plug-ins/common/file-pdf-save.c
@@ -1257,15 +1257,6 @@ get_drawable_image (GimpDrawable *drawable)
switch (bpp)
{
case 1: /* GRAY or INDEXED */
- if (! indexed)
- {
- format = CAIRO_FORMAT_RGB24;
- }
- else
- {
- format = CAIRO_FORMAT_RGB24;
- }
- break;
case 3: /* RGB */
format = CAIRO_FORMAT_RGB24;
break;
diff --git a/plug-ins/common/value-propagate.c b/plug-ins/common/value-propagate.c
index 7a823a4..71b421e 100644
--- a/plug-ins/common/value-propagate.c
+++ b/plug-ins/common/value-propagate.c
@@ -392,8 +392,8 @@ value_propagate (GimpDrawable *drawable)
/* gimp_message ("No direction selected."); */
return GIMP_PDB_EXECUTION_ERROR;
}
- if ((vpvals.lower_limit < 0) || (255 < vpvals.lower_limit) ||
- (vpvals.upper_limit < 0) || (255 < vpvals.lower_limit) ||
+ if ((vpvals.lower_limit < 0) || (vpvals.lower_limit > 255) ||
+ (vpvals.upper_limit < 0) || (vpvals.upper_limit > 255) ||
(vpvals.upper_limit < vpvals.lower_limit))
{
/* gimp_message ("Limit values are not valid."); */
diff --git a/plug-ins/gfig/gfig-preview.c b/plug-ins/gfig/gfig-preview.c
index 5b349d1..68cc2f6 100644
--- a/plug-ins/gfig/gfig-preview.c
+++ b/plug-ins/gfig/gfig-preview.c
@@ -227,16 +227,7 @@ gfig_preview_events (GtkWidget *widget,
else
{
if (selvals.opts.snap2grid)
- {
- if (bevent->button == 3)
- {
- find_grid_pos (&point, &point, FALSE);
- }
- else
- {
- find_grid_pos (&point, &point, FALSE);
- }
- }
+ find_grid_pos (&point, &point, FALSE);
object_start (&point, bevent->state & GDK_SHIFT_MASK);
gtk_widget_queue_draw (widget);
diff --git a/plug-ins/metadata/xmp-encode.c b/plug-ins/metadata/xmp-encode.c
index 184b2e7..fc6464d 100644
--- a/plug-ins/metadata/xmp-encode.c
+++ b/plug-ins/metadata/xmp-encode.c
@@ -174,9 +174,14 @@ gen_property (GString *buffer,
NULL);
break;
+ case XMP_TYPE_GPS_COORDINATE:
+ gen_element (buffer, 2,
+ schema->prefix, property->name, value_array[0],
+ NULL);
+ break;
+
case XMP_TYPE_RESOURCE_REF:
case XMP_TYPE_DIMENSIONS:
- case XMP_TYPE_GPS_COORDINATE:
case XMP_TYPE_FLASH:
case XMP_TYPE_OECF_SFR:
case XMP_TYPE_CFA_PATTERN:
diff --git a/plug-ins/pygimp/ChangeLog.old b/plug-ins/pygimp/ChangeLog.old
deleted file mode 100644
index 7a4893b..0000000
--- a/plug-ins/pygimp/ChangeLog.old
+++ /dev/null
@@ -1,297 +0,0 @@
-2006-04-28 Sven Neumann <sven@gimp.org>
-
- * doc/pygimp.sgml: applied documentation patch contributed by
- Sylvain Fourmanoit (bug #339886).
-
-2005-10-04 Sven Neumann <sven@gimp.org>
-
- * plug-ins/benchmark-foreground-extract.py (benchmark): removed
- run-mode parameters again. Seems to have been fixed in pygimp.
-
-2005-09-27 Sven Neumann <sven@gimp.org>
-
- * gimpmodule.c (pygimp_progress_install): undeprecated.
-
-2005-08-19 Sven Neumann <sven@gimp.org>
-
- * gimpmodule.c
- * gimp-drawable.c: use canonical procedure names with
- gimp_run_procedure().
-
-2005-08-06 Sven Neumann <sven@gimp.org>
-
- * plug-ins/benchmark-foreground-extract.py: pass run-mode to PDB
- calls.
-
-2005-08-03 Sven Neumann <sven@gimp.org>
-
- * pygimp-rgb.c: added wrapper for gimp_rgb_luminance().
-
-2005-07-29 Sven Neumann <sven@gimp.org>
-
- * plug-ins/benchmark-foreground-extract.py: follow PDB API change.
-
-2005-07-18 Sven Neumann <sven@gimp.org>
-
- * plug-ins/benchmark-foreground-extract.py: allow to have the
- output images saved, made the code more robust, corrected some
- mistakes.
-
-2005-07-16 Sven Neumann <sven@gimp.org>
-
- * plug-ins/benchmark-foreground-extract.py: show elapsed time.
-
-2005-07-16 Sven Neumann <sven@gimp.org>
-
- * Makefile.am
- * plug-ins/benchmark-foreground-extract.py: added a rough
- implementation of the foreground extraxtion benchmark as proposed
- in the GrabCut paper. See comments in the file for details.
-
-2005-06-22 Sven Neumann <sven@gimp.org>
-
- * plug-ins/foggify.py: fixed capitalization of menu label.
-
-2004-12-19 Sven Neumann <sven@gimp.org>
-
- * Makefile.am: added $(pygimp_DATA) to EXTRA_DIST.
-
-2003-02-08 Manish Singh <yosh@gimp.org>
-
- * gimpui.py: use dialog.run() for sub dialogs, since the main dialog
- is also doing that. This does break consistency with the rest of
- gimp, but will do for now. I wish there was a similar API that didn't
- set the dialog modal. Fixed brush and pattern list to use the new
- PDB names. Also make the filesel really have a title of "Files"
-
- * gimpshelf.py: minor clean up, use cStringIO if available
-
- * gimpfu.py: add support for Load/Save plug-ins. Use GtkImage
- instead of deprecated GtkPixmap.
-
- * gimpenums.py: regenerated
-
- * plug-ins/Makefile.am
- * plug-ins/colorhtml.py: the return of colorhtml to 1.3
-
-2003-01-08 Manish Singh <yosh@gimp.org>
-
- * plug-ins/gimpcons.py: import gtkcons only when we're about to use
- it. This and below allows plug-in query to work even without an
- interface.
-
- * plug-ins/pdbbrowse.py: define BrowseWin (which needs gtk) only
- when we need it and are guaranteed a gui setup.
-
-2002-11-08 Sven Neumann <sven@gimp.org>
-
- * plug-ins/Makefile.am (EXTRA_DIST): added missing file (#98034).
-
-2002-08-31 James Henstridge <james@daa.com.au>
-
- * gimpfu.py (RadioEntry): add PF_RADIO support to gimpfu based on
- Yosh's patch.
- (_interact): swap order of buttons to match other dialogs.
-
-2002-08-30 James Henstridge <james@daa.com.au>
-
- * pygimp-*.c: update to list all methods. Convert no arg
- functions to METH_NOARG (slight code size reduction).
-
- * pygimp-drawable.c (PyGimpDrawable_Type): add getsets for common
- drawable attributes.
- (PyGimpLayer_Type): convert getattr and setattr to getsets.
- (PyGimpChannel_Type): convert to getsets.
-
- * gimpmodule.c (new_parasite): remove. Superceded by
- gimp.Parasite constructor.
- (pygimp_image_list): rename to match actual API.
-
- * pygimp-parasite.c (PyGimpParasite_Type): switch to getsets.
- (para_init): add constructor.
-
- * pygimp-tile.c (PyGimpPixelRgn_Type): convert to use getsets.
- (PyGimpTile_Type): convert to use getsets.
-
- * pygimp-image.c (PyGimpImage_Type): convert getattr and setattr
- routines into getsets.
-
-2002-08-29 James Henstridge <james@daa.com.au>
-
- * pygimp-image.c (img_repr): check if gimp_image_get_filename()
- returns NULL.
-
- * plug-ins/gimpcons.py: fix up plugin, so that I can test the rest
- of pygimp.
-
- * *.py, plug-ins/*.py: many updates to Python code to work with
- new PyGTK. I can start a plug in now.
-
-2002-08-28 James Henstridge <james@daa.com.au>
-
- * *.c, pygimp.h: split module into multiple files, and convert
- types to Python 2.2 style types. Still need to fix some of the
- getattr routines.
-
- * gimpmodule.c: various updates to get it to compile with latest
- gimp. Still need to merge in changes to toplevel configure.in.
-
-2000-09-23 Kevin Turner <acapnotic@users.sourceforge.net>
-
- * gimpmodule.c (newpfobject): use correct type for enums
-
- * plug-ins/gtkcons.py (Console.run): set _ after evaluating a
- statement, so _ may be used as it is in the python interpreter.
-
-2000-09-20 Kevin Turner <acapnotic@users.sourceforge.net>
-
- * plug-ins/pdbbrowse.py (pars): Oops. When we did
- s/PARAM_/PDB_/, we forgot to do s/6/4/ (the length
- of the prefix changed).
-
- * gimpmodule.c: Filter this through remove_cruft,
- finishing the libgimp renaming (and further ensuring
- that it won't work with older libgimps).
-
-2000-08-10 Kevin Turner <acapnotic@users.sourceforge.net>
-
- * gimpenums.py: This file now autogenerated by
- tools/pdbgen/enumcode-py.pl
-
- * gimpfu.py:
- * gimpmodule.c: renaming fixes for libgimp 1.2
-
- * plug-ins/pdbbrowse.py (pars): s/PARAM_/PDB_/
-
-2000-08-09 Kevin Turner <acapnotic@users.sourceforge.net>
-
- * gimpmodule.c (chn_getattr): under "layer", remove the call to
- gimp_channel_get_layer_id() as this function does not exist. It
- would be well for someone who knows pygimp better than I to review
- this change, but it keeps pygimp from being *completely* broken.
-
-1999-11-11 James Henstridge <james@daa.com.au>
-
- * doc/pygimp.sgml: updated documentation.
-
- * gimpmodule.c: applied patches from Hans Breuer to fix portability
- problems and also win32 compatibility.
-
- (lay_getattr): take is_rgb as a synonym for is_color/is_colour.
- (drw_parasite_attach):
- (drw_parasite_detach): change to new naming scheme.
- (img_parasite_attach):
- (img_parasite_detach): same here.
- (gimp_Parasite_find):
- (gimp_Parasite_attach):
- (gimp_Parasite_detach): same here.
- (chn_getattr): added is_rgb as a synonym for is_colour, and
- is_layer_mask as a synonym for layer_mask.
-
-1999-07-08 James Henstridge <james@daa.com.au>
-
- * plug-ins/shadow_bevel.py: added {disable,enable}_undo() calls. Also
- made it possible to turn off the creation of a shadow.
-
- * plug-ins/foggify.py: added disable_undo() and enable_undo() calls
- round the plugin code.
-
- * plug-ins/Makefile.am: forgot to add foggify and shadow_bevel to
- the EXTRA_DIST list.
-
- * gimpui.py: fixed some small bugs that caused an exception when
- loading on some versions of python. Weird thing is, it did not
- cause problems on my computer (using 1.5.1)
-
-1999-07-05 James Henstridge <james@daa.com.au>
-
- * plug-ins/foggify.py, plug-ins/shadow_bevel.py: two new example
- scripts.
-
-1999-07-04 James Henstridge <james@daa.com.au>
-
- * gimpmodule.c: added support for parasites. This new code is
- conditionally compiled if GIMP_HAVE_PARASITES is defined.
- Added other gimp 1.1 features to gimpmodule.
-
-1999-07-03 James Henstridge <james@daa.com.au>
-
- * gimpmodule.c (initgimp): added {major,minor,micro}_version constants
- to gimpmodule.
- (*) removed all the empty __doc__ strings -- they were just wasting
- space, and I have other docs in there now.
-
- * plug-ins/clothify.py (python_clothify): same here.
-
- * plug-ins/sphere.py (python_sphere): some small hacks to get the
- plugin to work with both gimp 1.0 and 1.1 -- using the pattern
- "if pdb.gimp_whatever.nparams == n" to check if the img parameter
- should be removed.
-
- * plug-ins/pdbbrowse.py (BrowseWin.extension_pdb_browse): fixed
- small bug.
-
-1999-07-02 James Henstridge <james@daa.com.au>
-
- * plug-ins/whirlpinch.py (python_whirl_pinch): adjusted plug in to
- work with drawable changes.
-
- * gimpmodule.c: removed the drawable type -- now only layer or channel
- types are used. Also moved the drawable type's methods to both the
- layer and channel object types. Also added some of the attributes of
- the drawable object to layer and channel objects (some aren't needed
- anymore, since layers are clearly defined as layers, and channels
- as channels).
- Make tile and pixel region objects keep a reference to their
- associated drawable.
- Added attributes has_alpha, is_colour, is_grey and is_indexed to
- layer and channel objects.
-
-1999-06-22 James Henstridge <james@daa.com.au>
-
- * gimpplugin.py: renamed from plugin.py. This is mainly to reduce
- namespace polution.
-
- * getvals.py: removed file. It has been replaced by the much more
- functional gimpfu module.
-
- * plug-ins/gimpcons.py: added a browse button that will display the
- pdbbrowse window, which can then be used to choose a pdb function.
- The selected pdb function gets its prototype inserted on the
- command line.
-
- * plug-ins/pdbbrowse.py: converted to use GTK+ widgets and gimpfu.
-
- * plug-ins/gimpcons.py: converted to use gimpfu and gtkcons.py.
-
- * plug-ings/gtkcons.py: a GTK replacement for tkcons.py.
-
- * plug-ins/whirlpinch.py, plug-ins/sphere.py: converted these two
- to use gimpfu.
-
- * gimpshelf.py (shelf): some changes so that the gimp internal types
- will pickle correctly.
-
- * gimpmodule.c (initgimp): export the type objects for gimpmodule's
- internal types. This is mainly to help get pickling to work
- correctly.
- (_id2*): new functions to help convert id's to the builtin types.
-
- * plug-ins/clothify.py: converted to use gimpfu module.
-
-1999-06-21 James Henstridge <james@daa.com.au>
-
- * gimpfu.py: a simplified interface to writing GIMP plugins. It
- handles all the user interaction stuff and saving the last used
- values. It uses pygtk, so should match the interface of the rest
- of gimp.
-
- * gimpui.py: new file that implements a number of useful widgets
- for use with the interfaces of plugins. It requires pygtk.
-
- * gimpmodule.c (tuple_to_GParam): accept None for layer, channel
- or drawable arguments to PDB functions. This value gets treated
- like an ID of -1.
- (img_cmp, lay_cmp, chn_cmp, drw_cmp): added compare functions so
- that the == operator works as expected with those object types.
-
diff --git a/po/ko.po b/po/ko.po
index dd07030..ddfb42b 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: GIMP 2.8\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=gimp&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-07-26 16:42+0000\n"
-"PO-Revision-Date: 2012-05-18 16:20+0900\n"
+"POT-Creation-Date: 2012-09-08 10:59+0000\n"
+"PO-Revision-Date: 2012-09-03 02:34+0900\n"
"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
"Language-Team: \n"
"Language: ko\n"
@@ -94,11 +94,11 @@ msgstr "일괄처리 해석기 '%s'을(를) 사용할 수 없음. 일괄처리
#: ../app/main.c:148
msgid "Show version information and exit"
-msgstr "버전 정보 보여준 뒤 끝냅니다."
+msgstr "버전 정보 보여준 뒤 끝냅니다"
#: ../app/main.c:153
msgid "Show license information and exit"
-msgstr "사용 허가서 정보를 보여준 뒤 끝냅니다."
+msgstr "사용 허가서 정보를 보여준 뒤 끝냅니다"
#: ../app/main.c:158
msgid "Be more verbose"
@@ -106,7 +106,7 @@ msgstr "더 자세하게"
#: ../app/main.c:163
msgid "Start a new GIMP instance"
-msgstr "새 인스턴스로 김프를 시작합니다."
+msgstr "새 인스턴스로 김프를 시작합니다"
#: ../app/main.c:168
msgid "Open images as new"
@@ -114,15 +114,15 @@ msgstr "새 이미지를 엽니다."
#: ../app/main.c:173
msgid "Run without a user interface"
-msgstr "사용자 인터페이스 없이 실행합니다."
+msgstr "사용자 인터페이스 없이 실행합니다"
#: ../app/main.c:178
msgid "Do not load brushes, gradients, patterns, ..."
-msgstr "무늬, 그라디언트, 색상표, 붓 등을 읽어 들이지 않습니다."
+msgstr "무늬, 그라디언트, 색상표, 붓 등을 불러오지 않습니다..."
#: ../app/main.c:183
msgid "Do not load any fonts"
-msgstr "글꼴을 읽어오지 않습니다."
+msgstr "글꼴을 불러오지 않음"
#: ../app/main.c:188
msgid "Do not show a splash screen"
@@ -130,23 +130,23 @@ msgstr "시작 화면 보이지 않기"
#: ../app/main.c:193
msgid "Do not use shared memory between GIMP and plugins"
-msgstr "김프와 플러그인 사이의 공유 메모리를 사용하지 않습니다."
+msgstr "김프와 플러그인 사이의 공유 메모리를 사용하지 않습니다"
#: ../app/main.c:198
msgid "Do not use special CPU acceleration functions"
-msgstr "특수한 CPU 가속 기능을 사용하지 않습니다."
+msgstr "특수한 CPU 가속 기능을 사용하지 않습니다"
#: ../app/main.c:203
msgid "Use an alternate sessionrc file"
-msgstr "다른 sessionrc 파일을 사용합니다."
+msgstr "다른 sessionrc 파일을 사용합니다"
#: ../app/main.c:208
msgid "Use an alternate user gimprc file"
-msgstr "다른 사용자 gimprc 파일을 사용합니다."
+msgstr "다른 사용자 gimprc 파일을 사용합니다"
#: ../app/main.c:213
msgid "Use an alternate system gimprc file"
-msgstr "다른 시스템 gimprc 파일을 사용합니다."
+msgstr "다른 시스템 gimprc 파일을 사용합니다"
#: ../app/main.c:218
msgid "Batch command to run (can be used multiple times)"
@@ -158,7 +158,7 @@ msgstr "일괄처리 명령을 수행하기 위한 프로시저"
#: ../app/main.c:228
msgid "Send messages to console instead of using a dialog"
-msgstr "대화상자 대신에 콘솔로 메시지를 출력합니다."
+msgstr "대화상자 대신에 콘솔로 메시지를 출력합니다"
# 모드 이름은 번역하지 말 것 (off|on|warn)
#. don't translate the mode names (off|on|warn)
@@ -178,11 +178,11 @@ msgstr "치명적이지 않은 디버깅 시그널 처리기를 사용합니다.
#: ../app/main.c:250
msgid "Make all warnings fatal"
-msgstr "모든 치명적 경고를 보입니다."
+msgstr "모든 치명적 경고를 보입니다"
#: ../app/main.c:255
msgid "Output a gimprc file with default settings"
-msgstr "기본 설정으로 gimprc 파일을 출력합니다."
+msgstr "기본 설정으로 gimprc 파일을 출력합니다"
#: ../app/main.c:271
msgid "Output a sorted list of deprecated procedures in the PDB"
@@ -211,7 +211,7 @@ msgstr "김프 출력. 이 창을 닫으려면 아무 글자나 입력하십시
#: ../app/main.c:497
#, c-format
msgid "(Type any character to close this window)\n"
-msgstr "(이 창을 닫으려면 아무 글자나 입력하십시오.)\n"
+msgstr "(이 창을 닫으려면 아무 글자나 입력하십시오)\n"
#: ../app/main.c:514
msgid "GIMP output. You can minimize this window, but don't close it."
@@ -248,7 +248,7 @@ msgstr ""
#: ../app/version.c:63 ../app/version.c:130
#, c-format
msgid "using %s version %s (compiled against version %s)"
-msgstr "%s 사용, %s 버전(%s 버전 컴파일)"
+msgstr "%s 버전 %s 사용중(%s 버전 컴파일)"
#: ../app/version.c:138
#, c-format
@@ -769,7 +769,7 @@ msgid "New Channel Color"
msgstr "새 채널 색상"
#: ../app/actions/channels-commands.c:244 ../app/core/gimpimage-new.c:257
-#: ../app/display/gimpdisplayshell-dnd.c:632
+#: ../app/display/gimpdisplayshell-dnd.c:646
#: ../app/widgets/gimpchanneltreeview.c:258
#: ../app/widgets/gimplayertreeview.c:776
#, c-format
@@ -970,7 +970,7 @@ msgstr "모든 보이는 레이어의 합성색을 사용합니다"
#: ../app/dialogs/file-open-dialog.c:277
#: ../app/dialogs/file-open-location-dialog.c:213
#: ../app/dialogs/file-open-location-dialog.c:225
-#: ../app/display/gimpdisplayshell-dnd.c:578
+#: ../app/display/gimpdisplayshell-dnd.c:592
#: ../app/widgets/gimplayertreeview.c:736 ../app/widgets/gimptoolbox-dnd.c:170
#: ../app/widgets/gimptoolbox.c:833
#, c-format
@@ -1602,12 +1602,12 @@ msgstr "미리보기 다시 만들기"
#: ../app/actions/documents-actions.c:87
msgctxt "documents-action"
msgid "Reload _all Previews"
-msgstr "모든 미리보기 다시 읽기(_A)"
+msgstr "모든 미리보기 다시 불러오기(_A)"
#: ../app/actions/documents-actions.c:88
msgctxt "documents-action"
msgid "Reload all previews"
-msgstr "모든 미리보기 다시읽기"
+msgstr "모든 미리보기 다시 불러오기"
#: ../app/actions/documents-actions.c:93
msgctxt "documents-action"
@@ -1617,7 +1617,7 @@ msgstr "원본 없는 항목 제거(_N)"
#: ../app/actions/documents-actions.c:95
msgctxt "documents-action"
msgid "Remove entries for which the corresponding file is not available"
-msgstr "대응하는 파일이 없는 항목을 제거합니다."
+msgstr "대응하는 파일이 없는 항목을 제거합니다"
#: ../app/actions/documents-commands.c:192
msgid "Clear Document History"
@@ -2140,7 +2140,7 @@ msgstr "클립보드"
#: ../app/actions/edit-commands.c:374
msgid "Cut Named"
-msgstr "이름붙여 잘라넣기"
+msgstr "이름붙여 잘라내기"
#: ../app/actions/edit-commands.c:377 ../app/actions/edit-commands.c:418
#: ../app/actions/edit-commands.c:438
@@ -2181,7 +2181,7 @@ msgstr "지우기(_C)"
#: ../app/actions/error-console-actions.c:44
msgctxt "error-console-action"
msgid "Clear error console"
-msgstr "오류 콘솔 지우기"
+msgstr "오류 콘솔을 지웁니다"
#: ../app/actions/error-console-actions.c:49
msgctxt "error-console-action"
@@ -2191,7 +2191,7 @@ msgstr "전체 선택(_A)"
#: ../app/actions/error-console-actions.c:50
msgctxt "error-console-action"
msgid "Select all error messages"
-msgstr "모든 오류 메시지 선택"
+msgstr "모든 오류 메시지를 선택합니다"
#: ../app/actions/error-console-actions.c:58
msgctxt "error-console-action"
@@ -2201,7 +2201,7 @@ msgstr "오류 기록을 파일로 저장(_S)..."
#: ../app/actions/error-console-actions.c:59
msgctxt "error-console-action"
msgid "Write all error messages to a file"
-msgstr "모든 오류 메시지를 파일로 저장"
+msgstr "모든 오류 메시지를 파일에 기록합니다"
#: ../app/actions/error-console-actions.c:64
msgctxt "error-console-action"
@@ -2211,7 +2211,7 @@ msgstr "선택을 파일로 저장(_E)..."
#: ../app/actions/error-console-actions.c:65
msgctxt "error-console-action"
msgid "Write the selected error messages to a file"
-msgstr "선택한 오류메시지를 파일로 내보내기"
+msgstr "선택한 오류 메시지를 파일에 기록합니다"
#: ../app/actions/error-console-commands.c:84
msgid "Cannot save. Nothing is selected."
@@ -2253,7 +2253,7 @@ msgstr "열기(_O)..."
#: ../app/actions/file-actions.c:77
msgctxt "file-action"
msgid "Open an image file"
-msgstr "이미지 파일 열기"
+msgstr "이미지 파일을 엽니다"
#: ../app/actions/file-actions.c:82
msgctxt "file-action"
@@ -2263,7 +2263,7 @@ msgstr "레이어로 열기(_E)..."
#: ../app/actions/file-actions.c:83
msgctxt "file-action"
msgid "Open an image file as layers"
-msgstr "이미지 파일을 레이어로 열기"
+msgstr "이미지 파일을 레이어로 엽니다"
#: ../app/actions/file-actions.c:88
msgctxt "file-action"
@@ -2283,7 +2283,7 @@ msgstr "새 양식 만들기..."
#: ../app/actions/file-actions.c:95
msgctxt "file-action"
msgid "Create a new template from this image"
-msgstr "이 이미지에서 새 양식 만들기"
+msgstr "이 이미지에서 새 양식을 만듭니다"
#: ../app/actions/file-actions.c:100
msgctxt "file-action"
@@ -2293,7 +2293,7 @@ msgstr "원래대로(_V)"
#: ../app/actions/file-actions.c:101
msgctxt "file-action"
msgid "Reload the image file from disk"
-msgstr "디스크에서 이미지 파일 다시 읽어오기"
+msgstr "디스크에서 이미지 파일을 다시 불러옵니다"
#: ../app/actions/file-actions.c:106
msgctxt "file-action"
@@ -2308,7 +2308,7 @@ msgstr "모든 열린 이미지 닫기"
#: ../app/actions/file-actions.c:112
msgctxt "file-action"
msgid "_Quit"
-msgstr "끝(_Q)"
+msgstr "끝내기(_Q)"
#: ../app/actions/file-actions.c:113
msgctxt "file-action"
@@ -2323,7 +2323,7 @@ msgstr "저장(_S)"
#: ../app/actions/file-actions.c:122
msgctxt "file-action"
msgid "Save this image"
-msgstr "이미지 저장"
+msgstr "이미지를 저장합니다"
#: ../app/actions/file-actions.c:127
msgctxt "file-action"
@@ -2333,7 +2333,7 @@ msgstr "다른 이름으로 저장(_A)..."
#: ../app/actions/file-actions.c:128
msgctxt "file-action"
msgid "Save this image with a different name"
-msgstr "이미지를 다른 이름으로 저장하기"
+msgstr "이미지를 다른 이름으로 저장합니다"
#: ../app/actions/file-actions.c:133
msgctxt "file-action"
@@ -2367,7 +2367,7 @@ msgstr "내보내기"
#: ../app/actions/file-actions.c:147
msgctxt "file-action"
msgid "Export the image again"
-msgstr "이미 경로 다시 내보내기"
+msgstr "이미지를 다시 내보내기"
#: ../app/actions/file-actions.c:152
msgctxt "file-action"
@@ -2377,7 +2377,7 @@ msgstr "겹쳐쓰기(_W)"
#: ../app/actions/file-actions.c:153
msgctxt "file-action"
msgid "Export the image back to the imported file in the import format"
-msgstr "이미지를 불러온 파일 형식을 이용하여 해당 파일로 다시 내보내기"
+msgstr "이미지를 불러온 파일 형식을 이용하여 해당 파일로 다시 내보냅니다"
#: ../app/actions/file-actions.c:158
msgctxt "file-action"
@@ -2387,7 +2387,7 @@ msgstr "내보내기(_X)..."
#: ../app/actions/file-actions.c:159
msgctxt "file-action"
msgid "Export the image to various file formats such as PNG or JPEG"
-msgstr "이미지를 PNG나 JPEG 등 다양한 파일 형식으로 내보내기"
+msgstr "이미지를 PNG나 JPEG 등 다양한 파일 형식으로 내보냅니다"
#: ../app/actions/file-actions.c:292
#, c-format
@@ -2414,7 +2414,7 @@ msgstr "이미지를 레이어로 열기"
#: ../app/actions/file-commands.c:265
msgid "No changes need to be saved"
-msgstr "저장할만한 변화가 없음."
+msgstr "저장할 변화가 없음."
#: ../app/actions/file-commands.c:272 ../app/dialogs/file-save-dialog.c:95
msgid "Save Image"
@@ -2481,12 +2481,12 @@ msgstr "글꼴 목록 새로고침(_R)"
#: ../app/actions/fonts-actions.c:48
msgctxt "fonts-action"
msgid "Rescan the installed fonts"
-msgstr "설치된 글꼴 다시 읽기"
+msgstr "설치된 글꼴을 다시 읽습니다"
#: ../app/actions/gradient-editor-actions.c:45
msgctxt "gradient-editor-action"
msgid "Gradient Editor Menu"
-msgstr "그라디언트편집기 메뉴"
+msgstr "그라디언트 편집기 메뉴"
#: ../app/actions/gradient-editor-actions.c:49
msgctxt "gradient-editor-action"
@@ -2855,7 +2855,7 @@ msgstr "새 그라디언트(_N)"
#: ../app/actions/gradients-actions.c:48
msgctxt "gradients-action"
msgid "Create a new gradient"
-msgstr "새 그라디언트 만들기"
+msgstr "새 그라디언트를 만듭니다"
#: ../app/actions/gradients-actions.c:53
msgctxt "gradients-action"
@@ -2865,7 +2865,7 @@ msgstr "그라디언트 복제(_U)"
#: ../app/actions/gradients-actions.c:54
msgctxt "gradients-action"
msgid "Duplicate this gradient"
-msgstr "그라디언트 복제하기"
+msgstr "그라디언트 복제합니다"
#: ../app/actions/gradients-actions.c:59
msgctxt "gradients-action"
@@ -2875,7 +2875,7 @@ msgstr "그라데이션 위치 복사(_L)"
#: ../app/actions/gradients-actions.c:60
msgctxt "gradients-action"
msgid "Copy gradient file location to clipboard"
-msgstr "그라디언트 파일 위치를 클립보드에 복사"
+msgstr "그라디언트 파일 위치를 클립보드에 복사합니다"
#: ../app/actions/gradients-actions.c:65
msgctxt "gradients-action"
@@ -2885,7 +2885,7 @@ msgstr "_POV-Ray로 저장..."
#: ../app/actions/gradients-actions.c:66
msgctxt "gradients-action"
msgid "Save gradient as POV-Ray"
-msgstr "그라디언트를 POV-Ray로 저장"
+msgstr "그라디언트를 POV-Ray로 저장합니다"
#: ../app/actions/gradients-actions.c:71
msgctxt "gradients-action"
@@ -2895,7 +2895,7 @@ msgstr "그라디언트 삭제(_D)"
#: ../app/actions/gradients-actions.c:72
msgctxt "gradients-action"
msgid "Delete this gradient"
-msgstr "그라디언트 삭제"
+msgstr "그라디언트를 삭제합니다"
#: ../app/actions/gradients-actions.c:77
msgctxt "gradients-action"
@@ -2905,7 +2905,7 @@ msgstr "그라디언트 새로고침(_R)"
#: ../app/actions/gradients-actions.c:78
msgctxt "gradients-action"
msgid "Refresh gradients"
-msgstr "그라디언트 새로고침"
+msgstr "그라디언트를 새로고칩니다"
#: ../app/actions/gradients-actions.c:86
msgctxt "gradients-action"
@@ -2915,7 +2915,7 @@ msgstr "그라디언트 편집(_E)..."
#: ../app/actions/gradients-actions.c:87
msgctxt "gradients-action"
msgid "Edit gradient"
-msgstr "그라디언트 편집"
+msgstr "그라디언트를 편집합니다"
#: ../app/actions/gradients-commands.c:65
#, c-format
@@ -2925,12 +2925,12 @@ msgstr "'%s'을(를) POV-Ray로 저장"
#: ../app/actions/help-actions.c:37 ../app/actions/help-actions.c:40
msgctxt "help-action"
msgid "_Help"
-msgstr "도움(_H)"
+msgstr "도움말(_H)"
#: ../app/actions/help-actions.c:41
msgctxt "help-action"
msgid "Open the GIMP user manual"
-msgstr "김프 사용자 설명서 열기"
+msgstr "김프 사용자 설명서를 엽니다"
#: ../app/actions/help-actions.c:46
msgctxt "help-action"
@@ -2940,7 +2940,7 @@ msgstr "문맥 도움말(_C)"
#: ../app/actions/help-actions.c:47
msgctxt "help-action"
msgid "Show the help for a specific user interface item"
-msgstr "특정 사용자 인터페이스 항목에 대한 도움말 표시"
+msgstr "특정 사용자 인터페이스 항목에 대한 도움말을 표시합니다"
#: ../app/actions/image-actions.c:48 ../app/actions/image-actions.c:52
msgctxt "image-action"
@@ -3000,7 +3000,7 @@ msgstr "새 이미지(_N)..."
#: ../app/actions/image-actions.c:68
msgctxt "image-action"
msgid "Create a new image"
-msgstr "새 이미지 만들기"
+msgstr "새 이미지를 만듭니다"
#: ../app/actions/image-actions.c:73
msgctxt "image-action"
@@ -3010,17 +3010,17 @@ msgstr "캔버스 크기(_V)..."
#: ../app/actions/image-actions.c:74
msgctxt "image-action"
msgid "Adjust the image dimensions"
-msgstr "이미지 차원 조정"
+msgstr "이미지 차원을 조정합니다"
#: ../app/actions/image-actions.c:79
msgctxt "image-action"
msgid "Fit Canvas to L_ayers"
-msgstr "캔버스를 레이어에 맞추기(_A)"
+msgstr "캔버스를 레이어에 맞춥니다(_A)"
#: ../app/actions/image-actions.c:80
msgctxt "image-action"
msgid "Resize the image to enclose all layers"
-msgstr "이미지를 모든 레이어를 포함하는 크기로 바꾸기"
+msgstr "이미지를 모든 레이어를 포함하는 크기로 바꿉니다"
#: ../app/actions/image-actions.c:85
msgctxt "image-action"
@@ -3030,7 +3030,7 @@ msgstr "선택영역에 캔버스 크기 맞추기(_I)"
#: ../app/actions/image-actions.c:86
msgctxt "image-action"
msgid "Resize the image to the extents of the selection"
-msgstr "이미지 크기를 선택영역 너비에 맞추기"
+msgstr "이미지 크기를 선택영역 너비에 맞춥니다"
#: ../app/actions/image-actions.c:91
msgctxt "image-action"
@@ -3040,7 +3040,7 @@ msgstr "인쇄 크기(_P)..."
#: ../app/actions/image-actions.c:92
msgctxt "image-action"
msgid "Adjust the print resolution"
-msgstr "프린트 해상도 조정"
+msgstr "인쇄 해상도를 조정합니다"
#: ../app/actions/image-actions.c:97
msgctxt "image-action"
@@ -3050,7 +3050,7 @@ msgstr "이미지 크기조정(_S)..."
#: ../app/actions/image-actions.c:98
msgctxt "image-action"
msgid "Change the size of the image content"
-msgstr "이미지 내용의 크기 바꾸기"
+msgstr "이미지 내용의 크기를 바꿉니다"
#: ../app/actions/image-actions.c:103
msgctxt "image-action"
@@ -3060,7 +3060,7 @@ msgstr "선택영역 잘라내기(_C)"
#: ../app/actions/image-actions.c:104
msgctxt "image-action"
msgid "Crop the image to the extents of the selection"
-msgstr "선택영역의 크기대로 이미지 잘라내기"
+msgstr "선택영역의 크기대로 이미지 잘라냅니다"
#: ../app/actions/image-actions.c:109
msgctxt "image-action"
@@ -3070,7 +3070,7 @@ msgstr "복제(_D)"
#: ../app/actions/image-actions.c:110
msgctxt "image-action"
msgid "Create a duplicate of this image"
-msgstr "이미지 복제 만들기"
+msgstr "이미지 복제본을 만듭니다"
#: ../app/actions/image-actions.c:115
msgctxt "image-action"
@@ -3080,7 +3080,7 @@ msgstr "보이는 레이어 합치기(_L)..."
#: ../app/actions/image-actions.c:116
msgctxt "image-action"
msgid "Merge all visible layers into one layer"
-msgstr "보이는 모든 레이어 하나로 합치기"
+msgstr "보이는 모든 레이어를 하나로 합칩니다"
#: ../app/actions/image-actions.c:121
msgctxt "image-action"
@@ -3090,7 +3090,7 @@ msgstr "이미지 평탄화(_F)"
#: ../app/actions/image-actions.c:122
msgctxt "image-action"
msgid "Merge all layers into one and remove transparency"
-msgstr "모든 레이어를 하나로 합치고 투명도 제거"
+msgstr "모든 레이어를 하나로 합치고 투명도를 제거합니다"
#: ../app/actions/image-actions.c:127
msgctxt "image-action"
@@ -3110,7 +3110,7 @@ msgstr "이미지 성질(_O)"
#: ../app/actions/image-actions.c:134
msgctxt "image-action"
msgid "Display information about this image"
-msgstr "이미지에 대한 정보 보기"
+msgstr "이미지에 대한 정보를 봅니다"
#: ../app/actions/image-actions.c:142
msgctxt "image-convert-action"
@@ -3120,7 +3120,7 @@ msgstr "_RGB"
#: ../app/actions/image-actions.c:143
msgctxt "image-convert-action"
msgid "Convert the image to the RGB colorspace"
-msgstr "이미지를 RGB 색공간으로 변환"
+msgstr "이미지를 RGB 색공간으로 변환합니다"
#: ../app/actions/image-actions.c:147
msgctxt "image-convert-action"
@@ -3130,7 +3130,7 @@ msgstr "그레이스케일(_G)"
#: ../app/actions/image-actions.c:148
msgctxt "image-convert-action"
msgid "Convert the image to grayscale"
-msgstr "이미지를 그레이스케일로 변환"
+msgstr "이미지를 그레이스케일로 변환합니다"
#: ../app/actions/image-actions.c:152
msgctxt "image-convert-action"
@@ -3140,7 +3140,7 @@ msgstr "인덱스(_I)..."
#: ../app/actions/image-actions.c:153
msgctxt "image-convert-action"
msgid "Convert the image to indexed colors"
-msgstr "이미지를 인덱스된 색으로 변환"
+msgstr "이미지를 색인한 색으로 변환합니다"
#: ../app/actions/image-actions.c:160
msgctxt "image-action"
@@ -3150,7 +3150,7 @@ msgstr "수평 뒤집기(_H):"
#: ../app/actions/image-actions.c:161
msgctxt "image-action"
msgid "Flip image horizontally"
-msgstr "수직 뒤집기"
+msgstr "수평으로 뒤집습니다"
#: ../app/actions/image-actions.c:166
msgctxt "image-action"
@@ -3160,7 +3160,7 @@ msgstr "수직 뒤집기(_V)"
#: ../app/actions/image-actions.c:167
msgctxt "image-action"
msgid "Flip image vertically"
-msgstr "수직 뒤집기"
+msgstr "수직으로 뒤집습니다"
#: ../app/actions/image-actions.c:175
msgctxt "image-action"
@@ -3170,7 +3170,7 @@ msgstr "시계방향으로 90도 회전(_C)"
#: ../app/actions/image-actions.c:176
msgctxt "image-action"
msgid "Rotate the image 90 degrees to the right"
-msgstr "이미지를 오른쪽으로 90도 회전"
+msgstr "이미지를 오른쪽으로 90도 회전합니다"
#: ../app/actions/image-actions.c:181
msgctxt "image-action"
@@ -3180,7 +3180,7 @@ msgstr "_180도 회전"
#: ../app/actions/image-actions.c:182
msgctxt "image-action"
msgid "Turn the image upside-down"
-msgstr "이미지를 위아래 뒤집기"
+msgstr "이미지를 위아래로 뒤집습니다"
#: ../app/actions/image-actions.c:187
msgctxt "image-action"
@@ -3190,7 +3190,7 @@ msgstr "시계 반대방향으로 90도 회전(_W)"
#: ../app/actions/image-actions.c:188
msgctxt "image-action"
msgid "Rotate the image 90 degrees to the left"
-msgstr "이미지를 왼쪽으로 90도 회전"
+msgstr "이미지를 왼쪽으로 90도 회전합니다"
#: ../app/actions/image-commands.c:237
msgid "Set Image Canvas Size"
@@ -3222,7 +3222,7 @@ msgstr "회전"
#: ../app/actions/image-commands.c:429 ../app/actions/layers-commands.c:691
msgid "Cannot crop because the current selection is empty."
-msgstr "선택이 비어있으므로, 잘라낼 수 없습니다."
+msgstr "선택이 비어 있으므로, 잘라낼 수 없습니다."
#: ../app/actions/image-commands.c:630
msgid "Change Print Size"
@@ -3256,17 +3256,17 @@ msgstr "보기 올리기(_R)"
#: ../app/actions/images-actions.c:48
msgctxt "images-action"
msgid "Raise this image's displays"
-msgstr "이 이미지 디스플레이 올리기"
+msgstr "이 이미지 표시를 위로 올립니다"
#: ../app/actions/images-actions.c:53
msgctxt "images-action"
msgid "_New View"
-msgstr "새창으로 보기(_N)"
+msgstr "새 창으로 보기(_N)"
#: ../app/actions/images-actions.c:54
msgctxt "images-action"
msgid "Create a new display for this image"
-msgstr "이 이미지를 새 창으로 보이기"
+msgstr "이 이미지를 새 창으로 보입니다"
#: ../app/actions/images-actions.c:59
msgctxt "images-action"
@@ -3331,17 +3331,17 @@ msgstr "텍스트 도구(_X)"
#: ../app/actions/layers-actions.c:71
msgctxt "layers-action"
msgid "Activate the text tool on this text layer"
-msgstr "이 텍스트 레이어에서 텍스트도구 활성화"
+msgstr "이 텍스트 레이어에서 텍스트 도구를 활성화합니다"
#: ../app/actions/layers-actions.c:76
msgctxt "layers-action"
msgid "_Edit Layer Attributes..."
-msgstr "레이어속성 편집(_E)..."
+msgstr "레이어 속성 편집(_E)..."
#: ../app/actions/layers-actions.c:77
msgctxt "layers-action"
msgid "Edit the layer's name"
-msgstr "레이어이름 편집..."
+msgstr "레이어 이름 편집"
#: ../app/actions/layers-actions.c:82 ../app/actions/layers-actions.c:610
msgctxt "layers-action"
@@ -3351,7 +3351,7 @@ msgstr "새 레이어(_N)..."
#: ../app/actions/layers-actions.c:83
msgctxt "layers-action"
msgid "Create a new layer and add it to the image"
-msgstr "새 레이어를 만들어서 이미지에 추가"
+msgstr "새 레이어를 만들어서 이미지에 추가합니다"
#: ../app/actions/layers-actions.c:88 ../app/actions/layers-actions.c:611
msgctxt "layers-action"
@@ -3361,7 +3361,7 @@ msgstr "새 레이어(_N)"
#: ../app/actions/layers-actions.c:89
msgctxt "layers-action"
msgid "Create a new layer with last used values"
-msgstr "마지막 사용값으로 새 레이어 만들기"
+msgstr "마지막에 사용한 값으로 새 레이어를 만듭니다"
#: ../app/actions/layers-actions.c:94
msgctxt "layers-action"
@@ -3371,7 +3371,7 @@ msgstr "보이는 영역에서 새로 만들기(_V)"
#: ../app/actions/layers-actions.c:96
msgctxt "layers-action"
msgid "Create a new layer from what is visible in this image"
-msgstr "이미지의 보이는 부분을 새 레이어로 만들기"
+msgstr "이미지의 보이는 부분을 새 레이어로 만듭니다"
#: ../app/actions/layers-actions.c:101
msgctxt "layers-action"
@@ -3381,7 +3381,7 @@ msgstr "새 레이어 그룹(_G)..."
#: ../app/actions/layers-actions.c:102
msgctxt "layers-action"
msgid "Create a new layer group and add it to the image"
-msgstr "새 레이어그룹을 만들어서 이미지에 추가하기"
+msgstr "새 레이어그룹을 만들어서 이미지에 추가합니다"
#: ../app/actions/layers-actions.c:107
msgctxt "layers-action"
@@ -3391,7 +3391,7 @@ msgstr "레이어 복제(_U)"
#: ../app/actions/layers-actions.c:109
msgctxt "layers-action"
msgid "Create a duplicate of the layer and add it to the image"
-msgstr "레이어의 복사본 만들고, 이미지에 추가하기"
+msgstr "레이어의 복사본 만들고, 이미지에 추가합니다"
#: ../app/actions/layers-actions.c:114
msgctxt "layers-action"
@@ -3401,7 +3401,7 @@ msgstr "레이어 삭제(_D)"
#: ../app/actions/layers-actions.c:115
msgctxt "layers-action"
msgid "Delete this layer"
-msgstr "레이어 삭제"
+msgstr "레이어를 삭제합니다"
#: ../app/actions/layers-actions.c:120
msgctxt "layers-action"
@@ -3411,7 +3411,7 @@ msgstr "레이어 올리기(_R)"
#: ../app/actions/layers-actions.c:121
msgctxt "layers-action"
msgid "Raise this layer one step in the layer stack"
-msgstr "레이어 스택에서 이 레이어를 한 단계 올리기"
+msgstr "레이어 스택에서 이 레이어를 한 단계 올립니다"
#: ../app/actions/layers-actions.c:126
msgctxt "layers-action"
@@ -3421,7 +3421,7 @@ msgstr "레이어를 꼭대기로(_T)"
#: ../app/actions/layers-actions.c:127
msgctxt "layers-action"
msgid "Move this layer to the top of the layer stack"
-msgstr "레이어 스택에서 이 레이어를 최상위로 이동하기"
+msgstr "레이어 스택에서 이 레이어를 최상위로 이동합니다"
#: ../app/actions/layers-actions.c:132
msgctxt "layers-action"
@@ -3431,7 +3431,7 @@ msgstr "레이어 내리기(_L)"
#: ../app/actions/layers-actions.c:133
msgctxt "layers-action"
msgid "Lower this layer one step in the layer stack"
-msgstr "레이어 스택에서 이 레이어를 한 단계 내리기"
+msgstr "레이어 스택에서 이 레이어를 한 단계 내립니다"
#: ../app/actions/layers-actions.c:138
msgctxt "layers-action"
@@ -3441,7 +3441,7 @@ msgstr "레이어를 바닥으로(_B)"
#: ../app/actions/layers-actions.c:139
msgctxt "layers-action"
msgid "Move this layer to the bottom of the layer stack"
-msgstr "레이어 대화상자에서 이 레이어를 바닥으로 내리기"
+msgstr "레이어 대화상자에서 이 레이어를 바닥으로 내립니다"
#: ../app/actions/layers-actions.c:144
msgctxt "layers-action"
@@ -3451,7 +3451,7 @@ msgstr "레이어 고정(_A)"
#: ../app/actions/layers-actions.c:145
msgctxt "layers-action"
msgid "Anchor the floating layer"
-msgstr "떠있는 레이어 고정"
+msgstr "떠있는 레이어를 고정합니다"
#: ../app/actions/layers-actions.c:150
msgctxt "layers-action"
@@ -3461,7 +3461,7 @@ msgstr "아래로 합치기(_W)"
#: ../app/actions/layers-actions.c:151
msgctxt "layers-action"
msgid "Merge this layer with the first visible layer below it"
-msgstr "이 레이어를 그 아래에서 처음보이는 레이어로 합치기"
+msgstr "이 레이어를 그 아래에서 처음보이는 레이어로 합칩니다"
#: ../app/actions/layers-actions.c:156
msgctxt "layers-action"
@@ -3471,7 +3471,7 @@ msgstr "레이어 그룹 합치기"
#: ../app/actions/layers-actions.c:157
msgctxt "layers-action"
msgid "Merge the layer group's layers into one normal layer"
-msgstr "레이어 그룹의 레이어를 보통 레이어 하나로 합치기"
+msgstr "레이어 그룹의 레이어를 보통 레이어 하나로 합칩니다"
#: ../app/actions/layers-actions.c:162
msgctxt "layers-action"
@@ -3481,7 +3481,7 @@ msgstr "보이는 레이어 합치기(_V)..."
#: ../app/actions/layers-actions.c:163
msgctxt "layers-action"
msgid "Merge all visible layers into one layer"
-msgstr "보이는 모든 레이어를 한 레이어로 합치기"
+msgstr "보이는 모든 레이어를 한 레이어로 합칩니다"
#: ../app/actions/layers-actions.c:168
msgctxt "layers-action"
@@ -3491,7 +3491,7 @@ msgstr "이미지 평탄화(_F)"
#: ../app/actions/layers-actions.c:169
msgctxt "layers-action"
msgid "Merge all layers into one and remove transparency"
-msgstr "모든 레이어를 하나로 합치고, 투명도 없애기"
+msgstr "모든 레이어를 하나로 합치고, 투명도 정보를 없앱니다"
#: ../app/actions/layers-actions.c:174
msgctxt "layers-action"
@@ -3501,7 +3501,7 @@ msgstr "텍스트 정보 버리기(_D)"
#: ../app/actions/layers-actions.c:175
msgctxt "layers-action"
msgid "Turn this text layer into a normal layer"
-msgstr "이 텍스트레이어를 일반 레이어로 전환"
+msgstr "이 텍스트 레이어를 일반 레이어로 전환합니다"
#: ../app/actions/layers-actions.c:180
msgctxt "layers-action"
@@ -3511,7 +3511,7 @@ msgstr "텍스트를 경로로(_P)"
#: ../app/actions/layers-actions.c:181
msgctxt "layers-action"
msgid "Create a path from this text layer"
-msgstr "텍스트 레이어에서 경로 만들기"
+msgstr "텍스트 레이어에서 경로를 만듭니다"
#: ../app/actions/layers-actions.c:186
msgctxt "layers-action"
@@ -3521,7 +3521,7 @@ msgstr "경로따라 텍스트(_G)"
#: ../app/actions/layers-actions.c:187
msgctxt "layers-action"
msgid "Warp this layer's text along the current path"
-msgstr "이 레이어의 텍스트를 현재 경로 따라 배열하기"
+msgstr "이 레이어의 텍스트를 현재 경로를 따라 나열합니다"
#: ../app/actions/layers-actions.c:192
msgctxt "layers-action"
@@ -3531,7 +3531,7 @@ msgstr "레이어경계 크기(_O)..."
#: ../app/actions/layers-actions.c:193
msgctxt "layers-action"
msgid "Adjust the layer dimensions"
-msgstr "레이어 차원 조정"
+msgstr "레이어 차원을 조정합니다"
#: ../app/actions/layers-actions.c:198
msgctxt "layers-action"
@@ -3541,7 +3541,7 @@ msgstr "레이어를 이미지 크기로(_I)"
#: ../app/actions/layers-actions.c:199
msgctxt "layers-action"
msgid "Resize the layer to the size of the image"
-msgstr "이미지의 크기로 레이어 크기 변경"
+msgstr "이미지의 크기로 레이어 크기를 바꿉니다"
#: ../app/actions/layers-actions.c:204
msgctxt "layers-action"
@@ -3551,7 +3551,7 @@ msgstr "레이어 크기조정(_S)..."
#: ../app/actions/layers-actions.c:205
msgctxt "layers-action"
msgid "Change the size of the layer content"
-msgstr "레이어 내용의 크기 바꾸기"
+msgstr "레이어 내용의 크기를 바꿉니다"
#: ../app/actions/layers-actions.c:210
msgctxt "layers-action"
@@ -3561,7 +3561,7 @@ msgstr "선택영역 잘라내기(_C)"
#: ../app/actions/layers-actions.c:211
msgctxt "layers-action"
msgid "Crop the layer to the extents of the selection"
-msgstr "선택한 확장으로 레이어 잘라내기"
+msgstr "선택한 확장으로 레이어를 잘라냅니다"
#: ../app/actions/layers-actions.c:216
msgctxt "layers-action"
@@ -3571,7 +3571,7 @@ msgstr "레이어 마스크 추가(_Y)..."
#: ../app/actions/layers-actions.c:218
msgctxt "layers-action"
msgid "Add a mask that allows non-destructive editing of transparency"
-msgstr "투명도 편집에 영향을 주지 않는 마스크 추가"
+msgstr "투명도 편집에 영향을 주지 않는 마스크를 추가합니다"
#: ../app/actions/layers-actions.c:223
msgctxt "layers-action"
@@ -3581,7 +3581,7 @@ msgstr "알파 채널 추가(_H)"
#: ../app/actions/layers-actions.c:224
msgctxt "layers-action"
msgid "Add transparency information to the layer"
-msgstr "레이어에 투명 정보 추가"
+msgstr "레이어에 투명 정보를 추가합니다"
#: ../app/actions/layers-actions.c:229
msgctxt "layers-action"
@@ -3591,7 +3591,7 @@ msgstr "알파 채널 제거(_R)"
#: ../app/actions/layers-actions.c:230
msgctxt "layers-action"
msgid "Remove transparency information from the layer"
-msgstr "레이어에서 투명 정보 제거"
+msgstr "레이어에서 투명 정보를 제거합니다"
#: ../app/actions/layers-actions.c:238
msgctxt "layers-action"
@@ -3601,7 +3601,7 @@ msgstr "알파 채널 잠그기(_A)"
#: ../app/actions/layers-actions.c:240
msgctxt "layers-action"
msgid "Keep transparency information on this layer from being modified"
-msgstr "변경시 레이어의 투명 정보 보호"
+msgstr "변경시 레이어의 투명 정보를 보호합니다"
#: ../app/actions/layers-actions.c:246
msgctxt "layers-action"
@@ -3611,7 +3611,7 @@ msgstr "레이어 마스크 편집(_E)"
#: ../app/actions/layers-actions.c:247
msgctxt "layers-action"
msgid "Work on the layer mask"
-msgstr "레이어마스크에서 작업"
+msgstr "레이어 마스크에서 작업합니다"
#: ../app/actions/layers-actions.c:253
msgctxt "layers-action"
@@ -3621,12 +3621,12 @@ msgstr "레이어 마스크 보이기(_H)"
#: ../app/actions/layers-actions.c:259
msgctxt "layers-action"
msgid "_Disable Layer Mask"
-msgstr "레이어 마스크 사용불가하게(_D)"
+msgstr "레이어 마스크 비활성화(_D)"
#: ../app/actions/layers-actions.c:260
msgctxt "layers-action"
msgid "Dismiss the effect of the layer mask"
-msgstr "레이어 마스크의 효과 버리기"
+msgstr "레이어 마스크의 효과를 버립니다"
#: ../app/actions/layers-actions.c:269
msgctxt "layers-action"
@@ -3636,7 +3636,7 @@ msgstr "레이어마스크 적용(_M)"
#: ../app/actions/layers-actions.c:270
msgctxt "layers-action"
msgid "Apply the effect of the layer mask and remove it"
-msgstr "레이어 마스크 효과 적용하고 없애기"
+msgstr "레이어 마스크 효과 적용하고 없앱니다"
#: ../app/actions/layers-actions.c:275
msgctxt "layers-action"
@@ -3646,7 +3646,7 @@ msgstr "레이어 마스크 삭제(_K)"
#: ../app/actions/layers-actions.c:276
msgctxt "layers-action"
msgid "Remove the layer mask and its effect"
-msgstr "레이어 마스크와 효과 없애기"
+msgstr "레이어 마스크와 효과 없앱니다"
#: ../app/actions/layers-actions.c:284
msgctxt "layers-action"
@@ -3656,7 +3656,7 @@ msgstr "마스크를 선택영역으로(_M)"
#: ../app/actions/layers-actions.c:285
msgctxt "layers-action"
msgid "Replace the selection with the layer mask"
-msgstr "선택을 레이어 마스크로 교체"
+msgstr "선택을 레이어 마스크로 교체합니다"
#: ../app/actions/layers-actions.c:290
msgctxt "layers-action"
@@ -3666,7 +3666,7 @@ msgstr "선택영역에 추가(_A)"
#: ../app/actions/layers-actions.c:291
msgctxt "layers-action"
msgid "Add the layer mask to the current selection"
-msgstr "레이어 마스크를 현재선택에 추가"
+msgstr "레이어 마스크를 현재선택에 추가합니다"
#: ../app/actions/layers-actions.c:296 ../app/actions/layers-actions.c:325
msgctxt "layers-action"
@@ -3676,7 +3676,7 @@ msgstr "선택영역에서 빼기(_S)"
#: ../app/actions/layers-actions.c:297
msgctxt "layers-action"
msgid "Subtract the layer mask from the current selection"
-msgstr "현재 선택에서 레이어 마스크 빼기"
+msgstr "현재 선택에서 레이어 마스크를 뺍니다"
#: ../app/actions/layers-actions.c:302 ../app/actions/layers-actions.c:332
msgctxt "layers-action"
@@ -3686,7 +3686,7 @@ msgstr "선택영역과 겹치기(_I)"
#: ../app/actions/layers-actions.c:303
msgctxt "layers-action"
msgid "Intersect the layer mask with the current selection"
-msgstr "현재 선택영역과 레이어 마스크의 교집합"
+msgstr "현재 선택영역과 레이어 마스크를 겹칩니다"
#: ../app/actions/layers-actions.c:311
msgctxt "layers-action"
@@ -3696,7 +3696,7 @@ msgstr "알파를 선택영역으로(_P)"
#: ../app/actions/layers-actions.c:313
msgctxt "layers-action"
msgid "Replace the selection with the layer's alpha channel"
-msgstr "선택을 레이어 알파 채널로 교체"
+msgstr "선택을 레이어 알파 채널로 교체합니다"
#: ../app/actions/layers-actions.c:318
msgctxt "layers-action"
@@ -3726,7 +3726,7 @@ msgstr "맨 위 레이어 선택(_T)"
#: ../app/actions/layers-actions.c:343
msgctxt "layers-action"
msgid "Select the topmost layer"
-msgstr "맨 위 레이어 선택"
+msgstr "맨 위 레이어를 선택합니다"
#: ../app/actions/layers-actions.c:348
msgctxt "layers-action"
@@ -3736,7 +3736,7 @@ msgstr "바닥 레이어 선택(_B)"
#: ../app/actions/layers-actions.c:349
msgctxt "layers-action"
msgid "Select the bottommost layer"
-msgstr "최하위 레이어 선택"
+msgstr "최하위 레이어를 선택합니다"
#: ../app/actions/layers-actions.c:354
msgctxt "layers-action"
@@ -3746,7 +3746,7 @@ msgstr "이전 레이어 선택(_P)"
#: ../app/actions/layers-actions.c:355
msgctxt "layers-action"
msgid "Select the layer above the current layer"
-msgstr "현재 레이어 위 레이어 선택"
+msgstr "현재 레이어 위 레이어를 선택합니다"
#: ../app/actions/layers-actions.c:360
msgctxt "layers-action"
@@ -3756,7 +3756,7 @@ msgstr "다음 레이어 선택(_N)"
#: ../app/actions/layers-actions.c:361
msgctxt "layers-action"
msgid "Select the layer below the current layer"
-msgstr "현재 레이어 아래 레이어 선택"
+msgstr "현재 레이어 아래 레이어를 선택합니다"
#. Will be followed with e.g. "Shift-Click
#. on thumbnail"
@@ -3837,7 +3837,7 @@ msgstr "색 편집(_E)..."
#: ../app/actions/palette-editor-actions.c:48
msgctxt "palette-editor-action"
msgid "Edit this entry"
-msgstr "이 성분 편집"
+msgstr "이 항목을 편집합니다"
#: ../app/actions/palette-editor-actions.c:53
msgctxt "palette-editor-action"
@@ -3847,7 +3847,7 @@ msgstr "색 삭제(_D)"
#: ../app/actions/palette-editor-actions.c:54
msgctxt "palette-editor-action"
msgid "Delete this entry"
-msgstr "이 성분 삭제"
+msgstr "이 항목을 삭제합니다"
#: ../app/actions/palette-editor-actions.c:62
msgctxt "palette-editor-action"
@@ -3862,7 +3862,7 @@ msgstr "전경에서 새 색상(_F)"
#: ../app/actions/palette-editor-actions.c:73
msgctxt "palette-editor-action"
msgid "Create a new entry from the foreground color"
-msgstr "전경색에서 색 가져오기"
+msgstr "전경색에서 새 항목을 가져옵니다"
#: ../app/actions/palette-editor-actions.c:78
msgctxt "palette-editor-action"
@@ -3872,7 +3872,7 @@ msgstr "배경에서 새 색상(_B)"
#: ../app/actions/palette-editor-actions.c:80
msgctxt "palette-editor-action"
msgid "Create a new entry from the background color"
-msgstr "배경색에서 새 성분 가져오기"
+msgstr "배경색에서 새 항목을 가져옵니다"
#: ../app/actions/palette-editor-actions.c:88
msgid "Zoom _In"
@@ -3907,7 +3907,7 @@ msgstr "새 팔레트(_N)"
#: ../app/actions/palettes-actions.c:48
msgctxt "palettes-action"
msgid "Create a new palette"
-msgstr "새 팔레트 만들기"
+msgstr "새 팔레트를 만듭니다"
#: ../app/actions/palettes-actions.c:53
msgctxt "palettes-action"
@@ -3917,7 +3917,7 @@ msgstr "팔레트 가져오기(_I)..."
#: ../app/actions/palettes-actions.c:54
msgctxt "palettes-action"
msgid "Import palette"
-msgstr "팔레트 가져오기"
+msgstr "팔레트를 가져옵니다"
#: ../app/actions/palettes-actions.c:59
msgctxt "palettes-action"
@@ -3927,7 +3927,7 @@ msgstr "팔레트 복제(_U)"
#: ../app/actions/palettes-actions.c:60
msgctxt "palettes-action"
msgid "Duplicate this palette"
-msgstr "팔레트 복제"
+msgstr "팔레트를 복제합니다"
#: ../app/actions/palettes-actions.c:65
msgctxt "palettes-action"
@@ -3937,7 +3937,7 @@ msgstr "팔레트 합치기(_M)..."
#: ../app/actions/palettes-actions.c:66
msgctxt "palettes-action"
msgid "Merge palettes"
-msgstr "팔레트 합치기"
+msgstr "팔레트를 합칩니다"
#: ../app/actions/palettes-actions.c:71
msgctxt "palettes-action"
@@ -3947,7 +3947,7 @@ msgstr "팔레트 위치 복사(_L)"
#: ../app/actions/palettes-actions.c:72
msgctxt "palettes-action"
msgid "Copy palette file location to clipboard"
-msgstr "팔레트 파일 위치를 클립보드를 복사"
+msgstr "팔레트 파일 위치를 클립보드를 복사합니다"
#: ../app/actions/palettes-actions.c:77
msgctxt "palettes-action"
@@ -3957,7 +3957,7 @@ msgstr "팔레트 삭제(_D)"
#: ../app/actions/palettes-actions.c:78
msgctxt "palettes-action"
msgid "Delete this palette"
-msgstr "팔레트 삭제"
+msgstr "팔레트를 삭제합니다"
#: ../app/actions/palettes-actions.c:83
msgctxt "palettes-action"
@@ -3967,7 +3967,7 @@ msgstr "팔레트 새로 고침(_R)"
#: ../app/actions/palettes-actions.c:84
msgctxt "palettes-action"
msgid "Refresh palettes"
-msgstr "팔레트 새로 고침"
+msgstr "팔레트를 새로 고칩니다"
#: ../app/actions/palettes-actions.c:92
msgctxt "palettes-action"
@@ -3977,7 +3977,7 @@ msgstr "팔레트 편집(_E)..."
#: ../app/actions/palettes-actions.c:93
msgctxt "palettes-action"
msgid "Edit palette"
-msgstr "팔레트 편집"
+msgstr "팔레트를 편집합니다"
#: ../app/actions/palettes-commands.c:72
msgid "Merge Palette"
@@ -3985,7 +3985,7 @@ msgstr "팔레트 합치기"
#: ../app/actions/palettes-commands.c:76
msgid "Enter a name for the merged palette"
-msgstr "합친 팔레트의 이름을 입력하십시오."
+msgstr "합친 팔레트의 이름을 입력하십시오"
#: ../app/actions/patterns-actions.c:42
msgctxt "patterns-action"
@@ -4000,7 +4000,7 @@ msgstr "무늬를 이미지로 열기(_O)"
#: ../app/actions/patterns-actions.c:47
msgctxt "patterns-action"
msgid "Open this pattern as an image"
-msgstr "이 무늬를 이미지로 열기"
+msgstr "이 무늬를 이미지로 엽니다"
#: ../app/actions/patterns-actions.c:52
msgctxt "patterns-action"
@@ -4010,7 +4010,7 @@ msgstr "새 무늬(_N)"
#: ../app/actions/patterns-actions.c:53
msgctxt "patterns-action"
msgid "Create a new pattern"
-msgstr "새 무늬 만들기"
+msgstr "새 무늬를 만듭니다"
#: ../app/actions/patterns-actions.c:58
msgctxt "patterns-action"
@@ -4020,7 +4020,7 @@ msgstr "무늬 복제(_U)"
#: ../app/actions/patterns-actions.c:59
msgctxt "patterns-action"
msgid "Duplicate this pattern"
-msgstr "무늬 복제"
+msgstr "무늬를 복제합니다"
#: ../app/actions/patterns-actions.c:64
msgctxt "patterns-action"
@@ -4030,7 +4030,7 @@ msgstr "무늬 위치 복사(_L)"
#: ../app/actions/patterns-actions.c:65
msgctxt "patterns-action"
msgid "Copy pattern file location to clipboard"
-msgstr "무늬 파일 위치를 클립보드로 복사"
+msgstr "무늬 파일 위치를 클립보드로 복사합니다"
#: ../app/actions/patterns-actions.c:70
msgctxt "patterns-action"
@@ -4040,7 +4040,7 @@ msgstr "무늬 삭제(_D)"
#: ../app/actions/patterns-actions.c:71
msgctxt "patterns-action"
msgid "Delete this pattern"
-msgstr "무늬 삭제"
+msgstr "무늬를 삭제합니다"
#: ../app/actions/patterns-actions.c:76
msgctxt "patterns-action"
@@ -4050,7 +4050,7 @@ msgstr "무늬 새로 고침(_R)"
#: ../app/actions/patterns-actions.c:77
msgctxt "patterns-action"
msgid "Refresh patterns"
-msgstr "무늬 새로 고침"
+msgstr "무늬를 새로 고칩니다"
#: ../app/actions/patterns-actions.c:85
msgctxt "patterns-action"
@@ -4060,12 +4060,12 @@ msgstr "무늬 편집(_E)..."
#: ../app/actions/patterns-actions.c:86
msgctxt "patterns-action"
msgid "Edit pattern"
-msgstr "무늬 편집"
+msgstr "무늬를 편집합니다"
#: ../app/actions/plug-in-actions.c:85
msgctxt "plug-in-action"
msgid "Filte_rs"
-msgstr "Filte_rs"
+msgstr "필터(_R)"
#: ../app/actions/plug-in-actions.c:87
msgctxt "plug-in-action"
@@ -4546,7 +4546,7 @@ msgstr "열기"
#: ../app/actions/text-editor-actions.c:44
msgctxt "text-editor-action"
msgid "Load text from file"
-msgstr "파일에서 텍스트 가져오기"
+msgstr "파일에서 텍스트 불러오기"
#: ../app/actions/text-editor-actions.c:49
msgctxt "text-editor-action"
@@ -4585,7 +4585,7 @@ msgstr "텍스트 파일 열기(UTF-8)"
#: ../app/actions/text-editor-commands.c:143
#: ../app/actions/text-tool-commands.c:226 ../app/config/gimpconfig-file.c:58
-#: ../app/core/gimpbrush-load.c:140 ../app/core/gimpbrush-load.c:424
+#: ../app/core/gimpbrush-load.c:142 ../app/core/gimpbrush-load.c:426
#: ../app/core/gimpbrushgenerated-load.c:73
#: ../app/core/gimpbrushpipe-load.c:81 ../app/core/gimpcurve-load.c:54
#: ../app/core/gimpgradient-load.c:63 ../app/core/gimppalette-load.c:77
@@ -4824,22 +4824,22 @@ msgstr "칠하기 도구(_P)"
#: ../app/actions/tools-actions.c:48
msgctxt "tools-action"
msgid "_Transform Tools"
-msgstr "변형도구(_T)"
+msgstr "변형 도구(_T)"
#: ../app/actions/tools-actions.c:49
msgctxt "tools-action"
msgid "_Color Tools"
-msgstr "색 도구(_C)"
+msgstr "색상 도구(_C)"
#: ../app/actions/tools-actions.c:55
msgctxt "tools-action"
msgid "_By Color"
-msgstr "색으로(_B)"
+msgstr "색상 선택(_B)"
#: ../app/actions/tools-actions.c:56
msgctxt "tools-action"
msgid "Select regions with similar colors"
-msgstr "비슷한 색 영역 선택"
+msgstr "비슷한 색상 영역을 선택합니다"
#: ../app/actions/tools-actions.c:61
msgctxt "tools-action"
@@ -6463,7 +6463,7 @@ msgstr "실행 취소 이력의 미리보기 크기를 지정하십시오."
msgid "When enabled, pressing F1 will open the help browser."
msgstr "F1을 눌러서 도움말을 볼 수 있습니다."
-#: ../app/config/gimprc-deserialize.c:135 ../app/core/gimp-modules.c:133
+#: ../app/config/gimprc-deserialize.c:135 ../app/core/gimp-modules.c:136
#: ../app/core/gimp-units.c:167 ../app/gui/session.c:286
#: ../app/plug-in/plug-in-rc.c:212
msgid "fatal parse error"
@@ -6950,12 +6950,12 @@ msgctxt "undo-type"
msgid "Anchor floating selection"
msgstr "뜬 선택영역 고정"
-#: ../app/core/core-enums.c:862 ../app/core/gimp-edit.c:261
+#: ../app/core/core-enums.c:862 ../app/core/gimp-edit.c:293
msgctxt "undo-type"
msgid "Paste"
msgstr "붙여넣기"
-#: ../app/core/core-enums.c:863 ../app/core/gimp-edit.c:502
+#: ../app/core/core-enums.c:863 ../app/core/gimp-edit.c:534
msgctxt "undo-type"
msgid "Cut"
msgstr "잘라내기"
@@ -7131,122 +7131,122 @@ msgctxt "undo-type"
msgid "Not undoable"
msgstr "실행 취소 불가"
-#: ../app/core/core-enums.c:1185
+#: ../app/core/core-enums.c:1187
msgctxt "select-criterion"
msgid "Composite"
msgstr "합성하기"
-#: ../app/core/core-enums.c:1186
+#: ../app/core/core-enums.c:1188
msgctxt "select-criterion"
msgid "Red"
msgstr "빨강"
-#: ../app/core/core-enums.c:1187
+#: ../app/core/core-enums.c:1189
msgctxt "select-criterion"
msgid "Green"
msgstr "초록"
-#: ../app/core/core-enums.c:1188
+#: ../app/core/core-enums.c:1190
msgctxt "select-criterion"
msgid "Blue"
msgstr "파랑"
-#: ../app/core/core-enums.c:1189
+#: ../app/core/core-enums.c:1191
msgctxt "select-criterion"
msgid "Hue"
msgstr "색조"
-#: ../app/core/core-enums.c:1190
+#: ../app/core/core-enums.c:1192
msgctxt "select-criterion"
msgid "Saturation"
msgstr "채도"
-#: ../app/core/core-enums.c:1191
+#: ../app/core/core-enums.c:1193
msgctxt "select-criterion"
msgid "Value"
msgstr "명도"
-#: ../app/core/core-enums.c:1220
+#: ../app/core/core-enums.c:1222
msgctxt "message-severity"
msgid "Message"
msgstr "메시지"
-#: ../app/core/core-enums.c:1221
+#: ../app/core/core-enums.c:1223
msgctxt "message-severity"
msgid "Warning"
msgstr "경고"
-#: ../app/core/core-enums.c:1222
+#: ../app/core/core-enums.c:1224
msgctxt "message-severity"
msgid "Error"
msgstr "에러"
-#: ../app/core/core-enums.c:1251
+#: ../app/core/core-enums.c:1253
msgctxt "color-profile-policy"
msgid "Ask what to do"
msgstr "작업 내용 확인하기"
-#: ../app/core/core-enums.c:1252
+#: ../app/core/core-enums.c:1254
msgctxt "color-profile-policy"
msgid "Keep embedded profile"
msgstr "끼어든 프로필 유지"
-#: ../app/core/core-enums.c:1253
+#: ../app/core/core-enums.c:1255
msgctxt "color-profile-policy"
msgid "Convert to RGB workspace"
msgstr "RGB 작업공간으로 변환"
-#: ../app/core/core-enums.c:1290
+#: ../app/core/core-enums.c:1292
msgctxt "dynamics-output-type"
msgid "Opacity"
msgstr "불투명도"
-#: ../app/core/core-enums.c:1291
+#: ../app/core/core-enums.c:1293
msgctxt "dynamics-output-type"
msgid "Size"
msgstr "크기"
-#: ../app/core/core-enums.c:1292
+#: ../app/core/core-enums.c:1294
msgctxt "dynamics-output-type"
msgid "Angle"
msgstr "각도"
-#: ../app/core/core-enums.c:1293
+#: ../app/core/core-enums.c:1295
msgctxt "dynamics-output-type"
msgid "Color"
msgstr "색"
-#: ../app/core/core-enums.c:1294
+#: ../app/core/core-enums.c:1296
msgctxt "dynamics-output-type"
msgid "Hardness"
msgstr "경도"
-#: ../app/core/core-enums.c:1295
+#: ../app/core/core-enums.c:1297
msgctxt "dynamics-output-type"
msgid "Force"
msgstr "강제"
-#: ../app/core/core-enums.c:1296
+#: ../app/core/core-enums.c:1298
msgctxt "dynamics-output-type"
msgid "Aspect ratio"
msgstr "종횡비"
-#: ../app/core/core-enums.c:1297
+#: ../app/core/core-enums.c:1299
msgctxt "dynamics-output-type"
msgid "Spacing"
msgstr "간격"
-#: ../app/core/core-enums.c:1298
+#: ../app/core/core-enums.c:1300
msgctxt "dynamics-output-type"
msgid "Rate"
msgstr "비율"
-#: ../app/core/core-enums.c:1299
+#: ../app/core/core-enums.c:1301
msgctxt "dynamics-output-type"
msgid "Flow"
msgstr "흐름"
-#: ../app/core/core-enums.c:1300
+#: ../app/core/core-enums.c:1302
msgctxt "dynamics-output-type"
msgid "Jitter"
msgstr "지터(Jitter)"
@@ -7258,41 +7258,41 @@ msgstr "지터(Jitter)"
msgid "Deleting \"%s\" failed: %s"
msgstr "\"%s\" 삭제 실패: %s"
-#: ../app/core/gimp-edit.c:189 ../app/core/gimpimage-new.c:309
+#: ../app/core/gimp-edit.c:190 ../app/core/gimpimage-new.c:309
msgid "Pasted Layer"
msgstr "붙여 넣은 레이어"
-#: ../app/core/gimp-edit.c:388
+#: ../app/core/gimp-edit.c:420
msgctxt "undo-type"
msgid "Clear"
msgstr "지우기"
-#: ../app/core/gimp-edit.c:407
+#: ../app/core/gimp-edit.c:439
msgctxt "undo-type"
msgid "Fill with Foreground Color"
msgstr "전경색으로 채우기"
-#: ../app/core/gimp-edit.c:411
+#: ../app/core/gimp-edit.c:443
msgctxt "undo-type"
msgid "Fill with Background Color"
msgstr "배경색으로 채우기"
-#: ../app/core/gimp-edit.c:415
+#: ../app/core/gimp-edit.c:447
msgctxt "undo-type"
msgid "Fill with White"
msgstr "흰색으로 채우기"
-#: ../app/core/gimp-edit.c:419
+#: ../app/core/gimp-edit.c:451
msgctxt "undo-type"
msgid "Fill with Transparency"
msgstr "투명하게 채우기"
-#: ../app/core/gimp-edit.c:423
+#: ../app/core/gimp-edit.c:455
msgctxt "undo-type"
msgid "Fill with Pattern"
msgstr "무늬로 채우기"
-#: ../app/core/gimp-edit.c:515
+#: ../app/core/gimp-edit.c:547
msgid "Global Buffer"
msgstr "전역 버퍼"
@@ -7398,56 +7398,56 @@ msgstr "모듈"
msgid "Updating tag cache"
msgstr "태그 캐쉬 업데이트 중"
-#: ../app/core/gimpbrush-load.c:178
+#: ../app/core/gimpbrush-load.c:180
#, c-format
msgid "Could not read %d byte from '%s': %s"
msgid_plural "Could not read %d bytes from '%s': %s"
msgstr[0] "\t\t%d바이트를 '%s'에서 읽을 수 없습니다: %s"
-#: ../app/core/gimpbrush-load.c:200
+#: ../app/core/gimpbrush-load.c:202
#, c-format
msgid "Fatal parse error in brush file '%s': Width = 0."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: Width = 0."
-#: ../app/core/gimpbrush-load.c:209
+#: ../app/core/gimpbrush-load.c:211
#, c-format
msgid "Fatal parse error in brush file '%s': Height = 0."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: Height = 0."
-#: ../app/core/gimpbrush-load.c:218
+#: ../app/core/gimpbrush-load.c:220
#, c-format
msgid "Fatal parse error in brush file '%s': Bytes = 0."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: Bytes = 0."
-#: ../app/core/gimpbrush-load.c:242
+#: ../app/core/gimpbrush-load.c:244
#, c-format
msgid "Fatal parse error in brush file '%s': Unknown depth %d."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: 알 수 없는 깊이 %d."
-#: ../app/core/gimpbrush-load.c:255
+#: ../app/core/gimpbrush-load.c:257
#, c-format
msgid "Fatal parse error in brush file '%s': Unknown version %d."
msgstr "붓 파일 '%s'에 쳐명적인 해석 오류: 알 수 없는 버전 %d."
-#: ../app/core/gimpbrush-load.c:271 ../app/core/gimpbrush-load.c:391
-#: ../app/core/gimpbrush-load.c:725
+#: ../app/core/gimpbrush-load.c:273 ../app/core/gimpbrush-load.c:393
+#: ../app/core/gimpbrush-load.c:727
#, c-format
msgid "Fatal parse error in brush file '%s': File appears truncated."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: 파일이 잘린 것 같습니다."
-#: ../app/core/gimpbrush-load.c:279 ../app/core/gimpbrushgenerated-load.c:128
+#: ../app/core/gimpbrush-load.c:281 ../app/core/gimpbrushgenerated-load.c:128
#: ../app/core/gimpbrushpipe-load.c:97
#, c-format
msgid "Invalid UTF-8 string in brush file '%s'."
msgstr "붓 파일 '%s'에 잘못된 UTF-8 문자열이 있습니다."
-#: ../app/core/gimpbrush-load.c:286 ../app/core/gimppattern-load.c:146
+#: ../app/core/gimpbrush-load.c:288 ../app/core/gimppattern-load.c:146
#: ../app/dialogs/template-options-dialog.c:83
#: ../app/tools/gimpvectortool.c:317
msgid "Unnamed"
msgstr "이름없음"
-#: ../app/core/gimpbrush-load.c:380
+#: ../app/core/gimpbrush-load.c:382
#, c-format
msgid ""
"Fatal parse error in brush file '%s': Unsupported brush depth %d\n"
@@ -7456,13 +7456,13 @@ msgstr ""
"붓 파일 '%s'에 치명적인 해석 오류: 지원되지 않는 심도 %d\n"
"김프 붓은 GRAY나 RGBA여야 합니다."
-#: ../app/core/gimpbrush-load.c:452
+#: ../app/core/gimpbrush-load.c:454 ../app/core/gimpbrush-load.c:854
#, c-format
msgid ""
"Fatal parse error in brush file '%s': unable to decode abr format version %d."
msgstr "붓 파일 '%s'에 치명적인 해석 오류: 알 수 없는 버전 %d."
-#: ../app/core/gimpbrush-load.c:619
+#: ../app/core/gimpbrush-load.c:621
#, c-format
msgid "Fatal parse error in brush file '%s': Wide brushes are not supported."
msgstr ""
@@ -7778,7 +7778,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"데이터 읽기 실패:\n"
+"데이터를 불러오는데 실패했습니다:\n"
"\n"
"%s"
@@ -8295,7 +8295,7 @@ msgstr "미리보기를 만들려면 클릭하십시오."
#: ../app/core/gimpimagefile.c:743
msgid "Loading preview..."
-msgstr "미리보기 읽는 중..."
+msgstr "미리보기 불러오는 중..."
#: ../app/core/gimpimagefile.c:749
msgid "Preview is out of date"
@@ -8348,10 +8348,8 @@ msgid "Set Item Exclusive Visible"
msgstr "항목을 배타적으로 표시"
#: ../app/core/gimpitem-exclusive.c:172
-#, fuzzy
-#| msgid "Set Item Exclusive Visible"
msgid "Set Item Exclusive Linked"
-msgstr "항목을 배타적으로 표시"
+msgstr "항목을 배타적으로 연결한 것으로 설정"
#: ../app/core/gimplayer-floating-sel.c:95
msgctxt "undo-type"
@@ -8678,7 +8676,7 @@ msgstr "따라 그리기할 선택이 없습니다."
#: ../app/core/gimpselection.c:670
msgid "Unable to cut or copy because the selected region is empty."
-msgstr "선택한 영역이 비어있으므로, 잘라넣기나 복사를 할 수 없습니다."
+msgstr "선택한 영역이 비어있으므로, 잘라내기나 복사를 할 수 없습니다."
#: ../app/core/gimpselection.c:847
msgid "Cannot float selection because the selected region is empty."
@@ -10546,37 +10544,37 @@ msgstr[0] "이미지를 저장하지 않을 경우, %d 분 이전에 바뀐 내
msgid "The image has been exported to '%s'."
msgstr "이미지가 '%s'(으)로 내보내졌습니다."
-#: ../app/display/gimpdisplayshell-dnd.c:232
-#: ../app/display/gimpdisplayshell-dnd.c:635
-#: ../app/display/gimpdisplayshell-dnd.c:693
+#: ../app/display/gimpdisplayshell-dnd.c:246
+#: ../app/display/gimpdisplayshell-dnd.c:649
+#: ../app/display/gimpdisplayshell-dnd.c:707
msgid "Drop New Layer"
msgstr "새 레이어 끌어서-놓기"
-#: ../app/display/gimpdisplayshell-dnd.c:275
+#: ../app/display/gimpdisplayshell-dnd.c:289
msgid "Drop New Path"
msgstr "새 경로 끌어서-놓기"
-#: ../app/display/gimpdisplayshell-dnd.c:347
-#: ../app/display/gimpdisplayshell-dnd.c:449 ../app/tools/gimpblendtool.c:173
-#: ../app/tools/gimpbucketfilltool.c:136 ../app/tools/gimpimagemaptool.c:279
+#: ../app/display/gimpdisplayshell-dnd.c:361
+#: ../app/display/gimpdisplayshell-dnd.c:463 ../app/tools/gimpblendtool.c:173
+#: ../app/tools/gimpbucketfilltool.c:136 ../app/tools/gimpimagemaptool.c:280
msgid "Cannot modify the pixels of layer groups."
msgstr "레이어 그룹의 픽셀을 바꿀 수 없습니다."
-#: ../app/display/gimpdisplayshell-dnd.c:355
-#: ../app/display/gimpdisplayshell-dnd.c:457 ../app/tools/gimpblendtool.c:180
+#: ../app/display/gimpdisplayshell-dnd.c:369
+#: ../app/display/gimpdisplayshell-dnd.c:471 ../app/tools/gimpblendtool.c:180
#: ../app/tools/gimpbucketfilltool.c:143 ../app/tools/gimpcroptool.c:325
-#: ../app/tools/gimpimagemaptool.c:286 ../app/tools/gimppainttool.c:266
-#: ../app/tools/gimptransformtool.c:246 ../app/tools/gimptransformtool.c:1066
+#: ../app/tools/gimpimagemaptool.c:287 ../app/tools/gimppainttool.c:266
+#: ../app/tools/gimptransformtool.c:247 ../app/tools/gimptransformtool.c:1067
msgid "The active layer's pixels are locked."
msgstr "활성 레이어의 픽셀이 잠겼습니다."
-#: ../app/display/gimpdisplayshell-dnd.c:535
+#: ../app/display/gimpdisplayshell-dnd.c:549
#: ../app/widgets/gimplayertreeview.c:725
msgid "Drop layers"
msgstr "레이어 삭제"
-#: ../app/display/gimpdisplayshell-dnd.c:668
-#: ../app/display/gimpdisplayshell-dnd.c:685
+#: ../app/display/gimpdisplayshell-dnd.c:682
+#: ../app/display/gimpdisplayshell-dnd.c:699
#: ../app/widgets/gimplayertreeview.c:802 ../app/widgets/gimptoolbox-dnd.c:266
msgid "Dropped Buffer"
msgstr "버퍼 삭제"
@@ -11863,7 +11861,7 @@ msgctxt "command"
msgid "Select by Color"
msgstr "색상으로 선택"
-#: ../app/tools/gimpcagetool.c:152 ../app/tools/gimpcagetool.c:1154
+#: ../app/tools/gimpcagetool.c:152 ../app/tools/gimpcagetool.c:1155
msgid "Cage Transform"
msgstr "Cage 변형"
@@ -11875,15 +11873,15 @@ msgstr "골조 변형: 골조로 선택영역 변형"
msgid "_Cage Transform"
msgstr "_Cage 변형"
-#: ../app/tools/gimpcagetool.c:351
+#: ../app/tools/gimpcagetool.c:352
msgid "Press ENTER to commit the transform"
msgstr "변형을 승인하려면 엔터를 누르십시오."
-#: ../app/tools/gimpcagetool.c:1095
+#: ../app/tools/gimpcagetool.c:1096
msgid "Computing Cage Coefficients"
msgstr "Cage 계수 계산"
-#: ../app/tools/gimpcagetool.c:1272
+#: ../app/tools/gimpcagetool.c:1273
msgid "Cage transform"
msgstr "Cage 변형"
@@ -12540,19 +12538,19 @@ msgstr "물체 선택영역 도구: 물체를 포함한 영역을 선택합니
msgid "F_oreground Select"
msgstr "전경 선택(_O)"
-#: ../app/tools/gimpforegroundselecttool.c:302
+#: ../app/tools/gimpforegroundselecttool.c:304
msgid "Add more strokes or press Enter to accept the selection"
msgstr "스트로크를 추가하거나 엔터를 눌러 선택을 만드십시오."
-#: ../app/tools/gimpforegroundselecttool.c:304
+#: ../app/tools/gimpforegroundselecttool.c:306
msgid "Mark foreground by painting on the object to extract"
msgstr "추출할 물체를 칠해서 선택합니다."
-#: ../app/tools/gimpforegroundselecttool.c:309
+#: ../app/tools/gimpforegroundselecttool.c:311
msgid "Roughly outline the object to extract"
msgstr "추출할 물체 주변을 따라 선을 대강 긋습니다."
-#: ../app/tools/gimpforegroundselecttool.c:751
+#: ../app/tools/gimpforegroundselecttool.c:753
msgctxt "command"
msgid "Foreground Select"
msgstr "물체 선택"
@@ -12742,7 +12740,7 @@ msgstr "프리셋(_S):"
msgid "Settings saved to '%s'"
msgstr "'%s'(으)로 설정이 저장되었습니다."
-#: ../app/tools/gimpimagemaptool.c:362
+#: ../app/tools/gimpimagemaptool.c:363
msgid "_Preview"
msgstr "미리보기(_P)"
@@ -12811,32 +12809,32 @@ msgstr ""
msgid "Intelligent _Scissors"
msgstr "똑똑한 가위(_S)"
-#: ../app/tools/gimpiscissorstool.c:900 ../app/tools/gimpmeasuretool.c:605
+#: ../app/tools/gimpiscissorstool.c:902 ../app/tools/gimpmeasuretool.c:605
msgid "Click-Drag to move this point"
msgstr "이 점을 이동시키려면 클릭 후 드래그하십시오."
-#: ../app/tools/gimpiscissorstool.c:902 ../app/tools/gimpiscissorstool.c:967
+#: ../app/tools/gimpiscissorstool.c:904 ../app/tools/gimpiscissorstool.c:969
#, c-format
msgid "%s: disable auto-snap"
msgstr "%s: 자동으로 당겨맞추기 사용안함"
-#: ../app/tools/gimpiscissorstool.c:919
+#: ../app/tools/gimpiscissorstool.c:921
msgid "Click to close the curve"
msgstr "곡선을 닫으려면 클릭하십시오."
-#: ../app/tools/gimpiscissorstool.c:925
+#: ../app/tools/gimpiscissorstool.c:927
msgid "Click to add a point on this segment"
msgstr "이 구역에 점을 추가하려면 클릭하십시오."
-#: ../app/tools/gimpiscissorstool.c:939
+#: ../app/tools/gimpiscissorstool.c:941
msgid "Click or press Enter to convert to a selection"
msgstr "선택으로 변환하려면 클릭하거나 엔터를 누르십시오."
-#: ../app/tools/gimpiscissorstool.c:949
+#: ../app/tools/gimpiscissorstool.c:951
msgid "Press Enter to convert to a selection"
msgstr "선택으로 변환하려면 엔터를 누르십시오."
-#: ../app/tools/gimpiscissorstool.c:964
+#: ../app/tools/gimpiscissorstool.c:966
msgid "Click or Click-Drag to add a point"
msgstr "지점을 추가하려면 클릭하거나 클릭 후 드래그하십시오."
@@ -13755,19 +13753,19 @@ msgstr "종횡비 유지 (%s)"
msgid "Keep the original aspect ratio"
msgstr "원본 종횡비 유지"
-#: ../app/tools/gimptransformtool.c:212
+#: ../app/tools/gimptransformtool.c:213
msgid "Transforming"
msgstr "변형 중"
-#: ../app/tools/gimptransformtool.c:1065
+#: ../app/tools/gimptransformtool.c:1066
msgid "There is no layer to transform."
msgstr "변형할 레이어가 없습니다."
-#: ../app/tools/gimptransformtool.c:1078
+#: ../app/tools/gimptransformtool.c:1079
msgid "There is no path to transform."
msgstr "변형할 경로가 없습니다."
-#: ../app/tools/gimptransformtool.c:1079
+#: ../app/tools/gimptransformtool.c:1080
msgid "The active path's strokes are locked."
msgstr "활성 레이어의 스트로크가 잠겨 있습니다."
@@ -14835,23 +14833,35 @@ msgstr "메시지는 stderr로 보내집니다."
msgid "%s Message"
msgstr "%s 메시지"
-#: ../app/widgets/gimpfiledialog.c:327
+#: ../app/widgets/gimpfiledialog.c:330
msgid "Automatically Detected"
msgstr "자동 검출"
-#: ../app/widgets/gimpfiledialog.c:344
+#: ../app/widgets/gimpfiledialog.c:347
msgid "By Extension"
msgstr "확장자로"
-#: ../app/widgets/gimpfiledialog.c:793
+#: ../app/widgets/gimpfiledialog.c:798
msgid "All files"
msgstr "모든 파일"
-#: ../app/widgets/gimpfiledialog.c:798
+#: ../app/widgets/gimpfiledialog.c:803
msgid "All images"
msgstr "모든 이미지"
-#: ../app/widgets/gimpfiledialog.c:974
+#: ../app/widgets/gimpfiledialog.c:810
+#, fuzzy
+#| msgid "All images"
+msgid "All XCF images"
+msgstr "모든 이미지"
+
+#: ../app/widgets/gimpfiledialog.c:812
+#, fuzzy
+#| msgid "All images"
+msgid "All export images"
+msgstr "모든 이미지"
+
+#: ../app/widgets/gimpfiledialog.c:996
#, c-format
msgid "Select File _Type (%s)"
msgstr "파일 유형 선택(_T) (%s)"
diff --git "a/q\033\033\033:q" "b/q\033\033\033:q"
new file mode 100644
index 0000000..9b18cc4
--- /dev/null
+++ "b/q\033\033\033:q"
@@ -0,0 +1,47 @@
+diff --git a/app/dialogs/Makefile.am b/app/dialogs/Makefile.am
+index a76dc7e..3c2f649 100644
+--- a/app/dialogs/Makefile.am
++++ b/app/dialogs/Makefile.am
+@@ -20,11 +20,8 @@ libappdialogs_a_sources = \
+ dialogs.h \
+ dialogs-constructors.c \
+ dialogs-constructors.h \
+- \
+ about-dialog.c \
+ about-dialog.h \
+- tito-dialog.c \
+- tito-dialog.h \
+ channel-options-dialog.c \
+ channel-options-dialog.h \
+ convert-type-dialog.c \
+@@ -84,6 +81,8 @@ libappdialogs_a_sources = \
+ tips-dialog.h \
+ tips-parser.c \
+ tips-parser.h \
++ tito-dialog.c \
++ tito-dialog.h \
+ user-install-dialog.c \
+ user-install-dialog.h \
+ vectors-export-dialog.c \
+diff --git a/app/dialogs/tito-dialog.c b/app/dialogs/tito-dialog.c
+index e16bd1f..8cc9b50 100644
+--- a/app/dialogs/tito-dialog.c
++++ b/app/dialogs/tito-dialog.c
+@@ -566,7 +566,8 @@ fuzzy_search ( gchar *string,
+ 
+ if ( (remaining_string = strchr(string, key[0])) != NULL )
+ fuzzy_search( key+1, remaining_string+1 );
+- return FALSE;
++ else
++ return FALSE;
+ }
+ 
+ static gboolean
+@@ -600,6 +601,7 @@ tito_is_action_match ( GtkAction *action,
+ 
+ if(strstr(label,key))
+ return TRUE;
++
+ if(fuzzy_search(label,key))
+ return TRUE;
+ 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment