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>
* plug-ins/faxg3/faxg3.c (query): changed the magic string to

View file

@ -37,29 +37,44 @@
#include "gimp-intl.h"
#define CHANNEL_WAS_ACTIVE (0x2)
/* public functions */
void
gimp_image_set_quick_mask_state (GimpImage *image,
gboolean quick_mask_state)
gboolean active)
{
GimpChannel *selection;
GimpChannel *mask;
gboolean channel_was_active;
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;
/* set image->quick_mask_state early so we can return early when
* being called recursively
/* Keep track of the state so that we can make the right drawable
* 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);
mask = gimp_image_get_quick_mask (image);
if (quick_mask_state)
if (active)
{
if (! mask)
{
@ -125,6 +140,9 @@ gimp_image_set_quick_mask_state (GimpImage *image,
gimp_selection_load (gimp_image_get_mask (image), mask);
gimp_image_remove_channel (image, mask);
if (! channel_was_active)
gimp_image_unset_active_channel (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);
return image->quick_mask_state;
return (image->quick_mask_state != 0);
}
void

View file

@ -27,7 +27,7 @@
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);
void gimp_image_set_quick_mask_color (GimpImage *image,