summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorleo2001-01-07 14:53:18 +0000
committerleo2001-01-07 14:53:18 +0000
commitd3453f15e6d7ae9c3d74766e856f927267870bcf (patch)
tree9c691e78223382eec9d4e08cddcac4472ba74d1b /linux
parent674f6ff65189c34ba11c3c4408bf7f72021c2975 (diff)
Added icons to the menus
git-svn-id: http://svn.leocad.org/trunk@209 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'linux')
-rwxr-xr-xlinux/gtkmisc.cpp34
-rw-r--r--linux/menu.cpp79
-rw-r--r--linux/pixmenu.c291
-rw-r--r--linux/pixmenu.h59
4 files changed, 435 insertions, 28 deletions
diff --git a/linux/gtkmisc.cpp b/linux/gtkmisc.cpp
index 436f4e3..c0e9bf3 100755
--- a/linux/gtkmisc.cpp
+++ b/linux/gtkmisc.cpp
@@ -7,6 +7,8 @@
#include "gtkmisc.h"
#include "globals.h"
#include "project.h"
+#include "pixmenu.h"
+#include "gtktools.h"
// =============================================================================
// Pixmap functions
@@ -157,6 +159,38 @@ GtkWidget* create_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_
return item;
}
+GtkWidget* create_pixmap_menu_item (GtkWidget *menu, gchar *label, gchar **pixmap, GtkAccelGroup *menu_accel,
+ GtkSignalFunc func, GtkObject *window, int id, const char* data)
+{
+ GtkWidget *item, *accel_label, *pixmap_widget;
+ guint tmp_key;
+
+ item = gtk_pixmap_menu_item_new ();
+
+ accel_label = gtk_accel_label_new (label);
+ gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
+
+ gtk_container_add (GTK_CONTAINER (item), accel_label);
+ gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), item);
+ gtk_widget_show (accel_label);
+
+ pixmap_widget = new_pixmap (GTK_WIDGET (window), pixmap);
+ gtk_widget_show (pixmap_widget);
+ gtk_pixmap_menu_item_set_pixmap (GTK_PIXMAP_MENU_ITEM (item), pixmap_widget);
+
+ tmp_key = gtk_label_parse_uline (GTK_LABEL (accel_label), label);
+ gtk_widget_add_accelerator (item, "activate_item", menu_accel, tmp_key, 0, (GtkAccelFlags)0);
+
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (func), GINT_TO_POINTER (id));
+
+ if (data != NULL)
+ gtk_object_set_data (window, data, item);
+
+ return item;
+}
+
GtkWidget* create_check_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel,
GtkSignalFunc func, GtkObject *window, int id, const char* data)
{
diff --git a/linux/menu.cpp b/linux/menu.cpp
index 63cb107..35b656e 100644
--- a/linux/menu.cpp
+++ b/linux/menu.cpp
@@ -6,9 +6,22 @@
#include "typedefs.h"
#include "main.h"
#include "gtkmisc.h"
+#include "mainwnd.h"
+
void create_main_menu (GtkObject *window, GtkWidget *vbox)
{
+#include "pixmaps/st-new.xpm"
+#include "pixmaps/st-open.xpm"
+#include "pixmaps/st-save.xpm"
+#include "pixmaps/photo.xpm"
+#include "pixmaps/info.xpm"
+#include "pixmaps/st-undo.xpm"
+#include "pixmaps/st-redo.xpm"
+#include "pixmaps/st-cut.xpm"
+#include "pixmaps/st-copy.xpm"
+#include "pixmaps/st-paste.xpm"
+
GtkWidget *handle_box, *menu_bar, *menu, *menu_in_menu, *item;
GtkAccelGroup *accel, *menu_accel, *menu_in_menu_accel;
@@ -25,20 +38,20 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox)
menu = create_sub_menu (menu_bar, "_File", accel, &menu_accel);
menu_tearoff (menu);
- create_menu_item (menu, "_New", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_FILE_NEW, "menu_file_new");
- create_menu_item (menu, "_Open...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_FILE_OPEN, "menu_file_open");
+ create_pixmap_menu_item (menu, "_New", st_new, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_FILE_NEW, "menu_file_new");
+ create_pixmap_menu_item (menu, "_Open...", st_open, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_FILE_OPEN, "menu_file_open");
create_menu_item (menu, "_Merge...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
window, LC_FILE_MERGE, "menu_file_merge");
menu_separator (menu);
- create_menu_item (menu, "_Save", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_FILE_SAVE, "menu_file_save");
+ create_pixmap_menu_item (menu, "_Save", st_save, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_FILE_SAVE, "menu_file_save");
create_menu_item (menu, "Save _As...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
window, LC_FILE_SAVEAS, "menu_file_saveas");
- create_menu_item (menu, "Save Pic_ture...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_FILE_PICTURE, "menu_file_picture");
+ create_pixmap_menu_item (menu, "Save Pic_ture...", photo, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_FILE_PICTURE, "menu_file_picture");
menu_in_menu = create_menu_in_menu (menu, "Ex_port", menu_accel, &menu_in_menu_accel);
create_menu_item (menu_in_menu, "_HTML...", menu_in_menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
@@ -49,22 +62,29 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox)
window, LC_FILE_WAVEFRONT, "menu_file_wavefront");
menu_separator (menu);
- create_menu_item (menu, "Propert_ies...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_FILE_PROPERTIES, "menu_file_properties");
+ create_pixmap_menu_item (menu, "Propert_ies...", info, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_FILE_PROPERTIES, "menu_file_properties");
create_menu_item (menu, "Pieces _Library Manager...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
window, LC_FILE_LIBRARY, "menu_file_library");
create_menu_item (menu, "Terrain _Editor...", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
window, LC_FILE_TERRAIN, "menu_file_terrain");
menu_separator (menu);
- create_menu_item (menu, "1", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
- window, ID_FILE_RECENT1, "menu_file_recent1");
- create_menu_item (menu, "2", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
- window, ID_FILE_RECENT2, "menu_file_recent2");
- create_menu_item (menu, "3", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
- window, ID_FILE_RECENT3, "menu_file_recent3");
- create_menu_item (menu, "4", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
- window, ID_FILE_RECENT4, "menu_file_recent4");
+ BaseMenuItem base;
+ base.accel = menu_accel;
+
+ base.widget = create_menu_item (menu, "1", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_FILE_RECENT1, "menu_file_recent1");
+ main_window->SetMenuItem (LC_MAINWND_RECENT1, &base);
+ base.widget = create_menu_item (menu, "2", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_FILE_RECENT2, "menu_file_recent2");
+ main_window->SetMenuItem (LC_MAINWND_RECENT2, &base);
+ base.widget = create_menu_item (menu, "3", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_FILE_RECENT3, "menu_file_recent3");
+ main_window->SetMenuItem (LC_MAINWND_RECENT3, &base);
+ base.widget = create_menu_item (menu, "4", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_FILE_RECENT4, "menu_file_recent4");
+ main_window->SetMenuItem (LC_MAINWND_RECENT4, &base);
gtk_object_set_data (window, "file_menu_accel", menu_accel);
menu_separator (menu);
@@ -75,18 +95,18 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox)
menu = create_sub_menu (menu_bar, "_Edit", accel, &menu_accel);
menu_tearoff (menu);
- create_menu_item (menu, "_Undo", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_EDIT_UNDO, "menu_edit_undo");
- create_menu_item (menu, "_Redo", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_EDIT_REDO, "menu_edit_redo");
+ create_pixmap_menu_item (menu, "_Undo", st_undo, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_EDIT_UNDO, "menu_edit_undo");
+ create_pixmap_menu_item (menu, "_Redo", st_redo, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_EDIT_REDO, "menu_edit_redo");
menu_separator (menu);
- create_menu_item (menu, "Cu_t", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_EDIT_CUT, "menu_edit_cut");
- create_menu_item (menu, "_Copy", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_EDIT_COPY, "menu_edit_copy");
- create_menu_item (menu, "_Paste", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
- window, LC_EDIT_PASTE, "menu_edit_paste");
+ create_pixmap_menu_item (menu, "Cu_t", st_cut, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_EDIT_CUT, "menu_edit_cut");
+ create_pixmap_menu_item (menu, "_Copy", st_copy, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_EDIT_COPY, "menu_edit_copy");
+ create_pixmap_menu_item (menu, "_Paste", st_paste, menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
+ window, LC_EDIT_PASTE, "menu_edit_paste");
menu_separator (menu);
create_menu_item (menu, "Select _All", menu_accel, GTK_SIGNAL_FUNC (OnCommandDirect),
@@ -173,6 +193,9 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox)
window, LC_VIEW_ZOOMEXTENTS, "menu_view_zoomextents");
menu_separator (menu);
+ create_menu_item (menu, "_Create", menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_VIEW_CREATE, "menu_view_create");
+
menu_in_menu = create_menu_in_menu (menu, "Vie_wports", menu_accel, &menu_in_menu_accel);
item = create_radio_menu_pixmap (menu_in_menu, NULL, "vports01.xpm", menu_in_menu_accel,
GTK_SIGNAL_FUNC (OnCommand), window,
diff --git a/linux/pixmenu.c b/linux/pixmenu.c
new file mode 100644
index 0000000..004b32c
--- /dev/null
+++ b/linux/pixmenu.c
@@ -0,0 +1,291 @@
+/* Author: Dietmar Maurer <dm@vlsivie.tuwien.ac.at> */
+
+#include "pixmenu.h"
+#include <gtk/gtkaccellabel.h>
+#include <gtk/gtksignal.h>
+
+static void gtk_pixmap_menu_item_class_init (GtkPixmapMenuItemClass *klass);
+static void gtk_pixmap_menu_item_init (GtkPixmapMenuItem *menu_item);
+static void gtk_pixmap_menu_item_draw (GtkWidget *widget,
+ GdkRectangle *area);
+static gint gtk_pixmap_menu_item_expose (GtkWidget *widget,
+ GdkEventExpose *event);
+
+/* we must override the following functions */
+
+static void gtk_pixmap_menu_item_map (GtkWidget *widget);
+static void gtk_pixmap_menu_item_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void gtk_pixmap_menu_item_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer callback_data);
+static void gtk_pixmap_menu_item_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gtk_pixmap_menu_item_remove (GtkContainer *container,
+ GtkWidget *child);
+
+
+static GtkMenuItemClass *parent_class = NULL;
+
+#define INDENT 18
+
+GtkType
+gtk_pixmap_menu_item_get_type (void)
+{
+ static GtkType pixmap_menu_item_type = 0;
+
+ if (!pixmap_menu_item_type)
+ {
+ GtkTypeInfo pixmap_menu_item_info =
+ {
+ "GtkPixmapMenuItem",
+ sizeof (GtkPixmapMenuItem),
+ sizeof (GtkPixmapMenuItemClass),
+ (GtkClassInitFunc) gtk_pixmap_menu_item_class_init,
+ (GtkObjectInitFunc) gtk_pixmap_menu_item_init,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ pixmap_menu_item_type = gtk_type_unique (gtk_menu_item_get_type (),
+ &pixmap_menu_item_info);
+ }
+
+ return pixmap_menu_item_type;
+}
+
+/**
+ * gtk_pixmap_menu_item_new
+ *
+ * Creates a new pixmap menu item. Use gtk_pixmap_menu_item_set_pixmap()
+ * to set the pixmap wich is displayed at the left side.
+ *
+ * Returns:
+ * &GtkWidget pointer to new menu item
+ **/
+
+GtkWidget*
+gtk_pixmap_menu_item_new (void)
+{
+ return GTK_WIDGET (gtk_type_new (gtk_pixmap_menu_item_get_type ()));
+}
+
+static void
+gtk_pixmap_menu_item_class_init (GtkPixmapMenuItemClass *klass)
+{
+ GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkMenuItemClass *menu_item_class;
+ GtkContainerClass *container_class;
+
+ object_class = (GtkObjectClass*) klass;
+ widget_class = (GtkWidgetClass*) klass;
+ menu_item_class = (GtkMenuItemClass*) klass;
+ container_class = (GtkContainerClass*) klass;
+
+ parent_class = gtk_type_class (gtk_menu_item_get_type ());
+
+ widget_class->draw = gtk_pixmap_menu_item_draw;
+ widget_class->expose_event = gtk_pixmap_menu_item_expose;
+ widget_class->map = gtk_pixmap_menu_item_map;
+ widget_class->size_allocate = gtk_pixmap_menu_item_size_allocate;
+ widget_class->size_request = gtk_pixmap_menu_item_size_request;
+
+ container_class->forall = gtk_pixmap_menu_item_forall;
+ container_class->remove = gtk_pixmap_menu_item_remove;
+ menu_item_class->toggle_size = INDENT;
+}
+
+static void
+gtk_pixmap_menu_item_init (GtkPixmapMenuItem *menu_item)
+{
+ menu_item->pixmap = NULL;
+}
+
+static void
+gtk_pixmap_menu_item_draw (GtkWidget *widget,
+ GdkRectangle *area)
+{
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (widget));
+ g_return_if_fail (area != NULL);
+
+ if (GTK_WIDGET_CLASS (parent_class)->draw)
+ (* GTK_WIDGET_CLASS (parent_class)->draw) (widget, area);
+
+ if (GTK_WIDGET_DRAWABLE (widget) &&
+ GTK_PIXMAP_MENU_ITEM(widget)->pixmap) {
+ gtk_widget_draw(GTK_WIDGET(GTK_PIXMAP_MENU_ITEM(widget)->pixmap),NULL);
+ }
+}
+
+static gint
+gtk_pixmap_menu_item_expose (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_PIXMAP_MENU_ITEM (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (GTK_WIDGET_CLASS (parent_class)->expose_event)
+ (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
+
+ if (GTK_WIDGET_DRAWABLE (widget) &&
+ GTK_PIXMAP_MENU_ITEM(widget)->pixmap) {
+ gtk_widget_draw(GTK_WIDGET(GTK_PIXMAP_MENU_ITEM(widget)->pixmap),NULL);
+ }
+
+ return FALSE;
+}
+
+/**
+ * gtk_pixmap_menu_item_set_pixmap
+ * @menu_item: Pointer to the pixmap menu item
+ * @pixmap: Pointer to a pixmap widget
+ *
+ * Set the pixmap of the menu item.
+ *
+ **/
+
+void
+gtk_pixmap_menu_item_set_pixmap (GtkPixmapMenuItem *menu_item,
+ GtkWidget *pixmap)
+{
+ g_return_if_fail (menu_item != NULL);
+ g_return_if_fail (pixmap != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (menu_item));
+ g_return_if_fail (GTK_IS_WIDGET (pixmap));
+ g_return_if_fail (menu_item->pixmap == NULL);
+
+ gtk_widget_set_parent (pixmap, GTK_WIDGET (menu_item));
+ menu_item->pixmap = pixmap;
+
+ if (GTK_WIDGET_VISIBLE (pixmap->parent)) {
+ if (GTK_WIDGET_REALIZED (pixmap->parent) &&
+ !GTK_WIDGET_REALIZED (pixmap))
+ gtk_widget_realize (pixmap);
+
+ if (GTK_WIDGET_MAPPED (pixmap->parent) &&
+ !GTK_WIDGET_MAPPED (pixmap))
+ gtk_widget_map (pixmap);
+ }
+
+ if (GTK_WIDGET_VISIBLE (pixmap) && GTK_WIDGET_VISIBLE (menu_item))
+ gtk_widget_queue_resize (pixmap);
+
+}
+
+static void
+gtk_pixmap_menu_item_map (GtkWidget *widget)
+{
+ GtkPixmapMenuItem *menu_item;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (widget));
+
+ menu_item = GTK_PIXMAP_MENU_ITEM(widget);
+
+ GTK_WIDGET_CLASS(parent_class)->map(widget);
+
+ if (menu_item->pixmap &&
+ GTK_WIDGET_VISIBLE (menu_item->pixmap) &&
+ !GTK_WIDGET_MAPPED (menu_item->pixmap))
+ gtk_widget_map (menu_item->pixmap);
+}
+
+static void
+gtk_pixmap_menu_item_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GtkPixmapMenuItem *menu_item;
+ GtkAllocation child_allocation;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (widget));
+ g_return_if_fail (allocation != NULL);
+
+ menu_item = GTK_PIXMAP_MENU_ITEM(widget);
+
+ if (menu_item->pixmap) {
+ child_allocation.x = GTK_CONTAINER (widget)->border_width+
+ widget->style->klass->xthickness + 3;
+ child_allocation.y = GTK_CONTAINER (widget)->border_width+4;
+ child_allocation.width = INDENT-child_allocation.x;
+ child_allocation.height = allocation->height-2*child_allocation.y;
+ gtk_widget_size_allocate (menu_item->pixmap, &child_allocation);
+ }
+
+ GTK_WIDGET_CLASS(parent_class)->size_allocate(widget,allocation);
+}
+
+static void
+gtk_pixmap_menu_item_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ GtkPixmapMenuItem *menu_item;
+
+ g_return_if_fail (container != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (container));
+ g_return_if_fail (callback != NULL);
+
+ menu_item = GTK_PIXMAP_MENU_ITEM (container);
+
+ if (menu_item->pixmap)
+ (* callback) (menu_item->pixmap, callback_data);
+
+ GTK_CONTAINER_CLASS(parent_class)->forall(container,include_internals,
+ callback,callback_data);
+}
+
+static void
+gtk_pixmap_menu_item_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ GtkPixmapMenuItem *menu_item;
+ GtkRequisition req;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_MENU_ITEM (widget));
+ g_return_if_fail (requisition != NULL);
+
+ GTK_WIDGET_CLASS(parent_class)->size_request(widget,requisition);
+
+ menu_item = GTK_PIXMAP_MENU_ITEM (widget);
+
+ /* some widgets needs this */
+ if (menu_item->pixmap)
+ gtk_widget_size_request(menu_item->pixmap,&req);
+
+}
+
+static void
+gtk_pixmap_menu_item_remove (GtkContainer *container,
+ GtkWidget *child)
+{
+ GtkBin *bin;
+ gboolean widget_was_visible;
+
+ g_return_if_fail (container != NULL);
+ g_return_if_fail (GTK_IS_PIXMAP_MENU_ITEM (container));
+ g_return_if_fail (child != NULL);
+ g_return_if_fail (GTK_IS_WIDGET (child));
+
+ bin = GTK_BIN (container);
+ g_return_if_fail ((bin->child == child ||
+ (GTK_PIXMAP_MENU_ITEM(container)->pixmap == child)));
+
+ widget_was_visible = GTK_WIDGET_VISIBLE (child);
+
+ gtk_widget_unparent (child);
+ if (bin->child == child)
+ bin->child = NULL;
+ else
+ GTK_PIXMAP_MENU_ITEM(container)->pixmap = NULL;
+
+ if (widget_was_visible)
+ gtk_widget_queue_resize (GTK_WIDGET (container));
+}
diff --git a/linux/pixmenu.h b/linux/pixmenu.h
new file mode 100644
index 0000000..f61449b
--- /dev/null
+++ b/linux/pixmenu.h
@@ -0,0 +1,59 @@
+/* Author: Dietmar Maurer <dm@vlsivie.tuwien.ac.at> */
+/* Description:
+
+ This widget works like a normal menu_item, but you can insert a
+ arbitrary widget (most often a pixmap widget), which is displayed
+ at the left side. The advantage is that indentation is handled the
+ same way as GTK does.
+
+ (i.e if you create a menu with a gtk_check_menu_item, all normal
+ menu_items are automatically indented by GTK - so if you use a normal
+ menu_item to display pixmaps at the left side, the pixmaps will be
+ indented, which is not what you want. This widget solves the problem)
+
+ */
+
+#ifndef __GTK_MENU_PIXMAP_ITEM_H__
+#define __GTK_MENU_PIXMAP_ITEM_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <gtk/gtkpixmap.h>
+#include <gtk/gtkmenuitem.h>
+
+
+#define GTK_TYPE_PIXMAP_MENU_ITEM (gtk_pixmap_menu_item_get_type ())
+#define GTK_PIXMAP_MENU_ITEM(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_PIXMAP_MENU_ITEM, GtkPixmapMenuItem))
+#define GTK_PIXMAP_MENU_ITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_PIXMAP_MENU_ITEM, GtkPixmapMenuItemClass))
+#define GTK_IS_PIXMAP_MENU_ITEM(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_PIXMAP_MENU_ITEM))
+#define GTK_IS_PIXMAP_MENU_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PIXMAP_MENU_ITEM))
+
+
+typedef struct _GtkPixmapMenuItem GtkPixmapMenuItem;
+typedef struct _GtkPixmapMenuItemClass GtkPixmapMenuItemClass;
+
+struct _GtkPixmapMenuItem
+{
+ GtkMenuItem menu_item;
+
+ GtkWidget *pixmap;
+};
+
+struct _GtkPixmapMenuItemClass
+{
+ GtkMenuItemClass parent_class;
+};
+
+
+GtkType gtk_pixmap_menu_item_get_type (void);
+GtkWidget* gtk_pixmap_menu_item_new (void);
+void gtk_pixmap_menu_item_set_pixmap (GtkPixmapMenuItem *menu_item,
+ GtkWidget *pixmap);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __GTK_PIXMAP_MENU_ITEM_H__ */