removed a gdk_pointer_ungrab(), it was only there because of buggy gtk+

2001-08-07  Michael Natterer  <mitch@gimp.org>

	* app/disp_callbacks.c: removed a gdk_pointer_ungrab(), it was
	only there because of buggy gtk+ 1.2.x. Cosmetic changes.

	* app/undo.c: use G_N_ELEMENTS() instead of
	sizeof(array)/sizeof(element).

	* app/gui/menus.c: more stock icons, moved the item_factory
	creation into the menus_get_foo_factory() functions, use
	G_N_ELEMENTS(). This file badly needs to be spit up...

	* app/core/gimpviewable.[ch]
	* app/widgets/gimpcontainermenu.[ch]
	* app/widgets/gimpcontainerview.[ch]
	* app/widgets/gimplistitem.[ch]
	* app/widgets/gimpmenuitem.[ch]
	* app/widgets/gimppreview.[ch]: replaced tons of signal emissions
	by virtual functions which are *much* faster. Moreover, all of
	them are private implementation bits of the specific class
	hierarchy and are useless or even dangerous to be exposed as
	signals.

	* app/widgets/gimpdrawablelistitem.c: removed the drag_motion()
	implementation as it's already done in the parent class.

	* app/widgets/gimplistitem.[ch]
	* app/widgets/gimplayerlistitem.c: redraw the widget when the
	drop_type has changed. Fixes drop_indicator drawing.
This commit is contained in:
Michael Natterer 2001-08-07 12:42:23 +00:00 committed by Michael Natterer
parent 1c9069c4ca
commit 7de0a2cbdd
29 changed files with 1312 additions and 1450 deletions

View File

@ -1,3 +1,33 @@
2001-08-07 Michael Natterer <mitch@gimp.org>
* app/disp_callbacks.c: removed a gdk_pointer_ungrab(), it was
only there because of buggy gtk+ 1.2.x. Cosmetic changes.
* app/undo.c: use G_N_ELEMENTS() instead of
sizeof(array)/sizeof(element).
* app/gui/menus.c: more stock icons, moved the item_factory
creation into the menus_get_foo_factory() functions, use
G_N_ELEMENTS(). This file badly needs to be spit up...
* app/core/gimpviewable.[ch]
* app/widgets/gimpcontainermenu.[ch]
* app/widgets/gimpcontainerview.[ch]
* app/widgets/gimplistitem.[ch]
* app/widgets/gimpmenuitem.[ch]
* app/widgets/gimppreview.[ch]: replaced tons of signal emissions
by virtual functions which are *much* faster. Moreover, all of
them are private implementation bits of the specific class
hierarchy and are useless or even dangerous to be exposed as
signals.
* app/widgets/gimpdrawablelistitem.c: removed the drag_motion()
implementation as it's already done in the parent class.
* app/widgets/gimplistitem.[ch]
* app/widgets/gimplayerlistitem.c: redraw the widget when the
drop_type has changed. Fixes drop_indicator drawing.
2001-08-07 Michael Natterer <mitch@gimp.org>
* libgimpwidgets/gimpbutton.[ch]: cleanup.

View File

