void tool_manager_select_tool (Gimp *gimp, GimpTool *tool) { GimpToolManager *tool_manager; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_TOOL (tool)); tool_manager = tool_manager_get (gimp); if (tool_manager->active_tool) { GimpTool *active_tool = tool_manager->active_tool; GimpDisplay *display; /* NULL image returns any display (if there is any) */ display = gimp_tool_has_image (active_tool, NULL); tool_manager_control_active (gimp, GIMP_TOOL_ACTION_HALT, display); tool_manager_focus_display_active (gimp, NULL); g_object_unref (tool_manager->active_tool); } tool_manager->active_tool = g_object_ref (tool); }
static void tool_manager_select_tool (Gimp *gimp, GimpTool *tool) { GimpToolManager *tool_manager; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_TOOL (tool)); tool_manager = tool_manager_get (gimp); /* reset the previously selected tool, but only if it is not only * temporarily pushed to the tool stack */ if (tool_manager->active_tool && ! (tool_manager->tool_stack && tool_manager->active_tool == tool_manager->tool_stack->data)) { GimpTool *active_tool = tool_manager->active_tool; GimpDisplay *display; /* NULL image returns any display (if there is any) */ display = gimp_tool_has_image (active_tool, NULL); tool_manager_control_active (gimp, GIMP_TOOL_ACTION_HALT, display); tool_manager_focus_display_active (gimp, NULL); g_object_unref (tool_manager->active_tool); } tool_manager->active_tool = g_object_ref (tool); }
static void tool_manager_image_saving (GimpImage *image, GimpToolManager *tool_manager) { GimpTool *tool = tool_manager->active_tool; if (tool && ! gimp_tool_control_get_preserve (tool->control)) { GimpDisplay *display = gimp_tool_has_image (tool, image); if (display) tool_manager_control_active (image->gimp, GIMP_TOOL_ACTION_COMMIT, display); } }
static void tool_manager_image_clean_dirty (GimpImage *image, GimpDirtyMask dirty_mask, GimpToolManager *tool_manager) { GimpTool *tool = tool_manager->active_tool; if (tool && ! gimp_tool_control_get_preserve (tool->control) && (gimp_tool_control_get_dirty_mask (tool->control) & dirty_mask)) { GimpDisplay *display = gimp_tool_has_image (tool, image); if (display) tool_manager_control_active (image->gimp, GIMP_TOOL_ACTION_HALT, display); } }
static void tool_manager_tool_changed (GimpContext *user_context, GimpToolInfo *tool_info, GimpToolManager *tool_manager) { GimpTool *new_tool = NULL; if (! tool_info) return; /* FIXME: gimp_busy HACK */ if (user_context->gimp->busy) { /* there may be contexts waiting for the user_context's "tool-changed" * signal, so stop emitting it. */ g_signal_stop_emission_by_name (user_context, "tool-changed"); if (G_TYPE_FROM_INSTANCE (tool_manager->active_tool) != tool_info->tool_type) { g_signal_handlers_block_by_func (user_context, tool_manager_tool_changed, tool_manager); /* explicitly set the current tool */ gimp_context_set_tool (user_context, tool_manager->active_tool->tool_info); g_signal_handlers_unblock_by_func (user_context, tool_manager_tool_changed, tool_manager); } return; } if (g_type_is_a (tool_info->tool_type, GIMP_TYPE_TOOL)) { new_tool = g_object_new (tool_info->tool_type, "tool-info", tool_info, NULL); } else { g_warning ("%s: tool_info->tool_type is no GimpTool subclass", G_STRFUNC); return; } if (tool_manager->active_tool) { GimpTool *active_tool = tool_manager->active_tool; GimpDisplay *display; /* NULL image returns any display (if there is any) */ display = gimp_tool_has_image (active_tool, NULL); /* commit the old tool's operation */ if (display) tool_manager_control_active (user_context->gimp, GIMP_TOOL_ACTION_COMMIT, display); /* disconnect the old tool's context */ if (active_tool->tool_info) { tool_manager_disconnect_options (tool_manager, user_context, active_tool->tool_info); } } /* connect the new tool's context */ tool_manager_connect_options (tool_manager, user_context, tool_info); tool_manager_select_tool (user_context->gimp, new_tool); g_object_unref (new_tool); }