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:

committed by
Sven Neumann

parent
f1a5224a9b
commit
6b0e6990d1
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
Reference in New Issue
Block a user