@ -2959,15 +2959,13 @@ undo_name[] =
{ IMAGE_RESIZE_UNDO, N_("image resize") },
{ MISC_UNDO, N_("misc") }
};
#define NUM_NAMES (sizeof (undo_name) / sizeof (struct undo_name_t))
static const gchar *
undo_type_to_name (UndoType type)
{
gint i;
for (i=0; i < NUM_NAMES; i++)
for (i = 0; i < G_N_ELEMENTS (undo_name); i++)
if (undo_name[i].type == type)
return gettext (undo_name[i].name);

View File

@ -35,8 +35,6 @@ enum
{
INVALIDATE_PREVIEW,
SIZE_CHANGED,
GET_PREVIEW,
GET_NEW_PREVIEW,
LAST_SIGNAL
};
@ -59,19 +57,22 @@ gimp_viewable_get_type (void)
if (! viewable_type)
{
GtkTypeInfo viewable_info =
static const GTypeInfo viewable_info =
{
"GimpViewable",
sizeof (GimpViewable),
sizeof (GimpViewableClass),
(GtkClassInitFunc) gimp_viewable_class_init,
(GtkObjectInitFunc) gimp_viewable_init,
/* reserved_1 */ NULL,
/* reserved_2 */ NULL,
(GtkClassInitFunc) NULL,
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gimp_viewable_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GimpViewable),
0, /* n_preallocs */
(GInstanceInitFunc) gimp_viewable_init,
};
viewable_type = gtk_type_unique (GIMP_TYPE_OBJECT, &viewable_info);
viewable_type = g_type_register_static (GIMP_TYPE_OBJECT,
"GimpViewable",
&viewable_info, 0);
}
return viewable_type;
@ -80,10 +81,6 @@ gimp_viewable_get_type (void)
static void
gimp_viewable_class_init (GimpViewableClass *klass)
{
GtkObjectClass *object_class;
object_class = (GtkObjectClass *) klass;
parent_class = g_type_class_peek_parent (klass);
viewable_signals[INVALIDATE_PREVIEW] =
@ -104,30 +101,9 @@ gimp_viewable_class_init (GimpViewableClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
viewable_signals[GET_PREVIEW] =
g_signal_new ("get_preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpViewableClass, get_preview),
NULL, NULL,
gimp_cclosure_marshal_POINTER__INT_INT,
G_TYPE_POINTER, 2,
G_TYPE_INT,
G_TYPE_INT);
viewable_signals[GET_NEW_PREVIEW] =
g_signal_new ("get_new_preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpViewableClass, get_new_preview),
NULL, NULL,
gimp_cclosure_marshal_POINTER__INT_INT,
G_TYPE_POINTER, 2,
G_TYPE_INT,
G_TYPE_INT);
klass->invalidate_preview = gimp_viewable_real_invalidate_preview;
klass->size_changed = NULL;
klass->get_preview = NULL;
klass->get_new_preview = NULL;
}
@ -166,14 +142,17 @@ gimp_viewable_get_preview (GimpViewable *viewable,
gint width,
gint height)
{
TempBuf *temp_buf = NULL;
GimpViewableClass *viewable_class;
TempBuf *temp_buf = NULL;
g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), NULL);
g_return_val_if_fail (width > 0, NULL);
g_return_val_if_fail (height > 0, NULL);
g_signal_emit (G_OBJECT (viewable), viewable_signals[GET_PREVIEW], 0,
width, height, &temp_buf);
viewable_class = GIMP_VIEWABLE_GET_CLASS (viewable);
if (viewable_class->get_preview)
temp_buf = viewable_class->get_preview (viewable, width, height);
if (temp_buf)
return temp_buf;
@ -188,8 +167,8 @@ gimp_viewable_get_preview (GimpViewable *viewable,
temp_buf = NULL;
g_signal_emit (G_OBJECT (viewable), viewable_signals[GET_NEW_PREVIEW], 0,
width, height, &temp_buf);
if (viewable_class->get_new_preview)
temp_buf = viewable_class->get_new_preview (viewable, width, height);
g_object_set_data_full (G_OBJECT (viewable), "static-viewable-preview",
temp_buf,
@ -203,20 +182,23 @@ gimp_viewable_get_new_preview (GimpViewable *viewable,
gint width,
gint height)
{
TempBuf *temp_buf = NULL;
GimpViewableClass *viewable_class;
TempBuf *temp_buf = NULL;
g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), NULL);
g_return_val_if_fail (width > 0, NULL);
g_return_val_if_fail (height > 0, NULL);
g_signal_emit (G_OBJECT (viewable), viewable_signals[GET_NEW_PREVIEW], 0,
width, height, &temp_buf);
viewable_class = GIMP_VIEWABLE_GET_CLASS (viewable);
if (viewable_class->get_new_preview)
temp_buf = viewable_class->get_new_preview (viewable, width, height);
if (temp_buf)
return temp_buf;
g_signal_emit (G_OBJECT (viewable), viewable_signals[GET_PREVIEW], 0,
width, height, &temp_buf);
if (viewable_class->get_preview)
temp_buf = viewable_class->get_preview (viewable, width, height);
if (temp_buf)
return temp_buf_copy (temp_buf, NULL);

View File

@ -31,6 +31,7 @@
#define GIMP_VIEWABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VIEWABLE, GimpViewableClass))
#define GIMP_IS_VIEWABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_VIEWABLE))
#define GIMP_IS_VIEWABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_VIEWABLE))
#define GIMP_VIEWABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_VIEWABLE, GimpViewableClass))
typedef struct _GimpViewableClass GimpViewableClass;
@ -44,9 +45,11 @@ struct _GimpViewableClass
{
GimpObjectClass parent_class;
/* signals */
void (* invalidate_preview) (GimpViewable *viewable);
void (* size_changed) (GimpViewable *viewable);
/* virtual functions */
TempBuf * (* get_preview) (GimpViewable *viewable,
gint width,
gint height);

View File

@ -415,7 +415,6 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
gtk_grab_remove (canvas);
gdk_pointer_ungrab (bevent->time); /* fixes pointer grab bug */
if (active_tool && (GIMP_IS_MOVE_TOOL (active_tool) ||
! gimp_image_is_empty (gdisp->gimage)))
@ -643,12 +642,12 @@ gdisplay_canvas_events (GtkWidget *canvas,
if (gdisp->gimage->gimp->busy)
return TRUE;
/* Cursor update support */
/* no_cursor_updating is TRUE (=1) when */
/* <Toolbox>/File/Preferences.../Interface/... */
/* Image Windows/Disable Cursor Updating is TOGGLED ON */
if (gimprc.no_cursor_updating == 0)
/* Cursor update support
* no_cursor_updating is TRUE (=1) when
* <Toolbox>/File/Preferences.../Interface/...
* Image Windows/Disable Cursor Updating is TOGGLED ON
*/
if (! gimprc.no_cursor_updating)
{
active_tool = tool_manager_get_active (gdisp->gimage->gimp);
@ -798,8 +797,8 @@ gdisplay_origin_button_press (GtkWidget *widget,
}
/* Return TRUE to stop signal emission so the button doesn't grab the
* pointer away from us. */
* pointer away from us.
*/
return TRUE;
}
@ -912,11 +911,10 @@ gdisplay_drop_drawable (GtkWidget *widget,
}
static void
gdisplay_bucket_fill (GtkWidget *widget,
gdisplay_bucket_fill (GDisplay *gdisp,
BucketFillMode fill_mode,
guchar orig_color[],
TempBuf *orig_pat_buf,
gpointer data)
TempBuf *orig_pat_buf)
{
GimpImage *gimage;
GimpDrawable *drawable;
@ -932,7 +930,7 @@ gdisplay_bucket_fill (GtkWidget *widget,
TempBuf *pat_buf = NULL;
gboolean new_buf = FALSE;
gimage = ((GDisplay *) data)->gimage;
gimage = gdisp->gimage;
if (gimage->gimp->busy)
return;
@ -1032,10 +1030,16 @@ gdisplay_drop_pattern (GtkWidget *widget,
GimpViewable *viewable,
gpointer data)
{
GDisplay *gdisp;
gdisp = (GDisplay *) data;
if (GIMP_IS_PATTERN (viewable))
{
gdisplay_bucket_fill (widget, PATTERN_BUCKET_FILL, NULL,
GIMP_PATTERN (viewable)->mask, data);
gdisplay_bucket_fill (gdisp,
PATTERN_BUCKET_FILL,
NULL,
GIMP_PATTERN (viewable)->mask);
}
}
@ -1044,7 +1048,10 @@ gdisplay_drop_color (GtkWidget *widget,
const GimpRGB *drop_color,
gpointer data)
{
guchar color[4];
GDisplay *gdisp;
guchar color[4];
gdisp = (GDisplay *) data;
gimp_rgba_get_uchar (drop_color,
&color[0],
@ -1052,7 +1059,10 @@ gdisplay_drop_color (GtkWidget *widget,
&color[2],
&color[3]);
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
gdisplay_bucket_fill (gdisp,
FG_BUCKET_FILL,
color,
NULL);
}
void

View File

@ -415,7 +415,6 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
gtk_grab_remove (canvas);
gdk_pointer_ungrab (bevent->time); /* fixes pointer grab bug */
if (active_tool && (GIMP_IS_MOVE_TOOL (active_tool) ||
! gimp_image_is_empty (gdisp->gimage)))
@ -643,12 +642,12 @@ gdisplay_canvas_events (GtkWidget *canvas,
if (gdisp->gimage->gimp->busy)
return TRUE;
/* Cursor update support */
/* no_cursor_updating is TRUE (=1) when */
/* <Toolbox>/File/Preferences.../Interface/... */
/* Image Windows/Disable Cursor Updating is TOGGLED ON */
if (gimprc.no_cursor_updating == 0)
/* Cursor update support
* no_cursor_updating is TRUE (=1) when
* <Toolbox>/File/Preferences.../Interface/...
* Image Windows/Disable Cursor Updating is TOGGLED ON
*/
if (! gimprc.no_cursor_updating)
{
active_tool = tool_manager_get_active (gdisp->gimage->gimp);
@ -798,8 +797,8 @@ gdisplay_origin_button_press (GtkWidget *widget,
}
/* Return TRUE to stop signal emission so the button doesn't grab the
* pointer away from us. */
* pointer away from us.
*/
return TRUE;
}
@ -912,11 +911,10 @@ gdisplay_drop_drawable (GtkWidget *widget,
}
static void
gdisplay_bucket_fill (GtkWidget *widget,
gdisplay_bucket_fill (GDisplay *gdisp,
BucketFillMode fill_mode,
guchar orig_color[],
TempBuf *orig_pat_buf,
gpointer data)
TempBuf *orig_pat_buf)
{
GimpImage *gimage;
GimpDrawable *drawable;
@ -932,7 +930,7 @@ gdisplay_bucket_fill (GtkWidget *widget,
TempBuf *pat_buf = NULL;
gboolean new_buf = FALSE;
gimage = ((GDisplay *) data)->gimage;
gimage = gdisp->gimage;
if (gimage->gimp->busy)
return;
@ -1032,10 +1030,16 @@ gdisplay_drop_pattern (GtkWidget *widget,
GimpViewable *viewable,
gpointer data)
{
GDisplay *gdisp;
gdisp = (GDisplay *) data;
if (GIMP_IS_PATTERN (viewable))
{
gdisplay_bucket_fill (widget, PATTERN_BUCKET_FILL, NULL,
GIMP_PATTERN (viewable)->mask, data);
gdisplay_bucket_fill (gdisp,
PATTERN_BUCKET_FILL,
NULL,
GIMP_PATTERN (viewable)->mask);
}
}
@ -1044,7 +1048,10 @@ gdisplay_drop_color (GtkWidget *widget,
const GimpRGB *drop_color,
gpointer data)
{
guchar color[4];
GDisplay *gdisp;
guchar color[4];
gdisp = (GDisplay *) data;
gimp_rgba_get_uchar (drop_color,
&color[0],
@ -1052,7 +1059,10 @@ gdisplay_drop_color (GtkWidget *widget,
&color[2],
&color[3]);
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
gdisplay_bucket_fill (gdisp,
FG_BUCKET_FILL,
color,
NULL);
}
void

View File

@ -415,7 +415,6 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
gtk_grab_remove (canvas);
gdk_pointer_ungrab (bevent->time); /* fixes pointer grab bug */
if (active_tool && (GIMP_IS_MOVE_TOOL (active_tool) ||
! gimp_image_is_empty (gdisp->gimage)))
@ -643,12 +642,12 @@ gdisplay_canvas_events (GtkWidget *canvas,
if (gdisp->gimage->gimp->busy)
return TRUE;
/* Cursor update support */
/* no_cursor_updating is TRUE (=1) when */
/* <Toolbox>/File/Preferences.../Interface/... */
/* Image Windows/Disable Cursor Updating is TOGGLED ON */
if (gimprc.no_cursor_updating == 0)
/* Cursor update support
* no_cursor_updating is TRUE (=1) when
* <Toolbox>/File/Preferences.../Interface/...
* Image Windows/Disable Cursor Updating is TOGGLED ON
*/
if (! gimprc.no_cursor_updating)
{
active_tool = tool_manager_get_active (gdisp->gimage->gimp);
@ -798,8 +797,8 @@ gdisplay_origin_button_press (GtkWidget *widget,
}
/* Return TRUE to stop signal emission so the button doesn't grab the
* pointer away from us. */
* pointer away from us.
*/
return TRUE;
}
@ -912,11 +911,10 @@ gdisplay_drop_drawable (GtkWidget *widget,
}
static void
gdisplay_bucket_fill (GtkWidget *widget,
gdisplay_bucket_fill (GDisplay *gdisp,
BucketFillMode fill_mode,
guchar orig_color[],
TempBuf *orig_pat_buf,
gpointer data)
TempBuf *orig_pat_buf)
{
GimpImage *gimage;
GimpDrawable *drawable;
@ -932,7 +930,7 @@ gdisplay_bucket_fill (GtkWidget *widget,
TempBuf *pat_buf = NULL;
gboolean new_buf = FALSE;
gimage = ((GDisplay *) data)->gimage;
gimage = gdisp->gimage;
if (gimage->gimp->busy)
return;
@ -1032,10 +1030,16 @@ gdisplay_drop_pattern (GtkWidget *widget,
GimpViewable *viewable,
gpointer data)
{
GDisplay *gdisp;
gdisp = (GDisplay *) data;
if (GIMP_IS_PATTERN (viewable))
{
gdisplay_bucket_fill (widget, PATTERN_BUCKET_FILL, NULL,
GIMP_PATTERN (viewable)->mask, data);
gdisplay_bucket_fill (gdisp,
PATTERN_BUCKET_FILL,
NULL,
GIMP_PATTERN (viewable)->mask);
}
}
@ -1044,7 +1048,10 @@ gdisplay_drop_color (GtkWidget *widget,
const GimpRGB *drop_color,
gpointer data)
{
guchar color[4];
GDisplay *gdisp;
guchar color[4];
gdisp = (GDisplay *) data;
gimp_rgba_get_uchar (drop_color,
&color[0],
@ -1052,7 +1059,10 @@ gdisplay_drop_color (GtkWidget *widget,
&color[2],
&color[3]);
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
gdisplay_bucket_fill (gdisp,
FG_BUCKET_FILL,
color,
NULL);
}
void

View File

@ -83,6 +83,14 @@ static void menus_create_items (GtkItemFactory *item_factory,
guint callback_type,
gboolean create_tearoff,
gboolean static_entries);
static GtkItemFactory * menus_item_factory_new
(GtkType container_type,
const gchar *path,
const gchar *factory_path,
guint n_entries,
GimpItemFactoryEntry *entries,
gpointer callback_data,
gboolean create_tearoff);
static void menus_create_branches (GtkItemFactory *item_factory,
GimpItemFactoryEntry *entry);
static void menus_init (void);
@ -306,9 +314,6 @@ static GimpItemFactoryEntry toolbox_entries[] =
NULL, NULL }
#endif
};
static guint n_toolbox_entries = (sizeof (toolbox_entries) /
sizeof (toolbox_entries[0]));
static GtkItemFactory *toolbox_factory = NULL;
/***** <Image> *****/
@ -434,11 +439,13 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"edit/clear.html", NULL },
{ { N_("/Edit/Fill with FG Color"), "<control>comma",
edit_fill_cmd_callback, (guint) FOREGROUND_FILL },
edit_fill_cmd_callback, (guint) FOREGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Fill with BG Color"), "<control>period",
edit_fill_cmd_callback, (guint) BACKGROUND_FILL },
edit_fill_cmd_callback, (guint) BACKGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Stroke"), NULL,
@ -513,16 +520,24 @@ static GimpItemFactoryEntry image_entries[] =
/* <Image>/View/Zoom */
{ { N_("/View/Zoom/16:1"), NULL, view_zoom_cmd_callback, 1601 },
{ { N_("/View/Zoom/16:1"), NULL,
view_zoom_cmd_callback, 1601,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/8:1"), NULL, view_zoom_cmd_callback, 801 },
{ { N_("/View/Zoom/8:1"), NULL,
view_zoom_cmd_callback, 801,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/4:1"), NULL, view_zoom_cmd_callback, 401 },
{ { N_("/View/Zoom/4:1"), NULL,
view_zoom_cmd_callback, 401,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/2:1"), NULL, view_zoom_cmd_callback, 201 },
{ { N_("/View/Zoom/2:1"), NULL,
view_zoom_cmd_callback, 201,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:1"), "1",
@ -530,16 +545,24 @@ static GimpItemFactoryEntry image_entries[] =
"<StockItem>", GTK_STOCK_ZOOM_100 },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:2"), NULL, view_zoom_cmd_callback, 102 },
{ { N_("/View/Zoom/1:2"), NULL,
view_zoom_cmd_callback, 102,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:4"), NULL, view_zoom_cmd_callback, 104 },
{ { N_("/View/Zoom/1:4"), NULL,
view_zoom_cmd_callback, 104,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:8"), NULL, view_zoom_cmd_callback, 108 },
{ { N_("/View/Zoom/1:8"), NULL,
view_zoom_cmd_callback, 108,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:16"), NULL, view_zoom_cmd_callback, 116 },
{ { N_("/View/Zoom/1:16"), NULL,
view_zoom_cmd_callback, 116,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
@ -551,11 +574,13 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/Info Window..."), "<control><shift>I",
view_info_window_cmd_callback, 0 },
view_info_window_cmd_callback, 0,
"<StockItem>", GTK_STOCK_HELP },
NULL,
"view/dialogs/info_window.html", NULL },
{ { N_("/View/Nav. Window..."), "<control><shift>N",
view_nav_window_cmd_callback, 0 },
view_nav_window_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_MOVE },
NULL,
"view/dialogs/navigation_window.html", NULL },
@ -585,7 +610,8 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/New View"), NULL,
view_new_view_cmd_callback, 0 },
view_new_view_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_NEW },
NULL,
"view/new_view.html", NULL },
{ { N_("/View/Shrink Wrap"), "<control>E",
@ -660,7 +686,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/set_canvas_size.html", NULL },
{ { N_("/Image/Scale Image..."), NULL,
image_scale_cmd_callback, 0 },
image_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
@ -897,9 +924,6 @@ static GimpItemFactoryEntry image_entries[] =
BRANCH (N_("/Filters/Toys"))
};
static guint n_image_entries = (sizeof (image_entries) /
sizeof (image_entries[0]));
static GtkItemFactory *image_factory = NULL;
/***** <Load> *****/
@ -913,9 +937,6 @@ static GimpItemFactoryEntry load_entries[] =
SEPARATOR ("/---")
};
static guint n_load_entries = (sizeof (load_entries) /
sizeof (load_entries[0]));
static GtkItemFactory *load_factory = NULL;
/***** <Save> *****/
@ -929,9 +950,6 @@ static GimpItemFactoryEntry save_entries[] =
SEPARATOR ("/---")
};
static guint n_save_entries = (sizeof (save_entries) /
sizeof (save_entries[0]));
static GtkItemFactory *save_factory = NULL;
/***** <Layers> *****/
@ -994,7 +1012,8 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"layer_to_image_size.html", NULL },
{ { N_("/Scale Layer..."), "<control>S",
layers_scale_cmd_callback, 0 },
layers_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"dialogs/scale_layer.html", NULL },
@ -1051,9 +1070,6 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"dialogs/edit_layer_attributes.html", NULL }
};
static guint n_layers_entries = (sizeof (layers_entries) /
sizeof (layers_entries[0]));
static GtkItemFactory *layers_factory = NULL;
/***** <Channels> *****/
@ -1120,9 +1136,6 @@ static GimpItemFactoryEntry channels_entries[] =
NULL,
"dialogs/edit_channel_attributes.html", NULL }
};
static guint n_channels_entries = (sizeof (channels_entries) /
sizeof (channels_entries[0]));
static GtkItemFactory *channels_factory = NULL;
/***** <Paths> *****/
@ -1191,9 +1204,6 @@ static GimpItemFactoryEntry paths_entries[] =
NULL,
"dialogs/edit_path_attributes.html", NULL }
};
static guint n_paths_entries = (sizeof (paths_entries) /
sizeof (paths_entries[0]));
static GtkItemFactory *paths_factory = NULL;
/***** <Dialogs> *****/
@ -1319,9 +1329,6 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL }
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /
sizeof (dialogs_entries[0]));
static GtkItemFactory *dialogs_factory = NULL;
/***** <Brushes> *****/
@ -1357,9 +1364,6 @@ static GimpItemFactoryEntry brushes_entries[] =
NULL,
NULL, NULL }
};
static guint n_brushes_entries = (sizeof (brushes_entries) /
sizeof (brushes_entries[0]));
static GtkItemFactory *brushes_factory = NULL;
/***** <Patterns> *****/
@ -1395,9 +1399,6 @@ static GimpItemFactoryEntry patterns_entries[] =
NULL,
NULL, NULL }
};
static guint n_patterns_entries = (sizeof (patterns_entries) /
sizeof (patterns_entries[0]));
static GtkItemFactory *patterns_factory = NULL;
/***** <Gradients> *****/
@ -1441,9 +1442,6 @@ static GimpItemFactoryEntry gradients_entries[] =
NULL,
NULL, NULL }
};
static guint n_gradients_entries = (sizeof (gradients_entries) /
sizeof (gradients_entries[0]));
static GtkItemFactory *gradients_factory = NULL;
/***** <Palettes> *****/
@ -1491,19 +1489,92 @@ static GimpItemFactoryEntry palettes_entries[] =
NULL,
NULL, NULL }
};
static guint n_palettes_entries = (sizeof (palettes_entries) /
sizeof (palettes_entries[0]));
static GtkItemFactory *palettes_factory = NULL;
static gboolean menus_initialized = FALSE;
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactory *image_factory = NULL;
static GtkItemFactory *load_factory = NULL;
static GtkItemFactory *save_factory = NULL;
static GtkItemFactory *layers_factory = NULL;
static GtkItemFactory *channels_factory = NULL;
static GtkItemFactory *paths_factory = NULL;
static GtkItemFactory *dialogs_factory = NULL;
static GtkItemFactory *brushes_factory = NULL;
static GtkItemFactory *patterns_factory = NULL;
static GtkItemFactory *gradients_factory = NULL;
static GtkItemFactory *palettes_factory = NULL;
GtkItemFactory *
menus_get_toolbox_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! toolbox_factory)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
G_N_ELEMENTS (toolbox_entries),
toolbox_entries,
NULL,
TRUE);
last_opened_entries = g_new (GimpItemFactoryEntry,
gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
return toolbox_factory;
}
@ -1511,8 +1582,15 @@ menus_get_toolbox_factory (void)
GtkItemFactory *
menus_get_image_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! image_factory)
{
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
G_N_ELEMENTS (image_entries),
image_entries,
NULL,
TRUE);
}
return image_factory;
}
@ -1520,8 +1598,15 @@ menus_get_image_factory (void)
GtkItemFactory *
menus_get_load_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! load_factory)
{
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
G_N_ELEMENTS (load_entries),
load_entries,
NULL,
FALSE);
}
return load_factory;
}
@ -1529,8 +1614,15 @@ menus_get_load_factory (void)
GtkItemFactory *
menus_get_save_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! save_factory)
{
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
G_N_ELEMENTS (save_entries),
save_entries,
NULL,
FALSE);
}
return save_factory;
}
@ -1538,8 +1630,15 @@ menus_get_save_factory (void)
GtkItemFactory *
menus_get_layers_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! layers_factory)
{
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
G_N_ELEMENTS (layers_entries),
layers_entries,
NULL,
FALSE);
}
return layers_factory;
}
@ -1547,8 +1646,15 @@ menus_get_layers_factory (void)
GtkItemFactory *
menus_get_channels_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! channels_factory)
{
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
G_N_ELEMENTS (channels_entries),
channels_entries,
NULL,
FALSE);
}
return channels_factory;
}
@ -1556,8 +1662,15 @@ menus_get_channels_factory (void)
GtkItemFactory *
menus_get_paths_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! paths_factory)
{
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
G_N_ELEMENTS (paths_entries),
paths_entries,
NULL,
FALSE);
}
return paths_factory;
}
@ -1565,8 +1678,15 @@ menus_get_paths_factory (void)
GtkItemFactory *
menus_get_dialogs_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! dialogs_factory)
{
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
G_N_ELEMENTS (dialogs_entries),
dialogs_entries,
NULL,
FALSE);
}
return dialogs_factory;
}
@ -1574,8 +1694,15 @@ menus_get_dialogs_factory (void)
GtkItemFactory *
menus_get_brushes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! brushes_factory)
{
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
G_N_ELEMENTS (brushes_entries),
brushes_entries,
NULL,
FALSE);
}
return brushes_factory;
}
@ -1583,8 +1710,15 @@ menus_get_brushes_factory (void)
GtkItemFactory *
menus_get_patterns_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! patterns_factory)
{
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
G_N_ELEMENTS (patterns_entries),
patterns_entries,
NULL,
FALSE);
}
return patterns_factory;
}
@ -1592,8 +1726,15 @@ menus_get_patterns_factory (void)
GtkItemFactory *
menus_get_gradients_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! gradients_factory)
{
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
G_N_ELEMENTS (gradients_entries),
gradients_entries,
NULL,
FALSE);
}
return gradients_factory;
}
@ -1601,13 +1742,19 @@ menus_get_gradients_factory (void)
GtkItemFactory *
menus_get_palettes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! palettes_factory)
{
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
G_N_ELEMENTS (palettes_entries),
palettes_entries,
NULL,
FALSE);
}
return palettes_factory;
}
void
menus_create_item_from_full_path (GimpItemFactoryEntry *entry,
gchar *domain_name,
@ -2036,32 +2183,6 @@ menus_destroy (gchar *path)
gtk_item_factories_path_delete (NULL, path);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (menus_initialized)
{
g_object_unref (G_OBJECT (toolbox_factory));
g_object_unref (G_OBJECT (image_factory));
g_object_unref (G_OBJECT (load_factory));
g_object_unref (G_OBJECT (save_factory));
g_object_unref (G_OBJECT (layers_factory));
g_object_unref (G_OBJECT (channels_factory));
g_object_unref (G_OBJECT (paths_factory));
g_object_unref (G_OBJECT (dialogs_factory));
g_object_unref (G_OBJECT (brushes_factory));
g_object_unref (G_OBJECT (patterns_factory));
g_object_unref (G_OBJECT (gradients_factory));
g_object_unref (G_OBJECT (palettes_factory));
}
}
static void
menus_last_opened_update_labels (void)
{
@ -2166,64 +2287,6 @@ menus_last_opened_add (const gchar *filename)
menus_last_opened_update_labels ();
}
static void
menus_init_mru (void)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
last_opened_entries = g_new (GimpItemFactoryEntry, gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
/* This function gets called while browsing a menu created
* by a GtkItemFactory
*/
@ -2454,92 +2517,18 @@ menus_init (void)
menus_initialized = TRUE;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
n_toolbox_entries,
toolbox_entries,
NULL,
TRUE);
menus_init_mru ();
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
n_image_entries,
image_entries,
NULL,
TRUE);
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
n_load_entries,
load_entries,
NULL,
FALSE);
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
n_save_entries,
save_entries,
NULL,
FALSE);
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
n_layers_entries,
layers_entries,
NULL,
FALSE);
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
n_channels_entries,
channels_entries,
NULL,
FALSE);
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
n_paths_entries,
paths_entries,
NULL,
FALSE);
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
n_dialogs_entries,
dialogs_entries,
NULL,
FALSE);
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
n_brushes_entries,
brushes_entries,
NULL,
FALSE);
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
n_patterns_entries,
patterns_entries,
NULL,
FALSE);
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
n_gradients_entries,
gradients_entries,
NULL,
FALSE);
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
n_palettes_entries,
palettes_entries,
NULL,
FALSE);
toolbox_factory = menus_get_toolbox_factory ();
image_factory = menus_get_image_factory ();
load_factory = menus_get_load_factory ();
save_factory = menus_get_save_factory ();
layers_factory = menus_get_layers_factory ();
channels_factory = menus_get_channels_factory ();
paths_factory = menus_get_paths_factory ();
dialogs_factory = menus_get_dialogs_factory ();
brushes_factory = menus_get_brushes_factory ();
patterns_factory = menus_get_patterns_factory ();
gradients_factory = menus_get_gradients_factory ();
palettes_factory = menus_get_palettes_factory ();
for (list = GIMP_LIST (the_gimp->tool_info_list)->list;
list;
@ -2597,6 +2586,88 @@ menus_init (void)
g_free (filename);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (toolbox_factory)
{
g_object_unref (G_OBJECT (toolbox_factory));
toolbox_factory = NULL;
}
if (image_factory)
{
g_object_unref (G_OBJECT (image_factory));
image_factory = NULL;
}
if (load_factory)
{
g_object_unref (G_OBJECT (load_factory));
load_factory = NULL;
}
if (save_factory)
{
g_object_unref (G_OBJECT (save_factory));
save_factory = NULL;
}
if (layers_factory)
{
g_object_unref (G_OBJECT (layers_factory));
layers_factory = NULL;
}
if (channels_factory)
{
g_object_unref (G_OBJECT (channels_factory));
channels_factory = NULL;
}
if (paths_factory)
{
g_object_unref (G_OBJECT (paths_factory));
paths_factory = NULL;
}
if (dialogs_factory)
{
g_object_unref (G_OBJECT (dialogs_factory));
dialogs_factory = NULL;
}
if (brushes_factory)
{
g_object_unref (G_OBJECT (brushes_factory));
brushes_factory = NULL;
}
if (patterns_factory)
{
g_object_unref (G_OBJECT (patterns_factory));
patterns_factory = NULL;
}
if (gradients_factory)
{
g_object_unref (G_OBJECT (gradients_factory));
gradients_factory = NULL;
}
if (palettes_factory)
{
g_object_unref (G_OBJECT (palettes_factory));
palettes_factory = NULL;
}
}
#ifdef ENABLE_NLS
static gchar *

