Corrcted accel keys for bitmap menus.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8335 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2000-09-12 08:18:03 +00:00
parent fcaf9e704e
commit cc47eed9ca
2 changed files with 84 additions and 112 deletions

View File

@@ -23,6 +23,7 @@
#endif // wxUSE_ACCEL
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
//-----------------------------------------------------------------------------
@@ -36,7 +37,9 @@ extern bool g_isIdle;
static wxString GetHotKey( const wxMenuItem& item );
#endif
////// BEGIN CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// substitute for missing GtkPixmapMenuItem
//-----------------------------------------------------------------------------
#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))
@@ -73,11 +76,6 @@ 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);
/* Added by JACS */
GtkWidget* gtk_pixmap_menu_item_new_with_label (const gchar *label, GtkWidget** labelWidget);
////// END CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// idle system
@@ -977,18 +975,30 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
}
else if (mitem->GetBitmap().Ok()) // An item with bitmap
{
//// UNFINISHED, because I don't know how to handle hotkeys and
//// accelerators :-(
wxString text( mitem->GetText() );
const wxBitmap *bitmap = &mitem->GetBitmap();
GtkWidget* labelWidget;
menuItem = gtk_pixmap_menu_item_new_with_label(mitem->GetText().mb_str(), &labelWidget);
//menuItem = gtk_pixmap_menu_item_new_with_label("", &labelWidget);
mitem->SetLabelWidget(labelWidget);
menuItem = gtk_pixmap_menu_item_new ();
GtkWidget *label = gtk_accel_label_new (text.mb_str());
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_container_add (GTK_CONTAINER (menuItem), label);
guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), text.mb_str() );
gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menuItem);
if (accel_key != GDK_VoidSymbol)
{
gtk_widget_add_accelerator (menuItem,
"activate_item",
gtk_menu_ensure_uline_accel_group (GTK_MENU (m_menu)),
accel_key, 0,
GTK_ACCEL_LOCKED);
}
gtk_widget_show (label);
//// TODO: should we store the widget somewhere to avoid a memory leak?
GtkWidget* w = gtk_pixmap_new(mitem->GetBitmap().GetPixmap(), mitem->GetBitmap().GetMask() ? mitem->GetBitmap().GetMask()->GetBitmap() : (GdkBitmap* )NULL);
gtk_widget_show(w);
gtk_pixmap_menu_item_set_pixmap(GTK_PIXMAP_MENU_ITEM( menuItem ), w);
mitem->SetLabelWidget(label);
GtkWidget* pixmap = gtk_pixmap_new( bitmap->GetPixmap(), bitmap->GetMask() ? bitmap->GetMask()->GetBitmap() : (GdkBitmap* )NULL);
gtk_widget_show(pixmap);
gtk_pixmap_menu_item_set_pixmap(GTK_PIXMAP_MENU_ITEM( menuItem ), pixmap);
gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
@@ -996,9 +1006,6 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
gtk_menu_append( GTK_MENU(m_menu), menuItem );
gtk_widget_show( menuItem );
//mitem->SetMenuItem(menuItem);
//mitem->SetText(mitem->GetText());
appended = TRUE; // We've done this, don't do it again
}
else // a normal item
@@ -1209,7 +1216,9 @@ static wxString GetHotKey( const wxMenuItem& item )
#endif // wxUSE_ACCEL
////// BEGIN CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// substitute for missing GtkPixmapMenuItem
//-----------------------------------------------------------------------------
/*
* Copyright (C) 1998, 1999, 2000 Free Software Foundation
@@ -1238,7 +1247,6 @@ static wxString GetHotKey( const wxMenuItem& item )
/* Author: Dietmar Maurer <dm@vlsivie.tuwien.ac.at> */
//#include "gtkpixmapmenuitem.h"
#include <gtk/gtkaccellabel.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkmenuitem.h>
@@ -1577,26 +1585,4 @@ changed_have_pixmap_status (GtkPixmapMenuItem *menu_item)
gtk_widget_queue_resize(GTK_WIDGET(menu_item));
}
/* Added by JACS */
GtkWidget*
gtk_pixmap_menu_item_new_with_label (const gchar *label, GtkWidget** labelWidget)
{
GtkWidget *menu_item;
GtkWidget *accel_label;
menu_item = gtk_pixmap_menu_item_new ();
accel_label = gtk_accel_label_new (label);
if (labelWidget)
*labelWidget = accel_label;
gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
gtk_container_add (GTK_CONTAINER (menu_item), accel_label);
gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menu_item);
gtk_widget_show (accel_label);
return menu_item;
}
////// END CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////

