Most lengthy UI-blocking operations now put up an hourglass so the user

Sun Jan 10 23:31:45 GMT 1999 Adam D. Moss <adam@gimp.org>

	* app/blend.c app/bucket_fill.c app/convert.c app/crop.c
	app/cursorutil.c app/cursorutil.h app/fuzzy_select.c
	app/gdisplay.c app/gdisplay.h app/gimage_cmds.c
	app/gimpimage.c app/transform_core.c app/xcf.c:

	Most lengthy UI-blocking operations now put up an
	hourglass so the user can see that GIMP is working.
	Let me know if there are other vital cases.
This commit is contained in:
GMT 1999 Adam D. Moss 1999-01-10 23:36:29 +00:00 committed by Adam D. Moss
parent 01d2a20548
commit bf0dbb2018
41 changed files with 501 additions and 10 deletions

View File

@ -1,3 +1,14 @@
Sun Jan 10 23:31:45 GMT 1999 Adam D. Moss <adam@gimp.org>
* app/blend.c app/bucket_fill.c app/convert.c app/crop.c
app/cursorutil.c app/cursorutil.h app/fuzzy_select.c
app/gdisplay.c app/gdisplay.h app/gimage_cmds.c
app/gimpimage.c app/transform_core.c app/xcf.c:
Most lengthy UI-blocking operations now put up an
hourglass so the user can see that GIMP is working.
Let me know if there are other vital cases.
Sun Jan 10 22:41:51 GMT 1999 Andy Thomas <alt@picnic.demon.co.uk>
New

View File

@ -23,6 +23,7 @@
#include "blend.h"
#include "brush_select.h"
#include "buildmenu.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "errors.h"
@ -788,6 +789,8 @@ blend (GImage *gimage,
int bytes;
int x1, y1, x2, y2;
gimp_add_busy_cursors();
has_selection = drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
has_alpha = drawable_has_alpha (drawable);
@ -819,6 +822,8 @@ blend (GImage *gimage,
/* free the temporary buffer */
tile_manager_destroy (buf_tiles);
gimp_remove_busy_cursors();
}

View File

@ -19,6 +19,7 @@
#include "appenv.h"
#include "brush_select.h"
#include "bucket_fill.h"
#include "cursorutil.h"
#include "drawable.h"
#include "fuzzy_select.h"
#include "gdisplay.h"
@ -460,6 +461,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
pat_buf = pattern->mask;
}
gimp_add_busy_cursors();
bytes = drawable_bytes (drawable);
has_alpha = drawable_has_alpha (drawable);
@ -533,6 +536,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
if (new_buf)
temp_buf_free (pat_buf);
gimp_remove_busy_cursors();
}

View File

@ -27,6 +27,8 @@
*/
/*
* 99/01/10 - Hourglass... [Adam]
*
* 98/07/25 - Convert-to-indexed now remembers the last invocation's
* settings. Also, GRAY->INDEXED more flexible. [Adam]
*
@ -70,6 +72,7 @@
#include "appenv.h"
#include "actionarea.h"
#include "convert.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "fsdither.h"
@ -734,6 +737,8 @@ convert_image (GImage *gimage,
new_layer_type = RGBA_GIMAGE;
new_layer_bytes = 4;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimage_floating_sel (gimage);
@ -913,6 +918,8 @@ convert_image (GImage *gimage,
gdisplays_update_full (gimage);
gimp_image_colormap_changed (gimage, -1);
gimp_remove_busy_cursors();
}
static void

View File

@ -23,6 +23,7 @@
#include "blend.h"
#include "brush_select.h"
#include "buildmenu.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "errors.h"
@ -788,6 +789,8 @@ blend (GImage *gimage,
int bytes;
int x1, y1, x2, y2;
gimp_add_busy_cursors();
has_selection = drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
has_alpha = drawable_has_alpha (drawable);
@ -819,6 +822,8 @@ blend (GImage *gimage,
/* free the temporary buffer */
tile_manager_destroy (buf_tiles);
gimp_remove_busy_cursors();
}

