Files
gimp/app/tools/tool_manager.h
Michael Natterer 868b8afbff Added new tool API for modifier key events while the tool is active and
2006-09-12  Michael Natterer  <mitch@gimp.org>

	Added new tool API for modifier key events while the tool
	is active and implement it in the rect select and crop tools.
	Fixes bug #316156 and bug #355302.

	* app/tools/gimptool.[ch]: added GimpTool::active_modifier_key()
	and public function gimp_tool_set_active_motifier_state(). Remember
	the active_state at button_press and reset it on button_release.
	Ignore releases of modifiers that were pressed at button_press (but
	only ignore them once).

	* app/tools/tool_manager.[ch]: added wrapper
	tool_manager_active_modifier_state_active().

	* app/display/gimpdisplayshell-callbacks.c
	(gimp_display_shell_events): return FALSE for all modifiers even
	when mouse button 1 is pressed.

	(gimp_display_shell_canvas_tool_events): when bouse button 1 is
	pressed *and* the tool is active, dispatch the new active_modifier
	events to tools.

	* app/tools/gimpcroptool.c
	* app/tools/gimprectangleselecttool.c
	* app/tools/gimprectangletool.[ch]: implement active_modifier_key()
	instead of modifier_key().
2006-09-12 18:41:09 +00:00

82 lines
4.5 KiB
C

/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __TOOL_MANAGER_H__
#define __TOOL_MANAGER_H__
void tool_manager_init (Gimp *gimp);
void tool_manager_exit (Gimp *gimp);
GimpTool * tool_manager_get_active (Gimp *gimp);
void tool_manager_select_tool (Gimp *gimp,
GimpTool *tool);
void tool_manager_push_tool (Gimp *gimp,
GimpTool *tool);
void tool_manager_pop_tool (Gimp *gimp);
gboolean tool_manager_initialize_active (Gimp *gimp,
GimpDisplay *display);
void tool_manager_control_active (Gimp *gimp,
GimpToolAction action,
GimpDisplay *display);
void tool_manager_button_press_active (Gimp *gimp,
GimpCoords *coords,
guint32 time,
GdkModifierType state,
GimpDisplay *display);
void tool_manager_button_release_active (Gimp *gimp,
GimpCoords *coords,
guint32 time,
GdkModifierType state,
GimpDisplay *display);
void tool_manager_motion_active (Gimp *gimp,
GimpCoords *coords,
guint32 time,
GdkModifierType state,
GimpDisplay *display);
gboolean tool_manager_key_press_active (Gimp *gimp,
GdkEventKey *kevent,
GimpDisplay *display);
void tool_manager_focus_display_active (Gimp *gimp,
GimpDisplay *display);
void tool_manager_modifier_state_active (Gimp *gimp,
GdkModifierType state,
GimpDisplay *display);
void tool_manager_active_modifier_state_active (Gimp *gimp,
GdkModifierType state,
GimpDisplay *display);
void tool_manager_oper_update_active (Gimp *gimp,
GimpCoords *coords,
GdkModifierType state,
gboolean proximity,
GimpDisplay *display);
void tool_manager_cursor_update_active (Gimp *gimp,
GimpCoords *coords,
GdkModifierType state,
GimpDisplay *display);
#endif /* __TOOL_MANAGER_H__ */