View File

@ -83,6 +83,14 @@ static void menus_create_items (GtkItemFactory *item_factory,
guint callback_type,
gboolean create_tearoff,
gboolean static_entries);
static GtkItemFactory * menus_item_factory_new
(GtkType container_type,
const gchar *path,
const gchar *factory_path,
guint n_entries,
GimpItemFactoryEntry *entries,
gpointer callback_data,
gboolean create_tearoff);
static void menus_create_branches (GtkItemFactory *item_factory,
GimpItemFactoryEntry *entry);
static void menus_init (void);
@ -306,9 +314,6 @@ static GimpItemFactoryEntry toolbox_entries[] =
NULL, NULL }
#endif
};
static guint n_toolbox_entries = (sizeof (toolbox_entries) /
sizeof (toolbox_entries[0]));
static GtkItemFactory *toolbox_factory = NULL;
/***** <Image> *****/
@ -434,11 +439,13 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"edit/clear.html", NULL },
{ { N_("/Edit/Fill with FG Color"), "<control>comma",
edit_fill_cmd_callback, (guint) FOREGROUND_FILL },
edit_fill_cmd_callback, (guint) FOREGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Fill with BG Color"), "<control>period",
edit_fill_cmd_callback, (guint) BACKGROUND_FILL },
edit_fill_cmd_callback, (guint) BACKGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Stroke"), NULL,
@ -513,16 +520,24 @@ static GimpItemFactoryEntry image_entries[] =
/* <Image>/View/Zoom */
{ { N_("/View/Zoom/16:1"), NULL, view_zoom_cmd_callback, 1601 },
{ { N_("/View/Zoom/16:1"), NULL,
view_zoom_cmd_callback, 1601,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/8:1"), NULL, view_zoom_cmd_callback, 801 },
{ { N_("/View/Zoom/8:1"), NULL,
view_zoom_cmd_callback, 801,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/4:1"), NULL, view_zoom_cmd_callback, 401 },
{ { N_("/View/Zoom/4:1"), NULL,
view_zoom_cmd_callback, 401,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/2:1"), NULL, view_zoom_cmd_callback, 201 },
{ { N_("/View/Zoom/2:1"), NULL,
view_zoom_cmd_callback, 201,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:1"), "1",
@ -530,16 +545,24 @@ static GimpItemFactoryEntry image_entries[] =
"<StockItem>", GTK_STOCK_ZOOM_100 },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:2"), NULL, view_zoom_cmd_callback, 102 },
{ { N_("/View/Zoom/1:2"), NULL,
view_zoom_cmd_callback, 102,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:4"), NULL, view_zoom_cmd_callback, 104 },
{ { N_("/View/Zoom/1:4"), NULL,
view_zoom_cmd_callback, 104,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:8"), NULL, view_zoom_cmd_callback, 108 },
{ { N_("/View/Zoom/1:8"), NULL,
view_zoom_cmd_callback, 108,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:16"), NULL, view_zoom_cmd_callback, 116 },
{ { N_("/View/Zoom/1:16"), NULL,
view_zoom_cmd_callback, 116,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
@ -551,11 +574,13 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/Info Window..."), "<control><shift>I",
view_info_window_cmd_callback, 0 },
view_info_window_cmd_callback, 0,
"<StockItem>", GTK_STOCK_HELP },
NULL,
"view/dialogs/info_window.html", NULL },
{ { N_("/View/Nav. Window..."), "<control><shift>N",
view_nav_window_cmd_callback, 0 },
view_nav_window_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_MOVE },
NULL,
"view/dialogs/navigation_window.html", NULL },
@ -585,7 +610,8 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/New View"), NULL,
view_new_view_cmd_callback, 0 },
view_new_view_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_NEW },
NULL,
"view/new_view.html", NULL },
{ { N_("/View/Shrink Wrap"), "<control>E",
@ -660,7 +686,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/set_canvas_size.html", NULL },
{ { N_("/Image/Scale Image..."), NULL,
image_scale_cmd_callback, 0 },
image_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
@ -897,9 +924,6 @@ static GimpItemFactoryEntry image_entries[] =
BRANCH (N_("/Filters/Toys"))
};
static guint n_image_entries = (sizeof (image_entries) /
sizeof (image_entries[0]));
static GtkItemFactory *image_factory = NULL;
/***** <Load> *****/
@ -913,9 +937,6 @@ static GimpItemFactoryEntry load_entries[] =
SEPARATOR ("/---")
};
static guint n_load_entries = (sizeof (load_entries) /
sizeof (load_entries[0]));
static GtkItemFactory *load_factory = NULL;
/***** <Save> *****/
@ -929,9 +950,6 @@ static GimpItemFactoryEntry save_entries[] =
SEPARATOR ("/---")
};
static guint n_save_entries = (sizeof (save_entries) /
sizeof (save_entries[0]));
static GtkItemFactory *save_factory = NULL;
/***** <Layers> *****/
@ -994,7 +1012,8 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"layer_to_image_size.html", NULL },
{ { N_("/Scale Layer..."), "<control>S",
layers_scale_cmd_callback, 0 },
layers_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"dialogs/scale_layer.html", NULL },
@ -1051,9 +1070,6 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"dialogs/edit_layer_attributes.html", NULL }
};
static guint n_layers_entries = (sizeof (layers_entries) /
sizeof (layers_entries[0]));
static GtkItemFactory *layers_factory = NULL;
/***** <Channels> *****/
@ -1120,9 +1136,6 @@ static GimpItemFactoryEntry channels_entries[] =
NULL,
"dialogs/edit_channel_attributes.html", NULL }
};
static guint n_channels_entries = (sizeof (channels_entries) /
sizeof (channels_entries[0]));
static GtkItemFactory *channels_factory = NULL;
/***** <Paths> *****/
@ -1191,9 +1204,6 @@ static GimpItemFactoryEntry paths_entries[] =
NULL,
"dialogs/edit_path_attributes.html", NULL }
};
static guint n_paths_entries = (sizeof (paths_entries) /
sizeof (paths_entries[0]));
static GtkItemFactory *paths_factory = NULL;
/***** <Dialogs> *****/
@ -1319,9 +1329,6 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL }
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /
sizeof (dialogs_entries[0]));
static GtkItemFactory *dialogs_factory = NULL;
/***** <Brushes> *****/
@ -1357,9 +1364,6 @@ static GimpItemFactoryEntry brushes_entries[] =
NULL,
NULL, NULL }
};
static guint n_brushes_entries = (sizeof (brushes_entries) /
sizeof (brushes_entries[0]));
static GtkItemFactory *brushes_factory = NULL;
/***** <Patterns> *****/
@ -1395,9 +1399,6 @@ static GimpItemFactoryEntry patterns_entries[] =
NULL,
NULL, NULL }
};
static guint n_patterns_entries = (sizeof (patterns_entries) /
sizeof (patterns_entries[0]));
static GtkItemFactory *patterns_factory = NULL;
/***** <Gradients> *****/
@ -1441,9 +1442,6 @@ static GimpItemFactoryEntry gradients_entries[] =
NULL,
NULL, NULL }
};
static guint n_gradients_entries = (sizeof (gradients_entries) /
sizeof (gradients_entries[0]));
static GtkItemFactory *gradients_factory = NULL;
/***** <Palettes> *****/
@ -1491,19 +1489,92 @@ static GimpItemFactoryEntry palettes_entries[] =
NULL,
NULL, NULL }
};
static guint n_palettes_entries = (sizeof (palettes_entries) /
sizeof (palettes_entries[0]));
static GtkItemFactory *palettes_factory = NULL;
static gboolean menus_initialized = FALSE;
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactory *image_factory = NULL;
static GtkItemFactory *load_factory = NULL;
static GtkItemFactory *save_factory = NULL;
static GtkItemFactory *layers_factory = NULL;
static GtkItemFactory *channels_factory = NULL;
static GtkItemFactory *paths_factory = NULL;
static GtkItemFactory *dialogs_factory = NULL;
static GtkItemFactory *brushes_factory = NULL;
static GtkItemFactory *patterns_factory = NULL;
static GtkItemFactory *gradients_factory = NULL;
static GtkItemFactory *palettes_factory = NULL;
GtkItemFactory *
menus_get_toolbox_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! toolbox_factory)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
G_N_ELEMENTS (toolbox_entries),
toolbox_entries,
NULL,
TRUE);
last_opened_entries = g_new (GimpItemFactoryEntry,
gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
return toolbox_factory;
}
@ -1511,8 +1582,15 @@ menus_get_toolbox_factory (void)
GtkItemFactory *
menus_get_image_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! image_factory)
{
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
G_N_ELEMENTS (image_entries),
image_entries,
NULL,
TRUE);
}
return image_factory;
}
@ -1520,8 +1598,15 @@ menus_get_image_factory (void)
GtkItemFactory *
menus_get_load_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! load_factory)
{
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
G_N_ELEMENTS (load_entries),
load_entries,
NULL,
FALSE);
}
return load_factory;
}
@ -1529,8 +1614,15 @@ menus_get_load_factory (void)
GtkItemFactory *
menus_get_save_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! save_factory)
{
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
G_N_ELEMENTS (save_entries),
save_entries,
NULL,
FALSE);
}
return save_factory;
}
@ -1538,8 +1630,15 @@ menus_get_save_factory (void)
GtkItemFactory *
menus_get_layers_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! layers_factory)
{
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
G_N_ELEMENTS (layers_entries),
layers_entries,
NULL,
FALSE);
}
return layers_factory;
}
@ -1547,8 +1646,15 @@ menus_get_layers_factory (void)
GtkItemFactory *
menus_get_channels_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! channels_factory)
{
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
G_N_ELEMENTS (channels_entries),
channels_entries,
NULL,
FALSE);
}
return channels_factory;
}
@ -1556,8 +1662,15 @@ menus_get_channels_factory (void)
GtkItemFactory *
menus_get_paths_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! paths_factory)
{
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
G_N_ELEMENTS (paths_entries),
paths_entries,
NULL,
FALSE);
}
return paths_factory;
}
@ -1565,8 +1678,15 @@ menus_get_paths_factory (void)
GtkItemFactory *
menus_get_dialogs_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! dialogs_factory)
{
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
G_N_ELEMENTS (dialogs_entries),
dialogs_entries,
NULL,
FALSE);
}
return dialogs_factory;
}
@ -1574,8 +1694,15 @@ menus_get_dialogs_factory (void)
GtkItemFactory *
menus_get_brushes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! brushes_factory)
{
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
G_N_ELEMENTS (brushes_entries),
brushes_entries,
NULL,
FALSE);
}
return brushes_factory;
}
@ -1583,8 +1710,15 @@ menus_get_brushes_factory (void)
GtkItemFactory *
menus_get_patterns_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! patterns_factory)
{
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
G_N_ELEMENTS (patterns_entries),
patterns_entries,
NULL,
FALSE);
}
return patterns_factory;
}
@ -1592,8 +1726,15 @@ menus_get_patterns_factory (void)
GtkItemFactory *
menus_get_gradients_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! gradients_factory)
{
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
G_N_ELEMENTS (gradients_entries),
gradients_entries,
NULL,
FALSE);
}
return gradients_factory;
}
@ -1601,13 +1742,19 @@ menus_get_gradients_factory (void)
GtkItemFactory *
menus_get_palettes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! palettes_factory)
{
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
G_N_ELEMENTS (palettes_entries),
palettes_entries,
NULL,
FALSE);
}
return palettes_factory;
}
void
menus_create_item_from_full_path (GimpItemFactoryEntry *entry,
gchar *domain_name,
@ -2036,32 +2183,6 @@ menus_destroy (gchar *path)
gtk_item_factories_path_delete (NULL, path);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (menus_initialized)
{
g_object_unref (G_OBJECT (toolbox_factory));
g_object_unref (G_OBJECT (image_factory));
g_object_unref (G_OBJECT (load_factory));
g_object_unref (G_OBJECT (save_factory));
g_object_unref (G_OBJECT (layers_factory));
g_object_unref (G_OBJECT (channels_factory));
g_object_unref (G_OBJECT (paths_factory));
g_object_unref (G_OBJECT (dialogs_factory));
g_object_unref (G_OBJECT (brushes_factory));
g_object_unref (G_OBJECT (patterns_factory));
g_object_unref (G_OBJECT (gradients_factory));
g_object_unref (G_OBJECT (palettes_factory));
}
}
static void
menus_last_opened_update_labels (void)
{
@ -2166,64 +2287,6 @@ menus_last_opened_add (const gchar *filename)
menus_last_opened_update_labels ();
}
static void
menus_init_mru (void)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
last_opened_entries = g_new (GimpItemFactoryEntry, gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
/* This function gets called while browsing a menu created
* by a GtkItemFactory
*/
@ -2454,92 +2517,18 @@ menus_init (void)
menus_initialized = TRUE;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
n_toolbox_entries,
toolbox_entries,
NULL,
TRUE);
menus_init_mru ();
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
n_image_entries,
image_entries,
NULL,
TRUE);
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
n_load_entries,
load_entries,
NULL,
FALSE);
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
n_save_entries,
save_entries,
NULL,
FALSE);
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
n_layers_entries,
layers_entries,
NULL,
FALSE);
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
n_channels_entries,
channels_entries,
NULL,
FALSE);
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
n_paths_entries,
paths_entries,
NULL,
FALSE);
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
n_dialogs_entries,
dialogs_entries,
NULL,
FALSE);
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
n_brushes_entries,
brushes_entries,
NULL,
FALSE);
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
n_patterns_entries,
patterns_entries,
NULL,
FALSE);
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
n_gradients_entries,
gradients_entries,
NULL,
FALSE);
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
n_palettes_entries,
palettes_entries,
NULL,
FALSE);
toolbox_factory = menus_get_toolbox_factory ();
image_factory = menus_get_image_factory ();
load_factory = menus_get_load_factory ();
save_factory = menus_get_save_factory ();
layers_factory = menus_get_layers_factory ();
channels_factory = menus_get_channels_factory ();
paths_factory = menus_get_paths_factory ();
dialogs_factory = menus_get_dialogs_factory ();
brushes_factory = menus_get_brushes_factory ();
patterns_factory = menus_get_patterns_factory ();
gradients_factory = menus_get_gradients_factory ();
palettes_factory = menus_get_palettes_factory ();
for (list = GIMP_LIST (the_gimp->tool_info_list)->list;
list;
@ -2597,6 +2586,88 @@ menus_init (void)
g_free (filename);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (toolbox_factory)
{
g_object_unref (G_OBJECT (toolbox_factory));
toolbox_factory = NULL;
}
if (image_factory)
{
g_object_unref (G_OBJECT (image_factory));
image_factory = NULL;
}
if (load_factory)
{
g_object_unref (G_OBJECT (load_factory));
load_factory = NULL;
}
if (save_factory)
{
g_object_unref (G_OBJECT (save_factory));
save_factory = NULL;
}
if (layers_factory)
{
g_object_unref (G_OBJECT (layers_factory));
layers_factory = NULL;
}
if (channels_factory)
{
g_object_unref (G_OBJECT (channels_factory));
channels_factory = NULL;
}
if (paths_factory)
{
g_object_unref (G_OBJECT (paths_factory));
paths_factory = NULL;
}
if (dialogs_factory)
{
g_object_unref (G_OBJECT (dialogs_factory));
dialogs_factory = NULL;
}
if (brushes_factory)
{
g_object_unref (G_OBJECT (brushes_factory));
brushes_factory = NULL;
}
if (patterns_factory)
{
g_object_unref (G_OBJECT (patterns_factory));
patterns_factory = NULL;
}
if (gradients_factory)
{
g_object_unref (G_OBJECT (gradients_factory));
gradients_factory = NULL;
}
if (palettes_factory)
{
g_object_unref (G_OBJECT (palettes_factory));
palettes_factory = NULL;
}
}
#ifdef ENABLE_NLS
static gchar *

