pass an additional "Gimp" pointer to

2002-03-20  Michael Natterer  <mitch@gimp.org>

	* app/display/gimpdisplayshell.[ch]: pass an additional "Gimp"
	pointer to gimp_display_shell_set_menu_sensitivity() so we can
	correctly set the state of some items even without a display.
	Set the sensitivity of much more items. Never set submenus
	insensitive so the user can always browse the whole menu
	(according to the GNOME HIG).

	* app/image_map.c
	* app/display/gimpdisplay.c
	* app/gui/gui.c: changed accordingly.

	* app/gui/view-commands.[ch]: added a callback for the display
	filters dialog because display releted dialogs are going to
	be handled different soon.

	* app/gui/menus.c: use the new callback.
This commit is contained in:
Michael Natterer 2002-03-20 15:32:35 +00:00 committed by Michael Natterer
parent ed3db7585c
commit e302aeb17d
16 changed files with 471 additions and 325 deletions

View File

@ -1,3 +1,22 @@
2002-03-20 Michael Natterer <mitch@gimp.org>
* app/display/gimpdisplayshell.[ch]: pass an additional "Gimp"
pointer to gimp_display_shell_set_menu_sensitivity() so we can
correctly set the state of some items even without a display.
Set the sensitivity of much more items. Never set submenus
insensitive so the user can always browse the whole menu
(according to the GNOME HIG).
* app/image_map.c
* app/display/gimpdisplay.c
* app/gui/gui.c: changed accordingly.
* app/gui/view-commands.[ch]: added a callback for the display
filters dialog because display releted dialogs are going to
be handled different soon.
* app/gui/menus.c: use the new callback.
2002-03-20 Sven Neumann <sven@gimp.org> 2002-03-20 Sven Neumann <sven@gimp.org>
* app/core/core-enums.[ch]: registered GimpConvertDitherType and * app/core/core-enums.[ch]: registered GimpConvertDitherType and

View File

@ -34,6 +34,9 @@
#include "display/gimpdisplayshell-scale.h" #include "display/gimpdisplayshell-scale.h"
#include "display/gimpdisplayshell-selection.h" #include "display/gimpdisplayshell-selection.h"
#include "widgets/gimpdialogfactory.h"
#include "dialogs.h"
#include "info-dialog.h" #include "info-dialog.h"
#include "info-window.h" #include "info-window.h"
#include "view-commands.h" #include "view-commands.h"
@ -124,8 +127,8 @@ view_info_window_cmd_callback (GtkWidget *widget,
} }
void void
view_nav_window_cmd_callback (GtkWidget *widget, view_navigation_window_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
GimpDisplay *gdisp; GimpDisplay *gdisp;
GimpDisplayShell *shell; GimpDisplayShell *shell;
@ -146,6 +149,20 @@ view_nav_window_cmd_callback (GtkWidget *widget,
} }
} }
void
view_display_filters_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpDisplay *gdisp;
GimpDisplayShell *shell;
return_if_no_display (gdisp, data);
shell = GIMP_DISPLAY_SHELL (gdisp->shell);
gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp:display-filters-dialog", -1);
}
void void
view_toggle_selection_cmd_callback (GtkWidget *widget, view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)

View File

@ -33,7 +33,9 @@ void view_dot_for_dot_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_info_window_cmd_callback (GtkWidget *widget, void view_info_window_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_nav_window_cmd_callback (GtkWidget *widget, void view_navigation_window_cmd_callback (GtkWidget *widget,
gpointer data);
void view_display_filters_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_toggle_selection_cmd_callback (GtkWidget *widget, void view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);

View File

@ -94,7 +94,8 @@ image_map_create (GimpDisplay *gdisp,
* to avert any unintented undo interaction through the UI * to avert any unintented undo interaction through the UI
*/ */
gimp_image_undo_freeze (image_map->gdisp->gimage); gimp_image_undo_freeze (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
return image_map; return image_map;
} }
@ -245,7 +246,8 @@ image_map_commit (ImageMap *image_map)
x1, y1, x2, y2, image_map->undo_tiles, FALSE); x1, y1, x2, y2, image_map->undo_tiles, FALSE);
} }
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
} }
@ -297,7 +299,8 @@ image_map_clear (ImageMap *image_map)
g_message ("image depth change, unable to restore original image"); g_message ("image depth change, unable to restore original image");
tile_manager_destroy (image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
gimp_image_undo_thaw (image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
return; return;
} }
@ -322,7 +325,8 @@ image_map_abort (ImageMap *image_map)
image_map_clear (image_map); image_map_clear (image_map);
gimp_image_undo_thaw (image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
} }

View File

@ -571,7 +571,8 @@ gimp_display_flush_whenever (GimpDisplay *gdisp,
if (! now && gimp_context_get_display (gimp_get_user_context if (! now && gimp_context_get_display (gimp_get_user_context
(gdisp->gimage->gimp)) == gdisp) (gdisp->gimage->gimp)) == gdisp)
{ {
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (gdisp->shell),
gdisp->gimage->gimp);
} }
} }

View File

@ -571,7 +571,8 @@ gimp_display_flush_whenever (GimpDisplay *gdisp,
if (! now && gimp_context_get_display (gimp_get_user_context if (! now && gimp_context_get_display (gimp_get_user_context
(gdisp->gimage->gimp)) == gdisp) (gdisp->gimage->gimp)) == gdisp)
{ {
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (gdisp->shell),
gdisp->gimage->gimp);
} }
} }

View File

