remember whether a channel was active before quick mask was activated.

2007-07-20  Sven Neumann  <sven@gimp.org>

	* app/core/gimpimage-quick-mask.[ch]: remember whether a channel
	was active before quick mask was activated. Fixes bug #134371.

svn path=/trunk/; revision=22961
This commit is contained in:
Sven Neumann
2007-07-20 08:23:29 +00:00
committed by Sven Neumann
parent f1a5224a9b
commit 6b0e6990d1
3 changed files with 31 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2007-07-20 Sven Neumann <sven@gimp.org>
* app/core/gimpimage-quick-mask.[ch]: remember whether a channel
was active before quick mask was activated. Fixes bug #134371.
2007-07-20 Raphaël Quinet <raphael@gimp.org> 2007-07-20 Raphaël Quinet <raphael@gimp.org>
* plug-ins/faxg3/faxg3.c (query): changed the magic string to * plug-ins/faxg3/faxg3.c (query): changed the magic string to

View File

@ -37,29 +37,44 @@
#include "gimp-intl.h" #include "gimp-intl.h"
#define CHANNEL_WAS_ACTIVE (0x2)
/* public functions */ /* public functions */
void void
gimp_image_set_quick_mask_state (GimpImage *image, gimp_image_set_quick_mask_state (GimpImage *image,
gboolean quick_mask_state) gboolean active)
{ {
GimpChannel *selection; GimpChannel *selection;
GimpChannel *mask; GimpChannel *mask;
gboolean channel_was_active;
g_return_if_fail (GIMP_IS_IMAGE (image)); g_return_if_fail (GIMP_IS_IMAGE (image));
if (quick_mask_state == image->quick_mask_state) if (active == gimp_image_get_quick_mask_state (image))
return; return;
/* set image->quick_mask_state early so we can return early when /* Keep track of the state so that we can make the right drawable
* being called recursively * active again when deactiviting quick mask (see bug #134371).
*/ */
image->quick_mask_state = quick_mask_state ? TRUE : FALSE; if (image->quick_mask_state)
channel_was_active = (image->quick_mask_state & CHANNEL_WAS_ACTIVE) != 0;
else
channel_was_active = gimp_image_get_active_channel (image) != NULL;
/* Set image->quick_mask_state early so we can return early when
* being called recursively.
*/
image->quick_mask_state = (active
? TRUE | (channel_was_active ?
CHANNEL_WAS_ACTIVE : 0)
: FALSE);
selection = gimp_image_get_mask (image); selection = gimp_image_get_mask (image);
mask = gimp_image_get_quick_mask (image); mask = gimp_image_get_quick_mask (image);
if (quick_mask_state) if (active)
{ {
if (! mask) if (! mask)
{ {
@ -125,6 +140,9 @@ gimp_image_set_quick_mask_state (GimpImage *image,
gimp_selection_load (gimp_image_get_mask (image), mask); gimp_selection_load (gimp_image_get_mask (image), mask);
gimp_image_remove_channel (image, mask); gimp_image_remove_channel (image, mask);
if (! channel_was_active)
gimp_image_unset_active_channel (image);
gimp_image_undo_group_end (image); gimp_image_undo_group_end (image);
} }
} }
@ -137,7 +155,7 @@ gimp_image_get_quick_mask_state (const GimpImage *image)
{ {
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE); g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
return image->quick_mask_state; return (image->quick_mask_state != 0);
} }
void void

View File

@ -27,7 +27,7 @@
void gimp_image_set_quick_mask_state (GimpImage *image, void gimp_image_set_quick_mask_state (GimpImage *image,
gboolean quick_mask_state); gboolean active);
gboolean gimp_image_get_quick_mask_state (const GimpImage *image); gboolean gimp_image_get_quick_mask_state (const GimpImage *image);
void gimp_image_set_quick_mask_color (GimpImage *image, void gimp_image_set_quick_mask_color (GimpImage *image,