View File

@ -2959,15 +2959,13 @@ undo_name[] =
{ IMAGE_RESIZE_UNDO, N_("image resize") },
{ MISC_UNDO, N_("misc") }
};
#define NUM_NAMES (sizeof (undo_name) / sizeof (struct undo_name_t))
static const gchar *
undo_type_to_name (UndoType type)
{
gint i;
for (i=0; i < NUM_NAMES; i++)
for (i = 0; i < G_N_ELEMENTS (undo_name); i++)
if (undo_name[i].type == type)
return gettext (undo_name[i].name);

View File

@ -36,15 +36,9 @@
enum
{
SET_CONTAINER,
INSERT_ITEM,
REMOVE_ITEM,
REORDER_ITEM,
SELECT_ITEM,
ACTIVATE_ITEM,
CONTEXT_ITEM,
CLEAR_ITEMS,
SET_PREVIEW_SIZE,
LAST_SIGNAL
};
@ -82,10 +76,10 @@ static guint menu_signals[LAST_SIGNAL] = { 0 };
static GtkVBoxClass *parent_class = NULL;
GtkType
GType
gimp_container_menu_get_type (void)
{
static guint menu_type = 0;
static GType menu_type = 0;
if (! menu_type)
{
@ -116,50 +110,6 @@ gimp_container_menu_class_init (GimpContainerMenuClass *klass)
parent_class = g_type_class_peek_parent (klass);
menu_signals[SET_CONTAINER] =
g_signal_new ("set_container",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpContainerMenuClass, set_container),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_OBJECT);
menu_signals[INSERT_ITEM] =
g_signal_new ("insert_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpContainerMenuClass, insert_item),
NULL, NULL,
gimp_cclosure_marshal_POINTER__OBJECT_INT,
G_TYPE_POINTER, 2,
GIMP_TYPE_OBJECT,
G_TYPE_INT);
menu_signals[REMOVE_ITEM] =
g_signal_new ("remove_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerMenuClass, remove_item),
NULL, NULL,
gimp_cclosure_marshal_VOID__OBJECT_POINTER,
G_TYPE_NONE, 2,
GIMP_TYPE_OBJECT,
G_TYPE_POINTER);
menu_signals[REORDER_ITEM] =
g_signal_new ("reorder_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerMenuClass, reorder_item),
NULL, NULL,
gimp_cclosure_marshal_VOID__OBJECT_INT_POINTER,
G_TYPE_NONE, 3,
GIMP_TYPE_OBJECT,
G_TYPE_INT,
G_TYPE_POINTER);
menu_signals[SELECT_ITEM] =
g_signal_new ("select_item",
G_TYPE_FROM_CLASS (klass),
@ -193,33 +143,16 @@ gimp_container_menu_class_init (GimpContainerMenuClass *klass)
GIMP_TYPE_OBJECT,
G_TYPE_POINTER);
menu_signals[CLEAR_ITEMS] =
g_signal_new ("clear_items",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerMenuClass, clear_items),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
menu_signals[SET_PREVIEW_SIZE] =
g_signal_new ("set_preview_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerMenuClass, set_preview_size),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
object_class->destroy = gimp_container_menu_destroy;
klass->select_item = NULL;
klass->activate_item = NULL;
klass->context_item = NULL;
klass->set_container = gimp_container_menu_real_set_container;
klass->insert_item = NULL;
klass->remove_item = NULL;
klass->reorder_item = NULL;
klass->select_item = NULL;
klass->activate_item = NULL;
klass->context_item = NULL;
klass->clear_items = gimp_container_menu_real_clear_items;
klass->set_preview_size = NULL;
}
@ -262,15 +195,13 @@ void
gimp_container_menu_set_container (GimpContainerMenu *menu,
GimpContainer *container)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (!container || GIMP_IS_CONTAINER (container));
g_return_if_fail (! container || GIMP_IS_CONTAINER (container));
if (container == menu->container)
return;
g_signal_emit (G_OBJECT (menu), menu_signals[SET_CONTAINER], 0,
container);
if (container != menu->container)
{
GIMP_CONTAINER_MENU_GET_CLASS (menu)->set_container (menu, container);
}
}
static void
@ -366,9 +297,8 @@ void
gimp_container_menu_set_context (GimpContainerMenu *menu,
GimpContext *context)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (! context || GIMP_IS_CONTEXT (context));
g_return_if_fail ( ! context || GIMP_IS_CONTEXT (context));
if (context == menu->context)
return;
@ -406,7 +336,6 @@ void
gimp_container_menu_set_preview_size (GimpContainerMenu *menu,
gint preview_size)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (preview_size > 0 && preview_size <= 256 /* FIXME: 64 */);
@ -414,7 +343,7 @@ gimp_container_menu_set_preview_size (GimpContainerMenu *menu,
{
menu->preview_size = preview_size;
g_signal_emit (G_OBJECT (menu), menu_signals[SET_PREVIEW_SIZE], 0);
GIMP_CONTAINER_MENU_GET_CLASS (menu)->set_preview_size (menu);
}
}
@ -422,7 +351,6 @@ void
gimp_container_menu_set_name_func (GimpContainerMenu *menu,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
if (menu->get_name_func != get_name_func)
@ -437,7 +365,6 @@ gimp_container_menu_select_item (GimpContainerMenu *menu,
{
gpointer insert_data;
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (! viewable || GIMP_IS_VIEWABLE (viewable));
@ -453,9 +380,7 @@ gimp_container_menu_activate_item (GimpContainerMenu *menu,
{
gpointer insert_data;
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
insert_data = g_hash_table_lookup (menu->hash_table, viewable);
@ -470,9 +395,7 @@ gimp_container_menu_context_item (GimpContainerMenu *menu,
{
gpointer insert_data;
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
insert_data = g_hash_table_lookup (menu->hash_table, viewable);
@ -485,9 +408,7 @@ void
gimp_container_menu_item_selected (GimpContainerMenu *menu,
GimpViewable *viewable)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
if (menu->container && menu->context)
@ -504,9 +425,7 @@ void
gimp_container_menu_item_activated (GimpContainerMenu *menu,
GimpViewable *viewable)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
gimp_container_menu_activate_item (menu, viewable);
@ -516,9 +435,7 @@ void
gimp_container_menu_item_context (GimpContainerMenu *menu,
GimpViewable *viewable)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
gimp_container_menu_context_item (menu, viewable);
@ -527,7 +444,7 @@ gimp_container_menu_item_context (GimpContainerMenu *menu,
static void
gimp_container_menu_clear_items (GimpContainerMenu *menu)
{
g_signal_emit (G_OBJECT (menu), menu_signals[CLEAR_ITEMS], 0);
GIMP_CONTAINER_MENU_GET_CLASS (menu)->clear_items (menu);
}
static void
@ -542,10 +459,11 @@ static void
gimp_container_menu_add_foreach (GimpViewable *viewable,
GimpContainerMenu *menu)
{
gpointer insert_data = NULL;
gpointer insert_data;
g_signal_emit (G_OBJECT (menu), menu_signals[INSERT_ITEM], 0,
viewable, -1, &insert_data);
insert_data = GIMP_CONTAINER_MENU_GET_CLASS (menu)->insert_item (menu,
viewable,
-1);
g_hash_table_insert (menu->hash_table, viewable, insert_data);
}
@ -555,14 +473,15 @@ gimp_container_menu_add (GimpContainerMenu *menu,
GimpViewable *viewable,
GimpContainer *container)
{
gpointer insert_data = NULL;
gpointer insert_data;
gint index;
index = gimp_container_get_child_index (container,
GIMP_OBJECT (viewable));
g_signal_emit (G_OBJECT (menu), menu_signals[INSERT_ITEM], 0,
viewable, index, &insert_data);
insert_data = GIMP_CONTAINER_MENU_GET_CLASS (menu)->insert_item (menu,
viewable,
-1);
g_hash_table_insert (menu->hash_table, viewable, insert_data);
}
@ -580,8 +499,9 @@ gimp_container_menu_remove (GimpContainerMenu *menu,
{
g_hash_table_remove (menu->hash_table, viewable);
g_signal_emit (G_OBJECT (menu), menu_signals[REMOVE_ITEM], 0,
viewable, insert_data);
GIMP_CONTAINER_MENU_GET_CLASS (menu)->remove_item (menu,
viewable,
insert_data);
}
}
@ -597,8 +517,10 @@ gimp_container_menu_reorder (GimpContainerMenu *menu,
if (insert_data)
{
g_signal_emit (G_OBJECT (menu), menu_signals[REORDER_ITEM], 0,
viewable, new_index, insert_data);
GIMP_CONTAINER_MENU_GET_CLASS (menu)->reorder_item (menu,
viewable,
new_index,
insert_data);
}
}

View File

@ -35,6 +35,8 @@
#define GIMP_CONTAINER_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CONTAINER_MENU, GimpContainerMenuClass))
#define GIMP_IS_CONTAINER_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CONTAINER_MENU))
#define GIMP_IS_CONTAINER_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CONTAINER_MENU))
#define GIMP_CONTAINER_MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CONTAINER_MENU, GimpContainerMenuClass))
typedef struct _GimpContainerMenuClass GimpContainerMenuClass;
@ -56,6 +58,18 @@ struct _GimpContainerMenuClass
{
GtkMenuClass parent_class;
/* signals */
void (* select_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* activate_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* context_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
/* virtual functions */
void (* set_container) (GimpContainerMenu *menu,
GimpContainer *container);
gpointer (* insert_item) (GimpContainerMenu *menu,
@ -68,21 +82,12 @@ struct _GimpContainerMenuClass
GimpViewable *object,
gint new_index,
gpointer insert_data);
void (* select_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* activate_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* context_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* clear_items) (GimpContainerMenu *menu);
void (* set_preview_size) (GimpContainerMenu *menu);
};
GtkType gimp_container_menu_get_type (void);
GType gimp_container_menu_get_type (void);
void gimp_container_menu_set_container (GimpContainerMenu *menu,
GimpContainer *container);

View File

@ -39,15 +39,9 @@
enum
{
SET_CONTAINER,
INSERT_ITEM,
REMOVE_ITEM,
REORDER_ITEM,
SELECT_ITEM,
ACTIVATE_ITEM,
CONTEXT_ITEM,
CLEAR_ITEMS,
SET_PREVIEW_SIZE,
LAST_SIGNAL
};
@ -130,50 +124,6 @@ gimp_container_view_class_init (GimpContainerViewClass *klass)
parent_class = g_type_class_peek_parent (klass);
view_signals[SET_CONTAINER] =
g_signal_new ("set_container",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpContainerViewClass, set_container),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_OBJECT);
view_signals[INSERT_ITEM] =
g_signal_new ("insert_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpContainerViewClass, insert_item),
NULL, NULL,
gimp_cclosure_marshal_POINTER__OBJECT_INT,
G_TYPE_POINTER, 2,
GIMP_TYPE_OBJECT,
G_TYPE_INT);
view_signals[REMOVE_ITEM] =
g_signal_new ("remove_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerViewClass, remove_item),
NULL, NULL,
gimp_cclosure_marshal_VOID__OBJECT_POINTER,
G_TYPE_NONE, 2,
GIMP_TYPE_OBJECT,
G_TYPE_POINTER);
view_signals[REORDER_ITEM] =
g_signal_new ("reorder_item",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerViewClass, reorder_item),
NULL, NULL,
gimp_cclosure_marshal_VOID__OBJECT_INT_POINTER,
G_TYPE_NONE, 3,
GIMP_TYPE_OBJECT,
G_TYPE_INT,
G_TYPE_POINTER);
view_signals[SELECT_ITEM] =
g_signal_new ("select_item",
G_TYPE_FROM_CLASS (klass),
@ -207,35 +157,18 @@ gimp_container_view_class_init (GimpContainerViewClass *klass)
GIMP_TYPE_OBJECT,
G_TYPE_POINTER);
view_signals[CLEAR_ITEMS] =
g_signal_new ("clear_items",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerViewClass, clear_items),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
view_signals[SET_PREVIEW_SIZE] =
g_signal_new ("set_preview_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContainerViewClass, set_preview_size),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
object_class->destroy = gimp_container_view_destroy;
widget_class->style_set = gimp_container_view_style_set;
klass->select_item = NULL;
klass->activate_item = NULL;
klass->context_item = NULL;
klass->set_container = gimp_container_view_real_set_container;
klass->insert_item = NULL;
klass->remove_item = NULL;
klass->reorder_item = NULL;
klass->select_item = NULL;
klass->activate_item = NULL;
klass->context_item = NULL;
klass->clear_items = gimp_container_view_real_clear_items;
klass->set_preview_size = NULL;
@ -327,11 +260,10 @@ gimp_container_view_set_container (GimpContainerView *view,
g_return_if_fail (GIMP_IS_CONTAINER_VIEW (view));
g_return_if_fail (! container || GIMP_IS_CONTAINER (container));
if (container == view->container)
return;
g_signal_emit (G_OBJECT (view), view_signals[SET_CONTAINER], 0,
container);
if (container != view->container)
{
GIMP_CONTAINER_VIEW_GET_CLASS (view)->set_container (view, container);
}
}
static void
@ -511,9 +443,12 @@ gimp_container_view_set_preview_size (GimpContainerView *view,
g_return_if_fail (GIMP_IS_CONTAINER_VIEW (view));
g_return_if_fail (preview_size > 0 && preview_size <= 256 /* FIXME: 64 */);
view->preview_size = preview_size;
if (view->preview_size != preview_size)
{
view->preview_size = preview_size;
g_signal_emit (G_OBJECT (view), view_signals[SET_PREVIEW_SIZE], 0);
GIMP_CONTAINER_VIEW_GET_CLASS (view)->set_preview_size (view);
}
}
void
@ -677,7 +612,7 @@ gimp_container_view_item_context (GimpContainerView *view,
static void
gimp_container_view_clear_items (GimpContainerView *view)
{
g_signal_emit (G_OBJECT (view), view_signals[CLEAR_ITEMS], 0);
GIMP_CONTAINER_VIEW_GET_CLASS (view)->clear_items (view);
}
static void
@ -692,10 +627,11 @@ static void
gimp_container_view_add_foreach (GimpViewable *viewable,
GimpContainerView *view)
{
gpointer insert_data = NULL;
gpointer insert_data;
g_signal_emit (G_OBJECT (view), view_signals[INSERT_ITEM], 0,
viewable, -1, &insert_data);
insert_data = GIMP_CONTAINER_VIEW_GET_CLASS (view)->insert_item (view,
viewable,
-1);
g_hash_table_insert (view->hash_table, viewable, insert_data);
}
@ -711,8 +647,9 @@ gimp_container_view_add (GimpContainerView *view,
index = gimp_container_get_child_index (container,
GIMP_OBJECT (viewable));
g_signal_emit (G_OBJECT (view), view_signals[INSERT_ITEM], 0,
viewable, index, &insert_data);
insert_data = GIMP_CONTAINER_VIEW_GET_CLASS (view)->insert_item (view,
viewable,
index);
g_hash_table_insert (view->hash_table, viewable, insert_data);
}
@ -730,8 +667,9 @@ gimp_container_view_remove (GimpContainerView *view,
{
g_hash_table_remove (view->hash_table, viewable);
g_signal_emit (G_OBJECT (view), view_signals[REMOVE_ITEM], 0,
viewable, insert_data);
GIMP_CONTAINER_VIEW_GET_CLASS (view)->remove_item (view,
viewable,
insert_data);
}
}
@ -747,8 +685,10 @@ gimp_container_view_reorder (GimpContainerView *view,
if (insert_data)
{
g_signal_emit (G_OBJECT (view), view_signals[REORDER_ITEM], 0,
viewable, new_index, insert_data);
GIMP_CONTAINER_VIEW_GET_CLASS (view)->reorder_item (view,
viewable,
new_index,
insert_data);
}
}
@ -796,4 +736,3 @@ gimp_container_view_button_viewable_dropped (GtkWidget *widget,
gtk_button_clicked (GTK_BUTTON (widget));
}
}

View File

@ -31,6 +31,7 @@
#define GIMP_CONTAINER_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CONTAINER_VIEW, GimpContainerViewClass))
#define GIMP_IS_CONTAINER_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CONTAINER_VIEW))
#define GIMP_IS_CONTAINER_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CONTAINER_VIEW))
#define GIMP_CONTAINER_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CONTAINER_VIEW, GimpContainerViewClass))
typedef struct _GimpContainerViewClass GimpContainerViewClass;
@ -58,6 +59,18 @@ struct _GimpContainerViewClass
{
GtkVBoxClass parent_class;
/* signals */
void (* select_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
void (* activate_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
void (* context_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
/* virtual functions */
void (* set_container) (GimpContainerView *view,
GimpContainer *container);
gpointer (* insert_item) (GimpContainerView *view,
@ -70,15 +83,6 @@ struct _GimpContainerViewClass
GimpViewable *object,
gint new_index,
gpointer insert_data);
void (* select_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
void (* activate_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
void (* context_item) (GimpContainerView *view,
GimpViewable *object,
gpointer insert_data);
void (* clear_items) (GimpContainerView *view);
void (* set_preview_size) (GimpContainerView *view);
};

View File

@ -43,11 +43,6 @@ static void gimp_drawable_list_item_init (GimpDrawableListItem *lis
static void gimp_drawable_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable);
static gboolean gimp_drawable_list_item_drag_motion (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static gboolean gimp_drawable_list_item_drag_drop (GtkWidget *widget,
GdkDragContext *context,
gint x,
@ -100,7 +95,6 @@ gimp_drawable_list_item_class_init (GimpDrawableListItemClass *klass)
parent_class = g_type_class_peek_parent (klass);
widget_class->drag_motion = gimp_drawable_list_item_drag_motion;
widget_class->drag_drop = gimp_drawable_list_item_drag_drop;
list_item_class->set_viewable = gimp_drawable_list_item_set_viewable;
@ -178,35 +172,6 @@ gimp_drawable_list_item_set_viewable (GimpListItem *list_item,
0);
}
static gboolean
gimp_drawable_list_item_drag_motion (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time)
{
GimpListItem *list_item;
GimpViewable *src_viewable;
gint dest_index;
GdkDragAction drag_action;
GimpDropType drop_type;
gboolean return_val;
list_item = GIMP_LIST_ITEM (widget);
return_val = gimp_list_item_check_drag (list_item, context, x, y,
&src_viewable,
&dest_index,
&drag_action,
&drop_type);
gdk_drag_status (context, drag_action, time);
list_item->drop_type = drop_type;
return return_val;
}
static gboolean
gimp_drawable_list_item_drag_drop (GtkWidget *widget,
GdkDragContext *context,

View File

@ -83,6 +83,14 @@ static void menus_create_items (GtkItemFactory *item_factory,
guint callback_type,
gboolean create_tearoff,
gboolean static_entries);
static GtkItemFactory * menus_item_factory_new
(GtkType container_type,
const gchar *path,
const gchar *factory_path,
guint n_entries,
GimpItemFactoryEntry *entries,
gpointer callback_data,
gboolean create_tearoff);
static void menus_create_branches (GtkItemFactory *item_factory,
GimpItemFactoryEntry *entry);
static void menus_init (void);
@ -306,9 +314,6 @@ static GimpItemFactoryEntry toolbox_entries[] =
NULL, NULL }
#endif
};
static guint n_toolbox_entries = (sizeof (toolbox_entries) /
sizeof (toolbox_entries[0]));
static GtkItemFactory *toolbox_factory = NULL;
/***** <Image> *****/
@ -434,11 +439,13 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"edit/clear.html", NULL },
{ { N_("/Edit/Fill with FG Color"), "<control>comma",
edit_fill_cmd_callback, (guint) FOREGROUND_FILL },
edit_fill_cmd_callback, (guint) FOREGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Fill with BG Color"), "<control>period",
edit_fill_cmd_callback, (guint) BACKGROUND_FILL },
edit_fill_cmd_callback, (guint) BACKGROUND_FILL,
"<StockItem>", GIMP_STOCK_TOOL_BUCKET_FILL },
NULL,
"edit/fill.html", NULL },
{ { N_("/Edit/Stroke"), NULL,
@ -513,16 +520,24 @@ static GimpItemFactoryEntry image_entries[] =
/* <Image>/View/Zoom */
{ { N_("/View/Zoom/16:1"), NULL, view_zoom_cmd_callback, 1601 },
{ { N_("/View/Zoom/16:1"), NULL,
view_zoom_cmd_callback, 1601,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/8:1"), NULL, view_zoom_cmd_callback, 801 },
{ { N_("/View/Zoom/8:1"), NULL,
view_zoom_cmd_callback, 801,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/4:1"), NULL, view_zoom_cmd_callback, 401 },
{ { N_("/View/Zoom/4:1"), NULL,
view_zoom_cmd_callback, 401,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/2:1"), NULL, view_zoom_cmd_callback, 201 },
{ { N_("/View/Zoom/2:1"), NULL,
view_zoom_cmd_callback, 201,
"<StockItem>", GTK_STOCK_ZOOM_IN },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:1"), "1",
@ -530,16 +545,24 @@ static GimpItemFactoryEntry image_entries[] =
"<StockItem>", GTK_STOCK_ZOOM_100 },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:2"), NULL, view_zoom_cmd_callback, 102 },
{ { N_("/View/Zoom/1:2"), NULL,
view_zoom_cmd_callback, 102,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:4"), NULL, view_zoom_cmd_callback, 104 },
{ { N_("/View/Zoom/1:4"), NULL,
view_zoom_cmd_callback, 104,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:8"), NULL, view_zoom_cmd_callback, 108 },
{ { N_("/View/Zoom/1:8"), NULL,
view_zoom_cmd_callback, 108,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
{ { N_("/View/Zoom/1:16"), NULL, view_zoom_cmd_callback, 116 },
{ { N_("/View/Zoom/1:16"), NULL,
view_zoom_cmd_callback, 116,
"<StockItem>", GTK_STOCK_ZOOM_OUT },
NULL,
"view/zoom.html", NULL },
@ -551,11 +574,13 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/Info Window..."), "<control><shift>I",
view_info_window_cmd_callback, 0 },
view_info_window_cmd_callback, 0,
"<StockItem>", GTK_STOCK_HELP },
NULL,
"view/dialogs/info_window.html", NULL },
{ { N_("/View/Nav. Window..."), "<control><shift>N",
view_nav_window_cmd_callback, 0 },
view_nav_window_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_MOVE },
NULL,
"view/dialogs/navigation_window.html", NULL },
@ -585,7 +610,8 @@ static GimpItemFactoryEntry image_entries[] =
SEPARATOR ("/View/---"),
{ { N_("/View/New View"), NULL,
view_new_view_cmd_callback, 0 },
view_new_view_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_NEW },
NULL,
"view/new_view.html", NULL },
{ { N_("/View/Shrink Wrap"), "<control>E",
@ -660,7 +686,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/set_canvas_size.html", NULL },
{ { N_("/Image/Scale Image..."), NULL,
image_scale_cmd_callback, 0 },
image_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
@ -897,9 +924,6 @@ static GimpItemFactoryEntry image_entries[] =
BRANCH (N_("/Filters/Toys"))
};
static guint n_image_entries = (sizeof (image_entries) /
sizeof (image_entries[0]));
static GtkItemFactory *image_factory = NULL;
/***** <Load> *****/
@ -913,9 +937,6 @@ static GimpItemFactoryEntry load_entries[] =
SEPARATOR ("/---")
};
static guint n_load_entries = (sizeof (load_entries) /
sizeof (load_entries[0]));
static GtkItemFactory *load_factory = NULL;
/***** <Save> *****/
@ -929,9 +950,6 @@ static GimpItemFactoryEntry save_entries[] =
SEPARATOR ("/---")
};
static guint n_save_entries = (sizeof (save_entries) /
sizeof (save_entries[0]));
static GtkItemFactory *save_factory = NULL;
/***** <Layers> *****/
@ -994,7 +1012,8 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"layer_to_image_size.html", NULL },
{ { N_("/Scale Layer..."), "<control>S",
layers_scale_cmd_callback, 0 },
layers_scale_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_SCALE },
NULL,
"dialogs/scale_layer.html", NULL },
@ -1051,9 +1070,6 @@ static GimpItemFactoryEntry layers_entries[] =
NULL,
"dialogs/edit_layer_attributes.html", NULL }
};
static guint n_layers_entries = (sizeof (layers_entries) /
sizeof (layers_entries[0]));
static GtkItemFactory *layers_factory = NULL;
/***** <Channels> *****/
@ -1120,9 +1136,6 @@ static GimpItemFactoryEntry channels_entries[] =
NULL,
"dialogs/edit_channel_attributes.html", NULL }
};
static guint n_channels_entries = (sizeof (channels_entries) /
sizeof (channels_entries[0]));
static GtkItemFactory *channels_factory = NULL;
/***** <Paths> *****/
@ -1191,9 +1204,6 @@ static GimpItemFactoryEntry paths_entries[] =
NULL,
"dialogs/edit_path_attributes.html", NULL }
};
static guint n_paths_entries = (sizeof (paths_entries) /
sizeof (paths_entries[0]));
static GtkItemFactory *paths_factory = NULL;
/***** <Dialogs> *****/
@ -1319,9 +1329,6 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL }
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /
sizeof (dialogs_entries[0]));
static GtkItemFactory *dialogs_factory = NULL;
/***** <Brushes> *****/
@ -1357,9 +1364,6 @@ static GimpItemFactoryEntry brushes_entries[] =
NULL,
NULL, NULL }
};
static guint n_brushes_entries = (sizeof (brushes_entries) /
sizeof (brushes_entries[0]));
static GtkItemFactory *brushes_factory = NULL;
/***** <Patterns> *****/
@ -1395,9 +1399,6 @@ static GimpItemFactoryEntry patterns_entries[] =
NULL,
NULL, NULL }
};
static guint n_patterns_entries = (sizeof (patterns_entries) /
sizeof (patterns_entries[0]));
static GtkItemFactory *patterns_factory = NULL;
/***** <Gradients> *****/
@ -1441,9 +1442,6 @@ static GimpItemFactoryEntry gradients_entries[] =
NULL,
NULL, NULL }
};
static guint n_gradients_entries = (sizeof (gradients_entries) /
sizeof (gradients_entries[0]));
static GtkItemFactory *gradients_factory = NULL;
/***** <Palettes> *****/
@ -1491,19 +1489,92 @@ static GimpItemFactoryEntry palettes_entries[] =
NULL,
NULL, NULL }
};
static guint n_palettes_entries = (sizeof (palettes_entries) /
sizeof (palettes_entries[0]));
static GtkItemFactory *palettes_factory = NULL;
static gboolean menus_initialized = FALSE;
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactory *image_factory = NULL;
static GtkItemFactory *load_factory = NULL;
static GtkItemFactory *save_factory = NULL;
static GtkItemFactory *layers_factory = NULL;
static GtkItemFactory *channels_factory = NULL;
static GtkItemFactory *paths_factory = NULL;
static GtkItemFactory *dialogs_factory = NULL;
static GtkItemFactory *brushes_factory = NULL;
static GtkItemFactory *patterns_factory = NULL;
static GtkItemFactory *gradients_factory = NULL;
static GtkItemFactory *palettes_factory = NULL;
GtkItemFactory *
menus_get_toolbox_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! toolbox_factory)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
G_N_ELEMENTS (toolbox_entries),
toolbox_entries,
NULL,
TRUE);
last_opened_entries = g_new (GimpItemFactoryEntry,
gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
return toolbox_factory;
}
@ -1511,8 +1582,15 @@ menus_get_toolbox_factory (void)
GtkItemFactory *
menus_get_image_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! image_factory)
{
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
G_N_ELEMENTS (image_entries),
image_entries,
NULL,
TRUE);
}
return image_factory;
}
@ -1520,8 +1598,15 @@ menus_get_image_factory (void)
GtkItemFactory *
menus_get_load_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! load_factory)
{
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
G_N_ELEMENTS (load_entries),
load_entries,
NULL,
FALSE);
}
return load_factory;
}
@ -1529,8 +1614,15 @@ menus_get_load_factory (void)
GtkItemFactory *
menus_get_save_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! save_factory)
{
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
G_N_ELEMENTS (save_entries),
save_entries,
NULL,
FALSE);
}
return save_factory;
}
@ -1538,8 +1630,15 @@ menus_get_save_factory (void)
GtkItemFactory *
menus_get_layers_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! layers_factory)
{
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
G_N_ELEMENTS (layers_entries),
layers_entries,
NULL,
FALSE);
}
return layers_factory;
}
@ -1547,8 +1646,15 @@ menus_get_layers_factory (void)
GtkItemFactory *
menus_get_channels_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! channels_factory)
{
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
G_N_ELEMENTS (channels_entries),
channels_entries,
NULL,
FALSE);
}
return channels_factory;
}
@ -1556,8 +1662,15 @@ menus_get_channels_factory (void)
GtkItemFactory *
menus_get_paths_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! paths_factory)
{
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
G_N_ELEMENTS (paths_entries),
paths_entries,
NULL,
FALSE);
}
return paths_factory;
}
@ -1565,8 +1678,15 @@ menus_get_paths_factory (void)
GtkItemFactory *
menus_get_dialogs_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! dialogs_factory)
{
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
G_N_ELEMENTS (dialogs_entries),
dialogs_entries,
NULL,
FALSE);
}
return dialogs_factory;
}
@ -1574,8 +1694,15 @@ menus_get_dialogs_factory (void)
GtkItemFactory *
menus_get_brushes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! brushes_factory)
{
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
G_N_ELEMENTS (brushes_entries),
brushes_entries,
NULL,
FALSE);
}
return brushes_factory;
}
@ -1583,8 +1710,15 @@ menus_get_brushes_factory (void)
GtkItemFactory *
menus_get_patterns_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! patterns_factory)
{
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
G_N_ELEMENTS (patterns_entries),
patterns_entries,
NULL,
FALSE);
}
return patterns_factory;
}
@ -1592,8 +1726,15 @@ menus_get_patterns_factory (void)
GtkItemFactory *
menus_get_gradients_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! gradients_factory)
{
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
G_N_ELEMENTS (gradients_entries),
gradients_entries,
NULL,
FALSE);
}
return gradients_factory;
}
@ -1601,13 +1742,19 @@ menus_get_gradients_factory (void)
GtkItemFactory *
menus_get_palettes_factory (void)
{
if (! menus_initialized)
menus_init ();
if (! palettes_factory)
{
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
G_N_ELEMENTS (palettes_entries),
palettes_entries,
NULL,
FALSE);
}
return palettes_factory;
}
void
menus_create_item_from_full_path (GimpItemFactoryEntry *entry,
gchar *domain_name,
@ -2036,32 +2183,6 @@ menus_destroy (gchar *path)
gtk_item_factories_path_delete (NULL, path);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (menus_initialized)
{
g_object_unref (G_OBJECT (toolbox_factory));
g_object_unref (G_OBJECT (image_factory));
g_object_unref (G_OBJECT (load_factory));
g_object_unref (G_OBJECT (save_factory));
g_object_unref (G_OBJECT (layers_factory));
g_object_unref (G_OBJECT (channels_factory));
g_object_unref (G_OBJECT (paths_factory));
g_object_unref (G_OBJECT (dialogs_factory));
g_object_unref (G_OBJECT (brushes_factory));
g_object_unref (G_OBJECT (patterns_factory));
g_object_unref (G_OBJECT (gradients_factory));
g_object_unref (G_OBJECT (palettes_factory));
}
}
static void
menus_last_opened_update_labels (void)
{
@ -2166,64 +2287,6 @@ menus_last_opened_add (const gchar *filename)
menus_last_opened_update_labels ();
}
static void
menus_init_mru (void)
{
GimpItemFactoryEntry *last_opened_entries;
GtkWidget *menu_item;
gint i;
last_opened_entries = g_new (GimpItemFactoryEntry, gimprc.last_opened_size);
for (i = 0; i < gimprc.last_opened_size; i++)
{
last_opened_entries[i].entry.path =
g_strdup_printf ("/File/MRU%02d", i + 1);
if (i < 9)
last_opened_entries[i].entry.accelerator =
g_strdup_printf ("<control>%d", i + 1);
else
last_opened_entries[i].entry.accelerator = NULL;
last_opened_entries[i].entry.callback = file_last_opened_cmd_callback;
last_opened_entries[i].entry.callback_action = i;
last_opened_entries[i].entry.item_type = "<StockItem>";
last_opened_entries[i].entry.extra_data = GTK_STOCK_OPEN;
last_opened_entries[i].quark_string = NULL;
last_opened_entries[i].help_page = "file/last_opened.html";
last_opened_entries[i].description = NULL;
}
menus_create_items (toolbox_factory, gimprc.last_opened_size,
last_opened_entries, NULL, 2, TRUE, FALSE);
for (i = 0; i < gimprc.last_opened_size; i++)
{
menu_item =
gtk_item_factory_get_widget (toolbox_factory,
last_opened_entries[i].entry.path);
gtk_widget_hide (menu_item);
}
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/---MRU");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
gtk_widget_hide (menu_item);
menu_item = gtk_item_factory_get_widget (toolbox_factory, "/File/Quit");
if (menu_item && menu_item->parent)
gtk_menu_reorder_child (GTK_MENU (menu_item->parent), menu_item, -1);
for (i = 0; i < gimprc.last_opened_size; i++)
{
g_free (last_opened_entries[i].entry.path);
g_free (last_opened_entries[i].entry.accelerator);
}
g_free (last_opened_entries);
}
/* This function gets called while browsing a menu created
* by a GtkItemFactory
*/
@ -2454,92 +2517,18 @@ menus_init (void)
menus_initialized = TRUE;
toolbox_factory = menus_item_factory_new (GTK_TYPE_MENU_BAR,
"<Toolbox>", "toolbox",
n_toolbox_entries,
toolbox_entries,
NULL,
TRUE);
menus_init_mru ();
image_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Image>", "image",
n_image_entries,
image_entries,
NULL,
TRUE);
load_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Load>", "open",
n_load_entries,
load_entries,
NULL,
FALSE);
save_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Save>", "save",
n_save_entries,
save_entries,
NULL,
FALSE);
layers_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Layers>", "layers",
n_layers_entries,
layers_entries,
NULL,
FALSE);
channels_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Channels>", "channels",
n_channels_entries,
channels_entries,
NULL,
FALSE);
paths_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Paths>", "paths",
n_paths_entries,
paths_entries,
NULL,
FALSE);
dialogs_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Dialogs>", "dialogs",
n_dialogs_entries,
dialogs_entries,
NULL,
FALSE);
brushes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Brushes>", "brushes",
n_brushes_entries,
brushes_entries,
NULL,
FALSE);
patterns_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Patterns>", "patterns",
n_patterns_entries,
patterns_entries,
NULL,
FALSE);
gradients_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Gradients>", "gradients",
n_gradients_entries,
gradients_entries,
NULL,
FALSE);
palettes_factory = menus_item_factory_new (GTK_TYPE_MENU,
"<Palettes>", "palettes",
n_palettes_entries,
palettes_entries,
NULL,
FALSE);
toolbox_factory = menus_get_toolbox_factory ();
image_factory = menus_get_image_factory ();
load_factory = menus_get_load_factory ();
save_factory = menus_get_save_factory ();
layers_factory = menus_get_layers_factory ();
channels_factory = menus_get_channels_factory ();
paths_factory = menus_get_paths_factory ();
dialogs_factory = menus_get_dialogs_factory ();
brushes_factory = menus_get_brushes_factory ();
patterns_factory = menus_get_patterns_factory ();
gradients_factory = menus_get_gradients_factory ();
palettes_factory = menus_get_palettes_factory ();
for (list = GIMP_LIST (the_gimp->tool_info_list)->list;
list;
@ -2597,6 +2586,88 @@ menus_init (void)
g_free (filename);
}
void
menus_quit (void)
{
gchar *filename;
filename = gimp_personal_rc_file ("menurc");
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (toolbox_factory)
{
g_object_unref (G_OBJECT (toolbox_factory));
toolbox_factory = NULL;
}
if (image_factory)
{
g_object_unref (G_OBJECT (image_factory));
image_factory = NULL;
}
if (load_factory)
{
g_object_unref (G_OBJECT (load_factory));
load_factory = NULL;
}
if (save_factory)
{
g_object_unref (G_OBJECT (save_factory));
save_factory = NULL;
}
if (layers_factory)
{
g_object_unref (G_OBJECT (layers_factory));
layers_factory = NULL;
}
if (channels_factory)
{
g_object_unref (G_OBJECT (channels_factory));
channels_factory = NULL;
}
if (paths_factory)
{
g_object_unref (G_OBJECT (paths_factory));
paths_factory = NULL;
}
if (dialogs_factory)
{
g_object_unref (G_OBJECT (dialogs_factory));
dialogs_factory = NULL;
}
if (brushes_factory)
{
g_object_unref (G_OBJECT (brushes_factory));
brushes_factory = NULL;
}
if (patterns_factory)
{
g_object_unref (G_OBJECT (patterns_factory));
patterns_factory = NULL;
}
if (gradients_factory)
{
g_object_unref (G_OBJECT (gradients_factory));
gradients_factory = NULL;
}
if (palettes_factory)
{
g_object_unref (G_OBJECT (palettes_factory));
palettes_factory = NULL;
}
}
#ifdef ENABLE_NLS
static gchar *