@ -825,36 +825,47 @@ gimp_display_shell_untransform_coords (GimpDisplayShell *shell,
} }
void void
gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell) gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell,
Gimp *gimp)
{ {
GimpDisplay *gdisp = NULL; GtkItemFactory *item_factory;
GimpImage *gimage = NULL; GimpDisplay *gdisp = NULL;
GimpImageBaseType base_type = 0; GimpImage *gimage = NULL;
GimpImageType type = -1; GimpImageType type = -1;
GimpDrawable *drawable = NULL; GimpDrawable *drawable = NULL;
GimpLayer *layer = NULL; GimpLayer *layer = NULL;
GimpRGB fg; GimpRGB fg;
GimpRGB bg; GimpRGB bg;
gboolean fs = FALSE; gboolean is_rgb = FALSE;
gboolean aux = FALSE; gboolean is_gray = FALSE;
gboolean lm = FALSE; gboolean is_indexed = FALSE;
gboolean lp = FALSE; gboolean fs = FALSE;
gboolean sel = FALSE; gboolean aux = FALSE;
gboolean alpha = FALSE; gboolean lm = FALSE;
gint lind = -1; gboolean lp = FALSE;
gint lnum = -1; gboolean sel = FALSE;
gboolean alpha = FALSE;
gint lind = -1;
gint lnum = -1;
g_return_if_fail (! shell || GIMP_IS_DISPLAY_SHELL (shell)); g_return_if_fail (! shell || GIMP_IS_DISPLAY_SHELL (shell));
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (shell) if (shell)
gdisp = shell->gdisp; gdisp = shell->gdisp;
if (gdisp) if (gdisp)
{ {
GimpImageBaseType base_type;
gimage = gdisp->gimage; gimage = gdisp->gimage;
base_type = gimp_image_base_type (gimage); base_type = gimp_image_base_type (gimage);
is_rgb = (base_type == GIMP_RGB);
is_gray = (base_type == GIMP_GRAY);
is_indexed = (base_type == GIMP_INDEXED);
fs = (gimp_image_floating_sel (gimage) != NULL); fs = (gimp_image_floating_sel (gimage) != NULL);
aux = (gimp_image_get_active_channel (gimage) != NULL); aux = (gimp_image_get_active_channel (gimage) != NULL);
lp = ! gimp_image_is_empty (gimage); lp = ! gimp_image_is_empty (gimage);
@ -878,162 +889,186 @@ gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell)
lnum = gimp_container_num_children (gimage->layers); lnum = gimp_container_num_children (gimage->layers);
} }
gimp_context_get_foreground (gimp_get_user_context (gdisp->gimage->gimp),
&fg);
gimp_context_get_background (gimp_get_user_context (gdisp->gimage->gimp),
&bg);
} }
gimp_context_get_foreground (gimp_get_user_context (gimp), &fg);
gimp_context_get_background (gimp_get_user_context (gimp), &bg);
item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Image>"));
#define SET_ACTIVE(menu,condition) \ #define SET_ACTIVE(menu,condition) \
gimp_menu_item_set_active ("<Image>/" menu, (condition) != 0) gimp_item_factory_set_active (item_factory, menu, (condition) != 0)
#define SET_LABEL(menu,label) \ #define SET_LABEL(menu,label) \
gimp_menu_item_set_label ("<Image>/" menu, (label)) gimp_item_factory_set_label (item_factory, menu, (label))
#define SET_SENSITIVE(menu,condition) \ #define SET_SENSITIVE(menu,condition) \
gimp_menu_item_set_sensitive ("<Image>/" menu, (condition) != 0) gimp_item_factory_set_sensitive (item_factory, menu, (condition) != 0)
SET_SENSITIVE ("File/Save", gdisp && drawable); /* File */
SET_SENSITIVE ("File/Save as...", gdisp && drawable);
SET_SENSITIVE ("File/Save a Copy as...", gdisp && drawable);
SET_SENSITIVE ("File/Revert...", gdisp && GIMP_OBJECT (gimage)->name);
SET_SENSITIVE ("File/Close", gdisp);
SET_SENSITIVE ("Edit", gdisp); SET_SENSITIVE ("/File/Save", gdisp && drawable);
SET_SENSITIVE ("Edit/Buffer", gdisp); SET_SENSITIVE ("/File/Save as...", gdisp && drawable);
if (gdisp) SET_SENSITIVE ("/File/Save a Copy as...", gdisp && drawable);
{ SET_SENSITIVE ("/File/Revert...", gdisp && GIMP_OBJECT (gimage)->name);
gchar *undo_name = NULL; SET_SENSITIVE ("/File/Close", gdisp);
gchar *redo_name = NULL;
if (gimp_image_undo_is_enabled (gimage)) /* Edit */
{
undo_name = (gchar *) undo_get_undo_name (gimage);
redo_name = (gchar *) undo_get_redo_name (gimage);
}
if (undo_name) {
undo_name = g_strdup_printf (_("Undo %s"), gettext (undo_name)); gchar *undo_name = NULL;
gchar *redo_name = NULL;
if (redo_name) if (gdisp && gimp_image_undo_is_enabled (gimage))
redo_name = g_strdup_printf (_("Redo %s"), gettext (redo_name)); {
undo_name = (gchar *) undo_get_undo_name (gimage);
redo_name = (gchar *) undo_get_redo_name (gimage);
}
SET_LABEL ("Edit/Undo", undo_name ? undo_name : _("Undo")); if (undo_name)
SET_LABEL ("Edit/Redo", redo_name ? redo_name : _("Redo")); undo_name = g_strdup_printf (_("Undo %s"), gettext (undo_name));
SET_SENSITIVE ("Edit/Undo", undo_name); if (redo_name)
SET_SENSITIVE ("Edit/Redo", redo_name); redo_name = g_strdup_printf (_("Redo %s"), gettext (redo_name));
g_free (undo_name); SET_LABEL ("/Edit/Undo", undo_name ? undo_name : _("Undo"));
g_free (redo_name); SET_LABEL ("/Edit/Redo", redo_name ? redo_name : _("Redo"));
SET_SENSITIVE ("Edit/Cut", lp); SET_SENSITIVE ("/Edit/Undo", undo_name);
SET_SENSITIVE ("Edit/Copy", lp); SET_SENSITIVE ("/Edit/Redo", redo_name);
SET_SENSITIVE ("Edit/Buffer/Cut Named...", lp);
SET_SENSITIVE ("Edit/Buffer/Copy Named...", lp);
SET_SENSITIVE ("Edit/Clear", lp);
SET_SENSITIVE ("Edit/Fill with FG Color", lp);
SET_SENSITIVE ("Edit/Fill with BG Color", lp);
SET_SENSITIVE ("Edit/Stroke", lp);
}
SET_SENSITIVE ("Select", gdisp && lp); g_free (undo_name);
SET_SENSITIVE ("Select/Save to Channel", !fs); g_free (redo_name);
}
SET_SENSITIVE ("View", gdisp); SET_SENSITIVE ("/Edit/Cut", lp);
SET_SENSITIVE ("View/Zoom", gdisp); SET_SENSITIVE ("/Edit/Copy", lp);
if (gdisp) SET_SENSITIVE ("/Edit/Paste", gdisp && gimp->global_buffer);
{ SET_SENSITIVE ("/Edit/Paste Into", gdisp && gimp->global_buffer);
SET_ACTIVE ("View/Toggle Selection", ! shell->select->hidden); SET_SENSITIVE ("/Edit/Paste as New", gimp->global_buffer);
SET_ACTIVE ("View/Toggle Layer Boundary", ! shell->select->layer_hidden); SET_SENSITIVE ("/Edit/Buffer/Cut Named...", lp);
SET_ACTIVE ("View/Toggle Rulers", SET_SENSITIVE ("/Edit/Buffer/Copy Named...", lp);
GTK_WIDGET_VISIBLE (shell->origin) ? 1 : 0); SET_SENSITIVE ("/Edit/Buffer/Paste Named...", lp);
SET_ACTIVE ("View/Toggle Guides", gdisp->draw_guides); SET_SENSITIVE ("/Edit/Clear", lp);
SET_ACTIVE ("View/Snap to Guides", gdisp->snap_to_guides); SET_SENSITIVE ("/Edit/Fill with FG Color", lp);
SET_ACTIVE ("View/Toggle Statusbar", SET_SENSITIVE ("/Edit/Fill with BG Color", lp);
GTK_WIDGET_VISIBLE (shell->statusbar) ? 1 : 0); SET_SENSITIVE ("/Edit/Stroke", lp && sel);
SET_ACTIVE ("View/Dot for Dot", gdisp->dot_for_dot);
}
SET_SENSITIVE ("Image", gdisp); /* Select */
SET_SENSITIVE ("Image/Mode", gdisp); SET_SENSITIVE ("/Select/Invert", lp && sel);
if (gdisp) SET_SENSITIVE ("/Select/All", lp);
{ SET_SENSITIVE ("/Select/None", lp && sel);
SET_SENSITIVE ("Image/Mode/RGB", (base_type != GIMP_RGB)); SET_SENSITIVE ("/Select/Float", lp && sel);
SET_SENSITIVE ("Image/Mode/Grayscale", (base_type != GIMP_GRAY)); SET_SENSITIVE ("/Select/Feather...", lp && sel);
SET_SENSITIVE ("Image/Mode/Indexed...", (base_type != GIMP_INDEXED)); SET_SENSITIVE ("/Select/Sharpen", lp && sel);
} SET_SENSITIVE ("/Select/Shrink...", lp && sel);
SET_SENSITIVE ("/Select/Grow...", lp && sel);
SET_SENSITIVE ("/Select/Border...", lp && sel);
SET_SENSITIVE ("/Select/Save to Channel", lp && sel && !fs);
SET_SENSITIVE ("Image/Crop Image", gdisp && sel); /* View */
SET_SENSITIVE ("Image/Merge Visible Layers...", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("Image/Flatten Image", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("Layer/Stack", gdisp); SET_SENSITIVE ("/View/Zoom In", gdisp);
if (gdisp) SET_SENSITIVE ("/View/Zoom Out", gdisp);
{ SET_SENSITIVE ("/View/Zoom to Fit Window", gdisp);
SET_SENSITIVE ("Layer/Stack/Previous Layer",
!fs && !aux && lp && lind > 0);
SET_SENSITIVE ("Layer/Stack/Next Layer",
!fs && !aux && lp && lind < (lnum - 1));
SET_SENSITIVE ("Layer/Stack/Raise Layer",
!fs && !aux && lp && alpha && lind > 0);
SET_SENSITIVE ("Layer/Stack/Lower Layer",
!fs && !aux && lp && alpha && lind < (lnum - 1));
SET_SENSITIVE ("Layer/Stack/Layer to Top",
!fs && !aux && lp && alpha && lind > 0);
SET_SENSITIVE ("Layer/Stack/Layer to Bottom",
!fs && !aux && lp && alpha && lind < (lnum - 1));
}
SET_SENSITIVE ("Layer/New Layer...", gdisp); SET_SENSITIVE ("/View/Zoom/16:1", gdisp);
SET_SENSITIVE ("Layer/Duplicate Layer", gdisp && !fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/8:1", gdisp);
SET_SENSITIVE ("Layer/Anchor Layer", gdisp && fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/4:1", gdisp);
SET_SENSITIVE ("Layer/Merge Down", gdisp && !fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/2:1", gdisp);
SET_SENSITIVE ("Layer/Delete Layer", gdisp && !aux && lp); SET_SENSITIVE ("/View/Zoom/1:1", gdisp);
SET_SENSITIVE ("/View/Zoom/1:2", gdisp);
SET_SENSITIVE ("/View/Zoom/1:4", gdisp);
SET_SENSITIVE ("/View/Zoom/1:8", gdisp);
SET_SENSITIVE ("/View/Zoom/1:16", gdisp);
SET_SENSITIVE ("Layer/Layer Boundary Size...", gdisp && !aux && lp); SET_SENSITIVE ("/View/Dot for Dot", gdisp);
SET_SENSITIVE ("Layer/Layer to Imagesize", gdisp && !aux && lp); SET_ACTIVE ("/View/Dot for Dot", gdisp && gdisp->dot_for_dot);
SET_SENSITIVE ("Layer/Scale Layer...", gdisp && !aux && lp);
SET_SENSITIVE ("Layer/Transform/Offset...", lp); SET_SENSITIVE ("/View/Info Window...", gdisp);
SET_SENSITIVE ("/View/Navigation Window...", gdisp);
SET_SENSITIVE ("/View/Display Filters...", gdisp);
SET_SENSITIVE ("Layer/Colors", gdisp); SET_SENSITIVE ("/View/Toggle Selection", gdisp);
SET_SENSITIVE ("Layer/Colors/Auto", gdisp); SET_ACTIVE ("/View/Toggle Selection", gdisp && ! shell->select->hidden);
SET_SENSITIVE ("/View/Toggle Layer Boundary", gdisp);
SET_ACTIVE ("/View/Toggle Layer Boundary", gdisp && ! shell->select->layer_hidden);
if (gdisp) SET_SENSITIVE ("/View/Toggle Guides", gdisp);
{ SET_ACTIVE ("/View/Toggle Guides", gdisp && gdisp->draw_guides);
SET_SENSITIVE ("Layer/Colors", lp); SET_SENSITIVE ("/View/Snap to Guides", gdisp);
SET_SENSITIVE ("Layer/Colors/Color Balance...", (base_type == GIMP_RGB)); SET_ACTIVE ("/View/Snap to Guides", gdisp && gdisp->snap_to_guides);
SET_SENSITIVE ("Layer/Colors/Hue-Saturation...", (base_type == GIMP_RGB));
SET_SENSITIVE ("Layer/Colors/Brightness-Contrast...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Threshold...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Levels...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Curves...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Desaturate", (base_type == GIMP_RGB));
SET_SENSITIVE ("Layer/Colors/Posterize...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Invert", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Auto/Equalize", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Histogram...", lp); SET_SENSITIVE ("/View/Toggle Rulers", gdisp);
} SET_ACTIVE ("/View/Toggle Rulers",
gdisp && GTK_WIDGET_VISIBLE (shell->origin) ? 1 : 0);
SET_SENSITIVE ("Layer/Mask/Add Layer Mask...", SET_SENSITIVE ("/View/Toggle Statusbar", gdisp);
gdisp && !aux && !lm && lp && alpha && (base_type != GIMP_INDEXED)); SET_ACTIVE ("/View/Toggle Statusbar",
SET_SENSITIVE ("Layer/Mask/Apply Layer Mask", gdisp && GTK_WIDGET_VISIBLE (shell->statusbar) ? 1 : 0);
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Mask/Delete Layer Mask",
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Mask/Mask to Selection",
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Alpha/Alpha to Selection", SET_SENSITIVE ("/View/New View", gdisp);
gdisp && !aux && lp && alpha); SET_SENSITIVE ("/View/Shrink Wrap", gdisp);
SET_SENSITIVE ("Layer/Alpha/Add Alpha Channel",
gdisp && !fs && !aux && lp && !lm && !alpha);
SET_SENSITIVE ("Filters", gdisp && lp); /* Image */
SET_SENSITIVE ("Script-Fu", gdisp && lp); SET_SENSITIVE ("/Image/Mode/RGB", gdisp && ! is_rgb);
SET_SENSITIVE ("/Image/Mode/Grayscale", gdisp && ! is_gray);
SET_SENSITIVE ("/Image/Mode/Indexed...", gdisp && ! is_indexed);
SET_SENSITIVE ("/Image/Canvas Size...", gdisp);
SET_SENSITIVE ("/Image/Scale Image...", gdisp);
SET_SENSITIVE ("/Image/Crop Image", gdisp && sel);
SET_SENSITIVE ("/Image/Duplicate", gdisp);
SET_SENSITIVE ("/Image/Merge Visible Layers...", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("/Image/Flatten Image", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("/Image/Undo History...", gdisp);
/* Layer */
SET_SENSITIVE ("/Layer/Stack/Previous Layer",
lp && !fs && !aux && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Next Layer",
lp && !fs && !aux && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/Stack/Raise Layer",
lp && !fs && !aux && alpha && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Lower Layer",
lp && !fs && !aux && alpha && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/Stack/Layer to Top",
lp && !fs && !aux && alpha && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Layer to Bottom",
lp && !fs && !aux && alpha && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/New Layer...", gdisp);
SET_SENSITIVE ("/Layer/Duplicate Layer", lp && !fs && !aux);
SET_SENSITIVE ("/Layer/Anchor Layer", lp && fs && !aux);
SET_SENSITIVE ("/Layer/Merge Down", lp && !fs && !aux);
SET_SENSITIVE ("/Layer/Delete Layer", lp && !aux);
SET_SENSITIVE ("/Layer/Layer Boundary Size...", lp && !aux);
SET_SENSITIVE ("/Layer/Layer to Imagesize", lp && !aux);
SET_SENSITIVE ("/Layer/Scale Layer...", lp && !aux);
SET_SENSITIVE ("/Layer/Transform/Offset...", lp);
SET_SENSITIVE ("/Layer/Colors/Color Balance...", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Hue-Saturation...", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Brightness-Contrast...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Threshold...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Levels...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Curves...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Desaturate", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Posterize...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Invert", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Auto/Equalize", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Histogram...", lp);
SET_SENSITIVE ("/Layer/Mask/Add Layer Mask...", lp && !aux && !lm && alpha && ! is_indexed);
SET_SENSITIVE ("/Layer/Mask/Apply Layer Mask", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Mask/Delete Layer Mask", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Mask/Mask to Selection", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Alpha/Alpha to Selection", lp && !aux && alpha);
SET_SENSITIVE ("/Layer/Alpha/Add Alpha Channel", lp && !aux && !fs && !lm && !alpha);
#undef SET_ACTIVE #undef SET_ACTIVE
#undef SET_LABEL #undef SET_LABEL

View File

@ -128,7 +128,8 @@ void gimp_display_shell_untransform_coords (GimpDisplayShell *shell,
GimpCoords *display_coords, GimpCoords *display_coords,
GimpCoords *image_coords); GimpCoords *image_coords);
void gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell); void gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell,
Gimp *gimp);
GimpGuide * gimp_display_shell_find_guide (GimpDisplayShell *shell, GimpGuide * gimp_display_shell_find_guide (GimpDisplayShell *shell,
gdouble x, gdouble x,

View File

@ -825,36 +825,47 @@ gimp_display_shell_untransform_coords (GimpDisplayShell *shell,
} }
void void
gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell) gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell,
Gimp *gimp)
{ {
GimpDisplay *gdisp = NULL; GtkItemFactory *item_factory;
GimpImage *gimage = NULL; GimpDisplay *gdisp = NULL;
GimpImageBaseType base_type = 0; GimpImage *gimage = NULL;
GimpImageType type = -1; GimpImageType type = -1;
GimpDrawable *drawable = NULL; GimpDrawable *drawable = NULL;
GimpLayer *layer = NULL; GimpLayer *layer = NULL;
GimpRGB fg; GimpRGB fg;
GimpRGB bg; GimpRGB bg;
gboolean fs = FALSE; gboolean is_rgb = FALSE;
gboolean aux = FALSE; gboolean is_gray = FALSE;
gboolean lm = FALSE; gboolean is_indexed = FALSE;
gboolean lp = FALSE; gboolean fs = FALSE;
gboolean sel = FALSE; gboolean aux = FALSE;
gboolean alpha = FALSE; gboolean lm = FALSE;
gint lind = -1; gboolean lp = FALSE;
gint lnum = -1; gboolean sel = FALSE;
gboolean alpha = FALSE;
gint lind = -1;
gint lnum = -1;
g_return_if_fail (! shell || GIMP_IS_DISPLAY_SHELL (shell)); g_return_if_fail (! shell || GIMP_IS_DISPLAY_SHELL (shell));
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (shell) if (shell)
gdisp = shell->gdisp; gdisp = shell->gdisp;
if (gdisp) if (gdisp)
{ {
GimpImageBaseType base_type;
gimage = gdisp->gimage; gimage = gdisp->gimage;
base_type = gimp_image_base_type (gimage); base_type = gimp_image_base_type (gimage);
is_rgb = (base_type == GIMP_RGB);
is_gray = (base_type == GIMP_GRAY);
is_indexed = (base_type == GIMP_INDEXED);
fs = (gimp_image_floating_sel (gimage) != NULL); fs = (gimp_image_floating_sel (gimage) != NULL);
aux = (gimp_image_get_active_channel (gimage) != NULL); aux = (gimp_image_get_active_channel (gimage) != NULL);
lp = ! gimp_image_is_empty (gimage); lp = ! gimp_image_is_empty (gimage);
@ -878,162 +889,186 @@ gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell)
lnum = gimp_container_num_children (gimage->layers); lnum = gimp_container_num_children (gimage->layers);
} }
gimp_context_get_foreground (gimp_get_user_context (gdisp->gimage->gimp),
&fg);
gimp_context_get_background (gimp_get_user_context (gdisp->gimage->gimp),
&bg);
} }
gimp_context_get_foreground (gimp_get_user_context (gimp), &fg);
gimp_context_get_background (gimp_get_user_context (gimp), &bg);
item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Image>"));
#define SET_ACTIVE(menu,condition) \ #define SET_ACTIVE(menu,condition) \
gimp_menu_item_set_active ("<Image>/" menu, (condition) != 0) gimp_item_factory_set_active (item_factory, menu, (condition) != 0)
#define SET_LABEL(menu,label) \ #define SET_LABEL(menu,label) \
gimp_menu_item_set_label ("<Image>/" menu, (label)) gimp_item_factory_set_label (item_factory, menu, (label))
#define SET_SENSITIVE(menu,condition) \ #define SET_SENSITIVE(menu,condition) \
gimp_menu_item_set_sensitive ("<Image>/" menu, (condition) != 0) gimp_item_factory_set_sensitive (item_factory, menu, (condition) != 0)
SET_SENSITIVE ("File/Save", gdisp && drawable); /* File */
SET_SENSITIVE ("File/Save as...", gdisp && drawable);
SET_SENSITIVE ("File/Save a Copy as...", gdisp && drawable);
SET_SENSITIVE ("File/Revert...", gdisp && GIMP_OBJECT (gimage)->name);
SET_SENSITIVE ("File/Close", gdisp);
SET_SENSITIVE ("Edit", gdisp); SET_SENSITIVE ("/File/Save", gdisp && drawable);
SET_SENSITIVE ("Edit/Buffer", gdisp); SET_SENSITIVE ("/File/Save as...", gdisp && drawable);
if (gdisp) SET_SENSITIVE ("/File/Save a Copy as...", gdisp && drawable);
{ SET_SENSITIVE ("/File/Revert...", gdisp && GIMP_OBJECT (gimage)->name);
gchar *undo_name = NULL; SET_SENSITIVE ("/File/Close", gdisp);
gchar *redo_name = NULL;
if (gimp_image_undo_is_enabled (gimage)) /* Edit */
{
undo_name = (gchar *) undo_get_undo_name (gimage);
redo_name = (gchar *) undo_get_redo_name (gimage);
}
if (undo_name) {
undo_name = g_strdup_printf (_("Undo %s"), gettext (undo_name)); gchar *undo_name = NULL;
gchar *redo_name = NULL;
if (redo_name) if (gdisp && gimp_image_undo_is_enabled (gimage))
redo_name = g_strdup_printf (_("Redo %s"), gettext (redo_name)); {
undo_name = (gchar *) undo_get_undo_name (gimage);
redo_name = (gchar *) undo_get_redo_name (gimage);
}
SET_LABEL ("Edit/Undo", undo_name ? undo_name : _("Undo")); if (undo_name)
SET_LABEL ("Edit/Redo", redo_name ? redo_name : _("Redo")); undo_name = g_strdup_printf (_("Undo %s"), gettext (undo_name));
SET_SENSITIVE ("Edit/Undo", undo_name); if (redo_name)
SET_SENSITIVE ("Edit/Redo", redo_name); redo_name = g_strdup_printf (_("Redo %s"), gettext (redo_name));
g_free (undo_name); SET_LABEL ("/Edit/Undo", undo_name ? undo_name : _("Undo"));
g_free (redo_name); SET_LABEL ("/Edit/Redo", redo_name ? redo_name : _("Redo"));
SET_SENSITIVE ("Edit/Cut", lp); SET_SENSITIVE ("/Edit/Undo", undo_name);
SET_SENSITIVE ("Edit/Copy", lp); SET_SENSITIVE ("/Edit/Redo", redo_name);
SET_SENSITIVE ("Edit/Buffer/Cut Named...", lp);
SET_SENSITIVE ("Edit/Buffer/Copy Named...", lp);
SET_SENSITIVE ("Edit/Clear", lp);
SET_SENSITIVE ("Edit/Fill with FG Color", lp);
SET_SENSITIVE ("Edit/Fill with BG Color", lp);
SET_SENSITIVE ("Edit/Stroke", lp);
}
SET_SENSITIVE ("Select", gdisp && lp); g_free (undo_name);
SET_SENSITIVE ("Select/Save to Channel", !fs); g_free (redo_name);
}
SET_SENSITIVE ("View", gdisp); SET_SENSITIVE ("/Edit/Cut", lp);
SET_SENSITIVE ("View/Zoom", gdisp); SET_SENSITIVE ("/Edit/Copy", lp);
if (gdisp) SET_SENSITIVE ("/Edit/Paste", gdisp && gimp->global_buffer);
{ SET_SENSITIVE ("/Edit/Paste Into", gdisp && gimp->global_buffer);
SET_ACTIVE ("View/Toggle Selection", ! shell->select->hidden); SET_SENSITIVE ("/Edit/Paste as New", gimp->global_buffer);
SET_ACTIVE ("View/Toggle Layer Boundary", ! shell->select->layer_hidden); SET_SENSITIVE ("/Edit/Buffer/Cut Named...", lp);
SET_ACTIVE ("View/Toggle Rulers", SET_SENSITIVE ("/Edit/Buffer/Copy Named...", lp);
GTK_WIDGET_VISIBLE (shell->origin) ? 1 : 0); SET_SENSITIVE ("/Edit/Buffer/Paste Named...", lp);
SET_ACTIVE ("View/Toggle Guides", gdisp->draw_guides); SET_SENSITIVE ("/Edit/Clear", lp);
SET_ACTIVE ("View/Snap to Guides", gdisp->snap_to_guides); SET_SENSITIVE ("/Edit/Fill with FG Color", lp);
SET_ACTIVE ("View/Toggle Statusbar", SET_SENSITIVE ("/Edit/Fill with BG Color", lp);
GTK_WIDGET_VISIBLE (shell->statusbar) ? 1 : 0); SET_SENSITIVE ("/Edit/Stroke", lp && sel);
SET_ACTIVE ("View/Dot for Dot", gdisp->dot_for_dot);
}
SET_SENSITIVE ("Image", gdisp); /* Select */
SET_SENSITIVE ("Image/Mode", gdisp); SET_SENSITIVE ("/Select/Invert", lp && sel);
if (gdisp) SET_SENSITIVE ("/Select/All", lp);
{ SET_SENSITIVE ("/Select/None", lp && sel);
SET_SENSITIVE ("Image/Mode/RGB", (base_type != GIMP_RGB)); SET_SENSITIVE ("/Select/Float", lp && sel);
SET_SENSITIVE ("Image/Mode/Grayscale", (base_type != GIMP_GRAY)); SET_SENSITIVE ("/Select/Feather...", lp && sel);
SET_SENSITIVE ("Image/Mode/Indexed...", (base_type != GIMP_INDEXED)); SET_SENSITIVE ("/Select/Sharpen", lp && sel);
} SET_SENSITIVE ("/Select/Shrink...", lp && sel);
SET_SENSITIVE ("/Select/Grow...", lp && sel);
SET_SENSITIVE ("/Select/Border...", lp && sel);
SET_SENSITIVE ("/Select/Save to Channel", lp && sel && !fs);
SET_SENSITIVE ("Image/Crop Image", gdisp && sel); /* View */
SET_SENSITIVE ("Image/Merge Visible Layers...", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("Image/Flatten Image", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("Layer/Stack", gdisp); SET_SENSITIVE ("/View/Zoom In", gdisp);
if (gdisp) SET_SENSITIVE ("/View/Zoom Out", gdisp);
{ SET_SENSITIVE ("/View/Zoom to Fit Window", gdisp);
SET_SENSITIVE ("Layer/Stack/Previous Layer",
!fs && !aux && lp && lind > 0);
SET_SENSITIVE ("Layer/Stack/Next Layer",
!fs && !aux && lp && lind < (lnum - 1));
SET_SENSITIVE ("Layer/Stack/Raise Layer",
!fs && !aux && lp && alpha && lind > 0);
SET_SENSITIVE ("Layer/Stack/Lower Layer",
!fs && !aux && lp && alpha && lind < (lnum - 1));
SET_SENSITIVE ("Layer/Stack/Layer to Top",
!fs && !aux && lp && alpha && lind > 0);
SET_SENSITIVE ("Layer/Stack/Layer to Bottom",
!fs && !aux && lp && alpha && lind < (lnum - 1));
}
SET_SENSITIVE ("Layer/New Layer...", gdisp); SET_SENSITIVE ("/View/Zoom/16:1", gdisp);
SET_SENSITIVE ("Layer/Duplicate Layer", gdisp && !fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/8:1", gdisp);
SET_SENSITIVE ("Layer/Anchor Layer", gdisp && fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/4:1", gdisp);
SET_SENSITIVE ("Layer/Merge Down", gdisp && !fs && !aux && lp); SET_SENSITIVE ("/View/Zoom/2:1", gdisp);
SET_SENSITIVE ("Layer/Delete Layer", gdisp && !aux && lp); SET_SENSITIVE ("/View/Zoom/1:1", gdisp);
SET_SENSITIVE ("/View/Zoom/1:2", gdisp);
SET_SENSITIVE ("/View/Zoom/1:4", gdisp);
SET_SENSITIVE ("/View/Zoom/1:8", gdisp);
SET_SENSITIVE ("/View/Zoom/1:16", gdisp);
SET_SENSITIVE ("Layer/Layer Boundary Size...", gdisp && !aux && lp); SET_SENSITIVE ("/View/Dot for Dot", gdisp);
SET_SENSITIVE ("Layer/Layer to Imagesize", gdisp && !aux && lp); SET_ACTIVE ("/View/Dot for Dot", gdisp && gdisp->dot_for_dot);
SET_SENSITIVE ("Layer/Scale Layer...", gdisp && !aux && lp);
SET_SENSITIVE ("Layer/Transform/Offset...", lp); SET_SENSITIVE ("/View/Info Window...", gdisp);
SET_SENSITIVE ("/View/Navigation Window...", gdisp);
SET_SENSITIVE ("/View/Display Filters...", gdisp);
SET_SENSITIVE ("Layer/Colors", gdisp); SET_SENSITIVE ("/View/Toggle Selection", gdisp);
SET_SENSITIVE ("Layer/Colors/Auto", gdisp); SET_ACTIVE ("/View/Toggle Selection", gdisp && ! shell->select->hidden);
SET_SENSITIVE ("/View/Toggle Layer Boundary", gdisp);
SET_ACTIVE ("/View/Toggle Layer Boundary", gdisp && ! shell->select->layer_hidden);
if (gdisp) SET_SENSITIVE ("/View/Toggle Guides", gdisp);
{ SET_ACTIVE ("/View/Toggle Guides", gdisp && gdisp->draw_guides);
SET_SENSITIVE ("Layer/Colors", lp); SET_SENSITIVE ("/View/Snap to Guides", gdisp);
SET_SENSITIVE ("Layer/Colors/Color Balance...", (base_type == GIMP_RGB)); SET_ACTIVE ("/View/Snap to Guides", gdisp && gdisp->snap_to_guides);
SET_SENSITIVE ("Layer/Colors/Hue-Saturation...", (base_type == GIMP_RGB));
SET_SENSITIVE ("Layer/Colors/Brightness-Contrast...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Threshold...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Levels...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Curves...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Desaturate", (base_type == GIMP_RGB));
SET_SENSITIVE ("Layer/Colors/Posterize...", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Invert", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Auto/Equalize", (base_type != GIMP_INDEXED));
SET_SENSITIVE ("Layer/Colors/Histogram...", lp); SET_SENSITIVE ("/View/Toggle Rulers", gdisp);
} SET_ACTIVE ("/View/Toggle Rulers",
gdisp && GTK_WIDGET_VISIBLE (shell->origin) ? 1 : 0);
SET_SENSITIVE ("Layer/Mask/Add Layer Mask...", SET_SENSITIVE ("/View/Toggle Statusbar", gdisp);
gdisp && !aux && !lm && lp && alpha && (base_type != GIMP_INDEXED)); SET_ACTIVE ("/View/Toggle Statusbar",
SET_SENSITIVE ("Layer/Mask/Apply Layer Mask", gdisp && GTK_WIDGET_VISIBLE (shell->statusbar) ? 1 : 0);
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Mask/Delete Layer Mask",
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Mask/Mask to Selection",
gdisp && !aux && lm && lp);
SET_SENSITIVE ("Layer/Alpha/Alpha to Selection", SET_SENSITIVE ("/View/New View", gdisp);
gdisp && !aux && lp && alpha); SET_SENSITIVE ("/View/Shrink Wrap", gdisp);
SET_SENSITIVE ("Layer/Alpha/Add Alpha Channel",
gdisp && !fs && !aux && lp && !lm && !alpha);
SET_SENSITIVE ("Filters", gdisp && lp); /* Image */
SET_SENSITIVE ("Script-Fu", gdisp && lp); SET_SENSITIVE ("/Image/Mode/RGB", gdisp && ! is_rgb);
SET_SENSITIVE ("/Image/Mode/Grayscale", gdisp && ! is_gray);
SET_SENSITIVE ("/Image/Mode/Indexed...", gdisp && ! is_indexed);
SET_SENSITIVE ("/Image/Canvas Size...", gdisp);
SET_SENSITIVE ("/Image/Scale Image...", gdisp);
SET_SENSITIVE ("/Image/Crop Image", gdisp && sel);
SET_SENSITIVE ("/Image/Duplicate", gdisp);
SET_SENSITIVE ("/Image/Merge Visible Layers...", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("/Image/Flatten Image", gdisp && !fs && !aux && lp);
SET_SENSITIVE ("/Image/Undo History...", gdisp);
/* Layer */
SET_SENSITIVE ("/Layer/Stack/Previous Layer",
lp && !fs && !aux && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Next Layer",
lp && !fs && !aux && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/Stack/Raise Layer",
lp && !fs && !aux && alpha && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Lower Layer",
lp && !fs && !aux && alpha && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/Stack/Layer to Top",
lp && !fs && !aux && alpha && lind > 0);
SET_SENSITIVE ("/Layer/Stack/Layer to Bottom",
lp && !fs && !aux && alpha && lind < (lnum - 1));
SET_SENSITIVE ("/Layer/New Layer...", gdisp);
SET_SENSITIVE ("/Layer/Duplicate Layer", lp && !fs && !aux);
SET_SENSITIVE ("/Layer/Anchor Layer", lp && fs && !aux);
SET_SENSITIVE ("/Layer/Merge Down", lp && !fs && !aux);
SET_SENSITIVE ("/Layer/Delete Layer", lp && !aux);
SET_SENSITIVE ("/Layer/Layer Boundary Size...", lp && !aux);
SET_SENSITIVE ("/Layer/Layer to Imagesize", lp && !aux);
SET_SENSITIVE ("/Layer/Scale Layer...", lp && !aux);
SET_SENSITIVE ("/Layer/Transform/Offset...", lp);
SET_SENSITIVE ("/Layer/Colors/Color Balance...", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Hue-Saturation...", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Brightness-Contrast...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Threshold...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Levels...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Curves...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Desaturate", lp && is_rgb);
SET_SENSITIVE ("/Layer/Colors/Posterize...", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Invert", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Auto/Equalize", lp && ! is_indexed);
SET_SENSITIVE ("/Layer/Colors/Histogram...", lp);
SET_SENSITIVE ("/Layer/Mask/Add Layer Mask...", lp && !aux && !lm && alpha && ! is_indexed);
SET_SENSITIVE ("/Layer/Mask/Apply Layer Mask", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Mask/Delete Layer Mask", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Mask/Mask to Selection", lp && !aux && lm);
SET_SENSITIVE ("/Layer/Alpha/Alpha to Selection", lp && !aux && alpha);
SET_SENSITIVE ("/Layer/Alpha/Add Alpha Channel", lp && !aux && !fs && !lm && !alpha);
#undef SET_ACTIVE #undef SET_ACTIVE
#undef SET_LABEL #undef SET_LABEL

View File

@ -128,7 +128,8 @@ void gimp_display_shell_untransform_coords (GimpDisplayShell *shell,
GimpCoords *display_coords, GimpCoords *display_coords,
GimpCoords *image_coords); GimpCoords *image_coords);
void gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell); void gimp_display_shell_set_menu_sensitivity (GimpDisplayShell *shell,
Gimp *gimp);
GimpGuide * gimp_display_shell_find_guide (GimpDisplayShell *shell, GimpGuide * gimp_display_shell_find_guide (GimpDisplayShell *shell,
gdouble x, gdouble x,

View File

@ -85,7 +85,7 @@ static void gui_really_quit_callback (GtkWidget *button,
static void gui_display_changed (GimpContext *context, static void gui_display_changed (GimpContext *context,
GimpDisplay *display, GimpDisplay *display,
gpointer data); Gimp *gimp);
static void gui_image_disconnect (GimpImage *gimage, static void gui_image_disconnect (GimpImage *gimage,
gpointer data); gpointer data);
@ -343,10 +343,14 @@ gui_get_screen_resolution (gdouble *xres,
void void
gui_really_quit_dialog (GCallback quit_func) gui_really_quit_dialog (GCallback quit_func)
{ {
GtkWidget *dialog; GtkItemFactory *item_factory;
GtkWidget *dialog;
gimp_menu_item_set_sensitive ("<Toolbox>/File/Quit", FALSE); item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Toolbox>"));
gimp_menu_item_set_sensitive ("<Image>/File/Quit", FALSE); gimp_item_factory_set_sensitive (item_factory, "/File/Quit", FALSE);
item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Image>"));
gimp_item_factory_set_sensitive (item_factory, "/File/Quit", FALSE);
dialog = gimp_query_boolean_box (_("Quit The GIMP?"), dialog = gimp_query_boolean_box (_("Quit The GIMP?"),
gimp_standard_help_func, gimp_standard_help_func,
@ -524,8 +528,13 @@ gui_really_quit_callback (GtkWidget *button,
} }
else else
{ {
gimp_menu_item_set_sensitive ("<Toolbox>/File/Quit", TRUE); GtkItemFactory *item_factory;
gimp_menu_item_set_sensitive ("<Image>/File/Quit", TRUE);
item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Toolbox>"));
gimp_item_factory_set_sensitive (item_factory, "/File/Quit", TRUE);
item_factory = GTK_ITEM_FACTORY (gimp_item_factory_from_path ("<Image>"));
gimp_item_factory_set_sensitive (item_factory, "/File/Quit", TRUE);
} }
} }
@ -535,16 +544,14 @@ gui_really_quit_callback (GtkWidget *button,
static void static void
gui_display_changed (GimpContext *context, gui_display_changed (GimpContext *context,
GimpDisplay *display, GimpDisplay *display,
gpointer data) Gimp *gimp)
{ {
Gimp *gimp; GimpDisplayShell *shell = NULL;
gimp = (Gimp *) data;
if (display) if (display)
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (display->shell)); shell = GIMP_DISPLAY_SHELL (display->shell);
else
gimp_display_shell_set_menu_sensitivity (NULL); gimp_display_shell_set_menu_sensitivity (shell, gimp);
} }
static void static void

View File

@ -536,14 +536,14 @@ static GimpItemFactoryEntry image_entries[] =
"<StockItem>", GTK_STOCK_HELP }, "<StockItem>", GTK_STOCK_HELP },
NULL, NULL,
"view/dialogs/info_window.html", NULL }, "view/dialogs/info_window.html", NULL },
{ { N_("/View/Nav. Window..."), "<control><shift>N", { { N_("/View/Navigation Window..."), "<control><shift>N",
view_nav_window_cmd_callback, 0, view_navigation_window_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_MOVE }, "<StockItem>", GIMP_STOCK_TOOL_MOVE },
NULL, NULL,
"view/dialogs/navigation_window.html", NULL }, "view/dialogs/navigation_window.html", NULL },
{ { N_("/View/Display Filters..."), NULL, { { N_("/View/Display Filters..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 }, view_display_filters_cmd_callback, 0 },
"gimp:display-filters-dialog", NULL,
"dialogs/display_filters/display_filters.html", NULL }, "dialogs/display_filters/display_filters.html", NULL },
SEPARATOR ("/View/---"), SEPARATOR ("/View/---"),

View File

@ -34,6 +34,9 @@
#include "display/gimpdisplayshell-scale.h" #include "display/gimpdisplayshell-scale.h"
#include "display/gimpdisplayshell-selection.h" #include "display/gimpdisplayshell-selection.h"
#include "widgets/gimpdialogfactory.h"
#include "dialogs.h"
#include "info-dialog.h" #include "info-dialog.h"
#include "info-window.h" #include "info-window.h"
#include "view-commands.h" #include "view-commands.h"
@ -124,8 +127,8 @@ view_info_window_cmd_callback (GtkWidget *widget,
} }
void void
view_nav_window_cmd_callback (GtkWidget *widget, view_navigation_window_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
GimpDisplay *gdisp; GimpDisplay *gdisp;
GimpDisplayShell *shell; GimpDisplayShell *shell;
@ -146,6 +149,20 @@ view_nav_window_cmd_callback (GtkWidget *widget,
} }
} }
void
view_display_filters_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpDisplay *gdisp;
GimpDisplayShell *shell;
return_if_no_display (gdisp, data);
shell = GIMP_DISPLAY_SHELL (gdisp->shell);
gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp:display-filters-dialog", -1);
}
void void
view_toggle_selection_cmd_callback (GtkWidget *widget, view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)

View File

@ -33,7 +33,9 @@ void view_dot_for_dot_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_info_window_cmd_callback (GtkWidget *widget, void view_info_window_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_nav_window_cmd_callback (GtkWidget *widget, void view_navigation_window_cmd_callback (GtkWidget *widget,
gpointer data);
void view_display_filters_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void view_toggle_selection_cmd_callback (GtkWidget *widget, void view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);

View File

@ -94,7 +94,8 @@ image_map_create (GimpDisplay *gdisp,
* to avert any unintented undo interaction through the UI * to avert any unintented undo interaction through the UI
*/ */
gimp_image_undo_freeze (image_map->gdisp->gimage); gimp_image_undo_freeze (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
return image_map; return image_map;
} }
@ -245,7 +246,8 @@ image_map_commit (ImageMap *image_map)
x1, y1, x2, y2, image_map->undo_tiles, FALSE); x1, y1, x2, y2, image_map->undo_tiles, FALSE);
} }
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
} }
@ -297,7 +299,8 @@ image_map_clear (ImageMap *image_map)
g_message ("image depth change, unable to restore original image"); g_message ("image depth change, unable to restore original image");
tile_manager_destroy (image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
gimp_image_undo_thaw (image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
return; return;
} }
@ -322,7 +325,8 @@ image_map_abort (ImageMap *image_map)
image_map_clear (image_map); image_map_clear (image_map);
gimp_image_undo_thaw (image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell)); gimp_display_shell_set_menu_sensitivity (GIMP_DISPLAY_SHELL (image_map->gdisp->shell),
image_map->gdisp->gimage->gimp);
g_free (image_map); g_free (image_map);
} }

View File

@ -536,14 +536,14 @@ static GimpItemFactoryEntry image_entries[] =
"<StockItem>", GTK_STOCK_HELP }, "<StockItem>", GTK_STOCK_HELP },
NULL, NULL,
"view/dialogs/info_window.html", NULL }, "view/dialogs/info_window.html", NULL },
{ { N_("/View/Nav. Window..."), "<control><shift>N", { { N_("/View/Navigation Window..."), "<control><shift>N",
view_nav_window_cmd_callback, 0, view_navigation_window_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_MOVE }, "<StockItem>", GIMP_STOCK_TOOL_MOVE },
NULL, NULL,
"view/dialogs/navigation_window.html", NULL }, "view/dialogs/navigation_window.html", NULL },
{ { N_("/View/Display Filters..."), NULL, { { N_("/View/Display Filters..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 }, view_display_filters_cmd_callback, 0 },
"gimp:display-filters-dialog", NULL,
"dialogs/display_filters/display_filters.html", NULL }, "dialogs/display_filters/display_filters.html", NULL },
SEPARATOR ("/View/---"), SEPARATOR ("/View/---"),