View File

@@ -23,6 +23,7 @@
#endif // wxUSE_ACCEL
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
//-----------------------------------------------------------------------------
@@ -36,7 +37,9 @@ extern bool g_isIdle;
static wxString GetHotKey( const wxMenuItem& item );
#endif
////// BEGIN CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// substitute for missing GtkPixmapMenuItem
//-----------------------------------------------------------------------------
#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))
@@ -73,11 +76,6 @@ 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);
/* Added by JACS */
GtkWidget* gtk_pixmap_menu_item_new_with_label (const gchar *label, GtkWidget** labelWidget);
////// END CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// idle system
@@ -977,18 +975,30 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
}
else if (mitem->GetBitmap().Ok()) // An item with bitmap
{
//// UNFINISHED, because I don't know how to handle hotkeys and
//// accelerators :-(
wxString text( mitem->GetText() );
const wxBitmap *bitmap = &mitem->GetBitmap();
GtkWidget* labelWidget;
menuItem = gtk_pixmap_menu_item_new_with_label(mitem->GetText().mb_str(), &labelWidget);
//menuItem = gtk_pixmap_menu_item_new_with_label("", &labelWidget);
mitem->SetLabelWidget(labelWidget);
menuItem = gtk_pixmap_menu_item_new ();
GtkWidget *label = gtk_accel_label_new (text.mb_str());
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_container_add (GTK_CONTAINER (menuItem), label);
guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), text.mb_str() );
gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menuItem);
if (accel_key != GDK_VoidSymbol)
{
gtk_widget_add_accelerator (menuItem,
"activate_item",
gtk_menu_ensure_uline_accel_group (GTK_MENU (m_menu)),
accel_key, 0,
GTK_ACCEL_LOCKED);
}
gtk_widget_show (label);
//// TODO: should we store the widget somewhere to avoid a memory leak?
GtkWidget* w = gtk_pixmap_new(mitem->GetBitmap().GetPixmap(), mitem->GetBitmap().GetMask() ? mitem->GetBitmap().GetMask()->GetBitmap() : (GdkBitmap* )NULL);
gtk_widget_show(w);
gtk_pixmap_menu_item_set_pixmap(GTK_PIXMAP_MENU_ITEM( menuItem ), w);
mitem->SetLabelWidget(label);
GtkWidget* pixmap = gtk_pixmap_new( bitmap->GetPixmap(), bitmap->GetMask() ? bitmap->GetMask()->GetBitmap() : (GdkBitmap* )NULL);
gtk_widget_show(pixmap);
gtk_pixmap_menu_item_set_pixmap(GTK_PIXMAP_MENU_ITEM( menuItem ), pixmap);
gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
@@ -996,9 +1006,6 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
gtk_menu_append( GTK_MENU(m_menu), menuItem );
gtk_widget_show( menuItem );
//mitem->SetMenuItem(menuItem);
//mitem->SetText(mitem->GetText());
appended = TRUE; // We've done this, don't do it again
}
else // a normal item
@@ -1209,7 +1216,9 @@ static wxString GetHotKey( const wxMenuItem& item )
#endif // wxUSE_ACCEL
////// BEGIN CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////
//-----------------------------------------------------------------------------
// substitute for missing GtkPixmapMenuItem
//-----------------------------------------------------------------------------
/*
* Copyright (C) 1998, 1999, 2000 Free Software Foundation
@@ -1238,7 +1247,6 @@ static wxString GetHotKey( const wxMenuItem& item )
/* Author: Dietmar Maurer <dm@vlsivie.tuwien.ac.at> */
//#include "gtkpixmapmenuitem.h"
#include <gtk/gtkaccellabel.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkmenuitem.h>
@@ -1577,26 +1585,4 @@ changed_have_pixmap_status (GtkPixmapMenuItem *menu_item)
gtk_widget_queue_resize(GTK_WIDGET(menu_item));
}
/* Added by JACS */
GtkWidget*
gtk_pixmap_menu_item_new_with_label (const gchar *label, GtkWidget** labelWidget)
{
GtkWidget *menu_item;
GtkWidget *accel_label;
menu_item = gtk_pixmap_menu_item_new ();
accel_label = gtk_accel_label_new (label);
if (labelWidget)
*labelWidget = accel_label;
gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
gtk_container_add (GTK_CONTAINER (menu_item), accel_label);
gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menu_item);
gtk_widget_show (accel_label);
return menu_item;
}
////// END CODE ADAPTED FROM GTKPIXMAPMENUITEM.C IN LIBGNOMEUI //////