View File

@ -27,6 +27,8 @@
*/
/*
* 99/01/10 - Hourglass... [Adam]
*
* 98/07/25 - Convert-to-indexed now remembers the last invocation's
* settings. Also, GRAY->INDEXED more flexible. [Adam]
*
@ -70,6 +72,7 @@
#include "appenv.h"
#include "actionarea.h"
#include "convert.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "fsdither.h"
@ -734,6 +737,8 @@ convert_image (GImage *gimage,
new_layer_type = RGBA_GIMAGE;
new_layer_bytes = 4;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimage_floating_sel (gimage);
@ -913,6 +918,8 @@ convert_image (GImage *gimage,
gdisplays_update_full (gimage);
gimp_image_colormap_changed (gimage, -1);
gimp_remove_busy_cursors();
}
static void

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -118,6 +118,7 @@ gdisplay_new (GimpImage *gimage,
gdisp->draw_cursor = FALSE;
gdisp->proximity = FALSE;
gdisp->have_cursor = FALSE;
gdisp->using_override_cursor = FALSE;
gdisp->progressid = FALSE;
@ -384,6 +385,8 @@ idlerender_callback (gpointer data)
{
/* FINISHED */
gdisp->idle_render.active = FALSE;
/* gdisplay_remove_override_cursor (gdisp);*/
return 0;
}
}
@ -400,6 +403,8 @@ gdisplay_idlerender_init (GDisplay *gdisp)
GSList *list;
GArea *ga, *new_ga;
/* gdisplay_install_override_cursor(gdisp, GDK_CIRCLE); */
/* We need to merge the IdleRender's and the GDisplay's update_areas list
to keep track of which of the updates have been flushed and hence need
to be drawn. */
@ -1305,11 +1310,49 @@ gdisplay_install_tool_cursor (GDisplay *gdisp,
if (gdisp->current_cursor != cursor_type)
{
gdisp->current_cursor = cursor_type;
if (!gdisp->using_override_cursor)
{
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
}
/* install an override-cursor on gdisplay... */
void
gdisplay_install_override_cursor (GDisplay *gdisp,
GdkCursorType cursor_type)
{
if ((!gdisp->using_override_cursor) ||
(
(gdisp->using_override_cursor) &&
(gdisp->override_cursor != cursor_type)
)
)
{
gdisp->override_cursor = cursor_type;
gdisp->using_override_cursor = TRUE;
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
/* remove an override-cursor from gdisplay... */
void
gdisplay_remove_override_cursor (GDisplay *gdisp)
{
if (gdisp->using_override_cursor)
{
gdisp->using_override_cursor = FALSE;
change_win_cursor (gdisp->canvas->window, gdisp->current_cursor);
}
else
{
g_warning ("Tried to remove override-cursor from un-overridden gdisp.");
}
}
void
gdisplay_remove_tool_cursor (GDisplay *gdisp)
{

View File

@ -127,11 +127,13 @@ struct _GDisplay
GSList *display_areas; /* Display areas list */
GdkCursorType current_cursor; /* Currently installed cursor */
GdkCursorType override_cursor; /* Overriding cursor (ie. hourglass) */
short draw_cursor; /* should we draw software cursor ? */
short draw_cursor; /* should we draw software cursor ? */
short using_override_cursor; /* is the cursor overridden? (ie. hourglass)*/
int cursor_x; /* software cursor X value */
int cursor_y; /* software cursor Y value */
short proximity; /* is a device in proximity of gdisplay ? */
short proximity; /* is a device in proximity of gdisplay ? */
short have_cursor; /* is cursor currently drawn ? */
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
@ -154,6 +156,8 @@ void gdisplay_untransform_coords_f (GDisplay *, double, double, double *
double *, int);
void gdisplay_install_tool_cursor (GDisplay *, GdkCursorType);
void gdisplay_remove_tool_cursor (GDisplay *);
void gdisplay_install_override_cursor(GDisplay *, GdkCursorType);
void gdisplay_remove_override_cursor (GDisplay *);
void gdisplay_set_menu_sensitivity (GDisplay *);
void gdisplay_expose_area (GDisplay *, int, int, int, int);
void gdisplay_expose_guide (GDisplay *, Guide *);

View File

@ -20,6 +20,7 @@
#include "gdk/gdkkeysyms.h"
#include "appenv.h"
#include "actionarea.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "floating_sel.h"
@ -638,12 +639,15 @@ crop_image (GImage *gimage,
int off_x, off_y;
int doff_x, doff_y;
width = x2 - x1;
height = y2 - y1;
/* Make sure new width and height are non-zero */
if (width && height)
{
gimp_add_busy_cursors();
if (options.layer_only)
{
undo_push_group_start (gimage, LAYER_RESIZE_UNDO);
@ -747,6 +751,7 @@ crop_image (GImage *gimage,
gdisplays_update_full (gimage);
gdisplays_shrink_wrap (gimage);
}
gimp_remove_busy_cursors();
gdisplays_flush ();
}
}

View File

@ -17,6 +17,9 @@
*/
#include "appenv.h"
#include "cursorutil.h"
#include "gdisplay.h" /* for gdisplay_*_override_cursor() */
extern GSList* display_list; /* It's in gdisplay.c, FYI */
void
change_win_cursor (win, cursortype)
@ -37,4 +40,33 @@ unset_win_cursor (win)
gdk_window_set_cursor (win, NULL);
}
void
gimp_add_busy_cursors (void)
{
GDisplay *gdisp;
GSList *list = display_list;
while (list)
{
gdisp = (GDisplay *) list->data;
gdisplay_install_override_cursor(gdisp, GDK_WATCH);
list = g_slist_next (list);
}
gdk_flush();
}
void
gimp_remove_busy_cursors (void)
{
GDisplay *gdisp;
GSList *list = display_list;
while (list)
{
gdisp = (GDisplay *) list->data;
gdisplay_remove_override_cursor(gdisp);
list = g_slist_next (list);
}
}

View File

@ -18,7 +18,10 @@
#ifndef __CURSORUTIL_H__
#define __CURSORUTIL_H__
void change_win_cursor(GdkWindow *, GdkCursorType);
void unset_win_cursor(GdkWindow *);
void change_win_cursor (GdkWindow *, GdkCursorType);
void unset_win_cursor (GdkWindow *);
void gimp_add_busy_cursors (void);
void gimp_remove_busy_cursors (void);
#endif /* __CURSORUTIL_H__ */

View File

@ -118,6 +118,7 @@ gdisplay_new (GimpImage *gimage,
gdisp->draw_cursor = FALSE;
gdisp->proximity = FALSE;
gdisp->have_cursor = FALSE;
gdisp->using_override_cursor = FALSE;
gdisp->progressid = FALSE;
@ -384,6 +385,8 @@ idlerender_callback (gpointer data)
{
/* FINISHED */
gdisp->idle_render.active = FALSE;
/* gdisplay_remove_override_cursor (gdisp);*/
return 0;
}
}
@ -400,6 +403,8 @@ gdisplay_idlerender_init (GDisplay *gdisp)
GSList *list;
GArea *ga, *new_ga;
/* gdisplay_install_override_cursor(gdisp, GDK_CIRCLE); */
/* We need to merge the IdleRender's and the GDisplay's update_areas list
to keep track of which of the updates have been flushed and hence need
to be drawn. */
@ -1305,11 +1310,49 @@ gdisplay_install_tool_cursor (GDisplay *gdisp,
if (gdisp->current_cursor != cursor_type)
{
gdisp->current_cursor = cursor_type;
if (!gdisp->using_override_cursor)
{
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
}
/* install an override-cursor on gdisplay... */
void
gdisplay_install_override_cursor (GDisplay *gdisp,
GdkCursorType cursor_type)
{
if ((!gdisp->using_override_cursor) ||
(
(gdisp->using_override_cursor) &&
(gdisp->override_cursor != cursor_type)
)
)
{
gdisp->override_cursor = cursor_type;
gdisp->using_override_cursor = TRUE;
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
/* remove an override-cursor from gdisplay... */
void
gdisplay_remove_override_cursor (GDisplay *gdisp)
{
if (gdisp->using_override_cursor)
{
gdisp->using_override_cursor = FALSE;
change_win_cursor (gdisp->canvas->window, gdisp->current_cursor);
}
else
{
g_warning ("Tried to remove override-cursor from un-overridden gdisp.");
}
}
void
gdisplay_remove_tool_cursor (GDisplay *gdisp)
{

View File

@ -127,11 +127,13 @@ struct _GDisplay
GSList *display_areas; /* Display areas list */
GdkCursorType current_cursor; /* Currently installed cursor */
GdkCursorType override_cursor; /* Overriding cursor (ie. hourglass) */
short draw_cursor; /* should we draw software cursor ? */
short draw_cursor; /* should we draw software cursor ? */
short using_override_cursor; /* is the cursor overridden? (ie. hourglass)*/
int cursor_x; /* software cursor X value */
int cursor_y; /* software cursor Y value */
short proximity; /* is a device in proximity of gdisplay ? */
short proximity; /* is a device in proximity of gdisplay ? */
short have_cursor; /* is cursor currently drawn ? */
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
@ -154,6 +156,8 @@ void gdisplay_untransform_coords_f (GDisplay *, double, double, double *
double *, int);
void gdisplay_install_tool_cursor (GDisplay *, GdkCursorType);
void gdisplay_remove_tool_cursor (GDisplay *);
void gdisplay_install_override_cursor(GDisplay *, GdkCursorType);
void gdisplay_remove_override_cursor (GDisplay *);
void gdisplay_set_menu_sensitivity (GDisplay *);
void gdisplay_expose_area (GDisplay *, int, int, int, int);
void gdisplay_expose_guide (GDisplay *, Guide *);

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "boundary.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "edit_selection.h"
@ -463,6 +464,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
GimpDrawable *drawable;
int use_offsets;
gimp_add_busy_cursors();
fuzzy_sel = (FuzzySelect *) tool->private;
gdisp = (GDisplay *) gdisp_ptr;
drawable = gimage_active_drawable (gdisp->gimage);
@ -501,6 +504,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
/* free boundary segments */
g_free (bsegs);
gimp_remove_busy_cursors();
return segs;
}

View File

@ -118,6 +118,7 @@ gdisplay_new (GimpImage *gimage,
gdisp->draw_cursor = FALSE;
gdisp->proximity = FALSE;
gdisp->have_cursor = FALSE;
gdisp->using_override_cursor = FALSE;
gdisp->progressid = FALSE;
@ -384,6 +385,8 @@ idlerender_callback (gpointer data)
{
/* FINISHED */
gdisp->idle_render.active = FALSE;
/* gdisplay_remove_override_cursor (gdisp);*/
return 0;
}
}
@ -400,6 +403,8 @@ gdisplay_idlerender_init (GDisplay *gdisp)
GSList *list;
GArea *ga, *new_ga;
/* gdisplay_install_override_cursor(gdisp, GDK_CIRCLE); */
/* We need to merge the IdleRender's and the GDisplay's update_areas list
to keep track of which of the updates have been flushed and hence need
to be drawn. */
@ -1305,11 +1310,49 @@ gdisplay_install_tool_cursor (GDisplay *gdisp,
if (gdisp->current_cursor != cursor_type)
{
gdisp->current_cursor = cursor_type;
if (!gdisp->using_override_cursor)
{
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
}
/* install an override-cursor on gdisplay... */
void
gdisplay_install_override_cursor (GDisplay *gdisp,
GdkCursorType cursor_type)
{
if ((!gdisp->using_override_cursor) ||
(
(gdisp->using_override_cursor) &&
(gdisp->override_cursor != cursor_type)
)
)
{
gdisp->override_cursor = cursor_type;
gdisp->using_override_cursor = TRUE;
change_win_cursor (gdisp->canvas->window, cursor_type);
}
}
/* remove an override-cursor from gdisplay... */
void
gdisplay_remove_override_cursor (GDisplay *gdisp)
{
if (gdisp->using_override_cursor)
{
gdisp->using_override_cursor = FALSE;
change_win_cursor (gdisp->canvas->window, gdisp->current_cursor);
}
else
{
g_warning ("Tried to remove override-cursor from un-overridden gdisp.");
}
}
void
gdisplay_remove_tool_cursor (GDisplay *gdisp)
{

View File

@ -127,11 +127,13 @@ struct _GDisplay
GSList *display_areas; /* Display areas list */
GdkCursorType current_cursor; /* Currently installed cursor */
GdkCursorType override_cursor; /* Overriding cursor (ie. hourglass) */
short draw_cursor; /* should we draw software cursor ? */
short draw_cursor; /* should we draw software cursor ? */
short using_override_cursor; /* is the cursor overridden? (ie. hourglass)*/
int cursor_x; /* software cursor X value */
int cursor_y; /* software cursor Y value */
short proximity; /* is a device in proximity of gdisplay ? */
short proximity; /* is a device in proximity of gdisplay ? */
short have_cursor; /* is cursor currently drawn ? */
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
@ -154,6 +156,8 @@ void gdisplay_untransform_coords_f (GDisplay *, double, double, double *
double *, int);
void gdisplay_install_tool_cursor (GDisplay *, GdkCursorType);
void gdisplay_remove_tool_cursor (GDisplay *);
void gdisplay_install_override_cursor(GDisplay *, GdkCursorType);
void gdisplay_remove_override_cursor (GDisplay *);
void gdisplay_set_menu_sensitivity (GDisplay *);
void gdisplay_expose_area (GDisplay *, int, int, int, int);
void gdisplay_expose_guide (GDisplay *, Guide *);

View File

@ -245,6 +245,8 @@ gimage_resize_invoker (Argument *args)
int new_width, new_height;
int offx, offy;
gimp_add_busy_cursors();
success = TRUE;
if (success)
{
@ -269,6 +271,8 @@ gimage_resize_invoker (Argument *args)
if (success)
gimage_resize (gimage, new_width, new_height, offx, offy);
gimp_remove_busy_cursors();
return procedural_db_return_args (&gimage_resize_proc, success);
}

View File

@ -27,6 +27,8 @@
*/
/*
* 99/01/10 - Hourglass... [Adam]
*
* 98/07/25 - Convert-to-indexed now remembers the last invocation's
* settings. Also, GRAY->INDEXED more flexible. [Adam]
*
@ -70,6 +72,7 @@
#include "appenv.h"
#include "actionarea.h"
#include "convert.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "fsdither.h"
@ -734,6 +737,8 @@ convert_image (GImage *gimage,
new_layer_type = RGBA_GIMAGE;
new_layer_bytes = 4;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimage_floating_sel (gimage);
@ -913,6 +918,8 @@ convert_image (GImage *gimage,
gdisplays_update_full (gimage);
gimp_image_colormap_changed (gimage, -1);
gimp_remove_busy_cursors();
}
static void

View File

@ -18,6 +18,7 @@
#include <string.h>
#include "gimpimageP.h"
#include "cursorutil.h"
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
@ -347,6 +348,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
Layer *floating_layer;
GSList *list;
gimp_add_busy_cursors();
g_assert (new_width > 0 && new_height > 0);
/* Get the floating layer if one exists */
@ -395,6 +398,8 @@ gimp_image_resize (GimpImage *gimage, int new_width, int new_height,
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -408,6 +413,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
int old_width, old_height;
int layer_width, layer_height;
gimp_add_busy_cursors();
/* Get the floating layer if one exists */
floating_layer = gimp_image_floating_sel (gimage);
@ -459,6 +466,8 @@ gimp_image_scale (GimpImage *gimage, int new_width, int new_height)
floating_sel_rigor (floating_layer, TRUE);
gtk_signal_emit (GTK_OBJECT (gimage), gimp_image_signals[RESIZE]);
gimp_remove_busy_cursors();
}
@ -1998,8 +2007,10 @@ gimp_image_merge_visible_layers (GimpImage *gimage, MergeType merge_type)
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else
@ -2018,6 +2029,8 @@ gimp_image_flatten (GimpImage *gimage)
GSList *merge_list = NULL;
Layer *layer;
gimp_add_busy_cursors();
layer_list = gimage->layers;
while (layer_list)
{
@ -2030,6 +2043,9 @@ gimp_image_flatten (GimpImage *gimage)
layer = gimp_image_merge_layers (gimage, merge_list, FlattenImage);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
@ -2069,8 +2085,10 @@ gimp_image_merge_down (GimpImage *gimage,
if (merge_list && merge_list->next)
{
gimp_add_busy_cursors();
layer = gimp_image_merge_layers (gimage, merge_list, merge_type);
g_slist_free (merge_list);
gimp_remove_busy_cursors();
return layer;
}
else

View File

@ -23,6 +23,7 @@
#include "blend.h"
#include "brush_select.h"
#include "buildmenu.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "errors.h"
@ -788,6 +789,8 @@ blend (GImage *gimage,
int bytes;
int x1, y1, x2, y2;
gimp_add_busy_cursors();
has_selection = drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
has_alpha = drawable_has_alpha (drawable);
@ -819,6 +822,8 @@ blend (GImage *gimage,
/* free the temporary buffer */
tile_manager_destroy (buf_tiles);
gimp_remove_busy_cursors();
}

View File

@ -19,6 +19,7 @@
#include "appenv.h"
#include "brush_select.h"
#include "bucket_fill.h"
#include "cursorutil.h"
#include "drawable.h"
#include "fuzzy_select.h"
#include "gdisplay.h"
@ -460,6 +461,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
pat_buf = pattern->mask;
}
gimp_add_busy_cursors();
bytes = drawable_bytes (drawable);
has_alpha = drawable_has_alpha (drawable);
@ -533,6 +536,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
if (new_buf)
temp_buf_free (pat_buf);
gimp_remove_busy_cursors();
}

View File

@ -20,6 +20,7 @@
#include "gdk/gdkkeysyms.h"
#include "appenv.h"
#include "actionarea.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "floating_sel.h"
@ -638,12 +639,15 @@ crop_image (GImage *gimage,
int off_x, off_y;
int doff_x, doff_y;
width = x2 - x1;
height = y2 - y1;
/* Make sure new width and height are non-zero */
if (width && height)
{
gimp_add_busy_cursors();
if (options.layer_only)
{
undo_push_group_start (gimage, LAYER_RESIZE_UNDO);
@ -747,6 +751,7 @@ crop_image (GImage *gimage,
gdisplays_update_full (gimage);
gdisplays_shrink_wrap (gimage);
}
gimp_remove_busy_cursors();
gdisplays_flush ();
}
}

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "boundary.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "edit_selection.h"
@ -463,6 +464,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
GimpDrawable *drawable;
int use_offsets;
gimp_add_busy_cursors();
fuzzy_sel = (FuzzySelect *) tool->private;
gdisp = (GDisplay *) gdisp_ptr;
drawable = gimage_active_drawable (gdisp->gimage);
@ -501,6 +504,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
/* free boundary segments */
g_free (bsegs);
gimp_remove_busy_cursors();
return segs;
}

View File

@ -23,6 +23,7 @@
#include "blend.h"
#include "brush_select.h"
#include "buildmenu.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "errors.h"
@ -788,6 +789,8 @@ blend (GImage *gimage,
int bytes;
int x1, y1, x2, y2;
gimp_add_busy_cursors();
has_selection = drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
has_alpha = drawable_has_alpha (drawable);
@ -819,6 +822,8 @@ blend (GImage *gimage,
/* free the temporary buffer */
tile_manager_destroy (buf_tiles);
gimp_remove_busy_cursors();
}

View File

@ -19,6 +19,7 @@
#include "appenv.h"
#include "brush_select.h"
#include "bucket_fill.h"
#include "cursorutil.h"
#include "drawable.h"
#include "fuzzy_select.h"
#include "gdisplay.h"
@ -460,6 +461,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
pat_buf = pattern->mask;
}
gimp_add_busy_cursors();
bytes = drawable_bytes (drawable);
has_alpha = drawable_has_alpha (drawable);
@ -533,6 +536,8 @@ bucket_fill (gimage, drawable, fill_mode, paint_mode,
if (new_buf)
temp_buf_free (pat_buf);
gimp_remove_busy_cursors();
}

View File

@ -20,6 +20,7 @@
#include "gdk/gdkkeysyms.h"
#include "appenv.h"
#include "actionarea.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "floating_sel.h"
@ -638,12 +639,15 @@ crop_image (GImage *gimage,
int off_x, off_y;
int doff_x, doff_y;
width = x2 - x1;
height = y2 - y1;
/* Make sure new width and height are non-zero */
if (width && height)
{
gimp_add_busy_cursors();
if (options.layer_only)
{
undo_push_group_start (gimage, LAYER_RESIZE_UNDO);
@ -747,6 +751,7 @@ crop_image (GImage *gimage,
gdisplays_update_full (gimage);
gdisplays_shrink_wrap (gimage);
}
gimp_remove_busy_cursors();
gdisplays_flush ();
}
}

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "boundary.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "edit_selection.h"
@ -463,6 +464,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
GimpDrawable *drawable;
int use_offsets;
gimp_add_busy_cursors();
fuzzy_sel = (FuzzySelect *) tool->private;
gdisp = (GDisplay *) gdisp_ptr;
drawable = gimage_active_drawable (gdisp->gimage);
@ -501,6 +504,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
/* free boundary segments */
g_free (bsegs);
gimp_remove_busy_cursors();
return segs;
}

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "boundary.h"
#include "cursorutil.h"
#include "draw_core.h"
#include "drawable.h"
#include "edit_selection.h"
@ -463,6 +464,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
GimpDrawable *drawable;
int use_offsets;
gimp_add_busy_cursors();
fuzzy_sel = (FuzzySelect *) tool->private;
gdisp = (GDisplay *) gdisp_ptr;
drawable = gimage_active_drawable (gdisp->gimage);
@ -501,6 +504,8 @@ fuzzy_select_calculate (Tool *tool, void *gdisp_ptr, int *nsegs)
/* free boundary segments */
g_free (bsegs);
gimp_remove_busy_cursors();
return segs;
}

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "actionarea.h"
#include "cursorutil.h"
#include "drawable.h"
#include "errors.h"
#include "floating_sel.h"
@ -343,6 +344,8 @@ transform_core_doit (tool, gdisp_ptr)
int new_layer;
int i, x, y;
gimp_add_busy_cursors();
gdisp = (GDisplay *) gdisp_ptr;
transform_core = (TransformCore *) tool->private;
@ -427,6 +430,9 @@ transform_core_doit (tool, gdisp_ptr)
gdisp->disp_width, gdisp->disp_height);
}
}
gimp_remove_busy_cursors();
gdisplays_flush ();
transform_core_reset (tool, gdisp_ptr);

View File

@ -19,6 +19,7 @@
#include <math.h>
#include "appenv.h"
#include "actionarea.h"
#include "cursorutil.h"
#include "drawable.h"
#include "errors.h"
#include "floating_sel.h"
@ -343,6 +344,8 @@ transform_core_doit (tool, gdisp_ptr)
int new_layer;
int i, x, y;
gimp_add_busy_cursors();
gdisp = (GDisplay *) gdisp_ptr;
transform_core = (TransformCore *) tool->private;
@ -427,6 +430,9 @@ transform_core_doit (tool, gdisp_ptr)
gdisp->disp_width, gdisp->disp_height);
}
}
gimp_remove_busy_cursors();
gdisplays_flush ();
transform_core_reset (tool, gdisp_ptr);

View File

@ -17,6 +17,9 @@
*/
#include "appenv.h"
#include "cursorutil.h"
#include "gdisplay.h" /* for gdisplay_*_override_cursor() */
extern GSList* display_list; /* It's in gdisplay.c, FYI */
void
change_win_cursor (win, cursortype)
@ -37,4 +40,33 @@ unset_win_cursor (win)
gdk_window_set_cursor (win, NULL);
}
void
gimp_add_busy_cursors (void)
{
GDisplay *gdisp;
GSList *list = display_list;
while (list)
{
gdisp = (GDisplay *) list->data;
gdisplay_install_override_cursor(gdisp, GDK_WATCH);
list = g_slist_next (list);
}
gdk_flush();
}
void
gimp_remove_busy_cursors (void)
{
GDisplay *gdisp;
GSList *list = display_list;
while (list)
{
gdisp = (GDisplay *) list->data;
gdisplay_remove_override_cursor(gdisp);
list = g_slist_next (list);
}
}

View File

@ -18,7 +18,10 @@
#ifndef __CURSORUTIL_H__
#define __CURSORUTIL_H__
void change_win_cursor(GdkWindow *, GdkCursorType);
void unset_win_cursor(GdkWindow *);
void change_win_cursor (GdkWindow *, GdkCursorType);
void unset_win_cursor (GdkWindow *);
void gimp_add_busy_cursors (void);
void gimp_remove_busy_cursors (void);
#endif /* __CURSORUTIL_H__ */

View File

@ -11,6 +11,7 @@
#include <glib.h>
#include <gtk/gtk.h>
#include "cursorutil.h"
#include "floating_sel.h"
#include "gimage.h"
#include "gimage_mask.h"
@ -300,6 +301,8 @@ xcf_load_invoker (Argument *args)
int success;
char id[14];
gimp_add_busy_cursors();
gimage = NULL;
success = FALSE;
@ -357,6 +360,8 @@ xcf_load_invoker (Argument *args)
if (success)
return_args[1].value.pdb_int = pdb_image_to_id(gimage);
gimp_remove_busy_cursors();
return return_args;
}
@ -369,6 +374,8 @@ xcf_save_invoker (Argument *args)
char *filename;
int success;
gimp_add_busy_cursors();
success = FALSE;
gimage = gimage_get_ID (args[1].value.pdb_int);
@ -400,6 +407,8 @@ xcf_save_invoker (Argument *args)
return_args = procedural_db_return_args (&xcf_plug_in_save_proc.db_info, success);
gimp_remove_busy_cursors();
return return_args;
}

View File

@ -11,6 +11,7 @@
#include <glib.h>
#include <gtk/gtk.h>
#include "cursorutil.h"
#include "floating_sel.h"
#include "gimage.h"
#include "gimage_mask.h"
@ -300,6 +301,8 @@ xcf_load_invoker (Argument *args)
int success;
char id[14];
gimp_add_busy_cursors();
gimage = NULL;
success = FALSE;
@ -357,6 +360,8 @@ xcf_load_invoker (Argument *args)
if (success)
return_args[1].value.pdb_int = pdb_image_to_id(gimage);
gimp_remove_busy_cursors();
return return_args;
}
@ -369,6 +374,8 @@ xcf_save_invoker (Argument *args)
char *filename;
int success;
gimp_add_busy_cursors();
success = FALSE;
gimage = gimage_get_ID (args[1].value.pdb_int);
@ -400,6 +407,8 @@ xcf_save_invoker (Argument *args)
return_args = procedural_db_return_args (&xcf_plug_in_save_proc.db_info, success);
gimp_remove_busy_cursors();
return return_args;
}