1 /*****************************************************************************
3 * mui-gtk - a wrapper library to wrap GTK+ calls to MUI
5 * Copyright (C) 2005 Oliver Brunner
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 * Contact information:
25 * E-Mail: mui-gtk "at" oliver-brunner.de
29 *****************************************************************************/
32 #include <proto/utility.h>
37 #include "gtk_globals.h"
45 /*******************************************
47 *******************************************/
48 HOOKPROTO(MUIHook_menu
, ULONG
, MGTK_HOOK_OBJECT_POINTER obj
, MGTK_HOOK_APTR hookpointer
)
53 DebOut("MUIHook_menu(%x) called\n", (int) obj
);
54 widget
=mgtk_get_widget_from_obj(obj
);
56 g_signal_emit_by_name(widget
,"activate",0);
61 MakeHook(MyMuiHook_menu
, MUIHook_menu
);
63 /*******************************************
67 *******************************************/
68 static ULONG
mNew(struct IClass
*cl
, APTR obj
, Msg msg
)
71 struct TagItem
*tstate
, *tag
;
73 DebOut("mNew (menu)\n");
75 obj
= (APTR
)DoSuperMethodA(cl
, obj
, msg
);
78 ErrOut("menu: unable to create object!");
82 DebOut(" new obj=%lx\n",obj
);
84 tstate
=((struct opSet
*)msg
)->ops_AttrList
;
87 while ((tag
= (struct TagItem
*) NextTagItem(&tstate
)))
92 widget
= (GtkWidget
*) tag
->ti_Data
;
98 ErrOut("classes/menu.c: mNew: MA_Widget not supplied!\n");
102 DebOut(" widget=%d\n",widget
);
104 /* setup internal hooks */
105 DoMethod(obj
,MUIM_Notify
,MUIA_Menuitem_Trigger
,MUIV_EveryTime
, obj
,2,MUIM_CallHook
,&MyMuiHook_menu
);
117 /*******************************************
120 *******************************************/
121 static VOID
mSet(struct Data
*data
, APTR obj
, struct opSet
*msg
) {
122 DebOut("mSet(%lx,%lx,%lx)\n",data
,obj
,msg
);
124 struct TagItem
*tstate
, *tag
;
127 tstate
= msg
->ops_AttrList
;
129 while ((tag
= (struct TagItem
*) NextTagItem(&tstate
)))
138 /*******************************************
141 * MA_Widget: GtkWidget
142 *******************************************/
143 static ULONG
mGet(struct Data
*data
, APTR obj
, struct opGet
*msg
, struct IClass
*cl
)
147 switch (msg
->opg_AttrID
) {
149 DebOut("mGet: data->widget=%x\n",(int) data
->widget
);
150 rc
= (ULONG
) data
->widget
;
152 default: return DoSuperMethodA(cl
, obj
, (Msg
)msg
);
155 *msg
->opg_Storage
= rc
;
159 /*******************************************
161 *******************************************/
165 switch (msg
->MethodID
)
167 case OM_NEW
: return mNew (cl
, obj
, msg
);
168 case OM_SET
: mSet (data
, obj
, (APTR
)msg
); break;
169 case OM_GET
: return mGet (data
, obj
, (APTR
)msg
, cl
);
174 /*******************************************
175 * Custom class create/delete
176 *******************************************/
177 int mgtk_create_menu_class(void)
179 DebOut("mgtk_create_menu_class()\n");
181 CL_Menu
= MUI_CreateCustomClass(NULL
, MUIC_Menuitem
, NULL
, sizeof(struct Data
), (APTR
)&mDispatcher
);
183 DebOut("CL_Menu=%lx\n",CL_Menu
);
185 return CL_Menu
? 1 : 0;
188 void mgtk_delete_menu_class(void)
192 MUI_DeleteCustomClass(CL_Menu
);