View File

@ -287,7 +287,12 @@ gimp_layer_list_item_drag_motion (GtkWidget *widget,
gdk_drag_status (context, drag_action, time);
list_item->drop_type = drop_type;
if (list_item->drop_type != drop_type)
{
list_item->drop_type = drop_type;
gtk_widget_queue_draw (widget);
}
return return_val;
}

View File

@ -39,14 +39,6 @@
#include "gimppreview.h"
enum
{
SET_VIEWABLE,
SET_PREVIEW_SIZE,
LAST_SIGNAL
};
static void gimp_list_item_class_init (GimpListItemClass *klass);
static void gimp_list_item_init (GimpListItem *list_item);
@ -76,15 +68,13 @@ static GimpViewable * gimp_list_item_drag_viewable (GtkWidget *widget,
gpointer data);
static guint list_item_signals[LAST_SIGNAL] = { 0 };
static GtkListItemClass *parent_class = NULL;
static GtkListItemClass *parent_class = NULL;
GtkType
GType
gimp_list_item_get_type (void)
{
static GtkType list_item_type = 0;
static GType list_item_type = 0;
if (!list_item_type)
{
@ -109,34 +99,12 @@ gimp_list_item_get_type (void)
static void
gimp_list_item_class_init (GimpListItemClass *klass)
{
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
object_class = (GtkObjectClass *) klass;
widget_class = (GtkWidgetClass *) klass;
parent_class = g_type_class_peek_parent (klass);
list_item_signals[SET_VIEWABLE] =
g_signal_new ("set_viewable",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpListItemClass, set_viewable),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_VIEWABLE);
list_item_signals[SET_PREVIEW_SIZE] =
g_signal_new ("set_preview_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpListItemClass, set_preview_size),
NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, 1,
G_TYPE_INT);
widget_class->expose_event = gimp_list_item_expose_event;
widget_class->drag_leave = gimp_list_item_drag_leave;
widget_class->drag_motion = gimp_list_item_drag_motion;
@ -173,8 +141,7 @@ gimp_list_item_expose_event (GtkWidget *widget,
list_item = GIMP_LIST_ITEM (widget);
if (GTK_WIDGET_CLASS (parent_class)->expose_event)
GTK_WIDGET_CLASS (parent_class)->expose_event (widget, eevent);
GTK_WIDGET_CLASS (parent_class)->expose_event (widget, eevent);
if (list_item->drop_type != GIMP_DROP_NONE)
{
@ -200,7 +167,7 @@ gimp_list_item_expose_event (GtkWidget *widget,
GDK_CAP_BUTT, GDK_JOIN_MITER);
}
return FALSE;
return TRUE;
}
static void
@ -239,7 +206,12 @@ gimp_list_item_drag_motion (GtkWidget *widget,
gdk_drag_status (context, drag_action, time);
list_item->drop_type = drop_type;
if (list_item->drop_type != drop_type)
{
list_item->drop_type = drop_type;
gtk_widget_queue_draw (widget);
}
return return_val;
}
@ -285,7 +257,6 @@ gimp_list_item_new (GimpViewable *viewable,
{
GimpListItem *list_item;
g_return_val_if_fail (viewable != NULL, NULL);
g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), NULL);
g_return_val_if_fail (preview_size > 0 && preview_size <= 256, NULL);
@ -317,11 +288,9 @@ void
gimp_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable)
{
g_return_if_fail (list_item != NULL);
g_return_if_fail (GIMP_IS_LIST_ITEM (list_item));
g_signal_emit (G_OBJECT (list_item), list_item_signals[SET_VIEWABLE], 0,
viewable);
GIMP_LIST_ITEM_GET_CLASS (list_item)->set_viewable (list_item, viewable);
}
static void
@ -359,13 +328,12 @@ void
gimp_list_item_set_preview_size (GimpListItem *list_item,
gint preview_size)
{
g_return_if_fail (list_item != NULL);
g_return_if_fail (GIMP_IS_LIST_ITEM (list_item));
g_return_if_fail (preview_size > 0 && preview_size <= 256 /* FIXME: 64 */);
list_item->preview_size = preview_size;
g_signal_emit (G_OBJECT (list_item), list_item_signals[SET_PREVIEW_SIZE], 0);
GIMP_LIST_ITEM_GET_CLASS (list_item)->set_preview_size (list_item);
}
static void

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_LIST_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_LIST_ITEM, GimpListItemClass))
#define GIMP_IS_LIST_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_LIST_ITEM))
#define GIMP_IS_LIST_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_LIST_ITEM))
#define GIMP_LIST_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_LIST_ITEM, GimpListItemClass))
typedef struct _GimpListItemClass GimpListItemClass;
@ -63,13 +64,15 @@ struct _GimpListItemClass
{
GtkListItemClass parent_class;
/* virtual functions */
void (* set_viewable) (GimpListItem *list_item,
GimpViewable *viewable);
void (* set_preview_size) (GimpListItem *list_item);
};
GtkType gimp_list_item_get_type (void);
GType gimp_list_item_get_type (void);
GtkWidget * gimp_list_item_new (GimpViewable *viewable,
gint preview_size);

