static void gtk_image_menu_item_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (object); switch (prop_id) { case PROP_IMAGE: gtk_image_menu_item_set_image (image_menu_item, (GtkWidget *) g_value_get_object (value)); break; case PROP_USE_STOCK: G_GNUC_BEGIN_IGNORE_DEPRECATIONS; gtk_image_menu_item_set_use_stock (image_menu_item, g_value_get_boolean (value)); G_GNUC_END_IGNORE_DEPRECATIONS; break; case PROP_ALWAYS_SHOW_IMAGE: gtk_image_menu_item_set_always_show_image (image_menu_item, g_value_get_boolean (value)); break; case PROP_ACCEL_GROUP: G_GNUC_BEGIN_IGNORE_DEPRECATIONS; gtk_image_menu_item_set_accel_group (image_menu_item, g_value_get_object (value)); G_GNUC_END_IGNORE_DEPRECATIONS; break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
void Menu::create(Window *wnd,uint32_t st) { int i,n; char str[257]; #ifdef USE_WIN32 char buf[5]; #ifdef USE_WCHAR wchar_t wstr[257]; #endif #endif MenuItem *m; #ifdef USE_GTK GtkAccelGroup *accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW((GtkWindow *)((Window *)parent)->wnd),accel_group); component = (Component)gtk_menu_bar_new(); #endif #ifdef USE_WIN32 component = (Component)CreateMenu(); #endif window = wnd; for(i=0,m=items; m && i<nitems; ++i) { *str = '\0'; for(n=0; n<m->lvl; ++n) strcat(str,"--> "); strcat(str,m->name); debug_output("Menu::create(menu: index=%d,id='%d',parent='%d',child='%d',menuitem='%s')\n",m->index,m->id,m->parent? m->parent->id : -1,m->child? m->child->id : -1,str); #ifdef USE_GTK if(m->id==-1) { if(m->parent) { m->item = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL((GtkWidget *)m->parent->submenu),m->item); } } else { m->item = gtk_image_menu_item_new_with_label(m->name); if(m->icon) gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(m->item),GTK_WIDGET(gtk_image_new_from_stock(m->icon,GTK_ICON_SIZE_MENU))); if(!m->sensitive) gtk_widget_set_sensitive(m->item,false); if(m->acc!=-1) { gtk_image_menu_item_set_accel_group(GTK_IMAGE_MENU_ITEM(m->item),accel_group); gtk_widget_add_accelerator(m->item,"activate",accel_group,m->acc,(GdkModifierType)m->acc_mod,GTK_ACCEL_VISIBLE); } if(m->child) { m->submenu = (Component)gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(m->item),m->submenu); } if(m->parent) { gtk_menu_shell_append(GTK_MENU_SHELL(m->parent->submenu),m->item); if(!m->child) { debug_output("Menu::create(g_signal_connect: %s - %p)\n",m->name,m); if(event_handler) g_signal_connect(G_OBJECT(m->item),"activate",G_CALLBACK(menuitem_callback),(gpointer)m); } } else { gtk_menu_shell_append(GTK_MENU_SHELL((GtkWidget *)component),m->item); } } #endif #ifdef USE_WIN32 if(m->id==-1) { if(m->parent) AppendMenu((HMENU)m->parent->submenu,MF_SEPARATOR,0,0); } else { strcpy(str,m->name); if(m->acc!=-1) { strcat(str,"\t"); if((m->acc_mod&KEY_CONTROL)) strcat(str,"Ctrl-"); if((m->acc_mod&KEY_ALT)) strcat(str,"Alt-"); if((m->acc_mod&KEY_SHIFT)) strcat(str,"Shift-"); if(m->acc>=KEY_a && m->acc<=KEY_z) sprintf(buf,"%c",m->acc); else if(m->acc>=KEY_F1 && m->acc<=KEY_F12) sprintf(buf,"F%d",m->acc+1-KEY_F1); strcat(str,buf); } if(m->child) { m->submenu = (Component)CreatePopupMenu(); #ifdef USE_WCHAR char2w(wstr,str,256); debug_output("Menu::create(m: %p, wstr: %ls)\n",m,wstr); AppendMenu((HMENU)(m->parent? m->parent->submenu : component),MF_STRING|MF_POPUP,(UINT)m->submenu,wstr); #else AppendMenu((HMENU)(m->parent? m->parent->submenu : component),MF_STRING|MF_POPUP,(UINT)m->submenu,str); #endif } else if(m->parent) { #ifdef USE_WCHAR char2w(wstr,str,256); debug_output("Menu::create(m: %p, parent: %p, submenu: %p, wstr: %ls)\n",m,m->parent,m->parent? m->parent->submenu : 0,wstr); AppendMenu((HMENU)m->parent->submenu,MF_STRING,WIDGET_MAKE_ID(WIDGET_MENU,m->index),wstr); #else AppendMenu((HMENU)m->parent->submenu,MF_STRING,WIDGET_MAKE_ID(WIDGET_MENU,m->index),str); #endif } // if(!m->sensitive) gtk_widget_set_sensitive(m->item,false); // if(m->acc!=-1) { // gtk_image_menu_item_set_accel_group(GTK_IMAGE_MENU_ITEM(m->item),accel_group); // gtk_widget_add_accelerator(m->item,"activate",accel_group,m->acc,(GdkModifierType)m->acc_mod,GTK_ACCEL_VISIBLE); // } } #endif if(i==nitems-1) break; if(m->child) m = m->child; else if(items[m->index+1].parent==m->parent || m->parent) m = &items[m->index+1]; else break; } #ifdef USE_WIN32 SetMenu((HWND)((Window *)parent)->component,(HMENU)component); #endif }