app: change to the preset's tool when a tool preset is selected

but don't set any tool options yet because that is a lot more tricky.
This commit is contained in:
Michael Natterer 2010-04-20 20:11:37 +02:00
parent bb00c53bf5
commit d47aa2ba52
1 changed files with 48 additions and 8 deletions

View File

@ -20,6 +20,7 @@
#include <gegl.h>
#include <gtk/gtk.h>
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "tools-types.h"
@ -30,6 +31,7 @@
#include "core/gimplist.h"
#include "core/gimpimage.h"
#include "core/gimptoolinfo.h"
#include "core/gimptoolpreset.h"
#include "config/gimpcoreconfig.h"
@ -59,7 +61,10 @@ static void tool_manager_set (Gimp *gimp,
GimpToolManager *tool_manager);
static void tool_manager_tool_changed (GimpContext *user_context,
GimpToolInfo *tool_info,
gpointer data);
GimpToolManager *tool_manager);
static void tool_manager_preset_changed (GimpContext *user_context,
GimpToolPreset *preset,
GimpToolManager *tool_manager);
static void tool_manager_image_clean_dirty (GimpImage *image,
GimpDirtyMask dirty_mask,
GimpToolManager *tool_manager);
@ -99,18 +104,31 @@ tool_manager_init (Gimp *gimp)
g_signal_connect (user_context, "tool-changed",
G_CALLBACK (tool_manager_tool_changed),
tool_manager);
g_signal_connect (user_context, "tool-preset-changed",
G_CALLBACK (tool_manager_preset_changed),
tool_manager);
}
void
tool_manager_exit (Gimp *gimp)
{
GimpToolManager *tool_manager;
GimpContext *user_context;
g_return_if_fail (GIMP_IS_GIMP (gimp));
tool_manager = tool_manager_get (gimp);
tool_manager_set (gimp, NULL);
user_context = gimp_get_user_context (gimp);
g_signal_handlers_disconnect_by_func (user_context,
tool_manager_tool_changed,
tool_manager);
g_signal_handlers_disconnect_by_func (user_context,
tool_manager_preset_changed,
tool_manager);
gimp_container_remove_handler (gimp->images,
tool_manager->image_clean_handler_id);
gimp_container_remove_handler (gimp->images,
@ -526,9 +544,8 @@ tool_manager_set (Gimp *gimp,
static void
tool_manager_tool_changed (GimpContext *user_context,
GimpToolInfo *tool_info,
gpointer data)
GimpToolManager *tool_manager)
{
GimpToolManager *tool_manager = data;
GimpTool *new_tool = NULL;
if (! tool_info)
@ -547,7 +564,7 @@ tool_manager_tool_changed (GimpContext *user_context,
{
g_signal_handlers_block_by_func (user_context,
tool_manager_tool_changed,
data);
tool_manager);
/* explicitly set the current tool */
gimp_context_set_tool (user_context,
@ -555,7 +572,7 @@ tool_manager_tool_changed (GimpContext *user_context,
g_signal_handlers_unblock_by_func (user_context,
tool_manager_tool_changed,
data);
tool_manager);
}
return;
@ -620,6 +637,29 @@ tool_manager_tool_changed (GimpContext *user_context,
g_object_unref (new_tool);
}
static void
tool_manager_preset_changed (GimpContext *user_context,
GimpToolPreset *preset,
GimpToolManager *tool_manager)
{
GimpToolInfo *preset_tool;
if (! preset || user_context->gimp->busy)
return;
preset_tool = gimp_context_get_tool (GIMP_CONTEXT (preset->tool_options));
if (preset_tool != gimp_context_get_tool (user_context))
{
gimp_context_set_tool (user_context, preset_tool);
#if 0
gimp_config_copy (GIMP_CONFIG (preset->tool_options),
GIMP_CONFIG (preset_tool->tool_options), 0);
#endif
}
}
static void
tool_manager_image_clean_dirty (GimpImage *image,
GimpDirtyMask dirty_mask,