View File

@ -33,13 +33,6 @@
#include "gimppreview.h"
enum
{
SET_VIEWABLE,
LAST_SIGNAL
};
static void gimp_menu_item_class_init (GimpMenuItemClass *klass);
static void gimp_menu_item_init (GimpMenuItem *menu_item);
@ -55,15 +48,13 @@ static GimpViewable * gimp_menu_item_drag_viewable (GtkWidget *widget,
gpointer data);
static guint menu_item_signals[LAST_SIGNAL] = { 0 };
static GtkMenuItemClass *parent_class = NULL;
static GtkMenuItemClass *parent_class = NULL;
GtkType
GType
gimp_menu_item_get_type (void)
{
static GtkType menu_item_type = 0;
static GType menu_item_type = 0;
if (!menu_item_type)
{
@ -88,22 +79,8 @@ gimp_menu_item_get_type (void)
static void
gimp_menu_item_class_init (GimpMenuItemClass *klass)
{
GtkObjectClass *object_class;
object_class = (GtkObjectClass *) klass;
parent_class = g_type_class_peek_parent (klass);
menu_item_signals[SET_VIEWABLE] =
g_signal_new ("set_viewable",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpMenuItemClass, set_viewable),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_VIEWABLE);
klass->set_viewable = gimp_menu_item_real_set_viewable;
}
@ -127,7 +104,6 @@ gimp_menu_item_new (GimpViewable *viewable,
{
GimpMenuItem *menu_item;
g_return_val_if_fail (viewable != NULL, NULL);
g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), NULL);
g_return_val_if_fail (preview_size > 0 && preview_size <= 256, NULL);
@ -144,8 +120,7 @@ static void
gimp_menu_item_set_viewable (GimpMenuItem *menu_item,
GimpViewable *viewable)
{
g_signal_emit (GTK_OBJECT (menu_item), menu_item_signals[SET_VIEWABLE], 0,
viewable);
GIMP_MENU_ITEM_GET_CLASS (menu_item)->set_viewable (menu_item, viewable);
}
static void
@ -183,7 +158,6 @@ void
gimp_menu_item_set_name_func (GimpMenuItem *menu_item,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (menu_item != NULL);
g_return_if_fail (GIMP_IS_MENU_ITEM (menu_item));
if (menu_item->get_name_func != get_name_func)

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_MENU_ITEM, GimpMenuItemClass))
#define GIMP_IS_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_MENU_ITEM))
#define GIMP_IS_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_MENU_ITEM))
#define GIMP_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_MENU_ITEM, GimpMenuItemClass))
typedef struct _GimpMenuItemClass GimpMenuItemClass;
@ -60,12 +61,14 @@ struct _GimpMenuItemClass
{
GtkMenuItemClass parent_class;
/* virtual functions */
void (* set_viewable) (GimpMenuItem *menu_item,
GimpViewable *viewable);
};
GtkType gimp_menu_item_get_type (void);
GType gimp_menu_item_get_type (void);
GtkWidget * gimp_menu_item_new (GimpViewable *viewable,
gint preview_size);

