From 9ffed65563b1e9bf996d773517010bf2de4ae4e6 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Thu, 10 Feb 2000 21:54:12 +0000 Subject: [PATCH] removed the query boxes. 2000-02-10 Michael Natterer * app/gimpui.[ch]: removed the query boxes. * po-libgimp/POTFILES.in * libgimp/Makefile.am * libgimp/gimpui.h * libgimp/gimpquerybox.[ch]: new files. Added a boolean query box to get rid of all those handmade "yes/no" query dialogs. Changed the query box callback prototypes to return the entered value instead of a pointer to it. * app/commands.c * app/display_ops.c * app/gradient.c * app/palette.c * app/paths_dialog.c: correctly call the new query box functions and use the boolean query box instead of inventing this wheel over and over again. * app/global_edit.[ch]: same as above and cleaned up the public interface. --- ChangeLog | 23 ++ app/actions/help-commands.c | 86 +++--- app/commands.c | 86 +++--- app/core/gimp-edit.c | 333 +++++++++++----------- app/core/gimp-edit.h | 45 +-- app/core/gimpedit.c | 333 +++++++++++----------- app/core/gimpedit.h | 45 +-- app/display/gimpdisplay-ops.c | 104 +++---- app/gdisplay_ops.c | 104 +++---- app/gimpui.c | 372 +----------------------- app/gimpui.h | 63 +--- app/global_edit.c | 333 +++++++++++----------- app/global_edit.h | 45 +-- app/gradient.c | 84 ++---- app/gradient_editor.c | 84 ++---- app/gui/commands.c | 86 +++--- app/gui/gradient-editor.c | 84 ++---- app/gui/help-commands.c | 86 +++--- app/gui/palette-editor.c | 72 ++--- app/gui/paths-dialog.c | 11 +- app/palette.c | 72 ++--- app/paths_dialog.c | 11 +- app/widgets/gimpgradienteditor.c | 84 ++---- app/widgets/gimppaletteeditor.c | 72 ++--- app/widgets/gimpwidgets-utils.c | 372 +----------------------- app/widgets/gimpwidgets-utils.h | 63 +--- libgimp/Makefile.am | 4 + libgimp/gimpquerybox.c | 475 +++++++++++++++++++++++++++++++ libgimp/gimpquerybox.h | 119 ++++++++ libgimp/gimpui.h | 23 +- libgimpwidgets/gimpquerybox.c | 475 +++++++++++++++++++++++++++++++ libgimpwidgets/gimpquerybox.h | 119 ++++++++ po-libgimp/POTFILES.in | 1 + 33 files changed, 2238 insertions(+), 2131 deletions(-) create mode 100644 libgimp/gimpquerybox.c create mode 100644 libgimp/gimpquerybox.h create mode 100644 libgimpwidgets/gimpquerybox.c create mode 100644 libgimpwidgets/gimpquerybox.h diff --git a/ChangeLog b/ChangeLog index 50ad50eb47..2dcdd284a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2000-02-10 Michael Natterer + + * app/gimpui.[ch]: removed the query boxes. + + * po-libgimp/POTFILES.in + * libgimp/Makefile.am + * libgimp/gimpui.h + * libgimp/gimpquerybox.[ch]: new files. Added a boolean query box + to get rid of all those handmade "yes/no" query dialogs. Changed + the query box callback prototypes to return the entered value + instead of a pointer to it. + + * app/commands.c + * app/display_ops.c + * app/gradient.c + * app/palette.c + * app/paths_dialog.c: correctly call the new query box functions + and use the boolean query box instead of inventing this wheel over + and over again. + + * app/global_edit.[ch]: same as above and cleaned up the public + interface. + Thu Feb 10 17:20:05 CET 2000 Sven Neumann * app/gimage.c diff --git a/app/actions/help-commands.c b/app/actions/help-commands.c index 7846afb4f8..cbdf1cf10e 100644 --- a/app/actions/help-commands.c +++ b/app/actions/help-commands.c @@ -57,6 +57,8 @@ #include "undo.h" #include "config.h" + +#include "libgimp/gimpmath.h" #include "libgimp/gimpintl.h" #define return_if_no_display(gdisp) \ @@ -76,10 +78,14 @@ extern void layers_dialog_layer_merge_query (GImage *, gboolean); static void image_resize_callback (GtkWidget *, gpointer); static void image_scale_callback (GtkWidget *, gpointer); static void image_cancel_callback (GtkWidget *, gpointer); -static void gimage_mask_feather_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_border_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); /* local variables */ static gdouble selection_feather_radius = 5.0; @@ -1404,19 +1410,17 @@ image_cancel_callback (GtkWidget *widget, static void gimage_mask_feather_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_feather_radius = *(gdouble *) call_data; - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_feather_radius = size; radius_x = radius_y = selection_feather_radius; @@ -1439,19 +1443,17 @@ gimage_mask_feather_callback (GtkWidget *widget, static void gimage_mask_border_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_border_radius = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_border_radius = ROUND (size); radius_x = radius_y = selection_border_radius; @@ -1474,19 +1476,17 @@ gimage_mask_border_callback (GtkWidget *widget, static void gimage_mask_grow_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_grow_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_grow_pixels = ROUND (size); radius_x = radius_y = selection_grow_pixels; @@ -1509,19 +1509,17 @@ gimage_mask_grow_callback (GtkWidget *widget, static void gimage_mask_shrink_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gint radius_x; - gint radius_y; + GImage *gimage; + gint radius_x; + gint radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_shrink_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_shrink_pixels = ROUND (size); radius_x = radius_y = selection_shrink_pixels; diff --git a/app/commands.c b/app/commands.c index 7846afb4f8..cbdf1cf10e 100644 --- a/app/commands.c +++ b/app/commands.c @@ -57,6 +57,8 @@ #include "undo.h" #include "config.h" + +#include "libgimp/gimpmath.h" #include "libgimp/gimpintl.h" #define return_if_no_display(gdisp) \ @@ -76,10 +78,14 @@ extern void layers_dialog_layer_merge_query (GImage *, gboolean); static void image_resize_callback (GtkWidget *, gpointer); static void image_scale_callback (GtkWidget *, gpointer); static void image_cancel_callback (GtkWidget *, gpointer); -static void gimage_mask_feather_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_border_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); /* local variables */ static gdouble selection_feather_radius = 5.0; @@ -1404,19 +1410,17 @@ image_cancel_callback (GtkWidget *widget, static void gimage_mask_feather_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_feather_radius = *(gdouble *) call_data; - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_feather_radius = size; radius_x = radius_y = selection_feather_radius; @@ -1439,19 +1443,17 @@ gimage_mask_feather_callback (GtkWidget *widget, static void gimage_mask_border_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_border_radius = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_border_radius = ROUND (size); radius_x = radius_y = selection_border_radius; @@ -1474,19 +1476,17 @@ gimage_mask_border_callback (GtkWidget *widget, static void gimage_mask_grow_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_grow_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_grow_pixels = ROUND (size); radius_x = radius_y = selection_grow_pixels; @@ -1509,19 +1509,17 @@ gimage_mask_grow_callback (GtkWidget *widget, static void gimage_mask_shrink_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gint radius_x; - gint radius_y; + GImage *gimage; + gint radius_x; + gint radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_shrink_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_shrink_pixels = ROUND (size); radius_x = radius_y = selection_shrink_pixels; diff --git a/app/core/gimp-edit.c b/app/core/gimp-edit.c index e94e275266..9416320de9 100644 --- a/app/core/gimp-edit.c +++ b/app/core/gimp-edit.c @@ -59,35 +59,35 @@ typedef struct _named_buffer NamedBuffer; struct _named_buffer { - TileManager * buf; - char * name; + TileManager *buf; + gchar *name; }; /* The named buffer list */ -GSList * named_buffers = NULL; +static GSList *named_buffers = NULL; /* The global edit buffer */ -TileManager * global_buf = NULL; +TileManager *global_buf = NULL; /* Crop the buffer to the size of pixels with non-zero transparency */ TileManager * crop_buffer (TileManager *tiles, - int border) + gboolean border) { - PixelRegion PR; + PixelRegion PR; TileManager *new_tiles; - int bytes, alpha; - unsigned char * data; - int empty; - int x1, y1, x2, y2; - int x, y; - int ex, ey; - int found; - void * pr; - unsigned char black[MAX_CHANNELS] = { 0, 0, 0, 0 }; + gint bytes, alpha; + guchar *data; + gint empty; + gint x1, y1, x2, y2; + gint x, y; + gint ex, ey; + gint found; + void *pr; + guchar black[MAX_CHANNELS] = { 0, 0, 0, 0 }; bytes = tiles->bpp; alpha = bytes - 1; @@ -175,12 +175,12 @@ crop_buffer (TileManager *tiles, } TileManager * -edit_cut (GImage *gimage, +edit_cut (GImage *gimage, GimpDrawable *drawable) { TileManager *cut; TileManager *cropped_cut; - int empty; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -229,12 +229,12 @@ edit_cut (GImage *gimage, } TileManager * -edit_copy (GImage *gimage, +edit_copy (GImage *gimage, GimpDrawable *drawable) { - TileManager * copy; - TileManager * cropped_copy; - int empty; + TileManager *copy; + TileManager *cropped_copy; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -276,24 +276,32 @@ edit_copy (GImage *gimage, return NULL; } -GimpLayer* +GimpLayer * edit_paste (GImage *gimage, GimpDrawable *drawable, TileManager *paste, - int paste_into) + gboolean paste_into) { - Layer * layer; - int x1, y1, x2, y2; - int cx, cy; + Layer *layer; + gint x1, y1, x2, y2; + gint cx, cy; - /* Make a new layer: iff drawable == NULL, user is pasting into an empty display. */ + /* Make a new layer: iff drawable == NULL, + * user is pasting into an empty display. + */ - if(drawable != NULL) - layer = layer_new_from_tiles (gimage, gimp_drawable_type_with_alpha(drawable), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + if (drawable != NULL) + layer = layer_new_from_tiles (gimage, + gimp_drawable_type_with_alpha (drawable), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); else - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); if (layer) { @@ -314,8 +322,8 @@ edit_paste (GImage *gimage, cy = gimage->height >> 1; } - GIMP_DRAWABLE(layer)->offset_x = cx - (GIMP_DRAWABLE(layer)->width >> 1); - GIMP_DRAWABLE(layer)->offset_y = cy - (GIMP_DRAWABLE(layer)->height >> 1); + GIMP_DRAWABLE (layer)->offset_x = cx - (GIMP_DRAWABLE (layer)->width >> 1); + GIMP_DRAWABLE (layer)->offset_y = cy - (GIMP_DRAWABLE (layer)->height >> 1); /* If there is a selection mask clear it-- * this might not always be desired, but in general, @@ -340,18 +348,17 @@ edit_paste (GImage *gimage, return layer; } - else - return NULL; + + return NULL; } - -int -edit_paste_as_new (GImage *invoke, - TileManager *paste) +gboolean +edit_paste_as_new (GImage *invoke, + TileManager *paste) { - GImage *gimage; - Layer *layer; - GDisplay *gdisp; + GImage *gimage; + Layer *layer; + GDisplay *gdisp; if (!global_buf) return FALSE; @@ -362,10 +369,13 @@ edit_paste_as_new (GImage *invoke, gimp_image_set_resolution (gimage, invoke->xresolution, invoke->yresolution); gimp_image_set_unit (gimage, invoke->unit); - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); - if(layer) + if (layer) { /* add the new layer to the image */ gimp_drawable_set_gimage (GIMP_DRAWABLE (layer), gimage); @@ -378,17 +388,18 @@ edit_paste_as_new (GImage *invoke, return TRUE; } - else return FALSE; + + return FALSE; } gboolean -edit_clear (GImage *gimage, +edit_clear (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -420,13 +431,13 @@ edit_clear (GImage *gimage, } gboolean -edit_fill (GImage *gimage, +edit_fill (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -457,77 +468,62 @@ edit_fill (GImage *gimage, return TRUE; } -int -global_edit_cut (void *gdisp_ptr) +gboolean +global_edit_cut (GDisplay *gdisp) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - { - /* flush the display */ - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_flush (); + + return TRUE; } -int -global_edit_copy (void *gdisp_ptr) +gboolean +global_edit_copy (GDisplay *gdisp) { - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; - if (!edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - return TRUE; + + return TRUE; } -int -global_edit_paste (void *gdisp_ptr, - int paste_into) +gboolean +global_edit_paste (GDisplay *gdisp, + gboolean paste_into) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_paste (gdisp->gimage, gimage_active_drawable (gdisp->gimage), global_buf, paste_into)) return FALSE; - else - { - /* flush the display */ - gdisplays_update_title (gdisp->gimage); - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_update_title (gdisp->gimage); + gdisplays_flush (); + + return TRUE; } -int -global_edit_paste_as_new (void *gdisp_ptr) +gboolean +global_edit_paste_as_new (GDisplay *gdisp) { - GDisplay *gdisp; - if (!global_buf) return FALSE; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); - return (edit_paste_as_new (gdisp->gimage, global_buf)); + return edit_paste_as_new (gdisp->gimage, global_buf); } void -global_edit_free () +global_edit_free (void) { if (global_buf) tile_manager_destroy (global_buf); @@ -541,51 +537,53 @@ global_edit_free () static void set_list_of_named_buffers (GtkWidget *list_widget) { - GSList *list; + GSList *list; NamedBuffer *nb; - GtkWidget *list_item; + GtkWidget *list_item; gtk_list_clear_items (GTK_LIST (list_widget), 0, -1); - list = named_buffers; - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; - list = g_slist_next (list); list_item = gtk_list_item_new_with_label (nb->name); gtk_container_add (GTK_CONTAINER (list_widget), list_item); - gtk_widget_show (list_item); gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer) nb); + gtk_widget_show (list_item); } } static void -named_buffer_paste_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_paste_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer *nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + switch (pn_dlg->action) { case PASTE: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, FALSE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, FALSE); break; + case PASTE_INTO: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, TRUE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, TRUE); break; + case PASTE_AS_NEW: edit_paste_as_new (pn_dlg->gdisp->gimage, nb->buf); break; + default: break; } @@ -593,16 +591,16 @@ named_buffer_paste_foreach (GtkWidget *w, } static void -named_buffer_paste_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -614,16 +612,16 @@ named_buffer_paste_callback (GtkWidget *w, } static void -named_buffer_paste_into_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_into_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -635,16 +633,16 @@ named_buffer_paste_into_callback (GtkWidget *w, } static void -named_buffer_paste_as_new_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_as_new_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_AS_NEW; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -656,16 +654,17 @@ named_buffer_paste_as_new_callback (GtkWidget *w, } static void -named_buffer_delete_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_delete_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer * nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + named_buffers = g_slist_remove (named_buffers, (void *) nb); g_free (nb->name); tile_manager_destroy (nb->buf); @@ -674,14 +673,15 @@ named_buffer_delete_foreach (GtkWidget *w, } static void -named_buffer_delete_callback (GtkWidget *w, - gpointer client_data) +named_buffer_delete_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; + gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_delete_foreach, client_data); + named_buffer_delete_foreach, data); set_list_of_named_buffers (pn_dlg->list); } @@ -785,7 +785,7 @@ paste_named_buffer (GDisplay *gdisp) static void new_named_buffer (TileManager *tiles, - char *name) + gchar *name) { PixelRegion srcPR, destPR; NamedBuffer *nb; @@ -805,15 +805,13 @@ new_named_buffer (TileManager *tiles, static void cut_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) @@ -821,15 +819,13 @@ cut_named_buffer_callback (GtkWidget *widget, gdisplays_flush (); } -int -named_edit_cut (void *gdisp_ptr) +gboolean +named_edit_cut (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); qbox = gimp_query_string_box (_("Cut Named"), gimp_standard_help_func, @@ -845,28 +841,23 @@ named_edit_cut (void *gdisp_ptr) static void copy_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) new_named_buffer (new_tiles, name); } -int -named_edit_copy (void *gdisp_ptr) +gboolean +named_edit_copy (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; qbox = gimp_query_string_box (_("Copy Named"), gimp_standard_help_func, @@ -880,31 +871,29 @@ named_edit_copy (void *gdisp_ptr) return TRUE; } -int -named_edit_paste (void *gdisp_ptr) +gboolean +named_edit_paste (GDisplay *gdisp) { - paste_named_buffer ((GDisplay *) gdisp_ptr); + paste_named_buffer (gdisp); - gdisplays_flush(); + gdisplays_flush (); return TRUE; } void -named_buffers_free () +named_buffers_free (void) { - GSList *list; - NamedBuffer * nb; + GSList *list; + NamedBuffer *nb; - list = named_buffers; - - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; + tile_manager_destroy (nb->buf); g_free (nb->name); g_free (nb); - list = g_slist_next (list); } g_slist_free (named_buffers); diff --git a/app/core/gimp-edit.h b/app/core/gimp-edit.h index 68b2e4b9c6..76ad59b692 100644 --- a/app/core/gimp-edit.h +++ b/app/core/gimp-edit.h @@ -20,25 +20,34 @@ #include "gimage.h" -/* The interface functions */ -TileManager * crop_buffer (TileManager *, int); -TileManager * edit_cut (GImage *, GimpDrawable *); -TileManager * edit_copy (GImage *, GimpDrawable *); -GimpLayer* edit_paste (GImage *, GimpDrawable *, - TileManager *, int); -int edit_paste_as_new (GImage *, TileManager *); -int edit_clear (GImage *, GimpDrawable *); -int edit_fill (GImage *, GimpDrawable *); +TileManager * crop_buffer (TileManager *tiles, + gint border); -int global_edit_cut (void *); -int global_edit_copy (void *); -int global_edit_paste (void *, int); -int global_edit_paste_as_new (void *); -void global_edit_free (void); +TileManager * edit_cut (GImage *gimage, + GimpDrawable *drawable); +TileManager * edit_copy (GImage *gimage, + GimpDrawable *drawable); +GimpLayer * edit_paste (GImage *gimage, + GimpDrawable *drawable, + TileManager *paste, + gboolean paste_into); +gboolean edit_paste_as_new (GImage *gimage, + TileManager *tiles); +gboolean edit_clear (GImage *gimage, + GimpDrawable *drawable); +gboolean edit_fill (GImage *gimage, + GimpDrawable *drawable); -int named_edit_cut (void *); -int named_edit_copy (void *); -int named_edit_paste (void *); -void named_buffers_free (void); +gboolean global_edit_cut (GDisplay *gdisp); +gboolean global_edit_copy (GDisplay *gdisp); +gboolean global_edit_paste (GDisplay *gdisp, + gboolean paste_into); +gboolean global_edit_paste_as_new (GDisplay *gdisp); +void global_edit_free (void); + +gboolean named_edit_cut (GDisplay *gdisp); +gboolean named_edit_copy (GDisplay *gdisp); +gboolean named_edit_paste (GDisplay *gdisp); +void named_buffers_free (void); #endif /* __GLOBAL_EDIT_H__ */ diff --git a/app/core/gimpedit.c b/app/core/gimpedit.c index e94e275266..9416320de9 100644 --- a/app/core/gimpedit.c +++ b/app/core/gimpedit.c @@ -59,35 +59,35 @@ typedef struct _named_buffer NamedBuffer; struct _named_buffer { - TileManager * buf; - char * name; + TileManager *buf; + gchar *name; }; /* The named buffer list */ -GSList * named_buffers = NULL; +static GSList *named_buffers = NULL; /* The global edit buffer */ -TileManager * global_buf = NULL; +TileManager *global_buf = NULL; /* Crop the buffer to the size of pixels with non-zero transparency */ TileManager * crop_buffer (TileManager *tiles, - int border) + gboolean border) { - PixelRegion PR; + PixelRegion PR; TileManager *new_tiles; - int bytes, alpha; - unsigned char * data; - int empty; - int x1, y1, x2, y2; - int x, y; - int ex, ey; - int found; - void * pr; - unsigned char black[MAX_CHANNELS] = { 0, 0, 0, 0 }; + gint bytes, alpha; + guchar *data; + gint empty; + gint x1, y1, x2, y2; + gint x, y; + gint ex, ey; + gint found; + void *pr; + guchar black[MAX_CHANNELS] = { 0, 0, 0, 0 }; bytes = tiles->bpp; alpha = bytes - 1; @@ -175,12 +175,12 @@ crop_buffer (TileManager *tiles, } TileManager * -edit_cut (GImage *gimage, +edit_cut (GImage *gimage, GimpDrawable *drawable) { TileManager *cut; TileManager *cropped_cut; - int empty; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -229,12 +229,12 @@ edit_cut (GImage *gimage, } TileManager * -edit_copy (GImage *gimage, +edit_copy (GImage *gimage, GimpDrawable *drawable) { - TileManager * copy; - TileManager * cropped_copy; - int empty; + TileManager *copy; + TileManager *cropped_copy; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -276,24 +276,32 @@ edit_copy (GImage *gimage, return NULL; } -GimpLayer* +GimpLayer * edit_paste (GImage *gimage, GimpDrawable *drawable, TileManager *paste, - int paste_into) + gboolean paste_into) { - Layer * layer; - int x1, y1, x2, y2; - int cx, cy; + Layer *layer; + gint x1, y1, x2, y2; + gint cx, cy; - /* Make a new layer: iff drawable == NULL, user is pasting into an empty display. */ + /* Make a new layer: iff drawable == NULL, + * user is pasting into an empty display. + */ - if(drawable != NULL) - layer = layer_new_from_tiles (gimage, gimp_drawable_type_with_alpha(drawable), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + if (drawable != NULL) + layer = layer_new_from_tiles (gimage, + gimp_drawable_type_with_alpha (drawable), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); else - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); if (layer) { @@ -314,8 +322,8 @@ edit_paste (GImage *gimage, cy = gimage->height >> 1; } - GIMP_DRAWABLE(layer)->offset_x = cx - (GIMP_DRAWABLE(layer)->width >> 1); - GIMP_DRAWABLE(layer)->offset_y = cy - (GIMP_DRAWABLE(layer)->height >> 1); + GIMP_DRAWABLE (layer)->offset_x = cx - (GIMP_DRAWABLE (layer)->width >> 1); + GIMP_DRAWABLE (layer)->offset_y = cy - (GIMP_DRAWABLE (layer)->height >> 1); /* If there is a selection mask clear it-- * this might not always be desired, but in general, @@ -340,18 +348,17 @@ edit_paste (GImage *gimage, return layer; } - else - return NULL; + + return NULL; } - -int -edit_paste_as_new (GImage *invoke, - TileManager *paste) +gboolean +edit_paste_as_new (GImage *invoke, + TileManager *paste) { - GImage *gimage; - Layer *layer; - GDisplay *gdisp; + GImage *gimage; + Layer *layer; + GDisplay *gdisp; if (!global_buf) return FALSE; @@ -362,10 +369,13 @@ edit_paste_as_new (GImage *invoke, gimp_image_set_resolution (gimage, invoke->xresolution, invoke->yresolution); gimp_image_set_unit (gimage, invoke->unit); - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); - if(layer) + if (layer) { /* add the new layer to the image */ gimp_drawable_set_gimage (GIMP_DRAWABLE (layer), gimage); @@ -378,17 +388,18 @@ edit_paste_as_new (GImage *invoke, return TRUE; } - else return FALSE; + + return FALSE; } gboolean -edit_clear (GImage *gimage, +edit_clear (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -420,13 +431,13 @@ edit_clear (GImage *gimage, } gboolean -edit_fill (GImage *gimage, +edit_fill (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -457,77 +468,62 @@ edit_fill (GImage *gimage, return TRUE; } -int -global_edit_cut (void *gdisp_ptr) +gboolean +global_edit_cut (GDisplay *gdisp) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - { - /* flush the display */ - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_flush (); + + return TRUE; } -int -global_edit_copy (void *gdisp_ptr) +gboolean +global_edit_copy (GDisplay *gdisp) { - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; - if (!edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - return TRUE; + + return TRUE; } -int -global_edit_paste (void *gdisp_ptr, - int paste_into) +gboolean +global_edit_paste (GDisplay *gdisp, + gboolean paste_into) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_paste (gdisp->gimage, gimage_active_drawable (gdisp->gimage), global_buf, paste_into)) return FALSE; - else - { - /* flush the display */ - gdisplays_update_title (gdisp->gimage); - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_update_title (gdisp->gimage); + gdisplays_flush (); + + return TRUE; } -int -global_edit_paste_as_new (void *gdisp_ptr) +gboolean +global_edit_paste_as_new (GDisplay *gdisp) { - GDisplay *gdisp; - if (!global_buf) return FALSE; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); - return (edit_paste_as_new (gdisp->gimage, global_buf)); + return edit_paste_as_new (gdisp->gimage, global_buf); } void -global_edit_free () +global_edit_free (void) { if (global_buf) tile_manager_destroy (global_buf); @@ -541,51 +537,53 @@ global_edit_free () static void set_list_of_named_buffers (GtkWidget *list_widget) { - GSList *list; + GSList *list; NamedBuffer *nb; - GtkWidget *list_item; + GtkWidget *list_item; gtk_list_clear_items (GTK_LIST (list_widget), 0, -1); - list = named_buffers; - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; - list = g_slist_next (list); list_item = gtk_list_item_new_with_label (nb->name); gtk_container_add (GTK_CONTAINER (list_widget), list_item); - gtk_widget_show (list_item); gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer) nb); + gtk_widget_show (list_item); } } static void -named_buffer_paste_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_paste_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer *nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + switch (pn_dlg->action) { case PASTE: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, FALSE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, FALSE); break; + case PASTE_INTO: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, TRUE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, TRUE); break; + case PASTE_AS_NEW: edit_paste_as_new (pn_dlg->gdisp->gimage, nb->buf); break; + default: break; } @@ -593,16 +591,16 @@ named_buffer_paste_foreach (GtkWidget *w, } static void -named_buffer_paste_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -614,16 +612,16 @@ named_buffer_paste_callback (GtkWidget *w, } static void -named_buffer_paste_into_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_into_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -635,16 +633,16 @@ named_buffer_paste_into_callback (GtkWidget *w, } static void -named_buffer_paste_as_new_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_as_new_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_AS_NEW; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -656,16 +654,17 @@ named_buffer_paste_as_new_callback (GtkWidget *w, } static void -named_buffer_delete_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_delete_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer * nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + named_buffers = g_slist_remove (named_buffers, (void *) nb); g_free (nb->name); tile_manager_destroy (nb->buf); @@ -674,14 +673,15 @@ named_buffer_delete_foreach (GtkWidget *w, } static void -named_buffer_delete_callback (GtkWidget *w, - gpointer client_data) +named_buffer_delete_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; + gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_delete_foreach, client_data); + named_buffer_delete_foreach, data); set_list_of_named_buffers (pn_dlg->list); } @@ -785,7 +785,7 @@ paste_named_buffer (GDisplay *gdisp) static void new_named_buffer (TileManager *tiles, - char *name) + gchar *name) { PixelRegion srcPR, destPR; NamedBuffer *nb; @@ -805,15 +805,13 @@ new_named_buffer (TileManager *tiles, static void cut_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) @@ -821,15 +819,13 @@ cut_named_buffer_callback (GtkWidget *widget, gdisplays_flush (); } -int -named_edit_cut (void *gdisp_ptr) +gboolean +named_edit_cut (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); qbox = gimp_query_string_box (_("Cut Named"), gimp_standard_help_func, @@ -845,28 +841,23 @@ named_edit_cut (void *gdisp_ptr) static void copy_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) new_named_buffer (new_tiles, name); } -int -named_edit_copy (void *gdisp_ptr) +gboolean +named_edit_copy (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; qbox = gimp_query_string_box (_("Copy Named"), gimp_standard_help_func, @@ -880,31 +871,29 @@ named_edit_copy (void *gdisp_ptr) return TRUE; } -int -named_edit_paste (void *gdisp_ptr) +gboolean +named_edit_paste (GDisplay *gdisp) { - paste_named_buffer ((GDisplay *) gdisp_ptr); + paste_named_buffer (gdisp); - gdisplays_flush(); + gdisplays_flush (); return TRUE; } void -named_buffers_free () +named_buffers_free (void) { - GSList *list; - NamedBuffer * nb; + GSList *list; + NamedBuffer *nb; - list = named_buffers; - - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; + tile_manager_destroy (nb->buf); g_free (nb->name); g_free (nb); - list = g_slist_next (list); } g_slist_free (named_buffers); diff --git a/app/core/gimpedit.h b/app/core/gimpedit.h index 68b2e4b9c6..76ad59b692 100644 --- a/app/core/gimpedit.h +++ b/app/core/gimpedit.h @@ -20,25 +20,34 @@ #include "gimage.h" -/* The interface functions */ -TileManager * crop_buffer (TileManager *, int); -TileManager * edit_cut (GImage *, GimpDrawable *); -TileManager * edit_copy (GImage *, GimpDrawable *); -GimpLayer* edit_paste (GImage *, GimpDrawable *, - TileManager *, int); -int edit_paste_as_new (GImage *, TileManager *); -int edit_clear (GImage *, GimpDrawable *); -int edit_fill (GImage *, GimpDrawable *); +TileManager * crop_buffer (TileManager *tiles, + gint border); -int global_edit_cut (void *); -int global_edit_copy (void *); -int global_edit_paste (void *, int); -int global_edit_paste_as_new (void *); -void global_edit_free (void); +TileManager * edit_cut (GImage *gimage, + GimpDrawable *drawable); +TileManager * edit_copy (GImage *gimage, + GimpDrawable *drawable); +GimpLayer * edit_paste (GImage *gimage, + GimpDrawable *drawable, + TileManager *paste, + gboolean paste_into); +gboolean edit_paste_as_new (GImage *gimage, + TileManager *tiles); +gboolean edit_clear (GImage *gimage, + GimpDrawable *drawable); +gboolean edit_fill (GImage *gimage, + GimpDrawable *drawable); -int named_edit_cut (void *); -int named_edit_copy (void *); -int named_edit_paste (void *); -void named_buffers_free (void); +gboolean global_edit_cut (GDisplay *gdisp); +gboolean global_edit_copy (GDisplay *gdisp); +gboolean global_edit_paste (GDisplay *gdisp, + gboolean paste_into); +gboolean global_edit_paste_as_new (GDisplay *gdisp); +void global_edit_free (void); + +gboolean named_edit_cut (GDisplay *gdisp); +gboolean named_edit_copy (GDisplay *gdisp); +gboolean named_edit_paste (GDisplay *gdisp); +void named_buffers_free (void); #endif /* __GLOBAL_EDIT_H__ */ diff --git a/app/display/gimpdisplay-ops.c b/app/display/gimpdisplay-ops.c index 17a9e66994..f46595621b 100644 --- a/app/display/gimpdisplay-ops.c +++ b/app/display/gimpdisplay-ops.c @@ -17,6 +17,7 @@ */ #include #include + #include "appenv.h" #include "colormaps.h" #include "cursorutil.h" @@ -32,9 +33,11 @@ #include "config.h" #include "libgimp/gimpintl.h" -static void gdisplay_close_warning_callback (GtkWidget *, gpointer); -static void gdisplay_cancel_warning_callback (GtkWidget *, gpointer); -static void gdisplay_close_warning_dialog (char *, GDisplay *); +static void gdisplay_close_warning_callback (GtkWidget *widget, + gboolean close, + gpointer data); +static void gdisplay_close_warning_dialog (gchar *image_name, + GDisplay *gdisp); static GtkWidget *warning_dialog = NULL; @@ -110,14 +113,16 @@ gdisplay_new_view (GDisplay *gdisp) void gdisplay_close_window (GDisplay *gdisp, - int kill_it) + gboolean kill_it) { /* If the image has been modified, give the user a chance to save * it before nuking it--this only applies if its the last view * to an image canvas. (a gimage with disp_count = 1) */ - if (!kill_it && (gdisp->gimage->disp_count == 1) && - gdisp->gimage->dirty && confirm_on_close) + if (! kill_it && + (gdisp->gimage->disp_count == 1) && + gdisp->gimage->dirty && + confirm_on_close) { gdisplay_close_warning_dialog (g_basename (gimage_filename (gdisp->gimage)), gdisp); @@ -143,7 +148,7 @@ gdisplay_shrink_wrap (GDisplay *gdisp) gint shell_width, shell_height; gint max_auto_width, max_auto_height; gint border_x, border_y; - int s_width, s_height; + gint s_width, s_height; s_width = gdk_screen_width (); s_height = gdk_screen_height (); @@ -261,11 +266,11 @@ gdisplay_shrink_wrap (GDisplay *gdisp) } -int +gint gdisplay_resize_image (GDisplay *gdisp) { - int sx, sy; - int width, height; + gint sx, sy; + gint width, height; /* Calculate the width and height of the new canvas */ sx = SCALEX (gdisp, gdisp->gimage->width); @@ -305,46 +310,25 @@ gdisplay_resize_image (GDisplay *gdisp) static void gdisplay_close_warning_callback (GtkWidget *widget, - gpointer client_data) + gboolean close, + gpointer data) { GDisplay *gdisp; - GtkWidget *mbox; + + gdisp = (GDisplay *) data; menus_set_sensitive ("/File/Close", TRUE); - mbox = (GtkWidget *) client_data; - gdisp = (GDisplay *) gtk_object_get_user_data (GTK_OBJECT (mbox)); - gtk_widget_destroy (gdisp->shell); - gtk_widget_destroy (mbox); -} - - -static void -gdisplay_cancel_warning_callback (GtkWidget *widget, - gpointer client_data) -{ - GtkWidget *mbox; - - menus_set_sensitive ("/File/Close", TRUE); - mbox = (GtkWidget *) client_data; - gtk_widget_destroy (mbox); + if (close) + gtk_widget_destroy (gdisp->shell); } static void -gdisplay_destroy_warning_callback (GtkWidget *widget, - gpointer client_data) -{ - warning_dialog = NULL; -} - -static void -gdisplay_close_warning_dialog (char *image_name, +gdisplay_close_warning_dialog (gchar *image_name, GDisplay *gdisp) { GtkWidget *mbox; - GtkWidget *vbox; - GtkWidget *label; - gchar *warning_buf; + gchar *warning_buf; /* FIXUP this will raise any prexsisting close dialogs, which can be a a bit confusing if you tried to close a new window because you had @@ -358,38 +342,24 @@ gdisplay_close_warning_dialog (char *image_name, menus_set_sensitive ("/File/Close", FALSE); + warning_buf = + g_strdup_printf (_("Changes were made to %s.\nClose anyway?"), image_name); + warning_dialog = mbox = - gimp_dialog_new (image_name, "really_close", - gimp_standard_help_func, - "dialogs/really_close.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, + gimp_query_boolean_box (image_name, + gimp_standard_help_func, + "dialogs/really_close.html", + warning_buf, + _("Close"), _("Cancel"), + NULL, NULL, + gdisplay_close_warning_callback, + gdisp); - _("Close"), gdisplay_close_warning_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), gdisplay_cancel_warning_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - gtk_object_set_user_data (GTK_OBJECT (mbox), gdisp); + g_free (warning_buf); gtk_signal_connect (GTK_OBJECT (mbox), "destroy", - GTK_SIGNAL_FUNC (gdisplay_destroy_warning_callback), - mbox); - - vbox = gtk_vbox_new (FALSE, 1); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (mbox)->vbox), vbox); - gtk_widget_show (vbox); - - warning_buf = - g_strdup_printf (_("Changes were made to %s.\n" - "Close anyway?"), image_name); - label = gtk_label_new (warning_buf); - gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0); - gtk_widget_show (label); - g_free (warning_buf); + GTK_SIGNAL_FUNC (gtk_widget_destroyed), + &warning_dialog); gtk_widget_show (mbox); } diff --git a/app/gdisplay_ops.c b/app/gdisplay_ops.c index 17a9e66994..f46595621b 100644 --- a/app/gdisplay_ops.c +++ b/app/gdisplay_ops.c @@ -17,6 +17,7 @@ */ #include #include + #include "appenv.h" #include "colormaps.h" #include "cursorutil.h" @@ -32,9 +33,11 @@ #include "config.h" #include "libgimp/gimpintl.h" -static void gdisplay_close_warning_callback (GtkWidget *, gpointer); -static void gdisplay_cancel_warning_callback (GtkWidget *, gpointer); -static void gdisplay_close_warning_dialog (char *, GDisplay *); +static void gdisplay_close_warning_callback (GtkWidget *widget, + gboolean close, + gpointer data); +static void gdisplay_close_warning_dialog (gchar *image_name, + GDisplay *gdisp); static GtkWidget *warning_dialog = NULL; @@ -110,14 +113,16 @@ gdisplay_new_view (GDisplay *gdisp) void gdisplay_close_window (GDisplay *gdisp, - int kill_it) + gboolean kill_it) { /* If the image has been modified, give the user a chance to save * it before nuking it--this only applies if its the last view * to an image canvas. (a gimage with disp_count = 1) */ - if (!kill_it && (gdisp->gimage->disp_count == 1) && - gdisp->gimage->dirty && confirm_on_close) + if (! kill_it && + (gdisp->gimage->disp_count == 1) && + gdisp->gimage->dirty && + confirm_on_close) { gdisplay_close_warning_dialog (g_basename (gimage_filename (gdisp->gimage)), gdisp); @@ -143,7 +148,7 @@ gdisplay_shrink_wrap (GDisplay *gdisp) gint shell_width, shell_height; gint max_auto_width, max_auto_height; gint border_x, border_y; - int s_width, s_height; + gint s_width, s_height; s_width = gdk_screen_width (); s_height = gdk_screen_height (); @@ -261,11 +266,11 @@ gdisplay_shrink_wrap (GDisplay *gdisp) } -int +gint gdisplay_resize_image (GDisplay *gdisp) { - int sx, sy; - int width, height; + gint sx, sy; + gint width, height; /* Calculate the width and height of the new canvas */ sx = SCALEX (gdisp, gdisp->gimage->width); @@ -305,46 +310,25 @@ gdisplay_resize_image (GDisplay *gdisp) static void gdisplay_close_warning_callback (GtkWidget *widget, - gpointer client_data) + gboolean close, + gpointer data) { GDisplay *gdisp; - GtkWidget *mbox; + + gdisp = (GDisplay *) data; menus_set_sensitive ("/File/Close", TRUE); - mbox = (GtkWidget *) client_data; - gdisp = (GDisplay *) gtk_object_get_user_data (GTK_OBJECT (mbox)); - gtk_widget_destroy (gdisp->shell); - gtk_widget_destroy (mbox); -} - - -static void -gdisplay_cancel_warning_callback (GtkWidget *widget, - gpointer client_data) -{ - GtkWidget *mbox; - - menus_set_sensitive ("/File/Close", TRUE); - mbox = (GtkWidget *) client_data; - gtk_widget_destroy (mbox); + if (close) + gtk_widget_destroy (gdisp->shell); } static void -gdisplay_destroy_warning_callback (GtkWidget *widget, - gpointer client_data) -{ - warning_dialog = NULL; -} - -static void -gdisplay_close_warning_dialog (char *image_name, +gdisplay_close_warning_dialog (gchar *image_name, GDisplay *gdisp) { GtkWidget *mbox; - GtkWidget *vbox; - GtkWidget *label; - gchar *warning_buf; + gchar *warning_buf; /* FIXUP this will raise any prexsisting close dialogs, which can be a a bit confusing if you tried to close a new window because you had @@ -358,38 +342,24 @@ gdisplay_close_warning_dialog (char *image_name, menus_set_sensitive ("/File/Close", FALSE); + warning_buf = + g_strdup_printf (_("Changes were made to %s.\nClose anyway?"), image_name); + warning_dialog = mbox = - gimp_dialog_new (image_name, "really_close", - gimp_standard_help_func, - "dialogs/really_close.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, + gimp_query_boolean_box (image_name, + gimp_standard_help_func, + "dialogs/really_close.html", + warning_buf, + _("Close"), _("Cancel"), + NULL, NULL, + gdisplay_close_warning_callback, + gdisp); - _("Close"), gdisplay_close_warning_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), gdisplay_cancel_warning_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - gtk_object_set_user_data (GTK_OBJECT (mbox), gdisp); + g_free (warning_buf); gtk_signal_connect (GTK_OBJECT (mbox), "destroy", - GTK_SIGNAL_FUNC (gdisplay_destroy_warning_callback), - mbox); - - vbox = gtk_vbox_new (FALSE, 1); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (mbox)->vbox), vbox); - gtk_widget_show (vbox); - - warning_buf = - g_strdup_printf (_("Changes were made to %s.\n" - "Close anyway?"), image_name); - label = gtk_label_new (warning_buf); - gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0); - gtk_widget_show (label); - g_free (warning_buf); + GTK_SIGNAL_FUNC (gtk_widget_destroyed), + &warning_dialog); gtk_widget_show (mbox); } diff --git a/app/gimpui.c b/app/gimpui.c index 138a884f32..ce776066f1 100644 --- a/app/gimpui.c +++ b/app/gimpui.c @@ -24,378 +24,12 @@ #include "gimpui.h" -#include "libgimp/gimpsizeentry.h" #include "libgimp/gimpintl.h" extern gchar *prog_name; -static void gimp_message_box_close_callback (GtkWidget *, gpointer); - -/* - * String, integer, double and size query boxes - */ - -typedef struct _QueryBox QueryBox; - -struct _QueryBox -{ - GtkWidget *qbox; - GtkWidget *vbox; - GtkWidget *entry; - GtkObject *object; - GimpQueryFunc callback; - gpointer data; -}; - -static QueryBox * create_query_box (gchar *, GimpHelpFunc, gchar *, - GtkSignalFunc, - gchar *, GtkObject *, gchar *, - GimpQueryFunc, gpointer); -static void query_box_cancel_callback (GtkWidget *, gpointer); -static void string_query_box_ok_callback (GtkWidget *, gpointer); -static void int_query_box_ok_callback (GtkWidget *, gpointer); -static void double_query_box_ok_callback (GtkWidget *, gpointer); -static void size_query_box_ok_callback (GtkWidget *, gpointer); - -/* create a generic query box without any entry widget */ -static QueryBox * -create_query_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - GtkSignalFunc ok_callback, - gchar *message, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *qbox; - GtkWidget *vbox; - GtkWidget *label; - - query_box = g_new (QueryBox, 1); - - qbox = gimp_dialog_new (title, "query_box", - help_func, help_data, - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, - - _("OK"), ok_callback, - query_box, NULL, NULL, TRUE, FALSE, - _("Cancel"), query_box_cancel_callback, - query_box, NULL, NULL, FALSE, TRUE, - - NULL); - - /* if we are associated with an object, connect to the provided signal */ - if (object && GTK_IS_OBJECT (object) && signal) - gtk_signal_connect (GTK_OBJECT (object), signal, - (GtkSignalFunc) query_box_cancel_callback, - query_box); - else - object = NULL; - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (qbox)->vbox), vbox); - gtk_widget_show (vbox); - - label = gtk_label_new (message); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - query_box->qbox = qbox; - query_box->vbox = vbox; - query_box->entry = NULL; - query_box->object = object; - query_box->callback = callback; - query_box->data = data; - - return query_box; -} - -GtkWidget * -gimp_query_string_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gchar *initial, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *entry; - - query_box = create_query_box (title, help_func, help_data, - string_query_box_ok_callback, - message, object, signal, callback, data); - - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (query_box->vbox), entry, FALSE, FALSE, 0); - if (initial) - gtk_entry_set_text (GTK_ENTRY (entry), initial); - gtk_widget_grab_focus (entry); - gtk_widget_show (entry); - - query_box->entry = entry; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_int_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gint initial, - gint lower, - gint upper, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkAdjustment* adjustment; - GtkWidget *spinbutton; - - query_box = create_query_box (title, help_func, help_data, - int_query_box_ok_callback, - message, object, signal, callback, data); - - adjustment = - GTK_ADJUSTMENT (gtk_adjustment_new (initial, lower, upper, 1, 10, 0)); - spinbutton = gtk_spin_button_new (adjustment, 1.0, 0); - gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_grab_focus (spinbutton); - gtk_widget_show (spinbutton); - - query_box->entry = spinbutton; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_double_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkAdjustment* adjustment; - GtkWidget *spinbutton; - - query_box = create_query_box (title, help_func, help_data, - double_query_box_ok_callback, - message, object, signal, callback, data); - - adjustment = - GTK_ADJUSTMENT (gtk_adjustment_new (initial, lower, upper, 1, 10, 0)); - spinbutton = gtk_spin_button_new (adjustment, 1.0, digits); - gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_grab_focus (spinbutton); - gtk_widget_show (spinbutton); - - query_box->entry = spinbutton; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_size_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GimpUnit unit, - gdouble resolution, - gboolean dot_for_dot, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *sizeentry; - - query_box = create_query_box (title, help_func, help_data, - size_query_box_ok_callback, - message, object, signal, callback, data); - - sizeentry = gimp_size_entry_new (1, unit, "%p", TRUE, FALSE, FALSE, 100, - GIMP_SIZE_ENTRY_UPDATE_SIZE); - if (dot_for_dot) - gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (sizeentry), GIMP_UNIT_PIXEL); - gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (sizeentry), 0, - resolution, FALSE); - gimp_size_entry_set_refval_digits (GIMP_SIZE_ENTRY (sizeentry), 0, digits); - gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (sizeentry), 0, - lower, upper); - gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (sizeentry), 0, initial); - - gtk_box_pack_start (GTK_BOX (query_box->vbox), sizeentry, FALSE, FALSE, 0); - gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (sizeentry)); - gtk_widget_show (sizeentry); - - query_box->entry = sizeentry; - - return query_box->qbox; -} - -static void -query_box_cancel_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - - query_box = (QueryBox *) data; - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -string_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gchar *string; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the entry data */ - string = g_strdup (gtk_entry_get_text (GTK_ENTRY (query_box->entry))); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, (gpointer) string); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -int_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gint *integer_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the spinbutton data */ - integer_value = g_malloc (sizeof (gint)); - *integer_value = - gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (query_box->entry)); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) integer_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -double_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gdouble *double_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the spinbutton data */ - double_value = g_malloc (sizeof (gdouble)); - *double_value = - gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (query_box->entry)); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) double_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -size_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gdouble *double_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the sizeentry data */ - double_value = g_malloc (sizeof (gdouble)); - *double_value = - gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (query_box->entry), 0); - - /* Pass the selected unit to the callback */ - gtk_object_set_data - (GTK_OBJECT (widget), "size_query_unit", - (gpointer) gimp_size_entry_get_unit (GIMP_SIZE_ENTRY (query_box->entry))); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) double_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - +static void gimp_message_box_close_callback (GtkWidget *widget, + gpointer data); /* * Message Boxes... @@ -416,7 +50,7 @@ struct _MessageBox /* the maximum number of concucrrent dialog boxes */ #define MESSAGE_BOX_MAXIMUM 4 -static GList *message_boxes = NULL; +static GList *message_boxes = NULL; void gimp_message_box (gchar *message, diff --git a/app/gimpui.h b/app/gimpui.h index 9976f25a7d..baac331d9f 100644 --- a/app/gimpui.h +++ b/app/gimpui.h @@ -26,70 +26,9 @@ #include "gimphelp.h" #include "libgimp/gimpdialog.h" -#include "libgimp/gimpunit.h" +#include "libgimp/gimpquerybox.h" #include "libgimp/gimpwidgets.h" -/* typedefs */ -typedef void (* GimpQueryFunc) (GtkWidget *, gpointer, gpointer); - -/* some simple query dialogs - * if object != NULL then the query boxes will connect their cancel callback - * to the provided signal of this object - * - * it's the caller's job to show the returned widgets - */ - -GtkWidget * gimp_query_string_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gchar *initial, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_int_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - char *message, - gint initial, - gint lower, - gint upper, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_double_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_size_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GimpUnit unit, - gdouble resolution, - gboolean dot_for_dot, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - /* a simple message box */ void gimp_message_box (gchar *message, diff --git a/app/global_edit.c b/app/global_edit.c index e94e275266..9416320de9 100644 --- a/app/global_edit.c +++ b/app/global_edit.c @@ -59,35 +59,35 @@ typedef struct _named_buffer NamedBuffer; struct _named_buffer { - TileManager * buf; - char * name; + TileManager *buf; + gchar *name; }; /* The named buffer list */ -GSList * named_buffers = NULL; +static GSList *named_buffers = NULL; /* The global edit buffer */ -TileManager * global_buf = NULL; +TileManager *global_buf = NULL; /* Crop the buffer to the size of pixels with non-zero transparency */ TileManager * crop_buffer (TileManager *tiles, - int border) + gboolean border) { - PixelRegion PR; + PixelRegion PR; TileManager *new_tiles; - int bytes, alpha; - unsigned char * data; - int empty; - int x1, y1, x2, y2; - int x, y; - int ex, ey; - int found; - void * pr; - unsigned char black[MAX_CHANNELS] = { 0, 0, 0, 0 }; + gint bytes, alpha; + guchar *data; + gint empty; + gint x1, y1, x2, y2; + gint x, y; + gint ex, ey; + gint found; + void *pr; + guchar black[MAX_CHANNELS] = { 0, 0, 0, 0 }; bytes = tiles->bpp; alpha = bytes - 1; @@ -175,12 +175,12 @@ crop_buffer (TileManager *tiles, } TileManager * -edit_cut (GImage *gimage, +edit_cut (GImage *gimage, GimpDrawable *drawable) { TileManager *cut; TileManager *cropped_cut; - int empty; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -229,12 +229,12 @@ edit_cut (GImage *gimage, } TileManager * -edit_copy (GImage *gimage, +edit_copy (GImage *gimage, GimpDrawable *drawable) { - TileManager * copy; - TileManager * cropped_copy; - int empty; + TileManager *copy; + TileManager *cropped_copy; + gint empty; if (!gimage || drawable == NULL) return NULL; @@ -276,24 +276,32 @@ edit_copy (GImage *gimage, return NULL; } -GimpLayer* +GimpLayer * edit_paste (GImage *gimage, GimpDrawable *drawable, TileManager *paste, - int paste_into) + gboolean paste_into) { - Layer * layer; - int x1, y1, x2, y2; - int cx, cy; + Layer *layer; + gint x1, y1, x2, y2; + gint cx, cy; - /* Make a new layer: iff drawable == NULL, user is pasting into an empty display. */ + /* Make a new layer: iff drawable == NULL, + * user is pasting into an empty display. + */ - if(drawable != NULL) - layer = layer_new_from_tiles (gimage, gimp_drawable_type_with_alpha(drawable), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + if (drawable != NULL) + layer = layer_new_from_tiles (gimage, + gimp_drawable_type_with_alpha (drawable), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); else - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); if (layer) { @@ -314,8 +322,8 @@ edit_paste (GImage *gimage, cy = gimage->height >> 1; } - GIMP_DRAWABLE(layer)->offset_x = cx - (GIMP_DRAWABLE(layer)->width >> 1); - GIMP_DRAWABLE(layer)->offset_y = cy - (GIMP_DRAWABLE(layer)->height >> 1); + GIMP_DRAWABLE (layer)->offset_x = cx - (GIMP_DRAWABLE (layer)->width >> 1); + GIMP_DRAWABLE (layer)->offset_y = cy - (GIMP_DRAWABLE (layer)->height >> 1); /* If there is a selection mask clear it-- * this might not always be desired, but in general, @@ -340,18 +348,17 @@ edit_paste (GImage *gimage, return layer; } - else - return NULL; + + return NULL; } - -int -edit_paste_as_new (GImage *invoke, - TileManager *paste) +gboolean +edit_paste_as_new (GImage *invoke, + TileManager *paste) { - GImage *gimage; - Layer *layer; - GDisplay *gdisp; + GImage *gimage; + Layer *layer; + GDisplay *gdisp; if (!global_buf) return FALSE; @@ -362,10 +369,13 @@ edit_paste_as_new (GImage *invoke, gimp_image_set_resolution (gimage, invoke->xresolution, invoke->yresolution); gimp_image_set_unit (gimage, invoke->unit); - layer = layer_new_from_tiles (gimage, gimp_image_base_type_with_alpha (gimage), paste, - _("Pasted Layer"), OPAQUE_OPACITY, NORMAL_MODE); + layer = layer_new_from_tiles (gimage, + gimp_image_base_type_with_alpha (gimage), + paste, + _("Pasted Layer"), + OPAQUE_OPACITY, NORMAL_MODE); - if(layer) + if (layer) { /* add the new layer to the image */ gimp_drawable_set_gimage (GIMP_DRAWABLE (layer), gimage); @@ -378,17 +388,18 @@ edit_paste_as_new (GImage *invoke, return TRUE; } - else return FALSE; + + return FALSE; } gboolean -edit_clear (GImage *gimage, +edit_clear (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -420,13 +431,13 @@ edit_clear (GImage *gimage, } gboolean -edit_fill (GImage *gimage, +edit_fill (GImage *gimage, GimpDrawable *drawable) { TileManager *buf_tiles; - PixelRegion bufPR; - int x1, y1, x2, y2; - unsigned char col[MAX_CHANNELS]; + PixelRegion bufPR; + gint x1, y1, x2, y2; + guchar col[MAX_CHANNELS]; if (!gimage || drawable == NULL) return FALSE; @@ -457,77 +468,62 @@ edit_fill (GImage *gimage, return TRUE; } -int -global_edit_cut (void *gdisp_ptr) +gboolean +global_edit_cut (GDisplay *gdisp) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - { - /* flush the display */ - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_flush (); + + return TRUE; } -int -global_edit_copy (void *gdisp_ptr) +gboolean +global_edit_copy (GDisplay *gdisp) { - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; - if (!edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage))) return FALSE; - else - return TRUE; + + return TRUE; } -int -global_edit_paste (void *gdisp_ptr, - int paste_into) +gboolean +global_edit_paste (GDisplay *gdisp, + gboolean paste_into) { - GDisplay *gdisp; - /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); if (!edit_paste (gdisp->gimage, gimage_active_drawable (gdisp->gimage), global_buf, paste_into)) return FALSE; - else - { - /* flush the display */ - gdisplays_update_title (gdisp->gimage); - gdisplays_flush (); - return TRUE; - } + + /* flush the display */ + gdisplays_update_title (gdisp->gimage); + gdisplays_flush (); + + return TRUE; } -int -global_edit_paste_as_new (void *gdisp_ptr) +gboolean +global_edit_paste_as_new (GDisplay *gdisp) { - GDisplay *gdisp; - if (!global_buf) return FALSE; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); - return (edit_paste_as_new (gdisp->gimage, global_buf)); + return edit_paste_as_new (gdisp->gimage, global_buf); } void -global_edit_free () +global_edit_free (void) { if (global_buf) tile_manager_destroy (global_buf); @@ -541,51 +537,53 @@ global_edit_free () static void set_list_of_named_buffers (GtkWidget *list_widget) { - GSList *list; + GSList *list; NamedBuffer *nb; - GtkWidget *list_item; + GtkWidget *list_item; gtk_list_clear_items (GTK_LIST (list_widget), 0, -1); - list = named_buffers; - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; - list = g_slist_next (list); list_item = gtk_list_item_new_with_label (nb->name); gtk_container_add (GTK_CONTAINER (list_widget), list_item); - gtk_widget_show (list_item); gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer) nb); + gtk_widget_show (list_item); } } static void -named_buffer_paste_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_paste_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer *nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + switch (pn_dlg->action) { case PASTE: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, FALSE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, FALSE); break; + case PASTE_INTO: edit_paste (pn_dlg->gdisp->gimage, - gimage_active_drawable (pn_dlg->gdisp->gimage), - nb->buf, TRUE); + gimage_active_drawable (pn_dlg->gdisp->gimage), + nb->buf, TRUE); break; + case PASTE_AS_NEW: edit_paste_as_new (pn_dlg->gdisp->gimage, nb->buf); break; + default: break; } @@ -593,16 +591,16 @@ named_buffer_paste_foreach (GtkWidget *w, } static void -named_buffer_paste_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -614,16 +612,16 @@ named_buffer_paste_callback (GtkWidget *w, } static void -named_buffer_paste_into_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_into_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_INTO; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -635,16 +633,16 @@ named_buffer_paste_into_callback (GtkWidget *w, } static void -named_buffer_paste_as_new_callback (GtkWidget *w, - gpointer client_data) +named_buffer_paste_as_new_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; pn_dlg->action = PASTE_AS_NEW; - gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_paste_foreach, client_data); + gtk_container_foreach ((GtkContainer *) pn_dlg->list, + named_buffer_paste_foreach, data); /* Destroy the box */ gtk_widget_destroy (pn_dlg->shell); @@ -656,16 +654,17 @@ named_buffer_paste_as_new_callback (GtkWidget *w, } static void -named_buffer_delete_foreach (GtkWidget *w, - gpointer client_data) +named_buffer_delete_foreach (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - NamedBuffer * nb; + NamedBuffer *nb; - if (w->state == GTK_STATE_SELECTED) + if (widget->state == GTK_STATE_SELECTED) { - pn_dlg = (PasteNamedDlg *) client_data; - nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (w)); + pn_dlg = (PasteNamedDlg *) data; + nb = (NamedBuffer *) gtk_object_get_user_data (GTK_OBJECT (widget)); + named_buffers = g_slist_remove (named_buffers, (void *) nb); g_free (nb->name); tile_manager_destroy (nb->buf); @@ -674,14 +673,15 @@ named_buffer_delete_foreach (GtkWidget *w, } static void -named_buffer_delete_callback (GtkWidget *w, - gpointer client_data) +named_buffer_delete_callback (GtkWidget *widget, + gpointer data) { PasteNamedDlg *pn_dlg; - pn_dlg = (PasteNamedDlg *) client_data; + pn_dlg = (PasteNamedDlg *) data; + gtk_container_foreach ((GtkContainer*) pn_dlg->list, - named_buffer_delete_foreach, client_data); + named_buffer_delete_foreach, data); set_list_of_named_buffers (pn_dlg->list); } @@ -785,7 +785,7 @@ paste_named_buffer (GDisplay *gdisp) static void new_named_buffer (TileManager *tiles, - char *name) + gchar *name) { PixelRegion srcPR, destPR; NamedBuffer *nb; @@ -805,15 +805,13 @@ new_named_buffer (TileManager *tiles, static void cut_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_cut (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) @@ -821,15 +819,13 @@ cut_named_buffer_callback (GtkWidget *widget, gdisplays_flush (); } -int -named_edit_cut (void *gdisp_ptr) +gboolean +named_edit_cut (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; /* stop any active tool */ - gdisp = (GDisplay *) gdisp_ptr; - active_tool_control (HALT, gdisp_ptr); + active_tool_control (HALT, gdisp); qbox = gimp_query_string_box (_("Cut Named"), gimp_standard_help_func, @@ -845,28 +841,23 @@ named_edit_cut (void *gdisp_ptr) static void copy_named_buffer_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gchar *name, + gpointer data) { TileManager *new_tiles; - GDisplay *gdisp; - char *name; + GDisplay *gdisp; - gdisp = (GDisplay *) client_data; - name = g_strdup ((char *) call_data); + gdisp = (GDisplay *) data; new_tiles = edit_copy (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); if (new_tiles) new_named_buffer (new_tiles, name); } -int -named_edit_copy (void *gdisp_ptr) +gboolean +named_edit_copy (GDisplay *gdisp) { GtkWidget *qbox; - GDisplay *gdisp; - - gdisp = (GDisplay *) gdisp_ptr; qbox = gimp_query_string_box (_("Copy Named"), gimp_standard_help_func, @@ -880,31 +871,29 @@ named_edit_copy (void *gdisp_ptr) return TRUE; } -int -named_edit_paste (void *gdisp_ptr) +gboolean +named_edit_paste (GDisplay *gdisp) { - paste_named_buffer ((GDisplay *) gdisp_ptr); + paste_named_buffer (gdisp); - gdisplays_flush(); + gdisplays_flush (); return TRUE; } void -named_buffers_free () +named_buffers_free (void) { - GSList *list; - NamedBuffer * nb; + GSList *list; + NamedBuffer *nb; - list = named_buffers; - - while (list) + for (list = named_buffers; list; list = g_slist_next (list)) { nb = (NamedBuffer *) list->data; + tile_manager_destroy (nb->buf); g_free (nb->name); g_free (nb); - list = g_slist_next (list); } g_slist_free (named_buffers); diff --git a/app/global_edit.h b/app/global_edit.h index 68b2e4b9c6..76ad59b692 100644 --- a/app/global_edit.h +++ b/app/global_edit.h @@ -20,25 +20,34 @@ #include "gimage.h" -/* The interface functions */ -TileManager * crop_buffer (TileManager *, int); -TileManager * edit_cut (GImage *, GimpDrawable *); -TileManager * edit_copy (GImage *, GimpDrawable *); -GimpLayer* edit_paste (GImage *, GimpDrawable *, - TileManager *, int); -int edit_paste_as_new (GImage *, TileManager *); -int edit_clear (GImage *, GimpDrawable *); -int edit_fill (GImage *, GimpDrawable *); +TileManager * crop_buffer (TileManager *tiles, + gint border); -int global_edit_cut (void *); -int global_edit_copy (void *); -int global_edit_paste (void *, int); -int global_edit_paste_as_new (void *); -void global_edit_free (void); +TileManager * edit_cut (GImage *gimage, + GimpDrawable *drawable); +TileManager * edit_copy (GImage *gimage, + GimpDrawable *drawable); +GimpLayer * edit_paste (GImage *gimage, + GimpDrawable *drawable, + TileManager *paste, + gboolean paste_into); +gboolean edit_paste_as_new (GImage *gimage, + TileManager *tiles); +gboolean edit_clear (GImage *gimage, + GimpDrawable *drawable); +gboolean edit_fill (GImage *gimage, + GimpDrawable *drawable); -int named_edit_cut (void *); -int named_edit_copy (void *); -int named_edit_paste (void *); -void named_buffers_free (void); +gboolean global_edit_cut (GDisplay *gdisp); +gboolean global_edit_copy (GDisplay *gdisp); +gboolean global_edit_paste (GDisplay *gdisp, + gboolean paste_into); +gboolean global_edit_paste_as_new (GDisplay *gdisp); +void global_edit_free (void); + +gboolean named_edit_cut (GDisplay *gdisp); +gboolean named_edit_copy (GDisplay *gdisp); +gboolean named_edit_paste (GDisplay *gdisp); +void named_buffers_free (void); #endif /* __GLOBAL_EDIT_H__ */ diff --git a/app/gradient.c b/app/gradient.c index 306e3d1e3e..bc9570e197 100644 --- a/app/gradient.c +++ b/app/gradient.c @@ -264,17 +264,19 @@ static void ed_initialize_saved_colors (void); /* Main dialog button callbacks & functions */ static void ed_new_gradient_callback (GtkWidget *, gpointer); -static void ed_do_new_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_new_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_copy_gradient_callback (GtkWidget *, gpointer); -static void ed_do_copy_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_copy_gradient_callback (GtkWidget *, gchar *, gpointer); -static void ed_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_do_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_cancel_delete_gradient_callback (GtkWidget *, gpointer); +static void ed_delete_gradient_callback (GtkWidget *widget, + gpointer data); +static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, + gpointer data); static void ed_rename_gradient_callback (GtkWidget *, gpointer); -static void ed_do_rename_gradient_callback (GtkWidget *, gpointer, gpointer); +static void ed_do_rename_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_save_pov_callback (GtkWidget *, gpointer); static void ed_do_save_pov_callback (GtkWidget *, gpointer); @@ -1569,15 +1571,12 @@ ed_new_gradient_callback (GtkWidget *widget, static void ed_do_new_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1613,7 +1612,7 @@ ed_copy_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *qbox; - gchar *name; + gchar *name; if (curr_gradient == NULL) return; @@ -1634,16 +1633,13 @@ ed_copy_gradient_callback (GtkWidget *widget, static void ed_do_copy_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; grad_segment_t *head, *prev, *cur, *orig; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1719,17 +1715,14 @@ ed_rename_gradient_callback (GtkWidget *widget, static void ed_do_rename_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad = (gradient_t *) data; gradient_t *grad_list = NULL; - gchar *gradient_name; GSList *tmp; gint n; - gradient_name = (char *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1776,48 +1769,35 @@ ed_delete_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; if (num_gradients <= 1) return; - dialog = gimp_dialog_new (_("Delete gradient"), "delete_gradient", - gimp_standard_help_func, - "dialogs/gradient_editor/delete_gradient.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), ed_do_delete_gradient_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), ed_cancel_delete_gradient_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (g_editor->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), curr_gradient->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = + gimp_query_boolean_box (_("Delete Gradient"), + gimp_standard_help_func, + "dialogs/gradient_editor/delete_gradient.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + ed_do_delete_gradient_callback, + NULL); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (g_editor->shell, FALSE); } static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, gpointer data) { GSList *tmp; @@ -1825,9 +1805,11 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gint real_pos; gradient_t *gradient; - gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_set_sensitive (g_editor->shell, TRUE); + if (!delete) + return; + /* See which gradient we will have to select once the current one is deleted */ real_pos = 0; @@ -1872,14 +1854,6 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gimp_context_refresh_gradients (); } -static void -ed_cancel_delete_gradient_callback (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); - gtk_widget_set_sensitive (g_editor->shell, TRUE); -} - /***** The "save as pov" dialog functions *****/ static void diff --git a/app/gradient_editor.c b/app/gradient_editor.c index 306e3d1e3e..bc9570e197 100644 --- a/app/gradient_editor.c +++ b/app/gradient_editor.c @@ -264,17 +264,19 @@ static void ed_initialize_saved_colors (void); /* Main dialog button callbacks & functions */ static void ed_new_gradient_callback (GtkWidget *, gpointer); -static void ed_do_new_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_new_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_copy_gradient_callback (GtkWidget *, gpointer); -static void ed_do_copy_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_copy_gradient_callback (GtkWidget *, gchar *, gpointer); -static void ed_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_do_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_cancel_delete_gradient_callback (GtkWidget *, gpointer); +static void ed_delete_gradient_callback (GtkWidget *widget, + gpointer data); +static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, + gpointer data); static void ed_rename_gradient_callback (GtkWidget *, gpointer); -static void ed_do_rename_gradient_callback (GtkWidget *, gpointer, gpointer); +static void ed_do_rename_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_save_pov_callback (GtkWidget *, gpointer); static void ed_do_save_pov_callback (GtkWidget *, gpointer); @@ -1569,15 +1571,12 @@ ed_new_gradient_callback (GtkWidget *widget, static void ed_do_new_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1613,7 +1612,7 @@ ed_copy_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *qbox; - gchar *name; + gchar *name; if (curr_gradient == NULL) return; @@ -1634,16 +1633,13 @@ ed_copy_gradient_callback (GtkWidget *widget, static void ed_do_copy_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; grad_segment_t *head, *prev, *cur, *orig; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1719,17 +1715,14 @@ ed_rename_gradient_callback (GtkWidget *widget, static void ed_do_rename_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad = (gradient_t *) data; gradient_t *grad_list = NULL; - gchar *gradient_name; GSList *tmp; gint n; - gradient_name = (char *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1776,48 +1769,35 @@ ed_delete_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; if (num_gradients <= 1) return; - dialog = gimp_dialog_new (_("Delete gradient"), "delete_gradient", - gimp_standard_help_func, - "dialogs/gradient_editor/delete_gradient.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), ed_do_delete_gradient_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), ed_cancel_delete_gradient_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (g_editor->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), curr_gradient->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = + gimp_query_boolean_box (_("Delete Gradient"), + gimp_standard_help_func, + "dialogs/gradient_editor/delete_gradient.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + ed_do_delete_gradient_callback, + NULL); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (g_editor->shell, FALSE); } static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, gpointer data) { GSList *tmp; @@ -1825,9 +1805,11 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gint real_pos; gradient_t *gradient; - gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_set_sensitive (g_editor->shell, TRUE); + if (!delete) + return; + /* See which gradient we will have to select once the current one is deleted */ real_pos = 0; @@ -1872,14 +1854,6 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gimp_context_refresh_gradients (); } -static void -ed_cancel_delete_gradient_callback (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); - gtk_widget_set_sensitive (g_editor->shell, TRUE); -} - /***** The "save as pov" dialog functions *****/ static void diff --git a/app/gui/commands.c b/app/gui/commands.c index 7846afb4f8..cbdf1cf10e 100644 --- a/app/gui/commands.c +++ b/app/gui/commands.c @@ -57,6 +57,8 @@ #include "undo.h" #include "config.h" + +#include "libgimp/gimpmath.h" #include "libgimp/gimpintl.h" #define return_if_no_display(gdisp) \ @@ -76,10 +78,14 @@ extern void layers_dialog_layer_merge_query (GImage *, gboolean); static void image_resize_callback (GtkWidget *, gpointer); static void image_scale_callback (GtkWidget *, gpointer); static void image_cancel_callback (GtkWidget *, gpointer); -static void gimage_mask_feather_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_border_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); /* local variables */ static gdouble selection_feather_radius = 5.0; @@ -1404,19 +1410,17 @@ image_cancel_callback (GtkWidget *widget, static void gimage_mask_feather_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_feather_radius = *(gdouble *) call_data; - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_feather_radius = size; radius_x = radius_y = selection_feather_radius; @@ -1439,19 +1443,17 @@ gimage_mask_feather_callback (GtkWidget *widget, static void gimage_mask_border_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_border_radius = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_border_radius = ROUND (size); radius_x = radius_y = selection_border_radius; @@ -1474,19 +1476,17 @@ gimage_mask_border_callback (GtkWidget *widget, static void gimage_mask_grow_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_grow_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_grow_pixels = ROUND (size); radius_x = radius_y = selection_grow_pixels; @@ -1509,19 +1509,17 @@ gimage_mask_grow_callback (GtkWidget *widget, static void gimage_mask_shrink_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gint radius_x; - gint radius_y; + GImage *gimage; + gint radius_x; + gint radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_shrink_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_shrink_pixels = ROUND (size); radius_x = radius_y = selection_shrink_pixels; diff --git a/app/gui/gradient-editor.c b/app/gui/gradient-editor.c index 306e3d1e3e..bc9570e197 100644 --- a/app/gui/gradient-editor.c +++ b/app/gui/gradient-editor.c @@ -264,17 +264,19 @@ static void ed_initialize_saved_colors (void); /* Main dialog button callbacks & functions */ static void ed_new_gradient_callback (GtkWidget *, gpointer); -static void ed_do_new_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_new_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_copy_gradient_callback (GtkWidget *, gpointer); -static void ed_do_copy_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_copy_gradient_callback (GtkWidget *, gchar *, gpointer); -static void ed_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_do_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_cancel_delete_gradient_callback (GtkWidget *, gpointer); +static void ed_delete_gradient_callback (GtkWidget *widget, + gpointer data); +static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, + gpointer data); static void ed_rename_gradient_callback (GtkWidget *, gpointer); -static void ed_do_rename_gradient_callback (GtkWidget *, gpointer, gpointer); +static void ed_do_rename_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_save_pov_callback (GtkWidget *, gpointer); static void ed_do_save_pov_callback (GtkWidget *, gpointer); @@ -1569,15 +1571,12 @@ ed_new_gradient_callback (GtkWidget *widget, static void ed_do_new_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1613,7 +1612,7 @@ ed_copy_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *qbox; - gchar *name; + gchar *name; if (curr_gradient == NULL) return; @@ -1634,16 +1633,13 @@ ed_copy_gradient_callback (GtkWidget *widget, static void ed_do_copy_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; grad_segment_t *head, *prev, *cur, *orig; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1719,17 +1715,14 @@ ed_rename_gradient_callback (GtkWidget *widget, static void ed_do_rename_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad = (gradient_t *) data; gradient_t *grad_list = NULL; - gchar *gradient_name; GSList *tmp; gint n; - gradient_name = (char *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1776,48 +1769,35 @@ ed_delete_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; if (num_gradients <= 1) return; - dialog = gimp_dialog_new (_("Delete gradient"), "delete_gradient", - gimp_standard_help_func, - "dialogs/gradient_editor/delete_gradient.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), ed_do_delete_gradient_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), ed_cancel_delete_gradient_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (g_editor->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), curr_gradient->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = + gimp_query_boolean_box (_("Delete Gradient"), + gimp_standard_help_func, + "dialogs/gradient_editor/delete_gradient.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + ed_do_delete_gradient_callback, + NULL); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (g_editor->shell, FALSE); } static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, gpointer data) { GSList *tmp; @@ -1825,9 +1805,11 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gint real_pos; gradient_t *gradient; - gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_set_sensitive (g_editor->shell, TRUE); + if (!delete) + return; + /* See which gradient we will have to select once the current one is deleted */ real_pos = 0; @@ -1872,14 +1854,6 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gimp_context_refresh_gradients (); } -static void -ed_cancel_delete_gradient_callback (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); - gtk_widget_set_sensitive (g_editor->shell, TRUE); -} - /***** The "save as pov" dialog functions *****/ static void diff --git a/app/gui/help-commands.c b/app/gui/help-commands.c index 7846afb4f8..cbdf1cf10e 100644 --- a/app/gui/help-commands.c +++ b/app/gui/help-commands.c @@ -57,6 +57,8 @@ #include "undo.h" #include "config.h" + +#include "libgimp/gimpmath.h" #include "libgimp/gimpintl.h" #define return_if_no_display(gdisp) \ @@ -76,10 +78,14 @@ extern void layers_dialog_layer_merge_query (GImage *, gboolean); static void image_resize_callback (GtkWidget *, gpointer); static void image_scale_callback (GtkWidget *, gpointer); static void image_cancel_callback (GtkWidget *, gpointer); -static void gimage_mask_feather_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_border_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); -static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit, + gpointer); /* local variables */ static gdouble selection_feather_radius = 5.0; @@ -1404,19 +1410,17 @@ image_cancel_callback (GtkWidget *widget, static void gimage_mask_feather_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_feather_radius = *(gdouble *) call_data; - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_feather_radius = size; radius_x = radius_y = selection_feather_radius; @@ -1439,19 +1443,17 @@ gimage_mask_feather_callback (GtkWidget *widget, static void gimage_mask_border_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_border_radius = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_border_radius = ROUND (size); radius_x = radius_y = selection_border_radius; @@ -1474,19 +1476,17 @@ gimage_mask_border_callback (GtkWidget *widget, static void gimage_mask_grow_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gdouble radius_x; - gdouble radius_y; + GImage *gimage; + gdouble radius_x; + gdouble radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_grow_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_grow_pixels = ROUND (size); radius_x = radius_y = selection_grow_pixels; @@ -1509,19 +1509,17 @@ gimage_mask_grow_callback (GtkWidget *widget, static void gimage_mask_shrink_callback (GtkWidget *widget, - gpointer client_data, - gpointer call_data) + gdouble size, + GimpUnit unit, + gpointer data) { - GImage *gimage; - GimpUnit unit; - gint radius_x; - gint radius_y; + GImage *gimage; + gint radius_x; + gint radius_y; - gimage = GIMP_IMAGE (client_data); + gimage = GIMP_IMAGE (data); - selection_shrink_pixels = (gint) (*(gdouble *) call_data + 0.5); - g_free (call_data); - unit = (GimpUnit) gtk_object_get_data (GTK_OBJECT (widget), "size_query_unit"); + selection_shrink_pixels = ROUND (size); radius_x = radius_y = selection_shrink_pixels; diff --git a/app/gui/palette-editor.c b/app/gui/palette-editor.c index e24f900b1d..24a15155f3 100644 --- a/app/gui/palette-editor.c +++ b/app/gui/palette-editor.c @@ -1763,12 +1763,12 @@ palette_dialog_zoomout_callback (GtkWidget *widget, static void palette_dialog_add_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { PaletteEntries *entries; - entries = palette_entries_new ((gchar *) call_data); + entries = palette_entries_new (palette_name); palette_insert_all (entries); } @@ -1791,6 +1791,7 @@ palette_dialog_new_callback (GtkWidget *widget, static void palette_dialog_do_delete_callback (GtkWidget *widget, + gboolean delete, gpointer data) { PaletteDialog *palette; @@ -1798,6 +1799,11 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette = (PaletteDialog *) data; + gtk_widget_set_sensitive (palette->shell, TRUE); + + if (!delete) + return; + if (palette && palette->entries) { entries = palette->entries; @@ -1808,21 +1814,6 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette_refresh_all (); } - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); -} - -static void -palette_dialog_cancel_delete_callback (GtkWidget *widget, - gpointer data) -{ - PaletteDialog *palette; - - palette = (PaletteDialog *) data; - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); } static void @@ -1832,8 +1823,6 @@ palette_dialog_delete_callback (GtkWidget *widget, PaletteDialog *palette; GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; palette = data; @@ -1841,37 +1830,24 @@ palette_dialog_delete_callback (GtkWidget *widget, if (!palette || !palette->entries) return; - dialog = gimp_dialog_new (_("Delete Palette"), "delete_palette", - gimp_standard_help_func, - "dialogs/palette_editor/delete_palette.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), palette_dialog_do_delete_callback, - palette, NULL, NULL, FALSE, FALSE, - _("Cancel"), palette_dialog_cancel_delete_callback, - palette, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (palette->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), palette->entries->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = gimp_query_boolean_box (_("Delete Palette"), + gimp_standard_help_func, + "dialogs/palette_editor/delete_palette.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + palette_dialog_do_delete_callback, + palette); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (palette->shell, FALSE); } static void @@ -1891,15 +1867,15 @@ palette_dialog_import_callback (GtkWidget *widget, static void palette_dialog_merge_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { - PaletteDialog *palette; + PaletteDialog *palette; PaletteEntries *p_entries; PaletteEntries *new_entries; - GList *sel_list; + GList *sel_list; - new_entries = palette_entries_new ((gchar *) call_data); + new_entries = palette_entries_new (palette_name); palette = (PaletteDialog *) data; @@ -1907,7 +1883,7 @@ palette_dialog_merge_entries_callback (GtkWidget *widget, while (sel_list) { - gint row; + gint row; GSList *cols; row = GPOINTER_TO_INT (sel_list->data); diff --git a/app/gui/paths-dialog.c b/app/gui/paths-dialog.c index 2a8f0e3fd9..bfba65538e 100644 --- a/app/gui/paths-dialog.c +++ b/app/gui/paths-dialog.c @@ -1190,19 +1190,16 @@ paths_update_paths (gpointer data, static void do_rename_paths_callback (GtkWidget *widget, - gpointer call_data, - gpointer client_data) + gchar *text, + gpointer data) { - gchar *text; GdkBitmap *mask; guint8 spacing; GdkPixmap *pixmap; - if (!(GTK_CLIST (call_data)->selection)) + if (!(GTK_CLIST (data)->selection)) return; - text = g_strdup (client_data); - gtk_clist_get_pixtext (GTK_CLIST (paths_dialog->paths_list), paths_dialog->selected_row_num, 1, @@ -1211,7 +1208,7 @@ do_rename_paths_callback (GtkWidget *widget, &pixmap, &mask); - gtk_clist_set_pixtext (GTK_CLIST (call_data), + gtk_clist_set_pixtext (GTK_CLIST (data), paths_dialog->selected_row_num, 1, text, diff --git a/app/palette.c b/app/palette.c index e24f900b1d..24a15155f3 100644 --- a/app/palette.c +++ b/app/palette.c @@ -1763,12 +1763,12 @@ palette_dialog_zoomout_callback (GtkWidget *widget, static void palette_dialog_add_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { PaletteEntries *entries; - entries = palette_entries_new ((gchar *) call_data); + entries = palette_entries_new (palette_name); palette_insert_all (entries); } @@ -1791,6 +1791,7 @@ palette_dialog_new_callback (GtkWidget *widget, static void palette_dialog_do_delete_callback (GtkWidget *widget, + gboolean delete, gpointer data) { PaletteDialog *palette; @@ -1798,6 +1799,11 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette = (PaletteDialog *) data; + gtk_widget_set_sensitive (palette->shell, TRUE); + + if (!delete) + return; + if (palette && palette->entries) { entries = palette->entries; @@ -1808,21 +1814,6 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette_refresh_all (); } - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); -} - -static void -palette_dialog_cancel_delete_callback (GtkWidget *widget, - gpointer data) -{ - PaletteDialog *palette; - - palette = (PaletteDialog *) data; - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); } static void @@ -1832,8 +1823,6 @@ palette_dialog_delete_callback (GtkWidget *widget, PaletteDialog *palette; GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; palette = data; @@ -1841,37 +1830,24 @@ palette_dialog_delete_callback (GtkWidget *widget, if (!palette || !palette->entries) return; - dialog = gimp_dialog_new (_("Delete Palette"), "delete_palette", - gimp_standard_help_func, - "dialogs/palette_editor/delete_palette.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), palette_dialog_do_delete_callback, - palette, NULL, NULL, FALSE, FALSE, - _("Cancel"), palette_dialog_cancel_delete_callback, - palette, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (palette->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), palette->entries->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = gimp_query_boolean_box (_("Delete Palette"), + gimp_standard_help_func, + "dialogs/palette_editor/delete_palette.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + palette_dialog_do_delete_callback, + palette); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (palette->shell, FALSE); } static void @@ -1891,15 +1867,15 @@ palette_dialog_import_callback (GtkWidget *widget, static void palette_dialog_merge_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { - PaletteDialog *palette; + PaletteDialog *palette; PaletteEntries *p_entries; PaletteEntries *new_entries; - GList *sel_list; + GList *sel_list; - new_entries = palette_entries_new ((gchar *) call_data); + new_entries = palette_entries_new (palette_name); palette = (PaletteDialog *) data; @@ -1907,7 +1883,7 @@ palette_dialog_merge_entries_callback (GtkWidget *widget, while (sel_list) { - gint row; + gint row; GSList *cols; row = GPOINTER_TO_INT (sel_list->data); diff --git a/app/paths_dialog.c b/app/paths_dialog.c index 2a8f0e3fd9..bfba65538e 100644 --- a/app/paths_dialog.c +++ b/app/paths_dialog.c @@ -1190,19 +1190,16 @@ paths_update_paths (gpointer data, static void do_rename_paths_callback (GtkWidget *widget, - gpointer call_data, - gpointer client_data) + gchar *text, + gpointer data) { - gchar *text; GdkBitmap *mask; guint8 spacing; GdkPixmap *pixmap; - if (!(GTK_CLIST (call_data)->selection)) + if (!(GTK_CLIST (data)->selection)) return; - text = g_strdup (client_data); - gtk_clist_get_pixtext (GTK_CLIST (paths_dialog->paths_list), paths_dialog->selected_row_num, 1, @@ -1211,7 +1208,7 @@ do_rename_paths_callback (GtkWidget *widget, &pixmap, &mask); - gtk_clist_set_pixtext (GTK_CLIST (call_data), + gtk_clist_set_pixtext (GTK_CLIST (data), paths_dialog->selected_row_num, 1, text, diff --git a/app/widgets/gimpgradienteditor.c b/app/widgets/gimpgradienteditor.c index 306e3d1e3e..bc9570e197 100644 --- a/app/widgets/gimpgradienteditor.c +++ b/app/widgets/gimpgradienteditor.c @@ -264,17 +264,19 @@ static void ed_initialize_saved_colors (void); /* Main dialog button callbacks & functions */ static void ed_new_gradient_callback (GtkWidget *, gpointer); -static void ed_do_new_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_new_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_copy_gradient_callback (GtkWidget *, gpointer); -static void ed_do_copy_gradient_callback (GtkWidget *, gpointer , gpointer); +static void ed_do_copy_gradient_callback (GtkWidget *, gchar *, gpointer); -static void ed_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_do_delete_gradient_callback (GtkWidget *, gpointer); -static void ed_cancel_delete_gradient_callback (GtkWidget *, gpointer); +static void ed_delete_gradient_callback (GtkWidget *widget, + gpointer data); +static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, + gpointer data); static void ed_rename_gradient_callback (GtkWidget *, gpointer); -static void ed_do_rename_gradient_callback (GtkWidget *, gpointer, gpointer); +static void ed_do_rename_gradient_callback (GtkWidget *, gchar *, gpointer); static void ed_save_pov_callback (GtkWidget *, gpointer); static void ed_do_save_pov_callback (GtkWidget *, gpointer); @@ -1569,15 +1571,12 @@ ed_new_gradient_callback (GtkWidget *widget, static void ed_do_new_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1613,7 +1612,7 @@ ed_copy_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *qbox; - gchar *name; + gchar *name; if (curr_gradient == NULL) return; @@ -1634,16 +1633,13 @@ ed_copy_gradient_callback (GtkWidget *widget, static void ed_do_copy_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad; - gchar *gradient_name; gint pos; grad_segment_t *head, *prev, *cur, *orig; - gradient_name = (gchar *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1719,17 +1715,14 @@ ed_rename_gradient_callback (GtkWidget *widget, static void ed_do_rename_gradient_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *gradient_name, + gpointer data) { gradient_t *grad = (gradient_t *) data; gradient_t *grad_list = NULL; - gchar *gradient_name; GSList *tmp; gint n; - gradient_name = (char *) call_data; - if (!gradient_name) { g_warning ("received NULL in call_data"); @@ -1776,48 +1769,35 @@ ed_delete_gradient_callback (GtkWidget *widget, gpointer data) { GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; if (num_gradients <= 1) return; - dialog = gimp_dialog_new (_("Delete gradient"), "delete_gradient", - gimp_standard_help_func, - "dialogs/gradient_editor/delete_gradient.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), ed_do_delete_gradient_callback, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), ed_cancel_delete_gradient_callback, - NULL, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (g_editor->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), curr_gradient->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = + gimp_query_boolean_box (_("Delete Gradient"), + gimp_standard_help_func, + "dialogs/gradient_editor/delete_gradient.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + ed_do_delete_gradient_callback, + NULL); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (g_editor->shell, FALSE); } static void ed_do_delete_gradient_callback (GtkWidget *widget, + gboolean delete, gpointer data) { GSList *tmp; @@ -1825,9 +1805,11 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gint real_pos; gradient_t *gradient; - gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_set_sensitive (g_editor->shell, TRUE); + if (!delete) + return; + /* See which gradient we will have to select once the current one is deleted */ real_pos = 0; @@ -1872,14 +1854,6 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gimp_context_refresh_gradients (); } -static void -ed_cancel_delete_gradient_callback (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); - gtk_widget_set_sensitive (g_editor->shell, TRUE); -} - /***** The "save as pov" dialog functions *****/ static void diff --git a/app/widgets/gimppaletteeditor.c b/app/widgets/gimppaletteeditor.c index e24f900b1d..24a15155f3 100644 --- a/app/widgets/gimppaletteeditor.c +++ b/app/widgets/gimppaletteeditor.c @@ -1763,12 +1763,12 @@ palette_dialog_zoomout_callback (GtkWidget *widget, static void palette_dialog_add_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { PaletteEntries *entries; - entries = palette_entries_new ((gchar *) call_data); + entries = palette_entries_new (palette_name); palette_insert_all (entries); } @@ -1791,6 +1791,7 @@ palette_dialog_new_callback (GtkWidget *widget, static void palette_dialog_do_delete_callback (GtkWidget *widget, + gboolean delete, gpointer data) { PaletteDialog *palette; @@ -1798,6 +1799,11 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette = (PaletteDialog *) data; + gtk_widget_set_sensitive (palette->shell, TRUE); + + if (!delete) + return; + if (palette && palette->entries) { entries = palette->entries; @@ -1808,21 +1814,6 @@ palette_dialog_do_delete_callback (GtkWidget *widget, palette_refresh_all (); } - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); -} - -static void -palette_dialog_cancel_delete_callback (GtkWidget *widget, - gpointer data) -{ - PaletteDialog *palette; - - palette = (PaletteDialog *) data; - - gtk_widget_destroy (gtk_widget_get_toplevel (widget)); - gtk_widget_set_sensitive (palette->shell, TRUE); } static void @@ -1832,8 +1823,6 @@ palette_dialog_delete_callback (GtkWidget *widget, PaletteDialog *palette; GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *label; gchar *str; palette = data; @@ -1841,37 +1830,24 @@ palette_dialog_delete_callback (GtkWidget *widget, if (!palette || !palette->entries) return; - dialog = gimp_dialog_new (_("Delete Palette"), "delete_palette", - gimp_standard_help_func, - "dialogs/palette_editor/delete_palette.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, - - _("Delete"), palette_dialog_do_delete_callback, - palette, NULL, NULL, FALSE, FALSE, - _("Cancel"), palette_dialog_cancel_delete_callback, - palette, NULL, NULL, TRUE, TRUE, - - NULL); - - /* The main vbox */ - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); - gtk_widget_show (vbox); + gtk_widget_set_sensitive (palette->shell, FALSE); str = g_strdup_printf (_("Are you sure you want to delete\n" "\"%s\" from the list and from disk?"), palette->entries->name); - label = gtk_label_new (str); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + dialog = gimp_query_boolean_box (_("Delete Palette"), + gimp_standard_help_func, + "dialogs/palette_editor/delete_palette.html", + str, + _("Delete"), _("Cancel"), + NULL, NULL, + palette_dialog_do_delete_callback, + palette); g_free (str); gtk_widget_show (dialog); - gtk_widget_set_sensitive (palette->shell, FALSE); } static void @@ -1891,15 +1867,15 @@ palette_dialog_import_callback (GtkWidget *widget, static void palette_dialog_merge_entries_callback (GtkWidget *widget, - gpointer data, - gpointer call_data) + gchar *palette_name, + gpointer data) { - PaletteDialog *palette; + PaletteDialog *palette; PaletteEntries *p_entries; PaletteEntries *new_entries; - GList *sel_list; + GList *sel_list; - new_entries = palette_entries_new ((gchar *) call_data); + new_entries = palette_entries_new (palette_name); palette = (PaletteDialog *) data; @@ -1907,7 +1883,7 @@ palette_dialog_merge_entries_callback (GtkWidget *widget, while (sel_list) { - gint row; + gint row; GSList *cols; row = GPOINTER_TO_INT (sel_list->data); diff --git a/app/widgets/gimpwidgets-utils.c b/app/widgets/gimpwidgets-utils.c index 138a884f32..ce776066f1 100644 --- a/app/widgets/gimpwidgets-utils.c +++ b/app/widgets/gimpwidgets-utils.c @@ -24,378 +24,12 @@ #include "gimpui.h" -#include "libgimp/gimpsizeentry.h" #include "libgimp/gimpintl.h" extern gchar *prog_name; -static void gimp_message_box_close_callback (GtkWidget *, gpointer); - -/* - * String, integer, double and size query boxes - */ - -typedef struct _QueryBox QueryBox; - -struct _QueryBox -{ - GtkWidget *qbox; - GtkWidget *vbox; - GtkWidget *entry; - GtkObject *object; - GimpQueryFunc callback; - gpointer data; -}; - -static QueryBox * create_query_box (gchar *, GimpHelpFunc, gchar *, - GtkSignalFunc, - gchar *, GtkObject *, gchar *, - GimpQueryFunc, gpointer); -static void query_box_cancel_callback (GtkWidget *, gpointer); -static void string_query_box_ok_callback (GtkWidget *, gpointer); -static void int_query_box_ok_callback (GtkWidget *, gpointer); -static void double_query_box_ok_callback (GtkWidget *, gpointer); -static void size_query_box_ok_callback (GtkWidget *, gpointer); - -/* create a generic query box without any entry widget */ -static QueryBox * -create_query_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - GtkSignalFunc ok_callback, - gchar *message, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *qbox; - GtkWidget *vbox; - GtkWidget *label; - - query_box = g_new (QueryBox, 1); - - qbox = gimp_dialog_new (title, "query_box", - help_func, help_data, - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, - - _("OK"), ok_callback, - query_box, NULL, NULL, TRUE, FALSE, - _("Cancel"), query_box_cancel_callback, - query_box, NULL, NULL, FALSE, TRUE, - - NULL); - - /* if we are associated with an object, connect to the provided signal */ - if (object && GTK_IS_OBJECT (object) && signal) - gtk_signal_connect (GTK_OBJECT (object), signal, - (GtkSignalFunc) query_box_cancel_callback, - query_box); - else - object = NULL; - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (qbox)->vbox), vbox); - gtk_widget_show (vbox); - - label = gtk_label_new (message); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - query_box->qbox = qbox; - query_box->vbox = vbox; - query_box->entry = NULL; - query_box->object = object; - query_box->callback = callback; - query_box->data = data; - - return query_box; -} - -GtkWidget * -gimp_query_string_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gchar *initial, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *entry; - - query_box = create_query_box (title, help_func, help_data, - string_query_box_ok_callback, - message, object, signal, callback, data); - - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (query_box->vbox), entry, FALSE, FALSE, 0); - if (initial) - gtk_entry_set_text (GTK_ENTRY (entry), initial); - gtk_widget_grab_focus (entry); - gtk_widget_show (entry); - - query_box->entry = entry; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_int_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gint initial, - gint lower, - gint upper, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkAdjustment* adjustment; - GtkWidget *spinbutton; - - query_box = create_query_box (title, help_func, help_data, - int_query_box_ok_callback, - message, object, signal, callback, data); - - adjustment = - GTK_ADJUSTMENT (gtk_adjustment_new (initial, lower, upper, 1, 10, 0)); - spinbutton = gtk_spin_button_new (adjustment, 1.0, 0); - gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_grab_focus (spinbutton); - gtk_widget_show (spinbutton); - - query_box->entry = spinbutton; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_double_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkAdjustment* adjustment; - GtkWidget *spinbutton; - - query_box = create_query_box (title, help_func, help_data, - double_query_box_ok_callback, - message, object, signal, callback, data); - - adjustment = - GTK_ADJUSTMENT (gtk_adjustment_new (initial, lower, upper, 1, 10, 0)); - spinbutton = gtk_spin_button_new (adjustment, 1.0, digits); - gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_grab_focus (spinbutton); - gtk_widget_show (spinbutton); - - query_box->entry = spinbutton; - - return query_box->qbox; -} - -GtkWidget * -gimp_query_size_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GimpUnit unit, - gdouble resolution, - gboolean dot_for_dot, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data) -{ - QueryBox *query_box; - GtkWidget *sizeentry; - - query_box = create_query_box (title, help_func, help_data, - size_query_box_ok_callback, - message, object, signal, callback, data); - - sizeentry = gimp_size_entry_new (1, unit, "%p", TRUE, FALSE, FALSE, 100, - GIMP_SIZE_ENTRY_UPDATE_SIZE); - if (dot_for_dot) - gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (sizeentry), GIMP_UNIT_PIXEL); - gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (sizeentry), 0, - resolution, FALSE); - gimp_size_entry_set_refval_digits (GIMP_SIZE_ENTRY (sizeentry), 0, digits); - gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (sizeentry), 0, - lower, upper); - gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (sizeentry), 0, initial); - - gtk_box_pack_start (GTK_BOX (query_box->vbox), sizeentry, FALSE, FALSE, 0); - gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (sizeentry)); - gtk_widget_show (sizeentry); - - query_box->entry = sizeentry; - - return query_box->qbox; -} - -static void -query_box_cancel_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - - query_box = (QueryBox *) data; - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -string_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gchar *string; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the entry data */ - string = g_strdup (gtk_entry_get_text (GTK_ENTRY (query_box->entry))); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, (gpointer) string); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -int_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gint *integer_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the spinbutton data */ - integer_value = g_malloc (sizeof (gint)); - *integer_value = - gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (query_box->entry)); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) integer_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -double_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gdouble *double_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the spinbutton data */ - double_value = g_malloc (sizeof (gdouble)); - *double_value = - gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (query_box->entry)); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) double_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - -static void -size_query_box_ok_callback (GtkWidget *widget, - gpointer data) -{ - QueryBox *query_box; - gdouble *double_value; - - query_box = (QueryBox *) data; - - gtk_widget_set_sensitive (query_box->qbox, FALSE); - - /* disconnect, if we are connected to some signal */ - if (query_box->object) - gtk_signal_disconnect_by_data (query_box->object, query_box); - - /* Get the sizeentry data */ - double_value = g_malloc (sizeof (gdouble)); - *double_value = - gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (query_box->entry), 0); - - /* Pass the selected unit to the callback */ - gtk_object_set_data - (GTK_OBJECT (widget), "size_query_unit", - (gpointer) gimp_size_entry_get_unit (GIMP_SIZE_ENTRY (query_box->entry))); - - /* Call the user defined callback */ - (* query_box->callback) (query_box->qbox, query_box->data, - (gpointer) double_value); - - /* Destroy the box */ - gtk_widget_destroy (query_box->qbox); - - g_free (query_box); -} - +static void gimp_message_box_close_callback (GtkWidget *widget, + gpointer data); /* * Message Boxes... @@ -416,7 +50,7 @@ struct _MessageBox /* the maximum number of concucrrent dialog boxes */ #define MESSAGE_BOX_MAXIMUM 4 -static GList *message_boxes = NULL; +static GList *message_boxes = NULL; void gimp_message_box (gchar *message, diff --git a/app/widgets/gimpwidgets-utils.h b/app/widgets/gimpwidgets-utils.h index 9976f25a7d..baac331d9f 100644 --- a/app/widgets/gimpwidgets-utils.h +++ b/app/widgets/gimpwidgets-utils.h @@ -26,70 +26,9 @@ #include "gimphelp.h" #include "libgimp/gimpdialog.h" -#include "libgimp/gimpunit.h" +#include "libgimp/gimpquerybox.h" #include "libgimp/gimpwidgets.h" -/* typedefs */ -typedef void (* GimpQueryFunc) (GtkWidget *, gpointer, gpointer); - -/* some simple query dialogs - * if object != NULL then the query boxes will connect their cancel callback - * to the provided signal of this object - * - * it's the caller's job to show the returned widgets - */ - -GtkWidget * gimp_query_string_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gchar *initial, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_int_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - char *message, - gint initial, - gint lower, - gint upper, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_double_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - -GtkWidget * gimp_query_size_box (gchar *title, - GimpHelpFunc help_func, - gchar *help_data, - gchar *message, - gdouble initial, - gdouble lower, - gdouble upper, - gint digits, - GimpUnit unit, - gdouble resolution, - gboolean dot_for_dot, - GtkObject *object, - gchar *signal, - GimpQueryFunc callback, - gpointer data); - /* a simple message box */ void gimp_message_box (gchar *message, diff --git a/libgimp/Makefile.am b/libgimp/Makefile.am index 35f54dfefc..c2b9ddc1c4 100644 --- a/libgimp/Makefile.am +++ b/libgimp/Makefile.am @@ -43,6 +43,8 @@ libgimpi_a_SOURCES = \ gimppatheditor.h \ gimpprotocol.c \ gimpprotocol.h \ + gimpquerybox.c \ + gimpquerybox.h \ gimpsizeentry.c \ gimpsizeentry.h \ gimpunitmenu.c \ @@ -118,6 +120,7 @@ libgimpui_la_SOURCES = \ gimpfileselection.c \ gimphelpui.c \ gimppatheditor.c \ + gimpquerybox.c \ gimpsizeentry.c \ gimpunitmenu.c \ gimpwidgets.c @@ -143,6 +146,7 @@ gimpinclude_HEADERS = \ gimpmenu.h \ gimpmodule.h \ gimppatheditor.h \ + gimpquerybox.h \ gimpsizeentry.h \ gimpui.h \ gimpunit.h \ diff --git a/libgimp/gimpquerybox.c b/libgimp/gimpquerybox.c new file mode 100644 index 0000000000..db426aef30 --- /dev/null +++ b/libgimp/gimpquerybox.c @@ -0,0 +1,475 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "gimpquerybox.h" + +#include "gimpdialog.h" +#include "gimpsizeentry.h" +#include "gimpwidgets.h" + +#include "libgimp-intl.h" + +/* + * String, integer, double and size query boxes + */ + +typedef struct _QueryBox QueryBox; + +struct _QueryBox +{ + GtkWidget *qbox; + GtkWidget *vbox; + GtkWidget *entry; + GtkObject *object; + GtkSignalFunc callback; + gpointer data; +}; + +static QueryBox * create_query_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + GtkSignalFunc ok_callback, + GtkSignalFunc cancel_callback, + gchar *message, + gchar *ok_button, + gchar *cancel_button, + GtkObject *object, + gchar *signal, + GtkSignalFunc callback, + gpointer data); + +static QueryBox * query_box_disconnect (gpointer data); + +static void string_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void int_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void double_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void size_query_box_ok_callback (GtkWidget *widget, + gpointer data); + +static void query_box_cancel_callback (GtkWidget *widget, + gpointer data); + +static void boolean_query_box_true_callback (GtkWidget *widget, + gpointer data); +static void boolean_query_box_false_callback (GtkWidget *widget, + gpointer data); + +/* create a generic query box without any entry widget */ +static QueryBox * +create_query_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + GtkSignalFunc ok_callback, + GtkSignalFunc cancel_callback, + gchar *message, + gchar *ok_button, + gchar *cancel_button, + GtkObject *object, + gchar *signal, + GtkSignalFunc callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *qbox; + GtkWidget *vbox; + GtkWidget *label; + + query_box = g_new (QueryBox, 1); + + qbox = gimp_dialog_new (title, "query_box", + help_func, help_data, + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + ok_button, ok_callback, + query_box, NULL, NULL, TRUE, FALSE, + cancel_button, cancel_callback, + query_box, NULL, NULL, FALSE, TRUE, + + NULL); + + /* if we are associated with an object, connect to the provided signal */ + if (object && GTK_IS_OBJECT (object) && signal) + gtk_signal_connect (GTK_OBJECT (object), signal, + GTK_SIGNAL_FUNC (query_box_cancel_callback), + query_box); + else + object = NULL; + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (qbox)->vbox), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (message); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + query_box->qbox = qbox; + query_box->vbox = vbox; + query_box->entry = NULL; + query_box->object = object; + query_box->callback = callback; + query_box->data = data; + + return query_box; +} + +GtkWidget * +gimp_query_string_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *initial, + GtkObject *object, + gchar *signal, + GimpQueryStringCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *entry; + + query_box = create_query_box (title, help_func, help_data, + string_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (query_box->vbox), entry, FALSE, FALSE, 0); + if (initial) + gtk_entry_set_text (GTK_ENTRY (entry), initial); + gtk_widget_grab_focus (entry); + gtk_widget_show (entry); + + query_box->entry = entry; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_int_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gint initial, + gint lower, + gint upper, + GtkObject *object, + gchar *signal, + GimpQueryIntCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *spinbutton; + GtkObject *adjustment; + + query_box = create_query_box (title, help_func, help_data, + int_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + spinbutton = gimp_spin_button_new (&adjustment, + initial, lower, upper, 1, 10, 0, + 1, 0); + gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); + gtk_widget_grab_focus (spinbutton); + gtk_widget_show (spinbutton); + + query_box->entry = spinbutton; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_double_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GtkObject *object, + gchar *signal, + GimpQueryDoubleCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *spinbutton; + GtkObject *adjustment; + + query_box = create_query_box (title, help_func, help_data, + double_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + spinbutton = gimp_spin_button_new (&adjustment, + initial, lower, upper, 1, 10, 0, + 1, digits); + gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); + gtk_widget_grab_focus (spinbutton); + gtk_widget_show (spinbutton); + + query_box->entry = spinbutton; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_size_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GimpUnit unit, + gdouble resolution, + gboolean dot_for_dot, + GtkObject *object, + gchar *signal, + GimpQuerySizeCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *sizeentry; + + query_box = create_query_box (title, help_func, help_data, + size_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + sizeentry = gimp_size_entry_new (1, unit, "%p", TRUE, FALSE, FALSE, 100, + GIMP_SIZE_ENTRY_UPDATE_SIZE); + if (dot_for_dot) + gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (sizeentry), GIMP_UNIT_PIXEL); + gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (sizeentry), 0, + resolution, FALSE); + gimp_size_entry_set_refval_digits (GIMP_SIZE_ENTRY (sizeentry), 0, digits); + gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (sizeentry), 0, + lower, upper); + gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (sizeentry), 0, initial); + + gtk_box_pack_start (GTK_BOX (query_box->vbox), sizeentry, FALSE, FALSE, 0); + gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (sizeentry)); + gtk_widget_show (sizeentry); + + query_box->entry = sizeentry; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_boolean_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *true_button, + gchar *false_button, + GtkObject *object, + gchar *signal, + GimpQueryBooleanCallback callback, + gpointer data) +{ + QueryBox *query_box; + + query_box = create_query_box (title, help_func, help_data, + boolean_query_box_true_callback, + boolean_query_box_false_callback, + message, + true_button, false_button, + object, signal, + callback, data); + + return query_box->qbox; +} + +static QueryBox * +query_box_disconnect (gpointer data) +{ + QueryBox *query_box; + + query_box = (QueryBox *) data; + + gtk_widget_set_sensitive (query_box->qbox, FALSE); + + /* disconnect, if we are connected to some signal */ + if (query_box->object) + gtk_signal_disconnect_by_data (query_box->object, query_box); + + return query_box; +} + +static void +string_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gchar *string; + + query_box = query_box_disconnect (data); + + /* Get the entry data */ + string = g_strdup (gtk_entry_get_text (GTK_ENTRY (query_box->entry))); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, string, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +int_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gint value; + + query_box = query_box_disconnect (data); + + /* Get the spinbutton data */ + value = + gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, value, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +double_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gdouble value; + + query_box = query_box_disconnect (data); + + /* Get the spinbutton data */ + value = + gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, value, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +size_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gdouble size; + GimpUnit unit; + + query_box = query_box_disconnect (data); + + /* Get the sizeentry data */ + size = gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (query_box->entry), 0); + unit = gimp_size_entry_get_unit (GIMP_SIZE_ENTRY (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, size, unit, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +query_box_cancel_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +boolean_query_box_true_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, TRUE, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +boolean_query_box_false_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, FALSE, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} diff --git a/libgimp/gimpquerybox.h b/libgimp/gimpquerybox.h new file mode 100644 index 0000000000..006f863e8d --- /dev/null +++ b/libgimp/gimpquerybox.h @@ -0,0 +1,119 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __GIMP_QUERY_BOX_H__ +#define __GIMP_QUERY_BOX_H__ + +#include + +#include "gimphelpui.h" + +#include "gimpunit.h" + +/* query box callback prototypes */ +typedef void (* GimpQueryStringCallback) (GtkWidget *query_box, + gchar *string, + gpointer data); + +typedef void (* GimpQueryIntCallback) (GtkWidget *query_box, + gint value, + gpointer data); + +typedef void (* GimpQueryDoubleCallback) (GtkWidget *query_box, + gdouble value, + gpointer data); + +typedef void (* GimpQuerySizeCallback) (GtkWidget *query_box, + gdouble size, + GimpUnit unit, + gpointer data); + +typedef void (* GimpQueryBooleanCallback) (GtkWidget *query_box, + gboolean value, + gpointer data); + +/* some simple query dialogs + * if object != NULL then the query boxes will connect their cancel callback + * to the provided signal of this object + * + * it's the caller's job to show the returned widgets + */ + +GtkWidget * gimp_query_string_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *initial, + GtkObject *object, + gchar *signal, + GimpQueryStringCallback callback, + gpointer data); + +GtkWidget * gimp_query_int_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + char *message, + gint initial, + gint lower, + gint upper, + GtkObject *object, + gchar *signal, + GimpQueryIntCallback callback, + gpointer data); + +GtkWidget * gimp_query_double_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GtkObject *object, + gchar *signal, + GimpQueryDoubleCallback callback, + gpointer data); + +GtkWidget * gimp_query_size_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GimpUnit unit, + gdouble resolution, + gboolean dot_for_dot, + GtkObject *object, + gchar *signal, + GimpQuerySizeCallback callback, + gpointer data); + +GtkWidget * gimp_query_boolean_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *true_button, + gchar *false_button, + GtkObject *object, + gchar *signal, + GimpQueryBooleanCallback callback, + gpointer data); + +#endif /* __GIMP_QUERY_BOX_H__ */ diff --git a/libgimp/gimpui.h b/libgimp/gimpui.h index 5d0c1a41a2..48bd8ae665 100644 --- a/libgimp/gimpui.h +++ b/libgimp/gimpui.h @@ -21,16 +21,17 @@ #include -#include "libgimp/gimpchainbutton.h" -#include "libgimp/gimpcolorbutton.h" -#include "libgimp/gimpdialog.h" -#include "libgimp/gimpexport.h" -#include "libgimp/gimpfileselection.h" -#include "libgimp/gimphelpui.h" -#include "libgimp/gimpmenu.h" -#include "libgimp/gimppatheditor.h" -#include "libgimp/gimpsizeentry.h" -#include "libgimp/gimpunitmenu.h" -#include "libgimp/gimpwidgets.h" +#include "gimpchainbutton.h" +#include "gimpcolorbutton.h" +#include "gimpdialog.h" +#include "gimpexport.h" +#include "gimpfileselection.h" +#include "gimphelpui.h" +#include "gimpmenu.h" +#include "gimppatheditor.h" +#include "gimpquerybox.h" +#include "gimpsizeentry.h" +#include "gimpunitmenu.h" +#include "gimpwidgets.h" #endif /* __GIMP_UI_H__ */ diff --git a/libgimpwidgets/gimpquerybox.c b/libgimpwidgets/gimpquerybox.c new file mode 100644 index 0000000000..db426aef30 --- /dev/null +++ b/libgimpwidgets/gimpquerybox.c @@ -0,0 +1,475 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "gimpquerybox.h" + +#include "gimpdialog.h" +#include "gimpsizeentry.h" +#include "gimpwidgets.h" + +#include "libgimp-intl.h" + +/* + * String, integer, double and size query boxes + */ + +typedef struct _QueryBox QueryBox; + +struct _QueryBox +{ + GtkWidget *qbox; + GtkWidget *vbox; + GtkWidget *entry; + GtkObject *object; + GtkSignalFunc callback; + gpointer data; +}; + +static QueryBox * create_query_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + GtkSignalFunc ok_callback, + GtkSignalFunc cancel_callback, + gchar *message, + gchar *ok_button, + gchar *cancel_button, + GtkObject *object, + gchar *signal, + GtkSignalFunc callback, + gpointer data); + +static QueryBox * query_box_disconnect (gpointer data); + +static void string_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void int_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void double_query_box_ok_callback (GtkWidget *widget, + gpointer data); +static void size_query_box_ok_callback (GtkWidget *widget, + gpointer data); + +static void query_box_cancel_callback (GtkWidget *widget, + gpointer data); + +static void boolean_query_box_true_callback (GtkWidget *widget, + gpointer data); +static void boolean_query_box_false_callback (GtkWidget *widget, + gpointer data); + +/* create a generic query box without any entry widget */ +static QueryBox * +create_query_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + GtkSignalFunc ok_callback, + GtkSignalFunc cancel_callback, + gchar *message, + gchar *ok_button, + gchar *cancel_button, + GtkObject *object, + gchar *signal, + GtkSignalFunc callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *qbox; + GtkWidget *vbox; + GtkWidget *label; + + query_box = g_new (QueryBox, 1); + + qbox = gimp_dialog_new (title, "query_box", + help_func, help_data, + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + ok_button, ok_callback, + query_box, NULL, NULL, TRUE, FALSE, + cancel_button, cancel_callback, + query_box, NULL, NULL, FALSE, TRUE, + + NULL); + + /* if we are associated with an object, connect to the provided signal */ + if (object && GTK_IS_OBJECT (object) && signal) + gtk_signal_connect (GTK_OBJECT (object), signal, + GTK_SIGNAL_FUNC (query_box_cancel_callback), + query_box); + else + object = NULL; + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (qbox)->vbox), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (message); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + query_box->qbox = qbox; + query_box->vbox = vbox; + query_box->entry = NULL; + query_box->object = object; + query_box->callback = callback; + query_box->data = data; + + return query_box; +} + +GtkWidget * +gimp_query_string_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *initial, + GtkObject *object, + gchar *signal, + GimpQueryStringCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *entry; + + query_box = create_query_box (title, help_func, help_data, + string_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (query_box->vbox), entry, FALSE, FALSE, 0); + if (initial) + gtk_entry_set_text (GTK_ENTRY (entry), initial); + gtk_widget_grab_focus (entry); + gtk_widget_show (entry); + + query_box->entry = entry; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_int_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gint initial, + gint lower, + gint upper, + GtkObject *object, + gchar *signal, + GimpQueryIntCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *spinbutton; + GtkObject *adjustment; + + query_box = create_query_box (title, help_func, help_data, + int_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + spinbutton = gimp_spin_button_new (&adjustment, + initial, lower, upper, 1, 10, 0, + 1, 0); + gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); + gtk_widget_grab_focus (spinbutton); + gtk_widget_show (spinbutton); + + query_box->entry = spinbutton; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_double_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GtkObject *object, + gchar *signal, + GimpQueryDoubleCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *spinbutton; + GtkObject *adjustment; + + query_box = create_query_box (title, help_func, help_data, + double_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + spinbutton = gimp_spin_button_new (&adjustment, + initial, lower, upper, 1, 10, 0, + 1, digits); + gtk_box_pack_start (GTK_BOX (query_box->vbox), spinbutton, FALSE, FALSE, 0); + gtk_widget_grab_focus (spinbutton); + gtk_widget_show (spinbutton); + + query_box->entry = spinbutton; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_size_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GimpUnit unit, + gdouble resolution, + gboolean dot_for_dot, + GtkObject *object, + gchar *signal, + GimpQuerySizeCallback callback, + gpointer data) +{ + QueryBox *query_box; + GtkWidget *sizeentry; + + query_box = create_query_box (title, help_func, help_data, + size_query_box_ok_callback, + query_box_cancel_callback, + message, + _("OK"), _("Cancel"), + object, signal, + callback, data); + + sizeentry = gimp_size_entry_new (1, unit, "%p", TRUE, FALSE, FALSE, 100, + GIMP_SIZE_ENTRY_UPDATE_SIZE); + if (dot_for_dot) + gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (sizeentry), GIMP_UNIT_PIXEL); + gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (sizeentry), 0, + resolution, FALSE); + gimp_size_entry_set_refval_digits (GIMP_SIZE_ENTRY (sizeentry), 0, digits); + gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (sizeentry), 0, + lower, upper); + gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (sizeentry), 0, initial); + + gtk_box_pack_start (GTK_BOX (query_box->vbox), sizeentry, FALSE, FALSE, 0); + gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (sizeentry)); + gtk_widget_show (sizeentry); + + query_box->entry = sizeentry; + + return query_box->qbox; +} + +GtkWidget * +gimp_query_boolean_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *true_button, + gchar *false_button, + GtkObject *object, + gchar *signal, + GimpQueryBooleanCallback callback, + gpointer data) +{ + QueryBox *query_box; + + query_box = create_query_box (title, help_func, help_data, + boolean_query_box_true_callback, + boolean_query_box_false_callback, + message, + true_button, false_button, + object, signal, + callback, data); + + return query_box->qbox; +} + +static QueryBox * +query_box_disconnect (gpointer data) +{ + QueryBox *query_box; + + query_box = (QueryBox *) data; + + gtk_widget_set_sensitive (query_box->qbox, FALSE); + + /* disconnect, if we are connected to some signal */ + if (query_box->object) + gtk_signal_disconnect_by_data (query_box->object, query_box); + + return query_box; +} + +static void +string_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gchar *string; + + query_box = query_box_disconnect (data); + + /* Get the entry data */ + string = g_strdup (gtk_entry_get_text (GTK_ENTRY (query_box->entry))); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, string, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +int_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gint value; + + query_box = query_box_disconnect (data); + + /* Get the spinbutton data */ + value = + gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, value, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +double_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gdouble value; + + query_box = query_box_disconnect (data); + + /* Get the spinbutton data */ + value = + gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, value, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +size_query_box_ok_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + gdouble size; + GimpUnit unit; + + query_box = query_box_disconnect (data); + + /* Get the sizeentry data */ + size = gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (query_box->entry), 0); + unit = gimp_size_entry_get_unit (GIMP_SIZE_ENTRY (query_box->entry)); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, size, unit, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +query_box_cancel_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +boolean_query_box_true_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, TRUE, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} + +static void +boolean_query_box_false_callback (GtkWidget *widget, + gpointer data) +{ + QueryBox *query_box; + + query_box = query_box_disconnect (data); + + /* Call the user defined callback */ + (* query_box->callback) (query_box->qbox, FALSE, + query_box->data); + + /* Destroy the box */ + gtk_widget_destroy (query_box->qbox); + + g_free (query_box); +} diff --git a/libgimpwidgets/gimpquerybox.h b/libgimpwidgets/gimpquerybox.h new file mode 100644 index 0000000000..006f863e8d --- /dev/null +++ b/libgimpwidgets/gimpquerybox.h @@ -0,0 +1,119 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __GIMP_QUERY_BOX_H__ +#define __GIMP_QUERY_BOX_H__ + +#include + +#include "gimphelpui.h" + +#include "gimpunit.h" + +/* query box callback prototypes */ +typedef void (* GimpQueryStringCallback) (GtkWidget *query_box, + gchar *string, + gpointer data); + +typedef void (* GimpQueryIntCallback) (GtkWidget *query_box, + gint value, + gpointer data); + +typedef void (* GimpQueryDoubleCallback) (GtkWidget *query_box, + gdouble value, + gpointer data); + +typedef void (* GimpQuerySizeCallback) (GtkWidget *query_box, + gdouble size, + GimpUnit unit, + gpointer data); + +typedef void (* GimpQueryBooleanCallback) (GtkWidget *query_box, + gboolean value, + gpointer data); + +/* some simple query dialogs + * if object != NULL then the query boxes will connect their cancel callback + * to the provided signal of this object + * + * it's the caller's job to show the returned widgets + */ + +GtkWidget * gimp_query_string_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *initial, + GtkObject *object, + gchar *signal, + GimpQueryStringCallback callback, + gpointer data); + +GtkWidget * gimp_query_int_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + char *message, + gint initial, + gint lower, + gint upper, + GtkObject *object, + gchar *signal, + GimpQueryIntCallback callback, + gpointer data); + +GtkWidget * gimp_query_double_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GtkObject *object, + gchar *signal, + GimpQueryDoubleCallback callback, + gpointer data); + +GtkWidget * gimp_query_size_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gdouble initial, + gdouble lower, + gdouble upper, + gint digits, + GimpUnit unit, + gdouble resolution, + gboolean dot_for_dot, + GtkObject *object, + gchar *signal, + GimpQuerySizeCallback callback, + gpointer data); + +GtkWidget * gimp_query_boolean_box (gchar *title, + GimpHelpFunc help_func, + gchar *help_data, + gchar *message, + gchar *true_button, + gchar *false_button, + GtkObject *object, + gchar *signal, + GimpQueryBooleanCallback callback, + gpointer data); + +#endif /* __GIMP_QUERY_BOX_H__ */ diff --git a/po-libgimp/POTFILES.in b/po-libgimp/POTFILES.in index b76e8df2e7..5ae8b1171c 100644 --- a/po-libgimp/POTFILES.in +++ b/po-libgimp/POTFILES.in @@ -4,5 +4,6 @@ libgimp/gimpcolorbutton.c libgimp/gimpexport.c libgimp/gimpfileselection.c +libgimp/gimpquerybox.c libgimp/gimpunit.c libgimp/gimpunitmenu.c