diff --git a/ChangeLog b/ChangeLog index 0d2bb6d402..34adb2eedd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,39 @@ +1999-06-20 Michael Natterer + + * app/commands.c + * app/disp_callbacks.c + * app/gdisplay.c + * app/lc_dialog.c + * app/menus.c: applied a patch from + which implements tear-off-menus(!!!). Modified it to use the + GimpContext. + The sensitivity of the menu entries is not updated after + executing a command. This leaves the sensitivity in the state + before the command was executed (which is buggy). Will probably + have to update the sensitivity from gdisplays_flush(). + Simon called the patch "temporary" but it looks pretty stable to + me. Please test it :-) + + * app/context_manager.[ch]: minor changes. + + * app/gimpcontext.[ch]: the user context keeps track of the + current display and image. The image is set automatically from + gimp_context_set_display(). + Still have to figure out how this should interact with + gdisplay_active() (the current state is a hack). + Made the context attributes real GtkObject arguments. + Pass the changed attributes to the callbacks which connect to + the _changed signals. + + * app/gimpset.[ch] + * app/gimpsetF.h + * app/gimpsetP.h: made the gimpset properly derivable by adding + signal slots to the object class structure. Added copyright + headers. + + * app/gimpsignal.[ch]: new type gimp_sigtype_double, copyright + header and my usual indentation fanaticism. + Sun Jun 20 14:55:14 1999 ape@gandalf.spacetec.no (Asbjorn Pettersen) * plug-ins/xjt/xjt.c: before to diff --git a/app/actions/help-commands.c b/app/actions/help-commands.c index 7b258a42c8..bfb3e39b0a 100644 --- a/app/actions/help-commands.c +++ b/app/actions/help-commands.c @@ -68,6 +68,10 @@ #include "libgimp/gimpintl.h" +#define return_if_no_display(gdisp) \ + gdisp = gdisplay_active (); \ + if (!gdisp) return + typedef struct { Resize * resize; @@ -78,20 +82,20 @@ typedef struct extern void layers_dialog_layer_merge_query (GImage *, int); /* local functions */ -static void image_resize_callback (GtkWidget *, gpointer); -static void image_scale_callback (GtkWidget *, gpointer); -static void image_cancel_callback (GtkWidget *, gpointer); -static gint image_delete_callback (GtkWidget *, GdkEvent *, gpointer); +static void image_resize_callback (GtkWidget *, gpointer); +static void image_scale_callback (GtkWidget *, gpointer); +static void image_cancel_callback (GtkWidget *, gpointer); +static gint image_delete_callback (GtkWidget *, GdkEvent *, 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_border_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); /* local variables */ -static double selection_feather_radius = 5.0; -static int selection_border_radius = 5; -static int selection_grow_pixels = 1; -static int selection_shrink_pixels = 1; +static gdouble selection_feather_radius = 5.0; +static gint selection_border_radius = 5; +static gint selection_grow_pixels = 1; +static gint selection_shrink_pixels = 1; void @@ -122,16 +126,13 @@ file_revert_cmd_callback (GtkWidget *widget, file_revert_callback (widget, client_data); } - - - void file_close_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_close_window (gdisp, FALSE); } @@ -149,7 +150,7 @@ edit_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_cut (gdisp); } @@ -160,7 +161,7 @@ edit_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_copy (gdisp); } @@ -171,7 +172,7 @@ edit_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 0); } @@ -182,7 +183,7 @@ edit_paste_into_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 1); } @@ -193,10 +194,9 @@ edit_clear_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_clear (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -206,10 +206,9 @@ edit_fill_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_fill (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -219,10 +218,9 @@ edit_stroke_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_stroke (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -232,7 +230,7 @@ edit_undo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_pop (gdisp->gimage); } @@ -243,7 +241,7 @@ edit_redo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_redo (gdisp->gimage); } @@ -254,7 +252,7 @@ edit_named_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_cut (gdisp); } @@ -265,7 +263,7 @@ edit_named_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_copy (gdisp); } @@ -276,7 +274,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_paste (gdisp); } @@ -287,7 +285,7 @@ select_toggle_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); selection_hide (gdisp->select, (void *) gdisp); gdisplays_flush (); @@ -299,7 +297,7 @@ select_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_invert (gdisp->gimage); gdisplays_flush (); @@ -311,7 +309,7 @@ select_all_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_all (gdisp->gimage); gdisplays_flush (); @@ -323,7 +321,7 @@ select_none_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_none (gdisp->gimage); gdisplays_flush (); @@ -335,9 +333,10 @@ select_float_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), 0, 0); + gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), + 0, 0); gdisplays_flush (); } @@ -347,7 +346,7 @@ select_sharpen_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_sharpen (gdisp->gimage); gdisplays_flush (); @@ -359,7 +358,7 @@ select_border_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Border Selection"), N_("Border selection by:"), @@ -378,7 +377,7 @@ select_feather_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Feather Selection"), N_("Feather selection by:"), @@ -397,7 +396,7 @@ select_grow_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Grow Selection"), N_("Grow selection by:"), @@ -416,7 +415,7 @@ select_shrink_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Shrink Selection"), N_("Shrink selection by:"), @@ -435,7 +434,8 @@ select_save_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + gimage_mask_save (gdisp->gimage); gdisplays_flush (); } @@ -446,7 +446,7 @@ view_dot_for_dot_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_set_dot_for_dot (gdisp, GTK_CHECK_MENU_ITEM (widget)->active); } @@ -457,7 +457,7 @@ view_zoomin_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMIN); } @@ -468,7 +468,7 @@ view_zoomout_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMOUT); } @@ -480,7 +480,7 @@ view_zoom_val (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, val); } @@ -554,7 +554,7 @@ view_window_info_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (! gdisp->window_info_dialog) gdisp->window_info_dialog = info_window_create ((void *) gdisp); @@ -568,7 +568,7 @@ view_toggle_rulers_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); /* This routine use promiscuous knowledge of gtk internals * in order to hide and show the rulers "smoothly". This @@ -615,7 +615,7 @@ view_toggle_guides_cmd_callback (GtkWidget *widget, GDisplay * gdisp; int old_val; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); old_val = gdisp->draw_guides; gdisp->draw_guides = GTK_CHECK_MENU_ITEM (widget)->active; @@ -633,7 +633,7 @@ view_snap_to_guides_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisp->snap_to_guides = GTK_CHECK_MENU_ITEM (widget)->active; } @@ -644,7 +644,7 @@ view_toggle_statusbar_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (!GTK_CHECK_MENU_ITEM (widget)->active) { @@ -664,7 +664,7 @@ view_new_view_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_new_view (gdisp); } @@ -675,10 +675,9 @@ view_shrink_wrap_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - if (gdisp) - shrink_wrap_display (gdisp); + shrink_wrap_display (gdisp); } void @@ -687,7 +686,8 @@ image_equalize_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_equalize ((void *) gdisp->gimage); gdisplays_flush (); } @@ -698,7 +698,8 @@ image_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_invert ((void *) gdisp->gimage); gdisplays_flush (); } @@ -709,7 +710,8 @@ image_desaturate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_desaturate ((void *) gdisp->gimage); gdisplays_flush (); } @@ -720,7 +722,8 @@ channel_ops_duplicate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_duplicate ((void *) gdisp->gimage); } @@ -730,7 +733,8 @@ channel_ops_offset_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_offset ((void *) gdisp->gimage); } @@ -740,7 +744,8 @@ image_convert_rgb_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_rgb ((void *) gdisp->gimage); } @@ -750,7 +755,8 @@ image_convert_grayscale_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_grayscale ((void *) gdisp->gimage); } @@ -760,7 +766,8 @@ image_convert_indexed_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_indexed ((void *) gdisp->gimage); } @@ -768,12 +775,11 @@ void image_resize_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_resize; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_resize; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -801,12 +807,11 @@ void image_scale_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_scale; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_scale; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -835,10 +840,10 @@ layers_previous_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -861,10 +866,10 @@ layers_next_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -888,7 +893,7 @@ layers_raise_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -900,7 +905,7 @@ layers_lower_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -912,7 +917,7 @@ layers_raise_to_top_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer_to_top (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -924,7 +929,7 @@ layers_lower_to_bottom_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer_to_bottom (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -936,7 +941,7 @@ layers_anchor_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); floating_sel_anchor (gimage_get_active_layer (gdisp->gimage)); gdisplays_flush (); @@ -948,7 +953,7 @@ layers_merge_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layers_dialog_layer_merge_query (gdisp->gimage, TRUE); } @@ -959,7 +964,7 @@ layers_flatten_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_flatten (gdisp->gimage); gdisplays_flush (); @@ -971,7 +976,7 @@ layers_alpha_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_alpha (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -983,7 +988,7 @@ layers_mask_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_mask (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -995,7 +1000,7 @@ layers_add_alpha_channel_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layer_add_alpha ( gdisp->gimage->active_layer); gdisplays_flush (); @@ -1016,9 +1021,9 @@ tools_swap_colors_cmd_callback (GtkWidget *widget, } void -tools_select_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +tools_select_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { GDisplay * gdisp; @@ -1043,9 +1048,9 @@ tools_select_cmd_callback (GtkWidget *widget, } void -filters_repeat_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +filters_repeat_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { plug_in_repeat (callback_action); } @@ -1076,13 +1081,13 @@ dialogs_gradient_editor_cmd_callback (GtkWidget *widget, gpointer client_data) { grad_create_gradient_editor (); -} /* dialogs_gradient_editor_cmd_callback */ +} void dialogs_lc_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisp; + GDisplay * gdisp; gdisp = gdisplay_active (); @@ -1093,12 +1098,14 @@ dialogs_lc_cmd_callback (GtkWidget *widget, } static void -cmap_dlg_sel_cb(ColormapDialog* dlg, gpointer user_data) +cmap_dlg_sel_cb (ColormapDialog *dlg, + gpointer user_data) { - guchar* c; + guchar * c; + GimpImage * img = colormap_dialog_image(dlg); - GimpImage* img = colormap_dialog_image(dlg); c = &img->cmap[colormap_dialog_col_index(dlg) * 3]; + if(active_color == FOREGROUND) palette_set_foreground (c[0], c[1], c[2]); else if(active_color == BACKGROUND) @@ -1109,13 +1116,15 @@ void dialogs_indexed_palette_cmd_callback (GtkWidget *widget, gpointer client_data) { - static ColormapDialog* cmap_dlg; - if(!cmap_dlg){ - cmap_dlg = colormap_dialog_create (image_context); - colormap_dialog_connect_selected(cmap_dlg_sel_cb, NULL, - cmap_dlg); - } - gtk_widget_show(GTK_WIDGET(cmap_dlg)); + static ColormapDialog * cmap_dlg; + + if(!cmap_dlg) + { + cmap_dlg = colormap_dialog_create (image_context); + colormap_dialog_connect_selected (cmap_dlg_sel_cb, NULL, cmap_dlg); + } + + gtk_widget_show (GTK_WIDGET (cmap_dlg)); } void @@ -1179,8 +1188,8 @@ static void image_resize_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_resize; - GImage *gimage; + ImageResize * image_resize; + GImage * gimage; image_resize = (ImageResize *) client_data; @@ -1211,9 +1220,9 @@ static void image_scale_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_scale; - GImage *gimage; - gboolean flush = FALSE; + ImageResize * image_scale; + GImage * gimage; + gboolean flush = FALSE; image_scale = (ImageResize *) client_data; @@ -1263,8 +1272,8 @@ image_scale_callback (GtkWidget *w, static gint image_delete_callback (GtkWidget *w, - GdkEvent *e, - gpointer client_data) + GdkEvent *e, + gpointer client_data) { image_cancel_callback (w, client_data); @@ -1277,6 +1286,7 @@ image_cancel_callback (GtkWidget *w, gpointer client_data) { ImageResize *image_resize; + image_resize = (ImageResize *) client_data; resize_widget_free (image_resize->resize); @@ -1288,10 +1298,10 @@ gimage_mask_feather_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_feather_radius = *(double*) call_data; g_free (call_data); @@ -1322,10 +1332,10 @@ gimage_mask_border_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_border_radius = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1356,10 +1366,10 @@ gimage_mask_grow_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_grow_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1391,9 +1401,9 @@ gimage_mask_shrink_callback (GtkWidget *w, gpointer call_data) { GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - int radius_x; - int radius_y; + GUnit unit; + gint radius_x; + gint radius_y; selection_shrink_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); diff --git a/app/commands.c b/app/commands.c index 7b258a42c8..bfb3e39b0a 100644 --- a/app/commands.c +++ b/app/commands.c @@ -68,6 +68,10 @@ #include "libgimp/gimpintl.h" +#define return_if_no_display(gdisp) \ + gdisp = gdisplay_active (); \ + if (!gdisp) return + typedef struct { Resize * resize; @@ -78,20 +82,20 @@ typedef struct extern void layers_dialog_layer_merge_query (GImage *, int); /* local functions */ -static void image_resize_callback (GtkWidget *, gpointer); -static void image_scale_callback (GtkWidget *, gpointer); -static void image_cancel_callback (GtkWidget *, gpointer); -static gint image_delete_callback (GtkWidget *, GdkEvent *, gpointer); +static void image_resize_callback (GtkWidget *, gpointer); +static void image_scale_callback (GtkWidget *, gpointer); +static void image_cancel_callback (GtkWidget *, gpointer); +static gint image_delete_callback (GtkWidget *, GdkEvent *, 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_border_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); /* local variables */ -static double selection_feather_radius = 5.0; -static int selection_border_radius = 5; -static int selection_grow_pixels = 1; -static int selection_shrink_pixels = 1; +static gdouble selection_feather_radius = 5.0; +static gint selection_border_radius = 5; +static gint selection_grow_pixels = 1; +static gint selection_shrink_pixels = 1; void @@ -122,16 +126,13 @@ file_revert_cmd_callback (GtkWidget *widget, file_revert_callback (widget, client_data); } - - - void file_close_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_close_window (gdisp, FALSE); } @@ -149,7 +150,7 @@ edit_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_cut (gdisp); } @@ -160,7 +161,7 @@ edit_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_copy (gdisp); } @@ -171,7 +172,7 @@ edit_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 0); } @@ -182,7 +183,7 @@ edit_paste_into_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 1); } @@ -193,10 +194,9 @@ edit_clear_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_clear (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -206,10 +206,9 @@ edit_fill_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_fill (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -219,10 +218,9 @@ edit_stroke_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_stroke (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -232,7 +230,7 @@ edit_undo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_pop (gdisp->gimage); } @@ -243,7 +241,7 @@ edit_redo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_redo (gdisp->gimage); } @@ -254,7 +252,7 @@ edit_named_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_cut (gdisp); } @@ -265,7 +263,7 @@ edit_named_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_copy (gdisp); } @@ -276,7 +274,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_paste (gdisp); } @@ -287,7 +285,7 @@ select_toggle_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); selection_hide (gdisp->select, (void *) gdisp); gdisplays_flush (); @@ -299,7 +297,7 @@ select_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_invert (gdisp->gimage); gdisplays_flush (); @@ -311,7 +309,7 @@ select_all_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_all (gdisp->gimage); gdisplays_flush (); @@ -323,7 +321,7 @@ select_none_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_none (gdisp->gimage); gdisplays_flush (); @@ -335,9 +333,10 @@ select_float_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), 0, 0); + gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), + 0, 0); gdisplays_flush (); } @@ -347,7 +346,7 @@ select_sharpen_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_sharpen (gdisp->gimage); gdisplays_flush (); @@ -359,7 +358,7 @@ select_border_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Border Selection"), N_("Border selection by:"), @@ -378,7 +377,7 @@ select_feather_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Feather Selection"), N_("Feather selection by:"), @@ -397,7 +396,7 @@ select_grow_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Grow Selection"), N_("Grow selection by:"), @@ -416,7 +415,7 @@ select_shrink_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Shrink Selection"), N_("Shrink selection by:"), @@ -435,7 +434,8 @@ select_save_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + gimage_mask_save (gdisp->gimage); gdisplays_flush (); } @@ -446,7 +446,7 @@ view_dot_for_dot_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_set_dot_for_dot (gdisp, GTK_CHECK_MENU_ITEM (widget)->active); } @@ -457,7 +457,7 @@ view_zoomin_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMIN); } @@ -468,7 +468,7 @@ view_zoomout_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMOUT); } @@ -480,7 +480,7 @@ view_zoom_val (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, val); } @@ -554,7 +554,7 @@ view_window_info_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (! gdisp->window_info_dialog) gdisp->window_info_dialog = info_window_create ((void *) gdisp); @@ -568,7 +568,7 @@ view_toggle_rulers_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); /* This routine use promiscuous knowledge of gtk internals * in order to hide and show the rulers "smoothly". This @@ -615,7 +615,7 @@ view_toggle_guides_cmd_callback (GtkWidget *widget, GDisplay * gdisp; int old_val; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); old_val = gdisp->draw_guides; gdisp->draw_guides = GTK_CHECK_MENU_ITEM (widget)->active; @@ -633,7 +633,7 @@ view_snap_to_guides_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisp->snap_to_guides = GTK_CHECK_MENU_ITEM (widget)->active; } @@ -644,7 +644,7 @@ view_toggle_statusbar_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (!GTK_CHECK_MENU_ITEM (widget)->active) { @@ -664,7 +664,7 @@ view_new_view_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_new_view (gdisp); } @@ -675,10 +675,9 @@ view_shrink_wrap_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - if (gdisp) - shrink_wrap_display (gdisp); + shrink_wrap_display (gdisp); } void @@ -687,7 +686,8 @@ image_equalize_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_equalize ((void *) gdisp->gimage); gdisplays_flush (); } @@ -698,7 +698,8 @@ image_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_invert ((void *) gdisp->gimage); gdisplays_flush (); } @@ -709,7 +710,8 @@ image_desaturate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_desaturate ((void *) gdisp->gimage); gdisplays_flush (); } @@ -720,7 +722,8 @@ channel_ops_duplicate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_duplicate ((void *) gdisp->gimage); } @@ -730,7 +733,8 @@ channel_ops_offset_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_offset ((void *) gdisp->gimage); } @@ -740,7 +744,8 @@ image_convert_rgb_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_rgb ((void *) gdisp->gimage); } @@ -750,7 +755,8 @@ image_convert_grayscale_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_grayscale ((void *) gdisp->gimage); } @@ -760,7 +766,8 @@ image_convert_indexed_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_indexed ((void *) gdisp->gimage); } @@ -768,12 +775,11 @@ void image_resize_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_resize; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_resize; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -801,12 +807,11 @@ void image_scale_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_scale; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_scale; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -835,10 +840,10 @@ layers_previous_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -861,10 +866,10 @@ layers_next_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -888,7 +893,7 @@ layers_raise_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -900,7 +905,7 @@ layers_lower_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -912,7 +917,7 @@ layers_raise_to_top_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer_to_top (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -924,7 +929,7 @@ layers_lower_to_bottom_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer_to_bottom (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -936,7 +941,7 @@ layers_anchor_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); floating_sel_anchor (gimage_get_active_layer (gdisp->gimage)); gdisplays_flush (); @@ -948,7 +953,7 @@ layers_merge_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layers_dialog_layer_merge_query (gdisp->gimage, TRUE); } @@ -959,7 +964,7 @@ layers_flatten_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_flatten (gdisp->gimage); gdisplays_flush (); @@ -971,7 +976,7 @@ layers_alpha_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_alpha (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -983,7 +988,7 @@ layers_mask_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_mask (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -995,7 +1000,7 @@ layers_add_alpha_channel_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layer_add_alpha ( gdisp->gimage->active_layer); gdisplays_flush (); @@ -1016,9 +1021,9 @@ tools_swap_colors_cmd_callback (GtkWidget *widget, } void -tools_select_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +tools_select_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { GDisplay * gdisp; @@ -1043,9 +1048,9 @@ tools_select_cmd_callback (GtkWidget *widget, } void -filters_repeat_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +filters_repeat_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { plug_in_repeat (callback_action); } @@ -1076,13 +1081,13 @@ dialogs_gradient_editor_cmd_callback (GtkWidget *widget, gpointer client_data) { grad_create_gradient_editor (); -} /* dialogs_gradient_editor_cmd_callback */ +} void dialogs_lc_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisp; + GDisplay * gdisp; gdisp = gdisplay_active (); @@ -1093,12 +1098,14 @@ dialogs_lc_cmd_callback (GtkWidget *widget, } static void -cmap_dlg_sel_cb(ColormapDialog* dlg, gpointer user_data) +cmap_dlg_sel_cb (ColormapDialog *dlg, + gpointer user_data) { - guchar* c; + guchar * c; + GimpImage * img = colormap_dialog_image(dlg); - GimpImage* img = colormap_dialog_image(dlg); c = &img->cmap[colormap_dialog_col_index(dlg) * 3]; + if(active_color == FOREGROUND) palette_set_foreground (c[0], c[1], c[2]); else if(active_color == BACKGROUND) @@ -1109,13 +1116,15 @@ void dialogs_indexed_palette_cmd_callback (GtkWidget *widget, gpointer client_data) { - static ColormapDialog* cmap_dlg; - if(!cmap_dlg){ - cmap_dlg = colormap_dialog_create (image_context); - colormap_dialog_connect_selected(cmap_dlg_sel_cb, NULL, - cmap_dlg); - } - gtk_widget_show(GTK_WIDGET(cmap_dlg)); + static ColormapDialog * cmap_dlg; + + if(!cmap_dlg) + { + cmap_dlg = colormap_dialog_create (image_context); + colormap_dialog_connect_selected (cmap_dlg_sel_cb, NULL, cmap_dlg); + } + + gtk_widget_show (GTK_WIDGET (cmap_dlg)); } void @@ -1179,8 +1188,8 @@ static void image_resize_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_resize; - GImage *gimage; + ImageResize * image_resize; + GImage * gimage; image_resize = (ImageResize *) client_data; @@ -1211,9 +1220,9 @@ static void image_scale_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_scale; - GImage *gimage; - gboolean flush = FALSE; + ImageResize * image_scale; + GImage * gimage; + gboolean flush = FALSE; image_scale = (ImageResize *) client_data; @@ -1263,8 +1272,8 @@ image_scale_callback (GtkWidget *w, static gint image_delete_callback (GtkWidget *w, - GdkEvent *e, - gpointer client_data) + GdkEvent *e, + gpointer client_data) { image_cancel_callback (w, client_data); @@ -1277,6 +1286,7 @@ image_cancel_callback (GtkWidget *w, gpointer client_data) { ImageResize *image_resize; + image_resize = (ImageResize *) client_data; resize_widget_free (image_resize->resize); @@ -1288,10 +1298,10 @@ gimage_mask_feather_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_feather_radius = *(double*) call_data; g_free (call_data); @@ -1322,10 +1332,10 @@ gimage_mask_border_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_border_radius = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1356,10 +1366,10 @@ gimage_mask_grow_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_grow_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1391,9 +1401,9 @@ gimage_mask_shrink_callback (GtkWidget *w, gpointer call_data) { GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - int radius_x; - int radius_y; + GUnit unit; + gint radius_x; + gint radius_y; selection_shrink_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); diff --git a/app/context_manager.c b/app/context_manager.c index 82a45659be..f82bba1d9e 100644 --- a/app/context_manager.c +++ b/app/context_manager.c @@ -15,6 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #include "context_manager.h" void diff --git a/app/context_manager.h b/app/context_manager.h index e7c38e140b..e17288a341 100644 --- a/app/context_manager.h +++ b/app/context_manager.h @@ -23,4 +23,4 @@ void context_manager_init (void); void context_manager_free (void); -#endif /* __GIMP_CONTEXT_H__ */ +#endif /* __CONTEXT_MANAGER_H__ */ diff --git a/app/core/gimpcontext.c b/app/core/gimpcontext.c index 2467b56e87..e9e71a2c0f 100644 --- a/app/core/gimpcontext.c +++ b/app/core/gimpcontext.c @@ -25,17 +25,25 @@ g_return_if_fail ((context) != NULL); \ g_return_if_fail (GIMP_IS_CONTEXT (context)); -#define context_return_val_if_fail(context, val) \ +#define context_return_val_if_fail(context,val) \ g_return_val_if_fail ((context) != NULL, (val)); \ g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val)); #define context_check_current(context) \ ((context) = (context) ? (context) : current_context) -#define context_find_defined(context, field_defined) \ +#define context_find_defined(context,field_defined) \ while (!((context)->field_defined) && (context)->parent) \ (context) = (context)->parent +enum { + ARG_0, + ARG_OPACITY, + ARG_PAINT_MODE, + ARG_IMAGE, + ARG_DISPLAY +}; + enum { OPACITY_CHANGED, PAINT_MODE_CHANGED, @@ -63,6 +71,63 @@ static GimpContext * standard_context = NULL; /* private functions ******************************************************/ +static void +gimp_context_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GimpContext *context; + + context = GIMP_CONTEXT (object); + + switch (arg_id) + { + case ARG_OPACITY: + gimp_context_set_opacity (context, GTK_VALUE_DOUBLE (*arg)); + break; + case ARG_PAINT_MODE: + gimp_context_set_paint_mode (context, GTK_VALUE_INT (*arg)); + break; + case ARG_IMAGE: + gimp_context_set_image (context, GTK_VALUE_POINTER (*arg)); + break; + case ARG_DISPLAY: + gimp_context_set_display (context, GTK_VALUE_POINTER (*arg)); + break; + default: + break; + } +} + +static void +gimp_context_get_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GimpContext *context; + + context = GIMP_CONTEXT (object); + + switch (arg_id) + { + case ARG_OPACITY: + GTK_VALUE_DOUBLE (*arg) = gimp_context_get_opacity (context); + break; + case ARG_PAINT_MODE: + GTK_VALUE_INT (*arg) = gimp_context_get_paint_mode (context); + break; + case ARG_IMAGE: + GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context); + break; + case ARG_DISPLAY: + GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + static void gimp_context_destroy (GtkObject *object) { @@ -86,6 +151,15 @@ gimp_context_class_init (GimpContextClass *klass) object_class = GTK_OBJECT_CLASS (klass); + gtk_object_add_arg_type ("GimpContext::opacity", + GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY); + gtk_object_add_arg_type ("GimpContext::paint_mode", + GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE); + gtk_object_add_arg_type ("GimpContext::image", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_IMAGE); + gtk_object_add_arg_type ("GimpContext::display", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_DISPLAY); + parent_class = gtk_type_class (gimp_object_get_type ()); gimp_context_signals[OPACITY_CHANGED] = @@ -94,7 +168,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, opacity_changed), - gimp_sigtype_void); + gimp_sigtype_double); gimp_context_signals[PAINT_MODE_CHANGED] = gimp_signal_new ("paint_mode_changed", @@ -102,7 +176,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, paint_mode_changed), - gimp_sigtype_void); + gimp_sigtype_int); gimp_context_signals[IMAGE_CHANGED] = gimp_signal_new ("image_changed", @@ -110,7 +184,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, image_changed), - gimp_sigtype_void); + gimp_sigtype_pointer); gimp_context_signals[DISPLAY_CHANGED] = gimp_signal_new ("display_changed", @@ -118,17 +192,19 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, display_changed), - gimp_sigtype_void); + gimp_sigtype_pointer); gtk_object_class_add_signals (object_class, gimp_context_signals, LAST_SIGNAL); + object_class->set_arg = gimp_context_set_arg; + object_class->get_arg = gimp_context_get_arg; + object_class->destroy = gimp_context_destroy; + klass->opacity_changed = NULL; klass->paint_mode_changed = NULL; klass->image_changed = NULL; klass->display_changed = NULL; - - object_class->destroy = gimp_context_destroy; } static void @@ -326,7 +402,8 @@ gimp_context_set_opacity (GimpContext *context, context->opacity = opacity; gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[OPACITY_CHANGED]); + gimp_context_signals[OPACITY_CHANGED], + opacity); } gboolean @@ -371,7 +448,8 @@ gimp_context_set_paint_mode (GimpContext *context, context->paint_mode = paint_mode; gtk_signal_emit (GTK_OBJECT(context), - gimp_context_signals[PAINT_MODE_CHANGED]); + gimp_context_signals[PAINT_MODE_CHANGED], + paint_mode); } gboolean @@ -414,9 +492,12 @@ gimp_context_set_image (GimpContext *context, context_return_if_fail (context); context_find_defined (context, image_defined); + if (context->image == image) return; + context->image = image; gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[IMAGE_CHANGED]); + gimp_context_signals[IMAGE_CHANGED], + image); } gboolean @@ -455,13 +536,22 @@ void gimp_context_set_display (GimpContext *context, GDisplay *display) { + GimpContext *orig = context; + context_check_current (context); context_return_if_fail (context); context_find_defined (context, display_defined); + if (context->display == display) return; + context->display = display; + + /* set the image _before_ emitting the display_changed signal */ + gimp_context_set_image (orig, display ? display->gimage : NULL); + gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[DISPLAY_CHANGED]); + gimp_context_signals[DISPLAY_CHANGED], + display); } gboolean diff --git a/app/core/gimpcontext.h b/app/core/gimpcontext.h index 7b348e9e37..08714b7798 100644 --- a/app/core/gimpcontext.h +++ b/app/core/gimpcontext.h @@ -20,7 +20,7 @@ #include -#include "gdisplayF.h" +#include "gdisplay.h" #include "gimpimageF.h" #include "gimpobjectP.h" @@ -30,6 +30,22 @@ #define GIMP_IS_CONTEXT(obj) (GIMP_CHECK_TYPE ((obj), GIMP_TYPE_CONTEXT)) #define GIMP_IS_CONTEXT_CLASS(klass) (GIMP_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CONTEXT)) +typedef enum +{ + GIMP_CONTEXT_ARG_OPACITY = 1 << 0, + GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 1, + GIMP_CONTEXT_ARG_IMAGE = 1 << 2, + GIMP_CONTEXT_ARG_DISPLAY = 1 << 3, + + /* aliases + */ + GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_OPACITY | + GIMP_CONTEXT_ARG_PAINT_MODE, + GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_PAINT | + GIMP_CONTEXT_ARG_IMAGE | + GIMP_CONTEXT_ARG_DISPLAY +} GimpContextArgs; + typedef struct _GimpContext GimpContext; typedef struct _GimpContextClass GimpContextClass; @@ -61,11 +77,11 @@ struct _GimpContextClass { GimpObjectClass parent_class; - void (* opacity_changed) (GimpContext *context); - void (* paint_mode_changed) (GimpContext *context); + void (* opacity_changed) (GimpContext *context, gdouble opacity); + void (* paint_mode_changed) (GimpContext *context, gint paint_mode); - void (* image_changed) (GimpContext *context); - void (* display_changed) (GimpContext *context); + void (* image_changed) (GimpContext *context, gpointer image); + void (* display_changed) (GimpContext *context, gpointer display); }; GtkType gimp_context_get_type (void); diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c index 0504a1431e..eaa818b15a 100644 --- a/app/core/gimpprojection.c +++ b/app/core/gimpprojection.c @@ -29,6 +29,7 @@ #include "gdisplay_ops.h" #include "general.h" #include "gimage_mask.h" +#include "gimpcontext.h" #include "gimprc.h" #include "gximage.h" #include "image_render.h" @@ -154,7 +155,6 @@ gdisplay_new (GimpImage *gimage, } - static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5); static int @@ -283,6 +283,7 @@ static void gdisplay_delete (GDisplay *gdisp) { GDisplay *tool_gdisp; + GimpContext *context; g_hash_table_remove (display_ht, gdisp->shell); g_hash_table_remove (display_ht, gdisp->canvas); @@ -331,6 +332,11 @@ gdisplay_delete (GDisplay *gdisp) if (popup_shell == gdisp->shell) popup_shell= NULL; + /* set the active display to NULL */ + context = gimp_context_get_user (); + if (gimp_context_get_display (context) == gdisp) + gimp_context_set_display (context, NULL); + gtk_widget_unref (gdisp->shell); g_free (gdisp); @@ -1520,7 +1526,7 @@ gdisplay_remove_override_cursor (GDisplay *gdisp) } else { -/* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ + /* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ } } @@ -1676,15 +1682,28 @@ gdisplay_expose_full (GDisplay *gdisp) GDisplay * gdisplay_active () { + /* FIXME: this function may become useless once the GimpContext, which also + * has an active display, is properly tested + * TODO: ensure that gimp_context_get_display (gimp_context_get_user ()) + * _always_ return the correct display + * + * ideally, this function's body should be: + * { + * return gimp_context_get_display (gimp_context_get_user ()); + * } + */ + GtkWidget *event_widget; GtkWidget *toplevel_widget; GdkEvent *event; GDisplay *gdisp = NULL; - /* If the popup shell is valid, then get the gdisplay associated with that shell */ + /* If the popup shell is valid, then get the gdisplay associated + * with that shell + */ event = gtk_get_current_event (); event_widget = gtk_get_event_widget (event); - if (event != NULL) + if (event != NULL) gdk_event_free (event); if (event_widget == NULL) @@ -1698,11 +1717,22 @@ gdisplay_active () if (gdisp) return gdisp; - if (popup_shell) - { - gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); - return gdisp; - } + /* The following is insane, since the checking if the display is valid + * should not be here - this will be corrected, if the active_image stuff + * moves to GimpContext. */ + + gdisp = gimp_context_get_display (gimp_context_get_user ()); + + if (g_slist_index(display_list, gdisp) >= 0) + return gdisp; + + /* disabled, since tear-off menus may have pointers to gone displays... + * if (popup_shell) + * { + * gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); + * return gdisp; + * } + */ return NULL; } @@ -2018,6 +2048,7 @@ gdisplays_delete () g_slist_free (display_list); } + GDisplay * gdisplays_check_valid (GDisplay *gtest, GimpImage *gimage) { diff --git a/app/disp_callbacks.c b/app/disp_callbacks.c index 2fa890a9ec..b1630b1a35 100644 --- a/app/disp_callbacks.c +++ b/app/disp_callbacks.c @@ -24,8 +24,8 @@ #include "disp_callbacks.h" #include "gdisplay.h" #include "general.h" +#include "gimpcontext.h" #include "gimprc.h" -#include "gimpset.h" #include "interface.h" #include "layer_select.h" #include "move.h" @@ -110,17 +110,22 @@ gdisplay_shell_events (GtkWidget *w, GdkEvent *event, GDisplay *gdisp) { - /* Set the active Image to the image where the user clicked/typed */ - switch (event->type) { case GDK_BUTTON_PRESS: case GDK_KEY_PRESS: - gimp_set_set_active(image_context, gdisp->gimage); + /* Setting the context's display automatically sets the image, too */ + gimp_context_set_display (gimp_context_get_user (), gdisp); + + /* Always set the menu sensitivity to ensure the consitency of the + * tear-off menus + */ + gdisplay_set_menu_sensitivity (gdisp); break; default: break; - } + } + return FALSE; } @@ -280,7 +285,6 @@ gdisplay_canvas_events (GtkWidget *canvas, case 3: state |= GDK_BUTTON3_MASK; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 3, bevent->time); break; @@ -441,9 +445,6 @@ gdisplay_canvas_events (GtkWidget *canvas, } break; } - - /* We need this here in case of accelerators */ - gdisplay_set_menu_sensitivity (gdisp); break; case GDK_KEY_RELEASE: @@ -543,7 +544,6 @@ gdisplay_origin_button_press (GtkWidget *widget, { gdisp = data; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 1, event->time); } diff --git a/app/display/gimpdisplay-callbacks.c b/app/display/gimpdisplay-callbacks.c index 2fa890a9ec..b1630b1a35 100644 --- a/app/display/gimpdisplay-callbacks.c +++ b/app/display/gimpdisplay-callbacks.c @@ -24,8 +24,8 @@ #include "disp_callbacks.h" #include "gdisplay.h" #include "general.h" +#include "gimpcontext.h" #include "gimprc.h" -#include "gimpset.h" #include "interface.h" #include "layer_select.h" #include "move.h" @@ -110,17 +110,22 @@ gdisplay_shell_events (GtkWidget *w, GdkEvent *event, GDisplay *gdisp) { - /* Set the active Image to the image where the user clicked/typed */ - switch (event->type) { case GDK_BUTTON_PRESS: case GDK_KEY_PRESS: - gimp_set_set_active(image_context, gdisp->gimage); + /* Setting the context's display automatically sets the image, too */ + gimp_context_set_display (gimp_context_get_user (), gdisp); + + /* Always set the menu sensitivity to ensure the consitency of the + * tear-off menus + */ + gdisplay_set_menu_sensitivity (gdisp); break; default: break; - } + } + return FALSE; } @@ -280,7 +285,6 @@ gdisplay_canvas_events (GtkWidget *canvas, case 3: state |= GDK_BUTTON3_MASK; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 3, bevent->time); break; @@ -441,9 +445,6 @@ gdisplay_canvas_events (GtkWidget *canvas, } break; } - - /* We need this here in case of accelerators */ - gdisplay_set_menu_sensitivity (gdisp); break; case GDK_KEY_RELEASE: @@ -543,7 +544,6 @@ gdisplay_origin_button_press (GtkWidget *widget, { gdisp = data; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 1, event->time); } diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index 0504a1431e..eaa818b15a 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -29,6 +29,7 @@ #include "gdisplay_ops.h" #include "general.h" #include "gimage_mask.h" +#include "gimpcontext.h" #include "gimprc.h" #include "gximage.h" #include "image_render.h" @@ -154,7 +155,6 @@ gdisplay_new (GimpImage *gimage, } - static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5); static int @@ -283,6 +283,7 @@ static void gdisplay_delete (GDisplay *gdisp) { GDisplay *tool_gdisp; + GimpContext *context; g_hash_table_remove (display_ht, gdisp->shell); g_hash_table_remove (display_ht, gdisp->canvas); @@ -331,6 +332,11 @@ gdisplay_delete (GDisplay *gdisp) if (popup_shell == gdisp->shell) popup_shell= NULL; + /* set the active display to NULL */ + context = gimp_context_get_user (); + if (gimp_context_get_display (context) == gdisp) + gimp_context_set_display (context, NULL); + gtk_widget_unref (gdisp->shell); g_free (gdisp); @@ -1520,7 +1526,7 @@ gdisplay_remove_override_cursor (GDisplay *gdisp) } else { -/* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ + /* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ } } @@ -1676,15 +1682,28 @@ gdisplay_expose_full (GDisplay *gdisp) GDisplay * gdisplay_active () { + /* FIXME: this function may become useless once the GimpContext, which also + * has an active display, is properly tested + * TODO: ensure that gimp_context_get_display (gimp_context_get_user ()) + * _always_ return the correct display + * + * ideally, this function's body should be: + * { + * return gimp_context_get_display (gimp_context_get_user ()); + * } + */ + GtkWidget *event_widget; GtkWidget *toplevel_widget; GdkEvent *event; GDisplay *gdisp = NULL; - /* If the popup shell is valid, then get the gdisplay associated with that shell */ + /* If the popup shell is valid, then get the gdisplay associated + * with that shell + */ event = gtk_get_current_event (); event_widget = gtk_get_event_widget (event); - if (event != NULL) + if (event != NULL) gdk_event_free (event); if (event_widget == NULL) @@ -1698,11 +1717,22 @@ gdisplay_active () if (gdisp) return gdisp; - if (popup_shell) - { - gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); - return gdisp; - } + /* The following is insane, since the checking if the display is valid + * should not be here - this will be corrected, if the active_image stuff + * moves to GimpContext. */ + + gdisp = gimp_context_get_display (gimp_context_get_user ()); + + if (g_slist_index(display_list, gdisp) >= 0) + return gdisp; + + /* disabled, since tear-off menus may have pointers to gone displays... + * if (popup_shell) + * { + * gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); + * return gdisp; + * } + */ return NULL; } @@ -2018,6 +2048,7 @@ gdisplays_delete () g_slist_free (display_list); } + GDisplay * gdisplays_check_valid (GDisplay *gtest, GimpImage *gimage) { diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c index 2fa890a9ec..b1630b1a35 100644 --- a/app/display/gimpdisplayshell-callbacks.c +++ b/app/display/gimpdisplayshell-callbacks.c @@ -24,8 +24,8 @@ #include "disp_callbacks.h" #include "gdisplay.h" #include "general.h" +#include "gimpcontext.h" #include "gimprc.h" -#include "gimpset.h" #include "interface.h" #include "layer_select.h" #include "move.h" @@ -110,17 +110,22 @@ gdisplay_shell_events (GtkWidget *w, GdkEvent *event, GDisplay *gdisp) { - /* Set the active Image to the image where the user clicked/typed */ - switch (event->type) { case GDK_BUTTON_PRESS: case GDK_KEY_PRESS: - gimp_set_set_active(image_context, gdisp->gimage); + /* Setting the context's display automatically sets the image, too */ + gimp_context_set_display (gimp_context_get_user (), gdisp); + + /* Always set the menu sensitivity to ensure the consitency of the + * tear-off menus + */ + gdisplay_set_menu_sensitivity (gdisp); break; default: break; - } + } + return FALSE; } @@ -280,7 +285,6 @@ gdisplay_canvas_events (GtkWidget *canvas, case 3: state |= GDK_BUTTON3_MASK; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 3, bevent->time); break; @@ -441,9 +445,6 @@ gdisplay_canvas_events (GtkWidget *canvas, } break; } - - /* We need this here in case of accelerators */ - gdisplay_set_menu_sensitivity (gdisp); break; case GDK_KEY_RELEASE: @@ -543,7 +544,6 @@ gdisplay_origin_button_press (GtkWidget *widget, { gdisp = data; popup_shell = gdisp->shell; - gdisplay_set_menu_sensitivity (gdisp); gtk_menu_popup (GTK_MENU (gdisp->popup), NULL, NULL, NULL, NULL, 1, event->time); } diff --git a/app/gdisplay.c b/app/gdisplay.c index 0504a1431e..eaa818b15a 100644 --- a/app/gdisplay.c +++ b/app/gdisplay.c @@ -29,6 +29,7 @@ #include "gdisplay_ops.h" #include "general.h" #include "gimage_mask.h" +#include "gimpcontext.h" #include "gimprc.h" #include "gximage.h" #include "image_render.h" @@ -154,7 +155,6 @@ gdisplay_new (GimpImage *gimage, } - static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5); static int @@ -283,6 +283,7 @@ static void gdisplay_delete (GDisplay *gdisp) { GDisplay *tool_gdisp; + GimpContext *context; g_hash_table_remove (display_ht, gdisp->shell); g_hash_table_remove (display_ht, gdisp->canvas); @@ -331,6 +332,11 @@ gdisplay_delete (GDisplay *gdisp) if (popup_shell == gdisp->shell) popup_shell= NULL; + /* set the active display to NULL */ + context = gimp_context_get_user (); + if (gimp_context_get_display (context) == gdisp) + gimp_context_set_display (context, NULL); + gtk_widget_unref (gdisp->shell); g_free (gdisp); @@ -1520,7 +1526,7 @@ gdisplay_remove_override_cursor (GDisplay *gdisp) } else { -/* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ + /* g_warning ("Tried to remove override-cursor from un-overridden gdisp."); */ } } @@ -1676,15 +1682,28 @@ gdisplay_expose_full (GDisplay *gdisp) GDisplay * gdisplay_active () { + /* FIXME: this function may become useless once the GimpContext, which also + * has an active display, is properly tested + * TODO: ensure that gimp_context_get_display (gimp_context_get_user ()) + * _always_ return the correct display + * + * ideally, this function's body should be: + * { + * return gimp_context_get_display (gimp_context_get_user ()); + * } + */ + GtkWidget *event_widget; GtkWidget *toplevel_widget; GdkEvent *event; GDisplay *gdisp = NULL; - /* If the popup shell is valid, then get the gdisplay associated with that shell */ + /* If the popup shell is valid, then get the gdisplay associated + * with that shell + */ event = gtk_get_current_event (); event_widget = gtk_get_event_widget (event); - if (event != NULL) + if (event != NULL) gdk_event_free (event); if (event_widget == NULL) @@ -1698,11 +1717,22 @@ gdisplay_active () if (gdisp) return gdisp; - if (popup_shell) - { - gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); - return gdisp; - } + /* The following is insane, since the checking if the display is valid + * should not be here - this will be corrected, if the active_image stuff + * moves to GimpContext. */ + + gdisp = gimp_context_get_display (gimp_context_get_user ()); + + if (g_slist_index(display_list, gdisp) >= 0) + return gdisp; + + /* disabled, since tear-off menus may have pointers to gone displays... + * if (popup_shell) + * { + * gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell)); + * return gdisp; + * } + */ return NULL; } @@ -2018,6 +2048,7 @@ gdisplays_delete () g_slist_free (display_list); } + GDisplay * gdisplays_check_valid (GDisplay *gtest, GimpImage *gimage) { diff --git a/app/gimpcontext.c b/app/gimpcontext.c index 2467b56e87..e9e71a2c0f 100644 --- a/app/gimpcontext.c +++ b/app/gimpcontext.c @@ -25,17 +25,25 @@ g_return_if_fail ((context) != NULL); \ g_return_if_fail (GIMP_IS_CONTEXT (context)); -#define context_return_val_if_fail(context, val) \ +#define context_return_val_if_fail(context,val) \ g_return_val_if_fail ((context) != NULL, (val)); \ g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val)); #define context_check_current(context) \ ((context) = (context) ? (context) : current_context) -#define context_find_defined(context, field_defined) \ +#define context_find_defined(context,field_defined) \ while (!((context)->field_defined) && (context)->parent) \ (context) = (context)->parent +enum { + ARG_0, + ARG_OPACITY, + ARG_PAINT_MODE, + ARG_IMAGE, + ARG_DISPLAY +}; + enum { OPACITY_CHANGED, PAINT_MODE_CHANGED, @@ -63,6 +71,63 @@ static GimpContext * standard_context = NULL; /* private functions ******************************************************/ +static void +gimp_context_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GimpContext *context; + + context = GIMP_CONTEXT (object); + + switch (arg_id) + { + case ARG_OPACITY: + gimp_context_set_opacity (context, GTK_VALUE_DOUBLE (*arg)); + break; + case ARG_PAINT_MODE: + gimp_context_set_paint_mode (context, GTK_VALUE_INT (*arg)); + break; + case ARG_IMAGE: + gimp_context_set_image (context, GTK_VALUE_POINTER (*arg)); + break; + case ARG_DISPLAY: + gimp_context_set_display (context, GTK_VALUE_POINTER (*arg)); + break; + default: + break; + } +} + +static void +gimp_context_get_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) +{ + GimpContext *context; + + context = GIMP_CONTEXT (object); + + switch (arg_id) + { + case ARG_OPACITY: + GTK_VALUE_DOUBLE (*arg) = gimp_context_get_opacity (context); + break; + case ARG_PAINT_MODE: + GTK_VALUE_INT (*arg) = gimp_context_get_paint_mode (context); + break; + case ARG_IMAGE: + GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context); + break; + case ARG_DISPLAY: + GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + static void gimp_context_destroy (GtkObject *object) { @@ -86,6 +151,15 @@ gimp_context_class_init (GimpContextClass *klass) object_class = GTK_OBJECT_CLASS (klass); + gtk_object_add_arg_type ("GimpContext::opacity", + GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY); + gtk_object_add_arg_type ("GimpContext::paint_mode", + GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE); + gtk_object_add_arg_type ("GimpContext::image", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_IMAGE); + gtk_object_add_arg_type ("GimpContext::display", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_DISPLAY); + parent_class = gtk_type_class (gimp_object_get_type ()); gimp_context_signals[OPACITY_CHANGED] = @@ -94,7 +168,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, opacity_changed), - gimp_sigtype_void); + gimp_sigtype_double); gimp_context_signals[PAINT_MODE_CHANGED] = gimp_signal_new ("paint_mode_changed", @@ -102,7 +176,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, paint_mode_changed), - gimp_sigtype_void); + gimp_sigtype_int); gimp_context_signals[IMAGE_CHANGED] = gimp_signal_new ("image_changed", @@ -110,7 +184,7 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, image_changed), - gimp_sigtype_void); + gimp_sigtype_pointer); gimp_context_signals[DISPLAY_CHANGED] = gimp_signal_new ("display_changed", @@ -118,17 +192,19 @@ gimp_context_class_init (GimpContextClass *klass) object_class->type, GTK_SIGNAL_OFFSET (GimpContextClass, display_changed), - gimp_sigtype_void); + gimp_sigtype_pointer); gtk_object_class_add_signals (object_class, gimp_context_signals, LAST_SIGNAL); + object_class->set_arg = gimp_context_set_arg; + object_class->get_arg = gimp_context_get_arg; + object_class->destroy = gimp_context_destroy; + klass->opacity_changed = NULL; klass->paint_mode_changed = NULL; klass->image_changed = NULL; klass->display_changed = NULL; - - object_class->destroy = gimp_context_destroy; } static void @@ -326,7 +402,8 @@ gimp_context_set_opacity (GimpContext *context, context->opacity = opacity; gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[OPACITY_CHANGED]); + gimp_context_signals[OPACITY_CHANGED], + opacity); } gboolean @@ -371,7 +448,8 @@ gimp_context_set_paint_mode (GimpContext *context, context->paint_mode = paint_mode; gtk_signal_emit (GTK_OBJECT(context), - gimp_context_signals[PAINT_MODE_CHANGED]); + gimp_context_signals[PAINT_MODE_CHANGED], + paint_mode); } gboolean @@ -414,9 +492,12 @@ gimp_context_set_image (GimpContext *context, context_return_if_fail (context); context_find_defined (context, image_defined); + if (context->image == image) return; + context->image = image; gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[IMAGE_CHANGED]); + gimp_context_signals[IMAGE_CHANGED], + image); } gboolean @@ -455,13 +536,22 @@ void gimp_context_set_display (GimpContext *context, GDisplay *display) { + GimpContext *orig = context; + context_check_current (context); context_return_if_fail (context); context_find_defined (context, display_defined); + if (context->display == display) return; + context->display = display; + + /* set the image _before_ emitting the display_changed signal */ + gimp_context_set_image (orig, display ? display->gimage : NULL); + gtk_signal_emit (GTK_OBJECT (context), - gimp_context_signals[DISPLAY_CHANGED]); + gimp_context_signals[DISPLAY_CHANGED], + display); } gboolean diff --git a/app/gimpcontext.h b/app/gimpcontext.h index 7b348e9e37..08714b7798 100644 --- a/app/gimpcontext.h +++ b/app/gimpcontext.h @@ -20,7 +20,7 @@ #include -#include "gdisplayF.h" +#include "gdisplay.h" #include "gimpimageF.h" #include "gimpobjectP.h" @@ -30,6 +30,22 @@ #define GIMP_IS_CONTEXT(obj) (GIMP_CHECK_TYPE ((obj), GIMP_TYPE_CONTEXT)) #define GIMP_IS_CONTEXT_CLASS(klass) (GIMP_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CONTEXT)) +typedef enum +{ + GIMP_CONTEXT_ARG_OPACITY = 1 << 0, + GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 1, + GIMP_CONTEXT_ARG_IMAGE = 1 << 2, + GIMP_CONTEXT_ARG_DISPLAY = 1 << 3, + + /* aliases + */ + GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_OPACITY | + GIMP_CONTEXT_ARG_PAINT_MODE, + GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_PAINT | + GIMP_CONTEXT_ARG_IMAGE | + GIMP_CONTEXT_ARG_DISPLAY +} GimpContextArgs; + typedef struct _GimpContext GimpContext; typedef struct _GimpContextClass GimpContextClass; @@ -61,11 +77,11 @@ struct _GimpContextClass { GimpObjectClass parent_class; - void (* opacity_changed) (GimpContext *context); - void (* paint_mode_changed) (GimpContext *context); + void (* opacity_changed) (GimpContext *context, gdouble opacity); + void (* paint_mode_changed) (GimpContext *context, gint paint_mode); - void (* image_changed) (GimpContext *context); - void (* display_changed) (GimpContext *context); + void (* image_changed) (GimpContext *context, gpointer image); + void (* display_changed) (GimpContext *context, gpointer display); }; GtkType gimp_context_get_type (void); diff --git a/app/gimpset.c b/app/gimpset.c index ab6ac18ffd..077c4e202e 100644 --- a/app/gimpset.c +++ b/app/gimpset.c @@ -1,19 +1,38 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + #include "gimpsignal.h" #include "gimpsetP.h" /* Yep, this can be optimized quite a lot */ - -typedef struct _GimpSetHandler { - const gchar* signame; - GtkSignalFunc func; - gpointer user_data; +typedef struct _GimpSetHandler +{ + const gchar *signame; + GtkSignalFunc func; + gpointer user_data; } GimpSetHandler; -typedef struct { - gpointer object; - GArray* handlers; - guint destroy_handler; +typedef struct +{ + gpointer object; + GArray *handlers; + guint destroy_handler; } Node; enum @@ -24,284 +43,355 @@ enum LAST_SIGNAL }; -static Node* gimp_set_find_node (GimpSet* set, gpointer ob); -static Node* gimp_set_node_new (GimpSet* set, gpointer ob); -static void gimp_set_node_free (GimpSet* set, Node* n); - - - - +static Node * gimp_set_find_node (GimpSet* set, gpointer object); +static Node * gimp_set_node_new (GimpSet* set, gpointer obbject); +static void gimp_set_node_free (GimpSet* set, Node* node); static guint gimp_set_signals [LAST_SIGNAL]; static GimpObjectClass* parent_class; static void -gimp_set_destroy (GtkObject* ob) +gimp_set_destroy (GtkObject* object) { - GimpSet* set=GIMP_SET(ob); - GSList* l; - for(l=set->list;l;l=l->next) - gimp_set_node_free(set, l->data); - g_slist_free(set->list); - g_array_free(set->handlers, TRUE); - GTK_OBJECT_CLASS(parent_class)->destroy (ob); + GimpSet* set = GIMP_SET (object); + GSList* list; + + for (list = set->list; list; list = list->next) + gimp_set_node_free (set, list->data); + + g_slist_free (set->list); + g_array_free (set->handlers, TRUE); + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } static void gimp_set_init (GimpSet* set) { - set->list=NULL; - set->type=GTK_TYPE_OBJECT; - set->handlers=g_array_new(FALSE, FALSE, sizeof(GimpSetHandler)); - set->active_element=NULL; + set->list = NULL; + set->type = GTK_TYPE_OBJECT; + set->handlers = g_array_new (FALSE, FALSE, sizeof (GimpSetHandler)); + set->active_element = NULL; } static void gimp_set_class_init (GimpSetClass* klass) { - GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); - GtkType type = object_class->type; + GtkObjectClass *object_class; - parent_class=gtk_type_parent_class(type); + object_class = GTK_OBJECT_CLASS (klass); + + parent_class = gtk_type_class (gimp_object_get_type ()); - object_class->destroy = gimp_set_destroy; - - gimp_set_signals[ADD]= - gimp_signal_new ("add", GTK_RUN_FIRST, type, 0, gimp_sigtype_pointer); - gimp_set_signals[REMOVE]= - gimp_signal_new ("remove", GTK_RUN_FIRST, type, 0, gimp_sigtype_pointer); - gimp_set_signals[ACTIVE_CHANGED]= - gimp_signal_new ("active_changed", GTK_RUN_FIRST, type, 0, gimp_sigtype_pointer); - gtk_object_class_add_signals (object_class, - gimp_set_signals, - LAST_SIGNAL); -} + gimp_set_signals[ADD]= + gimp_signal_new ("add", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpSetClass, + add), + gimp_sigtype_pointer); -GtkType gimp_set_get_type (void) -{ - static GtkType type; - GIMP_TYPE_INIT(type, - GimpSet, - GimpSetClass, - gimp_set_init, - gimp_set_class_init, - GIMP_TYPE_OBJECT); - return type; -} + gimp_set_signals[REMOVE]= + gimp_signal_new ("remove", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpSetClass, + remove), + gimp_sigtype_pointer); + gimp_set_signals[ACTIVE_CHANGED]= + gimp_signal_new ("active_changed", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpSetClass, + active_changed), + gimp_sigtype_pointer); -GimpSet* -gimp_set_new (GtkType type, gboolean weak){ - GimpSet* set; + gtk_object_class_add_signals (object_class, gimp_set_signals, LAST_SIGNAL); - /* untyped sets must not be weak, since we can't attach a - * destroy handler */ - g_assert(!(type == GTK_TYPE_NONE && weak == TRUE)); + object_class->destroy = gimp_set_destroy; - set=gtk_type_new (gimp_set_get_type ()); - set->type=type; - set->weak=weak; - return set; -} - -static void -gimp_set_destroy_cb (GtkObject* ob, gpointer data){ - GimpSet* set=GIMP_SET(data); - gimp_set_remove(set, ob); -} - -static Node* -gimp_set_find_node (GimpSet* set, gpointer ob) -{ - GSList* l = set->list; - for(l = set->list; l; l = l->next){ - Node* n = l->data; - if (n->object == ob) - return n; - } - return NULL; -} - -static Node* -gimp_set_node_new (GimpSet* set, gpointer ob) -{ - gint i; - Node* n = g_new(Node, 1); - n->object = ob; - n->handlers = g_array_new(FALSE, FALSE, sizeof(guint)); - g_array_set_size(n->handlers, set->handlers->len); - for(i = 0;i < n->handlers->len; i++){ - GimpSetHandler* h - = &g_array_index(set->handlers, GimpSetHandler, i); - if(h->signame) - g_array_index(n->handlers, guint, i) - = gtk_signal_connect(GTK_OBJECT(ob), - h->signame, - h->func, - h->user_data); - } - if(set->weak) - n->destroy_handler - = gtk_signal_connect(GTK_OBJECT(ob), - "destroy", - GTK_SIGNAL_FUNC(gimp_set_destroy_cb), - set); - return n; -} - -static void -gimp_set_node_free (GimpSet* set, Node* n) -{ - gint i; - GimpObject* ob = n->object; - for(i=0;i < set->handlers->len; i++){ - GimpSetHandler* h - = &g_array_index(set->handlers, GimpSetHandler, i); - if(h->signame) - gtk_signal_disconnect(GTK_OBJECT(ob), - g_array_index(n->handlers, - guint, - i)); - } - if(set->weak) - gtk_signal_disconnect(GTK_OBJECT(ob), - n->destroy_handler); - g_array_free(n->handlers, TRUE); - g_free(n); -} - - -gboolean -gimp_set_add (GimpSet* set, gpointer val) -{ - g_return_val_if_fail(set, FALSE); - - if (set->type != GTK_TYPE_NONE) - g_return_val_if_fail(GTK_CHECK_TYPE(val, set->type), FALSE); - - if(gimp_set_find_node(set, val)) - return FALSE; - - set->list=g_slist_prepend(set->list, gimp_set_node_new(set, val)); - - gtk_signal_emit (GTK_OBJECT(set), gimp_set_signals[ADD], val); - return TRUE; -} - -gboolean -gimp_set_remove (GimpSet* set, gpointer val) { - Node* n; - - g_return_val_if_fail(set, FALSE); - - n = gimp_set_find_node (set, val); - g_return_val_if_fail(n, FALSE); - - gtk_signal_emit (GTK_OBJECT(set), gimp_set_signals[REMOVE], val); - - gimp_set_node_free(set, n); - - set->list=g_slist_remove(set->list, n); - return TRUE; -} - -gboolean -gimp_set_have (GimpSet* set, gpointer val) { - return !!gimp_set_find_node(set, val); -} - -void -gimp_set_foreach(GimpSet* set, GFunc func, gpointer user_data) -{ - GSList* l; - for(l=set->list; l;l=l->next){ - Node* n = l->data; - func(n->object, user_data); - } + klass->add = NULL; + klass->remove = NULL; + klass->active_changed = NULL; } GtkType -gimp_set_type (GimpSet* set){ - return set->type; +gimp_set_get_type (void) +{ + static GtkType gimpset_type = 0; + + GIMP_TYPE_INIT(gimpset_type, + GimpSet, + GimpSetClass, + gimp_set_init, + gimp_set_class_init, + GIMP_TYPE_OBJECT); + + return gimpset_type; +} + + +GimpSet * +gimp_set_new (GtkType type, + gboolean weak) +{ + GimpSet *set; + + /* untyped sets must not be weak, since we can't attach a + * destroy handler + */ + g_assert (!(type == GTK_TYPE_NONE && weak == TRUE)); + + set = gtk_type_new (gimp_set_get_type ()); + set->type = type; + set->weak = weak; + + return set; +} + +static void +gimp_set_destroy_cb (GtkObject *object, + gpointer data) +{ + GimpSet *set = GIMP_SET (data); + + gimp_set_remove (set, object); +} + +static Node * +gimp_set_find_node (GimpSet *set, + gpointer object) +{ + GSList *list = set->list; + + for(list = set->list; list; list = list->next) + { + Node *node = list->data; + + if (node->object == object) + return node; + } + + return NULL; +} + +static Node* +gimp_set_node_new (GimpSet *set, + gpointer object) +{ + gint i; + Node *node = g_new (Node, 1); + + node->object = object; + node->handlers = g_array_new (FALSE, FALSE, sizeof (guint)); + g_array_set_size (node->handlers, set->handlers->len); + + for (i = 0; i < node->handlers->len; i++) + { + GimpSetHandler *handler = + &g_array_index (set->handlers, GimpSetHandler, i); + + if (handler->signame) + g_array_index (node->handlers, guint, i) + = gtk_signal_connect (GTK_OBJECT(object), + handler->signame, + handler->func, + handler->user_data); + } + + if(set->weak) + node->destroy_handler = + gtk_signal_connect(GTK_OBJECT (object), "destroy", + GTK_SIGNAL_FUNC (gimp_set_destroy_cb), + set); + + return node; +} + +static void +gimp_set_node_free (GimpSet *set, + Node *node) +{ + gint i; + GimpObject *object = node->object; + + for (i=0; i < set->handlers->len; i++) + { + GimpSetHandler* handler = + &g_array_index (set->handlers, GimpSetHandler, i); + + if (handler->signame) + gtk_signal_disconnect (GTK_OBJECT (object), + g_array_index (node->handlers, guint, i)); + } + + if (set->weak) + gtk_signal_disconnect (GTK_OBJECT (object), + node->destroy_handler); + + g_array_free (node->handlers, TRUE); + g_free (node); +} + +gboolean +gimp_set_add (GimpSet *set, + gpointer val) +{ + g_return_val_if_fail (set, FALSE); + + if (set->type != GTK_TYPE_NONE) + g_return_val_if_fail (GTK_CHECK_TYPE (val, set->type), FALSE); + + if (gimp_set_find_node (set, val)) + return FALSE; + + set->list = g_slist_prepend (set->list, gimp_set_node_new (set, val)); + gtk_signal_emit (GTK_OBJECT (set), gimp_set_signals[ADD], val); + + return TRUE; +} + +gboolean +gimp_set_remove (GimpSet *set, + gpointer val) +{ + Node *node; + + g_return_val_if_fail (set, FALSE); + + node = gimp_set_find_node (set, val); + g_return_val_if_fail (node, FALSE); + + gtk_signal_emit (GTK_OBJECT (set), gimp_set_signals[REMOVE], val); + + gimp_set_node_free (set, node); + set->list = g_slist_remove (set->list, node); + + return TRUE; +} + +gboolean +gimp_set_have (GimpSet *set, + gpointer val) +{ + return !!gimp_set_find_node (set, val); } void -gimp_set_set_active (GimpSet* set, gpointer ob) +gimp_set_foreach (GimpSet *set, + GFunc func, + gpointer user_data) { - if (ob != set->active_element && gimp_set_have(set, ob)) { - set->active_element = ob; - gtk_signal_emit (GTK_OBJECT(set), gimp_set_signals[ACTIVE_CHANGED], ob); - } + GSList* list; + + for (list = set->list; list; list = list->next) + { + Node *node = list->data; + + func (node->object, user_data); + } +} + +GtkType +gimp_set_type (GimpSet* set) +{ + return set->type; +} + +void +gimp_set_set_active (GimpSet *set, + gpointer object) +{ + if (object != set->active_element && gimp_set_have (set, object)) + { + set->active_element = object; + gtk_signal_emit (GTK_OBJECT (set), + gimp_set_signals[ACTIVE_CHANGED], + object); + } } gpointer -gimp_set_get_active(GimpSet* set) +gimp_set_get_active (GimpSet* set) { - if (gimp_set_have(set, set->active_element)) - return set->active_element; - return NULL; + if (gimp_set_have (set, set->active_element)) + return set->active_element; + + return NULL; } GimpSetHandlerId -gimp_set_add_handler(GimpSet* set, const gchar* signame, - GtkSignalFunc handler, gpointer user_data){ - GimpSetHandler h; - GSList* l; - guint a; +gimp_set_add_handler (GimpSet *set, + const gchar *signame, + GtkSignalFunc handler, + gpointer user_data) +{ + GimpSetHandler set_handler; + GSList *list; + guint a; - g_assert(signame); + g_assert (signame); - /* you can't set a handler on something that's not a GTK - * object */ - g_assert(set->type != GTK_TYPE_NONE); + /* you can't set a handler on something that's not a GTK object */ + g_assert (set->type != GTK_TYPE_NONE); + + set_handler.signame = signame; + set_handler.func = handler; + set_handler.user_data = user_data; - h.signame = signame; - h.func = handler; - h.user_data = user_data; - - for(a=0;ahandlers->len;a++) - if(!g_array_index(set->handlers, GimpSetHandler, a).signame) - break; - if(ahandlers->len){ - g_array_index(set->handlers, GimpSetHandler, a) = h; - for(l=set->list;l;l=l->next){ - Node* n = l->data; - guint i = gtk_signal_connect(GTK_OBJECT(n->object), - signame, - handler, - user_data); - g_array_index(n->handlers, guint, a) = i; - } - } else{ - g_array_append_val(set->handlers, h); - for(l=set->list;l;l=l->next){ - Node* n = l->data; - guint i = gtk_signal_connect(GTK_OBJECT(n->object), - signame, - handler, - user_data); - g_array_append_val(n->handlers, i); - } + for (a = 0; a < set->handlers->len; a++) + if (! g_array_index (set->handlers, GimpSetHandler, a).signame) + break; + + if (a < set->handlers->len) + { + g_array_index (set->handlers, GimpSetHandler, a) = set_handler; + for (list = set->list; list; list = list->next) + { + Node *node = list->data; + guint i = gtk_signal_connect (GTK_OBJECT (node->object), signame, + handler, + user_data); + g_array_index (node->handlers, guint, a) = i; } - return a; + } + else + { + g_array_append_val (set->handlers, set_handler); + + for (list = set->list; list; list = list->next) + { + Node* node = list->data; + + guint i = gtk_signal_connect (GTK_OBJECT(node->object), signame, + handler, + user_data); + g_array_append_val (node->handlers, i); + } + } + + return a; } void -gimp_set_remove_handler(GimpSet* set, GimpSetHandlerId id) +gimp_set_remove_handler (GimpSet *set, + GimpSetHandlerId id) { - GSList* l; + GSList* list; - /* you can't remove a signal handler on something that's not a - * GTK object */ - g_return_if_fail(set->type != GTK_TYPE_NONE); + /* you can't remove a signal handler on something that's not a GTK object */ + g_return_if_fail (set->type != GTK_TYPE_NONE); - for(l=set->list;l;l=l->next){ - Node* n = l->data; - gtk_signal_disconnect(GTK_OBJECT(n->object), - g_array_index(n->handlers, guint, id)); - } - g_array_index(set->handlers, GimpSetHandler, id).signame = NULL; + for (list = set->list; list; list = list->next) + { + Node *node = list->data; + + gtk_signal_disconnect (GTK_OBJECT (node->object), + g_array_index (node->handlers, guint, id)); + } + + g_array_index (set->handlers, GimpSetHandler, id).signame = NULL; } - - diff --git a/app/gimpset.h b/app/gimpset.h index a8ffac5995..3c9969e97d 100644 --- a/app/gimpset.h +++ b/app/gimpset.h @@ -1,10 +1,26 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ #ifndef __GIMPSET_H__ #define __GIMPSET_H__ #include #include "gimpsetF.h" - /* GimpSet - a (usually) typed set of objects with signals for adding and removing of stuff. If it is weak, destroyed objects get removed automatically. If it is not, it refs them so they won't be freed @@ -16,14 +32,10 @@ is also illegal to ask for a weak untyped gimpset. */ -#define GIMP_TYPE_SET gimp_set_get_type() - -#define GIMP_SET(obj) GTK_CHECK_CAST (obj, GIMP_TYPE_SET, GimpSet) - - - +#define GIMP_TYPE_SET gimp_set_get_type() +#define GIMP_SET(obj) GTK_CHECK_CAST (obj, GIMP_TYPE_SET, GimpSet) #define GIMP_IS_SET(obj) GTK_CHECK_TYPE (obj, gimp_set_get_type()) - + /* Signals: add remove @@ -32,25 +44,33 @@ typedef guint GimpSetHandlerId; -guint gimp_set_get_type (void); +GtkType gimp_set_get_type (void); +GimpSet * gimp_set_new (GtkType type, + gboolean weak); -GimpSet* gimp_set_new (GtkType type, gboolean weak); -GtkType gimp_set_type (GimpSet* set); -gboolean gimp_set_add (GimpSet* gimpset, gpointer ob); -gboolean gimp_set_remove (GimpSet* gimpset, gpointer ob); -gboolean gimp_set_have (GimpSet* gimpset, gpointer ob); -void gimp_set_foreach(GimpSet* gimpset, GFunc func, - gpointer user_data); -gint gimp_set_size (GimpSet* gimpset); +GtkType gimp_set_type (GimpSet *set); -void gimp_set_set_active(GimpSet* gimpset, gpointer ob); -gpointer gimp_set_get_active(GimpSet* gimpset); +gboolean gimp_set_add (GimpSet *gimpset, + gpointer ob); +gboolean gimp_set_remove (GimpSet *gimpset, + gpointer ob); -GimpSetHandlerId gimp_set_add_handler (GimpSet* set, - const gchar* signame, - GtkSignalFunc handler, - gpointer user_data); -void gimp_set_remove_handler (GimpSet* set, - GimpSetHandlerId id); +gboolean gimp_set_have (GimpSet *gimpset, + gpointer ob); +void gimp_set_foreach (GimpSet *gimpset, + GFunc func, + gpointer user_data); +gint gimp_set_size (GimpSet* gimpset); -#endif +void gimp_set_set_active (GimpSet *gimpset, + gpointer ob); +gpointer gimp_set_get_active (GimpSet *gimpset); + +GimpSetHandlerId gimp_set_add_handler (GimpSet *set, + const gchar *signame, + GtkSignalFunc handler, + gpointer user_data); +void gimp_set_remove_handler (GimpSet *set, + GimpSetHandlerId id); + +#endif /* __GIMP_SET_H__ */ diff --git a/app/gimpsetF.h b/app/gimpsetF.h index 637bde4f44..3116f92fb9 100644 --- a/app/gimpsetF.h +++ b/app/gimpsetF.h @@ -1,3 +1,20 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ #ifndef __GIMPSETF_H__ #define __GIMPSETF_H__ diff --git a/app/gimpsetP.h b/app/gimpsetP.h index b2b1cba63f..747db9e9f9 100644 --- a/app/gimpsetP.h +++ b/app/gimpsetP.h @@ -1,25 +1,48 @@ -#ifndef __GIMPSETP_H__ -#define __GIMPSETP_H__ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef __GIMP_SET_P_H__ +#define __GIMP_SET_P_H__ #include "gimpobjectP.h" #include "gimpset.h" -struct _GimpSet{ - GimpObject gobject; - GtkType type; - GSList* list; - GArray* handlers; - gboolean weak; - gpointer active_element; -}; - -struct _GimpSetClass{ - GimpObjectClass parent_class; -}; +#define GIMP_SET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gimp_set_get_type(), GimpSetClass) typedef struct _GimpSetClass GimpSetClass; -#define GIMP_SET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gimp_set_get_type(), GimpSetClass) - +struct _GimpSet +{ + GimpObject gobject; -#endif + GtkType type; + GSList *list; + GArray *handlers; + gboolean weak; + gpointer active_element; +}; + +struct _GimpSetClass +{ + GimpObjectClass parent_class; + + void (* add) (GimpSet *gimpset, gpointer object); + void (* remove) (GimpSet *gimpset, gpointer object); + void (* active_changed) (GimpSet *gimpset, gpointer object); +}; + +#endif /* __GIMP_SET_P_H__ */ diff --git a/app/gimpsignal.c b/app/gimpsignal.c index 27bb566dee..4ba375599b 100644 --- a/app/gimpsignal.c +++ b/app/gimpsignal.c @@ -1,114 +1,167 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + #include "gimpsignal.h" -struct _GimpSignalType{ - GtkSignalMarshaller marshaller; - GtkType return_type; - guint nparams; - const GtkType* param_types; +struct _GimpSignalType +{ + GtkSignalMarshaller marshaller; + GtkType return_type; + guint nparams; + const GtkType *param_types; }; typedef const GtkType TypeArr[]; -GimpSignalID gimp_signal_new(const gchar* name, - GtkSignalRunType signal_flags, - GtkType object_type, - guint function_offset, - GimpSignalType* sig_type){ - return gtk_signal_newv(name, - signal_flags, - object_type, - function_offset, - sig_type->marshaller, - sig_type->return_type, - sig_type->nparams, - /* Bah. We try to be const correct, but - gtk isn't.. */ - (GtkType*)sig_type->param_types); +GimpSignalID gimp_signal_new (const gchar *name, + GtkSignalRunType signal_flags, + GtkType object_type, + guint function_offset, + GimpSignalType *sig_type) +{ + return gtk_signal_newv (name, + signal_flags, + object_type, + function_offset, + sig_type->marshaller, + sig_type->return_type, + sig_type->nparams, + /* Bah. We try to be const correct, but + gtk isn't.. */ + (GtkType *) sig_type->param_types); } -static GimpSignalType sigtype_void={ - gtk_signal_default_marshaller, - GTK_TYPE_NONE, - 0, - NULL +static GimpSignalType sigtype_void = +{ + gtk_signal_default_marshaller, + GTK_TYPE_NONE, + 0, + NULL }; -GimpSignalType* const gimp_sigtype_void=&sigtype_void; +GimpSignalType* const gimp_sigtype_void = &sigtype_void; static void -gimp_marshaller_pointer (GtkObject* object, +gimp_marshaller_pointer (GtkObject *object, GtkSignalFunc func, - gpointer func_data, - GtkArg* args) + gpointer func_data, + GtkArg *args) { - (*(GimpHandlerPointer)func) (object, - GTK_VALUE_POINTER (args[0]), - func_data); + (* (GimpHandlerPointer) func) (object, + GTK_VALUE_POINTER (args[0]), + func_data); } -static TypeArr pointer_types={ - GTK_TYPE_POINTER +static TypeArr pointer_types = +{ + GTK_TYPE_POINTER }; -static GimpSignalType sigtype_pointer={ - gimp_marshaller_pointer, - GTK_TYPE_NONE, - 1, - pointer_types +static GimpSignalType sigtype_pointer = +{ + gimp_marshaller_pointer, + GTK_TYPE_NONE, + 1, + pointer_types }; -GimpSignalType* const gimp_sigtype_pointer=&sigtype_pointer; +GimpSignalType* const gimp_sigtype_pointer = &sigtype_pointer; static void -gimp_marshaller_int (GtkObject* object, - GtkSignalFunc func, - gpointer func_data, - GtkArg* args) +gimp_marshaller_int (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) { - (*(GimpHandlerInt)func) (object, - GTK_VALUE_INT (args[0]), - func_data); + (* (GimpHandlerInt) func) (object, + GTK_VALUE_INT (args[0]), + func_data); } -static TypeArr int_types={ - GTK_TYPE_INT +static TypeArr int_types = +{ + GTK_TYPE_INT }; -static GimpSignalType sigtype_int={ - gimp_marshaller_int, - GTK_TYPE_NONE, - 1, - int_types +static GimpSignalType sigtype_int = +{ + gimp_marshaller_int, + GTK_TYPE_NONE, + 1, + int_types }; -GimpSignalType* const gimp_sigtype_int=&sigtype_int; +GimpSignalType* const gimp_sigtype_int = &sigtype_int; static void -gimp_marshaller_int_int_int_int (GtkObject* object, - GtkSignalFunc func, - gpointer func_data, - GtkArg* args) +gimp_marshaller_double (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) { - (*(GimpHandlerIntIntIntInt)func) (object, - GTK_VALUE_INT (args[0]), - GTK_VALUE_INT (args[1]), - GTK_VALUE_INT (args[2]), - GTK_VALUE_INT (args[3]), - func_data); + (* (GimpHandlerDouble) func) (object, + GTK_VALUE_DOUBLE (args[0]), + func_data); } -static TypeArr int_int_int_int_types={ - GTK_TYPE_INT, - GTK_TYPE_INT, - GTK_TYPE_INT, - GTK_TYPE_INT -}; - -static GimpSignalType sigtype_int_int_int_int={ - gimp_marshaller_int_int_int_int, - GTK_TYPE_NONE, - 4, - int_int_int_int_types +static TypeArr double_types = +{ + GTK_TYPE_DOUBLE }; -GimpSignalType* const gimp_sigtype_int_int_int_int=&sigtype_int_int_int_int; +static GimpSignalType sigtype_double = +{ + gimp_marshaller_double, + GTK_TYPE_NONE, + 1, + double_types +}; + +GimpSignalType* const gimp_sigtype_double = &sigtype_double; + +static void +gimp_marshaller_int_int_int_int (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) +{ + (* (GimpHandlerIntIntIntInt) func) (object, + GTK_VALUE_INT (args[0]), + GTK_VALUE_INT (args[1]), + GTK_VALUE_INT (args[2]), + GTK_VALUE_INT (args[3]), + func_data); +} + +static TypeArr int_int_int_int_types = +{ + GTK_TYPE_INT, + GTK_TYPE_INT, + GTK_TYPE_INT, + GTK_TYPE_INT +}; + +static GimpSignalType sigtype_int_int_int_int = +{ + gimp_marshaller_int_int_int_int, + GTK_TYPE_NONE, + 4, + int_int_int_int_types +}; + +GimpSignalType* const gimp_sigtype_int_int_int_int = &sigtype_int_int_int_int; diff --git a/app/gimpsignal.h b/app/gimpsignal.h index 5c866e5029..bc9fddbfc7 100644 --- a/app/gimpsignal.h +++ b/app/gimpsignal.h @@ -1,35 +1,52 @@ -#ifndef __GIMPSIGNAL_H__ -#define __GIMPSIGNAL_H__ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef __GIMP_SIGNAL_H__ +#define __GIMP_SIGNAL_H__ #include /* This is the gtk "signal id" */ typedef guint GimpSignalID; - typedef const struct _GimpSignalType GimpSignalType; + /* The arguments are encoded in the names.. */ extern GimpSignalType* const gimp_sigtype_void; -typedef void (*GimpHandlerVoid)(GtkObject*, gpointer); +typedef void (*GimpHandlerVoid) (GtkObject*, gpointer); extern GimpSignalType* const gimp_sigtype_pointer; -typedef void (*GimpHandlerPointer)(GtkObject*, gpointer, gpointer); +typedef void (*GimpHandlerPointer) (GtkObject*, gpointer, gpointer); extern GimpSignalType* const gimp_sigtype_int; -typedef void (*GimpHandlerInt)(GtkObject*, gint, gpointer); +typedef void (*GimpHandlerInt) (GtkObject*, gint, gpointer); + +extern GimpSignalType* const gimp_sigtype_double; +typedef void (*GimpHandlerDouble) (GtkObject*, gdouble, gpointer); extern GimpSignalType* const gimp_sigtype_int_int_int_int; typedef void (*GimpHandlerIntIntIntInt) (GtkObject*, gint, gint, gint, gint, gpointer); -GimpSignalID gimp_signal_new(const gchar* name, - GtkSignalRunType signal_flags, - GtkType object_type, - guint function_offset, - GimpSignalType* sig_type); +GimpSignalID gimp_signal_new (const gchar *name, + GtkSignalRunType signal_flags, + GtkType object_type, + guint function_offset, + GimpSignalType *sig_type); - - - -#endif +#endif /* __GIMP_SIGNAL_H__ */ diff --git a/app/gui/commands.c b/app/gui/commands.c index 7b258a42c8..bfb3e39b0a 100644 --- a/app/gui/commands.c +++ b/app/gui/commands.c @@ -68,6 +68,10 @@ #include "libgimp/gimpintl.h" +#define return_if_no_display(gdisp) \ + gdisp = gdisplay_active (); \ + if (!gdisp) return + typedef struct { Resize * resize; @@ -78,20 +82,20 @@ typedef struct extern void layers_dialog_layer_merge_query (GImage *, int); /* local functions */ -static void image_resize_callback (GtkWidget *, gpointer); -static void image_scale_callback (GtkWidget *, gpointer); -static void image_cancel_callback (GtkWidget *, gpointer); -static gint image_delete_callback (GtkWidget *, GdkEvent *, gpointer); +static void image_resize_callback (GtkWidget *, gpointer); +static void image_scale_callback (GtkWidget *, gpointer); +static void image_cancel_callback (GtkWidget *, gpointer); +static gint image_delete_callback (GtkWidget *, GdkEvent *, 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_border_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); /* local variables */ -static double selection_feather_radius = 5.0; -static int selection_border_radius = 5; -static int selection_grow_pixels = 1; -static int selection_shrink_pixels = 1; +static gdouble selection_feather_radius = 5.0; +static gint selection_border_radius = 5; +static gint selection_grow_pixels = 1; +static gint selection_shrink_pixels = 1; void @@ -122,16 +126,13 @@ file_revert_cmd_callback (GtkWidget *widget, file_revert_callback (widget, client_data); } - - - void file_close_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_close_window (gdisp, FALSE); } @@ -149,7 +150,7 @@ edit_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_cut (gdisp); } @@ -160,7 +161,7 @@ edit_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_copy (gdisp); } @@ -171,7 +172,7 @@ edit_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 0); } @@ -182,7 +183,7 @@ edit_paste_into_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 1); } @@ -193,10 +194,9 @@ edit_clear_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_clear (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -206,10 +206,9 @@ edit_fill_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_fill (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -219,10 +218,9 @@ edit_stroke_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_stroke (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -232,7 +230,7 @@ edit_undo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_pop (gdisp->gimage); } @@ -243,7 +241,7 @@ edit_redo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_redo (gdisp->gimage); } @@ -254,7 +252,7 @@ edit_named_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_cut (gdisp); } @@ -265,7 +263,7 @@ edit_named_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_copy (gdisp); } @@ -276,7 +274,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_paste (gdisp); } @@ -287,7 +285,7 @@ select_toggle_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); selection_hide (gdisp->select, (void *) gdisp); gdisplays_flush (); @@ -299,7 +297,7 @@ select_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_invert (gdisp->gimage); gdisplays_flush (); @@ -311,7 +309,7 @@ select_all_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_all (gdisp->gimage); gdisplays_flush (); @@ -323,7 +321,7 @@ select_none_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_none (gdisp->gimage); gdisplays_flush (); @@ -335,9 +333,10 @@ select_float_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), 0, 0); + gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), + 0, 0); gdisplays_flush (); } @@ -347,7 +346,7 @@ select_sharpen_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_sharpen (gdisp->gimage); gdisplays_flush (); @@ -359,7 +358,7 @@ select_border_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Border Selection"), N_("Border selection by:"), @@ -378,7 +377,7 @@ select_feather_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Feather Selection"), N_("Feather selection by:"), @@ -397,7 +396,7 @@ select_grow_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Grow Selection"), N_("Grow selection by:"), @@ -416,7 +415,7 @@ select_shrink_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Shrink Selection"), N_("Shrink selection by:"), @@ -435,7 +434,8 @@ select_save_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + gimage_mask_save (gdisp->gimage); gdisplays_flush (); } @@ -446,7 +446,7 @@ view_dot_for_dot_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_set_dot_for_dot (gdisp, GTK_CHECK_MENU_ITEM (widget)->active); } @@ -457,7 +457,7 @@ view_zoomin_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMIN); } @@ -468,7 +468,7 @@ view_zoomout_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMOUT); } @@ -480,7 +480,7 @@ view_zoom_val (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, val); } @@ -554,7 +554,7 @@ view_window_info_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (! gdisp->window_info_dialog) gdisp->window_info_dialog = info_window_create ((void *) gdisp); @@ -568,7 +568,7 @@ view_toggle_rulers_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); /* This routine use promiscuous knowledge of gtk internals * in order to hide and show the rulers "smoothly". This @@ -615,7 +615,7 @@ view_toggle_guides_cmd_callback (GtkWidget *widget, GDisplay * gdisp; int old_val; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); old_val = gdisp->draw_guides; gdisp->draw_guides = GTK_CHECK_MENU_ITEM (widget)->active; @@ -633,7 +633,7 @@ view_snap_to_guides_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisp->snap_to_guides = GTK_CHECK_MENU_ITEM (widget)->active; } @@ -644,7 +644,7 @@ view_toggle_statusbar_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (!GTK_CHECK_MENU_ITEM (widget)->active) { @@ -664,7 +664,7 @@ view_new_view_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_new_view (gdisp); } @@ -675,10 +675,9 @@ view_shrink_wrap_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - if (gdisp) - shrink_wrap_display (gdisp); + shrink_wrap_display (gdisp); } void @@ -687,7 +686,8 @@ image_equalize_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_equalize ((void *) gdisp->gimage); gdisplays_flush (); } @@ -698,7 +698,8 @@ image_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_invert ((void *) gdisp->gimage); gdisplays_flush (); } @@ -709,7 +710,8 @@ image_desaturate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_desaturate ((void *) gdisp->gimage); gdisplays_flush (); } @@ -720,7 +722,8 @@ channel_ops_duplicate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_duplicate ((void *) gdisp->gimage); } @@ -730,7 +733,8 @@ channel_ops_offset_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_offset ((void *) gdisp->gimage); } @@ -740,7 +744,8 @@ image_convert_rgb_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_rgb ((void *) gdisp->gimage); } @@ -750,7 +755,8 @@ image_convert_grayscale_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_grayscale ((void *) gdisp->gimage); } @@ -760,7 +766,8 @@ image_convert_indexed_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_indexed ((void *) gdisp->gimage); } @@ -768,12 +775,11 @@ void image_resize_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_resize; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_resize; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -801,12 +807,11 @@ void image_scale_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_scale; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_scale; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -835,10 +840,10 @@ layers_previous_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -861,10 +866,10 @@ layers_next_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -888,7 +893,7 @@ layers_raise_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -900,7 +905,7 @@ layers_lower_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -912,7 +917,7 @@ layers_raise_to_top_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer_to_top (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -924,7 +929,7 @@ layers_lower_to_bottom_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer_to_bottom (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -936,7 +941,7 @@ layers_anchor_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); floating_sel_anchor (gimage_get_active_layer (gdisp->gimage)); gdisplays_flush (); @@ -948,7 +953,7 @@ layers_merge_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layers_dialog_layer_merge_query (gdisp->gimage, TRUE); } @@ -959,7 +964,7 @@ layers_flatten_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_flatten (gdisp->gimage); gdisplays_flush (); @@ -971,7 +976,7 @@ layers_alpha_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_alpha (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -983,7 +988,7 @@ layers_mask_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_mask (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -995,7 +1000,7 @@ layers_add_alpha_channel_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layer_add_alpha ( gdisp->gimage->active_layer); gdisplays_flush (); @@ -1016,9 +1021,9 @@ tools_swap_colors_cmd_callback (GtkWidget *widget, } void -tools_select_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +tools_select_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { GDisplay * gdisp; @@ -1043,9 +1048,9 @@ tools_select_cmd_callback (GtkWidget *widget, } void -filters_repeat_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +filters_repeat_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { plug_in_repeat (callback_action); } @@ -1076,13 +1081,13 @@ dialogs_gradient_editor_cmd_callback (GtkWidget *widget, gpointer client_data) { grad_create_gradient_editor (); -} /* dialogs_gradient_editor_cmd_callback */ +} void dialogs_lc_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisp; + GDisplay * gdisp; gdisp = gdisplay_active (); @@ -1093,12 +1098,14 @@ dialogs_lc_cmd_callback (GtkWidget *widget, } static void -cmap_dlg_sel_cb(ColormapDialog* dlg, gpointer user_data) +cmap_dlg_sel_cb (ColormapDialog *dlg, + gpointer user_data) { - guchar* c; + guchar * c; + GimpImage * img = colormap_dialog_image(dlg); - GimpImage* img = colormap_dialog_image(dlg); c = &img->cmap[colormap_dialog_col_index(dlg) * 3]; + if(active_color == FOREGROUND) palette_set_foreground (c[0], c[1], c[2]); else if(active_color == BACKGROUND) @@ -1109,13 +1116,15 @@ void dialogs_indexed_palette_cmd_callback (GtkWidget *widget, gpointer client_data) { - static ColormapDialog* cmap_dlg; - if(!cmap_dlg){ - cmap_dlg = colormap_dialog_create (image_context); - colormap_dialog_connect_selected(cmap_dlg_sel_cb, NULL, - cmap_dlg); - } - gtk_widget_show(GTK_WIDGET(cmap_dlg)); + static ColormapDialog * cmap_dlg; + + if(!cmap_dlg) + { + cmap_dlg = colormap_dialog_create (image_context); + colormap_dialog_connect_selected (cmap_dlg_sel_cb, NULL, cmap_dlg); + } + + gtk_widget_show (GTK_WIDGET (cmap_dlg)); } void @@ -1179,8 +1188,8 @@ static void image_resize_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_resize; - GImage *gimage; + ImageResize * image_resize; + GImage * gimage; image_resize = (ImageResize *) client_data; @@ -1211,9 +1220,9 @@ static void image_scale_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_scale; - GImage *gimage; - gboolean flush = FALSE; + ImageResize * image_scale; + GImage * gimage; + gboolean flush = FALSE; image_scale = (ImageResize *) client_data; @@ -1263,8 +1272,8 @@ image_scale_callback (GtkWidget *w, static gint image_delete_callback (GtkWidget *w, - GdkEvent *e, - gpointer client_data) + GdkEvent *e, + gpointer client_data) { image_cancel_callback (w, client_data); @@ -1277,6 +1286,7 @@ image_cancel_callback (GtkWidget *w, gpointer client_data) { ImageResize *image_resize; + image_resize = (ImageResize *) client_data; resize_widget_free (image_resize->resize); @@ -1288,10 +1298,10 @@ gimage_mask_feather_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_feather_radius = *(double*) call_data; g_free (call_data); @@ -1322,10 +1332,10 @@ gimage_mask_border_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_border_radius = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1356,10 +1366,10 @@ gimage_mask_grow_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_grow_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1391,9 +1401,9 @@ gimage_mask_shrink_callback (GtkWidget *w, gpointer call_data) { GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - int radius_x; - int radius_y; + GUnit unit; + gint radius_x; + gint radius_y; selection_shrink_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); diff --git a/app/gui/help-commands.c b/app/gui/help-commands.c index 7b258a42c8..bfb3e39b0a 100644 --- a/app/gui/help-commands.c +++ b/app/gui/help-commands.c @@ -68,6 +68,10 @@ #include "libgimp/gimpintl.h" +#define return_if_no_display(gdisp) \ + gdisp = gdisplay_active (); \ + if (!gdisp) return + typedef struct { Resize * resize; @@ -78,20 +82,20 @@ typedef struct extern void layers_dialog_layer_merge_query (GImage *, int); /* local functions */ -static void image_resize_callback (GtkWidget *, gpointer); -static void image_scale_callback (GtkWidget *, gpointer); -static void image_cancel_callback (GtkWidget *, gpointer); -static gint image_delete_callback (GtkWidget *, GdkEvent *, gpointer); +static void image_resize_callback (GtkWidget *, gpointer); +static void image_scale_callback (GtkWidget *, gpointer); +static void image_cancel_callback (GtkWidget *, gpointer); +static gint image_delete_callback (GtkWidget *, GdkEvent *, 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_border_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_grow_callback (GtkWidget *, gpointer, gpointer); +static void gimage_mask_shrink_callback (GtkWidget *, gpointer, gpointer); /* local variables */ -static double selection_feather_radius = 5.0; -static int selection_border_radius = 5; -static int selection_grow_pixels = 1; -static int selection_shrink_pixels = 1; +static gdouble selection_feather_radius = 5.0; +static gint selection_border_radius = 5; +static gint selection_grow_pixels = 1; +static gint selection_shrink_pixels = 1; void @@ -122,16 +126,13 @@ file_revert_cmd_callback (GtkWidget *widget, file_revert_callback (widget, client_data); } - - - void file_close_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_close_window (gdisp, FALSE); } @@ -149,7 +150,7 @@ edit_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_cut (gdisp); } @@ -160,7 +161,7 @@ edit_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_copy (gdisp); } @@ -171,7 +172,7 @@ edit_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 0); } @@ -182,7 +183,7 @@ edit_paste_into_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); global_edit_paste (gdisp, 1); } @@ -193,10 +194,9 @@ edit_clear_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_clear (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -206,10 +206,9 @@ edit_fill_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); edit_fill (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -219,10 +218,9 @@ edit_stroke_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_stroke (gdisp->gimage, gimage_active_drawable (gdisp->gimage)); - gdisplays_flush (); } @@ -232,7 +230,7 @@ edit_undo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_pop (gdisp->gimage); } @@ -243,7 +241,7 @@ edit_redo_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); undo_redo (gdisp->gimage); } @@ -254,7 +252,7 @@ edit_named_cut_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_cut (gdisp); } @@ -265,7 +263,7 @@ edit_named_copy_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_copy (gdisp); } @@ -276,7 +274,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); named_edit_paste (gdisp); } @@ -287,7 +285,7 @@ select_toggle_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); selection_hide (gdisp->select, (void *) gdisp); gdisplays_flush (); @@ -299,7 +297,7 @@ select_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_invert (gdisp->gimage); gdisplays_flush (); @@ -311,7 +309,7 @@ select_all_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_all (gdisp->gimage); gdisplays_flush (); @@ -323,7 +321,7 @@ select_none_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_none (gdisp->gimage); gdisplays_flush (); @@ -335,9 +333,10 @@ select_float_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), 0, 0); + gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), + 0, 0); gdisplays_flush (); } @@ -347,7 +346,7 @@ select_sharpen_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_sharpen (gdisp->gimage); gdisplays_flush (); @@ -359,7 +358,7 @@ select_border_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Border Selection"), N_("Border selection by:"), @@ -378,7 +377,7 @@ select_feather_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Feather Selection"), N_("Feather selection by:"), @@ -397,7 +396,7 @@ select_grow_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Grow Selection"), N_("Grow selection by:"), @@ -416,7 +415,7 @@ select_shrink_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); query_size_box (N_("Shrink Selection"), N_("Shrink selection by:"), @@ -435,7 +434,8 @@ select_save_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + gimage_mask_save (gdisp->gimage); gdisplays_flush (); } @@ -446,7 +446,7 @@ view_dot_for_dot_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_set_dot_for_dot (gdisp, GTK_CHECK_MENU_ITEM (widget)->active); } @@ -457,7 +457,7 @@ view_zoomin_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMIN); } @@ -468,7 +468,7 @@ view_zoomout_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, ZOOMOUT); } @@ -480,7 +480,7 @@ view_zoom_val (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); change_scale (gdisp, val); } @@ -554,7 +554,7 @@ view_window_info_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (! gdisp->window_info_dialog) gdisp->window_info_dialog = info_window_create ((void *) gdisp); @@ -568,7 +568,7 @@ view_toggle_rulers_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); /* This routine use promiscuous knowledge of gtk internals * in order to hide and show the rulers "smoothly". This @@ -615,7 +615,7 @@ view_toggle_guides_cmd_callback (GtkWidget *widget, GDisplay * gdisp; int old_val; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); old_val = gdisp->draw_guides; gdisp->draw_guides = GTK_CHECK_MENU_ITEM (widget)->active; @@ -633,7 +633,7 @@ view_snap_to_guides_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisp->snap_to_guides = GTK_CHECK_MENU_ITEM (widget)->active; } @@ -644,7 +644,7 @@ view_toggle_statusbar_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); if (!GTK_CHECK_MENU_ITEM (widget)->active) { @@ -664,7 +664,7 @@ view_new_view_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gdisplay_new_view (gdisp); } @@ -675,10 +675,9 @@ view_shrink_wrap_cmd_callback (GtkWidget *widget, { GDisplay *gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); - if (gdisp) - shrink_wrap_display (gdisp); + shrink_wrap_display (gdisp); } void @@ -687,7 +686,8 @@ image_equalize_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_equalize ((void *) gdisp->gimage); gdisplays_flush (); } @@ -698,7 +698,8 @@ image_invert_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_invert ((void *) gdisp->gimage); gdisplays_flush (); } @@ -709,7 +710,8 @@ image_desaturate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + image_desaturate ((void *) gdisp->gimage); gdisplays_flush (); } @@ -720,7 +722,8 @@ channel_ops_duplicate_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_duplicate ((void *) gdisp->gimage); } @@ -730,7 +733,8 @@ channel_ops_offset_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + channel_ops_offset ((void *) gdisp->gimage); } @@ -740,7 +744,8 @@ image_convert_rgb_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_rgb ((void *) gdisp->gimage); } @@ -750,7 +755,8 @@ image_convert_grayscale_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_grayscale ((void *) gdisp->gimage); } @@ -760,7 +766,8 @@ image_convert_indexed_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); + convert_to_indexed ((void *) gdisp->gimage); } @@ -768,12 +775,11 @@ void image_resize_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_resize; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_resize; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -801,12 +807,11 @@ void image_scale_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay * gdisp; - GimpImage * gimage; - ImageResize *image_scale; + GDisplay * gdisp; + GimpImage * gimage; + ImageResize * image_scale; - gdisp = gdisplay_active (); - g_return_if_fail (gdisp != NULL); + return_if_no_display (gdisp); gimage = gdisp->gimage; @@ -835,10 +840,10 @@ layers_previous_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -861,10 +866,10 @@ layers_next_cmd_callback (GtkWidget *widget, gpointer client_data) { GDisplay * gdisp; - int current_layer; - Layer *new_layer; + int current_layer; + Layer * new_layer; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); current_layer = gimage_get_layer_index (gdisp->gimage, gdisp->gimage->active_layer); @@ -888,7 +893,7 @@ layers_raise_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -900,7 +905,7 @@ layers_lower_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -912,7 +917,7 @@ layers_raise_to_top_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_raise_layer_to_top (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -924,7 +929,7 @@ layers_lower_to_bottom_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_lower_layer_to_bottom (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -936,7 +941,7 @@ layers_anchor_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); floating_sel_anchor (gimage_get_active_layer (gdisp->gimage)); gdisplays_flush (); @@ -948,7 +953,7 @@ layers_merge_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layers_dialog_layer_merge_query (gdisp->gimage, TRUE); } @@ -959,7 +964,7 @@ layers_flatten_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_flatten (gdisp->gimage); gdisplays_flush (); @@ -971,7 +976,7 @@ layers_alpha_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_alpha (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -983,7 +988,7 @@ layers_mask_select_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); gimage_mask_layer_mask (gdisp->gimage, gdisp->gimage->active_layer); gdisplays_flush (); @@ -995,7 +1000,7 @@ layers_add_alpha_channel_cmd_callback (GtkWidget *widget, { GDisplay * gdisp; - gdisp = gdisplay_active (); + return_if_no_display (gdisp); layer_add_alpha ( gdisp->gimage->active_layer); gdisplays_flush (); @@ -1016,9 +1021,9 @@ tools_swap_colors_cmd_callback (GtkWidget *widget, } void -tools_select_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +tools_select_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { GDisplay * gdisp; @@ -1043,9 +1048,9 @@ tools_select_cmd_callback (GtkWidget *widget, } void -filters_repeat_cmd_callback (GtkWidget *widget, - gpointer callback_data, - guint callback_action) +filters_repeat_cmd_callback (GtkWidget *widget, + gpointer callback_data, + guint callback_action) { plug_in_repeat (callback_action); } @@ -1076,13 +1081,13 @@ dialogs_gradient_editor_cmd_callback (GtkWidget *widget, gpointer client_data) { grad_create_gradient_editor (); -} /* dialogs_gradient_editor_cmd_callback */ +} void dialogs_lc_cmd_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisp; + GDisplay * gdisp; gdisp = gdisplay_active (); @@ -1093,12 +1098,14 @@ dialogs_lc_cmd_callback (GtkWidget *widget, } static void -cmap_dlg_sel_cb(ColormapDialog* dlg, gpointer user_data) +cmap_dlg_sel_cb (ColormapDialog *dlg, + gpointer user_data) { - guchar* c; + guchar * c; + GimpImage * img = colormap_dialog_image(dlg); - GimpImage* img = colormap_dialog_image(dlg); c = &img->cmap[colormap_dialog_col_index(dlg) * 3]; + if(active_color == FOREGROUND) palette_set_foreground (c[0], c[1], c[2]); else if(active_color == BACKGROUND) @@ -1109,13 +1116,15 @@ void dialogs_indexed_palette_cmd_callback (GtkWidget *widget, gpointer client_data) { - static ColormapDialog* cmap_dlg; - if(!cmap_dlg){ - cmap_dlg = colormap_dialog_create (image_context); - colormap_dialog_connect_selected(cmap_dlg_sel_cb, NULL, - cmap_dlg); - } - gtk_widget_show(GTK_WIDGET(cmap_dlg)); + static ColormapDialog * cmap_dlg; + + if(!cmap_dlg) + { + cmap_dlg = colormap_dialog_create (image_context); + colormap_dialog_connect_selected (cmap_dlg_sel_cb, NULL, cmap_dlg); + } + + gtk_widget_show (GTK_WIDGET (cmap_dlg)); } void @@ -1179,8 +1188,8 @@ static void image_resize_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_resize; - GImage *gimage; + ImageResize * image_resize; + GImage * gimage; image_resize = (ImageResize *) client_data; @@ -1211,9 +1220,9 @@ static void image_scale_callback (GtkWidget *w, gpointer client_data) { - ImageResize *image_scale; - GImage *gimage; - gboolean flush = FALSE; + ImageResize * image_scale; + GImage * gimage; + gboolean flush = FALSE; image_scale = (ImageResize *) client_data; @@ -1263,8 +1272,8 @@ image_scale_callback (GtkWidget *w, static gint image_delete_callback (GtkWidget *w, - GdkEvent *e, - gpointer client_data) + GdkEvent *e, + gpointer client_data) { image_cancel_callback (w, client_data); @@ -1277,6 +1286,7 @@ image_cancel_callback (GtkWidget *w, gpointer client_data) { ImageResize *image_resize; + image_resize = (ImageResize *) client_data; resize_widget_free (image_resize->resize); @@ -1288,10 +1298,10 @@ gimage_mask_feather_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_feather_radius = *(double*) call_data; g_free (call_data); @@ -1322,10 +1332,10 @@ gimage_mask_border_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_border_radius = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1356,10 +1366,10 @@ gimage_mask_grow_callback (GtkWidget *w, gpointer client_data, gpointer call_data) { - GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - double radius_x; - double radius_y; + GImage *gimage = GIMP_IMAGE (client_data); + GUnit unit; + gdouble radius_x; + gdouble radius_y; selection_grow_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); @@ -1391,9 +1401,9 @@ gimage_mask_shrink_callback (GtkWidget *w, gpointer call_data) { GImage *gimage = GIMP_IMAGE (client_data); - GUnit unit; - int radius_x; - int radius_y; + GUnit unit; + gint radius_x; + gint radius_y; selection_shrink_pixels = (int) (*(double*) call_data + 0.5); g_free (call_data); diff --git a/app/gui/menus.c b/app/gui/menus.c index 0e191e4fef..2b0c1ae444 100644 --- a/app/gui/menus.c +++ b/app/gui/menus.c @@ -53,6 +53,7 @@ static GSList *last_opened_raw_filenames = NULL; static const GtkItemFactoryEntry toolbox_entries[] = { + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 0 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/About..."), NULL, about_dialog_cmd_callback, 0 }, @@ -68,6 +69,7 @@ static const GtkItemFactoryEntry toolbox_entries[] = { N_("/File/Dialogs/Device Status..."), NULL, dialogs_device_status_cmd_callback, 0 }, { N_("/File/Dialogs/Document Index..."), NULL, raise_idea_callback, 0 }, { N_("/File/Dialogs/Error Console..."), NULL, dialogs_error_console_cmd_callback, 0 }, + { N_("/Xtns/tearoff1"), NULL, NULL, 0, "" }, { N_("/Xtns/Module Browser"), NULL, dialogs_module_browser_cmd_callback, 0 }, { N_("/File/---"), NULL, NULL, 0, "" }, { N_("/File/---"), NULL, NULL, 0, "" } @@ -80,6 +82,8 @@ static const GtkItemFactoryEntry toolbox_end = { N_("/File/Quit"), "Q", static const GtkItemFactoryEntry image_entries[] = { + { N_("/tearoff1"), NULL, NULL, 0, "" }, + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 1 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/Save"), "S", file_save_cmd_callback, 0 }, @@ -92,6 +96,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/File/Quit"), "Q", file_quit_cmd_callback, 0 }, { N_("/File/---moved"), NULL, NULL, 0, "" }, + { N_("/Edit/tearoff1"), NULL, NULL, 0, "" }, { N_("/Edit/Cut"), "X", edit_cut_cmd_callback, 0 }, { N_("/Edit/Copy"), "C", edit_copy_cmd_callback, 0 }, { N_("/Edit/Paste"), "V", edit_paste_cmd_callback, 0 }, @@ -107,6 +112,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Edit/Paste Named"), "V", edit_named_paste_cmd_callback, 0 }, { N_("/Edit/---"), NULL, NULL, 0, "" }, + { N_("/Select/tearoff1"), NULL, NULL, 0, "" }, { N_("/Select/Toggle"), "T", select_toggle_cmd_callback, 0 }, { N_("/Select/Invert"), "I", select_invert_cmd_callback, 0 }, { N_("/Select/All"), "A", select_all_cmd_callback, 0 }, @@ -119,6 +125,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Select/Shrink"), NULL, select_shrink_cmd_callback, 0 }, { N_("/Select/Save To Channel"), NULL, select_save_cmd_callback, 0 }, + { N_("/View/tearoff1"), NULL, NULL, 0, "" }, { N_("/View/Zoom In"), "equal", view_zoomin_cmd_callback, 0 }, { N_("/View/Zoom Out"), "minus", view_zoomout_cmd_callback, 0 }, { N_("/View/Zoom/16:1"), NULL, view_zoom_16_1_callback, 0 }, @@ -140,6 +147,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/View/New View"), NULL, view_new_view_cmd_callback, 0 }, { N_("/View/Shrink Wrap"), "E", view_shrink_wrap_cmd_callback, 0 }, + { N_("/Image/tearoff1"), NULL, NULL, 0, "" }, { N_("/Image/Colors/Equalize"), NULL, image_equalize_cmd_callback, 0 }, { N_("/Image/Colors/Invert"), NULL, image_invert_cmd_callback, 0 }, { N_("/Image/Colors/---"), NULL, NULL, 0, "" }, @@ -157,6 +165,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Image/Scale"), NULL, image_scale_cmd_callback, 0 }, { N_("/Image/---"), NULL, NULL, 0, "" }, + { N_("/Layers/tearoff1"), NULL, NULL, 0, "" }, { N_("/Layers/Layers & Channels..."), "L", dialogs_lc_cmd_callback, 0 }, { N_("/Layers/Stack/Previous Layer"), "Prior", layers_previous_cmd_callback, 0 }, { N_("/Layers/Stack/Next Layer"), "Next", layers_next_cmd_callback, 0 }, @@ -204,17 +213,21 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, */ + { N_("/Tools/tearoff1"), NULL, NULL, 0, "" }, { N_("/Tools/Toolbox"), NULL, toolbox_raise_callback, 0 }, { N_("/Tools/Default Colors"), "D", tools_default_colors_cmd_callback, 0 }, { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, { N_("/Tools/---"), NULL, NULL, 0, "" }, + { N_("/Filters/tearoff1"), NULL, NULL, 0, "" }, { N_("/Filters/Repeat last"), "F", filters_repeat_cmd_callback, 0x0 }, { N_("/Filters/Re-show last"), "F", filters_repeat_cmd_callback, 0x1 }, { N_("/Filters/---"), NULL, NULL, 0, "" }, + { N_("/Script-Fu/tearoff1"), NULL, NULL, 0, "" }, { N_("/Script-Fu/"), NULL, NULL, 0 }, + { N_("/Dialogs/tearoff1"), NULL, NULL, 0, "" }, { N_("/Dialogs/Brushes..."), "B", dialogs_brushes_cmd_callback, 0 }, { N_("/Dialogs/Patterns..."), "P", dialogs_patterns_cmd_callback, 0 }, { N_("/Dialogs/Palette..."), "P", dialogs_palette_cmd_callback, 0 }, diff --git a/app/lc_dialog.c b/app/lc_dialog.c index f59696fdbe..742de5bb62 100644 --- a/app/lc_dialog.c +++ b/app/lc_dialog.c @@ -21,6 +21,7 @@ #include "buildmenu.h" #include "dialog_handler.h" #include "gimage.h" +#include "gimpcontext.h" #include "gimprc.h" #include "gimpset.h" #include "interface.h" @@ -38,8 +39,9 @@ static void lc_dialog_auto_callback (GtkWidget *, gpointer); static gint lc_dialog_close_callback (GtkWidget *, gpointer); static void lc_dialog_add_cb (GimpSet *, GimpImage *, gpointer); static void lc_dialog_remove_cb (GimpSet *, GimpImage *, gpointer); -static void lc_dialog_change_image (GimpSet *, GimpImage *, gpointer); static void lc_dialog_destroy_cb (GimpImage *, gpointer); +static void lc_dialog_change_image (GimpContext *, GimpImage *, + gpointer); /* FIXME: move these to a better place */ static GtkWidget * lc_dialog_create_image_menu (GimpImage **, int *, @@ -190,7 +192,7 @@ lc_dialog_create (GimpImage* gimage) GTK_SIGNAL_FUNC (lc_dialog_add_cb), NULL); gtk_signal_connect (GTK_OBJECT (image_context), "remove", GTK_SIGNAL_FUNC (lc_dialog_remove_cb), NULL); - gtk_signal_connect (GTK_OBJECT (image_context), "active_changed", + gtk_signal_connect (GTK_OBJECT (gimp_context_get_user ()), "image_changed", GTK_SIGNAL_FUNC (lc_dialog_change_image), NULL); lc_dialog_update (gimage); @@ -408,7 +410,7 @@ static void lc_dialog_auto_callback (GtkWidget *toggle_button, gpointer client_data) { - GimpImage *gimage; + GimpContext *context; if (! lc_dialog) return; @@ -416,10 +418,12 @@ lc_dialog_auto_callback (GtkWidget *toggle_button, lc_dialog->auto_follow_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle_button)); - gimage = (GimpImage *) gimp_set_get_active (image_context); + context = gimp_context_get_user (); - if (lc_dialog->auto_follow_active && gimage) - lc_dialog_change_image (image_context, gimage, NULL); + if (lc_dialog->auto_follow_active) + lc_dialog_change_image (context, + gimp_context_get_image (context), + NULL); } static gint @@ -457,18 +461,6 @@ lc_dialog_remove_cb (GimpSet *set, lc_dialog_update_image_list (); } -static void -lc_dialog_change_image (GimpSet *set, - GimpImage *gimage, - gpointer user_data) -{ - if (lc_dialog && lc_dialog->auto_follow_active && gimage) - { - lc_dialog_update (gimage); - lc_dialog_update_image_list (); - } -} - static void lc_dialog_destroy_cb (GimpImage *gimage, gpointer user_data) @@ -478,3 +470,19 @@ lc_dialog_destroy_cb (GimpImage *gimage, lc_dialog_update_image_list (); } + +static void +lc_dialog_change_image (GimpContext *context, + GimpImage *gimage, + gpointer user_data) +{ + if (! lc_dialog || ! lc_dialog->auto_follow_active) + return; + + if (gimage && gimp_set_have (image_context, gimage)) + { + lc_dialog_update (gimage); + } + + lc_dialog_update_image_list (); +} diff --git a/app/menus.c b/app/menus.c index 0e191e4fef..2b0c1ae444 100644 --- a/app/menus.c +++ b/app/menus.c @@ -53,6 +53,7 @@ static GSList *last_opened_raw_filenames = NULL; static const GtkItemFactoryEntry toolbox_entries[] = { + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 0 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/About..."), NULL, about_dialog_cmd_callback, 0 }, @@ -68,6 +69,7 @@ static const GtkItemFactoryEntry toolbox_entries[] = { N_("/File/Dialogs/Device Status..."), NULL, dialogs_device_status_cmd_callback, 0 }, { N_("/File/Dialogs/Document Index..."), NULL, raise_idea_callback, 0 }, { N_("/File/Dialogs/Error Console..."), NULL, dialogs_error_console_cmd_callback, 0 }, + { N_("/Xtns/tearoff1"), NULL, NULL, 0, "" }, { N_("/Xtns/Module Browser"), NULL, dialogs_module_browser_cmd_callback, 0 }, { N_("/File/---"), NULL, NULL, 0, "" }, { N_("/File/---"), NULL, NULL, 0, "" } @@ -80,6 +82,8 @@ static const GtkItemFactoryEntry toolbox_end = { N_("/File/Quit"), "Q", static const GtkItemFactoryEntry image_entries[] = { + { N_("/tearoff1"), NULL, NULL, 0, "" }, + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 1 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/Save"), "S", file_save_cmd_callback, 0 }, @@ -92,6 +96,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/File/Quit"), "Q", file_quit_cmd_callback, 0 }, { N_("/File/---moved"), NULL, NULL, 0, "" }, + { N_("/Edit/tearoff1"), NULL, NULL, 0, "" }, { N_("/Edit/Cut"), "X", edit_cut_cmd_callback, 0 }, { N_("/Edit/Copy"), "C", edit_copy_cmd_callback, 0 }, { N_("/Edit/Paste"), "V", edit_paste_cmd_callback, 0 }, @@ -107,6 +112,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Edit/Paste Named"), "V", edit_named_paste_cmd_callback, 0 }, { N_("/Edit/---"), NULL, NULL, 0, "" }, + { N_("/Select/tearoff1"), NULL, NULL, 0, "" }, { N_("/Select/Toggle"), "T", select_toggle_cmd_callback, 0 }, { N_("/Select/Invert"), "I", select_invert_cmd_callback, 0 }, { N_("/Select/All"), "A", select_all_cmd_callback, 0 }, @@ -119,6 +125,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Select/Shrink"), NULL, select_shrink_cmd_callback, 0 }, { N_("/Select/Save To Channel"), NULL, select_save_cmd_callback, 0 }, + { N_("/View/tearoff1"), NULL, NULL, 0, "" }, { N_("/View/Zoom In"), "equal", view_zoomin_cmd_callback, 0 }, { N_("/View/Zoom Out"), "minus", view_zoomout_cmd_callback, 0 }, { N_("/View/Zoom/16:1"), NULL, view_zoom_16_1_callback, 0 }, @@ -140,6 +147,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/View/New View"), NULL, view_new_view_cmd_callback, 0 }, { N_("/View/Shrink Wrap"), "E", view_shrink_wrap_cmd_callback, 0 }, + { N_("/Image/tearoff1"), NULL, NULL, 0, "" }, { N_("/Image/Colors/Equalize"), NULL, image_equalize_cmd_callback, 0 }, { N_("/Image/Colors/Invert"), NULL, image_invert_cmd_callback, 0 }, { N_("/Image/Colors/---"), NULL, NULL, 0, "" }, @@ -157,6 +165,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Image/Scale"), NULL, image_scale_cmd_callback, 0 }, { N_("/Image/---"), NULL, NULL, 0, "" }, + { N_("/Layers/tearoff1"), NULL, NULL, 0, "" }, { N_("/Layers/Layers & Channels..."), "L", dialogs_lc_cmd_callback, 0 }, { N_("/Layers/Stack/Previous Layer"), "Prior", layers_previous_cmd_callback, 0 }, { N_("/Layers/Stack/Next Layer"), "Next", layers_next_cmd_callback, 0 }, @@ -204,17 +213,21 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, */ + { N_("/Tools/tearoff1"), NULL, NULL, 0, "" }, { N_("/Tools/Toolbox"), NULL, toolbox_raise_callback, 0 }, { N_("/Tools/Default Colors"), "D", tools_default_colors_cmd_callback, 0 }, { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, { N_("/Tools/---"), NULL, NULL, 0, "" }, + { N_("/Filters/tearoff1"), NULL, NULL, 0, "" }, { N_("/Filters/Repeat last"), "F", filters_repeat_cmd_callback, 0x0 }, { N_("/Filters/Re-show last"), "F", filters_repeat_cmd_callback, 0x1 }, { N_("/Filters/---"), NULL, NULL, 0, "" }, + { N_("/Script-Fu/tearoff1"), NULL, NULL, 0, "" }, { N_("/Script-Fu/"), NULL, NULL, 0 }, + { N_("/Dialogs/tearoff1"), NULL, NULL, 0, "" }, { N_("/Dialogs/Brushes..."), "B", dialogs_brushes_cmd_callback, 0 }, { N_("/Dialogs/Patterns..."), "P", dialogs_patterns_cmd_callback, 0 }, { N_("/Dialogs/Palette..."), "P", dialogs_palette_cmd_callback, 0 }, diff --git a/app/menus/menus.c b/app/menus/menus.c index 0e191e4fef..2b0c1ae444 100644 --- a/app/menus/menus.c +++ b/app/menus/menus.c @@ -53,6 +53,7 @@ static GSList *last_opened_raw_filenames = NULL; static const GtkItemFactoryEntry toolbox_entries[] = { + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 0 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/About..."), NULL, about_dialog_cmd_callback, 0 }, @@ -68,6 +69,7 @@ static const GtkItemFactoryEntry toolbox_entries[] = { N_("/File/Dialogs/Device Status..."), NULL, dialogs_device_status_cmd_callback, 0 }, { N_("/File/Dialogs/Document Index..."), NULL, raise_idea_callback, 0 }, { N_("/File/Dialogs/Error Console..."), NULL, dialogs_error_console_cmd_callback, 0 }, + { N_("/Xtns/tearoff1"), NULL, NULL, 0, "" }, { N_("/Xtns/Module Browser"), NULL, dialogs_module_browser_cmd_callback, 0 }, { N_("/File/---"), NULL, NULL, 0, "" }, { N_("/File/---"), NULL, NULL, 0, "" } @@ -80,6 +82,8 @@ static const GtkItemFactoryEntry toolbox_end = { N_("/File/Quit"), "Q", static const GtkItemFactoryEntry image_entries[] = { + { N_("/tearoff1"), NULL, NULL, 0, "" }, + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 1 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/Save"), "S", file_save_cmd_callback, 0 }, @@ -92,6 +96,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/File/Quit"), "Q", file_quit_cmd_callback, 0 }, { N_("/File/---moved"), NULL, NULL, 0, "" }, + { N_("/Edit/tearoff1"), NULL, NULL, 0, "" }, { N_("/Edit/Cut"), "X", edit_cut_cmd_callback, 0 }, { N_("/Edit/Copy"), "C", edit_copy_cmd_callback, 0 }, { N_("/Edit/Paste"), "V", edit_paste_cmd_callback, 0 }, @@ -107,6 +112,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Edit/Paste Named"), "V", edit_named_paste_cmd_callback, 0 }, { N_("/Edit/---"), NULL, NULL, 0, "" }, + { N_("/Select/tearoff1"), NULL, NULL, 0, "" }, { N_("/Select/Toggle"), "T", select_toggle_cmd_callback, 0 }, { N_("/Select/Invert"), "I", select_invert_cmd_callback, 0 }, { N_("/Select/All"), "A", select_all_cmd_callback, 0 }, @@ -119,6 +125,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Select/Shrink"), NULL, select_shrink_cmd_callback, 0 }, { N_("/Select/Save To Channel"), NULL, select_save_cmd_callback, 0 }, + { N_("/View/tearoff1"), NULL, NULL, 0, "" }, { N_("/View/Zoom In"), "equal", view_zoomin_cmd_callback, 0 }, { N_("/View/Zoom Out"), "minus", view_zoomout_cmd_callback, 0 }, { N_("/View/Zoom/16:1"), NULL, view_zoom_16_1_callback, 0 }, @@ -140,6 +147,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/View/New View"), NULL, view_new_view_cmd_callback, 0 }, { N_("/View/Shrink Wrap"), "E", view_shrink_wrap_cmd_callback, 0 }, + { N_("/Image/tearoff1"), NULL, NULL, 0, "" }, { N_("/Image/Colors/Equalize"), NULL, image_equalize_cmd_callback, 0 }, { N_("/Image/Colors/Invert"), NULL, image_invert_cmd_callback, 0 }, { N_("/Image/Colors/---"), NULL, NULL, 0, "" }, @@ -157,6 +165,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Image/Scale"), NULL, image_scale_cmd_callback, 0 }, { N_("/Image/---"), NULL, NULL, 0, "" }, + { N_("/Layers/tearoff1"), NULL, NULL, 0, "" }, { N_("/Layers/Layers & Channels..."), "L", dialogs_lc_cmd_callback, 0 }, { N_("/Layers/Stack/Previous Layer"), "Prior", layers_previous_cmd_callback, 0 }, { N_("/Layers/Stack/Next Layer"), "Next", layers_next_cmd_callback, 0 }, @@ -204,17 +213,21 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, */ + { N_("/Tools/tearoff1"), NULL, NULL, 0, "" }, { N_("/Tools/Toolbox"), NULL, toolbox_raise_callback, 0 }, { N_("/Tools/Default Colors"), "D", tools_default_colors_cmd_callback, 0 }, { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, { N_("/Tools/---"), NULL, NULL, 0, "" }, + { N_("/Filters/tearoff1"), NULL, NULL, 0, "" }, { N_("/Filters/Repeat last"), "F", filters_repeat_cmd_callback, 0x0 }, { N_("/Filters/Re-show last"), "F", filters_repeat_cmd_callback, 0x1 }, { N_("/Filters/---"), NULL, NULL, 0, "" }, + { N_("/Script-Fu/tearoff1"), NULL, NULL, 0, "" }, { N_("/Script-Fu/"), NULL, NULL, 0 }, + { N_("/Dialogs/tearoff1"), NULL, NULL, 0, "" }, { N_("/Dialogs/Brushes..."), "B", dialogs_brushes_cmd_callback, 0 }, { N_("/Dialogs/Patterns..."), "P", dialogs_patterns_cmd_callback, 0 }, { N_("/Dialogs/Palette..."), "P", dialogs_palette_cmd_callback, 0 }, diff --git a/app/widgets/gimpitemfactory.c b/app/widgets/gimpitemfactory.c index 0e191e4fef..2b0c1ae444 100644 --- a/app/widgets/gimpitemfactory.c +++ b/app/widgets/gimpitemfactory.c @@ -53,6 +53,7 @@ static GSList *last_opened_raw_filenames = NULL; static const GtkItemFactoryEntry toolbox_entries[] = { + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 0 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/About..."), NULL, about_dialog_cmd_callback, 0 }, @@ -68,6 +69,7 @@ static const GtkItemFactoryEntry toolbox_entries[] = { N_("/File/Dialogs/Device Status..."), NULL, dialogs_device_status_cmd_callback, 0 }, { N_("/File/Dialogs/Document Index..."), NULL, raise_idea_callback, 0 }, { N_("/File/Dialogs/Error Console..."), NULL, dialogs_error_console_cmd_callback, 0 }, + { N_("/Xtns/tearoff1"), NULL, NULL, 0, "" }, { N_("/Xtns/Module Browser"), NULL, dialogs_module_browser_cmd_callback, 0 }, { N_("/File/---"), NULL, NULL, 0, "" }, { N_("/File/---"), NULL, NULL, 0, "" } @@ -80,6 +82,8 @@ static const GtkItemFactoryEntry toolbox_end = { N_("/File/Quit"), "Q", static const GtkItemFactoryEntry image_entries[] = { + { N_("/tearoff1"), NULL, NULL, 0, "" }, + { N_("/File/tearoff1"), NULL, NULL, 0, "" }, { N_("/File/New"), "N", file_new_cmd_callback, 1 }, { N_("/File/Open"), "O", file_open_cmd_callback, 0 }, { N_("/File/Save"), "S", file_save_cmd_callback, 0 }, @@ -92,6 +96,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/File/Quit"), "Q", file_quit_cmd_callback, 0 }, { N_("/File/---moved"), NULL, NULL, 0, "" }, + { N_("/Edit/tearoff1"), NULL, NULL, 0, "" }, { N_("/Edit/Cut"), "X", edit_cut_cmd_callback, 0 }, { N_("/Edit/Copy"), "C", edit_copy_cmd_callback, 0 }, { N_("/Edit/Paste"), "V", edit_paste_cmd_callback, 0 }, @@ -107,6 +112,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Edit/Paste Named"), "V", edit_named_paste_cmd_callback, 0 }, { N_("/Edit/---"), NULL, NULL, 0, "" }, + { N_("/Select/tearoff1"), NULL, NULL, 0, "" }, { N_("/Select/Toggle"), "T", select_toggle_cmd_callback, 0 }, { N_("/Select/Invert"), "I", select_invert_cmd_callback, 0 }, { N_("/Select/All"), "A", select_all_cmd_callback, 0 }, @@ -119,6 +125,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Select/Shrink"), NULL, select_shrink_cmd_callback, 0 }, { N_("/Select/Save To Channel"), NULL, select_save_cmd_callback, 0 }, + { N_("/View/tearoff1"), NULL, NULL, 0, "" }, { N_("/View/Zoom In"), "equal", view_zoomin_cmd_callback, 0 }, { N_("/View/Zoom Out"), "minus", view_zoomout_cmd_callback, 0 }, { N_("/View/Zoom/16:1"), NULL, view_zoom_16_1_callback, 0 }, @@ -140,6 +147,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/View/New View"), NULL, view_new_view_cmd_callback, 0 }, { N_("/View/Shrink Wrap"), "E", view_shrink_wrap_cmd_callback, 0 }, + { N_("/Image/tearoff1"), NULL, NULL, 0, "" }, { N_("/Image/Colors/Equalize"), NULL, image_equalize_cmd_callback, 0 }, { N_("/Image/Colors/Invert"), NULL, image_invert_cmd_callback, 0 }, { N_("/Image/Colors/---"), NULL, NULL, 0, "" }, @@ -157,6 +165,7 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Image/Scale"), NULL, image_scale_cmd_callback, 0 }, { N_("/Image/---"), NULL, NULL, 0, "" }, + { N_("/Layers/tearoff1"), NULL, NULL, 0, "" }, { N_("/Layers/Layers & Channels..."), "L", dialogs_lc_cmd_callback, 0 }, { N_("/Layers/Stack/Previous Layer"), "Prior", layers_previous_cmd_callback, 0 }, { N_("/Layers/Stack/Next Layer"), "Next", layers_next_cmd_callback, 0 }, @@ -204,17 +213,21 @@ static const GtkItemFactoryEntry image_entries[] = { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, */ + { N_("/Tools/tearoff1"), NULL, NULL, 0, "" }, { N_("/Tools/Toolbox"), NULL, toolbox_raise_callback, 0 }, { N_("/Tools/Default Colors"), "D", tools_default_colors_cmd_callback, 0 }, { N_("/Tools/Swap Colors"), "X", tools_swap_colors_cmd_callback, 0 }, { N_("/Tools/---"), NULL, NULL, 0, "" }, + { N_("/Filters/tearoff1"), NULL, NULL, 0, "" }, { N_("/Filters/Repeat last"), "F", filters_repeat_cmd_callback, 0x0 }, { N_("/Filters/Re-show last"), "F", filters_repeat_cmd_callback, 0x1 }, { N_("/Filters/---"), NULL, NULL, 0, "" }, + { N_("/Script-Fu/tearoff1"), NULL, NULL, 0, "" }, { N_("/Script-Fu/"), NULL, NULL, 0 }, + { N_("/Dialogs/tearoff1"), NULL, NULL, 0, "" }, { N_("/Dialogs/Brushes..."), "B", dialogs_brushes_cmd_callback, 0 }, { N_("/Dialogs/Patterns..."), "P", dialogs_patterns_cmd_callback, 0 }, { N_("/Dialogs/Palette..."), "P", dialogs_palette_cmd_callback, 0 },