View File

@ -72,9 +72,6 @@ enum
EXTENDED_CLICKED,
CONTEXT,
RENDER,
GET_SIZE,
NEEDS_POPUP,
CREATE_POPUP,
LAST_SIGNAL
};
@ -197,45 +194,6 @@ gimp_preview_class_init (GimpPreviewClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[RENDER] =
g_signal_new ("render",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, render),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[GET_SIZE] =
g_signal_new ("get_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, get_size),
NULL, NULL,
gimp_cclosure_marshal_VOID__INT_POINTER_POINTER,
G_TYPE_NONE, 3,
G_TYPE_INT,
G_TYPE_POINTER,
G_TYPE_POINTER);
preview_signals[NEEDS_POPUP] =
g_signal_new ("needs_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, needs_popup),
NULL, NULL,
gimp_cclosure_marshal_BOOLEAN__VOID,
G_TYPE_BOOLEAN, 0);
preview_signals[CREATE_POPUP] =
g_signal_new ("create_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, create_popup),
NULL, NULL,
gimp_cclosure_marshal_POINTER__VOID,
G_TYPE_POINTER, 0);
object_class->destroy = gimp_preview_destroy;
widget_class->size_allocate = gimp_preview_size_allocate;
@ -484,7 +442,6 @@ gimp_preview_set_size (GimpPreview *preview,
{
gint width, height;
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (preview_size > 0 && preview_size <= 256);
g_return_if_fail (border_width >= 0 && border_width <= 16);
@ -505,7 +462,6 @@ gimp_preview_set_size_full (GimpPreview *preview,
gint height,
gint border_width)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width > 0 && width <= 256);
g_return_if_fail (height > 0 && height <= 256);
@ -527,7 +483,6 @@ void
gimp_preview_set_dot_for_dot (GimpPreview *preview,
gboolean dot_for_dot)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
if (dot_for_dot != preview->dot_for_dot)
@ -549,7 +504,6 @@ void
gimp_preview_set_border_color (GimpPreview *preview,
const GimpRGB *color)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (color != NULL);
@ -564,7 +518,9 @@ gimp_preview_set_border_color (GimpPreview *preview,
void
gimp_preview_render (GimpPreview *preview)
{
g_signal_emit (G_OBJECT (preview), preview_signals[RENDER], 0);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
GIMP_PREVIEW_GET_CLASS (preview)->render (preview);
}
static gint
@ -594,13 +550,18 @@ gimp_preview_button_press_event (GtkWidget *widget,
bevent->y);
}
}
else if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
preview->press_state = 0;
if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
}
}
}
else if (bevent->type == GDK_2BUTTON_PRESS)
@ -705,16 +666,15 @@ gimp_preview_real_render (GimpPreview *preview)
{
TempBuf *temp_buf;
temp_buf = gimp_viewable_get_new_preview (preview->viewable,
preview->width,
preview->height);
temp_buf = gimp_viewable_get_preview (preview->viewable,
preview->width,
preview->height);
if (temp_buf)
{
gimp_preview_render_and_flush (preview,
temp_buf,
-1);
temp_buf_free (temp_buf);
}
}
@ -724,13 +684,11 @@ gimp_preview_get_size (GimpPreview *preview,
gint *width,
gint *height)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width != NULL);
g_return_if_fail (height != NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[GET_SIZE], 0,
size, width, height);
GIMP_PREVIEW_GET_CLASS (preview)->get_size (preview, size, width, height);
}
static void
@ -746,12 +704,9 @@ gimp_preview_real_get_size (GimpPreview *preview,
static gboolean
gimp_preview_needs_popup (GimpPreview *preview)
{
gboolean needs_popup = FALSE;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), FALSE);
g_signal_emit (G_OBJECT (preview), preview_signals[NEEDS_POPUP], 0,
&needs_popup);
return needs_popup;
return GIMP_PREVIEW_GET_CLASS (preview)->needs_popup (preview);
}
static gboolean
@ -763,12 +718,9 @@ gimp_preview_real_needs_popup (GimpPreview *preview)
static GtkWidget *
gimp_preview_create_popup (GimpPreview *preview)
{
GtkWidget *popup_preview = NULL;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[CREATE_POPUP], 0,
&popup_preview);
return popup_preview;
return GIMP_PREVIEW_GET_CLASS (preview)->create_popup (preview);
}
static GtkWidget *

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, GimpPreviewClass))
#define GIMP_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PREVIEW))
#define GIMP_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PREVIEW))
#define GIMP_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PREVIEW, GimpPreviewClass))
typedef struct _GimpPreviewClass GimpPreviewClass;
@ -71,12 +72,14 @@ struct _GimpPreviewClass
{
GtkPreviewClass parent_class;
/* signals */
void (* clicked) (GimpPreview *preview);
void (* double_clicked) (GimpPreview *preview);
void (* extended_clicked) (GimpPreview *preview,
guint modifier_state);
void (* context) (GimpPreview *preview);
/* virtual functions */
void (* render) (GimpPreview *preview);
void (* get_size) (GimpPreview *preview,
gint size,
@ -87,7 +90,7 @@ struct _GimpPreviewClass
};
GtkType gimp_preview_get_type (void);
GType gimp_preview_get_type (void);
GtkWidget * gimp_preview_new (GimpViewable *viewable,
gint size,

View File

@ -72,9 +72,6 @@ enum
EXTENDED_CLICKED,
CONTEXT,
RENDER,
GET_SIZE,
NEEDS_POPUP,
CREATE_POPUP,
LAST_SIGNAL
};
@ -197,45 +194,6 @@ gimp_preview_class_init (GimpPreviewClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[RENDER] =
g_signal_new ("render",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, render),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[GET_SIZE] =
g_signal_new ("get_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, get_size),
NULL, NULL,
gimp_cclosure_marshal_VOID__INT_POINTER_POINTER,
G_TYPE_NONE, 3,
G_TYPE_INT,
G_TYPE_POINTER,
G_TYPE_POINTER);
preview_signals[NEEDS_POPUP] =
g_signal_new ("needs_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, needs_popup),
NULL, NULL,
gimp_cclosure_marshal_BOOLEAN__VOID,
G_TYPE_BOOLEAN, 0);
preview_signals[CREATE_POPUP] =
g_signal_new ("create_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, create_popup),
NULL, NULL,
gimp_cclosure_marshal_POINTER__VOID,
G_TYPE_POINTER, 0);
object_class->destroy = gimp_preview_destroy;
widget_class->size_allocate = gimp_preview_size_allocate;
@ -484,7 +442,6 @@ gimp_preview_set_size (GimpPreview *preview,
{
gint width, height;
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (preview_size > 0 && preview_size <= 256);
g_return_if_fail (border_width >= 0 && border_width <= 16);
@ -505,7 +462,6 @@ gimp_preview_set_size_full (GimpPreview *preview,
gint height,
gint border_width)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width > 0 && width <= 256);
g_return_if_fail (height > 0 && height <= 256);
@ -527,7 +483,6 @@ void
gimp_preview_set_dot_for_dot (GimpPreview *preview,
gboolean dot_for_dot)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
if (dot_for_dot != preview->dot_for_dot)
@ -549,7 +504,6 @@ void
gimp_preview_set_border_color (GimpPreview *preview,
const GimpRGB *color)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (color != NULL);
@ -564,7 +518,9 @@ gimp_preview_set_border_color (GimpPreview *preview,
void
gimp_preview_render (GimpPreview *preview)
{
g_signal_emit (G_OBJECT (preview), preview_signals[RENDER], 0);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
GIMP_PREVIEW_GET_CLASS (preview)->render (preview);
}
static gint
@ -594,13 +550,18 @@ gimp_preview_button_press_event (GtkWidget *widget,
bevent->y);
}
}
else if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
preview->press_state = 0;
if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
}
}
}
else if (bevent->type == GDK_2BUTTON_PRESS)
@ -705,16 +666,15 @@ gimp_preview_real_render (GimpPreview *preview)
{
TempBuf *temp_buf;
temp_buf = gimp_viewable_get_new_preview (preview->viewable,
preview->width,
preview->height);
temp_buf = gimp_viewable_get_preview (preview->viewable,
preview->width,
preview->height);
if (temp_buf)
{
gimp_preview_render_and_flush (preview,
temp_buf,
-1);
temp_buf_free (temp_buf);
}
}
@ -724,13 +684,11 @@ gimp_preview_get_size (GimpPreview *preview,
gint *width,
gint *height)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width != NULL);
g_return_if_fail (height != NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[GET_SIZE], 0,
size, width, height);
GIMP_PREVIEW_GET_CLASS (preview)->get_size (preview, size, width, height);
}
static void
@ -746,12 +704,9 @@ gimp_preview_real_get_size (GimpPreview *preview,
static gboolean
gimp_preview_needs_popup (GimpPreview *preview)
{
gboolean needs_popup = FALSE;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), FALSE);
g_signal_emit (G_OBJECT (preview), preview_signals[NEEDS_POPUP], 0,
&needs_popup);
return needs_popup;
return GIMP_PREVIEW_GET_CLASS (preview)->needs_popup (preview);
}
static gboolean
@ -763,12 +718,9 @@ gimp_preview_real_needs_popup (GimpPreview *preview)
static GtkWidget *
gimp_preview_create_popup (GimpPreview *preview)
{
GtkWidget *popup_preview = NULL;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[CREATE_POPUP], 0,
&popup_preview);
return popup_preview;
return GIMP_PREVIEW_GET_CLASS (preview)->create_popup (preview);
}
static GtkWidget *

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, GimpPreviewClass))
#define GIMP_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PREVIEW))
#define GIMP_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PREVIEW))
#define GIMP_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PREVIEW, GimpPreviewClass))
typedef struct _GimpPreviewClass GimpPreviewClass;
@ -71,12 +72,14 @@ struct _GimpPreviewClass
{
GtkPreviewClass parent_class;
/* signals */
void (* clicked) (GimpPreview *preview);
void (* double_clicked) (GimpPreview *preview);
void (* extended_clicked) (GimpPreview *preview,
guint modifier_state);
void (* context) (GimpPreview *preview);
/* virtual functions */
void (* render) (GimpPreview *preview);
void (* get_size) (GimpPreview *preview,
gint size,
@ -87,7 +90,7 @@ struct _GimpPreviewClass
};
GtkType gimp_preview_get_type (void);
GType gimp_preview_get_type (void);
GtkWidget * gimp_preview_new (GimpViewable *viewable,
gint size,

View File

@ -72,9 +72,6 @@ enum
EXTENDED_CLICKED,
CONTEXT,
RENDER,
GET_SIZE,
NEEDS_POPUP,
CREATE_POPUP,
LAST_SIGNAL
};
@ -197,45 +194,6 @@ gimp_preview_class_init (GimpPreviewClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[RENDER] =
g_signal_new ("render",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, render),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[GET_SIZE] =
g_signal_new ("get_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, get_size),
NULL, NULL,
gimp_cclosure_marshal_VOID__INT_POINTER_POINTER,
G_TYPE_NONE, 3,
G_TYPE_INT,
G_TYPE_POINTER,
G_TYPE_POINTER);
preview_signals[NEEDS_POPUP] =
g_signal_new ("needs_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, needs_popup),
NULL, NULL,
gimp_cclosure_marshal_BOOLEAN__VOID,
G_TYPE_BOOLEAN, 0);
preview_signals[CREATE_POPUP] =
g_signal_new ("create_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, create_popup),
NULL, NULL,
gimp_cclosure_marshal_POINTER__VOID,
G_TYPE_POINTER, 0);
object_class->destroy = gimp_preview_destroy;
widget_class->size_allocate = gimp_preview_size_allocate;
@ -484,7 +442,6 @@ gimp_preview_set_size (GimpPreview *preview,
{
gint width, height;
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (preview_size > 0 && preview_size <= 256);
g_return_if_fail (border_width >= 0 && border_width <= 16);
@ -505,7 +462,6 @@ gimp_preview_set_size_full (GimpPreview *preview,
gint height,
gint border_width)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width > 0 && width <= 256);
g_return_if_fail (height > 0 && height <= 256);
@ -527,7 +483,6 @@ void
gimp_preview_set_dot_for_dot (GimpPreview *preview,
gboolean dot_for_dot)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
if (dot_for_dot != preview->dot_for_dot)
@ -549,7 +504,6 @@ void
gimp_preview_set_border_color (GimpPreview *preview,
const GimpRGB *color)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (color != NULL);
@ -564,7 +518,9 @@ gimp_preview_set_border_color (GimpPreview *preview,
void
gimp_preview_render (GimpPreview *preview)
{
g_signal_emit (G_OBJECT (preview), preview_signals[RENDER], 0);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
GIMP_PREVIEW_GET_CLASS (preview)->render (preview);
}
static gint
@ -594,13 +550,18 @@ gimp_preview_button_press_event (GtkWidget *widget,
bevent->y);
}
}
else if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
preview->press_state = 0;
if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
}
}
}
else if (bevent->type == GDK_2BUTTON_PRESS)
@ -705,16 +666,15 @@ gimp_preview_real_render (GimpPreview *preview)
{
TempBuf *temp_buf;
temp_buf = gimp_viewable_get_new_preview (preview->viewable,
preview->width,
preview->height);
temp_buf = gimp_viewable_get_preview (preview->viewable,
preview->width,
preview->height);
if (temp_buf)
{
gimp_preview_render_and_flush (preview,
temp_buf,
-1);
temp_buf_free (temp_buf);
}
}
@ -724,13 +684,11 @@ gimp_preview_get_size (GimpPreview *preview,
gint *width,
gint *height)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width != NULL);
g_return_if_fail (height != NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[GET_SIZE], 0,
size, width, height);
GIMP_PREVIEW_GET_CLASS (preview)->get_size (preview, size, width, height);
}
static void
@ -746,12 +704,9 @@ gimp_preview_real_get_size (GimpPreview *preview,
static gboolean
gimp_preview_needs_popup (GimpPreview *preview)
{
gboolean needs_popup = FALSE;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), FALSE);
g_signal_emit (G_OBJECT (preview), preview_signals[NEEDS_POPUP], 0,
&needs_popup);
return needs_popup;
return GIMP_PREVIEW_GET_CLASS (preview)->needs_popup (preview);
}
static gboolean
@ -763,12 +718,9 @@ gimp_preview_real_needs_popup (GimpPreview *preview)
static GtkWidget *
gimp_preview_create_popup (GimpPreview *preview)
{
GtkWidget *popup_preview = NULL;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[CREATE_POPUP], 0,
&popup_preview);
return popup_preview;
return GIMP_PREVIEW_GET_CLASS (preview)->create_popup (preview);
}
static GtkWidget *

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, GimpPreviewClass))
#define GIMP_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PREVIEW))
#define GIMP_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PREVIEW))
#define GIMP_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PREVIEW, GimpPreviewClass))
typedef struct _GimpPreviewClass GimpPreviewClass;
@ -71,12 +72,14 @@ struct _GimpPreviewClass
{
GtkPreviewClass parent_class;
/* signals */
void (* clicked) (GimpPreview *preview);
void (* double_clicked) (GimpPreview *preview);
void (* extended_clicked) (GimpPreview *preview,
guint modifier_state);
void (* context) (GimpPreview *preview);
/* virtual functions */
void (* render) (GimpPreview *preview);
void (* get_size) (GimpPreview *preview,
gint size,
@ -87,7 +90,7 @@ struct _GimpPreviewClass
};
GtkType gimp_preview_get_type (void);
GType gimp_preview_get_type (void);
GtkWidget * gimp_preview_new (GimpViewable *viewable,
gint size,

View File

@ -72,9 +72,6 @@ enum
EXTENDED_CLICKED,
CONTEXT,
RENDER,
GET_SIZE,
NEEDS_POPUP,
CREATE_POPUP,
LAST_SIGNAL
};
@ -197,45 +194,6 @@ gimp_preview_class_init (GimpPreviewClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[RENDER] =
g_signal_new ("render",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, render),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
preview_signals[GET_SIZE] =
g_signal_new ("get_size",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, get_size),
NULL, NULL,
gimp_cclosure_marshal_VOID__INT_POINTER_POINTER,
G_TYPE_NONE, 3,
G_TYPE_INT,
G_TYPE_POINTER,
G_TYPE_POINTER);
preview_signals[NEEDS_POPUP] =
g_signal_new ("needs_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, needs_popup),
NULL, NULL,
gimp_cclosure_marshal_BOOLEAN__VOID,
G_TYPE_BOOLEAN, 0);
preview_signals[CREATE_POPUP] =
g_signal_new ("create_popup",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpPreviewClass, create_popup),
NULL, NULL,
gimp_cclosure_marshal_POINTER__VOID,
G_TYPE_POINTER, 0);
object_class->destroy = gimp_preview_destroy;
widget_class->size_allocate = gimp_preview_size_allocate;
@ -484,7 +442,6 @@ gimp_preview_set_size (GimpPreview *preview,
{
gint width, height;
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (preview_size > 0 && preview_size <= 256);
g_return_if_fail (border_width >= 0 && border_width <= 16);
@ -505,7 +462,6 @@ gimp_preview_set_size_full (GimpPreview *preview,
gint height,
gint border_width)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width > 0 && width <= 256);
g_return_if_fail (height > 0 && height <= 256);
@ -527,7 +483,6 @@ void
gimp_preview_set_dot_for_dot (GimpPreview *preview,
gboolean dot_for_dot)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
if (dot_for_dot != preview->dot_for_dot)
@ -549,7 +504,6 @@ void
gimp_preview_set_border_color (GimpPreview *preview,
const GimpRGB *color)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (color != NULL);
@ -564,7 +518,9 @@ gimp_preview_set_border_color (GimpPreview *preview,
void
gimp_preview_render (GimpPreview *preview)
{
g_signal_emit (G_OBJECT (preview), preview_signals[RENDER], 0);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
GIMP_PREVIEW_GET_CLASS (preview)->render (preview);
}
static gint
@ -594,13 +550,18 @@ gimp_preview_button_press_event (GtkWidget *widget,
bevent->y);
}
}
else if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
preview->press_state = 0;
if (bevent->button == 3)
{
g_signal_emit (G_OBJECT (widget), preview_signals[CONTEXT], 0);
}
else
{
return FALSE;
}
}
}
else if (bevent->type == GDK_2BUTTON_PRESS)
@ -705,16 +666,15 @@ gimp_preview_real_render (GimpPreview *preview)
{
TempBuf *temp_buf;
temp_buf = gimp_viewable_get_new_preview (preview->viewable,
preview->width,
preview->height);
temp_buf = gimp_viewable_get_preview (preview->viewable,
preview->width,
preview->height);
if (temp_buf)
{
gimp_preview_render_and_flush (preview,
temp_buf,
-1);
temp_buf_free (temp_buf);
}
}
@ -724,13 +684,11 @@ gimp_preview_get_size (GimpPreview *preview,
gint *width,
gint *height)
{
g_return_if_fail (preview != NULL);
g_return_if_fail (GIMP_IS_PREVIEW (preview));
g_return_if_fail (width != NULL);
g_return_if_fail (height != NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[GET_SIZE], 0,
size, width, height);
GIMP_PREVIEW_GET_CLASS (preview)->get_size (preview, size, width, height);
}
static void
@ -746,12 +704,9 @@ gimp_preview_real_get_size (GimpPreview *preview,
static gboolean
gimp_preview_needs_popup (GimpPreview *preview)
{
gboolean needs_popup = FALSE;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), FALSE);
g_signal_emit (G_OBJECT (preview), preview_signals[NEEDS_POPUP], 0,
&needs_popup);
return needs_popup;
return GIMP_PREVIEW_GET_CLASS (preview)->needs_popup (preview);
}
static gboolean
@ -763,12 +718,9 @@ gimp_preview_real_needs_popup (GimpPreview *preview)
static GtkWidget *
gimp_preview_create_popup (GimpPreview *preview)
{
GtkWidget *popup_preview = NULL;
g_return_val_if_fail (GIMP_IS_PREVIEW (preview), NULL);
g_signal_emit (G_OBJECT (preview), preview_signals[CREATE_POPUP], 0,
&popup_preview);
return popup_preview;
return GIMP_PREVIEW_GET_CLASS (preview)->create_popup (preview);
}
static GtkWidget *

View File

@ -36,6 +36,7 @@ extern "C" {
#define GIMP_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, GimpPreviewClass))
#define GIMP_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PREVIEW))
#define GIMP_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PREVIEW))
#define GIMP_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PREVIEW, GimpPreviewClass))
typedef struct _GimpPreviewClass GimpPreviewClass;
@ -71,12 +72,14 @@ struct _GimpPreviewClass
{
GtkPreviewClass parent_class;
/* signals */
void (* clicked) (GimpPreview *preview);
void (* double_clicked) (GimpPreview *preview);
void (* extended_clicked) (GimpPreview *preview,
guint modifier_state);
void (* context) (GimpPreview *preview);
/* virtual functions */
void (* render) (GimpPreview *preview);
void (* get_size) (GimpPreview *preview,
gint size,
@ -87,7 +90,7 @@ struct _GimpPreviewClass
};
GtkType gimp_preview_get_type (void);
GType gimp_preview_get_type (void);
GtkWidget * gimp_preview_new (GimpViewable *viewable,
gint size,