summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk
diff options
context:
space:
mode:
authorAntonio Fernandez <antonio.fernandez@aentos.es>2012-08-16 22:48:54 +0100
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2012-11-14 13:52:42 +0100
commitbd777c0952266a988001d2008117b3b5cbf9d091 (patch)
treecc8a3b6e18e85dc8077d1b3a902d75f1a110c606 /vcl/unx/gtk
parentbbd5e6acb0da1382644e6e39bdd7ca6e96a6d715 (diff)
GLOActionGroup partially implemented. Menus work but no special items shown.
Change-Id: I7c48fbc5763daf789e7347cfedc62f14be53c934
Diffstat (limited to 'vcl/unx/gtk')
-rw-r--r--vcl/unx/gtk/window/gloactiongroup.cxx263
-rw-r--r--vcl/unx/gtk/window/gtksalmenu.cxx130
2 files changed, 159 insertions, 234 deletions
diff --git a/vcl/unx/gtk/window/gloactiongroup.cxx b/vcl/unx/gtk/window/gloactiongroup.cxx
index 4e99712c0ade..07919d7aeed9 100644
--- a/vcl/unx/gtk/window/gloactiongroup.cxx
+++ b/vcl/unx/gtk/window/gloactiongroup.cxx
@@ -1,26 +1,26 @@
#include <unx/gtk/gloactiongroup.h>
-//#include "gsimpleaction.h"
-//#include "gactionmap.h"
-//#include "gaction.h"
+#include <unx/gtk/gtkinst.hxx>
+#include <unx/gtk/gtkframe.hxx>
+#include <unx/gtk/gtksalmenu.hxx>
+#include <vcl/menu.hxx>
#include <stdio.h>
+#include <iostream>
+using namespace std;
struct _GLOActionGroupPrivate
{
- GHashTable *table; /* string -> GAction */
+ GHashTable *table; /* string -> GtkSalMenuItem* */
};
static void g_lo_action_group_iface_init (GActionGroupInterface *);
-static void g_lo_action_group_map_iface_init (GActionMapInterface *);
G_DEFINE_TYPE_WITH_CODE (GLOActionGroup,
g_lo_action_group, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP,
- g_lo_action_group_iface_init);
- G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_MAP,
- g_lo_action_group_map_iface_init))
+ g_lo_action_group_iface_init));
static gchar **
g_lo_action_group_list_actions (GActionGroup *group)
@@ -52,28 +52,32 @@ g_lo_action_group_query_action (GActionGroup *group,
GVariant **state_hint,
GVariant **state)
{
+// printf("%s - %s\n", __FUNCTION__, action_name);
+
GLOActionGroup *loGroup = G_LO_ACTION_GROUP (group);
- GAction *action;
+ GtkSalMenuItem* item_info;
- action = G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
+ item_info = static_cast< GtkSalMenuItem* >( g_hash_table_lookup (loGroup->priv->table, action_name) );
- if (action == NULL)
+ if (item_info == NULL)
return FALSE;
- if (enabled)
- *enabled = g_action_get_enabled (action);
+ if (enabled) {
+ sal_Bool bEnabled = item_info->mpVCLMenu->IsItemEnabled( item_info->mnId );
+ *enabled = (bEnabled) ? TRUE : FALSE;
+ }
if (parameter_type)
- *parameter_type = g_action_get_parameter_type (action);
+ *parameter_type = NULL;
if (state_type)
- *state_type = g_action_get_state_type (action);
+ *state_type = item_info->mpStateType;
if (state_hint)
- *state_hint = g_action_get_state_hint (action);
+ *state_hint = NULL;
if (state)
- *state = g_action_get_state (action);
+ *state = item_info->mpState;
return TRUE;
}
@@ -83,15 +87,25 @@ g_lo_action_group_change_state (GActionGroup *group,
const gchar *action_name,
GVariant *value)
{
- GLOActionGroup *loGroup = G_LO_ACTION_GROUP (group);
- GAction *action;
+ if (!action_name || !value)
+ return;
+
+ GLOActionGroup* lo_group = G_LO_ACTION_GROUP (group);
+ GtkSalMenuItem* item_info;
- action = G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
+ item_info = static_cast<GtkSalMenuItem*>( g_hash_table_lookup (lo_group->priv->table, action_name) );
- if (action == NULL)
+ if (!item_info)
return;
- g_action_change_state (action, value);
+ if (!item_info->mpStateType) {
+ item_info->mpStateType = g_variant_type_copy(g_variant_get_type(value));
+ }
+
+ if (g_variant_is_of_type(value, item_info->mpStateType)) {
+ item_info->mpState = g_variant_ref_sink(value);
+ g_action_group_action_state_changed(group, action_name, value);
+ }
}
static void
@@ -100,109 +114,76 @@ g_lo_action_group_activate (GActionGroup *group,
GVariant *parameter)
{
GLOActionGroup *loGroup = G_LO_ACTION_GROUP (group);
- GAction *action;
+ GtkSalMenuItem *pSalMenuItem;
- action = G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
+ pSalMenuItem = static_cast< GtkSalMenuItem* >( g_hash_table_lookup (loGroup->priv->table, action_name) );
- if (action == NULL)
+ if (pSalMenuItem == NULL || pSalMenuItem->mpSubMenu )
return;
- g_action_activate (action, parameter);
-}
-
-static void
-action_enabled_notify (GAction *action,
- GParamSpec *pspec,
- gpointer user_data)
-{
- g_action_group_action_enabled_changed (G_ACTION_GROUP( user_data ),
- g_action_get_name (action),
- g_action_get_enabled (action));
-}
-
-static void
-action_state_notify (GAction *action,
- GParamSpec *pspec,
- gpointer user_data)
-{
- GVariant *value;
-
- value = g_action_get_state (action);
- g_action_group_action_state_changed (G_ACTION_GROUP( user_data ),
- g_action_get_name (action),
- value);
- g_variant_unref (value);
-}
+ GTK_YIELD_GRAB();
-static void
-g_lo_action_group_disconnect (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- g_signal_handlers_disconnect_by_func (value, (gpointer) action_enabled_notify,
- user_data);
- g_signal_handlers_disconnect_by_func (value, (gpointer) action_state_notify,
- user_data);
-}
+ const GtkSalFrame *pFrame = pSalMenuItem->mpParentMenu ? pSalMenuItem->mpParentMenu->GetFrame() : NULL;
-static GAction *
-g_lo_action_group_lookup_action (GActionMap *action_map,
- const gchar *action_name)
-{
- GLOActionGroup *loGroup = G_LO_ACTION_GROUP (action_map);
-
- return G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
-}
-
-static void
-g_lo_action_group_add_action (GActionMap *action_map,
- GAction *action)
-{
- GLOActionGroup *loGroup = G_LO_ACTION_GROUP (action_map);
- const gchar *action_name;
- GAction *old_action;
-
- action_name = g_action_get_name (action);
- old_action = G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
-
- if (old_action != action)
+ if ( pFrame && !pFrame->GetParent() ) {
+ ((PopupMenu*) pSalMenuItem->mpVCLMenu)->SetSelectedEntry( pSalMenuItem->mnId );
+ SalMenuEvent aMenuEvt( pSalMenuItem->mnId, pSalMenuItem->mpVCLMenu );
+ pFrame->CallCallback( SALEVENT_MENUCOMMAND, &aMenuEvt );
+ }
+ else if ( pSalMenuItem->mpVCLMenu )
{
- if (old_action != NULL)
+ // if an item from submenu was selected. the corresponding Window does not exist because
+ // we use native popup menus, so we have to set the selected menuitem directly
+ // incidentally this of course works for top level popup menus, too
+ PopupMenu * pPopupMenu = dynamic_cast<PopupMenu *>(pSalMenuItem->mpVCLMenu);
+ if( pPopupMenu )
{
- g_action_group_action_removed (G_ACTION_GROUP (loGroup),
- action_name);
- g_lo_action_group_disconnect (NULL, old_action, loGroup);
+ // FIXME: revise this ugly code
+
+ // select handlers in vcl are dispatch on the original menu
+ // if not consumed by the select handler of the current menu
+ // however since only the starting menu ever came into Execute
+ // the hierarchy is not build up. Workaround this by getting
+ // the menu it should have been
+
+ // get started from hierarchy in vcl menus
+ GtkSalMenu* pParentMenu = pSalMenuItem->mpParentMenu;
+ Menu* pCurMenu = pSalMenuItem->mpVCLMenu;
+ while( pParentMenu && pParentMenu->GetMenu() )
+ {
+ pCurMenu = pParentMenu->GetMenu();
+ pParentMenu = pParentMenu->GetParentSalMenu();
+ }
+
+ pPopupMenu->SetSelectedEntry( pSalMenuItem->mnId );
+ pPopupMenu->ImplSelectWithStart( pCurMenu );
+ }
+ else
+ {
+ OSL_FAIL( "menubar item without frame !" );
}
-
- g_signal_connect (action, "notify::enabled",
- G_CALLBACK (action_enabled_notify), loGroup);
-
- if (g_action_get_state_type (action) != NULL)
- g_signal_connect (action, "notify::state",
- G_CALLBACK (action_state_notify), loGroup);
-
- g_hash_table_insert (loGroup->priv->table,
- g_strdup (action_name),
- g_object_ref (action));
-
- g_action_group_action_added (G_ACTION_GROUP (loGroup), action_name);
}
}
-static void
-g_lo_action_group_remove_action (GActionMap *action_map,
- const gchar *action_name)
+void
+g_lo_action_group_insert (GLOActionGroup *group,
+ const gchar *action_name,
+ gpointer action_info)
{
- GLOActionGroup *loGroup = G_LO_ACTION_GROUP (action_map);
- GAction *action;
+ g_return_if_fail (G_IS_LO_ACTION_GROUP (group));
- action = G_ACTION( g_hash_table_lookup (loGroup->priv->table, action_name) );
+ gpointer old_action;
- if (action != NULL)
+ old_action = g_hash_table_lookup (group->priv->table, action_name);
+
+ if (old_action != action_info)
{
- g_action_group_action_removed (G_ACTION_GROUP (loGroup), action_name);
- g_lo_action_group_disconnect (NULL, action, loGroup);
- g_hash_table_remove (loGroup->priv->table, action_name);
+ if (old_action != NULL)
+ g_action_group_action_removed (G_ACTION_GROUP (group), action_name);
+
+ g_hash_table_insert (group->priv->table, g_strdup (action_name), action_info);
+
+ g_action_group_action_added (G_ACTION_GROUP (group), action_name);
}
}
@@ -211,13 +192,9 @@ g_lo_action_group_finalize (GObject *object)
{
GLOActionGroup *loGroup = G_LO_ACTION_GROUP (object);
- g_hash_table_foreach (loGroup->priv->table,
- g_lo_action_group_disconnect,
- loGroup);
g_hash_table_unref (loGroup->priv->table);
- G_OBJECT_CLASS (g_lo_action_group_parent_class)
- ->finalize (object);
+ G_OBJECT_CLASS (g_lo_action_group_parent_class)->finalize (object);
}
static void
@@ -227,7 +204,7 @@ g_lo_action_group_init (GLOActionGroup *group)
G_TYPE_LO_ACTION_GROUP,
GLOActionGroupPrivate);
group->priv->table = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
+ g_free, NULL );
}
static void
@@ -249,36 +226,23 @@ g_lo_action_group_iface_init (GActionGroupInterface *iface)
iface->activate_action = g_lo_action_group_activate;
}
-static void
-g_lo_action_group_map_iface_init (GActionMapInterface *iface)
-{
- iface->add_action = g_lo_action_group_add_action;
- iface->remove_action = g_lo_action_group_remove_action;
- iface->lookup_action = g_lo_action_group_lookup_action;
-}
-
GLOActionGroup *
g_lo_action_group_new (void)
{
return G_LO_ACTION_GROUP( g_object_new (G_TYPE_LO_ACTION_GROUP, NULL) );
}
-GAction *
-g_lo_action_group_lookup (GLOActionGroup *group,
- const gchar *action_name)
-{
- g_return_val_if_fail (G_IS_LO_ACTION_GROUP (group), NULL);
-
- return g_action_map_lookup_action (G_ACTION_MAP (group), action_name);
-}
-
void
-g_lo_action_group_insert (GLOActionGroup *group,
- GAction *action)
+g_lo_action_group_set_action_enabled (GLOActionGroup *group,
+ const gchar *action_name,
+ gboolean enabled)
{
g_return_if_fail (G_IS_LO_ACTION_GROUP (group));
- g_action_map_add_action (G_ACTION_MAP (group), action);
+ g_action_group_action_enabled_changed(G_ACTION_GROUP(group),
+ action_name,
+ enabled);
+
}
void
@@ -287,38 +251,23 @@ g_lo_action_group_remove (GLOActionGroup *group,
{
g_return_if_fail (G_IS_LO_ACTION_GROUP (group));
- g_action_map_remove_action (G_ACTION_MAP (group), action_name);
+ if (action_name != NULL)
+ {
+ g_action_group_action_removed (G_ACTION_GROUP (group), action_name);
+ g_hash_table_remove (group->priv->table, action_name);
+ }
}
-// This function has been added to make current implementation of GtkSalMenu work.
void
g_lo_action_group_clear (GLOActionGroup *group)
{
g_return_if_fail (G_IS_LO_ACTION_GROUP (group));
- GAction *action;
-
GList* keys = g_hash_table_get_keys(group->priv->table);
- for ( GList* list = g_list_first(keys); list; list = g_list_next(list)) {
+ for ( GList* list = g_list_first(keys); list; list = g_list_next(list) ) {
gchar* action_name = (gchar*) list->data;
- action = G_ACTION( g_hash_table_lookup (group->priv->table, action_name) );
- if (action != NULL)
- {
- g_action_group_action_removed (G_ACTION_GROUP (group), action_name);
- g_lo_action_group_disconnect (NULL, action, group);
- g_hash_table_remove (group->priv->table, action_name);
- }
+ g_lo_action_group_remove( group, action_name );
}
}
-
-void
-g_lo_action_group_add_entries (GLOActionGroup *group,
- const GActionEntry *entries,
- gint n_entries,
- gpointer user_data)
-{
- g_action_map_add_action_entries (G_ACTION_MAP (group), entries, n_entries, user_data);
-}
-
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index b66d4d134f33..8467434661e1 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -35,59 +35,6 @@ isSpecialSubmenu (OUString command)
return FALSE;
}
-static void
-dispatchAction (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- GTK_YIELD_GRAB();
-
- if ( user_data ) {
- GtkSalMenuItem *pSalMenuItem = static_cast< GtkSalMenuItem* >( user_data );
-
- if ( !pSalMenuItem->mpSubMenu ) {
- const GtkSalFrame *pFrame = pSalMenuItem->mpParentMenu ? pSalMenuItem->mpParentMenu->GetFrame() : NULL;
-
- if ( pFrame && !pFrame->GetParent() ) {
- ((PopupMenu*) pSalMenuItem->mpVCLMenu)->SetSelectedEntry( pSalMenuItem->mnId );
- SalMenuEvent aMenuEvt( pSalMenuItem->mnId, pSalMenuItem->mpVCLMenu );
- pFrame->CallCallback( SALEVENT_MENUCOMMAND, &aMenuEvt );
- }
- else if ( pSalMenuItem->mpVCLMenu )
- {
- // if an item from submenu was selected. the corresponding Window does not exist because
- // we use native popup menus, so we have to set the selected menuitem directly
- // incidentally this of course works for top level popup menus, too
- PopupMenu * pPopupMenu = dynamic_cast<PopupMenu *>(pSalMenuItem->mpVCLMenu);
- if( pPopupMenu )
- {
- // FIXME: revise this ugly code
-
- // select handlers in vcl are dispatch on the original menu
- // if not consumed by the select handler of the current menu
- // however since only the starting menu ever came into Execute
- // the hierarchy is not build up. Workaround this by getting
- // the menu it should have been
-
- // get started from hierarchy in vcl menus
- GtkSalMenu* pParentMenu = pSalMenuItem->mpParentMenu;
- Menu* pCurMenu = pSalMenuItem->mpVCLMenu;
- while( pParentMenu && pParentMenu->GetMenu() )
- {
- pCurMenu = pParentMenu->GetMenu();
- pParentMenu = pParentMenu->GetParentSalMenu();
- }
-
- pPopupMenu->SetSelectedEntry( pSalMenuItem->mnId );
- pPopupMenu->ImplSelectWithStart( pCurMenu );
- }
- else
- OSL_FAIL( "menubar item without frame !" );
- }
- }
- }
-}
-
void generateActions( GtkSalMenu* pMenu, GLOActionGroup* pActionGroup )
{
if ( !pMenu || !pActionGroup )
@@ -96,8 +43,8 @@ void generateActions( GtkSalMenu* pMenu, GLOActionGroup* pActionGroup )
for (sal_uInt16 i = 0; i < pMenu->GetItemCount(); i++) {
GtkSalMenuItem *pSalMenuItem = pMenu->GetItemAtPos( i );
- if ( pSalMenuItem->mpAction ) {
- g_lo_action_group_insert( pActionGroup, pSalMenuItem->mpAction );
+ if ( pSalMenuItem->maCommand ) {
+ g_lo_action_group_insert( pActionGroup, pSalMenuItem->maCommand, pSalMenuItem );
}
generateActions( pSalMenuItem->mpSubMenu, pActionGroup );
@@ -116,6 +63,7 @@ void updateNativeMenu( GtkSalMenu* pMenu ) {
if ( pSalMenuItem->mpSubMenu && pSalMenuItem->mpSubMenu->GetMenu() ) {
pSalMenuItem->mpSubMenu->GetMenu()->Activate();
updateNativeMenu( pSalMenuItem->mpSubMenu );
+ pSalMenuItem->mpSubMenu->GetMenu()->Deactivate();
}
}
}
@@ -246,8 +194,6 @@ GtkSalMenu::GtkSalMenu( sal_Bool bMenuBar ) :
maSections.push_back( mpCurrentSection );
if (bMenuBar) {
-// mpActionGroup = G_ACTION_GROUP( g_lo_action_group_new() );
-
pSessionBus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
if(!pSessionBus) puts ("Fail bus get");
} else {
@@ -317,7 +263,14 @@ void GtkSalMenu::RemoveItem( unsigned nPos )
// if ( nPos < maItems.size() ) {
// GtkSalMenuItem* pSalMenuItem = maItems[ nPos ];
-// g_lo_menu_remove( G_LO_MENU( pSalMenuItem->mpParentSection ), pSalMenuItem->mnPos );
+// if ( pSalMenuItem->mpParentSection ) {
+// g_lo_menu_remove( G_LO_MENU( pSalMenuItem->mpParentSection ), pSalMenuItem->mnPos );
+// }
+
+// if ( mpActionGroup ) {
+// g_lo_action_group_remove( G_LO_ACTION_GROUP( mpActionGroup ), pSalMenuItem->maCommand );
+// }
+
// maItems.erase( maItems.begin() + nPos, maItems.begin() + nPos );
// }
}
@@ -397,18 +350,33 @@ const GtkSalFrame* GtkSalMenu::GetFrame() const
void GtkSalMenu::CheckItem( unsigned nPos, sal_Bool bCheck )
{
+ if ( mpActionGroup ) {
+ GtkSalMenuItem* pSalMenuItem = maItems[ nPos ];
+ MenuItemBits itemBits = pSalMenuItem->mpVCLMenu->GetItemBits( pSalMenuItem->mnId );
+
+ GVariant *pCheckValue = NULL;
+
+ if ( itemBits & MIB_CHECKABLE ) {
+ gboolean bCheckedValue = ( bCheck == sal_True ) ? TRUE : FALSE;
+ pCheckValue = g_variant_new_boolean( bCheckedValue );
+ }
+
+ g_action_group_change_action_state( mpActionGroup, pSalMenuItem->maCommand, pCheckValue );
+ }
}
void GtkSalMenu::EnableItem( unsigned nPos, sal_Bool bEnable )
{
- sal_uInt16 itemId = mpVCLMenu->GetItemId( nPos );
+// if ( mpActionGroup ) {
+// sal_uInt16 itemId = mpVCLMenu->GetItemId( nPos );
- GtkSalMenuItem *pSalMenuItem = GetSalMenuItem( itemId );
+// GtkSalMenuItem *pSalMenuItem = GetSalMenuItem( itemId );
- if ( pSalMenuItem && pSalMenuItem->mpAction ) {
- gboolean bItemEnabled = (bEnable == sal_True) ? TRUE : FALSE;
- g_simple_action_set_enabled( G_SIMPLE_ACTION( pSalMenuItem->mpAction ), bItemEnabled );
- }
+// if ( pSalMenuItem ) {
+// gboolean bItemEnabled = (bEnable == sal_True) ? TRUE : FALSE;
+// g_lo_action_group_set_action_enabled( G_LO_ACTION_GROUP( mpActionGroup ), pSalMenuItem->maCommand, bItemEnabled );
+// }
+// }
}
void GtkSalMenu::SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& rText )
@@ -454,23 +422,22 @@ void GtkSalMenu::SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const
GtkSalMenuItem* pGtkSalMenuItem = static_cast< GtkSalMenuItem* >( pSalMenuItem );
if ( pGtkSalMenuItem && pGtkSalMenuItem->mpMenuItem ) {
- if ( pGtkSalMenuItem->mpAction ) {
- g_object_unref( pGtkSalMenuItem->mpAction );
- pGtkSalMenuItem->mpAction = NULL;
- }
-
rtl::OString aOCommandStr = rtl::OUStringToOString( aCommandStr, RTL_TEXTENCODING_UTF8 );
- GSimpleAction *pAction = g_simple_action_new( aOCommandStr.getStr(), NULL );
+ if ( pGtkSalMenuItem->maCommand )
+ g_free( pGtkSalMenuItem->maCommand );
- // if ( !pGtkSalMenuItem->mpVCLMenu->GetPopupMenu( pGtkSalMenuItem->mnId ) ) {
- g_signal_connect(pAction, "activate", G_CALLBACK( dispatchAction ), pGtkSalMenuItem);
- // }
+ pGtkSalMenuItem->maCommand = g_strdup( aOCommandStr.getStr() );
+
+ if ( !pGtkSalMenuItem->mpVCLMenu->GetPopupMenu( pGtkSalMenuItem->mnId ) && mpActionGroup ) {
+ g_lo_action_group_insert( G_LO_ACTION_GROUP( mpActionGroup ), pGtkSalMenuItem->maCommand, pGtkSalMenuItem );
+ }
- pGtkSalMenuItem->mpAction = G_ACTION( pAction );
+ gchar* aItemCommand = g_strconcat("win.", pGtkSalMenuItem->maCommand, NULL );
- rtl::OString aItemCommand = "win." + aOCommandStr;
- g_lo_menu_item_set_action_and_target( pGtkSalMenuItem->mpMenuItem, aItemCommand.getStr(), NULL );
+ g_lo_menu_item_set_action_and_target( pGtkSalMenuItem->mpMenuItem, aItemCommand, NULL );
+
+ g_free( aItemCommand );
if ( pGtkSalMenuItem->mpParentSection ) {
g_lo_menu_remove( G_LO_MENU( pGtkSalMenuItem->mpParentSection ), pGtkSalMenuItem->mnPos );
@@ -498,14 +465,22 @@ void GtkSalMenu::Freeze()
GtkSalMenuItem::GtkSalMenuItem( const SalItemParams* pItemData ) :
mnId( pItemData->nId ),
mnPos( 0 ),
+ maCommand( NULL ),
mpVCLMenu( pItemData->pMenu ),
mpParentMenu( NULL ),
mpSubMenu( NULL ),
mpMenuItem( NULL ),
- mpAction( NULL )
+ mpStateType( NULL ),
+ mpState( NULL )
{
if ( pItemData->eType != MENUITEM_SEPARATOR ) {
mpMenuItem = g_lo_menu_item_new( "EMPTY STRING", NULL );
+
+ maCommand = g_strdup( rtl::OUStringToOString( mpVCLMenu->GetItemCommand( mnId ), RTL_TEXTENCODING_UTF8 ).getStr() );
+ gchar* aActionCommand = g_strconcat( "win.", maCommand, NULL );
+ g_lo_menu_item_set_action_and_target( mpMenuItem, aActionCommand, NULL );
+
+ g_free( aActionCommand );
}
}
@@ -513,5 +488,6 @@ GtkSalMenuItem::~GtkSalMenuItem()
{
if ( mpMenuItem ) {
g_object_unref( mpMenuItem );
+ g_free( maCommand );
}
}